From 9dbad57a84035642a6c174158352a2e03f88f522 Mon Sep 17 00:00:00 2001 From: Makoto Onuki Date: Wed, 17 Feb 2016 11:15:04 -0800 Subject: [PATCH] [Settings] Don't allow apps on external storage to be active admin Bug 27149287 Change-Id: I7e0905228812fbc326cf4ac4984e7f59003996a8 --- res/values/strings.xml | 2 ++ src/com/android/settings/DeviceAdminSettings.java | 5 +++++ .../settings/deviceinfo/StorageWizardMoveProgress.java | 2 ++ 3 files changed, 9 insertions(+) diff --git a/res/values/strings.xml b/res/values/strings.xml index 84d36328e95..aa82cfe7b81 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -3389,6 +3389,8 @@ App is copy-protected. Install location isn\u2019t valid. System updates can\u2019t be installed on external media. + + Device Administrator can\u2019t be installed on external media. Force stop? diff --git a/src/com/android/settings/DeviceAdminSettings.java b/src/com/android/settings/DeviceAdminSettings.java index 9791160b575..3adce15b9bd 100644 --- a/src/com/android/settings/DeviceAdminSettings.java +++ b/src/com/android/settings/DeviceAdminSettings.java @@ -359,6 +359,9 @@ public class DeviceAdminSettings extends ListFragment { DeviceAdminInfo deviceAdminInfo = createDeviceAdminInfo(resolveInfo); // add only visible ones (note: active admins are added regardless of visibility) if (deviceAdminInfo != null && deviceAdminInfo.isVisible()) { + if (!deviceAdminInfo.getActivityInfo().applicationInfo.isInternal()) { + continue; + } DeviceAdminListItem item = new DeviceAdminListItem(); item.info = deviceAdminInfo; item.name = deviceAdminInfo.loadLabel(pm).toString(); @@ -391,6 +394,8 @@ public class DeviceAdminSettings extends ListFragment { for (int j = 0; j < resolvedMax; ++j) { DeviceAdminInfo deviceAdminInfo = createDeviceAdminInfo(resolved.get(j)); if (deviceAdminInfo != null) { + // Don't do the applicationInfo.isInternal() check here; if an active + // admin is already on SD card, just show it. DeviceAdminListItem item = new DeviceAdminListItem(); item.info = deviceAdminInfo; item.name = deviceAdminInfo.loadLabel(packageManager).toString(); diff --git a/src/com/android/settings/deviceinfo/StorageWizardMoveProgress.java b/src/com/android/settings/deviceinfo/StorageWizardMoveProgress.java index fffdf74d953..69247f6e682 100644 --- a/src/com/android/settings/deviceinfo/StorageWizardMoveProgress.java +++ b/src/com/android/settings/deviceinfo/StorageWizardMoveProgress.java @@ -86,6 +86,8 @@ public class StorageWizardMoveProgress extends StorageWizardBase { switch (returnCode) { case PackageManager.MOVE_FAILED_INSUFFICIENT_STORAGE: return getString(R.string.insufficient_storage); + case PackageManager.MOVE_FAILED_DEVICE_ADMIN: + return getString(R.string.move_error_device_admin); case PackageManager.MOVE_FAILED_DOESNT_EXIST: return getString(R.string.does_not_exist); case PackageManager.MOVE_FAILED_FORWARD_LOCKED: