Add custom icon transformation for legacy round icons

This commit is contained in:
MM20 2022-11-05 14:58:11 +01:00
parent 77254015a5
commit 960c3b70f5
No known key found for this signature in database
GPG Key ID: 0B61A8F2DEAFA389
2 changed files with 46 additions and 28 deletions

View File

@ -6,8 +6,25 @@ import android.content.Intent
import android.content.IntentFilter import android.content.IntentFilter
import android.graphics.Color import android.graphics.Color
import android.util.LruCache import android.util.LruCache
import de.mm20.launcher2.customattrs.* import de.mm20.launcher2.customattrs.AdaptifiedLegacyIcon
import de.mm20.launcher2.icons.providers.* import de.mm20.launcher2.customattrs.CustomAttributesRepository
import de.mm20.launcher2.customattrs.CustomIcon
import de.mm20.launcher2.customattrs.CustomIconPackIcon
import de.mm20.launcher2.customattrs.CustomThemedIcon
import de.mm20.launcher2.customattrs.DefaultPlaceholderIcon
import de.mm20.launcher2.customattrs.ForceThemedIcon
import de.mm20.launcher2.customattrs.UnmodifiedSystemDefaultIcon
import de.mm20.launcher2.icons.providers.CalendarIconProvider
import de.mm20.launcher2.icons.providers.CustomIconPackIconProvider
import de.mm20.launcher2.icons.providers.CustomThemedIconProvider
import de.mm20.launcher2.icons.providers.GoogleClockIconProvider
import de.mm20.launcher2.icons.providers.IconPackIconProvider
import de.mm20.launcher2.icons.providers.IconProvider
import de.mm20.launcher2.icons.providers.PlaceholderIconProvider
import de.mm20.launcher2.icons.providers.SystemIconProvider
import de.mm20.launcher2.icons.providers.ThemedIconProvider
import de.mm20.launcher2.icons.providers.ThemedPlaceholderIconProvider
import de.mm20.launcher2.icons.providers.getFirstIcon
import de.mm20.launcher2.icons.transformations.ForceThemedIconTransformation import de.mm20.launcher2.icons.transformations.ForceThemedIconTransformation
import de.mm20.launcher2.icons.transformations.LauncherIconTransformation import de.mm20.launcher2.icons.transformations.LauncherIconTransformation
import de.mm20.launcher2.icons.transformations.LegacyToAdaptiveTransformation import de.mm20.launcher2.icons.transformations.LegacyToAdaptiveTransformation
@ -18,7 +35,13 @@ import de.mm20.launcher2.search.data.LauncherApp
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job import kotlinx.coroutines.Job
import kotlinx.coroutines.flow.* import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.channelFlow
import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
class IconRepository( class IconRepository(
@ -88,7 +111,9 @@ class IconRepository(
val transformations = mutableListOf<LauncherIconTransformation>() val transformations = mutableListOf<LauncherIconTransformation>()
if (settings.adaptify) transformations.add(LegacyToAdaptiveTransformation()) if (settings.adaptify) transformations.add(LegacyToAdaptiveTransformation())
if (settings.themedIcons && settings.forceThemed) transformations.add(ForceThemedIconTransformation()) if (settings.themedIcons && settings.forceThemed) transformations.add(
ForceThemedIconTransformation()
)
this@IconRepository.placeholderProvider = placeholderProvider this@IconRepository.placeholderProvider = placeholderProvider
iconProviders.value = providers iconProviders.value = providers
@ -217,6 +242,14 @@ class IconRepository(
bgColor = 1 bgColor = 1
) )
) )
// Android 7.1 round icons (48x48 circle with 1px padding)
transformationOptions.add(
AdaptifiedLegacyIcon(
fgScale = 48f / 44f,
bgColor = 1
)
)
transformationOptions.add( transformationOptions.add(
AdaptifiedLegacyIcon( AdaptifiedLegacyIcon(
fgScale = 0.7f, fgScale = 0.7f,
@ -301,7 +334,10 @@ class IconRepository(
} }
suspend fun getUncustomizedDefaultIcon(searchable: SavableSearchable, size: Int): CustomIconWithPreview? { suspend fun getUncustomizedDefaultIcon(
searchable: SavableSearchable,
size: Int
): CustomIconWithPreview? {
val icon = iconProviders.first().getFirstIcon(searchable, size) val icon = iconProviders.first().getFirstIcon(searchable, size)
?.transform(transformations.first()) ?: return null ?.transform(transformations.first()) ?: return null
return CustomIconWithPreview( return CustomIconWithPreview(
@ -312,7 +348,7 @@ class IconRepository(
suspend fun searchCustomIcons(query: String): List<CustomIconWithPreview> { suspend fun searchCustomIcons(query: String): List<CustomIconWithPreview> {
val transformations = this.transformations.first() val transformations = this.transformations.first()
val iconPackIcons = iconPackManager.searchIconPackIcon(query).mapNotNull { val iconPackIcons = iconPackManager.searchIconPackIcon(query).mapNotNull {
val componentName = it.componentName ?: return@mapNotNull null val componentName = it.componentName ?: return@mapNotNull null
CustomIconWithPreview( CustomIconWithPreview(
@ -320,7 +356,8 @@ class IconRepository(
iconPackPackage = it.iconPack, iconPackPackage = it.iconPack,
iconComponentName = componentName.flattenToString(), iconComponentName = componentName.flattenToString(),
), ),
preview = iconPackManager.getIcon(it.iconPack, componentName)?.transform(transformations) ?: return@mapNotNull null preview = iconPackManager.getIcon(it.iconPack, componentName)
?.transform(transformations) ?: return@mapNotNull null
) )
} }
@ -331,7 +368,8 @@ class IconRepository(
customIcon = CustomThemedIcon( customIcon = CustomThemedIcon(
iconPackageName = componentName.packageName, iconPackageName = componentName.packageName,
), ),
preview = iconPackManager.getThemedIcon(componentName.packageName)?.transform(transformations) ?: return@mapNotNull null preview = iconPackManager.getThemedIcon(componentName.packageName)
?.transform(transformations) ?: return@mapNotNull null
) )
} }

View File

@ -1,20 +0,0 @@
package de.mm20.launcher2.preferences.migrations
import de.mm20.launcher2.preferences.Settings
class Migration_11_12: VersionedMigration(11, 12) {
override suspend fun applyMigrations(builder: Settings.Builder): Settings.Builder {
return builder
.setSearchActions(
Settings.SearchActionSettings.newBuilder()
.setCall(true)
.setContact(true)
.setEmail(true)
.setMessage(true)
.setOpenUrl(true)
.setScheduleEvent(true)
.setSetAlarm(true)
.setStartTimer(true)
)
}
}