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

Commit 472769ea authored by Brad Hinegardner's avatar Brad Hinegardner
Browse files

Remove tint from Loaded shortcut icons

Fixes: 394282762
Test: atest KeyguardQuickAffordancesCombinedViewModelTest.kt
Flag: com.android.systemui.clear_shortcut_icon_tint
Change-Id: I005f7d5271b8d42f51a64ca866bb7ef6fcd86247
parent 466cc714
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -2040,6 +2040,16 @@ flag {
    }
}

flag {
   name: "clear_shortcut_icon_tint"
   namespace: "systemui"
   description: "Clear any tint present on incoming lockscreen shortcuts icons"
   bug: "394282762"
   metadata {
       purpose: PURPOSE_BUGFIX
   }
}

flag {
    name: "screen_off_animation_guard_enabled"
    namespace: "systemui"
+14 −4
Original line number Diff line number Diff line
@@ -20,6 +20,8 @@ package com.android.systemui.keyguard.ui.viewmodel
import androidx.annotation.VisibleForTesting
import com.android.app.tracing.FlowTracing.traceEmissionCount
import com.android.app.tracing.coroutines.flow.flowName
import com.android.systemui.Flags
import com.android.systemui.common.shared.model.Icon
import com.android.systemui.dagger.qualifiers.Application
import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor
import com.android.systemui.keyguard.domain.interactor.KeyguardQuickAffordanceInteractor
@@ -29,7 +31,7 @@ import com.android.systemui.keyguard.shared.model.KeyguardState
import com.android.systemui.keyguard.shared.quickaffordance.ActivationState
import com.android.systemui.keyguard.shared.quickaffordance.KeyguardQuickAffordancePosition
import com.android.systemui.shade.domain.interactor.ShadeInteractor
import com.android.systemui.shared.Flags
import com.android.systemui.shared.Flags as SharedFlags
import com.android.systemui.shared.keyguard.shared.model.KeyguardQuickAffordanceSlots
import com.android.systemui.utils.coroutines.flow.flatMapLatestConflated
import javax.inject.Inject
@@ -159,7 +161,7 @@ constructor(

    /** An observable for the view-model of the "start button" quick affordance. */
    val startButton: Flow<KeyguardQuickAffordanceViewModel> =
        if (Flags.newCustomizationPickerUi()) {
        if (SharedFlags.newCustomizationPickerUi()) {
            previewAffordances.flatMapLatestConflated {
                button(
                    position = KeyguardQuickAffordancePosition.BOTTOM_START,
@@ -172,7 +174,7 @@ constructor(

    /** An observable for the view-model of the "end button" quick affordance. */
    val endButton: Flow<KeyguardQuickAffordanceViewModel> =
        if (Flags.newCustomizationPickerUi()) {
        if (SharedFlags.newCustomizationPickerUi()) {
            previewAffordances.flatMapLatestConflated {
                button(
                    position = KeyguardQuickAffordancePosition.BOTTOM_END,
@@ -297,7 +299,7 @@ constructor(
                    configKey = configKey,
                    isVisible = true,
                    animateReveal = animateReveal,
                    icon = icon,
                    icon = nonTintedIcon(icon),
                    onClicked = { parameters ->
                        quickAffordanceInteractor.onQuickAffordanceTriggered(
                            configKey = parameters.configKey,
@@ -317,6 +319,14 @@ constructor(
        }
    }

    @VisibleForTesting
    fun nonTintedIcon(icon: Icon): Icon =
        if (Flags.clearShortcutIconTint() && icon is Icon.Loaded) {
            icon.apply { drawable.setTintList(null) }
        } else {
            icon
        }

    companion object {
        // We select a value that's less than 1.0 because we want floating point math precision to
        // not be a factor in determining whether the affordance UI is fully opaque. The number we
+31 −0
Original line number Diff line number Diff line
@@ -19,7 +19,9 @@ package com.android.systemui.keyguard.ui.viewmodel

import android.app.admin.DevicePolicyManager
import android.content.Intent
import android.graphics.drawable.Drawable
import android.os.UserHandle
import android.platform.test.annotations.DisableFlags
import android.platform.test.annotations.EnableFlags
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
@@ -89,6 +91,9 @@ import org.mockito.ArgumentMatchers
import org.mockito.Mock
import org.mockito.Mockito
import org.mockito.MockitoAnnotations
import org.mockito.kotlin.isNull
import org.mockito.kotlin.verify
import org.mockito.kotlin.verifyNoInteractions

@SmallTest
@RunWith(AndroidJUnit4::class)
@@ -350,6 +355,32 @@ class KeyguardQuickAffordancesCombinedViewModelTest : SysuiTestCase() {
            )
        }

    @Test
    @EnableFlags(com.android.systemui.Flags.FLAG_CLEAR_SHORTCUT_ICON_TINT)
    fun nonTintedIcon_clearsTintFromIcon() =
        testScope.runTest {
            val icon: Icon.Loaded = mock()
            val drawable: Drawable = mock()
            whenever(icon.drawable).thenReturn(drawable)

            underTest.nonTintedIcon(icon)

            verify(drawable).setTintList(isNull())
        }

    @Test
    @DisableFlags(com.android.systemui.Flags.FLAG_CLEAR_SHORTCUT_ICON_TINT)
    fun nonTintedIcon_noInteractionWithDrawable() =
        testScope.runTest {
            val icon: Icon.Loaded = mock()
            val drawable: Drawable = mock()
            whenever(icon.drawable).thenReturn(drawable)

            underTest.nonTintedIcon(icon)

            verifyNoInteractions(drawable)
        }

    @Test
    fun startButton_hiddenWhenDevicePolicyDisablesAllKeyguardFeatures() =
        testScope.runTest {