diff --git a/services/core/java/com/android/server/pm/PackageSetting.java b/services/core/java/com/android/server/pm/PackageSetting.java index 2ff18f8bdf799..de9d3a09df35b 100644 --- a/services/core/java/com/android/server/pm/PackageSetting.java +++ b/services/core/java/com/android/server/pm/PackageSetting.java @@ -28,7 +28,7 @@ import android.util.proto.ProtoOutputStream; import com.android.internal.annotations.VisibleForTesting; import com.android.server.pm.parsing.pkg.AndroidPackage; -import com.android.server.pm.permission.AppIdPermissionState; +import com.android.server.pm.permission.LegacyPermissionState; import com.android.server.pm.pkg.PackageStateUnserialized; import java.io.File; @@ -214,11 +214,12 @@ public class PackageSetting extends PackageSettingBase { mimeGroups = updatedMimeGroups; } + @Deprecated @Override - public AppIdPermissionState getPermissionsState() { + public LegacyPermissionState getLegacyPermissionState() { return (sharedUser != null) - ? sharedUser.getPermissionsState() - : super.getPermissionsState(); + ? sharedUser.getLegacyPermissionState() + : super.getLegacyPermissionState(); } public int getAppId() { diff --git a/services/core/java/com/android/server/pm/SettingBase.java b/services/core/java/com/android/server/pm/SettingBase.java index c1258b1efd48a..968c4b514ed04 100644 --- a/services/core/java/com/android/server/pm/SettingBase.java +++ b/services/core/java/com/android/server/pm/SettingBase.java @@ -19,23 +19,29 @@ package com.android.server.pm; import android.content.pm.ApplicationInfo; import com.android.internal.annotations.VisibleForTesting; -import com.android.server.pm.permission.AppIdPermissionState; +import com.android.server.pm.permission.LegacyPermissionState; @VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE) public abstract class SettingBase { int pkgFlags; int pkgPrivateFlags; - protected final AppIdPermissionState mPermissionsState; + /** + * The legacy permission state that is read from package settings persistence for migration. + * This state here can not reflect the current permission state and should not be used for + * purposes other than migration. + */ + @Deprecated + protected final LegacyPermissionState mLegacyPermissionsState; SettingBase(int pkgFlags, int pkgPrivateFlags) { setFlags(pkgFlags); setPrivateFlags(pkgPrivateFlags); - mPermissionsState = new AppIdPermissionState(); + mLegacyPermissionsState = new LegacyPermissionState(); } SettingBase(SettingBase orig) { - mPermissionsState = new AppIdPermissionState(); + mLegacyPermissionsState = new LegacyPermissionState(); doCopy(orig); } @@ -46,11 +52,12 @@ public abstract class SettingBase { private void doCopy(SettingBase orig) { pkgFlags = orig.pkgFlags; pkgPrivateFlags = orig.pkgPrivateFlags; - mPermissionsState.copyFrom(orig.mPermissionsState); + mLegacyPermissionsState.copyFrom(orig.mLegacyPermissionsState); } - public AppIdPermissionState getPermissionsState() { - return mPermissionsState; + @Deprecated + public LegacyPermissionState getLegacyPermissionState() { + return mLegacyPermissionsState; } void setFlags(int pkgFlags) { diff --git a/services/core/java/com/android/server/pm/Settings.java b/services/core/java/com/android/server/pm/Settings.java index c16bd5cdf1fa7..1dc035f26d835 100644 --- a/services/core/java/com/android/server/pm/Settings.java +++ b/services/core/java/com/android/server/pm/Settings.java @@ -107,10 +107,10 @@ import com.android.server.pm.Installer.InstallerException; import com.android.server.pm.parsing.PackageInfoUtils; import com.android.server.pm.parsing.pkg.AndroidPackage; import com.android.server.pm.parsing.pkg.AndroidPackageUtils; -import com.android.server.pm.permission.AppIdPermissionState; -import com.android.server.pm.permission.AppIdPermissionState.PermissionState; import com.android.server.pm.permission.BasePermission; import com.android.server.pm.permission.LegacyPermissionDataProvider; +import com.android.server.pm.permission.LegacyPermissionState; +import com.android.server.pm.permission.LegacyPermissionState.PermissionState; import com.android.server.pm.permission.PermissionSettings; import com.android.server.utils.TimingsTraceAndSlog; @@ -733,7 +733,8 @@ public final class Settings { pkgSetting.signatures = new PackageSignatures(disabledPkg.signatures); pkgSetting.appId = disabledPkg.appId; // Clone permissions - pkgSetting.getPermissionsState().copyFrom(disabledPkg.getPermissionsState()); + pkgSetting.getLegacyPermissionState() + .copyFrom(disabledPkg.getLegacyPermissionState()); // Clone component info List users = getAllUsers(userManager); if (users != null) { @@ -2114,7 +2115,7 @@ public final class Settings { } void readInstallPermissionsLPr(XmlPullParser parser, - AppIdPermissionState permissionsState) throws IOException, XmlPullParserException { + LegacyPermissionState permissionsState) throws IOException, XmlPullParserException { int outerDepth = parser.getDepth(); int type; while ((type=parser.next()) != XmlPullParser.END_DOCUMENT @@ -2406,7 +2407,7 @@ public final class Settings { serializer.attribute(null, "userId", Integer.toString(usr.userId)); usr.signatures.writeXml(serializer, "sigs", mPastSignatures); - writePermissionsLPr(serializer, usr.getPermissionsState() + writePermissionsLPr(serializer, usr.getLegacyPermissionState() .getInstallPermissionStates()); serializer.endTag(null, "shared-user"); } @@ -2734,7 +2735,7 @@ public final class Settings { // If this is a shared user, the permissions will be written there. if (pkg.sharedUser == null) { - writePermissionsLPr(serializer, pkg.getPermissionsState() + writePermissionsLPr(serializer, pkg.getLegacyPermissionState() .getInstallPermissionStates()); } @@ -2825,7 +2826,8 @@ public final class Settings { serializer, "install-initiator-sigs", mPastSignatures); } - writePermissionsLPr(serializer, pkg.getPermissionsState().getInstallPermissionStates()); + writePermissionsLPr(serializer, + pkg.getLegacyPermissionState().getInstallPermissionStates()); writeSigningKeySetLPr(serializer, pkg.keySetData); writeUpgradeKeySetsLPr(serializer, pkg.keySetData); @@ -3551,7 +3553,7 @@ public final class Settings { } if (parser.getName().equals(TAG_PERMISSIONS)) { - readInstallPermissionsLPr(parser, ps.getPermissionsState()); + readInstallPermissionsLPr(parser, ps.getLegacyPermissionState()); } else if (parser.getName().equals(TAG_USES_STATIC_LIB)) { readUsesStaticLibLPw(parser, ps); } else { @@ -3848,7 +3850,7 @@ public final class Settings { packageSetting.signatures.readXml(parser, mPastSignatures); } else if (tagName.equals(TAG_PERMISSIONS)) { readInstallPermissionsLPr(parser, - packageSetting.getPermissionsState()); + packageSetting.getLegacyPermissionState()); packageSetting.installPermissionsFixed = true; } else if (tagName.equals("proper-signing-keyset")) { long id = Long.parseLong(parser.getAttributeValue(null, "identifier")); @@ -4074,7 +4076,7 @@ public final class Settings { if (tagName.equals("sigs")) { su.signatures.readXml(parser, mPastSignatures); } else if (tagName.equals("perms")) { - readInstallPermissionsLPr(parser, su.getPermissionsState()); + readInstallPermissionsLPr(parser, su.getLegacyPermissionState()); } else { PackageManagerService.reportSettingsProblem(Log.WARN, "Unknown element under : " + parser.getName()); @@ -4494,7 +4496,7 @@ public final class Settings { void dumpPackageLPr(PrintWriter pw, String prefix, String checkinTag, ArraySet permissionNames, PackageSetting ps, - AppIdPermissionState permissionsState, SimpleDateFormat sdf, Date date, + LegacyPermissionState permissionsState, SimpleDateFormat sdf, Date date, List users, boolean dumpAll, boolean dumpAllComponents) { AndroidPackage pkg = ps.pkg; if (checkinTag != null) { @@ -4944,8 +4946,8 @@ public final class Settings { && !packageName.equals(ps.name)) { continue; } - final AppIdPermissionState permissionsState = - mPermissionDataProvider.getAppIdPermissionState(ps.appId); + final LegacyPermissionState permissionsState = + mPermissionDataProvider.getLegacyPermissionState(ps.appId); if (permissionNames != null && !permissionsState.hasPermissionState(permissionNames)) { continue; @@ -5002,8 +5004,8 @@ public final class Settings { pw.println("Hidden system packages:"); printedSomething = true; } - final AppIdPermissionState permissionsState = - mPermissionDataProvider.getAppIdPermissionState(ps.appId); + final LegacyPermissionState permissionsState = + mPermissionDataProvider.getLegacyPermissionState(ps.appId); dumpPackageLPr(pw, " ", checkin ? "dis" : null, permissionNames, ps, permissionsState, sdf, date, users, packageName != null, dumpAllComponents); } @@ -5033,8 +5035,8 @@ public final class Settings { if (packageName != null && su != dumpState.getSharedUser()) { continue; } - final AppIdPermissionState permissionsState = - mPermissionDataProvider.getAppIdPermissionState(su.userId); + final LegacyPermissionState permissionsState = + mPermissionDataProvider.getLegacyPermissionState(su.userId); if (permissionNames != null && !permissionsState.hasPermissionState(permissionNames)) { continue; @@ -5178,7 +5180,7 @@ public final class Settings { } void dumpInstallPermissionsLPr(PrintWriter pw, String prefix, ArraySet permissionNames, - AppIdPermissionState permissionsState) { + LegacyPermissionState permissionsState) { Collection permissionStates = permissionsState.getInstallPermissionStates(); if (!permissionStates.isEmpty()) { @@ -5424,7 +5426,7 @@ public final class Settings { if (packageSetting.sharedUser == null) { List permissions = getPermissionsFromPermissionsState( - packageSetting.getPermissionsState(), userId); + packageSetting.getLegacyPermissionState(), userId); packagePermissions.put(packageName, permissions); } } @@ -5437,7 +5439,7 @@ public final class Settings { SharedUserSetting sharedUserSetting = mSharedUsers.valueAt(i); List permissions = getPermissionsFromPermissionsState( - sharedUserSetting.getPermissionsState(), userId); + sharedUserSetting.getLegacyPermissionState(), userId); sharedUserPermissions.put(sharedUserName, permissions); } @@ -5449,7 +5451,7 @@ public final class Settings { @NonNull private List getPermissionsFromPermissionsState( - @NonNull AppIdPermissionState permissionsState, @UserIdInt int userId) { + @NonNull LegacyPermissionState permissionsState, @UserIdInt int userId) { Collection permissionStates = permissionsState.getRuntimePermissionStates(userId); List permissions = new ArrayList<>(); @@ -5509,11 +5511,11 @@ public final class Settings { List permissions = packagePermissions.get(packageName); if (permissions != null) { - readPermissionsStateLpr(permissions, packageSetting.getPermissionsState(), + readPermissionsStateLpr(permissions, packageSetting.getLegacyPermissionState(), userId); } else if (packageSetting.sharedUser == null && !isUpgradeToR) { Slog.w(TAG, "Missing permission state for package: " + packageName); - packageSetting.getPermissionsState().setMissing(true, userId); + packageSetting.getLegacyPermissionState().setMissing(true, userId); } } @@ -5527,18 +5529,18 @@ public final class Settings { List permissions = sharedUserPermissions.get(sharedUserName); if (permissions != null) { - readPermissionsStateLpr(permissions, sharedUserSetting.getPermissionsState(), - userId); + readPermissionsStateLpr(permissions, + sharedUserSetting.getLegacyPermissionState(), userId); } else if (!isUpgradeToR) { Slog.w(TAG, "Missing permission state for shared user: " + sharedUserName); - sharedUserSetting.getPermissionsState().setMissing(true, userId); + sharedUserSetting.getLegacyPermissionState().setMissing(true, userId); } } } private void readPermissionsStateLpr( @NonNull List permissions, - @NonNull AppIdPermissionState permissionsState, @UserIdInt int userId) { + @NonNull LegacyPermissionState permissionsState, @UserIdInt int userId) { int permissionsSize = permissions.size(); for (int i = 0; i < permissionsSize; i++) { RuntimePermissionsState.PermissionState permission = permissions.get(i); @@ -5617,7 +5619,7 @@ public final class Settings { XmlUtils.skipCurrentTag(parser); continue; } - parsePermissionsLPr(parser, ps.getPermissionsState(), userId); + parsePermissionsLPr(parser, ps.getLegacyPermissionState(), userId); } break; case TAG_SHARED_USER: { @@ -5628,14 +5630,14 @@ public final class Settings { XmlUtils.skipCurrentTag(parser); continue; } - parsePermissionsLPr(parser, sus.getPermissionsState(), userId); + parsePermissionsLPr(parser, sus.getLegacyPermissionState(), userId); } break; } } } private void parsePermissionsLPr(XmlPullParser parser, - AppIdPermissionState permissionsState, int userId) + LegacyPermissionState permissionsState, int userId) throws IOException, XmlPullParserException { final int outerDepth = parser.getDepth(); int type; diff --git a/services/core/java/com/android/server/pm/permission/LegacyPermissionDataProvider.java b/services/core/java/com/android/server/pm/permission/LegacyPermissionDataProvider.java index 7452b522b20a8..346a2c527fcbf 100644 --- a/services/core/java/com/android/server/pm/permission/LegacyPermissionDataProvider.java +++ b/services/core/java/com/android/server/pm/permission/LegacyPermissionDataProvider.java @@ -31,7 +31,7 @@ public interface LegacyPermissionDataProvider { * @return the legacy permission state */ @NonNull - public abstract AppIdPermissionState getAppIdPermissionState(@AppIdInt int appId); + LegacyPermissionState getLegacyPermissionState(@AppIdInt int appId); /** * Get the GIDs computed from the permission state of a UID, either a package or a shared user. @@ -40,5 +40,5 @@ public interface LegacyPermissionDataProvider { * @return the GIDs for the UID */ @NonNull - public abstract int[] getGidsForUid(int uid); + int[] getGidsForUid(int uid); } diff --git a/services/core/java/com/android/server/pm/permission/AppIdPermissionState.java b/services/core/java/com/android/server/pm/permission/LegacyPermissionState.java similarity index 98% rename from services/core/java/com/android/server/pm/permission/AppIdPermissionState.java rename to services/core/java/com/android/server/pm/permission/LegacyPermissionState.java index aabdafdd453ad..63f69cede59cf 100644 --- a/services/core/java/com/android/server/pm/permission/AppIdPermissionState.java +++ b/services/core/java/com/android/server/pm/permission/LegacyPermissionState.java @@ -32,7 +32,7 @@ import java.util.Objects; * Legacy permission state that was associated with packages or shared users. */ //@SystemApi(client = SystemApi.Client.SYSTEM_SERVER) -public final class AppIdPermissionState { +public final class LegacyPermissionState { // Maps from user IDs to user states. @NonNull private final SparseArray mUserStates = new SparseArray<>(); @@ -48,7 +48,7 @@ public final class AppIdPermissionState { * * @hide */ - public void copyFrom(@NonNull AppIdPermissionState other) { + public void copyFrom(@NonNull LegacyPermissionState other) { if (other == this) { return; } @@ -88,7 +88,7 @@ public final class AppIdPermissionState { if (getClass() != object.getClass()) { return false; } - final AppIdPermissionState other = (AppIdPermissionState) object; + final LegacyPermissionState other = (LegacyPermissionState) object; return Objects.equals(mUserStates, other.mUserStates) && Objects.equals(mMissing, other.mMissing); } diff --git a/services/core/java/com/android/server/pm/permission/PermissionManagerService.java b/services/core/java/com/android/server/pm/permission/PermissionManagerService.java index 0a514fabb9203..6a9503c7f8b30 100644 --- a/services/core/java/com/android/server/pm/permission/PermissionManagerService.java +++ b/services/core/java/com/android/server/pm/permission/PermissionManagerService.java @@ -4599,7 +4599,7 @@ public class PermissionManagerService extends IPermissionManager.Stub { final int[] userIds = getAllUserIds(); mPackageManagerInt.forEachPackageSetting(ps -> { final int appId = ps.getAppId(); - final AppIdPermissionState appIdState = ps.getPermissionsState(); + final LegacyPermissionState legacyState = ps.getLegacyPermissionState(); synchronized (mLock) { for (final int userId : userIds) { @@ -4608,19 +4608,19 @@ public class PermissionManagerService extends IPermissionManager.Stub { userState.setInstallPermissionsFixed(ps.name, ps.areInstallPermissionsFixed()); final UidPermissionState uidState = userState.getOrCreateUidState(appId); uidState.reset(); - uidState.setMissing(appIdState.isMissing(userId)); + uidState.setMissing(legacyState.isMissing(userId)); readStateFromPermissionStates(uidState, - appIdState.getInstallPermissionStates()); + legacyState.getInstallPermissionStates()); readStateFromPermissionStates(uidState, - appIdState.getRuntimePermissionStates(userId)); + legacyState.getRuntimePermissionStates(userId)); } } }); } private void readStateFromPermissionStates(@NonNull UidPermissionState uidState, - @NonNull Collection permissionStates) { - for (final AppIdPermissionState.PermissionState permissionState : permissionStates) { + @NonNull Collection permissionStates) { + for (final LegacyPermissionState.PermissionState permissionState : permissionStates) { uidState.putPermissionState(permissionState.getPermission(), permissionState.isGranted(), permissionState.getFlags()); } @@ -4630,8 +4630,8 @@ public class PermissionManagerService extends IPermissionManager.Stub { final int[] userIds = mState.getUserIds(); mPackageManagerInt.forEachPackageSetting(ps -> { ps.setInstallPermissionsFixed(false); - final AppIdPermissionState appIdState = ps.getPermissionsState(); - appIdState.reset(); + final LegacyPermissionState legacyState = ps.getLegacyPermissionState(); + legacyState.reset(); final int appId = ps.getAppId(); synchronized (mLock) { @@ -4653,21 +4653,21 @@ public class PermissionManagerService extends IPermissionManager.Stub { continue; } - appIdState.setMissing(uidState.isMissing(), userId); + legacyState.setMissing(uidState.isMissing(), userId); final List permissionStates = uidState.getPermissionStates(); final int permissionStatesSize = permissionStates.size(); for (int i = 0; i < permissionStatesSize; i++) { final PermissionState permissionState = permissionStates.get(i); - final AppIdPermissionState.PermissionState legacyPermissionState = - new AppIdPermissionState.PermissionState( + final LegacyPermissionState.PermissionState legacyPermissionState = + new LegacyPermissionState.PermissionState( permissionState.getPermission(), permissionState.isGranted(), permissionState.getFlags()); if (permissionState.isRuntime()) { - appIdState.putRuntimePermissionState(legacyPermissionState, + legacyState.putRuntimePermissionState(legacyPermissionState, userId); } else { - appIdState.putInstallPermissionState(legacyPermissionState); + legacyState.putInstallPermissionState(legacyPermissionState); } } } @@ -4676,8 +4676,8 @@ public class PermissionManagerService extends IPermissionManager.Stub { } @NonNull - private AppIdPermissionState getAppIdPermissionState(@AppIdInt int appId) { - final AppIdPermissionState appIdState = new AppIdPermissionState(); + private LegacyPermissionState getLegacyPermissionState(@AppIdInt int appId) { + final LegacyPermissionState legacyState = new LegacyPermissionState(); final int[] userIds = mState.getUserIds(); for (final int userId : userIds) { final UidPermissionState uidState = getUidState(appId, userId); @@ -4692,17 +4692,17 @@ public class PermissionManagerService extends IPermissionManager.Stub { for (int i = 0; i < permissionStatesSize; i++) { final PermissionState permissionState = permissionStates.get(i); - final AppIdPermissionState.PermissionState legacyPermissionState = - new AppIdPermissionState.PermissionState(permissionState.getPermission(), + final LegacyPermissionState.PermissionState legacyPermissionState = + new LegacyPermissionState.PermissionState(permissionState.getPermission(), permissionState.isGranted(), permissionState.getFlags()); if (permissionState.isRuntime()) { - appIdState.putRuntimePermissionState(legacyPermissionState, userId); + legacyState.putRuntimePermissionState(legacyPermissionState, userId); } else if (userId == UserHandle.USER_SYSTEM) { - appIdState.putInstallPermissionState(legacyPermissionState); + legacyState.putInstallPermissionState(legacyPermissionState); } } } - return appIdState; + return legacyState; } @NonNull @@ -5111,8 +5111,8 @@ public class PermissionManagerService extends IPermissionManager.Stub { } @NonNull - public AppIdPermissionState getAppIdPermissionState(@AppIdInt int appId) { - return PermissionManagerService.this.getAppIdPermissionState(appId); + public LegacyPermissionState getLegacyPermissionState(@AppIdInt int appId) { + return PermissionManagerService.this.getLegacyPermissionState(appId); } @NonNull diff --git a/services/tests/servicestests/src/com/android/server/pm/PackageManagerSettingsTests.java b/services/tests/servicestests/src/com/android/server/pm/PackageManagerSettingsTests.java index bc747832e253a..6255630712aec 100644 --- a/services/tests/servicestests/src/com/android/server/pm/PackageManagerSettingsTests.java +++ b/services/tests/servicestests/src/com/android/server/pm/PackageManagerSettingsTests.java @@ -891,8 +891,10 @@ public class PackageManagerSettingsTests { assertNotSame(origPkgSetting.mimeGroups, testPkgSetting.mimeGroups); } assertThat(origPkgSetting.mimeGroups, is(testPkgSetting.mimeGroups)); - assertNotSame(origPkgSetting.mPermissionsState, testPkgSetting.mPermissionsState); - assertThat(origPkgSetting.mPermissionsState, is(testPkgSetting.mPermissionsState)); + assertNotSame(origPkgSetting.mLegacyPermissionsState, + testPkgSetting.mLegacyPermissionsState); + assertThat(origPkgSetting.mLegacyPermissionsState, + is(testPkgSetting.mLegacyPermissionsState)); assertThat(origPkgSetting.name, is(testPkgSetting.name)); // mOldCodePaths is _not_ copied // assertNotSame(origPkgSetting.mOldCodePaths, testPkgSetting.mOldCodePaths);