From 140f6c6cf705f020c0ee6a2843cf1691cc68e729 Mon Sep 17 00:00:00 2001 From: Dianne Hackborn Date: Sun, 16 Oct 2011 11:49:00 -0700 Subject: [PATCH] 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 --- AndroidManifest.xml | 1 + src/com/android/settings/CryptKeeper.java | 15 ++++++++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 15bb8784088..1da79f88073 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -1155,6 +1155,7 @@ diff --git a/src/com/android/settings/CryptKeeper.java b/src/com/android/settings/CryptKeeper.java index 8968de4d496..d58dddb93fd 100644 --- a/src/com/android/settings/CryptKeeper.java +++ b/src/com/android/settings/CryptKeeper.java @@ -221,7 +221,20 @@ public class CryptKeeper extends Activity implements TextView.OnEditorActionList // 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; }