Fix transformations for dynamic launcher icons

This commit is contained in:
MM20 2022-07-29 19:24:03 +02:00
parent 6152c566f0
commit 050e8284e7
No known key found for this signature in database
GPG Key ID: 0B61A8F2DEAFA389
3 changed files with 23 additions and 5 deletions

View File

@ -3,6 +3,7 @@ package de.mm20.launcher2.icons
import android.content.res.Resources
import android.graphics.drawable.AdaptiveIconDrawable
import androidx.core.content.res.ResourcesCompat
import androidx.lifecycle.Transformations
import de.mm20.launcher2.icons.transformations.LauncherIconTransformation
import java.time.Instant
import java.time.ZoneId
@ -11,8 +12,8 @@ internal class DynamicCalendarIcon(
val resources: Resources,
val resourceIds: IntArray,
val isThemed: Boolean = false,
private val transformations: List<LauncherIconTransformation> = emptyList(),
) : DynamicLauncherIcon {
private var transformations: List<LauncherIconTransformation> = emptyList(),
) : DynamicLauncherIcon, TransformableDynamicLauncherIcon {
init {
if (resourceIds.size < 31) throw IllegalArgumentException("DynamicCalendarIcon resourceIds must at least have 31 items")
@ -67,4 +68,8 @@ internal class DynamicCalendarIcon(
}
return icon
}
override fun setTransformations(transformations: List<LauncherIconTransformation>) {
this.transformations = transformations
}
}

View File

@ -0,0 +1,7 @@
package de.mm20.launcher2.icons
import de.mm20.launcher2.icons.transformations.LauncherIconTransformation
internal interface TransformableDynamicLauncherIcon {
fun setTransformations(transformations: List<LauncherIconTransformation>)
}

View File

@ -2,17 +2,23 @@ package de.mm20.launcher2.icons.transformations
import de.mm20.launcher2.icons.LauncherIcon
import de.mm20.launcher2.icons.StaticLauncherIcon
import de.mm20.launcher2.icons.TransformableDynamicLauncherIcon
internal interface LauncherIconTransformation {
suspend fun transform(icon: StaticLauncherIcon): StaticLauncherIcon
}
internal suspend fun Iterable<LauncherIconTransformation>.apply(icon: LauncherIcon): LauncherIcon {
var transformedIcon = icon
if (transformedIcon is StaticLauncherIcon) {
if (icon is StaticLauncherIcon) {
var transformedIcon = icon
for (transformation in this) {
transformedIcon = transformation.transform(transformedIcon as StaticLauncherIcon)
}
return transformedIcon
}
return transformedIcon
if (icon is TransformableDynamicLauncherIcon) {
icon.setTransformations(this.toList())
return icon
}
return icon
}