Add mandatory biometric prompt to platform surfaces (4/N)

1. Enable developer options via build info
2. Enable developer options via toggle under system -> developer options

Flag: android.hardware.biometrics.flags.mandatory_biometrics
Fixes: 355500452
Test: atest BuildNumberPreferenceControllerTest
DevelopmentSettingsDashboardFragmentTest

Change-Id: Iecbe34024d287e71e235becec3ce5a2bd5c1697f
This commit is contained in:
Diya Bera
2024-07-30 17:31:05 +00:00
parent 2e12b95c45
commit 8f0c77bb19
4 changed files with 149 additions and 6 deletions

View File

@@ -18,13 +18,21 @@ package com.android.settings.development;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.doReturn;
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 android.app.Activity;
import android.content.Context;
import android.hardware.biometrics.BiometricManager;
import android.hardware.biometrics.Flags;
import android.platform.test.annotations.EnableFlags;
import android.platform.test.flag.junit.SetFlagsRule;
import android.provider.SearchIndexableResource;
import android.provider.Settings;
@@ -42,6 +50,7 @@ import com.android.settingslib.development.DevelopmentSettingsEnabler;
import org.junit.After;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.MockitoAnnotations;
@@ -51,6 +60,7 @@ import org.robolectric.annotation.Config;
import org.robolectric.annotation.Implementation;
import org.robolectric.annotation.Implements;
import org.robolectric.shadow.api.Shadow;
import org.robolectric.shadows.ShadowBiometricManager;
import org.robolectric.shadows.androidx.fragment.FragmentController;
import org.robolectric.util.ReflectionHelpers;
@@ -61,22 +71,34 @@ import java.util.List;
ShadowAlertDialogCompat.class,
ShadowUserManager.class,
ShadowUserManager.class,
ShadowBiometricManager.class,
})
public class DevelopmentSettingsDashboardFragmentTest {
@Rule
public final SetFlagsRule mSetFlagsRule = new SetFlagsRule();
private Context mContext;
private ShadowUserManager mShadowUserManager;
private ShadowBiometricManager mShadowBiometricManager;
private DevelopmentSettingsDashboardFragment mDashboard;
private SettingsMainSwitchBar mSwitchBar;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
mContext = RuntimeEnvironment.application;
SettingsMainSwitchBar switchBar = new SettingsMainSwitchBar(mContext);
mSwitchBar = new SettingsMainSwitchBar(mContext);
mDashboard = spy(new DevelopmentSettingsDashboardFragment());
ReflectionHelpers.setField(mDashboard, "mSwitchBar", switchBar);
ReflectionHelpers.setField(mDashboard, "mSwitchBar", mSwitchBar);
mShadowUserManager = Shadow.extract(mContext.getSystemService(Context.USER_SERVICE));
mShadowUserManager.setIsAdminUser(true);
mShadowBiometricManager = Shadow.extract(mContext.getSystemService(
Context.BIOMETRIC_SERVICE));
mShadowBiometricManager.setCanAuthenticate(false);
//TODO(b/352603684): Should be Authenticators.MANDATORY_BIOMETRICS,
// but it is not supported by ShadowBiometricManager
mShadowBiometricManager.setAuthenticatorType(
BiometricManager.Authenticators.BIOMETRIC_STRONG);
}
@After
@@ -176,6 +198,41 @@ public class DevelopmentSettingsDashboardFragmentTest {
assertThat(ShadowEnableDevelopmentSettingWarningDialog.mShown).isTrue();
}
@Test
@Config(shadows = ShadowEnableDevelopmentSettingWarningDialog.class)
@EnableFlags(Flags.FLAG_MANDATORY_BIOMETRICS)
public void onSwitchChanged_turnOn_shouldLaunchBiometricPromptIfMandatoryBiometricsEffective() {
when(mDashboard.getContext()).thenReturn(mContext);
doNothing().when(mDashboard).startActivityForResult(any(),
eq(DevelopmentSettingsDashboardFragment.REQUEST_BIOMETRIC_PROMPT));
Settings.Global.putInt(mContext.getContentResolver(),
Settings.Global.DEVELOPMENT_SETTINGS_ENABLED, 0);
mShadowBiometricManager.setCanAuthenticate(true);
mDashboard.onCheckedChanged(null, true /* isChecked */);
assertThat(mSwitchBar.isChecked()).isFalse();
verify(mDashboard).startActivityForResult(any(),
eq(DevelopmentSettingsDashboardFragment.REQUEST_BIOMETRIC_PROMPT));
assertThat(ShadowEnableDevelopmentSettingWarningDialog.mShown).isFalse();
}
@Test
@Config(shadows = ShadowEnableDevelopmentSettingWarningDialog.class)
@EnableFlags(Flags.FLAG_MANDATORY_BIOMETRICS)
public void onActivityResult_requestBiometricPrompt_shouldShowWarningDialog() {
when(mDashboard.getContext()).thenReturn(mContext);
Settings.Global.putInt(mContext.getContentResolver(),
Settings.Global.DEVELOPMENT_SETTINGS_ENABLED, 0);
mDashboard.onActivityResult(DevelopmentSettingsDashboardFragment.REQUEST_BIOMETRIC_PROMPT,
Activity.RESULT_OK, null);
mDashboard.onCheckedChanged(null, true /* isChecked */);
assertThat(mSwitchBar.isChecked()).isTrue();
assertThat(ShadowEnableDevelopmentSettingWarningDialog.mShown).isTrue();
}
@Test
@Ignore
@Config(shadows = ShadowEnableDevelopmentSettingWarningDialog.class)