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

Commit 317db378 authored by shawnlin's avatar shawnlin
Browse files

Fix the wrong tint state of Nav buttons

Update the aphla value of scrimBehind in setPanelExpansion to display
the correct tint state of Nav buttons.

Test: runtest systemui
Change-Id: Ia17bbe71106900b764ec2f5ac4729b9770eac4bc
Fixes: 74578143
parent 0994a887
Loading
Loading
Loading
Loading
+6 −4
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ import android.view.ViewGroup;

import com.android.internal.logging.MetricsLogger;
import com.android.internal.widget.LockPatternUtils;
import com.android.internal.colorextraction.ColorExtractor.GradientColors;
import com.android.keyguard.ViewMediatorCallback;
import com.android.systemui.Dependency.DependencyProvider;
import com.android.systemui.classifier.FalsingManager;
@@ -101,12 +102,13 @@ public class SystemUIFactory {
                dismissCallbackRegistry, FalsingManager.getInstance(context));
    }

    public ScrimController createScrimController(LightBarController lightBarController,
            ScrimView scrimBehind, ScrimView scrimInFront, LockscreenWallpaper lockscreenWallpaper,
    public ScrimController createScrimController(ScrimView scrimBehind, ScrimView scrimInFront,
            LockscreenWallpaper lockscreenWallpaper, Consumer<Float> scrimBehindAlphaListener,
            Consumer<GradientColors> scrimInFrontColorListener,
            Consumer<Integer> scrimVisibleListener, DozeParameters dozeParameters,
            AlarmManager alarmManager) {
        return new ScrimController(lightBarController, scrimBehind, scrimInFront,
                scrimVisibleListener, dozeParameters, alarmManager);
        return new ScrimController(scrimBehind, scrimInFront, scrimBehindAlphaListener,
                scrimInFrontColorListener, scrimVisibleListener, dozeParameters, alarmManager);
    }

    public NotificationIconAreaController createNotificationIconAreaController(Context context,
+13 −8
Original line number Diff line number Diff line
@@ -111,7 +111,6 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, OnCo
    private final Context mContext;
    protected final ScrimView mScrimBehind;
    protected final ScrimView mScrimInFront;
    private final LightBarController mLightBarController;
    private final UnlockMethodCache mUnlockMethodCache;
    private final KeyguardUpdateMonitor mKeyguardUpdateMonitor;
    private final DozeParameters mDozeParameters;
@@ -145,6 +144,8 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, OnCo
    private int mCurrentBehindTint;
    private boolean mWallpaperVisibilityTimedOut;
    private int mScrimsVisibility;
    private final Consumer<GradientColors> mScrimInFrontColorListener;
    private final Consumer<Float> mScrimBehindAlphaListener;
    private final Consumer<Integer> mScrimVisibleListener;
    private boolean mBlankScreen;
    private boolean mScreenBlankingCallbackCalled;
@@ -161,17 +162,20 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, OnCo
    private boolean mWakeLockHeld;
    private boolean mKeyguardOccluded;

    public ScrimController(LightBarController lightBarController, ScrimView scrimBehind,
            ScrimView scrimInFront, Consumer<Integer> scrimVisibleListener,
            DozeParameters dozeParameters, AlarmManager alarmManager) {
    public ScrimController(ScrimView scrimBehind, ScrimView scrimInFront,
            Consumer<Float> scrimBehindAlphaListener,
            Consumer<GradientColors> scrimInFrontColorListener,
            Consumer<Integer> scrimVisibleListener, DozeParameters dozeParameters,
            AlarmManager alarmManager) {
        mScrimBehind = scrimBehind;
        mScrimInFront = scrimInFront;
        mScrimBehindAlphaListener = scrimBehindAlphaListener;
        mScrimInFrontColorListener = scrimInFrontColorListener;
        mScrimVisibleListener = scrimVisibleListener;
        mContext = scrimBehind.getContext();
        mUnlockMethodCache = UnlockMethodCache.getInstance(mContext);
        mDarkenWhileDragging = !mUnlockMethodCache.canSkipBouncer();
        mKeyguardUpdateMonitor = KeyguardUpdateMonitor.getInstance(mContext);
        mLightBarController = lightBarController;
        mScrimBehindAlphaResValue = mContext.getResources().getFloat(R.dimen.scrim_behind_alpha);
        mTimeTicker = new AlarmTimeout(alarmManager, this::onHideWallpaperTimeout,
                "hide_aod_wallpaper", new Handler());
@@ -367,6 +371,8 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, OnCo

            setOrAdaptCurrentAnimation(mScrimBehind);
            setOrAdaptCurrentAnimation(mScrimInFront);

            mScrimBehindAlphaListener.accept(mScrimBehind.getViewAlpha());
        }
    }

@@ -475,7 +481,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, OnCo
            float minOpacity = ColorUtils.calculateMinimumBackgroundAlpha(textColor, mainColor,
                    4.5f /* minimumContrast */) / 255f;
            mScrimBehindAlpha = Math.max(mScrimBehindAlphaResValue, minOpacity);
            mLightBarController.setScrimColor(mScrimInFront.getColors());
            mScrimInFrontColorListener.accept(mScrimInFront.getColors());
        }

        // We want to override the back scrim opacity for the AOD state
@@ -702,9 +708,8 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, OnCo
            }
        }

        // TODO factor mLightBarController out of this class
        if (scrim == mScrimBehind) {
            mLightBarController.setScrimAlpha(alpha);
            mScrimBehindAlphaListener.accept(alpha);
        }

        final boolean wantsAlphaUpdate = alpha != currentAlpha;
