瀏覽代碼

Changes from slim-launcher 2.4.8.45 - 2.4.17 (#17)

* Changes from sduduzog 2.4.8.45 - 2.4.17

# Conflicts:
#       README.md
#       app/build.gradle.kts
#       app/src/main/java/com/sduduzog/slimlauncher/di/modules/FragmentModule.kt
#       app/src/main/java/com/sduduzog/slimlauncher/ui/main/HomeFragment.kt
#       app/src/main/java/com/sduduzog/slimlauncher/ui/options/AddAppFragment.kt
#       app/src/main/java/com/sduduzog/slimlauncher/ui/options/CustomiseAppsFragment.kt
#       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
#       app/src/main/res/layout/home_motion_01.xml
#       app/src/main/res/layout/home_motion_02.xml

* Fix linting issues

Co-authored-by: Joshua Kuestersteffen <jkuester@kuester7.com>
Joshua Kuestersteffen 5 年之前
父節點
當前提交
6ec5f5e478
共有 38 個文件被更改,包括 304 次插入373 次删除
  1. 1 0
      .gitignore
  2. 24 37
      app/build.gradle.kts
  3. 二進制
      app/release/app.aab
  4. 1 1
      app/src/androidTest/java/com/sduduzog/slimlauncher/DBTest.kt
  5. 2 2
      app/src/main/AndroidManifest.xml
  6. 3 22
      app/src/main/java/com/sduduzog/slimlauncher/App.kt
  7. 3 17
      app/src/main/java/com/sduduzog/slimlauncher/MainActivity.kt
  8. 13 1
      app/src/main/java/com/sduduzog/slimlauncher/data/BaseDao.kt
  9. 24 2
      app/src/main/java/com/sduduzog/slimlauncher/data/BaseDatabase.kt
  10. 3 2
      app/src/main/java/com/sduduzog/slimlauncher/data/model/App.kt
  11. 0 11
      app/src/main/java/com/sduduzog/slimlauncher/di/ViewModelKey.kt
  12. 0 32
      app/src/main/java/com/sduduzog/slimlauncher/di/components/AppComponent.kt
  13. 0 20
      app/src/main/java/com/sduduzog/slimlauncher/di/factories/ViewModelFactory.kt
  14. 0 11
      app/src/main/java/com/sduduzog/slimlauncher/di/modules/ActivityModule.kt
  15. 6 1
      app/src/main/java/com/sduduzog/slimlauncher/di/modules/DbModule.kt
  16. 0 27
      app/src/main/java/com/sduduzog/slimlauncher/di/modules/FragmentModule.kt
  17. 0 31
      app/src/main/java/com/sduduzog/slimlauncher/di/modules/ViewModelModule.kt
  18. 5 4
      app/src/main/java/com/sduduzog/slimlauncher/models/AddAppViewModel.kt
  19. 8 4
      app/src/main/java/com/sduduzog/slimlauncher/models/CustomiseAppsViewModel.kt
  20. 10 5
      app/src/main/java/com/sduduzog/slimlauncher/models/HomeApp.kt
  21. 2 10
      app/src/main/java/com/sduduzog/slimlauncher/models/MainViewModel.kt
  22. 16 5
      app/src/main/java/com/sduduzog/slimlauncher/models/Repository.kt
  23. 2 2
      app/src/main/java/com/sduduzog/slimlauncher/ui/dialogs/ChangeThemeDialog.kt
  24. 5 7
      app/src/main/java/com/sduduzog/slimlauncher/ui/dialogs/ChooseTimeFormatDialog.kt
  25. 3 3
      app/src/main/java/com/sduduzog/slimlauncher/ui/dialogs/RemoveAllAppsDialog.kt
  26. 1 1
      app/src/main/java/com/sduduzog/slimlauncher/ui/dialogs/RenameAppDialog.kt
  27. 29 42
      app/src/main/java/com/sduduzog/slimlauncher/ui/main/HomeFragment.kt
  28. 31 30
      app/src/main/java/com/sduduzog/slimlauncher/ui/options/AddAppFragment.kt
  29. 8 23
      app/src/main/java/com/sduduzog/slimlauncher/ui/options/CustomiseAppsFragment.kt
  30. 1 1
      app/src/main/java/com/sduduzog/slimlauncher/ui/options/OpenAppsFragment.kt
  31. 1 6
      app/src/main/java/com/sduduzog/slimlauncher/ui/options/OptionsFragment.kt
  32. 4 4
      app/src/main/java/com/sduduzog/slimlauncher/utils/BaseFragment.kt
  33. 1 3
      app/src/main/res/layout/home_motion_01.xml
  34. 1 4
      app/src/main/res/layout/home_motion_02.xml
  35. 46 0
      app/src/main/res/values-nb/strings.xml
  36. 46 0
      app/src/main/res/values-nl/strings.xml
  37. 2 1
      app/src/main/res/values/strings.xml
  38. 2 1
      build.gradle.kts

+ 1 - 0
.gitignore

@@ -67,3 +67,4 @@ fastlane/readme.md
 /app/release/release
 
 app/release/output\.json
+*.aab

+ 24 - 37
app/build.gradle.kts

@@ -1,22 +1,21 @@
 plugins {
     id("com.android.application")
-//    id("com.github.triplet.play") version "2.8.0"
+    id("dagger.hilt.android.plugin")
     kotlin("android")
     kotlin("android.extensions")
     kotlin("kapt")
 }
 
 android {
-    compileSdkVersion(29)
+    compileSdkVersion(30)
     defaultConfig {
         applicationId = "com.jkuester.unlauncher"
         minSdkVersion(21)
-        targetSdkVersion(29)
-        versionCode = 4
+        targetSdkVersion(30)
         versionName = "0.1.2"
+        versionCode = 4
         testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
-        vectorDrawables{useSupportLibrary = true}
-
+        vectorDrawables { useSupportLibrary = true }
 //        signingConfigs {
 //            register("release") {
 //                storeFile = file(project.extra["RELEASE_STORE_FILE"] as String)
@@ -33,19 +32,19 @@ android {
         named("release").configure {
             isMinifyEnabled = true
             isShrinkResources = true
-            proguardFiles(getDefaultProguardFile ("proguard-android-optimize.txt"), "proguard-rules.pro")
+            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")
+            proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro")
         }
     }
     compileOptions {
         sourceCompatibility = JavaVersion.VERSION_1_8
         targetCompatibility = JavaVersion.VERSION_1_8
     }
-    kotlinOptions{
+    kotlinOptions {
         jvmTarget = JavaVersion.VERSION_1_8.toString()
     }
     lintOptions{
@@ -57,18 +56,7 @@ android {
         }
     }
 }
-//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"))))
 
@@ -76,14 +64,15 @@ dependencies {
     implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.72")
 
     // Support Libraries
-    implementation("androidx.appcompat:appcompat:1.1.0")
+    implementation("androidx.appcompat:appcompat:1.2.0")
     implementation("androidx.recyclerview:recyclerview:1.1.0")
-    implementation("androidx.constraintlayout:constraintlayout:2.0.0-beta7")
+    implementation("androidx.constraintlayout:constraintlayout:2.0.1")
 
     // Arch Components
-    implementation("androidx.core:core-ktx:1.5.0-alpha01")
+    implementation("androidx.core:core-ktx:1.5.0-alpha02")
+    implementation("androidx.fragment:fragment-ktx:1.2.5")
     implementation("androidx.lifecycle:lifecycle-extensions:2.2.0")
-    implementation("androidx.navigation:navigation-fragment-ktx:2.2.0")
+    implementation("androidx.navigation:navigation-fragment-ktx:2.3.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")
@@ -92,23 +81,21 @@ dependencies {
     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")
-
+    implementation("com.google.dagger:hilt-android:2.28-alpha")
+    implementation("androidx.hilt:hilt-lifecycle-viewmodel:1.0.0-alpha02")
+    kapt("androidx.hilt:hilt-compiler:1.0.0-alpha02")
+    kapt("com.google.dagger:hilt-android-compiler:2.28-alpha")
 
     // 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.test:runner:1.3.0")
+    androidTestImplementation("androidx.test:rules:1.3.0")
     androidTestImplementation("androidx.annotation:annotation:1.1.0")
-    androidTestImplementation("androidx.test:runner:1.2.0")
-    androidTestImplementation("androidx.test:rules:1.2.0")
+    androidTestImplementation("androidx.test:runner:1.3.0")
+    androidTestImplementation("androidx.test:rules:1.3.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")
-
+    androidTestImplementation("androidx.test.espresso:espresso-core:3.3.0")
+    androidTestImplementation("androidx.test.espresso:espresso-intents:3.3.0")
 }

二進制
app/release/app.aab


+ 1 - 1
app/src/androidTest/java/com/sduduzog/slimlauncher/DBTest.kt

@@ -42,7 +42,7 @@ class DBTest {
     @Test
     @Throws(InterruptedException::class)
     fun testInsertLiveDataApps() {
-        val app = HomeApp("TestApp", "com.test.test.app", "TestMainActivity", 0)
+        val app = HomeApp("TestApp", "com.test.test.app", "TestMainActivity", 0, "Test", 0)
         baseDao!!.add(app)
 
         var appsInstalled: List<HomeApp> = listOf()

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

@@ -20,8 +20,8 @@
             android:name=".MainActivity"
             android:launchMode="singleTask"
             android:screenOrientation="portrait"
-            tools:ignore="LockedOrientationActivity"
-            android:stateNotNeeded="true">
+            android:stateNotNeeded="true"
+            tools:ignore="LockedOrientationActivity">
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
 

+ 3 - 22
app/src/main/java/com/sduduzog/slimlauncher/App.kt

@@ -1,26 +1,7 @@
 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
+import dagger.hilt.android.HiltAndroidApp
 
-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)
-    }
-}
+@HiltAndroidApp
+class App : Application()

+ 3 - 17
app/src/main/java/com/sduduzog/slimlauncher/MainActivity.kt

@@ -5,31 +5,18 @@ 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
+import dagger.hilt.android.AndroidEntryPoint
 
 
+@AndroidEntryPoint
 class MainActivity : AppCompatActivity(),
         SharedPreferences.OnSharedPreferenceChangeListener,
-        HomeWatcher.OnHomePressedListener , HasSupportFragmentInjector{
+        HomeWatcher.OnHomePressedListener {
 
-    @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
@@ -53,7 +40,6 @@ class MainActivity : AppCompatActivity(),
     }
 
     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)

+ 13 - 1
app/src/main/java/com/sduduzog/slimlauncher/data/BaseDao.kt

@@ -16,6 +16,18 @@ interface BaseDao {
     @Update(onConflict = OnConflictStrategy.REPLACE)
     fun update(vararg apps: HomeApp)
 
+    @Transaction
+    fun remove(app: HomeApp){
+        removeFromTable(app)
+        updateIndices(app.sortingIndex)
+    }
+
     @Delete
-    fun remove(vararg app: HomeApp)
+    fun removeFromTable(app: HomeApp)
+
+    @Query("UPDATE home_apps SET sorting_index = sorting_index - 1 WHERE sorting_index > :sortingIndex")
+    fun updateIndices(sortingIndex : Int)
+
+    @Query("DELETE FROM home_apps")
+    fun clearTable()
 }

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

@@ -1,6 +1,7 @@
 package com.sduduzog.slimlauncher.data
 
 import android.content.Context
+import android.os.Process
 import androidx.room.Database
 import androidx.room.Room
 import androidx.room.RoomDatabase
@@ -9,7 +10,7 @@ import androidx.sqlite.db.SupportSQLiteDatabase
 import com.sduduzog.slimlauncher.models.HomeApp
 
 
-@Database(entities = [HomeApp::class], version = 7, exportSchema = false)
+@Database(entities = [HomeApp::class], version = 8, exportSchema = false)
 abstract class BaseDatabase : RoomDatabase() {
 
     abstract fun baseDao(): BaseDao
@@ -30,7 +31,8 @@ abstract class BaseDatabase : RoomDatabase() {
                                     MIGRATION_3_4,
                                     MIGRATION_4_5,
                                     MIGRATION_5_6,
-                                    MIGRATION_6_7
+                                    MIGRATION_6_7,
+                                    MIGRATION_7_8
                             )
                             .build()
                 }
@@ -86,5 +88,25 @@ abstract class BaseDatabase : RoomDatabase() {
                database.execSQL("ALTER TABLE `home_apps` ADD COLUMN `app_nickname` TEXT")
             }
         }
+        val MIGRATION_7_8 = object : Migration(7, 8){
+            override fun migrate(database: SupportSQLiteDatabase) {
+                val userSerial = Process.myUserHandle().hashCode()
+                database.execSQL("ALTER TABLE `home_apps` ADD COLUMN `user_serial` INTEGER NOT NULL DEFAULT " + userSerial.toString())
+
+                database.execSQL("CREATE TABLE home_apps_copy(" +
+                        "package_name TEXT NOT NULL, " +
+                        "user_serial INTEGER NOT NULL, " +
+                        "app_name TEXT NOT NULL, " +
+                        "app_nickname TEXT, " +
+                        "activity_name TEXT NOT NULL, " +
+                        "sorting_index INTEGER NOT NULL, " +
+                        "PRIMARY KEY(package_name, user_serial))"
+                )
+                database.execSQL("INSERT INTO home_apps_copy (package_name, user_serial, app_name, app_nickname, activity_name, sorting_index) " +
+                        "SELECT package_name, user_serial, app_name, app_nickname, activity_name, sorting_index FROM home_apps")
+                database.execSQL("DROP TABLE home_apps")
+                database.execSQL("ALTER TABLE home_apps_copy RENAME TO home_apps")
+            }
+        }
     }
 }

