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;
         }