Loading services/core/java/com/android/server/pm/InstantAppRegistry.java +7 −2 Original line number Diff line number Diff line Loading @@ -52,6 +52,7 @@ import com.android.internal.util.ArrayUtils; import com.android.internal.util.XmlUtils; import com.android.server.pm.parsing.PackageInfoUtils; import com.android.server.pm.parsing.pkg.AndroidPackage; import com.android.server.pm.permission.PermissionManagerServiceInternal; import libcore.io.IoUtils; import libcore.util.HexEncoding; Loading Loading @@ -112,6 +113,7 @@ class InstantAppRegistry { private static final String ATTR_GRANTED = "granted"; private final PackageManagerService mService; private final PermissionManagerServiceInternal mPermissionManager; private final CookiePersistence mCookiePersistence; /** State for uninstalled instant apps */ Loading @@ -131,8 +133,10 @@ class InstantAppRegistry { @GuardedBy("mService.mLock") private SparseArray<SparseBooleanArray> mInstalledInstantAppUids; public InstantAppRegistry(PackageManagerService service) { public InstantAppRegistry(PackageManagerService service, PermissionManagerServiceInternal permissionManager) { mService = service; mPermissionManager = permissionManager; mCookiePersistence = new CookiePersistence(BackgroundThread.getHandler().getLooper()); } Loading Loading @@ -861,7 +865,8 @@ class InstantAppRegistry { String[] requestedPermissions = new String[pkg.getRequestedPermissions().size()]; pkg.getRequestedPermissions().toArray(requestedPermissions); Set<String> permissions = ps.getPermissionsState().getPermissions(userId); Set<String> permissions = mPermissionManager.getGrantedPermissions( pkg.getPackageName(), userId); String[] grantedPermissions = new String[permissions.size()]; permissions.toArray(grantedPermissions); Loading services/core/java/com/android/server/pm/PackageManagerService.java +7 −20 Original line number Diff line number Diff line Loading @@ -2970,7 +2970,7 @@ public class PackageManagerService extends IPackageManager.Stub mHandler = new PackageHandler(mHandlerThread.getLooper()); mProcessLoggingHandler = new ProcessLoggingHandler(); Watchdog.getInstance().addThread(mHandler, WATCHDOG_TIMEOUT); mInstantAppRegistry = new InstantAppRegistry(this); mInstantAppRegistry = new InstantAppRegistry(this, mPermissionManager); ArrayMap<String, SystemConfig.SharedLibraryEntry> libConfig = systemConfig.getSharedLibraries(); Loading Loading @@ -4385,14 +4385,13 @@ public class PackageManagerService extends IPackageManager.Stub final PackageUserState state = ps.readUserState(userId); AndroidPackage p = ps.pkg; if (p != null) { final PermissionsState permissionsState = ps.getPermissionsState(); // Compute GIDs only if requested final int[] gids = (flags & PackageManager.GET_GIDS) == 0 ? EMPTY_INT_ARRAY : permissionsState.computeGids(userId); ? EMPTY_INT_ARRAY : mPermissionManager.getPackageGids(ps.name, userId); // Compute granted permissions only if package has requested permissions final Set<String> permissions = ArrayUtils.isEmpty(p.getRequestedPermissions()) ? Collections.emptySet() : permissionsState.getPermissions(userId); ? Collections.emptySet() : mPermissionManager.getGrantedPermissions(ps.name, userId); PackageInfo packageInfo = PackageInfoUtils.generate(p, gids, flags, ps.firstInstallTime, ps.lastUpdateTime, permissions, state, userId, ps); Loading Loading @@ -4863,13 +4862,13 @@ public class PackageManagerService extends IPackageManager.Stub } // TODO: Shouldn't this be checking for package installed state for userId and // return null? return ps.getPermissionsState().computeGids(userId); return mPermissionManager.getPackageGids(packageName, userId); } if ((flags & MATCH_KNOWN_PACKAGES) != 0) { final PackageSetting ps = mSettings.mPackages.get(packageName); if (ps != null && ps.isMatch(flags) && !shouldFilterApplicationLocked(ps, callingUid, userId)) { return ps.getPermissionsState().computeGids(userId); return mPermissionManager.getPackageGids(packageName, userId); } } } Loading Loading @@ -24948,9 +24947,7 @@ public class PackageManagerService extends IPackageManager.Stub @Override public int[] getPermissionGids(String permissionName, int userId) { synchronized (mLock) { return getPermissionGidsLocked(permissionName, userId); } return mPermissionManager.getPermissionGids(permissionName, userId); } @Override Loading Loading @@ -25271,16 +25268,6 @@ public class PackageManagerService extends IPackageManager.Stub return null; } @GuardedBy("mLock") public int[] getPermissionGidsLocked(String permissionName, int userId) { BasePermission perm = mPermissionManager.getPermissionSettings().getPermission(permissionName); if (perm != null) { return perm.computeGids(userId); } return null; } @Override public int getRuntimePermissionsVersion(@UserIdInt int userId) { Preconditions.checkArgumentNonnegative(userId); services/core/java/com/android/server/pm/permission/PermissionManagerService.java +46 −0 Original line number Diff line number Diff line Loading @@ -2454,6 +2454,36 @@ public class PermissionManagerService extends IPermissionManager.Stub { } } @NonNull private Set<String> getGrantedPermissions(@NonNull String packageName, @UserIdInt int userId) { final PackageSetting ps = mPackageManagerInt.getPackageSetting(packageName); if (ps == null) { return null; } final PermissionsState permissionsState = ps.getPermissionsState(); return permissionsState.getPermissions(userId); } @Nullable private int[] getPermissionGids(@NonNull String permissionName, @UserIdInt int userId) { BasePermission permission = mSettings.getPermission(permissionName); if (permission == null) { return null; } return permission.computeGids(userId); } @Nullable private int[] getPackageGids(@NonNull String packageName, @UserIdInt int userId) { final PackageSetting ps = mPackageManagerInt.getPackageSetting(packageName); if (ps == null) { return null; } final PermissionsState permissionsState = ps.getPermissionsState(); return permissionsState.computeGids(userId); } /** * Restore the permission state for a package. * Loading Loading @@ -4650,6 +4680,22 @@ public class PermissionManagerService extends IPermissionManager.Stub { public void removeAllPermissions(AndroidPackage pkg, boolean chatty) { PermissionManagerService.this.removeAllPermissions(pkg, chatty); } @NonNull @Override public Set<String> getGrantedPermissions(@NonNull String packageName, @UserIdInt int userId) { return PermissionManagerService.this.getGrantedPermissions(packageName, userId); } @Nullable @Override public int[] getPermissionGids(@NonNull String permissionName, @UserIdInt int userId) { return PermissionManagerService.this.getPermissionGids(permissionName, userId); } @Nullable @Override public int[] getPackageGids(@NonNull String packageName, @UserIdInt int userId) { return PermissionManagerService.this.getPackageGids(packageName, userId); } @Override public void grantRequestedRuntimePermissions(AndroidPackage pkg, int[] userIds, String[] grantedPermissions, int callingUid) { Loading services/core/java/com/android/server/pm/permission/PermissionManagerServiceInternal.java +20 −0 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ import com.android.server.pm.parsing.pkg.AndroidPackage; import java.util.ArrayList; import java.util.List; import java.util.Set; import java.util.function.Consumer; /** Loading Loading @@ -263,6 +264,25 @@ public abstract class PermissionManagerServiceInternal extends PermissionManager public abstract void addAllPermissionGroups(@NonNull AndroidPackage pkg, boolean chatty); public abstract void removeAllPermissions(@NonNull AndroidPackage pkg, boolean chatty); /** * Get all the permissions granted to a package. */ @NonNull public abstract Set<String> getGrantedPermissions(@NonNull String packageName, @UserIdInt int userId); /** * Get the GIDs of a permission. */ @Nullable public abstract int[] getPermissionGids(@NonNull String permissionName, @UserIdInt int userId); /** * Get the GIDs computed from the permission state of a package. */ @Nullable public abstract int[] getPackageGids(@NonNull String packageName, @UserIdInt int userId); /** Retrieve the packages that have requested the given app op permission */ public abstract @Nullable String[] getAppOpPermissionPackages( @NonNull String permName, int callingUid); Loading Loading
services/core/java/com/android/server/pm/InstantAppRegistry.java +7 −2 Original line number Diff line number Diff line Loading @@ -52,6 +52,7 @@ import com.android.internal.util.ArrayUtils; import com.android.internal.util.XmlUtils; import com.android.server.pm.parsing.PackageInfoUtils; import com.android.server.pm.parsing.pkg.AndroidPackage; import com.android.server.pm.permission.PermissionManagerServiceInternal; import libcore.io.IoUtils; import libcore.util.HexEncoding; Loading Loading @@ -112,6 +113,7 @@ class InstantAppRegistry { private static final String ATTR_GRANTED = "granted"; private final PackageManagerService mService; private final PermissionManagerServiceInternal mPermissionManager; private final CookiePersistence mCookiePersistence; /** State for uninstalled instant apps */ Loading @@ -131,8 +133,10 @@ class InstantAppRegistry { @GuardedBy("mService.mLock") private SparseArray<SparseBooleanArray> mInstalledInstantAppUids; public InstantAppRegistry(PackageManagerService service) { public InstantAppRegistry(PackageManagerService service, PermissionManagerServiceInternal permissionManager) { mService = service; mPermissionManager = permissionManager; mCookiePersistence = new CookiePersistence(BackgroundThread.getHandler().getLooper()); } Loading Loading @@ -861,7 +865,8 @@ class InstantAppRegistry { String[] requestedPermissions = new String[pkg.getRequestedPermissions().size()]; pkg.getRequestedPermissions().toArray(requestedPermissions); Set<String> permissions = ps.getPermissionsState().getPermissions(userId); Set<String> permissions = mPermissionManager.getGrantedPermissions( pkg.getPackageName(), userId); String[] grantedPermissions = new String[permissions.size()]; permissions.toArray(grantedPermissions); Loading
services/core/java/com/android/server/pm/PackageManagerService.java +7 −20 Original line number Diff line number Diff line Loading @@ -2970,7 +2970,7 @@ public class PackageManagerService extends IPackageManager.Stub mHandler = new PackageHandler(mHandlerThread.getLooper()); mProcessLoggingHandler = new ProcessLoggingHandler(); Watchdog.getInstance().addThread(mHandler, WATCHDOG_TIMEOUT); mInstantAppRegistry = new InstantAppRegistry(this); mInstantAppRegistry = new InstantAppRegistry(this, mPermissionManager); ArrayMap<String, SystemConfig.SharedLibraryEntry> libConfig = systemConfig.getSharedLibraries(); Loading Loading @@ -4385,14 +4385,13 @@ public class PackageManagerService extends IPackageManager.Stub final PackageUserState state = ps.readUserState(userId); AndroidPackage p = ps.pkg; if (p != null) { final PermissionsState permissionsState = ps.getPermissionsState(); // Compute GIDs only if requested final int[] gids = (flags & PackageManager.GET_GIDS) == 0 ? EMPTY_INT_ARRAY : permissionsState.computeGids(userId); ? EMPTY_INT_ARRAY : mPermissionManager.getPackageGids(ps.name, userId); // Compute granted permissions only if package has requested permissions final Set<String> permissions = ArrayUtils.isEmpty(p.getRequestedPermissions()) ? Collections.emptySet() : permissionsState.getPermissions(userId); ? Collections.emptySet() : mPermissionManager.getGrantedPermissions(ps.name, userId); PackageInfo packageInfo = PackageInfoUtils.generate(p, gids, flags, ps.firstInstallTime, ps.lastUpdateTime, permissions, state, userId, ps); Loading Loading @@ -4863,13 +4862,13 @@ public class PackageManagerService extends IPackageManager.Stub } // TODO: Shouldn't this be checking for package installed state for userId and // return null? return ps.getPermissionsState().computeGids(userId); return mPermissionManager.getPackageGids(packageName, userId); } if ((flags & MATCH_KNOWN_PACKAGES) != 0) { final PackageSetting ps = mSettings.mPackages.get(packageName); if (ps != null && ps.isMatch(flags) && !shouldFilterApplicationLocked(ps, callingUid, userId)) { return ps.getPermissionsState().computeGids(userId); return mPermissionManager.getPackageGids(packageName, userId); } } } Loading Loading @@ -24948,9 +24947,7 @@ public class PackageManagerService extends IPackageManager.Stub @Override public int[] getPermissionGids(String permissionName, int userId) { synchronized (mLock) { return getPermissionGidsLocked(permissionName, userId); } return mPermissionManager.getPermissionGids(permissionName, userId); } @Override Loading Loading @@ -25271,16 +25268,6 @@ public class PackageManagerService extends IPackageManager.Stub return null; } @GuardedBy("mLock") public int[] getPermissionGidsLocked(String permissionName, int userId) { BasePermission perm = mPermissionManager.getPermissionSettings().getPermission(permissionName); if (perm != null) { return perm.computeGids(userId); } return null; } @Override public int getRuntimePermissionsVersion(@UserIdInt int userId) { Preconditions.checkArgumentNonnegative(userId);
services/core/java/com/android/server/pm/permission/PermissionManagerService.java +46 −0 Original line number Diff line number Diff line Loading @@ -2454,6 +2454,36 @@ public class PermissionManagerService extends IPermissionManager.Stub { } } @NonNull private Set<String> getGrantedPermissions(@NonNull String packageName, @UserIdInt int userId) { final PackageSetting ps = mPackageManagerInt.getPackageSetting(packageName); if (ps == null) { return null; } final PermissionsState permissionsState = ps.getPermissionsState(); return permissionsState.getPermissions(userId); } @Nullable private int[] getPermissionGids(@NonNull String permissionName, @UserIdInt int userId) { BasePermission permission = mSettings.getPermission(permissionName); if (permission == null) { return null; } return permission.computeGids(userId); } @Nullable private int[] getPackageGids(@NonNull String packageName, @UserIdInt int userId) { final PackageSetting ps = mPackageManagerInt.getPackageSetting(packageName); if (ps == null) { return null; } final PermissionsState permissionsState = ps.getPermissionsState(); return permissionsState.computeGids(userId); } /** * Restore the permission state for a package. * Loading Loading @@ -4650,6 +4680,22 @@ public class PermissionManagerService extends IPermissionManager.Stub { public void removeAllPermissions(AndroidPackage pkg, boolean chatty) { PermissionManagerService.this.removeAllPermissions(pkg, chatty); } @NonNull @Override public Set<String> getGrantedPermissions(@NonNull String packageName, @UserIdInt int userId) { return PermissionManagerService.this.getGrantedPermissions(packageName, userId); } @Nullable @Override public int[] getPermissionGids(@NonNull String permissionName, @UserIdInt int userId) { return PermissionManagerService.this.getPermissionGids(permissionName, userId); } @Nullable @Override public int[] getPackageGids(@NonNull String packageName, @UserIdInt int userId) { return PermissionManagerService.this.getPackageGids(packageName, userId); } @Override public void grantRequestedRuntimePermissions(AndroidPackage pkg, int[] userIds, String[] grantedPermissions, int callingUid) { Loading
services/core/java/com/android/server/pm/permission/PermissionManagerServiceInternal.java +20 −0 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ import com.android.server.pm.parsing.pkg.AndroidPackage; import java.util.ArrayList; import java.util.List; import java.util.Set; import java.util.function.Consumer; /** Loading Loading @@ -263,6 +264,25 @@ public abstract class PermissionManagerServiceInternal extends PermissionManager public abstract void addAllPermissionGroups(@NonNull AndroidPackage pkg, boolean chatty); public abstract void removeAllPermissions(@NonNull AndroidPackage pkg, boolean chatty); /** * Get all the permissions granted to a package. */ @NonNull public abstract Set<String> getGrantedPermissions(@NonNull String packageName, @UserIdInt int userId); /** * Get the GIDs of a permission. */ @Nullable public abstract int[] getPermissionGids(@NonNull String permissionName, @UserIdInt int userId); /** * Get the GIDs computed from the permission state of a package. */ @Nullable public abstract int[] getPackageGids(@NonNull String packageName, @UserIdInt int userId); /** Retrieve the packages that have requested the given app op permission */ public abstract @Nullable String[] getAppOpPermissionPackages( @NonNull String permName, int callingUid); Loading