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:
@@ -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)
|
||||
|
Reference in New Issue
Block a user