From 9830bba2db79dccdffe21ca2e7ea717b60b6646a Mon Sep 17 00:00:00 2001 From: "Adam M. Szalkowski" Date: Tue, 16 Jun 2026 17:50:11 +0200 Subject: [PATCH] fix: icon loading on demand and cache invalidation on language change --- app/build.gradle.kts | 2 + .../data/packages/CacheLanguageTest.kt | 53 +++++++++++++++++++ .../data/database/AppDatabase.kt | 3 ++ .../data/launcher/IconLoaderImpl.kt | 7 ++- .../data/launcher/ShortcutCreatorImpl.kt | 13 ++++- .../data/packages/ActivityRepositoryImpl.kt | 18 +++---- .../data/packages/PackageDataSource.kt | 4 ++ .../data/packages/PackageRepositoryImpl.kt | 28 ++++++---- .../domain/model/PackageModel.kt | 4 -- .../domain/packages/ActivityRepository.kt | 2 + .../domain/packages/PackageRepository.kt | 1 + .../activities/ActivityDetailsViewModel.kt | 3 +- .../activities/ActivityInfoAdapter.kt | 6 ++- .../activities/ActivityListAdapter.kt | 4 +- .../common/BaseActivityListFragment.kt | 6 ++- .../presentation/common/IconListAdapter.kt | 4 +- .../packages/PackageListAdapter.kt | 3 +- .../launcher/CreateShortcutUseCaseTest.kt | 3 +- .../ActivityDetailsViewModelTest.kt | 2 - .../favorites/FavoritesViewModelTest.kt | 3 +- .../packages/PackageListViewModelTest.kt | 2 - 21 files changed, 124 insertions(+), 47 deletions(-) create mode 100644 app/src/androidTest/java/de/szalkowski/activitylauncher/data/packages/CacheLanguageTest.kt diff --git a/app/build.gradle.kts b/app/build.gradle.kts index ae700a3..935eeb7 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -218,4 +218,6 @@ dependencies { androidTestImplementation("androidx.test.espresso:espresso-core:3.7.0") androidTestImplementation("org.mockito:mockito-android:5.11.0") androidTestImplementation("org.mockito.kotlin:mockito-kotlin:5.2.1") + androidTestImplementation("com.google.dagger:hilt-android-testing:2.59.2") + kspAndroidTest("com.google.dagger:hilt-compiler:2.59.2") } diff --git a/app/src/androidTest/java/de/szalkowski/activitylauncher/data/packages/CacheLanguageTest.kt b/app/src/androidTest/java/de/szalkowski/activitylauncher/data/packages/CacheLanguageTest.kt new file mode 100644 index 0000000..328657b --- /dev/null +++ b/app/src/androidTest/java/de/szalkowski/activitylauncher/data/packages/CacheLanguageTest.kt @@ -0,0 +1,53 @@ +package de.szalkowski.activitylauncher.data.packages + +import androidx.test.ext.junit.runners.AndroidJUnit4 +import dagger.hilt.android.testing.HiltAndroidRule +import dagger.hilt.android.testing.HiltAndroidTest +import de.szalkowski.activitylauncher.data.database.PackageDao +import kotlinx.coroutines.flow.first +import kotlinx.coroutines.runBlocking +import org.junit.Assert.assertTrue +import org.junit.Before +import org.junit.Rule +import org.junit.Test +import org.junit.runner.RunWith +import javax.inject.Inject + +@HiltAndroidTest +@RunWith(AndroidJUnit4::class) +class CacheLanguageTest { + + @get:Rule + var hiltRule = HiltAndroidRule(this) + + @Inject + lateinit var dataSource: PackageDataSource + + @Inject + lateinit var packageDao: PackageDao + + @Before + fun init() { + hiltRule.inject() + } + + @Test + fun testCachePurgeOnInvalidate() = runBlocking { + // 1. Ensure cache has data + dataSource.sync() + + val initialPackages = packageDao.getAllPackagesFlow().first() + if (initialPackages.isEmpty()) return@runBlocking + + // 2. Clear cache via data source (simulating invalidate behavior) + dataSource.clear() + + val afterClearPackages = packageDao.getAllPackagesFlow().first() + assertTrue("Cache should be empty after clear", afterClearPackages.isEmpty()) + + // 3. Sync again + dataSource.sync() + val afterSyncPackages = packageDao.getAllPackagesFlow().first() + assertTrue("Cache should be repopulated after sync", afterSyncPackages.isNotEmpty()) + } +} diff --git a/app/src/main/java/de/szalkowski/activitylauncher/data/database/AppDatabase.kt b/app/src/main/java/de/szalkowski/activitylauncher/data/database/AppDatabase.kt index 00e28ae..ed61107 100644 --- a/app/src/main/java/de/szalkowski/activitylauncher/data/database/AppDatabase.kt +++ b/app/src/main/java/de/szalkowski/activitylauncher/data/database/AppDatabase.kt @@ -35,6 +35,9 @@ interface PackageDao { @Transaction @Query("DELETE FROM activities WHERE packageName = :packageName") suspend fun deleteActivitiesForPackage(packageName: String): Int + + @Query("DELETE FROM packages") + suspend fun deleteAllPackages(): Int } data class PackageWithActivities( diff --git a/app/src/main/java/de/szalkowski/activitylauncher/data/launcher/IconLoaderImpl.kt b/app/src/main/java/de/szalkowski/activitylauncher/data/launcher/IconLoaderImpl.kt index 43bff4a..efdfefd 100644 --- a/app/src/main/java/de/szalkowski/activitylauncher/data/launcher/IconLoaderImpl.kt +++ b/app/src/main/java/de/szalkowski/activitylauncher/data/launcher/IconLoaderImpl.kt @@ -16,7 +16,6 @@ import de.szalkowski.activitylauncher.domain.packages.PackageRepository import de.szalkowski.activitylauncher.domain.settings.SettingsRepository import de.szalkowski.activitylauncher.presentation.common.AsyncProvider import de.szalkowski.activitylauncher.presentation.common.IconListAdapter -import java.util.TreeMap import javax.inject.Inject class IconLoaderImpl @Inject constructor( @@ -60,7 +59,7 @@ class IconLoaderImpl @Inject constructor( } override fun loadIcons(updater: AsyncProvider.Updater?): List { - val icons: TreeMap = TreeMap() + val icons: java.util.TreeSet = java.util.TreeSet() val packages = packageRepository.packages updater?.updateMax(packages.size) @@ -72,11 +71,11 @@ class IconLoaderImpl @Inject constructor( runCatching { val activities = activityRepository.getActivities(pack.value.packageName) for (activity in listOfNotNull(activities.defaultActivity) + activities.activities) { - activity.iconResourceName?.let { icons[it] = activity.icon } + activity.iconResourceName?.let { icons.add(it) } } } } - return icons.map { entry -> IconInfo(entry.key, entry.value) }.toList() + return icons.map { IconInfo(it) }.toList() } } diff --git a/app/src/main/java/de/szalkowski/activitylauncher/data/launcher/ShortcutCreatorImpl.kt b/app/src/main/java/de/szalkowski/activitylauncher/data/launcher/ShortcutCreatorImpl.kt index 852edeb..9920c75 100644 --- a/app/src/main/java/de/szalkowski/activitylauncher/data/launcher/ShortcutCreatorImpl.kt +++ b/app/src/main/java/de/szalkowski/activitylauncher/data/launcher/ShortcutCreatorImpl.kt @@ -46,15 +46,16 @@ class ShortcutCreatorImpl @Inject constructor( try { val pack = extractIconPackageName(activity) val intent = getActivityIntent(activity.componentName, optionalExtras) + val icon = getIcon(activity.componentName) // Use bitmap version, if icon from different package is used if (pack != null && pack != activity.componentName.packageName) { - createShortcut(activity.name, intent, activity.icon, asRoot, null) + createShortcut(activity.name, intent, icon, asRoot, null) } else { createShortcut( activity.name, intent, - activity.icon, + icon, asRoot, activity.iconResourceName, ) @@ -69,6 +70,14 @@ class ShortcutCreatorImpl @Inject constructor( } } + private fun getIcon(componentName: android.content.ComponentName): Drawable = runCatching { + val pm = context.packageManager + val activityInfo = pm.getActivityInfo(componentName, 0) + activityInfo.loadIcon(pm) + }.getOrElse { + context.packageManager.defaultActivityIcon + } + private fun extractIconPackageName( activity: MyActivityInfo, ): String? { diff --git a/app/src/main/java/de/szalkowski/activitylauncher/data/packages/ActivityRepositoryImpl.kt b/app/src/main/java/de/szalkowski/activitylauncher/data/packages/ActivityRepositoryImpl.kt index ce8478b..1c0be27 100644 --- a/app/src/main/java/de/szalkowski/activitylauncher/data/packages/ActivityRepositoryImpl.kt +++ b/app/src/main/java/de/szalkowski/activitylauncher/data/packages/ActivityRepositoryImpl.kt @@ -58,7 +58,6 @@ class ActivityRepositoryImpl @Inject constructor( return MyActivityInfo( componentName, createNameFromClass(componentName.className), - packageManager.defaultActivityIcon, null, false, ) @@ -67,6 +66,15 @@ class ActivityRepositoryImpl @Inject constructor( return getActivityInfo(activityInfo, name) } + override fun getIcon(componentName: ComponentName): Drawable { + return runCatching { + val activityInfo = packageManager.getActivityInfo(componentName, 0) + activityInfo.loadIcon(packageManager) + }.getOrElse { + packageManager.defaultActivityIcon + } + } + override fun invalidate() { this.packageRepository.invalidate() } @@ -77,14 +85,12 @@ class ActivityRepositoryImpl @Inject constructor( ): MyActivityInfo { val componentName = activityInfo.componentName val name = nameInfo.name - val icon = getIcon(activityInfo) val iconResourceName = getIconResourceName(activityInfo) val isPrivate = activityInfo.isPrivate(packageManager) return MyActivityInfo( componentName, name, - icon, iconResourceName, isPrivate, ) @@ -103,12 +109,6 @@ class ActivityRepositoryImpl @Inject constructor( }.getOrNull() } - private fun getIcon(activityInfo: ActivityInfo): Drawable = runCatching { - activityInfo.loadIcon(packageManager) - }.getOrElse { - packageManager.defaultActivityIcon - } - private fun createNameFromClass(cls: String): String { val name = cls.substringAfterLast('.') val config = settingsRepository.getLocaleConfiguration() diff --git a/app/src/main/java/de/szalkowski/activitylauncher/data/packages/PackageDataSource.kt b/app/src/main/java/de/szalkowski/activitylauncher/data/packages/PackageDataSource.kt index 8a0433a..dd94085 100644 --- a/app/src/main/java/de/szalkowski/activitylauncher/data/packages/PackageDataSource.kt +++ b/app/src/main/java/de/szalkowski/activitylauncher/data/packages/PackageDataSource.kt @@ -124,6 +124,10 @@ class PackageDataSource @Inject constructor( packageDao.deletePackageByName(packageName) } + suspend fun clear() = withContext(Dispatchers.IO) { + packageDao.deleteAllPackages() + } + private fun getVersion(info: PackageInfo): String = "${info.versionName} (${PackageInfoCompat.getLongVersionCode(info)})" diff --git a/app/src/main/java/de/szalkowski/activitylauncher/data/packages/PackageRepositoryImpl.kt b/app/src/main/java/de/szalkowski/activitylauncher/data/packages/PackageRepositoryImpl.kt index d5ac18b..a87e0fe 100644 --- a/app/src/main/java/de/szalkowski/activitylauncher/data/packages/PackageRepositoryImpl.kt +++ b/app/src/main/java/de/szalkowski/activitylauncher/data/packages/PackageRepositoryImpl.kt @@ -47,19 +47,16 @@ class PackageRepositoryImpl @Inject constructor( override fun sync() { scope.launch { - dataSource.sync() - dataSource.loadAllDetails() + performSync() } } - private fun PackageWithActivities.toMyPackageInfo(): MyPackageInfo { - val app = runCatching { packageManager.getApplicationInfo(pkg.packageName, 0) }.getOrNull() - val icon = if (app != null) { - packageManager.getApplicationIcon(app) - } else { - packageManager.defaultActivityIcon - } + private suspend fun performSync() { + dataSource.sync() + dataSource.loadAllDetails() + } + private fun PackageWithActivities.toMyPackageInfo(): MyPackageInfo { val activityNames = activities.filter { !it.isDefault }.map { ActivityName(it.name, it.shortCls, it.fullCls) } @@ -74,17 +71,26 @@ class PackageRepositoryImpl @Inject constructor( version = pkg.version, defaultActivityName = defaultActivityName, activityNames = activityNames, - icon = icon, iconResourceName = pkg.iconResourceName, isFullyLoaded = pkg.isFullyLoaded, ) } + override fun getIcon(packageName: String): android.graphics.drawable.Drawable { + return runCatching { + val app = packageManager.getApplicationInfo(packageName, 0) + packageManager.getApplicationIcon(app) + }.getOrElse { packageManager.defaultActivityIcon } + } + override fun getPackage(packageName: String): MyPackageInfo? { return packages.find { it.packageName == packageName } } override fun invalidate() { - sync() + scope.launch { + dataSource.clear() + performSync() + } } } diff --git a/app/src/main/java/de/szalkowski/activitylauncher/domain/model/PackageModel.kt b/app/src/main/java/de/szalkowski/activitylauncher/domain/model/PackageModel.kt index 0b95e41..ac41415 100644 --- a/app/src/main/java/de/szalkowski/activitylauncher/domain/model/PackageModel.kt +++ b/app/src/main/java/de/szalkowski/activitylauncher/domain/model/PackageModel.kt @@ -1,7 +1,6 @@ package de.szalkowski.activitylauncher.domain.model import android.content.ComponentName -import android.graphics.drawable.Drawable data class MyPackageInfo( val id: Long, @@ -10,7 +9,6 @@ data class MyPackageInfo( val version: String, val defaultActivityName: ActivityName?, val activityNames: List, - val icon: Drawable, val iconResourceName: String?, val isFullyLoaded: Boolean = true, ) @@ -31,12 +29,10 @@ data class PackageActivities( data class MyActivityInfo( val componentName: ComponentName, val name: String, - val icon: Drawable, val iconResourceName: String?, val isPrivate: Boolean, ) data class IconInfo( val iconResourceName: String, - val icon: Drawable, ) diff --git a/app/src/main/java/de/szalkowski/activitylauncher/domain/packages/ActivityRepository.kt b/app/src/main/java/de/szalkowski/activitylauncher/domain/packages/ActivityRepository.kt index 673b2ad..86b302e 100644 --- a/app/src/main/java/de/szalkowski/activitylauncher/domain/packages/ActivityRepository.kt +++ b/app/src/main/java/de/szalkowski/activitylauncher/domain/packages/ActivityRepository.kt @@ -13,5 +13,7 @@ interface ActivityRepository { componentName: ComponentName, ): MyActivityInfo + fun getIcon(componentName: ComponentName): android.graphics.drawable.Drawable + fun invalidate() } diff --git a/app/src/main/java/de/szalkowski/activitylauncher/domain/packages/PackageRepository.kt b/app/src/main/java/de/szalkowski/activitylauncher/domain/packages/PackageRepository.kt index 168bb44..f1c9842 100644 --- a/app/src/main/java/de/szalkowski/activitylauncher/domain/packages/PackageRepository.kt +++ b/app/src/main/java/de/szalkowski/activitylauncher/domain/packages/PackageRepository.kt @@ -8,6 +8,7 @@ interface PackageRepository { val packagesFlow: StateFlow> val isLoaded: Boolean fun getPackage(packageName: String): MyPackageInfo? + fun getIcon(packageName: String): android.graphics.drawable.Drawable fun invalidate() fun sync() } diff --git a/app/src/main/java/de/szalkowski/activitylauncher/presentation/activities/ActivityDetailsViewModel.kt b/app/src/main/java/de/szalkowski/activitylauncher/presentation/activities/ActivityDetailsViewModel.kt index c64da23..c64b865 100644 --- a/app/src/main/java/de/szalkowski/activitylauncher/presentation/activities/ActivityDetailsViewModel.kt +++ b/app/src/main/java/de/szalkowski/activitylauncher/presentation/activities/ActivityDetailsViewModel.kt @@ -74,7 +74,7 @@ class ActivityDetailsViewModel @Inject constructor( _editedPackage.value = info.componentName.packageName _editedClass.value = info.componentName.className _editedIconResourceName.value = info.iconResourceName ?: "" - _editedIconDrawable.value = info.icon + _editedIconDrawable.value = activityRepository.getIcon(componentName) } } @@ -120,7 +120,6 @@ class ActivityDetailsViewModel @Inject constructor( return MyActivityInfo( componentName, _editedName.value, - _editedIconDrawable.value!!, _editedIconResourceName.value.ifBlank { null }, false, ) diff --git a/app/src/main/java/de/szalkowski/activitylauncher/presentation/activities/ActivityInfoAdapter.kt b/app/src/main/java/de/szalkowski/activitylauncher/presentation/activities/ActivityInfoAdapter.kt index 2f05eba..6d979e8 100644 --- a/app/src/main/java/de/szalkowski/activitylauncher/presentation/activities/ActivityInfoAdapter.kt +++ b/app/src/main/java/de/szalkowski/activitylauncher/presentation/activities/ActivityInfoAdapter.kt @@ -11,7 +11,9 @@ import androidx.recyclerview.widget.RecyclerView import de.szalkowski.activitylauncher.R import de.szalkowski.activitylauncher.domain.model.MyActivityInfo -class ActivityInfoAdapter : ListAdapter(ActivityDiffCallback) { +class ActivityInfoAdapter( + private val iconProvider: (android.content.ComponentName) -> android.graphics.drawable.Drawable, +) : ListAdapter(ActivityDiffCallback) { var onItemClick: ((MyActivityInfo) -> Unit)? = null var onItemLongClick: ((MyActivityInfo) -> Unit)? = null @@ -50,7 +52,7 @@ class ActivityInfoAdapter : ListAdapter() { diff --git a/app/src/main/java/de/szalkowski/activitylauncher/presentation/activities/ActivityListAdapter.kt b/app/src/main/java/de/szalkowski/activitylauncher/presentation/activities/ActivityListAdapter.kt index 2f4f50b..6d0dda6 100644 --- a/app/src/main/java/de/szalkowski/activitylauncher/presentation/activities/ActivityListAdapter.kt +++ b/app/src/main/java/de/szalkowski/activitylauncher/presentation/activities/ActivityListAdapter.kt @@ -84,12 +84,14 @@ class ActivityListAdapter @AssistedInject constructor( return ViewHolder(view) } + private val activityRepository = activityRepository + override fun onBindViewHolder(holder: ViewHolder, position: Int) { val item = getItem(position) holder.item = item holder.tvName.text = if (item.isPrivate) "(${item.name})" else item.name holder.tvPackage.text = item.componentName.shortClassName - holder.ivIcon.setImageDrawable(item.icon) + holder.ivIcon.setImageDrawable(activityRepository.getIcon(item.componentName)) } object ActivityDiffCallback : DiffUtil.ItemCallback() { diff --git a/app/src/main/java/de/szalkowski/activitylauncher/presentation/common/BaseActivityListFragment.kt b/app/src/main/java/de/szalkowski/activitylauncher/presentation/common/BaseActivityListFragment.kt index be0572f..eb5387f 100644 --- a/app/src/main/java/de/szalkowski/activitylauncher/presentation/common/BaseActivityListFragment.kt +++ b/app/src/main/java/de/szalkowski/activitylauncher/presentation/common/BaseActivityListFragment.kt @@ -13,6 +13,7 @@ import androidx.navigation.fragment.findNavController import androidx.recyclerview.widget.ItemTouchHelper import androidx.recyclerview.widget.RecyclerView import de.szalkowski.activitylauncher.domain.launcher.ActivityLauncher +import de.szalkowski.activitylauncher.domain.packages.ActivityRepository import de.szalkowski.activitylauncher.presentation.activities.ActivityInfoAdapter import kotlinx.coroutines.launch import javax.inject.Inject @@ -21,6 +22,9 @@ abstract class BaseActivityListFragment : Fragment() { @Inject internal lateinit var activityLauncher: ActivityLauncher + @Inject + internal lateinit var activityRepository: ActivityRepository + protected abstract val viewModel: BaseActivityListViewModel protected abstract val recyclerViewId: Int protected abstract val logTag: String @@ -31,7 +35,7 @@ abstract class BaseActivityListFragment : Fragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - adapter = ActivityInfoAdapter() + adapter = ActivityInfoAdapter { activityRepository.getIcon(it) } adapter.onItemClick = { info -> activityLauncher.launchActivity(info.componentName, asRoot = false, showToast = true) } diff --git a/app/src/main/java/de/szalkowski/activitylauncher/presentation/common/IconListAdapter.kt b/app/src/main/java/de/szalkowski/activitylauncher/presentation/common/IconListAdapter.kt index c803919..7f84361 100644 --- a/app/src/main/java/de/szalkowski/activitylauncher/presentation/common/IconListAdapter.kt +++ b/app/src/main/java/de/szalkowski/activitylauncher/presentation/common/IconListAdapter.kt @@ -33,8 +33,8 @@ class IconListAdapter @Inject constructor(private val iconLoader: IconLoader) : val view = ImageView(parent.context) val layout = AbsListView.LayoutParams(50, 50) view.layoutParams = layout - val icon = icons[position] - view.setImageDrawable(icon.icon) + val iconInfo = icons[position] + view.setImageDrawable(iconLoader.getIcon(iconInfo.iconResourceName)) return view } } diff --git a/app/src/main/java/de/szalkowski/activitylauncher/presentation/packages/PackageListAdapter.kt b/app/src/main/java/de/szalkowski/activitylauncher/presentation/packages/PackageListAdapter.kt index 4b8cbe5..d10fd9f 100644 --- a/app/src/main/java/de/szalkowski/activitylauncher/presentation/packages/PackageListAdapter.kt +++ b/app/src/main/java/de/szalkowski/activitylauncher/presentation/packages/PackageListAdapter.kt @@ -85,7 +85,8 @@ class PackageListAdapter @Inject constructor(private val packageRepository: Pack holder.tvVersion.text = item.version holder.tvPackage.text = item.packageName holder.tvActivities.text = "($activityCount)" - holder.ivIcon.setImageDrawable(item.icon) + + holder.ivIcon.setImageDrawable(packageRepository.getIcon(item.packageName)) if (item.isFullyLoaded) { holder.itemView.alpha = 1.0f diff --git a/app/src/test/java/de/szalkowski/activitylauncher/domain/usecase/launcher/CreateShortcutUseCaseTest.kt b/app/src/test/java/de/szalkowski/activitylauncher/domain/usecase/launcher/CreateShortcutUseCaseTest.kt index 6ae16ba..3cc9cc4 100644 --- a/app/src/test/java/de/szalkowski/activitylauncher/domain/usecase/launcher/CreateShortcutUseCaseTest.kt +++ b/app/src/test/java/de/szalkowski/activitylauncher/domain/usecase/launcher/CreateShortcutUseCaseTest.kt @@ -1,7 +1,6 @@ package de.szalkowski.activitylauncher.domain.usecase.launcher import android.content.ComponentName -import android.graphics.drawable.Drawable import de.szalkowski.activitylauncher.domain.launcher.ShortcutCreator import de.szalkowski.activitylauncher.domain.model.MyActivityInfo import de.szalkowski.activitylauncher.domain.recents.RecentsRepository @@ -15,7 +14,7 @@ class CreateShortcutUseCaseTest { private lateinit var useCase: CreateShortcutUseCase private val componentName = ComponentName("com.test", "Activity") - private val activityInfo = MyActivityInfo(componentName, "Test", mock(), null, false) + private val activityInfo = MyActivityInfo(componentName, "Test", null, false) @Before fun setup() { diff --git a/app/src/test/java/de/szalkowski/activitylauncher/presentation/activities/ActivityDetailsViewModelTest.kt b/app/src/test/java/de/szalkowski/activitylauncher/presentation/activities/ActivityDetailsViewModelTest.kt index b38367d..d17991d 100644 --- a/app/src/test/java/de/szalkowski/activitylauncher/presentation/activities/ActivityDetailsViewModelTest.kt +++ b/app/src/test/java/de/szalkowski/activitylauncher/presentation/activities/ActivityDetailsViewModelTest.kt @@ -1,7 +1,6 @@ package de.szalkowski.activitylauncher.presentation.activities import android.content.ComponentName -import android.graphics.drawable.Drawable import androidx.lifecycle.SavedStateHandle import de.szalkowski.activitylauncher.domain.favorites.FavoritesRepository import de.szalkowski.activitylauncher.domain.launcher.IconLoader @@ -53,7 +52,6 @@ class ActivityDetailsViewModelTest { val activityInfo = MyActivityInfo( componentName, "Test Activity", - mock(), "res:icon", false, ) diff --git a/app/src/test/java/de/szalkowski/activitylauncher/presentation/favorites/FavoritesViewModelTest.kt b/app/src/test/java/de/szalkowski/activitylauncher/presentation/favorites/FavoritesViewModelTest.kt index e3fcfed..d9f4dfe 100644 --- a/app/src/test/java/de/szalkowski/activitylauncher/presentation/favorites/FavoritesViewModelTest.kt +++ b/app/src/test/java/de/szalkowski/activitylauncher/presentation/favorites/FavoritesViewModelTest.kt @@ -1,7 +1,6 @@ package de.szalkowski.activitylauncher.presentation.favorites import android.content.ComponentName -import android.graphics.drawable.Drawable import de.szalkowski.activitylauncher.domain.favorites.FavoritesRepository import de.szalkowski.activitylauncher.domain.model.MyActivityInfo import de.szalkowski.activitylauncher.domain.packages.ActivityRepository @@ -34,7 +33,7 @@ class FavoritesViewModelTest { @Test fun `should load favorites`() = runTest { val component = ComponentName("com.test", "Activity") - val activityInfo = MyActivityInfo(component, "Activity", mock(), null, false) + val activityInfo = MyActivityInfo(component, "Activity", null, false) whenever(favoritesRepository.getFavorites()).thenReturn(setOf(component)) whenever(activityRepository.getActivity(component)).thenReturn(activityInfo) diff --git a/app/src/test/java/de/szalkowski/activitylauncher/presentation/packages/PackageListViewModelTest.kt b/app/src/test/java/de/szalkowski/activitylauncher/presentation/packages/PackageListViewModelTest.kt index 47ae075..8d8d029 100644 --- a/app/src/test/java/de/szalkowski/activitylauncher/presentation/packages/PackageListViewModelTest.kt +++ b/app/src/test/java/de/szalkowski/activitylauncher/presentation/packages/PackageListViewModelTest.kt @@ -1,6 +1,5 @@ package de.szalkowski.activitylauncher.presentation.packages -import android.graphics.drawable.Drawable import de.szalkowski.activitylauncher.domain.model.ActivityName import de.szalkowski.activitylauncher.domain.model.MyPackageInfo import de.szalkowski.activitylauncher.domain.packages.PackageRepository @@ -87,7 +86,6 @@ class PackageListViewModelTest { version = "1.0", defaultActivityName = null, activityNames = activities, - icon = mock(), iconResourceName = null, isFullyLoaded = true, )