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

Commit 7c308acf authored by Chandru S's avatar Chandru S
Browse files

Scrim alpha changes for bouncer

Updates the default scrim alpha to the bouncer background alpha. This makes sure that the current scrim transition alpha animations work as expected without overshooting the bouncer alpha while transitioning to the bouncer.
Setting the alpha in BOUNCER or BOUNCER_SCRIMMED state is not sufficient because while we are transitioning from KEYGUARD/SHADE_LOCKED -> BOUNCER we always interpolate the alpha up to defaultScrimAlpha and then set it to the alpha from BOUNCER state.

CUJs affected
1. Front scrim
  - Any scrimmed bouncer invocation, i.e tapping on any UI element that requires authentication and ends up showing the bouncer.
  - Tapping on locked out SFPS
  - Both large and small screen devices
2. Notif scrim
  - On small screen devices, notif scrim fades in behind the bouncer when we swipe up to go to bouncer
  - On large screen devices, notif scrim does not fade in behind the bouncer.
3. Behind scrim
  - On large screen devices, behind scrim fades in behind the bouncer when we swipe up to go to the bouncer.

Bug: 381263600
Test: verified the above CUJs with the flag on
Flag: com.android.systemui.bouncer_ui_revamp
Change-Id: Ic774b387ba9db610a34c862d3269170635243c16
parent 58c49cf0
Loading
Loading
Loading
Loading
+10 −5
Original line number Diff line number Diff line
@@ -31,7 +31,6 @@ import android.animation.ValueAnimator;
import android.annotation.IntDef;
import android.graphics.Color;
import android.os.Handler;
import android.os.Trace;
import android.util.Log;
import android.util.MathUtils;
import android.util.Pair;
@@ -53,6 +52,7 @@ import com.android.keyguard.BouncerPanelExpansionCalculator;
import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.keyguard.KeyguardUpdateMonitorCallback;
import com.android.systemui.Dumpable;
import com.android.systemui.Flags;
import com.android.systemui.animation.ShadeInterpolation;
import com.android.systemui.bouncer.shared.constants.KeyguardBouncerConstants;
import com.android.systemui.dagger.SysUISingleton;
@@ -82,6 +82,9 @@ import com.android.systemui.util.kotlin.JavaAdapter;
import com.android.systemui.util.wakelock.DelayedWakeLock;
import com.android.systemui.util.wakelock.WakeLock;

import kotlinx.coroutines.CoroutineDispatcher;
import kotlinx.coroutines.ExperimentalCoroutinesApi;

import java.io.PrintWriter;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@@ -90,9 +93,6 @@ import java.util.function.Consumer;

import javax.inject.Inject;

import kotlinx.coroutines.CoroutineDispatcher;
import kotlinx.coroutines.ExperimentalCoroutinesApi;

/**
 * Controls both the scrim behind the notifications and in front of the notifications (when a
 * security method gets shown).
@@ -226,6 +226,8 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
    private float mAdditionalScrimBehindAlphaKeyguard = 0f;
    // Combined scrim behind keyguard alpha of default scrim + additional scrim
    private float mScrimBehindAlphaKeyguard = KEYGUARD_SCRIM_ALPHA;

    static final float TRANSPARENT_BOUNCER_SCRIM_ALPHA = 0.54f;
    private final float mDefaultScrimAlpha;

    private float mRawPanelExpansionFraction;
@@ -340,7 +342,10 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
            LargeScreenShadeInterpolator largeScreenShadeInterpolator) {
        mScrimStateListener = lightBarController::setScrimState;
        mLargeScreenShadeInterpolator = largeScreenShadeInterpolator;
        mDefaultScrimAlpha = BUSY_SCRIM_ALPHA;
        // All scrims default alpha need to match bouncer background alpha to make sure the
        // transitions involving the bouncer are smooth and don't overshoot the bouncer alpha.
        mDefaultScrimAlpha =
                Flags.bouncerUiRevamp() ? TRANSPARENT_BOUNCER_SCRIM_ALPHA : BUSY_SCRIM_ALPHA;

        mKeyguardStateController = keyguardStateController;
        mDarkenWhileDragging = !mKeyguardStateController.canDismissLockScreen();
+41 −0
Original line number Diff line number Diff line
@@ -16,17 +16,24 @@

package com.android.systemui.statusbar.phone;

import static com.android.systemui.statusbar.phone.ScrimController.BUSY_SCRIM_ALPHA;
import static com.android.systemui.statusbar.phone.ScrimController.TRANSPARENT_BOUNCER_SCRIM_ALPHA;

import android.graphics.Color;

import com.android.app.tracing.coroutines.TrackTracer;
import com.android.systemui.Flags;
import com.android.systemui.dock.DockManager;
import com.android.systemui.res.R;
import com.android.systemui.scrim.ScrimView;
import com.android.systemui.statusbar.notification.stack.StackStateAnimator;

import kotlinx.coroutines.ExperimentalCoroutinesApi;

/**
 * Possible states of the ScrimController state machine.
 */
