diff --git a/core/java/android/permission/PermissionManagerInternal.java b/core/java/android/permission/PermissionManagerInternal.java index 71674311965ce..a4676c47bac39 100644 --- a/core/java/android/permission/PermissionManagerInternal.java +++ b/core/java/android/permission/PermissionManagerInternal.java @@ -19,7 +19,6 @@ package android.permission; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.UserIdInt; -import android.os.UserHandle; /** * Internal interfaces to be used by other components within the system server. @@ -28,69 +27,39 @@ import android.os.UserHandle; * * @hide */ -public abstract class PermissionManagerInternal { - +public interface PermissionManagerInternal { /** - * Listener for package permission state (permissions or flags) changes. - */ - public interface OnRuntimePermissionStateChangedListener { - - /** - * Called when the runtime permission state (permissions or flags) changed. - * - * @param packageName The package for which the change happened. - * @param userId the user id for which the change happened. - */ - @Nullable - void onRuntimePermissionStateChanged(@NonNull String packageName, - @UserIdInt int userId); - } - - /** - * Get the state of the runtime permissions as xml file. + * Get the state of the runtime permissions as a blob. * - * @param user The user the data should be extracted for + * @param userId The user ID the data should be extracted for * - * @return The state as a xml file + * @return the state as a blob */ - public abstract @Nullable byte[] backupRuntimePermissions(@NonNull UserHandle user); + //@SystemApi(client = SystemApi.Client.SYSTEM_SERVER) + @Nullable + byte[] backupRuntimePermissions(@UserIdInt int userId); /** * Restore a permission state previously backed up via {@link #backupRuntimePermissions}. + *
+ * If not all state can be restored, the un-restorable state will be delayed and can be + * retried via {@link #restoreDelayedRuntimePermissions}. * - *
If not all state can be restored, the un-restoreable state will be delayed and can be - * re-tried via {@link #restoreDelayedRuntimePermissions}. - * - * @param backup The state as an xml file - * @param user The user the data should be restored for + * @param backup the state as a blob + * @param userId the user ID the data should be restored for */ - public abstract void restoreRuntimePermissions(@NonNull byte[] backup, - @NonNull UserHandle user); + //@SystemApi(client = SystemApi.Client.SYSTEM_SERVER) + void restoreRuntimePermissions(@NonNull byte[] backup, @UserIdInt int userId); /** * Try to apply permission backup of a package that was previously not applied. * - * @param packageName The package that is newly installed - * @param user The user the package is installed for + * @param packageName the package that is newly installed + * @param userId the user ID the package is installed for * * @see #restoreRuntimePermissions */ - public abstract void restoreDelayedRuntimePermissions(@NonNull String packageName, - @NonNull UserHandle user); - - /** - * Adds a listener for runtime permission state (permissions or flags) changes. - * - * @param listener The listener. - */ - public abstract void addOnRuntimePermissionStateChangedListener( - @NonNull OnRuntimePermissionStateChangedListener listener); - - /** - * Removes a listener for runtime permission state (permissions or flags) changes. - * - * @param listener The listener. - */ - public abstract void removeOnRuntimePermissionStateChangedListener( - @NonNull OnRuntimePermissionStateChangedListener listener); + //@SystemApi(client = SystemApi.Client.SYSTEM_SERVER) + void restoreDelayedRuntimePermissions(@NonNull String packageName, + @UserIdInt int userId); } diff --git a/core/java/com/android/server/backup/PermissionBackupHelper.java b/core/java/com/android/server/backup/PermissionBackupHelper.java index c7c423b82cf1d..4d1949e3e3d7b 100644 --- a/core/java/com/android/server/backup/PermissionBackupHelper.java +++ b/core/java/com/android/server/backup/PermissionBackupHelper.java @@ -17,8 +17,8 @@ package com.android.server.backup; import android.annotation.NonNull; +import android.annotation.UserIdInt; import android.app.backup.BlobBackupHelper; -import android.os.UserHandle; import android.permission.PermissionManagerInternal; import android.util.Slog; @@ -34,14 +34,14 @@ public class PermissionBackupHelper extends BlobBackupHelper { // key under which the permission-grant state blob is committed to backup private static final String KEY_PERMISSIONS = "permissions"; - private final @NonNull UserHandle mUser; + private final @UserIdInt int mUserId; private final @NonNull PermissionManagerInternal mPermissionManager; public PermissionBackupHelper(int userId) { super(STATE_VERSION, KEY_PERMISSIONS); - mUser = UserHandle.of(userId); + mUserId = userId; mPermissionManager = LocalServices.getService(PermissionManagerInternal.class); } @@ -53,7 +53,7 @@ public class PermissionBackupHelper extends BlobBackupHelper { try { switch (key) { case KEY_PERMISSIONS: - return mPermissionManager.backupRuntimePermissions(mUser); + return mPermissionManager.backupRuntimePermissions(mUserId); default: Slog.w(TAG, "Unexpected backup key " + key); @@ -72,7 +72,7 @@ public class PermissionBackupHelper extends BlobBackupHelper { try { switch (key) { case KEY_PERMISSIONS: - mPermissionManager.restoreRuntimePermissions(payload, mUser); + mPermissionManager.restoreRuntimePermissions(payload, mUserId); break; default: diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index 6aa4589cad98a..91b41f87c0ad2 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -20723,8 +20723,7 @@ public class PackageManagerService extends IPackageManager.Stub // We may also need to apply pending (restored) runtime permission grants // within these users. - mPermissionManager.restoreDelayedRuntimePermissions(packageName, - UserHandle.of(userId)); + mPermissionManager.restoreDelayedRuntimePermissions(packageName, userId); // Persistent preferred activity might have came into effect due to this // install. @@ -24333,13 +24332,13 @@ public class PackageManagerService extends IPackageManager.Stub + ", convertedFromPreCreated=" + convertedFromPreCreated + ")"); } if (!convertedFromPreCreated) { - mPermissionManager.onNewUserCreated(userId); + mPermissionManager.onUserCreated(userId); return; } if (!readPermissionStateForUser(userId)) { // Could not read the existing permissions, re-grant them. Slog.i(TAG, "re-granting permissions for pre-created user " + userId); - mPermissionManager.onNewUserCreated(userId); + mPermissionManager.onUserCreated(userId); } } 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 7ed887d9680aa..4847504abd417 100644 --- a/services/core/java/com/android/server/pm/permission/PermissionManagerService.java +++ b/services/core/java/com/android/server/pm/permission/PermissionManagerService.java @@ -114,7 +114,6 @@ import android.permission.IPermissionManager; import android.permission.PermissionControllerManager; import android.permission.PermissionManager; import android.permission.PermissionManagerInternal; -import android.permission.PermissionManagerInternal.OnRuntimePermissionStateChangedListener; import android.text.TextUtils; import android.util.ArrayMap; import android.util.ArraySet; @@ -151,6 +150,7 @@ import com.android.server.pm.UserManagerInternal; import com.android.server.pm.UserManagerService; import com.android.server.pm.parsing.PackageInfoUtils; import com.android.server.pm.parsing.pkg.AndroidPackage; +import com.android.server.pm.permission.PermissionManagerServiceInternal.OnRuntimePermissionStateChangedListener; import com.android.server.policy.PermissionPolicyInternal; import com.android.server.policy.SoftRestrictedPermissionPolicy; @@ -2197,19 +2197,20 @@ public class PermissionManagerService extends IPermissionManager.Stub { * *
Can not be called on main thread.
*
- * @param user The user the data should be extracted for
+ * @param userId The user ID the data should be extracted for
*
* @return The state as a xml file
*/
- private @Nullable byte[] backupRuntimePermissions(@NonNull UserHandle user) {
+ @Nullable
+ private byte[] backupRuntimePermissions(@UserIdInt int userId) {
CompletableFuture Can not be called on main thread.
*
* @param packageName The package that is newly installed
- * @param user The user the package is installed for
+ * @param userId The user ID the package is installed for
*
* @see #restoreRuntimePermissions
*/
private void restoreDelayedRuntimePermissions(@NonNull String packageName,
- @NonNull UserHandle user) {
+ @UserIdInt int userId) {
synchronized (mLock) {
- if (mHasNoDelayedPermBackup.get(user.getIdentifier(), false)) {
+ if (mHasNoDelayedPermBackup.get(userId, false)) {
return;
}
}
- mPermissionControllerManager.applyStagedRuntimePermissionBackup(packageName, user,
- mContext.getMainExecutor(), (hasMoreBackup) -> {
+ mPermissionControllerManager.applyStagedRuntimePermissionBackup(packageName,
+ UserHandle.of(userId), mContext.getMainExecutor(), (hasMoreBackup) -> {
if (hasMoreBackup) {
return;
}
synchronized (mLock) {
- mHasNoDelayedPermBackup.put(user.getIdentifier(), true);
+ mHasNoDelayedPermBackup.put(userId, true);
}
});
}
@@ -5058,7 +5060,7 @@ public class PermissionManagerService extends IPermissionManager.Stub {
}
}
- private class PermissionManagerServiceInternalImpl extends PermissionManagerServiceInternal {
+ private class PermissionManagerServiceInternalImpl implements PermissionManagerServiceInternal {
@Override
public void systemReady() {
PermissionManagerService.this.systemReady();
@@ -5083,6 +5085,7 @@ public class PermissionManagerService extends IPermissionManager.Stub {
}
@Override
public void onUserRemoved(@UserIdInt int userId) {
+ Preconditions.checkArgumentNonNegative(userId, "userId");
PermissionManagerService.this.onUserRemoved(userId);
}
@NonNull
@@ -5162,20 +5165,26 @@ public class PermissionManagerService extends IPermissionManager.Stub {
return matchingPermissions;
}
+ @Nullable
@Override
- public @Nullable byte[] backupRuntimePermissions(@NonNull UserHandle user) {
- return PermissionManagerService.this.backupRuntimePermissions(user);
+ public byte[] backupRuntimePermissions(@UserIdInt int userId) {
+ Preconditions.checkArgumentNonNegative(userId, "userId");
+ return PermissionManagerService.this.backupRuntimePermissions(userId);
}
@Override
- public void restoreRuntimePermissions(@NonNull byte[] backup, @NonNull UserHandle user) {
- PermissionManagerService.this.restoreRuntimePermissions(backup, user);
+ public void restoreRuntimePermissions(@NonNull byte[] backup, @UserIdInt int userId) {
+ Objects.requireNonNull(backup, "backup");
+ Preconditions.checkArgumentNonNegative(userId, "userId");
+ PermissionManagerService.this.restoreRuntimePermissions(backup, userId);
}
@Override
public void restoreDelayedRuntimePermissions(@NonNull String packageName,
- @NonNull UserHandle user) {
- PermissionManagerService.this.restoreDelayedRuntimePermissions(packageName, user);
+ @UserIdInt int userId) {
+ Objects.requireNonNull(packageName, "packageName");
+ Preconditions.checkArgumentNonNegative(userId, "userId");
+ PermissionManagerService.this.restoreDelayedRuntimePermissions(packageName, userId);
}
@Override
@@ -5264,7 +5273,8 @@ public class PermissionManagerService extends IPermissionManager.Stub {
}
@Override
- public void onNewUserCreated(int userId) {
+ public void onUserCreated(@UserIdInt int userId) {
+ Preconditions.checkArgumentNonNegative(userId, "userId");
// NOTE: This adds UPDATE_PERMISSIONS_REPLACE_PKG
PermissionManagerService.this.updateAllPermissions(StorageManager.UUID_PRIVATE_INTERNAL,
true, mDefaultPermissionCallback);
diff --git a/services/core/java/com/android/server/pm/permission/PermissionManagerServiceInternal.java b/services/core/java/com/android/server/pm/permission/PermissionManagerServiceInternal.java
index e006fa784cce9..1163ce0ac9178 100644
--- a/services/core/java/com/android/server/pm/permission/PermissionManagerServiceInternal.java
+++ b/services/core/java/com/android/server/pm/permission/PermissionManagerServiceInternal.java
@@ -34,14 +34,14 @@ import java.util.Set;
/**
* Internal interfaces services.
*
- * TODO: Should be merged into PermissionManagerInternal, but currently uses internal classes.
+ * TODO: Move into module.
*/
-public abstract class PermissionManagerServiceInternal extends PermissionManagerInternal
- implements LegacyPermissionDataProvider {
+public interface PermissionManagerServiceInternal extends PermissionManagerInternal,
+ LegacyPermissionDataProvider {
/**
* Provider for package names.
*/
- public interface PackagesProvider {
+ interface PackagesProvider {
/**
* Gets the packages for a given user.
@@ -54,7 +54,7 @@ public abstract class PermissionManagerServiceInternal extends PermissionManager
/**
* Provider for package names.
*/
- public interface SyncAdapterPackagesProvider {
+ interface SyncAdapterPackagesProvider {
/**
* Gets the sync adapter packages for given authority and user.
@@ -65,7 +65,23 @@ public abstract class PermissionManagerServiceInternal extends PermissionManager
String[] getPackages(String authority, int userId);
}
- public abstract void systemReady();
+ /**
+ * Adds a listener for runtime permission state (permissions or flags) changes.
+ *
+ * @param listener The listener.
+ */
+ void addOnRuntimePermissionStateChangedListener(
+ @NonNull OnRuntimePermissionStateChangedListener listener);
+
+ /**
+ * Removes a listener for runtime permission state (permissions or flags) changes.
+ *
+ * @param listener The listener.
+ */
+ void removeOnRuntimePermissionStateChangedListener(
+ @NonNull OnRuntimePermissionStateChangedListener listener);
+
+ void systemReady();
/**
* Get whether permission review is required for a package.
@@ -75,7 +91,7 @@ public abstract class PermissionManagerServiceInternal extends PermissionManager
* @return whether permission review is required
*/
//@SystemApi(client = SystemApi.Client.SYSTEM_SERVER)
- public abstract boolean isPermissionsReviewRequired(@NonNull String packageName,
+ boolean isPermissionsReviewRequired(@NonNull String packageName,
@UserIdInt int userId);
/**
@@ -90,7 +106,7 @@ public abstract class PermissionManagerServiceInternal extends PermissionManager
* @param allPackages All currently known packages
* @param callback Callback to call after permission changes
*/
- public abstract void updateAllPermissions(@Nullable String volumeUuid, boolean sdkUpdate);
+ void updateAllPermissions(@Nullable String volumeUuid, boolean sdkUpdate);
/**
* Reset the runtime permission state changes for a package.
@@ -101,7 +117,7 @@ public abstract class PermissionManagerServiceInternal extends PermissionManager
* @param userId the user ID
*/
//@SystemApi(client = SystemApi.Client.SYSTEM_SERVER)
- public abstract void resetRuntimePermissions(@NonNull AndroidPackage pkg,
+ void resetRuntimePermissions(@NonNull AndroidPackage pkg,
@UserIdInt int userId);
/**
@@ -110,7 +126,7 @@ public abstract class PermissionManagerServiceInternal extends PermissionManager
* @param userId the user ID
*/
//@SystemApi(client = SystemApi.Client.SYSTEM_SERVER)
- public abstract void resetAllRuntimePermissions(@UserIdInt int userId);
+ void resetAllRuntimePermissions(@UserIdInt int userId);
/**
* Read legacy permission state from package settings.
@@ -119,7 +135,7 @@ public abstract class PermissionManagerServiceInternal extends PermissionManager
* {@code PackageSetting} which is a implementation detail that permission should not know.
* Instead, it should retrieve the legacy state via a defined API.
*/
- public abstract void readLegacyPermissionStateTEMP();
+ void readLegacyPermissionStateTEMP();
/**
* Write legacy permission state to package settings.
@@ -127,12 +143,7 @@ public abstract class PermissionManagerServiceInternal extends PermissionManager
* TODO(zhanghai): This is a temporary method and should be removed once we migrated persistence
* for permission.
*/
- public abstract void writeLegacyPermissionStateTEMP();
-
- /**
- * Notify that a user has been removed and its permission state should be removed as well.
- */
- public abstract void onUserRemoved(@UserIdInt int userId);
+ void writeLegacyPermissionStateTEMP();
/**
* Get all the permissions granted to a package.
@@ -143,8 +154,7 @@ public abstract class PermissionManagerServiceInternal extends PermissionManager
*/
//@SystemApi(client = SystemApi.Client.SYSTEM_SERVER)
@NonNull
- public abstract Set