Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d621d834 authored by Ioana Alexandru's avatar Ioana Alexandru
Browse files

Allow passing in a custom color provider

This can allow notifications to use themed icons with their own colors.

Bug: 388377895
Flag: android.app.notifications_redesign_themed_app_icons
Test: visual test
Change-Id: I5b7d45079318e09fc82a2c8423af6228916d16f5
parent 542d9782
Loading
Loading
Loading
Loading
+6 −4
Original line number Diff line number Diff line
@@ -37,11 +37,12 @@ import com.android.launcher3.icons.BitmapInfo
import com.android.launcher3.icons.IconThemeController
import com.android.launcher3.icons.MonochromeIconFactory
import com.android.launcher3.icons.ThemedBitmap
import com.android.launcher3.icons.mono.ThemedIconDrawable.Companion.getColors
import java.nio.ByteBuffer

@TargetApi(Build.VERSION_CODES.TIRAMISU)
class MonoIconThemeController : IconThemeController {
class MonoIconThemeController(
    private val colorProvider: (Context) -> IntArray = ThemedIconDrawable.Companion::getColors
) : IconThemeController {

    override fun createThemedBitmap(
        icon: AdaptiveIconDrawable,
@@ -60,6 +61,7 @@ class MonoIconThemeController : IconThemeController {
            return MonoThemedBitmap(
                factory.createIconBitmap(mono, scale, BaseIconFactory.MODE_ALPHA),
                factory.whiteShadowLayer,
                colorProvider,
            )
        }
        return null
@@ -97,7 +99,7 @@ class MonoIconThemeController : IconThemeController {
            monoBitmap.recycle()
            monoBitmap = hwMonoBitmap
        }
        return MonoThemedBitmap(monoBitmap, factory.whiteShadowLayer)
        return MonoThemedBitmap(monoBitmap, factory.whiteShadowLayer, colorProvider)
    }

    override fun createThemedAdaptiveIcon(
@@ -105,7 +107,7 @@ class MonoIconThemeController : IconThemeController {
        originalIcon: AdaptiveIconDrawable,
        info: BitmapInfo?,
    ): AdaptiveIconDrawable? {
        val colors = getColors(context)
        val colors = colorProvider(context)
        originalIcon.mutate()
        var monoDrawable = originalIcon.monochrome?.apply { setTint(colors[1]) }

+6 −2
Original line number Diff line number Diff line
@@ -24,10 +24,14 @@ import com.android.launcher3.icons.ThemedBitmap
import com.android.launcher3.icons.mono.ThemedIconDrawable.ThemedConstantState
import java.nio.ByteBuffer

class MonoThemedBitmap(val mono: Bitmap, private val whiteShadowLayer: Bitmap) : ThemedBitmap {
class MonoThemedBitmap(
    val mono: Bitmap,
    private val whiteShadowLayer: Bitmap,
    private val colorProvider: (Context) -> IntArray = ThemedIconDrawable.Companion::getColors,
) : ThemedBitmap {

    override fun newDrawable(info: BitmapInfo, context: Context): FastBitmapDrawable {
        val colors = ThemedIconDrawable.getColors(context)
        val colors = colorProvider(context)
        return ThemedConstantState(info, mono, whiteShadowLayer, colors[0], colors[1]).newDrawable()
    }