diff --git a/res/values/strings.xml b/res/values/strings.xml index 77c4e412eeb..f8198a9e1a9 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -10683,13 +10683,11 @@ @string/game_driver_app_preference_default @string/game_driver_app_preference_game_driver - @string/game_driver_app_preference_prerelease_driver @string/game_driver_app_preference_default @string/game_driver_app_preference_game_driver - @string/game_driver_app_preference_prerelease_driver @string/game_driver_app_preference_system diff --git a/res/xml/display_settings.xml b/res/xml/display_settings.xml index 54b43dca556..c45e6a2ae10 100644 --- a/res/xml/display_settings.xml +++ b/res/xml/display_settings.xml @@ -119,12 +119,11 @@ android:fragment="com.android.settings.dream.DreamSettings" settings:searchable="false" /> - + settings:controller="com.android.settings.security.screenlock.LockScreenPreferenceController" /> - + settings:controller="com.android.settings.display.AmbientDisplayAlwaysOnPreferenceController" + settings:userRestriction="no_ambient_display" /> { mClientCallback.onAuthenticationError(error, message); }); @@ -71,6 +73,7 @@ public class BiometricFragment extends InstrumentedFragment { @Override public void onAuthenticationSucceeded(AuthenticationResult result) { + mAuthenticating = false; mClientExecutor.execute(() -> { mClientCallback.onAuthenticationSucceeded(result); }); @@ -134,6 +137,10 @@ public class BiometricFragment extends InstrumentedFragment { } } + boolean isAuthenticating() { + return mAuthenticating; + } + @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -180,6 +187,7 @@ public class BiometricFragment extends InstrumentedFragment { mCancellationSignal = new CancellationSignal(); // TODO: CC doesn't use crypto for now + mAuthenticating = true; mBiometricPrompt.authenticateUser(mCancellationSignal, mClientExecutor, mAuthenticationCallback, mUserId, mCancelCallback); } diff --git a/src/com/android/settings/password/ChooseLockSettingsHelper.java b/src/com/android/settings/password/ChooseLockSettingsHelper.java index 28ded2d8bf9..3353d62053f 100644 --- a/src/com/android/settings/password/ChooseLockSettingsHelper.java +++ b/src/com/android/settings/password/ChooseLockSettingsHelper.java @@ -47,6 +47,7 @@ public final class ChooseLockSettingsHelper { public static final String EXTRA_KEY_FOR_FINGERPRINT = "for_fingerprint"; public static final String EXTRA_KEY_FOR_FACE = "for_face"; public static final String EXTRA_KEY_FOR_CHANGE_CRED_REQUIRED_FOR_BOOT = "for_cred_req_boot"; + public static final String EXTRA_KEY_FOREGROUND_ONLY = "foreground_only"; /** * Intent extra for passing the requested min password complexity to later steps in the set new @@ -105,7 +106,8 @@ public final class ChooseLockSettingsHelper { null /* header */, null /* description */, false /* returnCredentials */, - false /* external */); + false /* external */, + false /* foregroundOnly */); } /** @@ -124,7 +126,8 @@ public final class ChooseLockSettingsHelper { null /* header */, null /* description */, returnCredentials /* returnCredentials */, - false /* external */); + false /* external */, + false /* foregroundOnly */); } /** @@ -148,7 +151,8 @@ public final class ChooseLockSettingsHelper { false /* external */, false /* hasChallenge */, 0 /* challenge */, - Utils.enforceSameOwner(mActivity, userId) /* userId */); + Utils.enforceSameOwner(mActivity, userId) /* userId */, + false /* foregroundOnly */); } /** @@ -162,12 +166,13 @@ public final class ChooseLockSettingsHelper { * @param external specifies whether this activity is launched externally, meaning that it will * get a dark theme, allow fingerprint authentication and it will forward * activity result. + * @param foregroundOnly if the confirmation activity should be finished if it loses foreground. * @return true if one exists and we launched an activity to confirm it * @see Activity#onActivityResult(int, int, android.content.Intent) */ boolean launchConfirmationActivity(int request, @Nullable CharSequence title, @Nullable CharSequence header, @Nullable CharSequence description, - boolean returnCredentials, boolean external) { + boolean returnCredentials, boolean external, boolean foregroundOnly) { return launchConfirmationActivity( request /* request */, title /* title */, @@ -177,7 +182,8 @@ public final class ChooseLockSettingsHelper { external /* external */, false /* hasChallenge */, 0 /* challenge */, - Utils.getCredentialOwnerUserId(mActivity) /* userId */); + Utils.getCredentialOwnerUserId(mActivity) /* userId */, + foregroundOnly /* foregroundOnly */); } /** @@ -207,7 +213,8 @@ public final class ChooseLockSettingsHelper { external /* external */, false /* hasChallenge */, 0 /* challenge */, - Utils.enforceSameOwner(mActivity, userId) /* userId */); + Utils.enforceSameOwner(mActivity, userId) /* userId */, + false /* foregroundOnly */); } /** @@ -217,12 +224,13 @@ public final class ChooseLockSettingsHelper { * @param header header of the confirmation screen; shown as large text * @param description description of the confirmation screen * @param challenge a challenge to be verified against the device credential. + * @param foregroundOnly if the confirmation activity should be finished if it loses foreground. * @return true if one exists and we launched an activity to confirm it * @see Activity#onActivityResult(int, int, android.content.Intent) */ public boolean launchConfirmationActivity(int request, @Nullable CharSequence title, @Nullable CharSequence header, @Nullable CharSequence description, - long challenge) { + long challenge, boolean foregroundOnly) { return launchConfirmationActivity( request /* request */, title /* title */, @@ -232,7 +240,8 @@ public final class ChooseLockSettingsHelper { false /* external */, true /* hasChallenge */, challenge /* challenge */, - Utils.getCredentialOwnerUserId(mActivity) /* userId */); + Utils.getCredentialOwnerUserId(mActivity) /* userId */, + foregroundOnly /* foregroundOnly */); } /** @@ -243,12 +252,13 @@ public final class ChooseLockSettingsHelper { * @param description description of the confirmation screen * @param challenge a challenge to be verified against the device credential. * @param userId The userId for whom the lock should be confirmed. + * @param foregroundOnly if the confirmation activity should be finished if it loses foreground. * @return true if one exists and we launched an activity to confirm it * @see Activity#onActivityResult(int, int, android.content.Intent) */ public boolean launchConfirmationActivity(int request, @Nullable CharSequence title, @Nullable CharSequence header, @Nullable CharSequence description, - long challenge, int userId) { + long challenge, int userId, boolean foregroundOnly) { return launchConfirmationActivity( request /* request */, title /* title */, @@ -258,7 +268,8 @@ public final class ChooseLockSettingsHelper { false /* external */, true /* hasChallenge */, challenge /* challenge */, - Utils.enforceSameOwner(mActivity, userId) /* userId */); + Utils.enforceSameOwner(mActivity, userId) /* userId */, + foregroundOnly); } /** @@ -287,7 +298,8 @@ public final class ChooseLockSettingsHelper { external /* external */, true /* hasChallenge */, challenge /* challenge */, - Utils.enforceSameOwner(mActivity, userId) /* userId */); + Utils.enforceSameOwner(mActivity, userId) /* userId */, + false /* foregroundOnly */); } /** @@ -316,7 +328,7 @@ public final class ChooseLockSettingsHelper { private boolean launchConfirmationActivity(int request, @Nullable CharSequence title, @Nullable CharSequence header, @Nullable CharSequence description, boolean returnCredentials, boolean external, boolean hasChallenge, - long challenge, int userId) { + long challenge, int userId, boolean foregroundOnly) { return launchConfirmationActivity( request /* request */, title /* title */, @@ -328,7 +340,8 @@ public final class ChooseLockSettingsHelper { challenge /* challenge */, userId /* userId */, null /* alternateButton */, - null /* extras */); + null /* extras */, + foregroundOnly /* foregroundOnly */); } private boolean launchConfirmationActivity(int request, @Nullable CharSequence title, @@ -346,7 +359,8 @@ public final class ChooseLockSettingsHelper { challenge /* challenge */, userId /* userId */, null /* alternateButton */, - extras /* extras */); + extras /* extras */, + false /* foregroundOnly */); } public boolean launchFrpConfirmationActivity(int request, @Nullable CharSequence header, @@ -362,13 +376,15 @@ public final class ChooseLockSettingsHelper { 0 /* challenge */, LockPatternUtils.USER_FRP /* userId */, alternateButton /* alternateButton */, - null /* extras */); + null /* extras */, + false /* foregroundOnly */); } private boolean launchConfirmationActivity(int request, @Nullable CharSequence title, @Nullable CharSequence header, @Nullable CharSequence description, boolean returnCredentials, boolean external, boolean hasChallenge, - long challenge, int userId, @Nullable CharSequence alternateButton, Bundle extras) { + long challenge, int userId, @Nullable CharSequence alternateButton, Bundle extras, + boolean foregroundOnly) { final int effectiveUserId = UserManager.get(mActivity).getCredentialOwnerProfile(userId); boolean launched = false; @@ -378,7 +394,8 @@ public final class ChooseLockSettingsHelper { returnCredentials || hasChallenge ? ConfirmLockPattern.InternalActivity.class : ConfirmLockPattern.class, returnCredentials, external, - hasChallenge, challenge, userId, alternateButton, extras); + hasChallenge, challenge, userId, alternateButton, extras, + foregroundOnly); break; case DevicePolicyManager.PASSWORD_QUALITY_NUMERIC: case DevicePolicyManager.PASSWORD_QUALITY_NUMERIC_COMPLEX: @@ -390,7 +407,8 @@ public final class ChooseLockSettingsHelper { returnCredentials || hasChallenge ? ConfirmLockPassword.InternalActivity.class : ConfirmLockPassword.class, returnCredentials, external, - hasChallenge, challenge, userId, alternateButton, extras); + hasChallenge, challenge, userId, alternateButton, extras, + foregroundOnly); break; } return launched; @@ -399,7 +417,8 @@ public final class ChooseLockSettingsHelper { private boolean launchConfirmationActivity(int request, CharSequence title, CharSequence header, CharSequence message, Class activityClass, boolean returnCredentials, boolean external, boolean hasChallenge, long challenge, - int userId, @Nullable CharSequence alternateButton, Bundle extras) { + int userId, @Nullable CharSequence alternateButton, Bundle extras, + boolean foregroundOnly) { final Intent intent = new Intent(); intent.putExtra(ConfirmDeviceCredentialBaseFragment.TITLE_TEXT, title); intent.putExtra(ConfirmDeviceCredentialBaseFragment.HEADER_TEXT, header); @@ -414,6 +433,7 @@ public final class ChooseLockSettingsHelper { intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE, challenge); intent.putExtra(Intent.EXTRA_USER_ID, userId); intent.putExtra(KeyguardManager.EXTRA_ALTERNATE_BUTTON_LABEL, alternateButton); + intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_FOREGROUND_ONLY, foregroundOnly); if (extras != null) { intent.putExtras(extras); } diff --git a/src/com/android/settings/password/ConfirmDeviceCredentialActivity.java b/src/com/android/settings/password/ConfirmDeviceCredentialActivity.java index 53841e89beb..8476f924291 100644 --- a/src/com/android/settings/password/ConfirmDeviceCredentialActivity.java +++ b/src/com/android/settings/password/ConfirmDeviceCredentialActivity.java @@ -251,7 +251,10 @@ public class ConfirmDeviceCredentialActivity extends FragmentActivity { if (!isChangingConfigurations()) { mGoingToBackground = true; if (mBiometricFragment != null) { - mBiometricFragment.cancel(); + Log.d(TAG, "Authenticating: " + mBiometricFragment.isAuthenticating()); + if (mBiometricFragment.isAuthenticating()) { + mBiometricFragment.cancel(); + } } if (mIsFallback && !mCCLaunched) { diff --git a/src/com/android/settings/password/ConfirmDeviceCredentialBaseActivity.java b/src/com/android/settings/password/ConfirmDeviceCredentialBaseActivity.java index 998b3fcdd18..5407776f3b1 100644 --- a/src/com/android/settings/password/ConfirmDeviceCredentialBaseActivity.java +++ b/src/com/android/settings/password/ConfirmDeviceCredentialBaseActivity.java @@ -172,6 +172,10 @@ public abstract class ConfirmDeviceCredentialBaseActivity extends SettingsActivi mBiometricManager.onConfirmDeviceCredentialError( BiometricConstants.BIOMETRIC_ERROR_USER_CANCELED, getString(com.android.internal.R.string.biometric_error_user_canceled)); + if (getIntent().getBooleanExtra( + ChooseLockSettingsHelper.EXTRA_KEY_FOREGROUND_ONLY, false)) { + finish(); + } } } diff --git a/tests/robotests/src/com/android/settings/development/gamedriver/GameDriverAppPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/gamedriver/GameDriverAppPreferenceControllerTest.java index f007ce257a2..dd5af2b6045 100644 --- a/tests/robotests/src/com/android/settings/development/gamedriver/GameDriverAppPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/development/gamedriver/GameDriverAppPreferenceControllerTest.java @@ -56,8 +56,7 @@ public class GameDriverAppPreferenceControllerTest { private static final int DEFAULT = 0; private static final int GAME_DRIVER = 1; - private static final int PRERELEASE_DRIVER = 2; - private static final int SYSTEM = 3; + private static final int SYSTEM = 2; private static final String TEST_APP_NAME = "testApp"; private static final String TEST_PKG_NAME = "testPkg"; @@ -80,6 +79,7 @@ public class GameDriverAppPreferenceControllerTest { private GameDriverAppPreferenceController mController; private CharSequence[] mValueList; private String mDialogTitle; + private String mPreferencePrereleaseDriver; @Before public void setUp() { @@ -89,6 +89,8 @@ public class GameDriverAppPreferenceControllerTest { mValueList = mContext.getResources().getStringArray(R.array.game_driver_app_preference_values); mDialogTitle = mContext.getResources().getString(R.string.game_driver_app_preference_title); + mPreferencePrereleaseDriver = + mContext.getResources().getString(R.string.game_driver_app_preference_prerelease_driver); } @Test @@ -207,9 +209,7 @@ public class GameDriverAppPreferenceControllerTest { assertThat(preference.getDialogTitle()).isEqualTo(mDialogTitle); assertThat(preference.getEntries()).isEqualTo(mValueList); assertThat(preference.getEntryValues()).isEqualTo(mValueList); - assertThat(preference.getEntry()).isEqualTo(mValueList[PRERELEASE_DRIVER]); - assertThat(preference.getValue()).isEqualTo(mValueList[PRERELEASE_DRIVER]); - assertThat(preference.getSummary()).isEqualTo(mValueList[PRERELEASE_DRIVER]); + assertThat(preference.getSummary()).isEqualTo(mPreferencePrereleaseDriver); } @Test