Merge "Fix require on screen toggle on guest user." into udc-qpr-dev

This commit is contained in:
Hao Dong
2023-06-23 02:36:48 +00:00
committed by Android (Google) Code Review
2 changed files with 58 additions and 14 deletions

View File

@@ -169,7 +169,8 @@ public class FingerprintSettings extends SubSettings {
private static final String KEY_LAUNCHED_CONFIRM = "launched_confirm"; private static final String KEY_LAUNCHED_CONFIRM = "launched_confirm";
private static final String KEY_HAS_FIRST_ENROLLED = "has_first_enrolled"; private static final String KEY_HAS_FIRST_ENROLLED = "has_first_enrolled";
private static final String KEY_IS_ENROLLING = "is_enrolled"; private static final String KEY_IS_ENROLLING = "is_enrolled";
private static final String KEY_REQUIRE_SCREEN_ON_TO_AUTH = @VisibleForTesting
static final String KEY_REQUIRE_SCREEN_ON_TO_AUTH =
"security_settings_require_screen_on_to_auth"; "security_settings_require_screen_on_to_auth";
private static final String KEY_FINGERPRINTS_ENROLLED_CATEGORY = private static final String KEY_FINGERPRINTS_ENROLLED_CATEGORY =
"security_settings_fingerprints_enrolled"; "security_settings_fingerprints_enrolled";
@@ -536,10 +537,6 @@ public class FingerprintSettings extends SubSettings {
private void addFingerprintPreferences(PreferenceGroup root) { private void addFingerprintPreferences(PreferenceGroup root) {
final String fpPrefKey = addFingerprintItemPreferences(root); final String fpPrefKey = addFingerprintItemPreferences(root);
if (isSfps()) {
scrollToPreference(fpPrefKey);
addFingerprintUnlockCategory();
}
for (AbstractPreferenceController controller : mControllers) { for (AbstractPreferenceController controller : mControllers) {
if (controller instanceof FingerprintSettingsPreferenceController) { if (controller instanceof FingerprintSettingsPreferenceController) {
((FingerprintSettingsPreferenceController) controller).setUserId(mUserId); ((FingerprintSettingsPreferenceController) controller).setUserId(mUserId);
@@ -547,6 +544,14 @@ public class FingerprintSettings extends SubSettings {
((FingerprintUnlockCategoryController) controller).setUserId(mUserId); ((FingerprintUnlockCategoryController) controller).setUserId(mUserId);
} }
} }
// This needs to be after setting ids, otherwise
// |mRequireScreenOnToAuthPreferenceController.isChecked| is always checking the primary
// user instead of the user with |mUserId|.
if (isSfps()) {
scrollToPreference(fpPrefKey);
addFingerprintUnlockCategory();
}
createFooterPreference(root); createFooterPreference(root);
} }

View File

@@ -16,12 +16,14 @@
package com.android.settings.biometrics.fingerprint; package com.android.settings.biometrics.fingerprint;
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 com.android.settings.biometrics.fingerprint.FingerprintSettings.FingerprintSettingsFragment; import static com.android.settings.biometrics.fingerprint.FingerprintSettings.FingerprintSettingsFragment;
import static com.android.settings.biometrics.fingerprint.FingerprintSettings.FingerprintSettingsFragment.ADD_FINGERPRINT_REQUEST; import static com.android.settings.biometrics.fingerprint.FingerprintSettings.FingerprintSettingsFragment.ADD_FINGERPRINT_REQUEST;
import static com.android.settings.biometrics.fingerprint.FingerprintSettings.FingerprintSettingsFragment.CHOOSE_LOCK_GENERIC_REQUEST; import static com.android.settings.biometrics.fingerprint.FingerprintSettings.FingerprintSettingsFragment.CHOOSE_LOCK_GENERIC_REQUEST;
import static com.android.settings.biometrics.fingerprint.FingerprintSettings.FingerprintSettingsFragment.KEY_FINGERPRINT_ADD; import static com.android.settings.biometrics.fingerprint.FingerprintSettings.FingerprintSettingsFragment.KEY_FINGERPRINT_ADD;
import static com.android.settings.biometrics.fingerprint.FingerprintSettings.FingerprintSettingsFragment.KEY_REQUIRE_SCREEN_ON_TO_AUTH;
import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertThat;
@@ -39,12 +41,16 @@ import static org.mockito.Mockito.verify;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.pm.UserInfo;
import android.hardware.biometrics.ComponentInfoInternal; import android.hardware.biometrics.ComponentInfoInternal;
import android.hardware.biometrics.SensorProperties; import android.hardware.biometrics.SensorProperties;
import android.hardware.fingerprint.FingerprintManager; import android.hardware.fingerprint.FingerprintManager;
import android.hardware.fingerprint.FingerprintSensorProperties;
import android.hardware.fingerprint.FingerprintSensorPropertiesInternal; import android.hardware.fingerprint.FingerprintSensorPropertiesInternal;
import android.os.Bundle; import android.os.Bundle;
import android.os.CancellationSignal; import android.os.CancellationSignal;
import android.os.UserHandle;
import android.provider.Settings;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.ViewGroup; import android.view.ViewGroup;
@@ -62,6 +68,7 @@ import com.android.settings.testutils.shadow.ShadowLockPatternUtils;
import com.android.settings.testutils.shadow.ShadowSettingsPreferenceFragment; import com.android.settings.testutils.shadow.ShadowSettingsPreferenceFragment;
import com.android.settings.testutils.shadow.ShadowUserManager; import com.android.settings.testutils.shadow.ShadowUserManager;
import com.android.settings.testutils.shadow.ShadowUtils; import com.android.settings.testutils.shadow.ShadowUtils;
import com.android.settingslib.RestrictedSwitchPreference;
import org.junit.After; import org.junit.After;
import org.junit.Before; import org.junit.Before;
@@ -83,6 +90,9 @@ import java.util.ArrayList;
@Config(shadows = {ShadowSettingsPreferenceFragment.class, ShadowUtils.class, ShadowFragment.class, @Config(shadows = {ShadowSettingsPreferenceFragment.class, ShadowUtils.class, ShadowFragment.class,
ShadowUserManager.class, ShadowLockPatternUtils.class}) ShadowUserManager.class, ShadowLockPatternUtils.class})
public class FingerprintSettingsFragmentTest { public class FingerprintSettingsFragmentTest {
private static final int PRIMARY_USER_ID = 0;
private static final int GUEST_USER_ID = 10;
private FingerprintSettingsFragment mFragment; private FingerprintSettingsFragment mFragment;
private Context mContext; private Context mContext;
private FragmentActivity mActivity; private FragmentActivity mActivity;
@@ -106,9 +116,14 @@ public class FingerprintSettingsFragmentTest {
@Before @Before
public void setUp() { public void setUp() {
doReturn(true).when(mFingerprintManager).isHardwareDetected();
ShadowUtils.setFingerprintManager(mFingerprintManager); ShadowUtils.setFingerprintManager(mFingerprintManager);
FakeFeatureFactory.setupForTest(); FakeFeatureFactory.setupForTest();
mContext = spy(ApplicationProvider.getApplicationContext());
mFragment = spy(new FingerprintSettingsFragment());
doReturn(mContext).when(mFragment).getContext();
doReturn(true).when(mFingerprintManager).isHardwareDetected();
} }
@After @After
@@ -186,19 +201,43 @@ public class FingerprintSettingsFragmentTest {
assertThat(mFingerprintAuthenticateSidecar.isCancelled()).isTrue(); assertThat(mFingerprintAuthenticateSidecar.isCancelled()).isTrue();
} }
@Test
public void testGuestUserRequireScreenOnToAuth() {
Settings.Secure.putIntForUser(
mContext.getContentResolver(),
Settings.Secure.SFPS_PERFORMANT_AUTH_ENABLED,
0,
UserHandle.of(PRIMARY_USER_ID).getIdentifier());
Settings.Secure.putIntForUser(
mContext.getContentResolver(),
Settings.Secure.SFPS_PERFORMANT_AUTH_ENABLED,
1,
UserHandle.of(GUEST_USER_ID).getIdentifier());
setUpFragment(false, GUEST_USER_ID, TYPE_POWER_BUTTON);
final RestrictedSwitchPreference requireScreenOnToAuthPreference = mFragment.findPreference(
KEY_REQUIRE_SCREEN_ON_TO_AUTH);
assertThat(requireScreenOnToAuthPreference.isChecked()).isTrue();
}
private void setUpFragment(boolean showChooseLock) { private void setUpFragment(boolean showChooseLock) {
setUpFragment(showChooseLock, PRIMARY_USER_ID, TYPE_UDFPS_OPTICAL);
}
private void setUpFragment(boolean showChooseLock, int userId,
@FingerprintSensorProperties.SensorType int sensorType) {
ShadowUserManager.getShadow().addProfile(new UserInfo(userId, "", 0));
Intent intent = new Intent(); Intent intent = new Intent();
if (!showChooseLock) { if (!showChooseLock) {
intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN, new byte[0]); intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN, new byte[0]);
intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_GK_PW_HANDLE, 1L); intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_GK_PW_HANDLE, 1L);
} }
intent.putExtra(Intent.EXTRA_USER_ID, userId);
mActivity = spy(Robolectric.buildActivity(FragmentActivity.class, intent).get()); mActivity = spy(Robolectric.buildActivity(FragmentActivity.class, intent).get());
mContext = spy(ApplicationProvider.getApplicationContext());
mFragment = spy(new FingerprintSettingsFragment());
doReturn(mActivity).when(mFragment).getActivity(); doReturn(mActivity).when(mFragment).getActivity();
doReturn(mContext).when(mFragment).getContext();
FragmentManager fragmentManager = mock(FragmentManager.class); FragmentManager fragmentManager = mock(FragmentManager.class);
doReturn(mFragmentTransaction).when(fragmentManager).beginTransaction(); doReturn(mFragmentTransaction).when(fragmentManager).beginTransaction();
@@ -212,7 +251,7 @@ public class FingerprintSettingsFragmentTest {
doNothing().when(mFragment).startActivityForResult(any(Intent.class), anyInt()); doNothing().when(mFragment).startActivityForResult(any(Intent.class), anyInt());
setSensor(); setSensor(sensorType);
// Start fragment // Start fragment
mFragment.onAttach(mContext); mFragment.onAttach(mContext);
@@ -221,14 +260,14 @@ public class FingerprintSettingsFragmentTest {
mFragment.onResume(); mFragment.onResume();
} }
private void setSensor() { private void setSensor(@FingerprintSensorProperties.SensorType int sensorType) {
final ArrayList<FingerprintSensorPropertiesInternal> props = new ArrayList<>(); final ArrayList<FingerprintSensorPropertiesInternal> props = new ArrayList<>();
props.add(new FingerprintSensorPropertiesInternal( props.add(new FingerprintSensorPropertiesInternal(
0 /* sensorId */, 0 /* sensorId */,
SensorProperties.STRENGTH_STRONG, SensorProperties.STRENGTH_STRONG,
1 /* maxEnrollmentsPerUser */, 1 /* maxEnrollmentsPerUser */,
new ArrayList<ComponentInfoInternal>(), new ArrayList<ComponentInfoInternal>(),
TYPE_UDFPS_OPTICAL, sensorType,
true /* resetLockoutRequiresHardwareAuthToken */)); true /* resetLockoutRequiresHardwareAuthToken */));
doReturn(props).when(mFingerprintManager).getSensorPropertiesInternal(); doReturn(props).when(mFingerprintManager).getSensorPropertiesInternal();
} }