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

Commit fbfd4c2a authored by Kevin Chyn's avatar Kevin Chyn
Browse files

Use StatusBar expansion instead of alpha to sync UDFPS animations

1) Removes ScrimChangedListener from ScrimController
2) Adds ExpansionChangedListener to StatusBar

Bug: 177931181
Fixes: 179192249

Test: atest UdfpsControllerTest

Change-Id: If20d0d3a282fbd9e4d31a59273115bb1055e1e7d
parent a5f7aadf
Loading
Loading
Loading
Loading
+1 −8
Original line number Diff line number Diff line
@@ -28,7 +28,6 @@ import android.util.Log;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

import com.android.internal.graphics.ColorUtils;
import com.android.settingslib.Utils;
import com.android.systemui.R;

@@ -98,13 +97,7 @@ public class UdfpsAnimationEnroll extends UdfpsAnimation {
    @Override
    public void setAlpha(int alpha) {
        super.setAlpha(alpha);

        // Gradually fade into the notification shade color. This needs to be done because the
        // UDFPS view is drawn on a layer on top of the notification shade
        final float percent = alpha / 255.f;
        mSensorPaint.setColor(ColorUtils.blendARGB(mNotificationShadeColor, Color.WHITE, percent));
        mSensorPaint.setShadowLayer(SHADOW_RADIUS, 0, 0,
                ColorUtils.blendARGB(mNotificationShadeColor, Color.BLACK, percent));
        mSensorPaint.setAlpha(alpha);
    }

    @Override
+18 −7
Original line number Diff line number Diff line
@@ -25,22 +25,21 @@ import android.util.AttributeSet;
import android.view.View;

import com.android.systemui.doze.DozeReceiver;
import com.android.systemui.statusbar.phone.ScrimController;
import com.android.systemui.statusbar.phone.StatusBar;

/**
 * Class that coordinates non-HBM animations (such as enroll, keyguard, BiometricPrompt,
 * FingerprintManager).
 */
public class UdfpsAnimationView extends View implements DozeReceiver,
        ScrimController.ScrimChangedListener {
        StatusBar.ExpansionChangedListener {

    private static final String TAG = "UdfpsAnimationView";

    @NonNull private UdfpsView mParent;
    @Nullable private UdfpsAnimation mUdfpsAnimation;
    @NonNull private RectF mSensorRect;
    private int mNotificationPanelAlpha;

    private int mAlpha;

    public UdfpsAnimationView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
@@ -52,12 +51,24 @@ public class UdfpsAnimationView extends View implements DozeReceiver,
        super.onDraw(canvas);

        if (mUdfpsAnimation != null) {
            final int alpha = mParent.shouldPauseAuth() ? 255 - mNotificationPanelAlpha : 255;
            final int alpha = mParent.shouldPauseAuth() ? mAlpha : 255;
            mUdfpsAnimation.setAlpha(alpha);
            mUdfpsAnimation.draw(canvas);
        }
    }

    private int expansionToAlpha(float expansion) {
        // Fade to 0 opacity when reaching this expansion amount
        final float maxExpansion = 0.4f;

        if (expansion >= maxExpansion) {
            return 0; // transparent
        }

        final float percent = expansion / maxExpansion;
        return (int) ((1 - percent) * 255);
    }

    void setParent(@NonNull UdfpsView parent) {
        mParent = parent;
    }
@@ -87,8 +98,8 @@ public class UdfpsAnimationView extends View implements DozeReceiver,
    }

    @Override
    public void onAlphaChanged(float alpha) {
        mNotificationPanelAlpha = (int) (alpha * 255);
    public void onExpansionChanged(float expansion, boolean expanded) {
        mAlpha = expansionToAlpha(expansion);
        postInvalidate();
    }

+3 −2
Original line number Diff line number Diff line
@@ -45,6 +45,7 @@ import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.doze.DozeReceiver;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.statusbar.phone.ScrimController;
import com.android.systemui.statusbar.phone.StatusBar;
import com.android.systemui.util.concurrency.DelayableExecutor;

import javax.inject.Inject;
@@ -155,7 +156,7 @@ public class UdfpsController implements DozeReceiver, HbmCallback {
            WindowManager windowManager,
            @NonNull StatusBarStateController statusBarStateController,
            @Main DelayableExecutor fgExecutor,
            @NonNull ScrimController scrimController) {
            @Nullable StatusBar statusBar) {
        mContext = context;
        // The fingerprint manager is queried for UDFPS before this class is constructed, so the
        // fingerprint manager should never be null.
@@ -186,7 +187,7 @@ public class UdfpsController implements DozeReceiver, HbmCallback {
        mView.setSensorProperties(mSensorProps);
        mView.setHbmCallback(this);

        scrimController.addScrimChangedListener(mView);
        statusBar.addExpansionChangedListener(mView);
        statusBarStateController.addCallback(mView);

        mFingerprintManager.setUdfpsOverlayController(new UdfpsOverlayController());
+4 −4
Original line number Diff line number Diff line
@@ -39,14 +39,14 @@ import android.widget.FrameLayout;
import com.android.systemui.R;
import com.android.systemui.doze.DozeReceiver;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.statusbar.phone.ScrimController;
import com.android.systemui.statusbar.phone.StatusBar;

/**
 * A view containing 1) A SurfaceView for HBM, and 2) A normal drawable view for all other
 * animations.
 */
public class UdfpsView extends FrameLayout implements DozeReceiver, UdfpsIlluminator,
        StatusBarStateController.StateListener, ScrimController.ScrimChangedListener {
        StatusBarStateController.StateListener, StatusBar.ExpansionChangedListener {
    private static final String TAG = "UdfpsView";

    private static final int DEBUG_TEXT_SIZE_PX = 32;
@@ -133,8 +133,8 @@ public class UdfpsView extends FrameLayout implements DozeReceiver, UdfpsIllumin
    }

    @Override
    public void onAlphaChanged(float alpha) {
        mAnimationView.onAlphaChanged(alpha);
    public void onExpansionChanged(float expansion, boolean expanded) {
        mAnimationView.onExpansionChanged(expansion, expanded);
    }

    @Override
+14 −0
Original line number Diff line number Diff line
@@ -44,6 +44,7 @@ import com.android.systemui.plugins.DarkIconDispatcher.DarkReceiver;
import com.android.systemui.statusbar.CommandQueue;
import com.android.systemui.util.leak.RotationUtils;

import java.util.List;
import java.util.Objects;

public class PhoneStatusBarView extends PanelBar {
@@ -75,6 +76,8 @@ public class PhoneStatusBarView extends PanelBar {
    @Nullable
    private DisplayCutout mDisplayCutout;
    private int mStatusBarHeight;
    @Nullable
    private List<StatusBar.ExpansionChangedListener> mExpansionChangedListeners;

    /**
     * Draw this many pixels into the left/right side of the cutout to optimally use the space
@@ -93,6 +96,11 @@ public class PhoneStatusBarView extends PanelBar {
        mBar = bar;
    }

    public void setExpansionChangedListeners(
            @Nullable List<StatusBar.ExpansionChangedListener> listeners) {
        mExpansionChangedListeners = listeners;
    }

    public void setScrimController(ScrimController scrimController) {
        mScrimController = scrimController;
    }
@@ -277,6 +285,12 @@ public class PhoneStatusBarView extends PanelBar {
        if ((frac == 0 || frac == 1) && mBar.getNavigationBarView() != null) {
            mBar.getNavigationBarView().onStatusBarPanelStateChanged();
        }

        if (mExpansionChangedListeners != null) {
            for (StatusBar.ExpansionChangedListener listener : mExpansionChangedListeners) {
                listener.onExpansionChanged(frac, expanded);
            }
        }
    }

    private void updateScrimFraction() {
Loading