Merge "(2/N) Biometric error dialog" into main

This commit is contained in:
Diya Bera
2024-09-17 23:58:50 +00:00
committed by Android (Google) Code Review
9 changed files with 118 additions and 56 deletions

View File

@@ -55,7 +55,11 @@ import android.widget.LinearLayout;
import android.widget.ScrollView;
import androidx.fragment.app.FragmentActivity;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;
import com.android.settings.biometrics.IdentityCheckBiometricErrorDialog;
import com.android.settings.password.ConfirmDeviceCredentialActivity;
import com.android.settings.testutils.shadow.ShadowUserManager;
import com.android.settings.testutils.shadow.ShadowUtils;
import com.android.settingslib.development.DevelopmentSettingsEnabler;
@@ -114,6 +118,10 @@ public class MainClearTest {
@Mock
private Intent mMockIntent;
@Mock
private FragmentManager mMockFragmentManager;
@Mock
private FragmentTransaction mMockFragmentTransaction;
private MainClear mMainClear;
private ShadowActivity mShadowActivity;
@@ -391,6 +399,9 @@ public class MainClearTest {
@Test
@EnableFlags(Flags.FLAG_MANDATORY_BIOMETRICS)
public void testOnActivityResultInternal_keyguardRequestNotTriggeringBiometricPrompt_lockoutError() {
final ArgumentCaptor<IdentityCheckBiometricErrorDialog> argumentCaptor =
ArgumentCaptor.forClass(IdentityCheckBiometricErrorDialog.class);
when(mContext.getResources()).thenReturn(mResources);
when(mMockActivity.getSystemService(BiometricManager.class)).thenReturn(mBiometricManager);
when(mResources.getString(anyInt())).thenReturn(TEST_ACCOUNT_NAME);
@@ -400,12 +411,17 @@ public class MainClearTest {
doReturn(true).when(mMainClear).isValidRequestCode(eq(MainClear.KEYGUARD_REQUEST));
doNothing().when(mMainClear).startActivityForResult(any(), anyInt());
doReturn(mMockActivity).when(mMainClear).getActivity();
doReturn(mMockFragmentManager).when(mMockActivity).getSupportFragmentManager();
doReturn(mMockFragmentTransaction).when(mMockFragmentManager).beginTransaction();
doReturn(mContext).when(mMainClear).getContext();
mMainClear
.onActivityResultInternal(MainClear.KEYGUARD_REQUEST, Activity.RESULT_OK, null);
verify(mMainClear).isValidRequestCode(eq(MainClear.KEYGUARD_REQUEST));
verify(mMainClear.getActivity().getSupportFragmentManager().beginTransaction()).add(
argumentCaptor.capture(), any());
assertThat(argumentCaptor.getValue()).isInstanceOf(IdentityCheckBiometricErrorDialog.class);
verify(mMainClear, never()).startActivityForResult(any(), eq(MainClear.BIOMETRICS_REQUEST));
verify(mMainClear, never()).establishInitialState();
verify(mMainClear, never()).getAccountConfirmationIntent();
@@ -427,6 +443,29 @@ public class MainClearTest {
verify(mMainClear).showFinalConfirmation();
}
@Test
public void testOnActivityResultInternal_biometricRequestTriggeringBiometricErrorDialog() {
final ArgumentCaptor<IdentityCheckBiometricErrorDialog> argumentCaptor =
ArgumentCaptor.forClass(IdentityCheckBiometricErrorDialog.class);
doReturn(true).when(mMainClear).isValidRequestCode(
eq(MainClear.BIOMETRICS_REQUEST));
doNothing().when(mMainClear).establishInitialState();
doReturn(mMockActivity).when(mMainClear).getActivity();
doReturn(mMockFragmentManager).when(mMockActivity).getSupportFragmentManager();
doReturn(mMockFragmentTransaction).when(mMockFragmentManager).beginTransaction();
doReturn(mContext).when(mMainClear).getContext();
mMainClear
.onActivityResultInternal(MainClear.BIOMETRICS_REQUEST,
ConfirmDeviceCredentialActivity.BIOMETRIC_LOCKOUT_ERROR_RESULT, null);
verify(mMainClear).isValidRequestCode(eq(MainClear.BIOMETRICS_REQUEST));
verify(mMainClear.getActivity().getSupportFragmentManager().beginTransaction()).add(
argumentCaptor.capture(), any());
verify(mMainClear).establishInitialState();
}
@Test
public void testOnActivityResultInternal_biometricRequestTriggeringInitialState() {
doReturn(true).when(mMainClear).isValidRequestCode(eq(MainClear.BIOMETRICS_REQUEST));

View File

@@ -42,6 +42,7 @@ import androidx.fragment.app.FragmentActivity;
import com.android.internal.logging.nano.MetricsProto;
import com.android.settings.R;
import com.android.settings.Utils;
import com.android.settings.biometrics.IdentityCheckBiometricErrorDialog;
import com.android.settings.password.ConfirmDeviceCredentialActivity;
import com.android.settings.testutils.shadow.ShadowAlertDialogCompat;
import com.android.settings.testutils.shadow.ShadowUserManager;
@@ -236,7 +237,8 @@ public class DevelopmentSettingsDashboardFragmentTest {
}
@Test
@Config(shadows = ShadowBiometricErrorDialog.class)
@Config(shadows = ShadowIdentityCheckBiometricErrorDialog.class)
@Ignore("b/354820314")
@EnableFlags(Flags.FLAG_MANDATORY_BIOMETRICS)
public void onActivityResult_requestBiometricPrompt_showErrorDialog() {
when(mDashboard.getContext()).thenReturn(mContext);
@@ -247,7 +249,7 @@ public class DevelopmentSettingsDashboardFragmentTest {
ConfirmDeviceCredentialActivity.BIOMETRIC_LOCKOUT_ERROR_RESULT, null);
assertThat(mSwitchBar.isChecked()).isFalse();
assertThat(ShadowBiometricErrorDialog.sShown).isTrue();
assertThat(ShadowIdentityCheckBiometricErrorDialog.sShown).isTrue();
}
@Test
@@ -379,8 +381,8 @@ public class DevelopmentSettingsDashboardFragmentTest {
}
}
@Implements(BiometricErrorDialog.class)
public static class ShadowBiometricErrorDialog {
@Implements(IdentityCheckBiometricErrorDialog.class)
public static class ShadowIdentityCheckBiometricErrorDialog {
static boolean sShown;
@Implementation
public static void showBiometricErrorDialog(FragmentActivity fragmentActivity,