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