Loading packages/SystemUI/src/com/android/keyguard/LockIconView.java +14 −2 Original line number Diff line number Diff line Loading @@ -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); Loading @@ -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)); Loading @@ -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 { Loading @@ -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. */ Loading packages/SystemUI/src/com/android/keyguard/LockIconViewController.java +3 −1 Original line number Diff line number Diff line Loading @@ -346,7 +346,7 @@ public class LockIconViewController extends ViewController<LockIconView> impleme } private void updateColors() { mView.updateColorAndBackgroundVisibility(mUdfpsSupported); mView.updateColorAndBackgroundVisibility(); } private void updateConfiguration() { Loading Loading @@ -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(); Loading packages/SystemUI/tests/src/com/android/systemui/keyguard/LockIconViewControllerTest.java +46 −22 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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(); Loading @@ -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 Loading @@ -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 = Loading @@ -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() { Loading Loading
packages/SystemUI/src/com/android/keyguard/LockIconView.java +14 −2 Original line number Diff line number Diff line Loading @@ -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); Loading @@ -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)); Loading @@ -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 { Loading @@ -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. */ Loading
packages/SystemUI/src/com/android/keyguard/LockIconViewController.java +3 −1 Original line number Diff line number Diff line Loading @@ -346,7 +346,7 @@ public class LockIconViewController extends ViewController<LockIconView> impleme } private void updateColors() { mView.updateColorAndBackgroundVisibility(mUdfpsSupported); mView.updateColorAndBackgroundVisibility(); } private void updateConfiguration() { Loading Loading @@ -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(); Loading
packages/SystemUI/tests/src/com/android/systemui/keyguard/LockIconViewControllerTest.java +46 −22 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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(); Loading @@ -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 Loading @@ -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 = Loading @@ -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() { Loading