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

Commit 3721eec9 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Only show lock icon background with UDFPS"

parents 299369c4 91f8bdf9
Loading
Loading
Loading
Loading
+14 −2
Original line number Diff line number Diff line
@@ -48,6 +48,7 @@ public class LockIconView extends FrameLayout implements Dumpable {
    private ImageView mBgView;

    private int mLockIconColor;
    private boolean mUseBackground = false;

    public LockIconView(Context context, AttributeSet attrs) {
        super(context, attrs);
@@ -61,8 +62,8 @@ public class LockIconView extends FrameLayout implements Dumpable {
        mBgView = findViewById(R.id.lock_icon_bg);
    }

    void updateColorAndBackgroundVisibility(boolean useBackground) {
        if (useBackground && mLockIcon.getDrawable() != null) {
    void updateColorAndBackgroundVisibility() {
        if (mUseBackground && mLockIcon.getDrawable() != null) {
            mLockIconColor = Utils.getColorAttrDefaultColor(getContext(),
                    android.R.attr.textColorPrimary);
            mBgView.setBackground(getContext().getDrawable(R.drawable.fingerprint_bg));
@@ -78,6 +79,9 @@ public class LockIconView extends FrameLayout implements Dumpable {

    void setImageDrawable(Drawable drawable) {
        mLockIcon.setImageDrawable(drawable);

        if (!mUseBackground) return;

        if (drawable == null) {
            mBgView.setVisibility(View.INVISIBLE);
        } else {
@@ -85,6 +89,14 @@ public class LockIconView extends FrameLayout implements Dumpable {
        }
    }

    /**
     * Whether or not to render the lock icon background. Mainly used for UDPFS.
     */
    public void setUseBackground(boolean useBackground) {
        mUseBackground = useBackground;
        updateColorAndBackgroundVisibility();
    }

    /**
     * Set the location of the lock icon.
     */
+3 −1
Original line number Diff line number Diff line
@@ -346,7 +346,7 @@ public class LockIconViewController extends ViewController<LockIconView> impleme
    }

    private void updateColors() {
        mView.updateColorAndBackgroundVisibility(mUdfpsSupported);
        mView.updateColorAndBackgroundVisibility();
    }

    private void updateConfiguration() {
@@ -427,6 +427,8 @@ public class LockIconViewController extends ViewController<LockIconView> impleme
        boolean wasUdfpsEnrolled = mUdfpsEnrolled;

        mUdfpsSupported = mAuthController.getUdfpsSensorLocation() != null;
        mView.setUseBackground(mUdfpsSupported);

        mUdfpsEnrolled = mKeyguardUpdateMonitor.isUdfpsEnrolled();
        if (wasUdfpsSupported != mUdfpsSupported || wasUdfpsEnrolled != mUdfpsEnrolled) {
            updateVisibility();
+46 −22
Original line number Diff line number Diff line
@@ -32,6 +32,7 @@ import android.os.Vibrator;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
import android.util.DisplayMetrics;
import android.util.Pair;
import android.view.View;
import android.view.accessibility.AccessibilityManager;

@@ -128,20 +129,7 @@ public class LockIconViewControllerTest extends SysuiTestCase {
    @Test
    public void testUpdateFingerprintLocationOnInit() {
        // GIVEN fp sensor location is available pre-attached
        final PointF udfpsLocation = new PointF(50, 75);
        final int radius = 33;
        final FingerprintSensorPropertiesInternal fpProps =
                new FingerprintSensorPropertiesInternal(
                        /* sensorId */ 0,
                        /* strength */ 0,
                        /* max enrollments per user */ 5,
                        /* component info */ new ArrayList<>(),
                        /* sensorType */ 3,
                        /* resetLockoutRequiresHwToken */ false,
                        List.of(new SensorLocationInternal("" /* displayId */,
                                (int) udfpsLocation.x, (int) udfpsLocation.y, radius)));
        when(mAuthController.getUdfpsSensorLocation()).thenReturn(udfpsLocation);
        when(mAuthController.getUdfpsProps()).thenReturn(List.of(fpProps));
        Pair<Integer, PointF> udfps = setupUdfps();

        // WHEN lock icon view controller is initialized and attached
        mLockIconViewController.init();
@@ -149,8 +137,8 @@ public class LockIconViewControllerTest extends SysuiTestCase {
        mAttachListener.onViewAttachedToWindow(mLockIconView);

        // THEN lock icon view location is updated with the same coordinates as fpProps
        verify(mLockIconView).setCenterLocation(mPointCaptor.capture(), eq(radius));
        assertEquals(udfpsLocation, mPointCaptor.getValue());
        verify(mLockIconView).setCenterLocation(mPointCaptor.capture(), eq(udfps.first));
        assertEquals(udfps.second, mPointCaptor.getValue());
    }

    @Test
@@ -164,6 +152,47 @@ public class LockIconViewControllerTest extends SysuiTestCase {

        // GIVEN fp sensor location is available post-atttached
        captureAuthControllerCallback();
        Pair<Integer, PointF> udfps = setupUdfps();

        // WHEN all authenticators are registered
        mAuthControllerCallback.onAllAuthenticatorsRegistered();

        // THEN lock icon view location is updated with the same coordinates as fpProps
        verify(mLockIconView).setCenterLocation(mPointCaptor.capture(), eq(udfps.first));
        assertEquals(udfps.second, mPointCaptor.getValue());
    }

    @Test
    public void testLockIconViewBackgroundEnabledWhenUdfpsIsAvailable() {
        // GIVEN Udpfs sensor location is available
        setupUdfps();

        mLockIconViewController.init();
        captureAttachListener();

        // WHEN the view is attached
        mAttachListener.onViewAttachedToWindow(mLockIconView);

        // THEN the lock icon view background should be enabled
        verify(mLockIconView).setUseBackground(true);
    }

    @Test
    public void testLockIconViewBackgroundDisabledWhenUdfpsIsUnavailable() {
        // GIVEN Udfps sensor location is not available
        when(mAuthController.getUdfpsSensorLocation()).thenReturn(null);

        mLockIconViewController.init();
        captureAttachListener();

        // WHEN the view is attached
        mAttachListener.onViewAttachedToWindow(mLockIconView);

        // THEN the lock icon view background should be disabled
        verify(mLockIconView).setUseBackground(false);
    }

    private Pair<Integer, PointF> setupUdfps() {
        final PointF udfpsLocation = new PointF(50, 75);
        final int radius = 33;
        final FingerprintSensorPropertiesInternal fpProps =
@@ -179,12 +208,7 @@ public class LockIconViewControllerTest extends SysuiTestCase {
        when(mAuthController.getUdfpsSensorLocation()).thenReturn(udfpsLocation);
        when(mAuthController.getUdfpsProps()).thenReturn(List.of(fpProps));

        // WHEN all authenticators are registered
        mAuthControllerCallback.onAllAuthenticatorsRegistered();

        // THEN lock icon view location is updated with the same coordinates as fpProps
        verify(mLockIconView).setCenterLocation(mPointCaptor.capture(), eq(radius));
        assertEquals(udfpsLocation, mPointCaptor.getValue());
        return new Pair(radius, udfpsLocation);
    }

    private void captureAuthControllerCallback() {