Loading core/java/android/content/pm/IPackageManager.aidl +2 −0 Original line number Original line Diff line number Diff line Loading @@ -63,7 +63,9 @@ interface IPackageManager { boolean isPackageAvailable(String packageName, int userId); boolean isPackageAvailable(String packageName, int userId); PackageInfo getPackageInfo(String packageName, int flags, int userId); PackageInfo getPackageInfo(String packageName, int flags, int userId); int getPackageUid(String packageName, int userId); int getPackageUid(String packageName, int userId); int getPackageUidEtc(String packageName, int flags, int userId); int[] getPackageGids(String packageName, int userId); int[] getPackageGids(String packageName, int userId); int[] getPackageGidsEtc(String packageName, int flags, int userId); String[] currentToCanonicalPackageNames(in String[] names); String[] currentToCanonicalPackageNames(in String[] names); String[] canonicalToCurrentPackageNames(in String[] names); String[] canonicalToCurrentPackageNames(in String[] names); Loading services/core/java/com/android/server/AppOpsService.java +4 −5 Original line number Original line Diff line number Diff line Loading @@ -39,7 +39,6 @@ import android.content.Context; import android.content.pm.ApplicationInfo; import android.content.pm.ApplicationInfo; import android.content.pm.IPackageManager; import android.content.pm.IPackageManager; import android.content.pm.PackageManager; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.media.AudioAttributes; import android.media.AudioAttributes; import android.os.AsyncTask; import android.os.AsyncTask; import android.os.Binder; import android.os.Binder; Loading Loading @@ -263,12 +262,12 @@ public class AppOpsService extends IAppOpsService.Stub { Iterator<Ops> it = pkgs.values().iterator(); Iterator<Ops> it = pkgs.values().iterator(); while (it.hasNext()) { while (it.hasNext()) { Ops ops = it.next(); Ops ops = it.next(); int curUid; int curUid = -1; try { try { curUid = mContext.getPackageManager().getPackageUid(ops.packageName, curUid = AppGlobals.getPackageManager().getPackageUidEtc(ops.packageName, PackageManager.GET_UNINSTALLED_PACKAGES, UserHandle.getUserId(ops.uidState.uid)); UserHandle.getUserId(ops.uidState.uid)); } catch (NameNotFoundException e) { } catch (RemoteException ignored) { curUid = -1; } } if (curUid != ops.uidState.uid) { if (curUid != ops.uidState.uid) { Slog.i(TAG, "Pruning old package " + ops.packageName Slog.i(TAG, "Pruning old package " + ops.packageName Loading services/core/java/com/android/server/pm/PackageManagerService.java +27 −12 Original line number Original line Diff line number Diff line Loading @@ -2733,26 +2733,38 @@ public class PackageManagerService extends IPackageManager.Stub { @Override @Override public int getPackageUid(String packageName, int userId) { public int getPackageUid(String packageName, int userId) { return getPackageUidEtc(packageName, 0, userId); } @Override public int getPackageUidEtc(String packageName, int flags, int userId) { if (!sUserManager.exists(userId)) return -1; if (!sUserManager.exists(userId)) return -1; enforceCrossUserPermission(Binder.getCallingUid(), userId, false, false, "get package uid"); enforceCrossUserPermission(Binder.getCallingUid(), userId, false, false, "get package uid"); // reader // reader synchronized (mPackages) { synchronized (mPackages) { PackageParser.Package p = mPackages.get(packageName); final PackageParser.Package p = mPackages.get(packageName); if (p != null) { if (p != null) { return UserHandle.getUid(userId, p.applicationInfo.uid); return UserHandle.getUid(userId, p.applicationInfo.uid); } } PackageSetting ps = mSettings.mPackages.get(packageName); if ((flags & PackageManager.GET_UNINSTALLED_PACKAGES) != 0) { if((ps == null) || (ps.pkg == null) || (ps.pkg.applicationInfo == null)) { final PackageSetting ps = mSettings.mPackages.get(packageName); return -1; if (ps != null) { return UserHandle.getUid(userId, ps.appId); } } p = ps.pkg; return p != null ? UserHandle.getUid(userId, p.applicationInfo.uid) : -1; } } } } return -1; } @Override public int[] getPackageGids(String packageName, int userId) { return getPackageGidsEtc(packageName, 0, userId); } @Override @Override public int[] getPackageGids(String packageName, int userId) throws RemoteException { public int[] getPackageGidsEtc(String packageName, int flags, int userId) { if (!sUserManager.exists(userId)) { if (!sUserManager.exists(userId)) { return null; return null; } } Loading @@ -2762,14 +2774,17 @@ public class PackageManagerService extends IPackageManager.Stub { // reader // reader synchronized (mPackages) { synchronized (mPackages) { PackageParser.Package p = mPackages.get(packageName); final PackageParser.Package p = mPackages.get(packageName); if (DEBUG_PACKAGE_INFO) { Log.v(TAG, "getPackageGids" + packageName + ": " + p); } if (p != null) { if (p != null) { PackageSetting ps = (PackageSetting) p.mExtras; PackageSetting ps = (PackageSetting) p.mExtras; return ps.getPermissionsState().computeGids(userId); return ps.getPermissionsState().computeGids(userId); } } if ((flags & PackageManager.GET_UNINSTALLED_PACKAGES) != 0) { final PackageSetting ps = mSettings.mPackages.get(packageName); if (ps != null) { return ps.getPermissionsState().computeGids(userId); } } } } return null; return null; Loading Loading
core/java/android/content/pm/IPackageManager.aidl +2 −0 Original line number Original line Diff line number Diff line Loading @@ -63,7 +63,9 @@ interface IPackageManager { boolean isPackageAvailable(String packageName, int userId); boolean isPackageAvailable(String packageName, int userId); PackageInfo getPackageInfo(String packageName, int flags, int userId); PackageInfo getPackageInfo(String packageName, int flags, int userId); int getPackageUid(String packageName, int userId); int getPackageUid(String packageName, int userId); int getPackageUidEtc(String packageName, int flags, int userId); int[] getPackageGids(String packageName, int userId); int[] getPackageGids(String packageName, int userId); int[] getPackageGidsEtc(String packageName, int flags, int userId); String[] currentToCanonicalPackageNames(in String[] names); String[] currentToCanonicalPackageNames(in String[] names); String[] canonicalToCurrentPackageNames(in String[] names); String[] canonicalToCurrentPackageNames(in String[] names); Loading
services/core/java/com/android/server/AppOpsService.java +4 −5 Original line number Original line Diff line number Diff line Loading @@ -39,7 +39,6 @@ import android.content.Context; import android.content.pm.ApplicationInfo; import android.content.pm.ApplicationInfo; import android.content.pm.IPackageManager; import android.content.pm.IPackageManager; import android.content.pm.PackageManager; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.media.AudioAttributes; import android.media.AudioAttributes; import android.os.AsyncTask; import android.os.AsyncTask; import android.os.Binder; import android.os.Binder; Loading Loading @@ -263,12 +262,12 @@ public class AppOpsService extends IAppOpsService.Stub { Iterator<Ops> it = pkgs.values().iterator(); Iterator<Ops> it = pkgs.values().iterator(); while (it.hasNext()) { while (it.hasNext()) { Ops ops = it.next(); Ops ops = it.next(); int curUid; int curUid = -1; try { try { curUid = mContext.getPackageManager().getPackageUid(ops.packageName, curUid = AppGlobals.getPackageManager().getPackageUidEtc(ops.packageName, PackageManager.GET_UNINSTALLED_PACKAGES, UserHandle.getUserId(ops.uidState.uid)); UserHandle.getUserId(ops.uidState.uid)); } catch (NameNotFoundException e) { } catch (RemoteException ignored) { curUid = -1; } } if (curUid != ops.uidState.uid) { if (curUid != ops.uidState.uid) { Slog.i(TAG, "Pruning old package " + ops.packageName Slog.i(TAG, "Pruning old package " + ops.packageName Loading
services/core/java/com/android/server/pm/PackageManagerService.java +27 −12 Original line number Original line Diff line number Diff line Loading @@ -2733,26 +2733,38 @@ public class PackageManagerService extends IPackageManager.Stub { @Override @Override public int getPackageUid(String packageName, int userId) { public int getPackageUid(String packageName, int userId) { return getPackageUidEtc(packageName, 0, userId); } @Override public int getPackageUidEtc(String packageName, int flags, int userId) { if (!sUserManager.exists(userId)) return -1; if (!sUserManager.exists(userId)) return -1; enforceCrossUserPermission(Binder.getCallingUid(), userId, false, false, "get package uid"); enforceCrossUserPermission(Binder.getCallingUid(), userId, false, false, "get package uid"); // reader // reader synchronized (mPackages) { synchronized (mPackages) { PackageParser.Package p = mPackages.get(packageName); final PackageParser.Package p = mPackages.get(packageName); if (p != null) { if (p != null) { return UserHandle.getUid(userId, p.applicationInfo.uid); return UserHandle.getUid(userId, p.applicationInfo.uid); } } PackageSetting ps = mSettings.mPackages.get(packageName); if ((flags & PackageManager.GET_UNINSTALLED_PACKAGES) != 0) { if((ps == null) || (ps.pkg == null) || (ps.pkg.applicationInfo == null)) { final PackageSetting ps = mSettings.mPackages.get(packageName); return -1; if (ps != null) { return UserHandle.getUid(userId, ps.appId); } } p = ps.pkg; return p != null ? UserHandle.getUid(userId, p.applicationInfo.uid) : -1; } } } } return -1; } @Override public int[] getPackageGids(String packageName, int userId) { return getPackageGidsEtc(packageName, 0, userId); } @Override @Override public int[] getPackageGids(String packageName, int userId) throws RemoteException { public int[] getPackageGidsEtc(String packageName, int flags, int userId) { if (!sUserManager.exists(userId)) { if (!sUserManager.exists(userId)) { return null; return null; } } Loading @@ -2762,14 +2774,17 @@ public class PackageManagerService extends IPackageManager.Stub { // reader // reader synchronized (mPackages) { synchronized (mPackages) { PackageParser.Package p = mPackages.get(packageName); final PackageParser.Package p = mPackages.get(packageName); if (DEBUG_PACKAGE_INFO) { Log.v(TAG, "getPackageGids" + packageName + ": " + p); } if (p != null) { if (p != null) { PackageSetting ps = (PackageSetting) p.mExtras; PackageSetting ps = (PackageSetting) p.mExtras; return ps.getPermissionsState().computeGids(userId); return ps.getPermissionsState().computeGids(userId); } } if ((flags & PackageManager.GET_UNINSTALLED_PACKAGES) != 0) { final PackageSetting ps = mSettings.mPackages.get(packageName); if (ps != null) { return ps.getPermissionsState().computeGids(userId); } } } } return null; return null; Loading