Refresh templates when fp removal fails

Test: atest
Fixes: 339556796
Flag: EXEMPT bugfix
Change-Id: I369e37f170a57bc9ced98f9728d06f2072c01263
This commit is contained in:
Joshua McCloskey
2024-07-16 20:36:29 +00:00
committed by Joshua Mccloskey
parent 2004df98f1
commit f624d6adf7
3 changed files with 64 additions and 12 deletions

View File

@@ -36,6 +36,7 @@ import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import static org.robolectric.Shadows.shadowOf;
import android.content.Context;
import android.content.Intent;
@@ -44,11 +45,13 @@ import android.hardware.biometrics.BiometricManager;
import android.hardware.biometrics.ComponentInfoInternal;
import android.hardware.biometrics.Flags;
import android.hardware.biometrics.SensorProperties;
import android.hardware.fingerprint.Fingerprint;
import android.hardware.fingerprint.FingerprintManager;
import android.hardware.fingerprint.FingerprintSensorProperties;
import android.hardware.fingerprint.FingerprintSensorPropertiesInternal;
import android.os.Bundle;
import android.os.CancellationSignal;
import android.os.Looper;
import android.os.UserHandle;
import android.platform.test.annotations.EnableFlags;
import android.platform.test.flag.junit.SetFlagsRule;
@@ -59,6 +62,7 @@ import android.view.ViewGroup;
import androidx.fragment.app.FragmentActivity;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;
import androidx.preference.Preference;
import androidx.test.core.app.ApplicationProvider;
import com.android.settings.password.ChooseLockSettingsHelper;
@@ -87,6 +91,7 @@ import org.robolectric.RobolectricTestRunner;
import org.robolectric.annotation.Config;
import java.util.ArrayList;
import java.util.List;
@RunWith(RobolectricTestRunner.class)
@Config(shadows = {ShadowSettingsPreferenceFragment.class, ShadowUtils.class, ShadowFragment.class,
@@ -120,6 +125,7 @@ public class FingerprintSettingsFragmentTest {
FingerprintManager.AuthenticationCallback.class);
private FingerprintAuthenticateSidecar mFingerprintAuthenticateSidecar;
private FingerprintRemoveSidecar mFingerprintRemoveSidecar;
@Before
public void setUp() {
@@ -216,7 +222,7 @@ public class FingerprintSettingsFragmentTest {
1,
UserHandle.of(GUEST_USER_ID).getIdentifier());
setUpFragment(false, GUEST_USER_ID, TYPE_POWER_BUTTON);
setUpFragment(false, GUEST_USER_ID, TYPE_POWER_BUTTON, 1);
final RestrictedSwitchPreference requireScreenOnToAuthPreference = mFragment.findPreference(
KEY_REQUIRE_SCREEN_ON_TO_AUTH);
@@ -224,11 +230,15 @@ public class FingerprintSettingsFragmentTest {
}
private void setUpFragment(boolean showChooseLock) {
setUpFragment(showChooseLock, PRIMARY_USER_ID, TYPE_UDFPS_OPTICAL);
setUpFragment(showChooseLock, PRIMARY_USER_ID, TYPE_UDFPS_OPTICAL, 1);
}
private void setUpFragment(boolean showChooseLock, int maxFingerprints) {
setUpFragment(showChooseLock, PRIMARY_USER_ID, TYPE_UDFPS_OPTICAL, maxFingerprints);
}
private void setUpFragment(boolean showChooseLock, int userId,
@FingerprintSensorProperties.SensorType int sensorType) {
@FingerprintSensorProperties.SensorType int sensorType, int maxFingerprints) {
ShadowUserManager.getShadow().addProfile(new UserInfo(userId, "", 0));
Intent intent = new Intent();
@@ -250,9 +260,13 @@ public class FingerprintSettingsFragmentTest {
doReturn(mFingerprintAuthenticateSidecar).when(fragmentManager).findFragmentByTag(
"authenticate_sidecar");
mFingerprintRemoveSidecar = new FingerprintRemoveSidecar();
doReturn(mFingerprintRemoveSidecar).when(fragmentManager).findFragmentByTag(
"removal_sidecar");
doNothing().when(mFragment).startActivityForResult(any(Intent.class), anyInt());
setSensor(sensorType);
setSensor(sensorType, maxFingerprints);
// Start fragment
mFragment.onAttach(mContext);
@@ -269,12 +283,38 @@ public class FingerprintSettingsFragmentTest {
assertThat(mFragment.isVisible()).isTrue();
}
private void setSensor(@FingerprintSensorProperties.SensorType int sensorType) {
@Ignore("b/353726774")
@Test
public void testAddButtonWorksAfterRemovalError() {
final Fingerprint fingerprint = new Fingerprint("Test", 0, 0);
doReturn(List.of(fingerprint)).when(mFingerprintManager).getEnrolledFingerprints(anyInt());
setUpFragment(false, 5);
shadowOf(Looper.getMainLooper()).idle();
final Preference addPref = mFragment.findPreference("key_fingerprint_add");
final FingerprintSettings.FingerprintPreference fpPref =
mFragment.findPreference("key_fingerprint_item_0");
assertThat(fpPref).isNotNull();
assertThat(addPref).isNotNull();
assertThat(addPref.isEnabled()).isTrue();
mFingerprintRemoveSidecar.setListener(mFragment.mRemovalListener);
mFragment.deleteFingerPrint(fingerprint);
verify(mFingerprintManager).remove(any(), anyInt(), any());
assertThat(addPref.isEnabled()).isFalse();
mFingerprintRemoveSidecar.mRemoveCallback.onRemovalError(fingerprint, 0, "failure");
shadowOf(Looper.getMainLooper()).idle();
assertThat(addPref.isEnabled()).isTrue();
}
private void setSensor(@FingerprintSensorProperties.SensorType int sensorType,
int maxFingerprints) {
final ArrayList<FingerprintSensorPropertiesInternal> props = new ArrayList<>();
props.add(new FingerprintSensorPropertiesInternal(
0 /* sensorId */,
SensorProperties.STRENGTH_STRONG,
1 /* maxEnrollmentsPerUser */,
maxFingerprints /* maxEnrollmentsPerUser */,
new ArrayList<ComponentInfoInternal>(),
sensorType,
true /* resetLockoutRequiresHardwareAuthToken */));