From 050e8284e7c9072959ecb68f0886522af86a2216 Mon Sep 17 00:00:00 2001 From: MM20 <15646950+MM2-0@users.noreply.github.com> Date: Fri, 29 Jul 2022 19:24:03 +0200 Subject: [PATCH] Fix transformations for dynamic launcher icons --- .../de/mm20/launcher2/icons/DynamicCalendarIcon.kt | 9 +++++++-- .../icons/TransformableDynamicLauncherIcon.kt | 7 +++++++ .../transformations/LauncherIconTransformation.kt | 12 +++++++++--- 3 files changed, 23 insertions(+), 5 deletions(-) create mode 100644 icons/src/main/java/de/mm20/launcher2/icons/TransformableDynamicLauncherIcon.kt diff --git a/icons/src/main/java/de/mm20/launcher2/icons/DynamicCalendarIcon.kt b/icons/src/main/java/de/mm20/launcher2/icons/DynamicCalendarIcon.kt index 915670ee..6cdebd97 100644 --- a/icons/src/main/java/de/mm20/launcher2/icons/DynamicCalendarIcon.kt +++ b/icons/src/main/java/de/mm20/launcher2/icons/DynamicCalendarIcon.kt @@ -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 = emptyList(), -) : DynamicLauncherIcon { + private var transformations: List = 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) { + this.transformations = transformations + } } \ No newline at end of file diff --git a/icons/src/main/java/de/mm20/launcher2/icons/TransformableDynamicLauncherIcon.kt b/icons/src/main/java/de/mm20/launcher2/icons/TransformableDynamicLauncherIcon.kt new file mode 100644 index 00000000..0b1fdf49 --- /dev/null +++ b/icons/src/main/java/de/mm20/launcher2/icons/TransformableDynamicLauncherIcon.kt @@ -0,0 +1,7 @@ +package de.mm20.launcher2.icons + +import de.mm20.launcher2.icons.transformations.LauncherIconTransformation + +internal interface TransformableDynamicLauncherIcon { + fun setTransformations(transformations: List) +} \ No newline at end of file diff --git a/icons/src/main/java/de/mm20/launcher2/icons/transformations/LauncherIconTransformation.kt b/icons/src/main/java/de/mm20/launcher2/icons/transformations/LauncherIconTransformation.kt index 42204e13..68de850b 100644 --- a/icons/src/main/java/de/mm20/launcher2/icons/transformations/LauncherIconTransformation.kt +++ b/icons/src/main/java/de/mm20/launcher2/icons/transformations/LauncherIconTransformation.kt @@ -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.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 } \ No newline at end of file