فهرست منبع

Merge remote-tracking branch 'sduduzog/master'

# Conflicts:
#       README.md
#       app/build.gradle
#       app/src/main/play/contact-email.txt
#       app/src/main/play/contact-website.txt
#       app/src/main/play/listings/en-US/full-description.txt
#       app/src/main/play/listings/en-US/graphics/feature-graphic/1.png
#       app/src/main/play/listings/en-US/graphics/icon/1.png
#       app/src/main/play/listings/en-US/graphics/phone-screenshots/1.png
#       app/src/main/play/listings/en-US/graphics/phone-screenshots/2.png
#       app/src/main/play/listings/en-US/graphics/promo-graphic/1.png
#       app/src/main/play/listings/en-US/short-description.txt
#       app/src/main/play/listings/en-US/title.txt
#       docs/index.html
Joshua Kuestersteffen 5 سال پیش
والد
کامیت
ac7c7c6d95
36فایلهای تغییر یافته به همراه585 افزوده شده و 263 حذف شده
  1. 0 92
      app/build.gradle
  2. 114 0
      app/build.gradle.kts
  3. 0 6
      app/src/androidTest/java/com/sduduzog/slimlauncher/TasksFragmentTest.kt
  4. 2 0
      app/src/main/AndroidManifest.xml
  5. 26 0
      app/src/main/java/com/sduduzog/slimlauncher/App.kt
  6. 19 1
      app/src/main/java/com/sduduzog/slimlauncher/MainActivity.kt
  7. 6 6
      app/src/main/java/com/sduduzog/slimlauncher/data/BaseDatabase.kt
  8. 11 0
      app/src/main/java/com/sduduzog/slimlauncher/di/ViewModelKey.kt
  9. 32 0
      app/src/main/java/com/sduduzog/slimlauncher/di/components/AppComponent.kt
  10. 20 0
      app/src/main/java/com/sduduzog/slimlauncher/di/factories/ViewModelFactory.kt
  11. 11 0
      app/src/main/java/com/sduduzog/slimlauncher/di/modules/ActivityModule.kt
  12. 40 0
      app/src/main/java/com/sduduzog/slimlauncher/di/modules/DbModule.kt
  13. 27 0
      app/src/main/java/com/sduduzog/slimlauncher/di/modules/FragmentModule.kt
  14. 31 0
      app/src/main/java/com/sduduzog/slimlauncher/di/modules/ViewModelModule.kt
  15. 5 4
      app/src/main/java/com/sduduzog/slimlauncher/models/AddAppViewModel.kt
  16. 5 4
      app/src/main/java/com/sduduzog/slimlauncher/models/CustomiseAppsViewModel.kt
  17. 5 4
      app/src/main/java/com/sduduzog/slimlauncher/models/MainViewModel.kt
  18. 3 7
      app/src/main/java/com/sduduzog/slimlauncher/models/Repository.kt
  19. 12 4
      app/src/main/java/com/sduduzog/slimlauncher/ui/main/HomeFragment.kt
  20. 15 7
      app/src/main/java/com/sduduzog/slimlauncher/ui/options/AddAppFragment.kt
  21. 13 6
      app/src/main/java/com/sduduzog/slimlauncher/ui/options/CustomiseAppsFragment.kt
  22. 0 2
      app/src/main/java/com/sduduzog/slimlauncher/ui/options/OpenAppsFragment.kt
  23. 7 2
      app/src/main/java/com/sduduzog/slimlauncher/ui/options/OptionsFragment.kt
  24. 2 1
      app/src/main/res/layout/home_motion_01.xml
  25. 2 1
      app/src/main/res/layout/home_motion_02.xml
  26. 1 1
      app/src/main/res/layout/open_apps_fragment.xml
  27. 16 0
      app/src/main/res/xml/home_motion_01_scene.xml
  28. 16 0
      app/src/main/res/xml/home_motion_02_scene.xml
  29. 4 5
      build.gradle.kts
  30. 1 3
      gradle.properties
  31. BIN
      gradle/wrapper/gradle-wrapper.jar
  32. 1 2
      gradle/wrapper/gradle-wrapper.properties
  33. 33 20
      gradlew
  34. 104 84
      gradlew.bat
  35. 0 1
      settings.gradle
  36. 1 0
      settings.gradle.kts

+ 0 - 92
app/build.gradle

@@ -1,92 +0,0 @@
-plugins{
-    id 'com.android.application'
-
-    id'kotlin-android'
-
-    id 'kotlin-android-extensions'
-
-    id 'kotlin-kapt'
-}
-
-android {
-    dataBinding {
-        enabled = true
-    }
-    compileSdkVersion 29
-    defaultConfig {
-        applicationId "com.jkuester.unlauncher"
-        minSdkVersion 21
-        targetSdkVersion 29
-        versionCode 2
-        versionName "0.0.2"
-        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
-        vectorDrawables.useSupportLibrary = true
-    }
-
-    buildTypes {
-        release {
-            minifyEnabled true
-            shrinkResources true
-            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
-        }
-        debug {
-            minifyEnabled false
-            applicationIdSuffix ".debug"
-            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
-        }
-    }
-    compileOptions {
-        sourceCompatibility = JavaVersion.VERSION_1_8
-        targetCompatibility = JavaVersion.VERSION_1_8
-    }
-    kotlinOptions {
-        jvmTarget = "1.8"
-    }
-    lintOptions{
-        disable 'MissingTranslation'
-    }
-    applicationVariants.all { variant ->
-        variant.outputs.all {
-            outputFileName = "${applicationId}.apk"
-        }
-    }
-}
-
-dependencies {
-    implementation fileTree(include: ['*.jar'], dir: 'libs')
-
-    // Kotlin Libraries
-    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
-
-    // Support Libraries
-    implementation 'androidx.appcompat:appcompat:1.0.2'
-    implementation 'androidx.recyclerview:recyclerview:1.0.0'
-    implementation 'androidx.constraintlayout:constraintlayout:2.0.0-beta2'
-
-    // Arch Components
-    implementation 'androidx.core:core-ktx:1.2.0-alpha03'
-    implementation 'androidx.lifecycle:lifecycle-extensions:2.0.0'
-    implementation 'android.arch.navigation:navigation-fragment:1.0.0'
-    implementation 'androidx.room:room-runtime:2.1.0'
-    implementation "androidx.lifecycle:lifecycle-common-java8:2.0.0"
-    implementation 'androidx.legacy:legacy-support-v4:1.0.0'
-    kapt "androidx.room:room-compiler:2.1.0"
-
-    //3rd party libs
-    implementation 'com.intuit.sdp:sdp-android:1.0.6'
-    implementation 'com.intuit.ssp:ssp-android:1.0.6'
-
-    // Test libs
-    testImplementation 'junit:junit:4.12'
-    testImplementation 'org.mockito:mockito-core:2.19.0'
-    androidTestImplementation 'androidx.room:room-testing:2.1.0'
-    androidTestImplementation 'androidx.test:runner:1.2.0'
-    androidTestImplementation 'androidx.test:rules:1.2.0'
-    androidTestImplementation 'androidx.annotation:annotation:1.1.0'
-    androidTestImplementation 'androidx.test:runner:1.2.0'
-    androidTestImplementation 'androidx.test:rules:1.2.0'
-    androidTestImplementation "androidx.arch.core:core-testing:2.0.1"
-    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
-    androidTestImplementation 'androidx.test.espresso:espresso-intents:3.2.0'
-
-}

