am c44d7c6b: Prohibit uninstall of the default (or only) home app
* commit 'c44d7c6be64be790878ddf1f21c0d9e91d238245':
Prohibit uninstall of the default (or only) home app
diff --git a/src/com/android/settings/applications/InstalledAppDetails.java b/src/com/android/settings/applications/InstalledAppDetails.java
index 1b3938c..cbb06a0 100644
--- a/src/com/android/settings/applications/InstalledAppDetails.java
+++ b/src/com/android/settings/applications/InstalledAppDetails.java
@@ -366,11 +366,28 @@
mUninstallButton.setText(R.string.uninstall_text);
}
}
- // If this is a device admin, it can't be uninstall or disabled.
+ // If this is a device admin, it can't be uninstalled or disabled.
// We do this here so the text of the button is still set correctly.
if (mDpm.packageHasActiveAdmins(mPackageInfo.packageName)) {
enabled = false;
}
+
+ // If this is the default (or only) home app, suppress uninstall (even if
+ // we still think it should be allowed for other reasons)
+ if (enabled && mHomePackages.contains(mPackageInfo.packageName)) {
+ ArrayList<ResolveInfo> homeActivities = new ArrayList<ResolveInfo>();
+ ComponentName currentDefaultHome = mPm.getHomeActivities(homeActivities);
+ if (currentDefaultHome == null) {
+ // No preferred default, so permit uninstall only when
+ // there is more than one candidate
+ enabled = (mHomePackages.size() > 1);
+ } else {
+ // There is an explicit default home app -- forbid uninstall of
+ // that one, but permit it for installed-but-inactive ones.
+ enabled = !mPackageInfo.packageName.equals(currentDefaultHome.getPackageName());
+ }
+ }
+
mUninstallButton.setEnabled(enabled);
if (enabled) {
// Register listener