Merge "Only show lock icon background with UDFPS"

This commit is contained in:
TreeHugger Robot
2021-09-27 17:15:40 +00:00
committed by Android (Google) Code Review
3 changed files with 63 additions and 25 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

@@ -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();

View File

@@ -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() {