+ 114 - 0
app/build.gradle.kts

@@ -0,0 +1,114 @@
+plugins {
+    id("com.android.application")
+//    id("com.github.triplet.play") version "2.8.0"
+    kotlin("android")
+    kotlin("android.extensions")
+    kotlin("kapt")
+}
+
+android {
+    compileSdkVersion(29)
+    defaultConfig {
+        applicationId = "com.jkuester.unlauncher"
+        minSdkVersion(21)
+        targetSdkVersion(29)
+        versionCode = 2
+        versionName = "0.0.2"
+        testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
+        vectorDrawables{useSupportLibrary = true}
+
+//        signingConfigs {
+//            register("release") {
+//                storeFile = file(project.extra["RELEASE_STORE_FILE"] as String)
+//                storePassword = project.extra["RELEASE_STORE_PASSWORD"] as String
+//                keyAlias = project.extra["RELEASE_KEY_ALIAS"] as String
+//                keyPassword = project.extra["RELEASE_KEY_PASSWORD"] as String
+//            }
+//        }
+    }
+
+
+
+    buildTypes {
+        named("release").configure {
+            isMinifyEnabled = true
+            isShrinkResources = true
+            proguardFiles(getDefaultProguardFile ("proguard-android-optimize.txt"), "proguard-rules.pro")
+//            signingConfig = signingConfigs.getByName("release")
+        }
+        named("debug").configure {
+            isMinifyEnabled = false
+            proguardFiles (getDefaultProguardFile ("proguard-android-optimize.txt"), "proguard-rules.pro")
+        }
+    }
+    compileOptions {
+        sourceCompatibility = JavaVersion.VERSION_1_8
+        targetCompatibility = JavaVersion.VERSION_1_8
+    }
+    kotlinOptions{
+        jvmTarget = JavaVersion.VERSION_1_8.toString()
+    }
+    lintOptions{
+        disable = mutableSetOf("MissingTranslation")
+    }
+    applicationVariants.all{
+        outputs.all {
+            (this as com.android.build.gradle.internal.api.BaseVariantOutputImpl).outputFileName = "${applicationId}.apk"
+        }
+    }
+}
+//play {
+//    serviceAccountCredentials = file(project.extra["RELEASE_GPP_KEY"] as String)
+//    track = "beta"
+//    userFraction = 1.0
+//    releaseStatus = "inProgress"
+//    defaultToAppBundles = true
+//
+//    resolutionStrategy = "auto"
+//    outputProcessor { // this: ApkVariantOutput
+//        versionNameOverride = "$versionNameOverride.$versionCode"
+//    }
+//}
+dependencies {
+    implementation(fileTree(mapOf("dir" to "libs", "include" to listOf("*.jar"))))
+
+    // Kotlin Libraries
+    implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.72")
+
+    // Support Libraries
+    implementation("androidx.appcompat:appcompat:1.1.0")
+    implementation("androidx.recyclerview:recyclerview:1.1.0")
+    implementation("androidx.constraintlayout:constraintlayout:2.0.0-beta7")
+
+    // Arch Components
+    implementation("androidx.core:core-ktx:1.5.0-alpha01")
+    implementation("androidx.lifecycle:lifecycle-extensions:2.2.0")
+    implementation("android.arch.navigation:navigation-fragment:1.0.0")
+    implementation("androidx.room:room-runtime:2.2.5")
+    implementation("androidx.lifecycle:lifecycle-common-java8:2.2.0")
+    kapt("androidx.room:room-compiler:2.2.5")
+
+    //3rd party libs
+    implementation("com.intuit.sdp:sdp-android:1.0.6")
+    implementation("com.intuit.ssp:ssp-android:1.0.6")
+
+    implementation("com.google.dagger:dagger-android:2.17")
+    implementation("com.google.dagger:dagger-android-support:2.17")
+    kapt("com.google.dagger:dagger-android-processor:2.17")
+    kapt("com.google.dagger:dagger-compiler:2.17")
+
+
+    // Test libs
+    testImplementation("junit:junit:4.12")
+    testImplementation("org.mockito:mockito-core:2.19.0")
+    androidTestImplementation("androidx.room:room-testing:2.2.5")
+    androidTestImplementation("androidx.test:runner:1.2.0")
+    androidTestImplementation("androidx.test:rules:1.2.0")
+    androidTestImplementation("androidx.annotation:annotation:1.1.0")
+    androidTestImplementation("androidx.test:runner:1.2.0")
+    androidTestImplementation("androidx.test:rules:1.2.0")
+    androidTestImplementation("androidx.arch.core:core-testing:2.1.0")
+    androidTestImplementation("androidx.test.espresso:espresso-core:3.2.0")
+    androidTestImplementation("androidx.test.espresso:espresso-intents:3.2.0")
+
+}

+ 0 - 6
app/src/androidTest/java/com/sduduzog/slimlauncher/TasksFragmentTest.kt

@@ -1,15 +1,9 @@
 package com.sduduzog.slimlauncher
 
 
-import android.view.KeyEvent
-import androidx.test.espresso.Espresso.onView
-import androidx.test.espresso.action.ViewActions.*
-import androidx.test.espresso.assertion.ViewAssertions.matches
-import androidx.test.espresso.matcher.ViewMatchers.*
 import androidx.test.filters.LargeTest
 import androidx.test.internal.runner.junit4.AndroidJUnit4ClassRunner
 import androidx.test.rule.ActivityTestRule
-import org.hamcrest.CoreMatchers.allOf
 import org.junit.Rule
 import org.junit.Test
 import org.junit.runner.RunWith

+ 2 - 0
app/src/main/AndroidManifest.xml

