Wait for systemui udfps overlay ready to show settings udfps enroll view.

Previously, we show settings's udfps enroll animation view (the fingerprint icon and progress view) once the FingerprintEnrollEnrolling is shown.
However, touch events have to wait for systemui's udfps overlay to be valid. This CL lets settings's udfps enroll view wait for systemui's overlay.
1. Sets udfps enroll animation view's default visibility Gone.
2. Propagates FingerprintManager#onUdfpsOverlayShown to
   FingerprintEnrollEnrolling and when it's called, set the enroll view
   visible.

Besides, this CL renames onPointerDown() and onPointerUp() with Udfps.

Bug: 280718879
Test: atest FingerprintEnrollEnrollingTest
Change-Id: Ieed3e74c182828918785edcacb021f19a3665f2a
This commit is contained in:
Hao Dong
2023-06-07 00:02:48 +00:00
parent dbec7ba7fb
commit c24e305fbf
9 changed files with 88 additions and 38 deletions

View File

@@ -18,7 +18,8 @@
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/udfps_animation_view"
android:layout_width="match_parent"
android:layout_height="match_parent">
android:layout_height="match_parent"
android:visibility="gone">
<ImageView
android:id="@+id/udfps_enroll_animation_fp_progress_view"

View File

@@ -48,11 +48,16 @@ public abstract class BiometricEnrollSidecar extends InstrumentedFragment {
/**
* Called when a pointer down event has occurred.
*/
default void onPointerDown(int sensorId) { }
default void onUdfpsPointerDown(int sensorId) { }
/**
* Called when a pointer up event has occurred.
*/
default void onPointerUp(int sensorId) { }
default void onUdfpsPointerUp(int sensorId) { }
/**
* Called when udfps overlay is shown.
*/
default void onUdfpsOverlayShown() { }
}
private int mEnrollmentSteps = -1;
@@ -126,29 +131,36 @@ public abstract class BiometricEnrollSidecar extends InstrumentedFragment {
}
}
private class QueuedPointerDown extends QueuedEvent {
private class QueuedUdfpsPointerDown extends QueuedEvent {
private final int sensorId;
public QueuedPointerDown(int sensorId) {
QueuedUdfpsPointerDown(int sensorId) {
this.sensorId = sensorId;
}
@Override
public void send(Listener listener) {
listener.onPointerDown(sensorId);
listener.onUdfpsPointerDown(sensorId);
}
}
private class QueuedPointerUp extends QueuedEvent {
private class QueuedUdfpsPointerUp extends QueuedEvent {
private final int sensorId;
public QueuedPointerUp(int sensorId) {
QueuedUdfpsPointerUp(int sensorId) {
this.sensorId = sensorId;
}
@Override
public void send(Listener listener) {
listener.onPointerUp(sensorId);
listener.onUdfpsPointerUp(sensorId);
}
}
private class QueuedUdfpsOverlayShown extends QueuedEvent {
@Override
public void send(Listener listener) {
listener.onUdfpsOverlayShown();
}
}
@@ -249,19 +261,27 @@ public abstract class BiometricEnrollSidecar extends InstrumentedFragment {
}
}
protected void onPointerDown(int sensorId) {
protected void onUdfpsPointerDown(int sensorId) {
if (mListener != null) {
mListener.onPointerDown(sensorId);
mListener.onUdfpsPointerDown(sensorId);
} else {
mQueuedEvents.add(new QueuedPointerDown(sensorId));
mQueuedEvents.add(new QueuedUdfpsPointerDown(sensorId));
}
}
protected void onPointerUp(int sensorId) {
protected void onUdfpsPointerUp(int sensorId) {
if (mListener != null) {
mListener.onPointerUp(sensorId);
mListener.onUdfpsPointerUp(sensorId);
} else {
mQueuedEvents.add(new QueuedPointerUp(sensorId));
mQueuedEvents.add(new QueuedUdfpsPointerUp(sensorId));
}
}
protected void onUdfpsOverlayShown() {
if (mListener != null) {
mListener.onUdfpsOverlayShown();
} else {
mQueuedEvents.add(new QueuedUdfpsOverlayShown());
}
}

View File

@@ -828,19 +828,26 @@ public class FingerprintEnrollEnrolling extends BiometricsEnrollEnrolling {
}
@Override
public void onPointerDown(int sensorId) {
public void onUdfpsPointerDown(int sensorId) {
if (mUdfpsEnrollHelper != null) {
mUdfpsEnrollHelper.onPointerDown(sensorId);
}
}
@Override
public void onPointerUp(int sensorId) {
public void onUdfpsPointerUp(int sensorId) {
if (mUdfpsEnrollHelper != null) {
mUdfpsEnrollHelper.onPointerUp(sensorId);
}
}
@Override
public void onUdfpsOverlayShown() {
if (mCanAssumeUdfps) {
findViewById(R.id.udfps_animation_view).setVisibility(View.VISIBLE);
}
}
private void updateProgress(boolean animate) {
if (mSidecar == null || !mSidecar.isEnrolling()) {
Log.d(TAG, "Enrollment not started yet");

View File

@@ -124,13 +124,18 @@ public class FingerprintEnrollSidecar extends BiometricEnrollSidecar {
}
@Override
public void onPointerDown(int sensorId) {
FingerprintEnrollSidecar.super.onPointerDown(sensorId);
public void onUdfpsPointerDown(int sensorId) {
FingerprintEnrollSidecar.super.onUdfpsPointerDown(sensorId);
}
@Override
public void onPointerUp(int sensorId) {
FingerprintEnrollSidecar.super.onPointerUp(sensorId);
public void onUdfpsPointerUp(int sensorId) {
FingerprintEnrollSidecar.super.onUdfpsPointerUp(sensorId);
}
@Override
public void onUdfpsOverlayShown() {
FingerprintEnrollSidecar.super.onUdfpsOverlayShown();
}
};

View File

@@ -98,13 +98,18 @@ public class FingerprintUpdater {
}
@Override
public void onPointerDown(int sensorId) {
mCallback.onPointerDown(sensorId);
public void onUdfpsPointerDown(int sensorId) {
mCallback.onUdfpsPointerDown(sensorId);
}
@Override
public void onPointerUp(int sensorId) {
mCallback.onPointerUp(sensorId);
public void onUdfpsPointerUp(int sensorId) {
mCallback.onUdfpsPointerUp(sensorId);
}
@Override
public void onUdfpsOverlayShown() {
mCallback.onUdfpsOverlayShown();
}
}

View File

@@ -86,7 +86,7 @@ public class UdfpsEnrollEnrollingView extends GlifLayout {
UdfpsEnrollHelper udfpsEnrollHelper,
AccessibilityManager accessibilityManager) {
mAccessibilityManager = accessibilityManager;
initUdfpsEnrollView(mUdfpsEnrollView, udfpsProps, udfpsEnrollHelper);
initUdfpsEnrollView(udfpsProps, udfpsEnrollHelper);
if (!mIsLandscape) {
adjustPortraitPaddings();
@@ -117,8 +117,7 @@ public class UdfpsEnrollEnrollingView extends GlifLayout {
});
}
private void initUdfpsEnrollView(UdfpsEnrollView udfpsEnrollView,
FingerprintSensorPropertiesInternal udfpsProps,
private void initUdfpsEnrollView(FingerprintSensorPropertiesInternal udfpsProps,
UdfpsEnrollHelper udfpsEnrollHelper) {
DisplayInfo displayInfo = new DisplayInfo();
mContext.getDisplay().getDisplayInfo(displayInfo);
@@ -141,8 +140,8 @@ public class UdfpsEnrollEnrollingView extends GlifLayout {
scaleFactor,
displayInfo.rotation);
udfpsEnrollView.setOverlayParams(params);
udfpsEnrollView.setEnrollHelper(udfpsEnrollHelper);
mUdfpsEnrollView.setOverlayParams(params);
mUdfpsEnrollView.setEnrollHelper(udfpsEnrollHelper);
}
private void adjustPortraitPaddings() {

View File

@@ -103,12 +103,12 @@ public class FingerprintEnrollProgressViewModel extends AndroidViewModel {
}
@Override
public void onPointerDown(int sensorId) {
public void onUdfpsPointerDown(int sensorId) {
mPointerDownLiveData.postValue(sensorId);
}
@Override
public void onPointerUp(int sensorId) {
public void onUdfpsPointerUp(int sensorId) {
mPointerUpLiveData.postValue(sensorId);
}
};

View File

@@ -352,6 +352,19 @@ public class FingerprintEnrollEnrollingTest {
assertThat(descriptionTextView.getVisibility()).isEqualTo(View.VISIBLE);
}
@Test
public void fingerprintUdfpsOverlayEnrollment_udfpsAnimationViewVisibility() {
initializeActivityWithoutCreate(TYPE_UDFPS_OPTICAL);
when(mMockDisplay.getRotation()).thenReturn(Surface.ROTATION_0);
createActivity();
final UdfpsEnrollView enrollView = mActivity.findViewById(R.id.udfps_animation_view);
assertThat(enrollView.getVisibility()).isEqualTo(View.GONE);
mActivity.onUdfpsOverlayShown();
assertThat(enrollView.getVisibility()).isEqualTo(View.VISIBLE);
}
@Test
public void forwardEnrollProgressEvents() {
initializeActivityFor(TYPE_UDFPS_OPTICAL);
@@ -393,11 +406,11 @@ public class FingerprintEnrollEnrollingTest {
}
@Test
public void forwardEnrollPointerDownEvents() {
public void forwardUdfpsEnrollPointerDownEvents() {
initializeActivityFor(TYPE_UDFPS_OPTICAL);
EnrollListener listener = new EnrollListener(mActivity);
mActivity.onPointerDown(0);
mActivity.onUdfpsPointerDown(0);
assertThat(listener.mProgress).isFalse();
assertThat(listener.mHelp).isFalse();
assertThat(listener.mAcquired).isFalse();
@@ -406,11 +419,11 @@ public class FingerprintEnrollEnrollingTest {
}
@Test
public void forwardEnrollPointerUpEvents() {
public void forwardUdfpsEnrollPointerUpEvents() {
initializeActivityFor(TYPE_UDFPS_OPTICAL);
EnrollListener listener = new EnrollListener(mActivity);
mActivity.onPointerUp(0);
mActivity.onUdfpsPointerUp(0);
assertThat(listener.mProgress).isFalse();
assertThat(listener.mHelp).isFalse();
assertThat(listener.mAcquired).isFalse();

View File

@@ -379,7 +379,7 @@ public class FingerprintEnrollProgressViewModelTest {
// Notify acquire message
final int value = 33;
mCallbackWrapper.mValue.onPointerDown(value);
mCallbackWrapper.mValue.onUdfpsPointerDown(value);
assertThat(liveData.getValue()).isEqualTo(value);
}
@@ -397,7 +397,7 @@ public class FingerprintEnrollProgressViewModelTest {
// Notify acquire message
final int value = 44;
mCallbackWrapper.mValue.onPointerUp(value);
mCallbackWrapper.mValue.onUdfpsPointerUp(value);
assertThat(liveData.getValue()).isEqualTo(value);
}