+ 3 - 2
app/src/main/java/com/sduduzog/slimlauncher/data/model/App.kt

@@ -5,9 +5,10 @@ import com.sduduzog.slimlauncher.models.HomeApp
 data class App(
         val appName: String,
         val packageName: String,
-        val activityName: String
+        val activityName: String,
+        val userSerial : Long
 ){
     companion object{
-        fun from(homeApp: HomeApp) = App(homeApp.appName, homeApp.packageName, homeApp.activityName)
+        fun from(homeApp: HomeApp) = App(homeApp.appName, homeApp.packageName, homeApp.activityName, homeApp.userSerial)
     }
 }

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

@@ -1,11 +0,0 @@
-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>)

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

@@ -1,32 +0,0 @@
-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)
-}

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

@@ -1,20 +0,0 @@
-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)
-        }
-    }
-}

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

@@ -1,11 +0,0 @@
-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
-}

+ 6 - 1
app/src/main/java/com/sduduzog/slimlauncher/di/modules/DbModule.kt

@@ -10,11 +10,15 @@ 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 com.sduduzog.slimlauncher.data.BaseDatabase.Companion.MIGRATION_7_8
 import dagger.Module
 import dagger.Provides
+import dagger.hilt.InstallIn
+import dagger.hilt.android.components.ApplicationComponent
 import javax.inject.Singleton
 
 @Module
