[DO NOT MERGE] Only show lock icon background with UDFPS am: ddfb4df1a8

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/15897827

Change-Id: I2ce677b139124b90aaae2728212cb4bcf5c3d7d5
This commit is contained in:
Matt Pietal
2021-09-23 19:33:57 +00:00
committed by Automerger Merge Worker
3 changed files with 63 additions and 24 deletions

View File

@@ -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.
*/

View File

@@ -345,7 +345,7 @@ public class LockIconViewController extends ViewController<LockIconView> impleme
}
private void updateColors() {
mView.updateColorAndBackgroundVisibility(mUdfpsSupported);
mView.updateColorAndBackgroundVisibility();
}
private void updateConfiguration() {
@@ -425,6 +425,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();

View File

@@ -31,6 +31,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;
@@ -127,19 +128,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,
(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();
@@ -147,8 +136,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
@@ -162,6 +151,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 =
@@ -176,12 +206,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() {