+7 −1
Original line number Diff line number Diff line
@@ -916,8 +916,14 @@ public class StatusBar extends SystemUI implements DemoMode,

        ScrimView scrimBehind = mStatusBarWindow.findViewById(R.id.scrim_behind);
        ScrimView scrimInFront = mStatusBarWindow.findViewById(R.id.scrim_in_front);
        mScrimController = SystemUIFactory.getInstance().createScrimController(mLightBarController,
        mScrimController = SystemUIFactory.getInstance().createScrimController(
                scrimBehind, scrimInFront, mLockscreenWallpaper,
                scrimBehindAlpha -> {
                    mLightBarController.setScrimAlpha(scrimBehindAlpha);
                },
                scrimInFrontColor -> {
                    mLightBarController.setScrimColor(scrimInFrontColor);
                },
                scrimsVisible -> {
                    if (mStatusBarWindowManager != null) {
                        mStatusBarWindowManager.setScrimsVisibility(scrimsVisible);
+36 −8
Original line number Diff line number Diff line
@@ -42,6 +42,7 @@ import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
import android.view.View;

import com.android.internal.colorextraction.ColorExtractor.GradientColors;
import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.statusbar.ScrimView;
@@ -65,9 +66,12 @@ public class ScrimControllerTest extends SysuiTestCase {
    private SynchronousScrimController mScrimController;
    private ScrimView mScrimBehind;
    private ScrimView mScrimInFront;
    private Consumer<Float> mScrimBehindAlphaCallback;
    private Consumer<GradientColors> mScrimInFrontColorCallback;
    private Consumer<Integer> mScrimVisibilityCallback;
    private float mScrimBehindAlpha;
    private GradientColors mScrimInFrontColor;
    private int mScrimVisibility;
    private LightBarController mLightBarController;
    private DozeParameters mDozeParamenters;
    private WakeLock mWakeLock;
    private boolean mAlwaysOnEnabled;
@@ -75,19 +79,20 @@ public class ScrimControllerTest extends SysuiTestCase {

    @Before
    public void setup() {
        mLightBarController = mock(LightBarController.class);
        mScrimBehind = spy(new ScrimView(getContext()));
        mScrimInFront = new ScrimView(getContext());
        mWakeLock = mock(WakeLock.class);
        mAlarmManager = mock(AlarmManager.class);
        mAlwaysOnEnabled = true;
        mScrimBehindAlphaCallback = (Float alpha) -> mScrimBehindAlpha = alpha;
        mScrimInFrontColorCallback = (GradientColors color) -> mScrimInFrontColor = color;
        mScrimVisibilityCallback = (Integer visible) -> mScrimVisibility = visible;
        mDozeParamenters = mock(DozeParameters.class);
        when(mDozeParamenters.getAlwaysOn()).thenAnswer(invocation -> mAlwaysOnEnabled);
        when(mDozeParamenters.getDisplayNeedsBlanking()).thenReturn(true);
        mScrimController = new SynchronousScrimController(mLightBarController, mScrimBehind,
                mScrimInFront, mScrimVisibilityCallback, mDozeParamenters,
                mAlarmManager);
        mScrimController = new SynchronousScrimController(mScrimBehind, mScrimInFront,
                mScrimBehindAlphaCallback, mScrimInFrontColorCallback, mScrimVisibilityCallback,
                mDozeParamenters, mAlarmManager);
    }

    @Test
@@ -205,6 +210,28 @@ public class ScrimControllerTest extends SysuiTestCase {
        assertScrimVisibility(VISIBILITY_FULLY_TRANSPARENT, VISIBILITY_SEMI_TRANSPARENT);
    }

    @Test
    public void panelExpansion() {
        mScrimController.setPanelExpansion(0f);
        mScrimController.setPanelExpansion(0.5f);
        mScrimController.transitionTo(ScrimState.UNLOCKED);
        mScrimController.finishAnimationsImmediately();

        reset(mScrimBehind);
        mScrimController.setPanelExpansion(0f);
        mScrimController.setPanelExpansion(1.0f);
        mScrimController.onPreDraw();

        Assert.assertEquals("Scrim alpha should change after setPanelExpansion",
                mScrimBehindAlpha, mScrimBehind.getViewAlpha(), 0.01f);

        mScrimController.setPanelExpansion(0f);
        mScrimController.onPreDraw();

        Assert.assertEquals("Scrim alpha should change after setPanelExpansion",
                mScrimBehindAlpha, mScrimBehind.getViewAlpha(), 0.01f);
    }

    @Test
    public void panelExpansionAffectsAlpha() {
        mScrimController.setPanelExpansion(0f);
@@ -523,11 +550,12 @@ public class ScrimControllerTest extends SysuiTestCase {
        private boolean mAnimationCancelled;
        boolean mOnPreDrawCalled;

        SynchronousScrimController(LightBarController lightBarController,
                ScrimView scrimBehind, ScrimView scrimInFront,
        SynchronousScrimController(ScrimView scrimBehind, ScrimView scrimInFront,
                Consumer<Float> scrimBehindAlphaListener,
                Consumer<GradientColors> scrimInFrontColorListener,
                Consumer<Integer> scrimVisibleListener, DozeParameters dozeParameters,
                AlarmManager alarmManager) {
            super(lightBarController, scrimBehind, scrimInFront,
            super(scrimBehind, scrimInFront, scrimBehindAlphaListener, scrimInFrontColorListener,
                    scrimVisibleListener, dozeParameters, alarmManager);
            mHandler = new FakeHandler(Looper.myLooper());
        }