Merge "Only show lock icon background with UDFPS"
This commit is contained in:
committed by
Android (Google) Code Review
commit
3721eec935
@@ -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.
|
||||
*/
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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() {
|
||||
|
||||
Reference in New Issue
Block a user