Fix issue #5460725: Crespo does not fully boot after a wipe
Add a hack to relaunch whatever was supposed to be launched
(presumably home) when CryptKeeper discovers it shouldn't be
running.
Change-Id: I1406b8d6e8d484ed1c169fa4908a9e05e8c7c2ad
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 15bb878..1da79f8 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -1155,6 +1155,7 @@
<activity android:name=".CryptKeeper"
android:immersive="true"
android:launchMode="singleTop"
+ android:excludeFromRecents="true"
android:theme="@android:style/Theme.Holo.NoActionBar"
android:configChanges="mcc|mnc|keyboard|keyboardHidden|uiMode"
android:windowSoftInputMode="stateVisible|adjustResize">
diff --git a/src/com/android/settings/CryptKeeper.java b/src/com/android/settings/CryptKeeper.java
index 8968de4..d58dddb 100644
--- a/src/com/android/settings/CryptKeeper.java
+++ b/src/com/android/settings/CryptKeeper.java
@@ -221,7 +221,20 @@
// Disable the crypt keeper.
PackageManager pm = getPackageManager();
ComponentName name = new ComponentName(this, CryptKeeper.class);
- pm.setComponentEnabledSetting(name, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, 0);
+ pm.setComponentEnabledSetting(name, PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
+ PackageManager.DONT_KILL_APP);
+ // Typically CryptKeeper is launched as the home app. We didn't
+ // want to be running, so need to finish this activity and re-launch
+ // its intent now that we are not in the way of doing what is really
+ // supposed to happen.
+ // NOTE: This is really grungy. I think it would be better for the
+ // activity manager to explicitly launch the crypt keeper instead of
+ // home in the situation where we need to decrypt the device
+ finish();
+ Intent intent = getIntent();
+ intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ intent.setComponent(null);
+ startActivity(intent);
return;
}