Recreate icon repository on activity recreation

This commit is contained in:
MM20 2022-01-29 17:14:54 +01:00
parent dcb315baec
commit 8f5e920d4e
No known key found for this signature in database
GPG Key ID: 0B61A8F2DEAFA389
3 changed files with 37 additions and 31 deletions

View File

@ -7,7 +7,7 @@ import android.content.IntentFilter
import android.util.LruCache import android.util.LruCache
import de.mm20.launcher2.icons.providers.* import de.mm20.launcher2.icons.providers.*
import de.mm20.launcher2.preferences.LauncherDataStore import de.mm20.launcher2.preferences.LauncherDataStore
import de.mm20.launcher2.preferences.LauncherPreferences import de.mm20.launcher2.preferences.Settings
import de.mm20.launcher2.search.data.Searchable import de.mm20.launcher2.search.data.Searchable
import kotlinx.coroutines.* import kotlinx.coroutines.*
import kotlinx.coroutines.flow.* import kotlinx.coroutines.flow.*
@ -45,28 +45,7 @@ class IconRepository(
scope.launch { scope.launch {
dataStore.data.map { it.icons }.distinctUntilChanged().collectLatest { dataStore.data.map { it.icons }.distinctUntilChanged().collectLatest {
val placeholderProvider = if (it.themedIcons) { recreate(it)
ThemedPlaceholderIconProvider(context)
} else {
PlaceholderIconProvider(context)
}
val providers = mutableListOf<IconProvider>()
if (it.themedIcons) {
providers.add(ThemedIconProvider(context))
}
if (it.iconPack.isNotBlank()) {
providers.add(IconPackIconProvider(context, it.iconPack, it.legacyIconBg))
}
providers.add(GoogleClockIconProvider(context))
providers.add(CalendarIconProvider(context))
providers.add(SystemIconProvider(context, it.legacyIconBg))
providers.add(placeholderProvider)
cache.evictAll()
this@IconRepository.placeholderProvider = placeholderProvider
iconProviders.value = providers
} }
} }
} }
@ -120,4 +99,35 @@ class IconRepository(
suspend fun getInstalledIconPacks(): List<IconPack> { suspend fun getInstalledIconPacks(): List<IconPack> {
return iconPackManager.getInstalledIconPacks() return iconPackManager.getInstalledIconPacks()
} }
fun recreate() {
scope.launch {
recreate(dataStore.data.map { it.icons }.first())
}
}
private fun recreate(settings: Settings.IconSettings) {
val placeholderProvider = if (settings.themedIcons) {
ThemedPlaceholderIconProvider(context)
} else {
PlaceholderIconProvider(context)
}
val providers = mutableListOf<IconProvider>()
if (settings.themedIcons) {
providers.add(ThemedIconProvider(context))
}
if (settings.iconPack.isNotBlank()) {
providers.add(IconPackIconProvider(context, settings.iconPack, settings.legacyIconBg))
}
providers.add(GoogleClockIconProvider(context))
providers.add(CalendarIconProvider(context))
providers.add(SystemIconProvider(context, settings.legacyIconBg))
providers.add(placeholderProvider)
cache.evictAll()
this@IconRepository.placeholderProvider = placeholderProvider
iconProviders.value = providers
}
} }

View File

@ -24,6 +24,7 @@ import de.mm20.launcher2.ui.launcher.modals.EditFavoritesView
import de.mm20.launcher2.ui.launcher.modals.HiddenItemsView import de.mm20.launcher2.ui.launcher.modals.HiddenItemsView
import kotlinx.coroutines.* import kotlinx.coroutines.*
import org.koin.android.ext.android.inject import org.koin.android.ext.android.inject
import org.koin.core.component.inject
import java.util.* import java.util.*
@ -36,6 +37,9 @@ class LauncherActivity : BaseActivity() {
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
val iconRepository: IconRepository by inject()
iconRepository.recreate()
WindowCompat.setDecorFitsSystemWindows(window, false) WindowCompat.setDecorFitsSystemWindows(window, false)
viewModel.setDarkMode(resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK == Configuration.UI_MODE_NIGHT_YES) viewModel.setDarkMode(resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK == Configuration.UI_MODE_NIGHT_YES)

View File

@ -3,12 +3,10 @@ package de.mm20.launcher2.ui.launcher
import androidx.lifecycle.MutableLiveData import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel
import androidx.lifecycle.asLiveData import androidx.lifecycle.asLiveData
import androidx.lifecycle.viewModelScope
import de.mm20.launcher2.preferences.LauncherDataStore import de.mm20.launcher2.preferences.LauncherDataStore
import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.map
import kotlinx.coroutines.launch
import org.koin.core.component.KoinComponent import org.koin.core.component.KoinComponent
import org.koin.core.component.inject import org.koin.core.component.inject
@ -27,12 +25,6 @@ class LauncherActivityVM : ViewModel(), KoinComponent {
dim && darkMode dim && darkMode
}.asLiveData() }.asLiveData()
init {
viewModelScope.launch {
}
}
fun setDarkMode(darkMode: Boolean) { fun setDarkMode(darkMode: Boolean) {
isDarkInMode.value = darkMode isDarkInMode.value = darkMode
} }