+@InstallIn(ApplicationComponent::class)
 class DbModule {
     @Provides
     @Singleton
@@ -27,7 +31,8 @@ class DbModule {
                         MIGRATION_3_4,
                         MIGRATION_4_5,
                         MIGRATION_5_6,
-                        MIGRATION_6_7
+                        MIGRATION_6_7,
+                        MIGRATION_7_8
                 )
                 .build()
     }

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

@@ -1,27 +0,0 @@
-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
-}

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

@@ -1,31 +0,0 @@
-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,15 +1,16 @@
 package com.sduduzog.slimlauncher.models
 
+import androidx.hilt.lifecycle.ViewModelInject
 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 @Inject constructor (baseDao: BaseDao) : ViewModel() {
+class AddAppViewModel @ViewModelInject constructor (baseDao: BaseDao) : ViewModel() {
     private val repository = Repository(baseDao)
     private var filterQuery = ""
+    private val regex = Regex("[!@#\$%^&*()_+\\-=\\[\\]{};':\"\\\\|,.<>/? ]")
     private val _installedApps = mutableListOf<App>()
     private val _homeApps = mutableListOf<App>()
     private val homeAppsObserver = Observer<List<HomeApp>> {
@@ -24,13 +25,13 @@ class AddAppViewModel @Inject constructor (baseDao: BaseDao) : ViewModel() {
     }
 
     fun filterApps(query: String = "") {
-        this.filterQuery = query
+        this.filterQuery = regex.replace(query, "")
         this.updateDisplayedApps()
     }
 
     private fun updateDisplayedApps() {
         val filteredApps = _installedApps.filterNot { _homeApps.contains(it) }
-        this.apps.postValue(filteredApps.filter { it.appName.contains(filterQuery) })
+        this.apps.postValue(filteredApps.filter { regex.replace(it.appName, "").contains(filterQuery, ignoreCase = true) })
     }
 
     fun setInstalledApps(apps: List<App>) {

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

@@ -1,11 +1,11 @@
 package com.sduduzog.slimlauncher.models
 
+import androidx.hilt.lifecycle.ViewModelInject
 import androidx.lifecycle.LiveData
 import androidx.lifecycle.ViewModel
 import com.sduduzog.slimlauncher.data.BaseDao
-import javax.inject.Inject
 
-class CustomiseAppsViewModel @Inject constructor(baseDao: BaseDao) : ViewModel() {
+class CustomiseAppsViewModel @ViewModelInject constructor(baseDao: BaseDao) : ViewModel() {
 
     private val repository = Repository(baseDao)
     private var _apps: LiveData<List<HomeApp>>
@@ -25,7 +25,11 @@ class CustomiseAppsViewModel @Inject constructor(baseDao: BaseDao) : ViewModel()
         homeApp.appNickname = null
         update(homeApp)
     }
-    fun remove(vararg app: HomeApp) {
-        repository.remove(*app)
+    fun remove(app: HomeApp) {
+        repository.remove(app)
+    }
+
+    fun clearTable(){
+        repository.clearTable()
     }
 }

+ 10 - 5
app/src/main/java/com/sduduzog/slimlauncher/models/HomeApp.kt

@@ -2,26 +2,31 @@ package com.sduduzog.slimlauncher.models
 
 import androidx.room.ColumnInfo
 import androidx.room.Entity
-import androidx.room.PrimaryKey
 import com.sduduzog.slimlauncher.data.model.App
 
-@Entity(tableName = "home_apps")
+@Entity(tableName = "home_apps", primaryKeys = ["package_name", "user_serial"])
 data class HomeApp(
         @field:ColumnInfo(name = "app_name")
         var appName: String,
-        @PrimaryKey
+
         @field:ColumnInfo(name = "package_name")
         var packageName: String,
+
         @field:ColumnInfo(name = "activity_name")
         var activityName: String,
+
         @field:ColumnInfo(name = "sorting_index")
         var sortingIndex: Int,
+
         @field:ColumnInfo(name = "app_nickname")
-        var appNickname: String? = null
+        var appNickname: String? = null,
+
+        @field:ColumnInfo(name = "user_serial")
+        val userSerial : Long
 ) {
     companion object {
         fun from(app: App, sortingIndex: Int = 0): HomeApp {
-            return HomeApp(appName = app.appName, activityName = app.activityName, packageName = app.packageName, sortingIndex = sortingIndex)
+            return HomeApp(appName = app.appName, activityName = app.activityName, packageName = app.packageName, userSerial = app.userSerial, sortingIndex = sortingIndex)
         }
     }
 }

+ 2 - 10
app/src/main/java/com/sduduzog/slimlauncher/models/MainViewModel.kt

@@ -1,12 +1,12 @@
 package com.sduduzog.slimlauncher.models
 
+import androidx.hilt.lifecycle.ViewModelInject
 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 @Inject constructor(baseDao: BaseDao) : ViewModel() {
+class MainViewModel @ViewModelInject constructor(baseDao: BaseDao) : ViewModel() {
 
     private val _baseRepository = Repository(baseDao)
 
@@ -23,12 +23,4 @@ class MainViewModel @Inject constructor(baseDao: BaseDao) : ViewModel() {
         val index = _apps.value!!.size
         _baseRepository.add(HomeApp.from(app, index))
     }
-
-    fun update(vararg args: HomeApp) {
-        _baseRepository.update(*args)
-    }
-
-    fun remove(vararg app: HomeApp) {
-        _baseRepository.remove(*app)
-    }
 }

+ 16 - 5
app/src/main/java/com/sduduzog/slimlauncher/models/Repository.kt

@@ -5,7 +5,6 @@ import androidx.lifecycle.LiveData
 import com.sduduzog.slimlauncher.data.BaseDao
 import javax.inject.Singleton
 
-@Singleton
 class Repository(private val baseDao: BaseDao) {
 
     private val _apps = baseDao.apps
@@ -17,12 +16,16 @@ class Repository(private val baseDao: BaseDao) {
         AddAppAsyncTask(baseDao).execute(app)
     }
 
-    fun update(vararg list: HomeApp) {
+    fun update(vararg list : HomeApp) {
         UpdateAppAsyncTask(baseDao).execute(*list)
     }
 
-    fun remove(vararg app: HomeApp) {
-        RemoveAppAsyncTask(baseDao).execute(*app)
+    fun remove(app: HomeApp) {
+        RemoveAppAsyncTask(baseDao).execute(app)
+    }
+
+    fun clearTable(){
+        ClearTableAsyncTask(baseDao).execute()
     }
 
     private class AddAppAsyncTask(private val mAsyncTaskDao: BaseDao) : AsyncTask<HomeApp, Void, Void>() {
@@ -44,7 +47,15 @@ class Repository(private val baseDao: BaseDao) {
     private class RemoveAppAsyncTask(private val mAsyncTaskDao: BaseDao) : AsyncTask<HomeApp, Void, Void>() {
 
         override fun doInBackground(vararg params: HomeApp): Void? {
-            mAsyncTaskDao.remove(*params)
+            mAsyncTaskDao.remove(params[0])
+            return null
+        }
+    }
+
+    private class ClearTableAsyncTask(private val mAsyncTaskDao: BaseDao) : AsyncTask<Void, Void, Void>() {
+
+        override fun doInBackground(vararg params: Void): Void? {
+            mAsyncTaskDao.clearTable()
             return null
         }
     }

+ 2 - 2
app/src/main/java/com/sduduzog/slimlauncher/ui/dialogs/ChangeThemeDialog.kt

@@ -14,8 +14,8 @@ class ChangeThemeDialog : DialogFragment(){
     private lateinit var settings: SharedPreferences
 
     override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
-        val builder = AlertDialog.Builder(context!!)
-        settings  = context!!.getSharedPreferences(getString(R.string.prefs_settings), MODE_PRIVATE)
+        val builder = AlertDialog.Builder(requireContext())
+        settings  = requireContext().getSharedPreferences(getString(R.string.prefs_settings), MODE_PRIVATE)
 
         val active = settings.getInt(getString(R.string.prefs_settings_key_theme), 0)
         builder.setTitle(R.string.choose_theme_dialog_title)

+ 5 - 7
app/src/main/java/com/sduduzog/slimlauncher/ui/dialogs/ChooseTimeFormatDialog.kt

@@ -14,17 +14,15 @@ class ChooseTimeFormatDialog : DialogFragment(){
     private lateinit var settings: SharedPreferences
 
     override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
-        val builder = AlertDialog.Builder(context!!)
-        settings = context!!.getSharedPreferences(getString(R.string.prefs_settings), MODE_PRIVATE)
+        val builder = AlertDialog.Builder(requireContext())
+        settings = requireContext().getSharedPreferences(getString(R.string.prefs_settings), MODE_PRIVATE)
 
-        val is24Hour = settings.getBoolean(getString(R.string.prefs_settings_key_time_format), true)
-        val index = if (is24Hour) 1 else 0
+        val active = settings.getInt(getString(R.string.prefs_settings_key_time_format), 0)
         builder.setTitle(R.string.choose_time_format_dialog_title)
-        builder.setSingleChoiceItems(R.array.time_format_array, index) {dialogInterface, i ->
+        builder.setSingleChoiceItems(R.array.time_format_array, active) {dialogInterface, i ->
             dialogInterface.dismiss()
             settings.edit {
-                val b = i != 0
-                putBoolean(getString(R.string.prefs_settings_key_time_format), b)
+                putInt(getString(R.string.prefs_settings_key_time_format), i)
             }
 
         }

+ 3 - 3
app/src/main/java/com/sduduzog/slimlauncher/ui/dialogs/RemoveAllAppsDialog.kt

@@ -5,8 +5,8 @@ import android.app.Dialog
 import android.os.Bundle
 import androidx.fragment.app.DialogFragment
 import com.sduduzog.slimlauncher.R
-import com.sduduzog.slimlauncher.models.HomeApp
 import com.sduduzog.slimlauncher.models.CustomiseAppsViewModel
+import com.sduduzog.slimlauncher.models.HomeApp
 
 class RemoveAllAppsDialog : DialogFragment(){
 
@@ -15,11 +15,11 @@ class RemoveAllAppsDialog : DialogFragment(){
 
 
     override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
-        val builder = AlertDialog.Builder(context!!)
+        val builder = AlertDialog.Builder(requireContext())
         builder.setTitle(R.string.remove_all_apps_dialog_title)
         builder.setMessage(R.string.remove_all_apps_dialog_message)
         builder.setPositiveButton("OK") {_, _ ->
-            model.remove(*apps.toTypedArray())
+            model.clearTable()
         }
         return builder.create()
     }

+ 1 - 1
app/src/main/java/com/sduduzog/slimlauncher/ui/dialogs/RenameAppDialog.kt

@@ -22,7 +22,7 @@ class RenameAppDialog : DialogFragment() {
         val editText: EditText = view.findViewById(R.id.rename_editText)
         val appName: String = app.appNickname ?: app.appName
         editText.text.append(appName)
-        val builder = AlertDialog.Builder(context!!)
+        val builder = AlertDialog.Builder(requireContext())
         builder.setTitle("Rename $appName")
         builder.setView(view)
         builder.setPositiveButton("DONE") { _, _ ->

+ 29 - 42
app/src/main/java/com/sduduzog/slimlauncher/ui/main/HomeFragment.kt

@@ -1,14 +1,17 @@
 package com.sduduzog.slimlauncher.ui.main
 
 import android.content.*
+import android.content.pm.LauncherApps
 import android.os.Bundle
+import android.os.UserManager
 import android.provider.AlarmClock
+import android.provider.CalendarContract
 import android.provider.MediaStore
 import android.view.LayoutInflater
 import android.view.View
 import android.view.ViewGroup
+import androidx.fragment.app.viewModels
 import androidx.lifecycle.Observer
-import androidx.lifecycle.ViewModelProvider
 import androidx.navigation.Navigation
 import com.sduduzog.slimlauncher.R
 import com.sduduzog.slimlauncher.adapters.HomeAdapter
@@ -16,24 +19,18 @@ 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 dagger.hilt.android.AndroidEntryPoint
 import kotlinx.android.synthetic.main.home_fragment.*
+import java.text.DateFormat
 import java.text.SimpleDateFormat
 import java.util.*
-import javax.inject.Inject
-
 
+@AndroidEntryPoint
 class HomeFragment : BaseFragment(), OnLaunchAppListener {
 
-    @Inject
-    internal lateinit var viewModelFactory: ViewModelProvider.Factory
     private lateinit var receiver: BroadcastReceiver
-    private lateinit var viewModel: MainViewModel
+    private val viewModel: MainViewModel by viewModels()
 
-    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)
@@ -46,10 +43,6 @@ class HomeFragment : BaseFragment(), OnLaunchAppListener {
         home_fragment_list.adapter = adapter1
         home_fragment_list_exp.adapter = adapter2
 
-        activity?.let {
-            viewModel = ViewModelProvider(it, viewModelFactory).get(MainViewModel::class.java)
-        } ?: throw Error("Activity null, something here is fucked up")
-
         viewModel.apps.observe(viewLifecycleOwner, Observer { list ->
             list?.let { apps ->
                 adapter1.setItems(apps.filter {
@@ -86,16 +79,11 @@ class HomeFragment : BaseFragment(), OnLaunchAppListener {
 
     private fun setEventListeners() {
 
-        home_fragment_time.setOnClickListener { view ->
+        home_fragment_time.setOnClickListener {
             try {
-                val pm = context?.packageManager!!
                 val intent = Intent(AlarmClock.ACTION_SHOW_ALARMS)
                 intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
-                val componentName = intent.resolveActivity(pm)
-                if (componentName == null) launchActivity(view, intent) else
-                    pm.getLaunchIntentForPackage(componentName.packageName)?.let {
-                        launchActivity(view, it)
-                    }
+                launchActivity(it, intent)
             } catch (e: ActivityNotFoundException) {
                 e.printStackTrace()
                 // Do nothing, we've failed :(
@@ -104,8 +92,8 @@ class HomeFragment : BaseFragment(), OnLaunchAppListener {
 
         home_fragment_date.setOnClickListener {
             try {
-                val intent = Intent(Intent.ACTION_MAIN)
-                intent.addCategory(Intent.CATEGORY_APP_CALENDAR)
+                val builder = CalendarContract.CONTENT_URI.buildUpon().appendPath("time")
+                val intent = Intent(Intent.ACTION_VIEW, builder.build())
                 intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
                 launchActivity(it, intent)
             } catch (e: ActivityNotFoundException) {
@@ -138,32 +126,31 @@ class HomeFragment : BaseFragment(), OnLaunchAppListener {
     }
 
     fun updateClock() {
-        val twenty4Hour = context?.getSharedPreferences(getString(R.string.prefs_settings), Context.MODE_PRIVATE)
-                ?.getBoolean(getString(R.string.prefs_settings_key_time_format), true)
+        val active = context?.getSharedPreferences(getString(R.string.prefs_settings), Context.MODE_PRIVATE)
+                ?.getInt(getString(R.string.prefs_settings_key_time_format), 0)
         val date = Date()
-        if (twenty4Hour as Boolean) {
-            val fWatchTime = SimpleDateFormat("h:mm aa", Locale.ROOT)
-            home_fragment_time.text = fWatchTime.format(date)
-        } else {
-            val fWatchTime = SimpleDateFormat("H:mm", Locale.ROOT)
-            home_fragment_time.text = fWatchTime.format(date)
+
+        val fWatchTime = when(active) {
+            1 -> SimpleDateFormat("H:mm", Locale.ROOT)
+            2 -> SimpleDateFormat("h:mm aa", Locale.ROOT)
+            else -> DateFormat.getTimeInstance(DateFormat.SHORT)
         }
+        home_fragment_time.text = fWatchTime.format(date)
+
+
         val fWatchDate = SimpleDateFormat("EEE, MMM dd", Locale.ROOT)
         home_fragment_date.text = fWatchDate.format(date)
     }
 
     override fun onLaunch(app: HomeApp, view: View) {
         try {
-            val intent = Intent()
-            val name = ComponentName(app.packageName, app.activityName)
-            intent.action = Intent.ACTION_MAIN
-            intent.addCategory(Intent.CATEGORY_LAUNCHER)
-            intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED
-            intent.component = name
-
-            intent.resolveActivity(activity!!.packageManager)?.let {
-                launchActivity(view, intent)
-            }
+            val manager = requireContext().getSystemService(Context.USER_SERVICE) as UserManager
+            val launcher = requireContext().getSystemService(Context.LAUNCHER_APPS_SERVICE) as LauncherApps
+
+            val componentName = ComponentName(app.packageName, app.activityName)
+            val userHandle = manager.getUserForSerialNumber(app.userSerial)
+
+            launcher.startMainActivity(componentName, userHandle, view.clipBounds, null)
         } catch (e: Exception) {
             // Do no shit yet
         }

+ 31 - 30
app/src/main/java/com/sduduzog/slimlauncher/ui/options/AddAppFragment.kt

@@ -1,15 +1,17 @@
 package com.sduduzog.slimlauncher.ui.options
 
-import android.content.Intent
-import android.content.pm.ResolveInfo
+import android.content.Context
+import android.content.pm.LauncherApps
 import android.os.Bundle
+import android.os.Process
+import android.os.UserManager
 import android.text.Editable
 import android.text.TextWatcher
 import android.view.LayoutInflater
 import android.view.View
 import android.view.ViewGroup
+import androidx.fragment.app.viewModels
 import androidx.lifecycle.Observer
-import androidx.lifecycle.ViewModelProvider
 import androidx.navigation.Navigation
 import com.sduduzog.slimlauncher.BuildConfig
 import com.sduduzog.slimlauncher.R
@@ -18,22 +20,16 @@ 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 dagger.hilt.android.AndroidEntryPoint
 import kotlinx.android.synthetic.main.add_app_fragment.*
-import java.util.*
-import javax.inject.Inject
 
+@AndroidEntryPoint
 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)
-    }
+    private  val viewModel: AddAppViewModel by viewModels()
+
     override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
         return inflater.inflate(R.layout.add_app_fragment, container, false)
     }
@@ -44,9 +40,6 @@ open class AddAppFragment : BaseFragment(), OnAppClickedListener {
 
         add_app_fragment_list.adapter = adapter
 
-        activity?.let {
-            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(viewLifecycleOwner, Observer {
             it?.let { apps ->
                 adapter.setItems(apps)
@@ -90,23 +83,31 @@ open class AddAppFragment : BaseFragment(), OnAppClickedListener {
     }
 
     private fun getInstalledApps(): List<App> {
-        val pm = activity!!.packageManager
         val list = mutableListOf<App>()
-        val main = Intent(Intent.ACTION_MAIN, null)
-        main.addCategory(Intent.CATEGORY_LAUNCHER)
-        val activitiesList = pm.queryIntentActivities(main, 0)
-        Collections.sort(activitiesList, ResolveInfo.DisplayNameComparator(pm))
-        activitiesList.indices.forEach {
-            val item = activitiesList[it]
-            val activity = item.activityInfo
-            val app = App(
-                    activitiesList[it].loadLabel(pm).toString(),
-                    activity.applicationInfo.packageName, activity.name
-            )
-            list.add(app)
+
+        val manager = requireContext().getSystemService(Context.USER_SERVICE) as UserManager
+        val launcher = requireContext().getSystemService(Context.LAUNCHER_APPS_SERVICE) as LauncherApps
+        val myUserHandle = Process.myUserHandle()
+
+        for (profile in manager.userProfiles) {
+            val prefix = if (profile.equals(myUserHandle)) "" else "\uD83C\uDD46 " //Unicode for boxed w
+            val profileSerial = manager.getSerialNumberForUser(profile)
+
+            for (activityInfo in launcher.getActivityList(null, profile)) {
+                val app = App(
+                        appName = prefix + activityInfo.label.toString(),
+                        packageName = activityInfo.applicationInfo.packageName,
+                        activityName = activityInfo.name,
+                        userSerial = profileSerial
+                )
+                list.add(app)
+            }
         }
+
+        list.sortBy{it.appName}
+
         val filter = mutableListOf<String>()
         filter.add(BuildConfig.APPLICATION_ID)
         return list.filterNot { filter.contains(it.packageName) }
     }
-}
+}

+ 8 - 23
app/src/main/java/com/sduduzog/slimlauncher/ui/options/CustomiseAppsFragment.kt

@@ -6,8 +6,8 @@ import android.view.LayoutInflater
 import android.view.View
 import android.view.ViewGroup
 import androidx.appcompat.widget.PopupMenu
+import androidx.fragment.app.viewModels
 import androidx.lifecycle.Observer
-import androidx.lifecycle.ViewModelProvider
 import androidx.navigation.Navigation
 import androidx.recyclerview.widget.ItemTouchHelper
 import androidx.recyclerview.widget.RecyclerView
@@ -20,21 +20,16 @@ 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 dagger.hilt.android.AndroidEntryPoint
 import kotlinx.android.synthetic.main.customise_apps_fragment.*
-import javax.inject.Inject
 
 
+@AndroidEntryPoint
 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
+
+    private val viewModel: CustomiseAppsViewModel by viewModels()
 
     override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
         return inflater.inflate(R.layout.customise_apps_fragment, container, false)
@@ -44,21 +39,11 @@ class CustomiseAppsFragment : BaseFragment(), OnShitDoneToAppsListener {
         super.onActivityCreated(savedInstanceState)
 
         val adapter = CustomAppsAdapter(this)
-        activity?.let {
-            viewModel = ViewModelProvider(it, viewModelFactory).get(CustomiseAppsViewModel::class.java)
-        } ?: throw Error("Activity null, something here is fucked up")
 
         viewModel.apps.observe(viewLifecycleOwner, Observer {
             it?.let { apps ->
                 adapter.setItems(apps)
-                when (apps.size) {
-                    in 0..7 -> {
-                        customise_apps_fragment_add.visibility = View.VISIBLE
-                    }
-                    else -> {
-                        customise_apps_fragment_add.visibility = View.GONE
-                    }
-                }
+                customise_apps_fragment_add.visibility = if(apps.size < 7) View.VISIBLE else View.INVISIBLE
             } ?: adapter.setItems(listOf())
         })
         customise_apps_fragment_remove_all.setOnClickListener {
@@ -113,7 +98,7 @@ class CustomiseAppsFragment : BaseFragment(), OnShitDoneToAppsListener {
     }
 
     private fun showPopupMenu(view: View): PopupMenu {
-        val popup = PopupMenu(context!!, view)
+        val popup = PopupMenu(requireContext(), view)
         popup.menuInflater.inflate(R.menu.customise_apps_popup_menu, popup.menu)
         popup.show()
         return popup
@@ -139,4 +124,4 @@ class CustomiseAppsFragment : BaseFragment(), OnShitDoneToAppsListener {
             true
         }
     }
-}
+}

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

@@ -16,7 +16,7 @@ class OpenAppsFragment : AddAppFragment() {
             intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED
             intent.component = name
 
-            intent.resolveActivity(activity!!.packageManager)?.let {
+            intent.resolveActivity(requireActivity().packageManager)?.let {
                 launchActivity(getFragmentView(), intent)
             }
         } catch (e: Exception) {

+ 1 - 6
app/src/main/java/com/sduduzog/slimlauncher/ui/options/OptionsFragment.kt

@@ -14,16 +14,11 @@ 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)
     }
@@ -52,7 +47,7 @@ class OptionsFragment : BaseFragment() {
             chooseTimeFormatDialog.showNow(childFragmentManager, "TIME_FORMAT_CHOOSER")
         }
         options_fragment_toggle_status_bar.setOnClickListener {
-            val settings = context!!.getSharedPreferences(getString(R.string.prefs_settings), MODE_PRIVATE)
+            val settings = requireContext().getSharedPreferences(getString(R.string.prefs_settings), MODE_PRIVATE)
             val isHidden = settings.getBoolean(getString(R.string.prefs_settings_key_toggle_status_bar), false)
             settings.edit {
                 putBoolean(getString(R.string.prefs_settings_key_toggle_status_bar), !isHidden)

+ 4 - 4
app/src/main/java/com/sduduzog/slimlauncher/utils/BaseFragment.kt

@@ -18,21 +18,21 @@ abstract class BaseFragment : Fragment() {
 
     override fun onResume() {
         super.onResume()
-        val settings = context!!.getSharedPreferences(getString(R.string.prefs_settings), AppCompatActivity.MODE_PRIVATE)
+        val settings = requireContext().getSharedPreferences(getString(R.string.prefs_settings), AppCompatActivity.MODE_PRIVATE)
         val active = settings.getInt(getString(R.string.prefs_settings_key_theme), 0)
 
 
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
             when (active) {
                 0, 3, 5 -> {
-                    val flags = activity!!.window.decorView.systemUiVisibility or View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
+                    val flags = requireActivity().window.decorView.systemUiVisibility or View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
                     getFragmentView().systemUiVisibility = flags
                 }
 
             }
             val value = TypedValue()
-            context!!.theme.resolveAttribute(R.attr.colorPrimary, value, true)
-            activity!!.window.statusBarColor = value.data
+            requireContext().theme.resolveAttribute(R.attr.colorPrimary, value, true)
+            requireActivity().window.statusBarColor = value.data
         }
 
     }

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

@@ -4,7 +4,7 @@
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
-    app:layoutDescription="@xml/home_motion_01_scene">
+    tools:ignore="MotionLayoutInvalidSceneFileReference">
 
     <TextView
         android:id="@+id/home_fragment_time"
@@ -101,7 +101,6 @@
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_marginStart="@dimen/_8sdp"
-        android:layout_marginLeft="@dimen/_8sdp"
         android:layout_marginBottom="@dimen/_8sdp"
         android:padding="@dimen/_8sdp"
         app:layout_constraintBottom_toBottomOf="parent"
@@ -115,7 +114,6 @@
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_marginEnd="@dimen/_8sdp"
-        android:layout_marginRight="@dimen/_8sdp"
         android:layout_marginBottom="@dimen/_8sdp"
         android:padding="@dimen/_8sdp"
         app:layout_constraintBottom_toBottomOf="parent"

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

@@ -4,7 +4,7 @@
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
-    app:layoutDescription="@xml/home_motion_02_scene">
+    tools:ignore="MotionLayoutInvalidSceneFileReference">
 
     <TextView
         android:id="@+id/home_fragment_time"
@@ -76,7 +76,6 @@
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_marginStart="@dimen/_16sdp"
-        android:layout_marginLeft="@dimen/_16sdp"
         android:layout_marginBottom="@dimen/_16sdp"
         android:padding="@dimen/_8sdp"
         android:text="@string/main_fragment_options"
@@ -106,7 +105,6 @@
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_marginStart="@dimen/_8sdp"
-        android:layout_marginLeft="@dimen/_8sdp"
         android:alpha="-1"
         android:padding="@dimen/_8sdp"
         app:layout_constraintStart_toStartOf="parent"
@@ -119,7 +117,6 @@
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_marginEnd="@dimen/_8sdp"
-        android:layout_marginRight="@dimen/_8sdp"
         android:alpha="-1"
         android:padding="@dimen/_8sdp"
         app:layout_constraintEnd_toEndOf="parent"

+ 46 - 0
app/src/main/res/values-nb/strings.xml

@@ -0,0 +1,46 @@
+<resources>
+    <string name="app_name" translatable="false">Slim Launcher</string>
+    <string name="slim_url" translatable="false">http://sduduzog.github.io/slim-launcher/</string>
+    <string name="main_placeholder_clock" translatable="false">00:00</string>
+    <string name="main_placeholder_date" translatable="false">Sat, Apr 20</string>
+
+    <string-array name="themes_array">
+        <item>Forvalg</item>
+        <item>Midnatt</item>
+        <item>Jupiter</item>
+        <item>Turkis</item>
+        <item>Godteri</item>
+        <item>Pastell</item>
+    </string-array>
+
+    <string-array name="time_format_array">
+        <item>24-timersklokke</item>
+        <item>12-timersklokke</item>
+    </string-array>
+
+    <string name="prefs_settings" translatable="false">settings</string>
+    <string name="prefs_settings_key_theme" translatable="false">key_theme</string>
+    <string name="prefs_settings_key_time_format" translatable="false">clock_type</string>
+    <string name="prefs_settings_key_toggle_status_bar" translatable="false">hide_status_bar</string>
+    <string name="choose_time_format_dialog_title">Velg tidsformat</string>
+    <string name="main_fragment_options">Innstillinger</string>
+    <string name="options_fragment_about_slim">Om</string>
+    <string name="options_fragment_device_settings">Enhetsinnstillinger</string>
+    <string name="options_fragment_change_theme">Drakt</string>
+    <string name="options_fragment_choose_time_format">Tidsformat</string>
+    <string name="options_fragment_customise_apps">Tilpass programmer</string>
+    <string name="options_fragment_toggle_status_bar">Statusfelt på/av</string>
+    <string name="options_fragment_hide_status_bar">Skjul statusfelt</string>
+    <string name="options_fragment_show_status_bar">Vis statusfelt</string>
+    <string name="customise_apps_fragment_add">Legg til</string>
+    <string name="menu_rename">Gi nytt navn</string>
+    <string name="menu_remove">Fjern</string>
+    <string name="choose_theme_dialog_title">Velg drakt</string>
+    <string name="add_apps_fragment_search_apps">Søk etter programmer</string>
+    <string name="customise_apps_fragment_remove_all">Fjern alle</string>
+    <string name="menu_reset">Tilbakestill</string>
+    <string name="remove_all_apps_dialog_title" translatable="false">Fjern alle programmer</string>
+    <string name="remove_all_apps_dialog_message" translatable="false">"Programmene dine blir ikke avinstallert."
+    "Dette bekrefter kun at du fjerner listen med overlegg."</string>
+
+</resources>

+ 46 - 0
app/src/main/res/values-nl/strings.xml

@@ -0,0 +1,46 @@
+<resources>
+    <string name="app_name" translatable="false">Slim Launcher</string>
+    <string name="slim_url" translatable="false">http://sduduzog.github.io/slim-launcher/</string>
+    <string name="main_placeholder_clock" translatable="false">00:00</string>
+    <string name="main_placeholder_date" translatable="false">Sat, Apr 20</string>
+
+    <string-array name="themes_array">
+        <item>Standaard</item>
+        <item>Middernacht</item>
+        <item>Jupiter</item>
+        <item>Blauwgroen</item>
+        <item>Snoep</item>
+        <item>Pastel</item>
+    </string-array>
+
+    <string-array name="time_format_array">
+        <item>24 uur</item>
+        <item>12 uur</item>
+    </string-array>
+
+    <string name="prefs_settings" translatable="false">settings</string>
+    <string name="prefs_settings_key_theme" translatable="false">key_theme</string>
+    <string name="prefs_settings_key_time_format" translatable="false">clock_type</string>
+    <string name="prefs_settings_key_toggle_status_bar" translatable="false">hide_status_bar</string>
+    <string name="choose_time_format_dialog_title">Kies de tijdopmaak</string>
+    <string name="main_fragment_options">Opties</string>
+    <string name="options_fragment_about_slim">Over Slim</string>
+    <string name="options_fragment_device_settings">Systeeminstellingen</string>
+    <string name="options_fragment_change_theme">Thema wijzigen</string>
+    <string name="options_fragment_choose_time_format">Kies de tijdopmaak</string>
+    <string name="options_fragment_customise_apps">Apps aanpassen</string>
+    <string name="options_fragment_toggle_status_bar">Statusbalk tonen/verbergen</string>
+    <string name="options_fragment_hide_status_bar">Statusbalk verbergen</string>
+    <string name="options_fragment_show_status_bar">Statusbalk tonen</string>
+    <string name="customise_apps_fragment_add">Toevoegen</string>
+    <string name="menu_rename">Naam wijzigen</string>
+    <string name="menu_remove">Verwijderen</string>
+    <string name="choose_theme_dialog_title">Thema kiezen</string>
+    <string name="add_apps_fragment_search_apps">Zoeken naar apps</string>
+    <string name="customise_apps_fragment_remove_all">Alles verwijderen</string>
+    <string name="menu_reset">Standaardwaarden</string>
+    <string name="remove_all_apps_dialog_title" translatable="false">Remove All Apps</string>
+    <string name="remove_all_apps_dialog_message" translatable="false">"This action will not uninstall your apps."
+    "It is just to confirm if you're clearing this list on purpose"</string>
+
+</resources>

+ 2 - 1
app/src/main/res/values/strings.xml

@@ -14,13 +14,14 @@
     </string-array>
 
     <string-array name="time_format_array">
+        <item>Follow system settings</item>
         <item>24 Hour</item>
         <item>12 Hour</item>
     </string-array>
 
     <string name="prefs_settings" translatable="false">settings</string>
     <string name="prefs_settings_key_theme" translatable="false">key_theme</string>
-    <string name="prefs_settings_key_time_format" translatable="false">clock_type</string>
+    <string name="prefs_settings_key_time_format" translatable="false">time_format</string>
     <string name="prefs_settings_key_toggle_status_bar" translatable="false">hide_status_bar</string>
     <string name="choose_time_format_dialog_title">Choose Time Format</string>
     <string name="main_fragment_options">Options</string>

+ 2 - 1
build.gradle.kts

@@ -6,8 +6,9 @@ buildscript {
         jcenter()
     }
     dependencies {
-        classpath("com.android.tools.build:gradle:4.0.0")
+        classpath("com.android.tools.build:gradle:4.0.1")
         classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.3.72")
+        classpath("com.google.dagger:hilt-android-gradle-plugin:2.28-alpha")
 
         // NOTE: Do not place your application dependencies here; they belong
         // in the individual module build.gradle files