Finish trampoline activity for ConfirmDeviceCredential immediately
Make sure to finish ConfirmDeviceCredentialActivity directly, and use
Intent.FLAG_ACTIVITY_FORWARD_RESULT, so we can't even end up in a
state where we have the trampoline activity but not the real activity.
Bug: 23849216
Change-Id: I7a5be5af74ca85c11df1f61a69c3fd5cf558e1fb
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index f199673..c0e1db8 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -1409,7 +1409,7 @@
<!-- Lock screen settings -->
<activity android:name="ConfirmDeviceCredentialActivity"
android:exported="true"
- android:theme="@style/Transparent">
+ android:theme="@android:style/Theme.NoDisplay">
<intent-filter android:priority="1">
<action android:name="android.app.action.CONFIRM_DEVICE_CREDENTIAL" />
<category android:name="android.intent.category.DEFAULT" />
diff --git a/src/com/android/settings/ChooseLockSettingsHelper.java b/src/com/android/settings/ChooseLockSettingsHelper.java
index 327e622..665bffe 100644
--- a/src/com/android/settings/ChooseLockSettingsHelper.java
+++ b/src/com/android/settings/ChooseLockSettingsHelper.java
@@ -158,10 +158,19 @@
intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_HAS_CHALLENGE, hasChallenge);
intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE, challenge);
intent.setClassName(ConfirmDeviceCredentialBaseFragment.PACKAGE, activityClass.getName());
- if (mFragment != null) {
- mFragment.startActivityForResult(intent, request);
+ if (external) {
+ intent.addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);
+ if (mFragment != null) {
+ mFragment.startActivity(intent);
+ } else {
+ mActivity.startActivity(intent);
+ }
} else {
- mActivity.startActivityForResult(intent, request);
+ if (mFragment != null) {
+ mFragment.startActivityForResult(intent, request);
+ } else {
+ mActivity.startActivityForResult(intent, request);
+ }
}
return true;
}
diff --git a/src/com/android/settings/ConfirmDeviceCredentialActivity.java b/src/com/android/settings/ConfirmDeviceCredentialActivity.java
index da39a0f..86935c3 100644
--- a/src/com/android/settings/ConfirmDeviceCredentialActivity.java
+++ b/src/com/android/settings/ConfirmDeviceCredentialActivity.java
@@ -58,23 +58,12 @@
String title = intent.getStringExtra(KeyguardManager.EXTRA_TITLE);
String details = intent.getStringExtra(KeyguardManager.EXTRA_DESCRIPTION);
- // Ignore rotates and ensure we only launch this once
- if (savedInstanceState == null) {
- ChooseLockSettingsHelper helper = new ChooseLockSettingsHelper(this);
- if (!helper.launchConfirmationActivity(0 /* request code */, null /* title */, title,
- details, false /* returnCredentials */, true /* isExternal */)) {
- Log.d(TAG, "No pattern, password or PIN set.");
- setResult(Activity.RESULT_OK);
- finish();
- }
+ ChooseLockSettingsHelper helper = new ChooseLockSettingsHelper(this);
+ if (!helper.launchConfirmationActivity(0 /* request code */, null /* title */, title,
+ details, false /* returnCredentials */, true /* isExternal */)) {
+ Log.d(TAG, "No pattern, password or PIN set.");
+ setResult(Activity.RESULT_OK);
}
- }
-
- @Override
- protected void onActivityResult(int requestCode, int resultCode, Intent data) {
- boolean credentialsConfirmed = (resultCode == Activity.RESULT_OK);
- Log.d(TAG, "Device credentials confirmed: " + credentialsConfirmed);
- setResult(credentialsConfirmed ? Activity.RESULT_OK : Activity.RESULT_CANCELED);
finish();
}
}