@@ -6,6 +6,7 @@
     <uses-permission android:name="com.android.alarm.permission.SET_ALARM" />
 
     <application
+        android:name=".App"
         android:allowBackup="false"
         android:configChanges="orientation|keyboardHidden|screenSize"
         android:icon="@mipmap/ic_launcher"
@@ -19,6 +20,7 @@
             android:name=".MainActivity"
             android:launchMode="singleTask"
             android:screenOrientation="portrait"
+            tools:ignore="LockedOrientationActivity"
             android:stateNotNeeded="true">
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />

+ 26 - 0
app/src/main/java/com/sduduzog/slimlauncher/App.kt

@@ -0,0 +1,26 @@
+package com.sduduzog.slimlauncher
+
+import android.app.Activity
+import android.app.Application
+import com.sduduzog.slimlauncher.di.components.DaggerAppComponent
+import dagger.android.AndroidInjector
+import dagger.android.DispatchingAndroidInjector
+import dagger.android.HasActivityInjector
+import javax.inject.Inject
+
+class App : Application(), HasActivityInjector {
+    @Inject
+    lateinit var dispatchingAndroidInjector: DispatchingAndroidInjector<Activity>
+
+    override fun activityInjector(): AndroidInjector<Activity> {
+        return dispatchingAndroidInjector
+    }
+
+    override fun onCreate() {
+        super.onCreate()
+        DaggerAppComponent.builder()
+                .application(this)
+                .build()
+                .inject(this)
+    }
+}

+ 19 - 1
app/src/main/java/com/sduduzog/slimlauncher/MainActivity.kt

@@ -5,14 +5,31 @@ import android.content.res.Resources
 import android.os.Bundle
 import android.view.View
 import androidx.appcompat.app.AppCompatActivity
+import androidx.fragment.app.Fragment
+import androidx.lifecycle.ViewModelProvider
 import androidx.navigation.NavController
 import androidx.navigation.Navigation.findNavController
 import com.sduduzog.slimlauncher.utils.BaseFragment
 import com.sduduzog.slimlauncher.utils.HomeWatcher
+import dagger.android.AndroidInjection
+import dagger.android.AndroidInjector
+import dagger.android.DispatchingAndroidInjector
+import dagger.android.support.HasSupportFragmentInjector
+import javax.inject.Inject
 
 
-class MainActivity : AppCompatActivity(), SharedPreferences.OnSharedPreferenceChangeListener, HomeWatcher.OnHomePressedListener {
+class MainActivity : AppCompatActivity(),
+        SharedPreferences.OnSharedPreferenceChangeListener,
+        HomeWatcher.OnHomePressedListener , HasSupportFragmentInjector{
 
+    @Inject
+    lateinit var dispatchingAndroidInjector: DispatchingAndroidInjector<Fragment>
+    override fun supportFragmentInjector(): AndroidInjector<Fragment> {
+        return dispatchingAndroidInjector
+    }
+
+    @Inject
+    internal lateinit var viewModelFactory: ViewModelProvider.Factory
     private lateinit var settings: SharedPreferences
     private lateinit var navigator: NavController
     private lateinit var homeWatcher: HomeWatcher
@@ -36,6 +53,7 @@ class MainActivity : AppCompatActivity(), SharedPreferences.OnSharedPreferenceCh
     }
 
     override fun onCreate(savedInstanceState: Bundle?) {
+        AndroidInjection.inject(this)
         super.onCreate(savedInstanceState)
         setContentView(R.layout.main_activity)
         settings = getSharedPreferences(getString(R.string.prefs_settings), MODE_PRIVATE)

+ 6 - 6
app/src/main/java/com/sduduzog/slimlauncher/data/BaseDatabase.kt

@@ -38,7 +38,7 @@ abstract class BaseDatabase : RoomDatabase() {
             }
         }
 
-        private val MIGRATION_1_2 = object : Migration(1, 2) {
+         val MIGRATION_1_2 = object : Migration(1, 2) {
             override fun migrate(database: SupportSQLiteDatabase) {
                 database.execSQL("ALTER TABLE `home_apps` ADD COLUMN `sorting_index` INTEGER NOT NULL DEFAULT 0")
                 val cursor = database.query("SELECT package_name FROM home_apps")
@@ -53,20 +53,20 @@ abstract class BaseDatabase : RoomDatabase() {
             }
         }
 
-        private val MIGRATION_2_3 = object : Migration(2, 3) {
+         val MIGRATION_2_3 = object : Migration(2, 3) {
             override fun migrate(database: SupportSQLiteDatabase) {
                 database.execSQL("CREATE TABLE IF NOT EXISTS `notes` (`id` INTEGER PRIMARY KEY AUTOINCREMENT, `title` TEXT, `body` TEXT NOT NULL, `edited` INTEGER NOT NULL)")
             }
         }
 
-        private val MIGRATION_3_4 = object : Migration(3, 4) {
+         val MIGRATION_3_4 = object : Migration(3, 4) {
             override fun migrate(database: SupportSQLiteDatabase) {
                 database.execSQL("DROP TABLE IF EXISTS `apps`")
                 database.execSQL("CREATE TABLE IF NOT EXISTS `tasks` (`id` INTEGER PRIMARY KEY AUTOINCREMENT, `body` TEXT NOT NULL, `is_complete` INTEGER NOT NULL, `sorting_index` INTEGER NOT NULL)")
             }
         }
 
-        private val MIGRATION_4_5 = object : Migration(4, 5) {
+         val MIGRATION_4_5 = object : Migration(4, 5) {
             override fun migrate(database: SupportSQLiteDatabase) {
                 database.execSQL("ALTER TABLE `notes` RENAME TO `notes_old`")
                 database.execSQL("CREATE TABLE IF NOT EXISTS `notes` (`id` INTEGER PRIMARY KEY NOT NULL, `body` TEXT NOT NULL, `title` TEXT, `edited` INTEGER NOT NULL)")
@@ -75,13 +75,13 @@ abstract class BaseDatabase : RoomDatabase() {
                 database.execSQL("ALTER TABLE `notes` ADD COLUMN `filename` TEXT")
             }
         }
-        private val MIGRATION_5_6 = object : Migration(5, 6) {
+         val MIGRATION_5_6 = object : Migration(5, 6) {
             override fun migrate(database: SupportSQLiteDatabase) {
                 database.execSQL("DROP TABLE IF EXISTS `notes`")
                 database.execSQL("DROP TABLE IF EXISTS `tasks`")
             }
         }
-        private val MIGRATION_6_7 = object : Migration(6, 7){
+         val MIGRATION_6_7 = object : Migration(6, 7){
             override fun migrate(database: SupportSQLiteDatabase) {
                database.execSQL("ALTER TABLE `home_apps` ADD COLUMN `app_nickname` TEXT")
             }

+ 11 - 0
app/src/main/java/com/sduduzog/slimlauncher/di/ViewModelKey.kt

@@ -0,0 +1,11 @@
+package com.sduduzog.slimlauncher.di
+
+import androidx.lifecycle.ViewModel
+import dagger.MapKey
+import kotlin.reflect.KClass
+
+@Target(AnnotationTarget.FUNCTION,
+        AnnotationTarget.PROPERTY_GETTER,
+        AnnotationTarget.PROPERTY_SETTER)
+@MapKey
+annotation class ViewModelKey(val value: KClass<out ViewModel>)

+ 32 - 0
app/src/main/java/com/sduduzog/slimlauncher/di/components/AppComponent.kt

@@ -0,0 +1,32 @@
+package com.sduduzog.slimlauncher.di.components
+
+import android.app.Application
+import com.sduduzog.slimlauncher.App
+import com.sduduzog.slimlauncher.di.modules.ActivityModule
+import com.sduduzog.slimlauncher.di.modules.DbModule
+import com.sduduzog.slimlauncher.di.modules.FragmentModule
+import com.sduduzog.slimlauncher.di.modules.ViewModelModule
+import dagger.BindsInstance
+import dagger.Component
+import dagger.android.support.AndroidSupportInjectionModule
+import javax.inject.Singleton
+
+@Component(modules = [
+    ActivityModule::class,
+    DbModule::class,
+    FragmentModule::class,
+    ViewModelModule::class,
+    AndroidSupportInjectionModule::class
+])
+@Singleton
+interface AppComponent {
+    @Component.Builder
+    interface Builder{
+        @BindsInstance
+        fun application(application: Application): Builder
+
+        fun build(): AppComponent
+    }
+
+    fun inject(app: App)
+}

+ 20 - 0
app/src/main/java/com/sduduzog/slimlauncher/di/factories/ViewModelFactory.kt

@@ -0,0 +1,20 @@
+package com.sduduzog.slimlauncher.di.factories
+
+import androidx.lifecycle.ViewModel
+import androidx.lifecycle.ViewModelProvider
+import javax.inject.Inject
+import javax.inject.Provider
+
+class ViewModelFactory @Inject
+constructor(private val viewModels: MutableMap<Class<out ViewModel>, Provider<ViewModel>>) : ViewModelProvider.Factory {
+    @Suppress("UNCHECKED_CAST")
+    override fun <T : ViewModel?> create(modelClass: Class<T>): T {
+        val creator = viewModels[modelClass]
+                ?: viewModels.asIterable().firstOrNull{ modelClass.isAssignableFrom(it.key)}?.value
+        return try {
+            creator?.get() as T
+        } catch (e: Exception){
+            throw RuntimeException(e)
+        }
+    }
+}

+ 11 - 0
app/src/main/java/com/sduduzog/slimlauncher/di/modules/ActivityModule.kt

@@ -0,0 +1,11 @@
+package com.sduduzog.slimlauncher.di.modules
+
+import com.sduduzog.slimlauncher.MainActivity
+import dagger.Module
+import dagger.android.ContributesAndroidInjector
+
+@Module
+abstract class ActivityModule {
+    @ContributesAndroidInjector()
+    abstract fun contributeMainActivity(): MainActivity
+}

+ 40 - 0
app/src/main/java/com/sduduzog/slimlauncher/di/modules/DbModule.kt

@@ -0,0 +1,40 @@
+package com.sduduzog.slimlauncher.di.modules
+
+import android.app.Application
+import androidx.room.Room
+import com.sduduzog.slimlauncher.data.BaseDao
+import com.sduduzog.slimlauncher.data.BaseDatabase
+import com.sduduzog.slimlauncher.data.BaseDatabase.Companion.MIGRATION_1_2
+import com.sduduzog.slimlauncher.data.BaseDatabase.Companion.MIGRATION_2_3
+import com.sduduzog.slimlauncher.data.BaseDatabase.Companion.MIGRATION_3_4
+import com.sduduzog.slimlauncher.data.BaseDatabase.Companion.MIGRATION_4_5
+import com.sduduzog.slimlauncher.data.BaseDatabase.Companion.MIGRATION_5_6
+import com.sduduzog.slimlauncher.data.BaseDatabase.Companion.MIGRATION_6_7
+import dagger.Module
+import dagger.Provides
+import javax.inject.Singleton
+
+@Module
+class DbModule {
+    @Provides
+    @Singleton
+    internal fun provideBaseDatabase(application: Application) : BaseDatabase{
+        return Room.databaseBuilder(application,
+                        BaseDatabase::class.java, "app_database")
+                .addMigrations(
+                        MIGRATION_1_2,
+                        MIGRATION_2_3,
+                        MIGRATION_3_4,
+                        MIGRATION_4_5,
+                        MIGRATION_5_6,
+                        MIGRATION_6_7
+                )
+                .build()
+    }
+
+    @Provides
+    @Singleton
+    internal fun provideBaseDao(baseDatabase: BaseDatabase) : BaseDao {
+        return baseDatabase.baseDao()
+    }
+}

+ 27 - 0
app/src/main/java/com/sduduzog/slimlauncher/di/modules/FragmentModule.kt

@@ -0,0 +1,27 @@
+package com.sduduzog.slimlauncher.di.modules
+
+import com.sduduzog.slimlauncher.ui.main.HomeFragment
+import com.sduduzog.slimlauncher.ui.options.AddAppFragment
+import com.sduduzog.slimlauncher.ui.options.CustomiseAppsFragment
+import com.sduduzog.slimlauncher.ui.options.OpenAppsFragment
+import com.sduduzog.slimlauncher.ui.options.OptionsFragment
+import dagger.Module
+import dagger.android.ContributesAndroidInjector
+
+@Module
+abstract class FragmentModule {
+    @ContributesAndroidInjector
+    abstract fun contributesHomeFragment() : HomeFragment
+    @ContributesAndroidInjector
+
+    abstract fun contributesOptionsFragment() : OptionsFragment
+    @ContributesAndroidInjector
+
+    abstract fun contributesCustomiseAppsFragment() : CustomiseAppsFragment
+    @ContributesAndroidInjector
+
+    abstract fun contributesAddAppFragment() : AddAppFragment
+
+    @ContributesAndroidInjector
+    abstract fun contributeOpenAppsFragment() : OpenAppsFragment
+}

+ 31 - 0
app/src/main/java/com/sduduzog/slimlauncher/di/modules/ViewModelModule.kt

@@ -0,0 +1,31 @@
+package com.sduduzog.slimlauncher.di.modules
+
+import androidx.lifecycle.ViewModel
+import androidx.lifecycle.ViewModelProvider
+import com.sduduzog.slimlauncher.di.ViewModelKey
+import com.sduduzog.slimlauncher.di.factories.ViewModelFactory
+import com.sduduzog.slimlauncher.models.AddAppViewModel
+import com.sduduzog.slimlauncher.models.CustomiseAppsViewModel
+import com.sduduzog.slimlauncher.models.MainViewModel
+import dagger.Binds
+import dagger.Module
+import dagger.multibindings.IntoMap
+
+@Module
+internal abstract class ViewModelModule {
+    @Binds
+    internal abstract fun bindViewModelFactory(factory: ViewModelFactory) : ViewModelProvider.Factory
+
+    @Binds
+    @IntoMap
+    @ViewModelKey(MainViewModel::class)
+    protected abstract fun mainViewModel(mainViewModel: MainViewModel): ViewModel
+    @Binds
+    @IntoMap
+    @ViewModelKey(AddAppViewModel::class)
+    protected abstract fun addAppViewModel(addAppViewModel: AddAppViewModel): ViewModel
+    @Binds
+    @IntoMap
+    @ViewModelKey(CustomiseAppsViewModel::class)
+    protected abstract fun customiseAppsViewModel(customiseAppsViewModel: CustomiseAppsViewModel): ViewModel
+}

+ 5 - 4
app/src/main/java/com/sduduzog/slimlauncher/models/AddAppViewModel.kt

@@ -1,13 +1,14 @@
 package com.sduduzog.slimlauncher.models
 
-import android.app.Application
-import androidx.lifecycle.AndroidViewModel
 import androidx.lifecycle.MutableLiveData
 import androidx.lifecycle.Observer
+import androidx.lifecycle.ViewModel
+import com.sduduzog.slimlauncher.data.BaseDao
 import com.sduduzog.slimlauncher.data.model.App
+import javax.inject.Inject
 
-class AddAppViewModel(application: Application) : AndroidViewModel(application) {
-    private val repository = Repository(application)
+class AddAppViewModel @Inject constructor (baseDao: BaseDao) : ViewModel() {
+    private val repository = Repository(baseDao)
     private var filterQuery = ""
     private val _installedApps = mutableListOf<App>()
     private val _homeApps = mutableListOf<App>()

+ 5 - 4
app/src/main/java/com/sduduzog/slimlauncher/models/CustomiseAppsViewModel.kt

@@ -1,12 +1,13 @@
 package com.sduduzog.slimlauncher.models
 
-import android.app.Application
-import androidx.lifecycle.AndroidViewModel
 import androidx.lifecycle.LiveData
+import androidx.lifecycle.ViewModel
+import com.sduduzog.slimlauncher.data.BaseDao
+import javax.inject.Inject
 
-class CustomiseAppsViewModel(application: Application) : AndroidViewModel(application) {
+class CustomiseAppsViewModel @Inject constructor(baseDao: BaseDao) : ViewModel() {
 
-    private val repository = Repository(application)
+    private val repository = Repository(baseDao)
     private var _apps: LiveData<List<HomeApp>>
 
     init {

+ 5 - 4
app/src/main/java/com/sduduzog/slimlauncher/models/MainViewModel.kt

@@ -1,13 +1,14 @@
 package com.sduduzog.slimlauncher.models
 
-import android.app.Application
-import androidx.lifecycle.AndroidViewModel
 import androidx.lifecycle.LiveData
+import androidx.lifecycle.ViewModel
+import com.sduduzog.slimlauncher.data.BaseDao
 import com.sduduzog.slimlauncher.data.model.App
+import javax.inject.Inject
 
-class MainViewModel(application: Application) : AndroidViewModel(application) {
+class MainViewModel @Inject constructor(baseDao: BaseDao) : ViewModel() {
 
-    private val _baseRepository = Repository(application)
+    private val _baseRepository = Repository(baseDao)
 
     private var _apps: LiveData<List<HomeApp>>
 

+ 3 - 7
app/src/main/java/com/sduduzog/slimlauncher/models/Repository.kt

@@ -1,16 +1,12 @@
 package com.sduduzog.slimlauncher.models
 
-import android.app.Application
 import android.os.AsyncTask
 import androidx.lifecycle.LiveData
 import com.sduduzog.slimlauncher.data.BaseDao
-import com.sduduzog.slimlauncher.data.BaseDatabase
+import javax.inject.Singleton
 
-class Repository(application: Application) {
-
-    private val database: BaseDatabase = BaseDatabase.getDatabase(application)!!
-
-    private val baseDao: BaseDao = database.baseDao()
+@Singleton
+class Repository(private val baseDao: BaseDao) {
 
     private val _apps = baseDao.apps
 

+ 12 - 4
app/src/main/java/com/sduduzog/slimlauncher/ui/main/HomeFragment.kt

@@ -8,24 +8,32 @@ import android.view.LayoutInflater
 import android.view.View
 import android.view.ViewGroup
 import androidx.lifecycle.Observer
-import androidx.lifecycle.ViewModelProviders
+import androidx.lifecycle.ViewModelProvider
 import androidx.navigation.Navigation
 import com.sduduzog.slimlauncher.R
 import com.sduduzog.slimlauncher.adapters.HomeAdapter
-import com.sduduzog.slimlauncher.models.MainViewModel
 import com.sduduzog.slimlauncher.models.HomeApp
+import com.sduduzog.slimlauncher.models.MainViewModel
 import com.sduduzog.slimlauncher.utils.BaseFragment
 import com.sduduzog.slimlauncher.utils.OnLaunchAppListener
+import dagger.android.support.AndroidSupportInjection
 import kotlinx.android.synthetic.main.home_fragment.*
 import java.text.SimpleDateFormat
 import java.util.*
+import javax.inject.Inject
 
 
 class HomeFragment : BaseFragment(), OnLaunchAppListener {
 
+    @Inject
+    internal lateinit var viewModelFactory: ViewModelProvider.Factory
     private lateinit var receiver: BroadcastReceiver
     private lateinit var viewModel: MainViewModel
 
+    override fun onCreate(savedInstanceState: Bundle?) {
+        super.onCreate(savedInstanceState)
+        AndroidSupportInjection.inject(this)
+    }
     override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
                               savedInstanceState: Bundle?): View {
         return inflater.inflate(R.layout.home_fragment, container, false)
@@ -39,10 +47,10 @@ class HomeFragment : BaseFragment(), OnLaunchAppListener {
         home_fragment_list_exp.adapter = adapter2
 
         activity?.let {
-            viewModel = ViewModelProviders.of(it).get(MainViewModel::class.java)
+            viewModel = ViewModelProvider(it, viewModelFactory).get(MainViewModel::class.java)
         } ?: throw Error("Activity null, something here is fucked up")
 
-        viewModel.apps.observe(this, Observer { list ->
+        viewModel.apps.observe(viewLifecycleOwner, Observer { list ->
             list?.let { apps ->
                 adapter1.setItems(apps.filter {
                     it.sortingIndex < 4

+ 15 - 7
app/src/main/java/com/sduduzog/slimlauncher/ui/options/AddAppFragment.kt

@@ -9,7 +9,7 @@ import android.view.LayoutInflater
 import android.view.View
 import android.view.ViewGroup
 import androidx.lifecycle.Observer
-import androidx.lifecycle.ViewModelProviders
+import androidx.lifecycle.ViewModelProvider
 import androidx.navigation.Navigation
 import com.sduduzog.slimlauncher.BuildConfig
 import com.sduduzog.slimlauncher.R
@@ -18,15 +18,22 @@ import com.sduduzog.slimlauncher.data.model.App
 import com.sduduzog.slimlauncher.models.AddAppViewModel
 import com.sduduzog.slimlauncher.utils.BaseFragment
 import com.sduduzog.slimlauncher.utils.OnAppClickedListener
+import dagger.android.support.AndroidSupportInjection
 import kotlinx.android.synthetic.main.add_app_fragment.*
 import java.util.*
+import javax.inject.Inject
 
 open class AddAppFragment : BaseFragment(), OnAppClickedListener {
 
     override fun getFragmentView(): ViewGroup = add_app_fragment
 
+    @Inject
+    internal lateinit var viewModelFactory: ViewModelProvider.Factory
     private lateinit var viewModel: AddAppViewModel
-
+    override fun onCreate(savedInstanceState: Bundle?) {
+        super.onCreate(savedInstanceState)
+        AndroidSupportInjection.inject(this)
+    }
     override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
         return inflater.inflate(R.layout.add_app_fragment, container, false)
     }
@@ -38,9 +45,9 @@ open class AddAppFragment : BaseFragment(), OnAppClickedListener {
         add_app_fragment_list.adapter = adapter
 
         activity?.let {
-            viewModel = ViewModelProviders.of(it).get(AddAppViewModel::class.java)
+            viewModel = ViewModelProvider(it, viewModelFactory).get(AddAppViewModel::class.java)
         } ?: throw Error("How the fuck is this fragment alive while there's no activity?")
-        viewModel.apps.observe(this, Observer {
+        viewModel.apps.observe(viewLifecycleOwner, Observer {
             it?.let { apps ->
                 adapter.setItems(apps)
                 add_app_fragment_progress_bar.visibility = View.GONE
@@ -48,16 +55,17 @@ open class AddAppFragment : BaseFragment(), OnAppClickedListener {
                 add_app_fragment_progress_bar.visibility = View.VISIBLE
             }
         })
-        add_app_fragment_edit_text.addTextChangedListener(onTextChangeListener)
     }
 
     override fun onResume() {
         super.onResume()
         viewModel.setInstalledApps(getInstalledApps())
+        viewModel.filterApps("")
+        add_app_fragment_edit_text.addTextChangedListener(onTextChangeListener)
     }
 
-    override fun onDestroy() {
-        super.onDestroy()
+    override fun onPause() {
+        super.onPause()
         add_app_fragment_edit_text?.removeTextChangedListener(onTextChangeListener)
     }
 

+ 13 - 6
app/src/main/java/com/sduduzog/slimlauncher/ui/options/CustomiseAppsFragment.kt

@@ -7,26 +7,33 @@ import android.view.View
 import android.view.ViewGroup
 import androidx.appcompat.widget.PopupMenu
 import androidx.lifecycle.Observer
-import androidx.lifecycle.ViewModelProviders
+import androidx.lifecycle.ViewModelProvider
 import androidx.navigation.Navigation
 import androidx.recyclerview.widget.ItemTouchHelper
 import androidx.recyclerview.widget.RecyclerView
 import com.sduduzog.slimlauncher.R
 import com.sduduzog.slimlauncher.adapters.CustomAppsAdapter
-import com.sduduzog.slimlauncher.models.HomeApp
 import com.sduduzog.slimlauncher.models.CustomiseAppsViewModel
+import com.sduduzog.slimlauncher.models.HomeApp
 import com.sduduzog.slimlauncher.ui.dialogs.RemoveAllAppsDialog
 import com.sduduzog.slimlauncher.ui.dialogs.RenameAppDialog
 import com.sduduzog.slimlauncher.utils.BaseFragment
 import com.sduduzog.slimlauncher.utils.OnItemActionListener
 import com.sduduzog.slimlauncher.utils.OnShitDoneToAppsListener
+import dagger.android.support.AndroidSupportInjection
 import kotlinx.android.synthetic.main.customise_apps_fragment.*
+import javax.inject.Inject
 
 
 class CustomiseAppsFragment : BaseFragment(), OnShitDoneToAppsListener {
 
     override fun getFragmentView(): ViewGroup = customise_apps_fragment
-
+    @Inject
+    internal lateinit var viewModelFactory: ViewModelProvider.Factory
+    override fun onCreate(savedInstanceState: Bundle?) {
+        super.onCreate(savedInstanceState)
+        AndroidSupportInjection.inject(this)
+    }
     private lateinit var viewModel: CustomiseAppsViewModel
 
     override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
@@ -38,10 +45,10 @@ class CustomiseAppsFragment : BaseFragment(), OnShitDoneToAppsListener {
 
         val adapter = CustomAppsAdapter(this)
         activity?.let {
-            viewModel = ViewModelProviders.of(it).get(CustomiseAppsViewModel::class.java)
+            viewModel = ViewModelProvider(it, viewModelFactory).get(CustomiseAppsViewModel::class.java)
         } ?: throw Error("Activity null, something here is fucked up")
 
-        viewModel.apps.observe(this, Observer {
+        viewModel.apps.observe(viewLifecycleOwner, Observer {
             it?.let { apps ->
                 adapter.setItems(apps)
                 when (apps.size) {
@@ -55,7 +62,7 @@ class CustomiseAppsFragment : BaseFragment(), OnShitDoneToAppsListener {
             } ?: adapter.setItems(listOf())
         })
         customise_apps_fragment_remove_all.setOnClickListener {
-            RemoveAllAppsDialog.getInstance(viewModel.apps.value!!, viewModel).show(fragmentManager, "REMOVE_APPS")
+            RemoveAllAppsDialog.getInstance(viewModel.apps.value!!, viewModel).show(childFragmentManager, "REMOVE_APPS")
         }
 
         customise_apps_fragment_list.adapter = adapter

+ 0 - 2
app/src/main/java/com/sduduzog/slimlauncher/ui/options/OpenAppsFragment.kt

@@ -2,9 +2,7 @@ package com.sduduzog.slimlauncher.ui.options
 
 import android.content.ComponentName
 import android.content.Intent
-import androidx.navigation.Navigation
 import com.sduduzog.slimlauncher.data.model.App
-import kotlinx.android.synthetic.main.open_apps_fragment.*
 
 class OpenAppsFragment : AddAppFragment() {
 

+ 7 - 2
app/src/main/java/com/sduduzog/slimlauncher/ui/options/OptionsFragment.kt

@@ -14,11 +14,16 @@ import com.sduduzog.slimlauncher.R
 import com.sduduzog.slimlauncher.ui.dialogs.ChangeThemeDialog
 import com.sduduzog.slimlauncher.ui.dialogs.ChooseTimeFormatDialog
 import com.sduduzog.slimlauncher.utils.BaseFragment
+import dagger.android.support.AndroidSupportInjection
 import kotlinx.android.synthetic.main.options_fragment.*
 
 class OptionsFragment : BaseFragment() {
     override fun getFragmentView(): ViewGroup = options_fragment
 
+    override fun onCreate(savedInstanceState: Bundle?) {
+        super.onCreate(savedInstanceState)
+        AndroidSupportInjection.inject(this)
+    }
     override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
         return inflater.inflate(R.layout.options_fragment, container, false)
     }
@@ -40,11 +45,11 @@ class OptionsFragment : BaseFragment() {
         }
         options_fragment_change_theme.setOnClickListener {
             val changeThemeDialog = ChangeThemeDialog.getThemeChooser()
-            changeThemeDialog.showNow(fragmentManager, "THEME_CHOOSER")
+            changeThemeDialog.showNow(childFragmentManager, "THEME_CHOOSER")
         }
         options_fragment_choose_time_format.setOnClickListener {
             val chooseTimeFormatDialog = ChooseTimeFormatDialog.getInstance()
-            chooseTimeFormatDialog.showNow(fragmentManager, "TIME_FORMAT_CHOOSER")
+            chooseTimeFormatDialog.showNow(childFragmentManager, "TIME_FORMAT_CHOOSER")
         }
         options_fragment_toggle_status_bar.setOnClickListener {
             val settings = context!!.getSharedPreferences(getString(R.string.prefs_settings), MODE_PRIVATE)

+ 2 - 1
app/src/main/res/layout/home_motion_01.xml

@@ -3,7 +3,8 @@
     xmlns:app="http://schemas.android.com/apk/res-auto"
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
-    android:layout_height="match_parent">
+    android:layout_height="match_parent"
+    app:layoutDescription="@xml/home_motion_01_scene">
 
     <TextView
         android:id="@+id/home_fragment_time"

+ 2 - 1
app/src/main/res/layout/home_motion_02.xml

@@ -3,7 +3,8 @@
     xmlns:app="http://schemas.android.com/apk/res-auto"
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
-    android:layout_height="match_parent">
+    android:layout_height="match_parent"
+    app:layoutDescription="@xml/home_motion_02_scene">
 
     <TextView
         android:id="@+id/home_fragment_time"

+ 1 - 1
app/src/main/res/layout/open_apps_fragment.xml

@@ -5,7 +5,7 @@
     android:id="@+id/open_apps_fragment"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
-    tools:context=".ui.options.AddAppFragment">
+    tools:context=".ui.options.OpenAppsFragment">
 
     <EditText
         android:id="@+id/add_app_fragment_edit_text"

+ 16 - 0
app/src/main/res/xml/home_motion_01_scene.xml

@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<MotionScene xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto">
+
+    <ConstraintSet android:id="@+id/start">
+        <Constraint android:id="@+id/home_fragment_time" />
+    </ConstraintSet>
+
+    <ConstraintSet android:id="@+id/end">
+        <Constraint android:id="@id/home_fragment_time" />
+    </ConstraintSet>
+
+    <Transition
+        app:constraintSetEnd="@id/end"
+        app:constraintSetStart="@+id/start" />
+</MotionScene>

+ 16 - 0
app/src/main/res/xml/home_motion_02_scene.xml

@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<MotionScene xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto">
+
+    <ConstraintSet android:id="@+id/start">
+        <Constraint android:id="@+id/home_fragment_time" />
+    </ConstraintSet>
+
+    <ConstraintSet android:id="@+id/end">
+        <Constraint android:id="@id/home_fragment_time" />
+    </ConstraintSet>
+
+    <Transition
+        app:constraintSetEnd="@id/end"
+        app:constraintSetStart="@+id/start" />
+</MotionScene>

+ 4 - 5
build.gradle → build.gradle.kts

@@ -1,14 +1,13 @@
 // Top-level build file where you can add configuration options common to all sub-projects/modules.
 
 buildscript {
-    ext.kotlin_version = '1.3.41'
     repositories {
         google()
         jcenter()
     }
     dependencies {
-        classpath 'com.android.tools.build:gradle:3.5.0'
-        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
+        classpath("com.android.tools.build:gradle:4.0.0")
+        classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.3.72")
 
         // NOTE: Do not place your application dependencies here; they belong
         // in the individual module build.gradle files
@@ -22,6 +21,6 @@ allprojects {
     }
 }
 
-task clean(type: Delete) {
-    delete rootProject.buildDir
+tasks.register("clean", Delete::class) {
+    delete(rootProject.buildDir)
 }

+ 1 - 3
gradle.properties

@@ -9,9 +9,7 @@
 org.gradle.jvmargs=-Xmx6114m
 android.useAndroidX=true
 android.enableJetifier=true
-android.enableR8=true
 # When configured, Gradle will run in incubating parallel mode.
 # This option should only be used with decoupled projects. More details, visit
 # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
-# org.gradle.parallel=true
-
+# org.gradle.parallel=true

BIN
gradle/wrapper/gradle-wrapper.jar


+ 1 - 2
gradle/wrapper/gradle-wrapper.properties

@@ -1,6 +1,5 @@
-#Sat Aug 24 16:44:55 CAT 2019
 distributionBase=GRADLE_USER_HOME
 distributionPath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-bin.zip
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip

+ 33 - 20
gradlew

@@ -1,5 +1,21 @@
 #!/usr/bin/env sh
 
+#
+# Copyright 2015 the original author or authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
 ##############################################################################
 ##
 ##  Gradle start up script for UN*X
@@ -28,7 +44,7 @@ APP_NAME="Gradle"
 APP_BASE_NAME=`basename "$0"`
 
 # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-DEFAULT_JVM_OPTS=""
+DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
 
 # Use the maximum available, or set MAX_FD != -1 to use that value.
 MAX_FD="maximum"
@@ -66,6 +82,7 @@ esac
 
 CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
 
+
 # Determine the Java command to use to start the JVM.
 if [ -n "$JAVA_HOME" ] ; then
     if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
@@ -109,10 +126,11 @@ if $darwin; then
     GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
 fi
 
-# For Cygwin, switch paths to Windows format before running java
-if $cygwin ; then
+# For Cygwin or MSYS, switch paths to Windows format before running java
+if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
     APP_HOME=`cygpath --path --mixed "$APP_HOME"`
     CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
+    
     JAVACMD=`cygpath --unix "$JAVACMD"`
 
     # We build the pattern for arguments to be converted via cygpath
@@ -138,19 +156,19 @@ if $cygwin ; then
         else
             eval `echo args$i`="\"$arg\""
         fi
-        i=$((i+1))
+        i=`expr $i + 1`
     done
     case $i in
-        (0) set -- ;;
-        (1) set -- "$args0" ;;
-        (2) set -- "$args0" "$args1" ;;
-        (3) set -- "$args0" "$args1" "$args2" ;;
-        (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
-        (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
-        (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
-        (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
-        (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
-        (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
+        0) set -- ;;
+        1) set -- "$args0" ;;
+        2) set -- "$args0" "$args1" ;;
+        3) set -- "$args0" "$args1" "$args2" ;;
+        4) set -- "$args0" "$args1" "$args2" "$args3" ;;
+        5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
+        6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
+        7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
+        8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
+        9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
     esac
 fi
 
@@ -159,14 +177,9 @@ save () {
     for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
     echo " "
 }
-APP_ARGS=$(save "$@")
+APP_ARGS=`save "$@"`
 
 # Collect all arguments for the java command, following the shell quoting and substitution rules
 eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
 
-# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
-if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
-  cd "$(dirname "$0")"
-fi
-
 exec "$JAVACMD" "$@"

+ 104 - 84
gradlew.bat

@@ -1,84 +1,104 @@
-@if "%DEBUG%" == "" @echo off
-@rem ##########################################################################
-@rem
-@rem  Gradle startup script for Windows
-@rem
-@rem ##########################################################################
-
-@rem Set local scope for the variables with windows NT shell
-if "%OS%"=="Windows_NT" setlocal
-
-set DIRNAME=%~dp0
-if "%DIRNAME%" == "" set DIRNAME=.
-set APP_BASE_NAME=%~n0
-set APP_HOME=%DIRNAME%
-
-@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-set DEFAULT_JVM_OPTS=
-
-@rem Find java.exe
-if defined JAVA_HOME goto findJavaFromJavaHome
-
-set JAVA_EXE=java.exe
-%JAVA_EXE% -version >NUL 2>&1
-if "%ERRORLEVEL%" == "0" goto init
-
-echo.
-echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
-
-goto fail
-
-:findJavaFromJavaHome
-set JAVA_HOME=%JAVA_HOME:"=%
-set JAVA_EXE=%JAVA_HOME%/bin/java.exe
-
-if exist "%JAVA_EXE%" goto init
-
-echo.
-echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
-
-goto fail
-
-:init
-@rem Get command-line arguments, handling Windows variants
-
-if not "%OS%" == "Windows_NT" goto win9xME_args
-
-:win9xME_args
-@rem Slurp the command line arguments.
-set CMD_LINE_ARGS=
-set _SKIP=2
-
-:win9xME_args_slurp
-if "x%~1" == "x" goto execute
-
-set CMD_LINE_ARGS=%*
-
-:execute
-@rem Setup the command line
-
-set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
-
-@rem Execute Gradle
-"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
-
-:end
-@rem End local scope for the variables with windows NT shell
-if "%ERRORLEVEL%"=="0" goto mainEnd
-
-:fail
-rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
-rem the _cmd.exe /c_ return code!
-if  not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
-exit /b 1
-
-:mainEnd
-if "%OS%"=="Windows_NT" endlocal
-
-:omega
+@rem
+@rem Copyright 2015 the original author or authors.
+@rem
+@rem Licensed under the Apache License, Version 2.0 (the "License");
+@rem you may not use this file except in compliance with the License.
+@rem You may obtain a copy of the License at
+@rem
+@rem      https://www.apache.org/licenses/LICENSE-2.0
+@rem
+@rem Unless required by applicable law or agreed to in writing, software
+@rem distributed under the License is distributed on an "AS IS" BASIS,
+@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@rem See the License for the specific language governing permissions and
+@rem limitations under the License.
+@rem
+
+@if "%DEBUG%" == "" @echo off
+@rem ##########################################################################
+@rem
+@rem  Gradle startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+set DIRNAME=%~dp0
+if "%DIRNAME%" == "" set DIRNAME=.
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Resolve any "." and ".." in APP_HOME to make it shorter.
+for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if "%ERRORLEVEL%" == "0" goto init
+
+echo.
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto init
+
+echo.
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:init
+@rem Get command-line arguments, handling Windows variants
+
+if not "%OS%" == "Windows_NT" goto win9xME_args
+
+:win9xME_args
+@rem Slurp the command line arguments.
+set CMD_LINE_ARGS=
+set _SKIP=2
+
+:win9xME_args_slurp
+if "x%~1" == "x" goto execute
+
+set CMD_LINE_ARGS=%*
+
+:execute
+@rem Setup the command line
+
+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
+
+@rem Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
+
+:end
+@rem End local scope for the variables with windows NT shell
+if "%ERRORLEVEL%"=="0" goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
+rem the _cmd.exe /c_ return code!
+if  not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
+exit /b 1
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega

+ 0 - 1
settings.gradle

@@ -1 +0,0 @@
-include ':app'

+ 1 - 0
settings.gradle.kts

@@ -0,0 +1 @@
+include(":app")