summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Todd Kennedy <toddke@google.com> 2016-11-22 14:07:45 -0800
committer Todd Kennedy <toddke@google.com> 2016-11-22 14:07:45 -0800
commit08a04878b0d6ed4c661330751ac253c0b18ef537 (patch)
tree3a8bef5c962a71d37fee04374bfa86bc6fd69566
parent078f538eb233a3581dc66737649d8a67e72e6468 (diff)
Require INSTALL_PACKAGES permission
Although it's not technically necessary for the ephemeral installer to hold the INSTALL_PACKAGES permission, it leads to a pretty poor experience -- the user has to confirm ephemeral installation -- which is a primary reason for ephemeral apps. Change-Id: Ic3f947d677964521cd4742f66c1c3fe808c4c55a Fixes: 33073519 Test: manual; installed packages w/ and w/o INSTALL_PACKAGES and only the apps with INSTALL_PACKAGES were made the installer
-rw-r--r--services/core/java/com/android/server/pm/PackageManagerService.java12
1 files changed, 12 insertions, 0 deletions
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java
index ee3f42b7808e..c1f755be9ee3 100644
--- a/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -2925,6 +2925,18 @@ public class PackageManagerService extends IPackageManager.Stub {
| (!Build.IS_DEBUGGABLE ? MATCH_SYSTEM_ONLY : 0);
final List<ResolveInfo> matches = queryIntentActivitiesInternal(intent, PACKAGE_MIME_TYPE,
resolveFlags, UserHandle.USER_SYSTEM);
+ Iterator<ResolveInfo> iter = matches.iterator();
+ while (iter.hasNext()) {
+ final ResolveInfo rInfo = iter.next();
+ final PackageSetting ps = mSettings.mPackages.get(rInfo.activityInfo.packageName);
+ if (ps != null) {
+ final PermissionsState permissionsState = ps.getPermissionsState();
+ if (permissionsState.hasPermission(Manifest.permission.INSTALL_PACKAGES, 0)) {
+ continue;
+ }
+ }
+ iter.remove();
+ }
if (matches.size() == 0) {
return null;
} else if (matches.size() == 1) {