Pārlūkot izejas kodu

Changes from slim-launcher 2.4.18 (#19)

Joshua Kuestersteffen 5 gadi atpakaļ
vecāks
revīzija
68bdff2599

+ 30 - 6
app/build.gradle.kts

@@ -47,6 +47,10 @@ android {
     kotlinOptions {
         jvmTarget = JavaVersion.VERSION_1_8.toString()
     }
+
+    testOptions {
+        unitTests.isIncludeAndroidResources = true
+    }
     lintOptions{
         disable = mutableSetOf("MissingTranslation")
     }
@@ -69,7 +73,7 @@ dependencies {
     implementation("androidx.constraintlayout:constraintlayout:2.0.1")
 
     // Arch Components
-    implementation("androidx.core:core-ktx:1.5.0-alpha02")
+    implementation("androidx.core:core-ktx:1.5.0-alpha03")
     implementation("androidx.fragment:fragment-ktx:1.2.5")
     implementation("androidx.lifecycle:lifecycle-extensions:2.2.0")
     implementation("androidx.navigation:navigation-fragment-ktx:2.3.0")
@@ -80,15 +84,35 @@ dependencies {
     //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:hilt-android:2.28-alpha")
+    implementation("com.google.dagger:hilt-android:2.29-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")
+    kapt("com.google.dagger:hilt-android-compiler:2.29-alpha")
 
     // Test libs
-    testImplementation("junit:junit:4.12")
-    testImplementation("org.mockito:mockito-core:2.19.0")
+
+    testImplementation("androidx.test:core:1.3.0")
+
+    testImplementation("androidx.test:runner:1.3.0")
+    testImplementation("androidx.test:rules:1.3.0")
+
+    testImplementation("androidx.test.ext:junit:1.1.2")
+    testImplementation("androidx.test.ext:truth:1.3.0")
+    testImplementation("com.google.truth:truth:1.0")
+
+
+    testImplementation("androidx.arch.core:core-testing:2.1.0")
+    testImplementation("androidx.fragment:fragment-testing:1.2.5")
+
+    testImplementation("org.robolectric:robolectric:4.4")
+
+    testImplementation("org.mockito:mockito-core:2.24.5")
+
+    testImplementation("androidx.test.espresso:espresso-core:3.3.0")
+
+    testImplementation("com.google.dagger:hilt-android-testing:2.29-alpha")
+    kaptTest("com.google.dagger:hilt-android-compiler:2.29-alpha")
+
     androidTestImplementation("androidx.room:room-testing:2.2.5")
     androidTestImplementation("androidx.test:runner:1.3.0")
     androidTestImplementation("androidx.test:rules:1.3.0")

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

@@ -1,32 +0,0 @@
-package com.sduduzog.slimlauncher
-
-
-import androidx.test.filters.LargeTest
-import androidx.test.internal.runner.junit4.AndroidJUnit4ClassRunner
-import androidx.test.rule.ActivityTestRule
-import org.junit.Rule
-import org.junit.Test
-import org.junit.runner.RunWith
-
-@LargeTest
-@RunWith(AndroidJUnit4ClassRunner::class)
-class TasksFragmentTest {
-
-    @Rule
-    @JvmField
-    var mActivityTestRule = ActivityTestRule(MainActivity::class.java)
-
-    @Test
-    fun userCanAddTask() {
-//        val taskButton = onView(allOf(withText(R.string.home_fragment_tasks), isDisplayed()))
-//        taskButton.perform(click())
-//        val inputField = onView(allOf(withHint(R.string.tasks_fragment_enter_a_new_task), isDisplayed()))
-//
-//        inputField.perform(typeText("Testing"))
-//        inputField.perform(pressKey(KeyEvent.KEYCODE_ENTER))
-//
-//        val checkBox = onView(allOf(withText("Testing"), isDisplayed()))
-//
-//        checkBox.check(matches(isNotChecked()))
-    }
-}

+ 18 - 0
app/src/debug/AndroidManifest.xml

@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    package="com.sduduzog.slimlauncher">
+
+    <application>
+        <activity
+            android:name=".HiltTestActivity"
+            android:exported="false">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+
+                <category android:name="android.intent.category.LAUNCHER" />
+            </intent-filter>
+        </activity>
+    </application>
+
+</manifest>

+ 15 - 0
app/src/debug/java/com/sduduzog/slimlauncher/HiltTestActivity.kt

@@ -0,0 +1,15 @@
+package com.sduduzog.slimlauncher
+
+import androidx.appcompat.app.AppCompatActivity
+import com.sduduzog.slimlauncher.utils.IPublisher
+import com.sduduzog.slimlauncher.utils.ISubscriber
+import dagger.hilt.android.AndroidEntryPoint
+
+@AndroidEntryPoint
+class HiltTestActivity : AppCompatActivity(), IPublisher {
+    override fun attachSubscriber(s: ISubscriber) {
+    }
+
+    override fun detachSubscriber(s: ISubscriber) {
+    }
+}

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

@@ -4,6 +4,8 @@
     package="com.sduduzog.slimlauncher">
 
     <uses-permission android:name="com.android.alarm.permission.SET_ALARM" />
+    <uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" />
+
 
     <application
         android:name=".App"

+ 11 - 5
app/src/main/java/com/sduduzog/slimlauncher/MainActivity.kt

@@ -7,27 +7,31 @@ import android.view.View
 import androidx.appcompat.app.AppCompatActivity
 import androidx.navigation.NavController
 import androidx.navigation.Navigation.findNavController
+import com.sduduzog.slimlauncher.di.MainFragmentFactoryEntryPoint
 import com.sduduzog.slimlauncher.utils.BaseFragment
 import com.sduduzog.slimlauncher.utils.HomeWatcher
+import com.sduduzog.slimlauncher.utils.IPublisher
+import com.sduduzog.slimlauncher.utils.ISubscriber
 import dagger.hilt.android.AndroidEntryPoint
+import dagger.hilt.android.EntryPointAccessors
 
 
 @AndroidEntryPoint
 class MainActivity : AppCompatActivity(),
         SharedPreferences.OnSharedPreferenceChangeListener,
-        HomeWatcher.OnHomePressedListener {
+        HomeWatcher.OnHomePressedListener, IPublisher {
 
     private lateinit var settings: SharedPreferences
     private lateinit var navigator: NavController
     private lateinit var homeWatcher: HomeWatcher
     private val subscribers: MutableSet<BaseFragment> = mutableSetOf()
 
-    fun attachSubscriber(s: BaseFragment) {
-        subscribers.add(s)
+    override fun attachSubscriber(s: ISubscriber) {
+        subscribers.add(s as BaseFragment)
     }
 
-    fun detachSubscriber(s: BaseFragment) {
-        subscribers.remove(s)
+    override fun detachSubscriber(s: ISubscriber) {
+        subscribers.remove(s as BaseFragment)
     }
 
     private fun dispatchBack() {
@@ -40,6 +44,8 @@ class MainActivity : AppCompatActivity(),
     }
 
     override fun onCreate(savedInstanceState: Bundle?) {
+        val entryPoint = EntryPointAccessors.fromActivity(this, MainFragmentFactoryEntryPoint::class.java)
+        supportFragmentManager.fragmentFactory = entryPoint.getMainFragmentFactory()
         super.onCreate(savedInstanceState)
         setContentView(R.layout.main_activity)
         settings = getSharedPreferences(getString(R.string.prefs_settings), MODE_PRIVATE)

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

@@ -1,9 +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
 import androidx.room.migration.Migration
 import androidx.sqlite.db.SupportSQLiteDatabase
@@ -16,29 +14,6 @@ abstract class BaseDatabase : RoomDatabase() {
     abstract fun baseDao(): BaseDao
 
     companion object {
-        @Volatile
-        @JvmStatic
-        private var INSTANCE: BaseDatabase? = null
-
-        fun getDatabase(context: Context): BaseDatabase? {
-            synchronized(BaseDatabase::class.java) {
-                if (INSTANCE == null) {
-                    INSTANCE = Room.databaseBuilder(context.applicationContext,
-                            BaseDatabase::class.java, "app_database")
-                            .addMigrations(
-                                    MIGRATION_1_2,
-                                    MIGRATION_2_3,
-                                    MIGRATION_3_4,
-                                    MIGRATION_4_5,
-                                    MIGRATION_5_6,
-                                    MIGRATION_6_7,
-                                    MIGRATION_7_8
-                            )
-                            .build()
-                }
-                return INSTANCE
-            }
-        }
 
          val MIGRATION_1_2 = object : Migration(1, 2) {
             override fun migrate(database: SupportSQLiteDatabase) {

+ 39 - 0
app/src/main/java/com/sduduzog/slimlauncher/di/AppModule.kt

@@ -0,0 +1,39 @@
+package com.sduduzog.slimlauncher.di
+
+import android.app.Application
+import androidx.room.Room
+import com.sduduzog.slimlauncher.data.BaseDao
+import com.sduduzog.slimlauncher.data.BaseDatabase
+import dagger.Binds
+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 AppModule {
+    @Provides
+    @Singleton
+    internal fun provideBaseDatabase(application: Application): BaseDatabase {
+        return Room.databaseBuilder(application,
+                BaseDatabase::class.java, "app_database")
+                .addMigrations(
+                        BaseDatabase.MIGRATION_1_2,
+                        BaseDatabase.MIGRATION_2_3,
+                        BaseDatabase.MIGRATION_3_4,
+                        BaseDatabase.MIGRATION_4_5,
+                        BaseDatabase.MIGRATION_5_6,
+                        BaseDatabase.MIGRATION_6_7,
+                        BaseDatabase.MIGRATION_7_8
+                )
+                .build()
+    }
+
+    @Provides
+    @Singleton
+    internal fun provideBaseDao(baseDatabase: BaseDatabase): BaseDao {
+        return baseDatabase.baseDao()
+    }
+}

+ 16 - 0
app/src/main/java/com/sduduzog/slimlauncher/di/MainFragmentFactory.kt

@@ -0,0 +1,16 @@
+package com.sduduzog.slimlauncher.di
+
+import androidx.fragment.app.Fragment
+import androidx.fragment.app.FragmentFactory
+import com.sduduzog.slimlauncher.models.MainViewModel
+import com.sduduzog.slimlauncher.ui.main.HomeFragment
+import javax.inject.Inject
+
+class MainFragmentFactory @Inject constructor(private val mainViewModel: MainViewModel): FragmentFactory() {
+    override fun instantiate(classLoader: ClassLoader, className: String): Fragment {
+        return when(loadFragmentClass(classLoader, className)) {
+            HomeFragment::class.java -> HomeFragment(mainViewModel)
+            else -> super.instantiate(classLoader, className)
+        }
+    }
+}

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

@@ -0,0 +1,11 @@
+package com.sduduzog.slimlauncher.di
+
+import dagger.hilt.EntryPoint
+import dagger.hilt.InstallIn
+import dagger.hilt.android.components.ActivityComponent
+
+@EntryPoint
+@InstallIn(ActivityComponent::class)
+interface MainFragmentFactoryEntryPoint {
+    fun getMainFragmentFactory(): MainFragmentFactory
+}

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

@@ -1,45 +0,0 @@
-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 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
-    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,
-                        MIGRATION_7_8
-                )
-                .build()
-    }
-
-    @Provides
-    @Singleton
-    internal fun provideBaseDao(baseDatabase: BaseDatabase) : BaseDao {
-        return baseDatabase.baseDao()
-    }
-}

+ 2 - 2
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 @ViewModelInject constructor(baseDao: BaseDao) : ViewModel() {
+class MainViewModel @Inject constructor(baseDao: BaseDao) : ViewModel() {
 
     private val _baseRepository = Repository(baseDao)
 

+ 1 - 3
app/src/main/java/com/sduduzog/slimlauncher/ui/main/HomeFragment.kt

@@ -10,7 +10,6 @@ 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.navigation.Navigation
 import com.sduduzog.slimlauncher.R
@@ -26,10 +25,9 @@ import java.text.SimpleDateFormat
 import java.util.*
 
 @AndroidEntryPoint
-class HomeFragment : BaseFragment(), OnLaunchAppListener {
+class HomeFragment(private val viewModel: MainViewModel) : BaseFragment(), OnLaunchAppListener {
 
     private lateinit var receiver: BroadcastReceiver
-    private val viewModel: MainViewModel by viewModels()
 
     override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
                               savedInstanceState: Bundle?): View {

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

@@ -11,7 +11,7 @@ import androidx.fragment.app.Fragment
 import com.sduduzog.slimlauncher.MainActivity
 import com.sduduzog.slimlauncher.R
 
-abstract class BaseFragment : Fragment() {
+abstract class BaseFragment : Fragment(), ISubscriber {
 
     abstract fun getFragmentView(): ViewGroup
 
@@ -39,14 +39,14 @@ abstract class BaseFragment : Fragment() {
 
     override fun onStart() {
         super.onStart()
-        with(activity as MainActivity) {
+        with(activity as IPublisher) {
             this.attachSubscriber(this@BaseFragment)
         }
     }
 
     override fun onStop() {
         super.onStop()
-        with(activity as MainActivity) {
+        with(activity as IPublisher) {
             this.detachSubscriber(this@BaseFragment)
         }
     }

+ 6 - 0
app/src/main/java/com/sduduzog/slimlauncher/utils/IPublisher.kt

@@ -0,0 +1,6 @@
+package com.sduduzog.slimlauncher.utils
+
+interface IPublisher{
+    fun attachSubscriber(s: ISubscriber)
+    fun detachSubscriber(s: ISubscriber)
+}

+ 3 - 0
app/src/main/java/com/sduduzog/slimlauncher/utils/ISubscriber.kt

@@ -0,0 +1,3 @@
+package com.sduduzog.slimlauncher.utils
+
+interface ISubscriber{}

+ 5 - 0
build.gradle.kts

@@ -1,9 +1,13 @@
+import java.net.URI
+
 // Top-level build file where you can add configuration options common to all sub-projects/modules.
 
 buildscript {
     repositories {
         google()
         jcenter()
+//        maven { url = URI("https://oss.sonatype.org/content/repositories/snapshots/") }
+        maven { url = java.net.URI("https://jitpack.io") }
     }
     dependencies {
         classpath("com.android.tools.build:gradle:4.0.1")
@@ -19,6 +23,7 @@ allprojects {
     repositories {
         google()
         jcenter()
+        maven { url = java.net.URI("https://jitpack.io") }
     }
 }