Merge "Move or refactor PermissionManagerInternal APIs."

This commit is contained in:
Hai Zhang
2020-12-06 00:50:22 +00:00
committed by Android (Google) Code Review
5 changed files with 155 additions and 141 deletions

View File

@@ -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}.
* <p>
* If not all state can be restored, the un-restorable state will be delayed and can be
* retried via {@link #restoreDelayedRuntimePermissions}.
*
* <p>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);
}

View File

@@ -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:

View File

@@ -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);
}
}

View File

@@ -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 {
*
* <p>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<byte[]> backup = new CompletableFuture<>();
mPermissionControllerManager.getRuntimePermissionBackup(user, mContext.getMainExecutor(),
backup::complete);
mPermissionControllerManager.getRuntimePermissionBackup(UserHandle.of(userId),
mContext.getMainExecutor(), backup::complete);
try {
return backup.get(BACKUP_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS);
} catch (InterruptedException | ExecutionException | TimeoutException e) {
Slog.e(TAG, "Cannot create permission backup for " + user, e);
Slog.e(TAG, "Cannot create permission backup for user " + userId, e);
return null;
}
}
@@ -2221,13 +2222,14 @@ public class PermissionManagerService extends IPermissionManager.Stub {
* applied via {@link #restoreDelayedRuntimePermissions}.
*
* @param backup The state as an xml file
* @param user The user the data should be restored for
* @param userId The user ID the data should be restored for
*/
private void restoreRuntimePermissions(@NonNull byte[] backup, @NonNull UserHandle user) {
private void restoreRuntimePermissions(@NonNull byte[] backup, @UserIdInt int userId) {
synchronized (mLock) {
mHasNoDelayedPermBackup.delete(user.getIdentifier());
mHasNoDelayedPermBackup.delete(userId);
}
mPermissionControllerManager.stageAndApplyRuntimePermissionsBackup(backup, user);
mPermissionControllerManager.stageAndApplyRuntimePermissionsBackup(backup,
UserHandle.of(userId));
}
/**
@@ -2236,24 +2238,24 @@ public class PermissionManagerService extends IPermissionManager.Stub {
* <p>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);

View File

@@ -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<String> getGrantedPermissions(@NonNull String packageName,
@UserIdInt int userId);
Set<String> getGrantedPermissions(@NonNull String packageName, @UserIdInt int userId);
/**
* Get the GIDs of a permission.
@@ -155,7 +165,7 @@ public abstract class PermissionManagerServiceInternal extends PermissionManager
*/
//@SystemApi(client = SystemApi.Client.SYSTEM_SERVER)
@NonNull
public abstract int[] getPermissionGids(@NonNull String permissionName, @UserIdInt int userId);
int[] getPermissionGids(@NonNull String permissionName, @UserIdInt int userId);
/**
* Get the packages that have requested an app op permission.
@@ -165,18 +175,19 @@ public abstract class PermissionManagerServiceInternal extends PermissionManager
*/
//@SystemApi(client = SystemApi.Client.SYSTEM_SERVER)
@NonNull
public abstract String[] getAppOpPermissionPackages(@NonNull String permissionName);
String[] getAppOpPermissionPackages(@NonNull String permissionName);
/** HACK HACK methods to allow for partial migration of data to the PermissionManager class */
@Nullable
public abstract Permission getPermissionTEMP(@NonNull String permName);
Permission getPermissionTEMP(@NonNull String permName);
/** Get all permissions that have a certain protection */
public abstract @NonNull ArrayList<PermissionInfo> getAllPermissionsWithProtection(
@NonNull
ArrayList<PermissionInfo> getAllPermissionsWithProtection(
@PermissionInfo.Protection int protection);
/** Get all permissions that have certain protection flags */
public abstract @NonNull ArrayList<PermissionInfo> getAllPermissionsWithProtectionFlags(
@NonNull ArrayList<PermissionInfo> getAllPermissionsWithProtectionFlags(
@PermissionInfo.ProtectionFlags int protectionFlags);
/**
@@ -188,7 +199,7 @@ public abstract class PermissionManagerServiceInternal extends PermissionManager
* for, or {@code null} for all permissions
*/
//@SystemApi(client = SystemApi.Client.SYSTEM_SERVER)
public abstract void startShellPermissionIdentityDelegation(int uid,
void startShellPermissionIdentityDelegation(int uid,
@NonNull String packageName, @Nullable List<String> permissionNames);
/**
@@ -197,89 +208,85 @@ public abstract class PermissionManagerServiceInternal extends PermissionManager
* @see #startShellPermissionIdentityDelegation(int, String, List)
*/
//@SystemApi(client = SystemApi.Client.SYSTEM_SERVER)
public abstract void stopShellPermissionIdentityDelegation();
void stopShellPermissionIdentityDelegation();
/**
* Sets the dialer application packages provider.
* @param provider The provider.
*/
public abstract void setDialerAppPackagesProvider(PackagesProvider provider);
void setDialerAppPackagesProvider(PackagesProvider provider);
/**
* Set the location extra packages provider.
* @param provider The packages provider.
*/
public abstract void setLocationExtraPackagesProvider(PackagesProvider provider);
void setLocationExtraPackagesProvider(PackagesProvider provider);
/**
* Sets the location provider packages provider.
* @param provider The packages provider.
*/
public abstract void setLocationPackagesProvider(PackagesProvider provider);
void setLocationPackagesProvider(PackagesProvider provider);
/**
* Sets the SIM call manager packages provider.
* @param provider The provider.
*/
public abstract void setSimCallManagerPackagesProvider(PackagesProvider provider);
void setSimCallManagerPackagesProvider(PackagesProvider provider);
/**
* Sets the SMS application packages provider.
* @param provider The provider.
*/
public abstract void setSmsAppPackagesProvider(PackagesProvider provider);
void setSmsAppPackagesProvider(PackagesProvider provider);
/**
* Sets the sync adapter packages provider.
* @param provider The provider.
*/
public abstract void setSyncAdapterPackagesProvider(SyncAdapterPackagesProvider provider);
void setSyncAdapterPackagesProvider(SyncAdapterPackagesProvider provider);
/**
* Sets the Use Open Wifi packages provider.
* @param provider The packages provider.
*/
public abstract void setUseOpenWifiAppPackagesProvider(PackagesProvider provider);
void setUseOpenWifiAppPackagesProvider(PackagesProvider provider);
/**
* Sets the voice interaction packages provider.
* @param provider The packages provider.
*/
public abstract void setVoiceInteractionPackagesProvider(PackagesProvider provider);
void setVoiceInteractionPackagesProvider(PackagesProvider provider);
/**
* Requests granting of the default permissions to the current default browser.
* @param packageName The default browser package name.
* @param userId The user for which to grant the permissions.
*/
public abstract void grantDefaultPermissionsToDefaultBrowser(
@NonNull String packageName, @UserIdInt int userId);
void grantDefaultPermissionsToDefaultBrowser(@NonNull String packageName,
@UserIdInt int userId);
/**
* Requests granting of the default permissions to the current default Use Open Wifi app.
* @param packageName The default use open wifi package name.
* @param userId The user for which to grant the permissions.
*/
public abstract void grantDefaultPermissionsToDefaultSimCallManager(
@NonNull String packageName, @UserIdInt int userId);
void grantDefaultPermissionsToDefaultSimCallManager(@NonNull String packageName,
@UserIdInt int userId);
/**
* Requests granting of the default permissions to the current default Use Open Wifi app.
* @param packageName The default use open wifi package name.
* @param userId The user for which to grant the permissions.
*/
public abstract void grantDefaultPermissionsToDefaultUseOpenWifiApp(
@NonNull String packageName, @UserIdInt int userId);
/** Called when a new user has been created. */
public abstract void onNewUserCreated(@UserIdInt int userId);
void grantDefaultPermissionsToDefaultUseOpenWifiApp(@NonNull String packageName,
@UserIdInt int userId);
/**
* Removes invalid permissions which are not {@link PermissionInfo#FLAG_HARD_RESTRICTED} or
* {@link PermissionInfo#FLAG_SOFT_RESTRICTED} from the input.
*/
public abstract void retainHardAndSoftRestrictedPermissions(
@NonNull List<String> permissionNames);
void retainHardAndSoftRestrictedPermissions(@NonNull List<String> permissionNames);
/**
* Read legacy permissions from legacy permission settings.
@@ -288,8 +295,7 @@ public abstract class PermissionManagerServiceInternal extends PermissionManager
* {@code LegacyPermissionSettings} which is a implementation detail that permission should not
* know. Instead, it should retrieve the legacy permissions via a defined API.
*/
public abstract void readLegacyPermissionsTEMP(
@NonNull LegacyPermissionSettings legacyPermissionSettings);
void readLegacyPermissionsTEMP(@NonNull LegacyPermissionSettings legacyPermissionSettings);
/**
* Write legacy permissions to legacy permission settings.
@@ -297,8 +303,23 @@ 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 writeLegacyPermissionsTEMP(
@NonNull LegacyPermissionSettings legacyPermissionSettings);
void writeLegacyPermissionsTEMP(@NonNull LegacyPermissionSettings legacyPermissionSettings);
/**
* Callback when a user has been created.
*
* @param userId the created user ID
*/
//@SystemApi(client = SystemApi.Client.SYSTEM_SERVER)
void onUserCreated(@UserIdInt int userId);
/**
* Callback when a user has been removed.
*
* @param userId the removed user ID
*/
//@SystemApi(client = SystemApi.Client.SYSTEM_SERVER)
void onUserRemoved(@UserIdInt int userId);
/**
* Callback when a package has been added.
@@ -308,7 +329,7 @@ public abstract class PermissionManagerServiceInternal extends PermissionManager
* @param oldPkg the old package, or {@code null} if none
*/
//@SystemApi(client = SystemApi.Client.SYSTEM_SERVER)
public abstract void onPackageAdded(@NonNull AndroidPackage pkg, boolean isInstantApp,
void onPackageAdded(@NonNull AndroidPackage pkg, boolean isInstantApp,
@Nullable AndroidPackage oldPkg);
/**
@@ -319,8 +340,8 @@ public abstract class PermissionManagerServiceInternal extends PermissionManager
* @param userId the user ID this package is installed for
*/
//@SystemApi(client = SystemApi.Client.SYSTEM_SERVER)
public abstract void onPackageInstalled(@NonNull AndroidPackage pkg,
@NonNull PackageInstalledParams params, @UserIdInt int userId);
void onPackageInstalled(@NonNull AndroidPackage pkg, @NonNull PackageInstalledParams params,
@UserIdInt int userId);
/**
* Callback when a package has been removed.
@@ -328,7 +349,7 @@ public abstract class PermissionManagerServiceInternal extends PermissionManager
* @param pkg the removed package
*/
//@SystemApi(client = SystemApi.Client.SYSTEM_SERVER)
public abstract void onPackageRemoved(@NonNull AndroidPackage pkg);
void onPackageRemoved(@NonNull AndroidPackage pkg);
/**
* Callback when a package has been uninstalled.
@@ -345,9 +366,8 @@ public abstract class PermissionManagerServiceInternal extends PermissionManager
* @param userId the user ID the package is uninstalled for
*/
//@SystemApi(client = SystemApi.Client.SYSTEM_SERVER)
public abstract void onPackageUninstalled(@NonNull String packageName, int appId,
@Nullable AndroidPackage pkg, @NonNull List<AndroidPackage> sharedUserPkgs,
@UserIdInt int userId);
void onPackageUninstalled(@NonNull String packageName, int appId, @Nullable AndroidPackage pkg,
@NonNull List<AndroidPackage> sharedUserPkgs, @UserIdInt int userId);
/**
* Check whether a permission can be propagated to instant app.
@@ -355,7 +375,23 @@ public abstract class PermissionManagerServiceInternal extends PermissionManager
* @param permissionName the name of the permission
* @return whether the permission can be propagated
*/
public abstract boolean canPropagatePermissionToInstantApp(@NonNull String permissionName);
boolean canPropagatePermissionToInstantApp(@NonNull String permissionName);
/**
* Listener for package permission state (permissions or flags) changes.
*/
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);
}
/**
* The permission-related parameters passed in for package installation.
@@ -363,7 +399,7 @@ public abstract class PermissionManagerServiceInternal extends PermissionManager
* @see android.content.pm.PackageInstaller.SessionParams
*/
//@SystemApi(client = SystemApi.Client.SYSTEM_SERVER)
public static final class PackageInstalledParams {
final class PackageInstalledParams {
/**
* A static instance whose parameters are all in their default state.
*/