├── app ├── libs │ └── .empty ├── .gitignore ├── src │ ├── main │ │ ├── res │ │ │ ├── values │ │ │ │ ├── dimens.xml │ │ │ │ ├── colors.xml │ │ │ │ ├── strings.xml │ │ │ │ └── themes.xml │ │ │ ├── values-land │ │ │ │ └── dimens.xml │ │ │ ├── values-w1240dp │ │ │ │ └── dimens.xml │ │ │ ├── values-w600dp │ │ │ │ └── dimens.xml │ │ │ ├── mipmap-hdpi │ │ │ │ ├── ic_launcher.webp │ │ │ │ └── ic_launcher_round.webp │ │ │ ├── mipmap-mdpi │ │ │ │ ├── ic_launcher.webp │ │ │ │ └── ic_launcher_round.webp │ │ │ ├── mipmap-xhdpi │ │ │ │ ├── ic_launcher.webp │ │ │ │ └── ic_launcher_round.webp │ │ │ ├── mipmap-xxhdpi │ │ │ │ ├── ic_launcher.webp │ │ │ │ └── ic_launcher_round.webp │ │ │ ├── mipmap-xxxhdpi │ │ │ │ ├── ic_launcher.webp │ │ │ │ └── ic_launcher_round.webp │ │ │ ├── mipmap-anydpi-v26 │ │ │ │ ├── ic_launcher.xml │ │ │ │ └── ic_launcher_round.xml │ │ │ ├── values-night │ │ │ │ └── themes.xml │ │ │ ├── layout │ │ │ │ ├── content_login.xml │ │ │ │ ├── fragment_second.xml │ │ │ │ ├── activity_login.xml │ │ │ │ ├── activity_main.xml │ │ │ │ └── fragment_first.xml │ │ │ ├── navigation │ │ │ │ └── nav_graph.xml │ │ │ ├── drawable-v24 │ │ │ │ └── ic_launcher_foreground.xml │ │ │ └── drawable │ │ │ │ └── ic_launcher_background.xml │ │ ├── java │ │ │ └── com │ │ │ │ └── github │ │ │ │ └── johnnymillergh │ │ │ │ └── android │ │ │ │ └── androidjetpackmvvmboilerplate │ │ │ │ ├── common │ │ │ │ ├── package-info.java │ │ │ │ ├── configuration │ │ │ │ │ ├── package-info.java │ │ │ │ │ ├── database │ │ │ │ │ │ ├── LocalDateTimeConverters.kt │ │ │ │ │ │ ├── DemoSQLiteDatabase.kt │ │ │ │ │ │ └── DatabaseModule.kt │ │ │ │ │ └── network │ │ │ │ │ │ └── NetworkModule.kt │ │ │ │ └── DebounceAndThrottle.kt │ │ │ │ ├── main │ │ │ │ ├── dao │ │ │ │ │ └── UserVisitRecordDao.kt │ │ │ │ ├── model │ │ │ │ │ └── UserVisitRecord.kt │ │ │ │ ├── repository │ │ │ │ │ └── MainActivityRepository.kt │ │ │ │ ├── viewmodel │ │ │ │ │ └── MainActivityVM.kt │ │ │ │ └── view │ │ │ │ │ └── MainActivity.kt │ │ │ │ ├── login │ │ │ │ ├── service │ │ │ │ │ └── DemoService.kt │ │ │ │ ├── viewmodel │ │ │ │ │ ├── FirstFragmentVM.kt │ │ │ │ │ └── SecondFragmentVM.kt │ │ │ │ ├── repository │ │ │ │ │ └── SecondFragmentRepository.kt │ │ │ │ ├── model │ │ │ │ │ └── NetworkUserListItem.kt │ │ │ │ └── view │ │ │ │ │ ├── LoginActivity.kt │ │ │ │ │ ├── FirstFragment.kt │ │ │ │ │ └── SecondFragment.kt │ │ │ │ └── AndroidJetpackMvvmBoilerplateApplication.kt │ │ └── AndroidManifest.xml │ ├── test │ │ └── java │ │ │ └── com │ │ │ └── github │ │ │ └── johnnymillergh │ │ │ └── android │ │ │ └── androidjetpackmvvmboilerplate │ │ │ └── ExampleUnitTest.kt │ └── androidTest │ │ └── java │ │ └── com │ │ └── github │ │ └── johnnymillergh │ │ └── android │ │ └── androidjetpackmvvmboilerplate │ │ └── ExampleInstrumentedTest.kt ├── proguard-rules.pro └── build.gradle ├── ajmb.keystore ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── settings.gradle ├── .github └── workflows │ └── main.yml ├── gradle.properties ├── CHANGELOG.md ├── gradlew.bat ├── .gitignore ├── README.md ├── gradlew └── LICENSE /app/libs/.empty: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | /schemas/ 3 | -------------------------------------------------------------------------------- /ajmb.keystore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnnymillergh/AndroidJetpackMVVMBoilerplate/HEAD/ajmb.keystore -------------------------------------------------------------------------------- /app/src/main/res/values/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 16dp 3 | 4 | -------------------------------------------------------------------------------- /app/src/main/res/values-land/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 48dp 3 | 4 | -------------------------------------------------------------------------------- /app/src/main/res/values-w1240dp/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 200dp 3 | 4 | -------------------------------------------------------------------------------- /app/src/main/res/values-w600dp/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 48dp 3 | 4 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnnymillergh/AndroidJetpackMVVMBoilerplate/HEAD/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnnymillergh/AndroidJetpackMVVMBoilerplate/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnnymillergh/AndroidJetpackMVVMBoilerplate/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnnymillergh/AndroidJetpackMVVMBoilerplate/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnnymillergh/AndroidJetpackMVVMBoilerplate/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnnymillergh/AndroidJetpackMVVMBoilerplate/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnnymillergh/AndroidJetpackMVVMBoilerplate/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnnymillergh/AndroidJetpackMVVMBoilerplate/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnnymillergh/AndroidJetpackMVVMBoilerplate/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnnymillergh/AndroidJetpackMVVMBoilerplate/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnnymillergh/AndroidJetpackMVVMBoilerplate/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /app/src/main/java/com/github/johnnymillergh/android/androidjetpackmvvmboilerplate/common/package-info.java: -------------------------------------------------------------------------------- 1 | package com.github.johnnymillergh.android.androidjetpackmvvmboilerplate.common; 2 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/johnnymillergh/android/androidjetpackmvvmboilerplate/common/configuration/package-info.java: -------------------------------------------------------------------------------- 1 | package com.github.johnnymillergh.android.androidjetpackmvvmboilerplate.common.configuration; 2 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Sat Sep 04 11:43:56 CST 2021 2 | distributionBase=GRADLE_USER_HOME 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-bin.zip 4 | distributionPath=wrapper/dists 5 | zipStorePath=wrapper/dists 6 | zipStoreBase=GRADLE_USER_HOME 7 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /settings.gradle: -------------------------------------------------------------------------------- 1 | dependencyResolutionManagement { 2 | repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) 3 | repositories { 4 | google() 5 | mavenCentral() 6 | jcenter() // Warning: this repository is going to shut down soon 7 | } 8 | } 9 | rootProject.name = "Android Jetpack MVVM Boilerplate" 10 | include ':app' 11 | -------------------------------------------------------------------------------- /app/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #FFBB86FC 4 | #FF6200EE 5 | #FF3700B3 6 | #FF03DAC5 7 | #FF018786 8 | #FF000000 9 | #FFFFFFFF 10 | 11 | -------------------------------------------------------------------------------- /app/src/test/java/com/github/johnnymillergh/android/androidjetpackmvvmboilerplate/ExampleUnitTest.kt: -------------------------------------------------------------------------------- 1 | package com.github.johnnymillergh.android.androidjetpackmvvmboilerplate 2 | 3 | import org.junit.Assert.assertEquals 4 | import org.junit.Test 5 | 6 | /** 7 | * Example local unit test, which will execute on the development machine (host). 8 | * 9 | * See [testing documentation](http://d.android.com/tools/testing). 10 | */ 11 | class ExampleUnitTest { 12 | @Test 13 | fun addition_isCorrect() { 14 | assertEquals(4, 2 + 2) 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/johnnymillergh/android/androidjetpackmvvmboilerplate/main/dao/UserVisitRecordDao.kt: -------------------------------------------------------------------------------- 1 | package com.github.johnnymillergh.android.androidjetpackmvvmboilerplate.main.dao 2 | 3 | import androidx.room.Dao 4 | import androidx.room.Insert 5 | import androidx.room.Query 6 | import com.github.johnnymillergh.android.androidjetpackmvvmboilerplate.main.model.UserVisitRecord 7 | 8 | @Dao 9 | interface UserVisitRecordDao { 10 | @Insert 11 | fun insert(userVisitRecord: UserVisitRecord) 12 | 13 | @Query("SELECT * FROM user_visit_record order by visit_time DESC") 14 | fun selectAll(): List 15 | } 16 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/johnnymillergh/android/androidjetpackmvvmboilerplate/login/service/DemoService.kt: -------------------------------------------------------------------------------- 1 | package com.github.johnnymillergh.android.androidjetpackmvvmboilerplate.login.service 2 | 3 | import com.github.johnnymillergh.android.androidjetpackmvvmboilerplate.login.model.NetworkUserListItem 4 | import retrofit2.http.GET 5 | 6 | /** 7 | * DemoService 8 | * 9 | * Change description here. 10 | * 11 | * @author Johnny Miller (锺俊), email: johnnysviva@outlook.com, 9/6/21: 8:47 PM 12 | **/ 13 | interface DemoService { 14 | @GET("/repos/square/retrofit/stargazers") 15 | suspend fun getUserList(): List 16 | } 17 | -------------------------------------------------------------------------------- /app/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | Android Jetpack MVVM Boilerplate 3 | LoginActivity 4 | 5 | First Fragment 6 | Second Fragment 7 | Next 8 | Previous 9 | 10 | Hello first fragment 11 | Hello second fragment. Arg: %1$s 12 | Click Me 13 | 14 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/johnnymillergh/android/androidjetpackmvvmboilerplate/login/viewmodel/FirstFragmentVM.kt: -------------------------------------------------------------------------------- 1 | package com.github.johnnymillergh.android.androidjetpackmvvmboilerplate.login.viewmodel 2 | 3 | import androidx.lifecycle.MutableLiveData 4 | import androidx.lifecycle.ViewModel 5 | import dagger.hilt.android.lifecycle.HiltViewModel 6 | import javax.inject.Inject 7 | 8 | /** 9 | * FirstFragmentVM 10 | * 11 | * Change description here. 12 | * 13 | * @author Johnny Miller (锺俊), email: johnnysviva@outlook.com, 9/4/21: 7:52 PM 14 | **/ 15 | @HiltViewModel 16 | class FirstFragmentVM @Inject constructor() : ViewModel() { 17 | val message = MutableLiveData().apply { 18 | value = "Hello from 1st fragment" 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/johnnymillergh/android/androidjetpackmvvmboilerplate/AndroidJetpackMvvmBoilerplateApplication.kt: -------------------------------------------------------------------------------- 1 | package com.github.johnnymillergh.android.androidjetpackmvvmboilerplate 2 | 3 | import android.app.Application 4 | import dagger.hilt.android.HiltAndroidApp 5 | import timber.log.Timber 6 | 7 | /** 8 | * AndroidJetpackMvvmBoilerplateApplication 9 | * 10 | * Change description here. 11 | * 12 | * @author Johnny Miller (锺俊), email: johnnysviva@outlook.com, date: 9/4/21 1:20 PM 13 | **/ 14 | @HiltAndroidApp 15 | class AndroidJetpackMvvmBoilerplateApplication : Application() { 16 | override fun onCreate() { 17 | super.onCreate() 18 | if (BuildConfig.DEBUG) { 19 | Timber.plant(Timber.DebugTree()) 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile 22 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/johnnymillergh/android/androidjetpackmvvmboilerplate/main/model/UserVisitRecord.kt: -------------------------------------------------------------------------------- 1 | package com.github.johnnymillergh.android.androidjetpackmvvmboilerplate.main.model; 2 | 3 | import androidx.room.ColumnInfo 4 | import androidx.room.Entity; 5 | import androidx.room.PrimaryKey 6 | import java.time.LocalDateTime 7 | 8 | /** 9 | * Description: UserVisitRecord, change description here. 10 | * 11 | * @author Johnny Miller (锺俊), email: johnnysviva@outlook.com, date: 9/6/2021 4:26 PM 12 | **/ 13 | @Entity(tableName = "user_visit_record") 14 | data class UserVisitRecord constructor( 15 | @PrimaryKey(autoGenerate = true) 16 | val id: Long?, 17 | val user: String, 18 | @ColumnInfo(name = "visit_time") 19 | val visitTime: LocalDateTime, 20 | @ColumnInfo(name = "os_version") 21 | val osVersion: String 22 | ) 23 | -------------------------------------------------------------------------------- /app/src/main/res/values-night/themes.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 16 | 17 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/johnnymillergh/android/androidjetpackmvvmboilerplate/common/configuration/database/LocalDateTimeConverters.kt: -------------------------------------------------------------------------------- 1 | package com.github.johnnymillergh.android.androidjetpackmvvmboilerplate.common.configuration.database 2 | 3 | import androidx.room.TypeConverter 4 | import java.time.Instant 5 | import java.time.LocalDateTime 6 | import java.time.ZoneOffset 7 | 8 | /** 9 | * Description: LocalDateTimeConverters, change description here. 10 | * 11 | * @author Johnny Miller (锺俊), email: johnnysviva@outlook.com, date: 9/6/2021 5:21 PM 12 | **/ 13 | class LocalDateTimeConverters { 14 | @TypeConverter 15 | fun fromTimestamp(value: Long?): LocalDateTime? { 16 | return value?.let { LocalDateTime.ofInstant(Instant.ofEpochMilli(it), ZoneOffset.of("+8")) } 17 | } 18 | 19 | @TypeConverter 20 | fun dateToTimestamp(date: LocalDateTime?): Long? { 21 | return date?.atZone(ZoneOffset.of("+8"))?.toInstant()?.toEpochMilli() 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /app/src/androidTest/java/com/github/johnnymillergh/android/androidjetpackmvvmboilerplate/ExampleInstrumentedTest.kt: -------------------------------------------------------------------------------- 1 | package com.github.johnnymillergh.android.androidjetpackmvvmboilerplate 2 | 3 | import androidx.test.ext.junit.runners.AndroidJUnit4 4 | import androidx.test.platform.app.InstrumentationRegistry 5 | import org.junit.Assert.assertEquals 6 | import org.junit.Test 7 | import org.junit.runner.RunWith 8 | 9 | /** 10 | * Instrumented test, which will execute on an Android device. 11 | * 12 | * See [testing documentation](http://d.android.com/tools/testing). 13 | */ 14 | @RunWith(AndroidJUnit4::class) 15 | class ExampleInstrumentedTest { 16 | @Test 17 | fun useAppContext() { 18 | // Context of the app under test. 19 | val appContext = InstrumentationRegistry.getInstrumentation().targetContext 20 | assertEquals( 21 | "com.github.johnnymillergh.android.androidjetpackmvvmboilerplate", 22 | appContext.packageName 23 | ) 24 | } 25 | } -------------------------------------------------------------------------------- /app/src/main/res/layout/content_login.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 19 | 20 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/johnnymillergh/android/androidjetpackmvvmboilerplate/login/repository/SecondFragmentRepository.kt: -------------------------------------------------------------------------------- 1 | package com.github.johnnymillergh.android.androidjetpackmvvmboilerplate.login.repository 2 | 3 | import com.github.johnnymillergh.android.androidjetpackmvvmboilerplate.login.model.NetworkUserListItem 4 | import com.github.johnnymillergh.android.androidjetpackmvvmboilerplate.login.service.DemoService 5 | import timber.log.Timber 6 | import javax.inject.Inject 7 | 8 | /** 9 | * SecondFragmentRepository 10 | * 11 | * Change description here. 12 | * 13 | * @author Johnny Miller (锺俊), email: johnnysviva@outlook.com, 9/6/21: 8:50 PM 14 | **/ 15 | class SecondFragmentRepository @Inject constructor( 16 | private val demoService: DemoService 17 | ) { 18 | suspend fun refreshUserList(): List { 19 | return try { 20 | demoService.getUserList() 21 | } catch (e: Exception) { 22 | Timber.e( 23 | e, 24 | "Exception occurred when getting user list! Exception message: ${e.message}" 25 | ) 26 | emptyList() 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/johnnymillergh/android/androidjetpackmvvmboilerplate/common/configuration/database/DemoSQLiteDatabase.kt: -------------------------------------------------------------------------------- 1 | package com.github.johnnymillergh.android.androidjetpackmvvmboilerplate.common.configuration.database 2 | 3 | import androidx.room.Database 4 | import androidx.room.RoomDatabase 5 | import androidx.room.TypeConverters 6 | import com.github.johnnymillergh.android.androidjetpackmvvmboilerplate.BuildConfig 7 | import com.github.johnnymillergh.android.androidjetpackmvvmboilerplate.main.dao.UserVisitRecordDao 8 | import com.github.johnnymillergh.android.androidjetpackmvvmboilerplate.main.model.UserVisitRecord 9 | 10 | /** 11 | * Description: DemoSQLiteDatabase, change description here. 12 | * 13 | * @author Johnny Miller (锺俊), email: johnnysviva@outlook.com, date: 9/6/2021 3:53 PM 14 | **/ 15 | @Database( 16 | entities = [ 17 | UserVisitRecord::class 18 | ], 19 | version = BuildConfig.DATABASE_VERSION_CODE 20 | ) 21 | @TypeConverters( 22 | value = [ 23 | LocalDateTimeConverters::class 24 | ] 25 | ) 26 | abstract class DemoSQLiteDatabase : RoomDatabase() { 27 | abstract val userVisitRecordDao: UserVisitRecordDao 28 | } 29 | -------------------------------------------------------------------------------- /.github/workflows/main.yml: -------------------------------------------------------------------------------- 1 | name: Android CI 2 | 3 | # Controls when the workflow will run 4 | on: 5 | # Triggers the workflow on push or pull request events but only for the main branch 6 | push: 7 | branches: 8 | - 'feature/**' 9 | - 'main' 10 | paths-ignore: 11 | - '**.md' 12 | 13 | # A workflow run is made up of one or more jobs that can run sequentially or in parallel 14 | jobs: 15 | # This workflow contains a single job called "build" 16 | build: 17 | # The type of runner that the job will run on 18 | runs-on: ubuntu-latest 19 | # Steps represent a sequence of tasks that will be executed as part of the job 20 | steps: 21 | # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it 22 | - uses: actions/checkout@v2 23 | - name: Set Up JDK 24 | uses: actions/setup-java@v2.3.0 25 | with: 26 | java-version: '11.0.10' 27 | distribution: 'adopt-hotspot' 28 | - name: Change Wrapper and Shellscipts Permissions 29 | run: | 30 | chmod +x ./gradlew 31 | # chmod +x ./shell/*.sh 32 | - name: Build Project 33 | run: ./gradlew clean build 34 | -------------------------------------------------------------------------------- /gradle.properties: -------------------------------------------------------------------------------- 1 | # Project-wide Gradle settings. 2 | # IDE (e.g. Android Studio) users: 3 | # Gradle settings configured through the IDE *will override* 4 | # any settings specified in this file. 5 | # For more details on how to configure your build environment visit 6 | # http://www.gradle.org/docs/current/userguide/build_environment.html 7 | # Specifies the JVM arguments used for the daemon process. 8 | # The setting is particularly useful for tweaking memory settings. 9 | org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8 10 | # When configured, Gradle will run in incubating parallel mode. 11 | # This option should only be used with decoupled projects. More details, visit 12 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects 13 | # org.gradle.parallel=true 14 | # AndroidX package structure to make it clearer which packages are bundled with the 15 | # Android operating system, and which are packaged with your app"s APK 16 | # https://developer.android.com/topic/libraries/support-library/androidx-rn 17 | android.useAndroidX=true 18 | # Automatically convert third-party libraries to use AndroidX 19 | android.enableJetifier=true 20 | # Kotlin code style for this project: "official" or "obsolete": 21 | kotlin.code.style=official -------------------------------------------------------------------------------- /app/src/main/res/values/themes.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 16 | 17 | 21 | 22 |