Merge "Remove flicker during fingerprint enrollment" into tm-qpr-dev am: d66e0c4c75 am: da8c78f093

Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Settings/+/20249709

Change-Id: I78baceb039e99545ae5abf9f0c54606188d621b2
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Diya Bera
2022-10-25 21:46:44 +00:00
committed by Automerger Merge Worker
3 changed files with 64 additions and 9 deletions

View File

@@ -1332,4 +1332,9 @@
[CHAR LIMIT=NONE] --> [CHAR LIMIT=NONE] -->
<string-array name="allowlist_hide_summary_in_battery_usage" translatable="false"> <string-array name="allowlist_hide_summary_in_battery_usage" translatable="false">
</string-array> </string-array>
<!-- Array containing help message codes that should not be displayed
during fingerprint enrollment. -->
<integer-array name="fingerprint_acquired_ignore_list">
</integer-array>
</resources> </resources>

View File

@@ -21,9 +21,14 @@ import android.app.settings.SettingsEnums;
import android.hardware.fingerprint.FingerprintManager; import android.hardware.fingerprint.FingerprintManager;
import android.util.Log; import android.util.Log;
import com.android.internal.annotations.VisibleForTesting;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.biometrics.BiometricEnrollSidecar; import com.android.settings.biometrics.BiometricEnrollSidecar;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
/** /**
* Sidecar fragment to handle the state around fingerprint enrollment. * Sidecar fragment to handle the state around fingerprint enrollment.
*/ */
@@ -32,11 +37,19 @@ public class FingerprintEnrollSidecar extends BiometricEnrollSidecar {
private FingerprintUpdater mFingerprintUpdater; private FingerprintUpdater mFingerprintUpdater;
private @FingerprintManager.EnrollReason int mEnrollReason; private @FingerprintManager.EnrollReason int mEnrollReason;
private Set<Integer> mHelpIgnore;
@Override @Override
public void onAttach(Activity activity) { public void onAttach(Activity activity) {
super.onAttach(activity); super.onAttach(activity);
mFingerprintUpdater = new FingerprintUpdater(activity); mFingerprintUpdater = new FingerprintUpdater(activity);
final int[] ignoreAcquiredInfo = getResources().getIntArray(
R.array.fingerprint_acquired_ignore_list);
mHelpIgnore = new HashSet<>();
for (int acquiredInfo: ignoreAcquiredInfo) {
mHelpIgnore.add(acquiredInfo);
}
mHelpIgnore = Collections.unmodifiableSet(mHelpIgnore);
} }
@Override @Override
@@ -49,7 +62,6 @@ public class FingerprintEnrollSidecar extends BiometricEnrollSidecar {
getString(R.string.fingerprint_intro_error_unknown)); getString(R.string.fingerprint_intro_error_unknown));
return; return;
} }
mFingerprintUpdater.enroll(mToken, mEnrollmentCancel, mUserId, mEnrollmentCallback, mFingerprintUpdater.enroll(mToken, mEnrollmentCancel, mUserId, mEnrollmentCallback,
mEnrollReason); mEnrollReason);
} }
@@ -58,7 +70,7 @@ public class FingerprintEnrollSidecar extends BiometricEnrollSidecar {
mEnrollReason = enrollReason; mEnrollReason = enrollReason;
} }
private FingerprintManager.EnrollmentCallback mEnrollmentCallback @VisibleForTesting FingerprintManager.EnrollmentCallback mEnrollmentCallback
= new FingerprintManager.EnrollmentCallback() { = new FingerprintManager.EnrollmentCallback() {
@Override @Override
@@ -68,6 +80,9 @@ public class FingerprintEnrollSidecar extends BiometricEnrollSidecar {
@Override @Override
public void onEnrollmentHelp(int helpMsgId, CharSequence helpString) { public void onEnrollmentHelp(int helpMsgId, CharSequence helpString) {
if (mHelpIgnore.contains(helpMsgId)) {
return;
}
FingerprintEnrollSidecar.super.onEnrollmentHelp(helpMsgId, helpString); FingerprintEnrollSidecar.super.onEnrollmentHelp(helpMsgId, helpString);
} }

View File

@@ -18,6 +18,7 @@ package com.android.settings.biometrics.fingerprint;
import static android.hardware.fingerprint.FingerprintSensorProperties.TYPE_POWER_BUTTON; import static android.hardware.fingerprint.FingerprintSensorProperties.TYPE_POWER_BUTTON;
import static android.hardware.fingerprint.FingerprintSensorProperties.TYPE_UDFPS_OPTICAL; import static android.hardware.fingerprint.FingerprintSensorProperties.TYPE_UDFPS_OPTICAL;
import static android.hardware.fingerprint.FingerprintSensorProperties.TYPE_UNKNOWN;
import static com.android.settings.biometrics.fingerprint.FingerprintEnrollEnrolling.KEY_STATE_PREVIOUS_ROTATION; import static com.android.settings.biometrics.fingerprint.FingerprintEnrollEnrolling.KEY_STATE_PREVIOUS_ROTATION;
import static com.android.settings.biometrics.fingerprint.FingerprintEnrollEnrolling.SFPS_STAGE_NO_ANIMATION; import static com.android.settings.biometrics.fingerprint.FingerprintEnrollEnrolling.SFPS_STAGE_NO_ANIMATION;
@@ -35,6 +36,8 @@ import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.times; import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
import static org.mockito.Mockito.mock;
import android.content.Context; import android.content.Context;
import android.content.res.ColorStateList; import android.content.res.ColorStateList;
@@ -52,6 +55,8 @@ import android.view.Display;
import android.view.Surface; import android.view.Surface;
import android.widget.TextView; import android.widget.TextView;
import androidx.annotation.Nullable;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.testutils.FakeFeatureFactory; import com.android.settings.testutils.FakeFeatureFactory;
import com.android.settings.widget.RingProgressBar; import com.android.settings.widget.RingProgressBar;
@@ -59,7 +64,6 @@ import com.android.settings.widget.RingProgressBar;
import com.airbnb.lottie.LottieAnimationView; import com.airbnb.lottie.LottieAnimationView;
import org.junit.Before; import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor; import org.mockito.ArgumentCaptor;
@@ -100,16 +104,39 @@ public class FingerprintEnrollEnrollingTest {
} }
@Test @Test
@Ignore
public void fingerprintEnrollHelp_shouldShowHelpText() { public void fingerprintEnrollHelp_shouldShowHelpText() {
EnrollmentCallback enrollmentCallback = verifyAndCaptureEnrollmentCallback(); initializeActivityFor(TYPE_UNKNOWN);
TestFingerprintEnrollSidecar sidecar = new TestFingerprintEnrollSidecar();
Resources resources = mock(Resources.class);
doReturn(resources).when(mContext).getResources();
when(resources.getIntArray(R.array.fingerprint_acquired_ignore_list))
.thenReturn(new int[]{3});
enrollmentCallback.onEnrollmentProgress(123); sidecar.setListener(mActivity);
enrollmentCallback.onEnrollmentHelp( sidecar.onAttach(mActivity);
FingerprintManager.FINGERPRINT_ERROR_UNABLE_TO_PROCESS, "test enrollment help"); sidecar.mEnrollmentCallback.onEnrollmentHelp(5,
"Help message should be displayed.");
TextView errorText = mActivity.findViewById(R.id.error_text); TextView errorText = mActivity.findViewById(R.id.error_text);
assertThat(errorText.getText()).isEqualTo("test enrollment help"); assertThat(errorText.getText()).isEqualTo("Help message should be displayed.");
}
@Test
public void fingerprintEnrollHelp_shouldNotShowHelpText() {
initializeActivityFor(TYPE_UNKNOWN);
TestFingerprintEnrollSidecar sidecar = new TestFingerprintEnrollSidecar();
Resources resources = mock(Resources.class);
doReturn(resources).when(mContext).getResources();
when(resources.getIntArray(R.array.fingerprint_acquired_ignore_list))
.thenReturn(new int[]{3});
sidecar.setListener(mActivity);
sidecar.onAttach(mActivity);
sidecar.mEnrollmentCallback.onEnrollmentHelp(3,
"Help message should not be displayed.");
TextView errorText = mActivity.findViewById(R.id.error_text);
assertThat(errorText.getText()).isEqualTo("");
} }
@Test @Test
@@ -319,4 +346,12 @@ public class FingerprintEnrollEnrollingTest {
return callbackCaptor.getValue(); return callbackCaptor.getValue();
} }
private class TestFingerprintEnrollSidecar extends FingerprintEnrollSidecar {
@Nullable
@Override
public Context getContext() {
return mContext;
}
}
} }