@ExperimentalCoroutinesApi
public enum ScrimState {

    /**
@@ -126,6 +133,13 @@ public enum ScrimState {
    BOUNCER {
        @Override
        public void prepare(ScrimState previousState) {
            if (Flags.bouncerUiRevamp()) {
                mBehindAlpha = mClipQsScrim ? 0.0f : TRANSPARENT_BOUNCER_SCRIM_ALPHA;
                mNotifAlpha = mClipQsScrim ? TRANSPARENT_BOUNCER_SCRIM_ALPHA : 0;
                mBehindTint = mNotifTint = mSurfaceColor;
                mFrontAlpha = 0f;
                return;
            }
            mBehindAlpha = mClipQsScrim ? 1 : mDefaultScrimAlpha;
            mBehindTint = mClipQsScrim ? mBackgroundColor : mSurfaceColor;
            mNotifAlpha = mClipQsScrim ? mDefaultScrimAlpha : 0;
@@ -136,6 +150,10 @@ public enum ScrimState {
        @Override
        public void setSurfaceColor(int surfaceColor) {
            super.setSurfaceColor(surfaceColor);
            if (Flags.bouncerUiRevamp()) {
                mBehindTint = mNotifTint = mSurfaceColor;
                return;
            }
            if (!mClipQsScrim) {
                mBehindTint = mSurfaceColor;
            }
@@ -146,14 +164,37 @@ public enum ScrimState {
     * Showing password challenge on top of a FLAG_SHOW_WHEN_LOCKED activity.
     */
    BOUNCER_SCRIMMED {
        @ExperimentalCoroutinesApi
        @Override
        public void prepare(ScrimState previousState) {
            if (Flags.bouncerUiRevamp()) {
                mBehindAlpha = 0f;
                mFrontAlpha = TRANSPARENT_BOUNCER_SCRIM_ALPHA;
                mFrontTint = mSurfaceColor;
                return;
            }
            mBehindAlpha = 0;
            mFrontAlpha = mDefaultScrimAlpha;
        }

        @Override
        public boolean shouldBlendWithMainColor() {
            return !Flags.bouncerUiRevamp();
        }
    },

    SHADE_LOCKED {
        @Override
        public void setDefaultScrimAlpha(float defaultScrimAlpha) {
            super.setDefaultScrimAlpha(defaultScrimAlpha);
            if (!Flags.notificationShadeBlur()) {
                // Temporary change that prevents the shade from being semi-transparent when
                // bouncer blur is enabled but notification shade blur is not enabled. This is
                // required to perf test these two flags independently.
                mDefaultScrimAlpha = BUSY_SCRIM_ALPHA;
            }
        }

        @Override
        public void prepare(ScrimState previousState) {
            mBehindAlpha = mClipQsScrim ? 1 : mDefaultScrimAlpha;