Merge "Move more methods accessing PermissionsState into PermissionManagerService."
This commit is contained in:
@@ -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;
|
||||
@@ -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 */
|
||||
@@ -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());
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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();
|
||||
@@ -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);
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
@@ -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);
|
||||
|
||||
@@ -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.
|
||||
*
|
||||
@@ -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) {
|
||||
|
||||
@@ -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;
|
||||
|
||||
/**
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user