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 813c7f4b222d4..2b780294e2598 100644 --- a/services/core/java/com/android/server/pm/permission/PermissionManagerService.java +++ b/services/core/java/com/android/server/pm/permission/PermissionManagerService.java @@ -724,18 +724,6 @@ public class PermissionManagerService extends IPermissionManager.Stub { pkg, sharedUserPkgs, userId); } - @Override - public void addOnRuntimePermissionStateChangedListener( - OnRuntimePermissionStateChangedListener listener) { - mPermissionManagerServiceImpl.addOnRuntimePermissionStateChangedListener(listener); - } - - @Override - public void removeOnRuntimePermissionStateChangedListener( - OnRuntimePermissionStateChangedListener listener) { - mPermissionManagerServiceImpl.removeOnRuntimePermissionStateChangedListener(listener); - } - @Override public void onSystemReady() { mPermissionManagerServiceImpl.onSystemReady(); diff --git a/services/core/java/com/android/server/pm/permission/PermissionManagerServiceImpl.java b/services/core/java/com/android/server/pm/permission/PermissionManagerServiceImpl.java index 94d2a0bb623ef..572a446945991 100644 --- a/services/core/java/com/android/server/pm/permission/PermissionManagerServiceImpl.java +++ b/services/core/java/com/android/server/pm/permission/PermissionManagerServiceImpl.java @@ -125,7 +125,6 @@ import com.android.internal.util.CollectionUtils; import com.android.internal.util.DumpUtils; import com.android.internal.util.IntPair; import com.android.internal.util.Preconditions; -import com.android.internal.util.function.pooled.PooledLambda; import com.android.server.FgThread; import com.android.server.LocalServices; import com.android.server.PermissionThread; @@ -311,12 +310,6 @@ public class PermissionManagerServiceImpl implements PermissionManagerServiceInt @GuardedBy("mLock") private final SparseBooleanArray mHasNoDelayedPermBackup = new SparseBooleanArray(); - /** Listeners for permission state (granting and flags) changes */ - @GuardedBy("mLock") - private final ArrayList - mRuntimePermissionStateChangedListeners = new ArrayList<>(); - private final boolean mIsLeanback; @NonNull @@ -395,7 +388,11 @@ public class PermissionManagerServiceImpl implements PermissionManagerServiceInt mPackageManagerInt.writeSettings(true); } @Override - public void onPermissionUpdated(int[] userIds, boolean sync) { + public void onPermissionUpdated(int[] userIds, boolean sync, int appId) { + for (int i = 0; i < userIds.length; i++) { + int uid = UserHandle.getUid(userIds[i], appId); + mOnPermissionChangeListeners.onPermissionsChanged(uid); + } mPackageManagerInt.writePermissionSettings(userIds, !sync); } @Override @@ -406,18 +403,6 @@ public class PermissionManagerServiceImpl implements PermissionManagerServiceInt public void onPermissionRemoved() { mPackageManagerInt.writeSettings(false); } - public void onPermissionUpdatedNotifyListener(@UserIdInt int[] updatedUserIds, boolean sync, - int uid) { - onPermissionUpdated(updatedUserIds, sync); - for (int i = 0; i < updatedUserIds.length; i++) { - int userUid = UserHandle.getUid(updatedUserIds[i], UserHandle.getAppId(uid)); - mOnPermissionChangeListeners.onPermissionsChanged(userUid); - } - } - public void onInstallPermissionUpdatedNotifyListener(int uid) { - onInstallPermissionUpdated(); - mOnPermissionChangeListeners.onPermissionsChanged(uid); - } }; public PermissionManagerServiceImpl(@NonNull Context context, @@ -873,17 +858,13 @@ public class PermissionManagerServiceImpl implements PermissionManagerServiceInt permissionUpdated = uidState.updatePermissionFlags(bp, flagMask, flagValues); } - if (permissionUpdated && isRuntimePermission) { - notifyRuntimePermissionStateChanged(packageName, userId); - } if (permissionUpdated && callback != null) { // Install and runtime permissions are stored in different places, // so figure out what permission changed and persist the change. if (!isRuntimePermission) { - int userUid = UserHandle.getUid(userId, pkg.getUid()); - callback.onInstallPermissionUpdatedNotifyListener(userUid); + callback.onInstallPermissionUpdated(); } else { - callback.onPermissionUpdatedNotifyListener(new int[]{userId}, false, pkg.getUid()); + callback.onPermissionUpdated(new int[]{ userId }, false, pkg.getUid()); } } } @@ -1493,10 +1474,6 @@ public class PermissionManagerServiceImpl implements PermissionManagerServiceInt callback.onGidsChanged(UserHandle.getAppId(pkg.getUid()), userId); } } - - if (isRuntimePermission) { - notifyRuntimePermissionStateChanged(packageName, userId); - } } @Override @@ -1651,10 +1628,6 @@ public class PermissionManagerServiceImpl implements PermissionManagerServiceInt mDefaultPermissionCallback.onInstallPermissionRevoked(); } } - - if (isRuntimePermission) { - notifyRuntimePermissionStateChanged(packageName, userId); - } } private boolean mayManageRolePermission(int uid) { @@ -1710,8 +1683,9 @@ public class PermissionManagerServiceImpl implements PermissionManagerServiceInt mDefaultPermissionCallback.onInstallPermissionRevoked(); } - public void onPermissionUpdated(int[] updatedUserIds, boolean sync) { - for (int userId : updatedUserIds) { + public void onPermissionUpdated(int[] userIds, boolean sync, int appId) { + mOnPermissionChangeListeners.onPermissionsChanged(appId); + for (int userId : userIds) { if (sync) { syncUpdatedUsers.add(userId); asyncUpdatedUsers.remove(userId); @@ -1731,16 +1705,6 @@ public class PermissionManagerServiceImpl implements PermissionManagerServiceInt public void onInstallPermissionUpdated() { mDefaultPermissionCallback.onInstallPermissionUpdated(); } - - public void onPermissionUpdatedNotifyListener(@UserIdInt int[] updatedUserIds, - boolean sync, int uid) { - onPermissionUpdated(updatedUserIds, sync); - mOnPermissionChangeListeners.onPermissionsChanged(uid); - } - - public void onInstallPermissionUpdatedNotifyListener(int uid) { - mDefaultPermissionCallback.onInstallPermissionUpdatedNotifyListener(uid); - } }; if (filterPkg != null) { @@ -2068,45 +2032,6 @@ public class PermissionManagerServiceImpl implements PermissionManagerServiceInt }); } - @Override - public void addOnRuntimePermissionStateChangedListener( - PermissionManagerServiceInternal.OnRuntimePermissionStateChangedListener listener) { - synchronized (mLock) { - mRuntimePermissionStateChangedListeners.add(listener); - } - } - - @Override - public void removeOnRuntimePermissionStateChangedListener( - PermissionManagerServiceInternal.OnRuntimePermissionStateChangedListener listener) { - synchronized (mLock) { - mRuntimePermissionStateChangedListeners.remove(listener); - } - } - - private void notifyRuntimePermissionStateChanged(@NonNull String packageName, - @UserIdInt int userId) { - FgThread.getHandler().sendMessage(PooledLambda.obtainMessage( - PermissionManagerServiceImpl::doNotifyRuntimePermissionStateChanged, - PermissionManagerServiceImpl.this, packageName, userId)); - } - - private void doNotifyRuntimePermissionStateChanged(@NonNull String packageName, - @UserIdInt int userId) { - final ArrayList - listeners; - synchronized (mLock) { - if (mRuntimePermissionStateChangedListeners.isEmpty()) { - return; - } - listeners = new ArrayList<>(mRuntimePermissionStateChangedListeners); - } - final int listenerCount = listeners.size(); - for (int i = 0; i < listenerCount; i++) { - listeners.get(i).onRuntimePermissionStateChanged(packageName, userId); - } - } - /** * If the app is updated, and has scoped storage permissions, then it is possible that the * app updated in an attempt to get unscoped storage. If so, revoke all storage permissions. @@ -3008,11 +2933,7 @@ public class PermissionManagerServiceImpl implements PermissionManagerServiceInt if (callback != null) { callback.onPermissionUpdated(updatedUserIds, (changingPackageName != null && replace && installPermissionsChanged) - || runtimePermissionsRevoked); - } - - for (int userId : updatedUserIds) { - notifyRuntimePermissionStateChanged(pkg.getPackageName(), userId); + || runtimePermissionsRevoked, pkg.getUid()); } } @@ -3858,7 +3779,8 @@ public class PermissionManagerServiceImpl implements PermissionManagerServiceInt isGranted = uidState.isPermissionGranted(permissionName); } if (!isGranted) { - mDefaultPermissionCallback.onPermissionRevoked(pkg.getUid(), userId, null); + mDefaultPermissionCallback.onPermissionRevoked( + UserHandle.getUid(userId, pkg.getUid()), userId, null); break; } } @@ -5342,25 +5264,14 @@ public class PermissionManagerServiceImpl implements PermissionManagerServiceInt public void onPermissionGranted(int uid, @UserIdInt int userId) {} public void onInstallPermissionGranted() {} public void onPermissionRevoked(int uid, @UserIdInt int userId, String reason) { - onPermissionRevoked(uid, userId, reason, false); - } - public void onPermissionRevoked(int uid, @UserIdInt int userId, String reason, - boolean overrideKill) { onPermissionRevoked(uid, userId, reason, false, null); } public void onPermissionRevoked(int uid, @UserIdInt int userId, String reason, boolean overrideKill, @Nullable String permissionName) {} public void onInstallPermissionRevoked() {} - public void onPermissionUpdated(@UserIdInt int[] updatedUserIds, boolean sync) {} - public void onPermissionUpdatedNotifyListener(@UserIdInt int[] updatedUserIds, boolean sync, - int uid) { - onPermissionUpdated(updatedUserIds, sync); - } + public void onPermissionUpdated(@UserIdInt int[] userIds, boolean sync, int appId) {} public void onPermissionRemoved() {} public void onInstallPermissionUpdated() {} - public void onInstallPermissionUpdatedNotifyListener(int uid) { - onInstallPermissionUpdated(); - } } private static final class OnPermissionChangeListeners extends Handler { diff --git a/services/core/java/com/android/server/pm/permission/PermissionManagerServiceInterface.java b/services/core/java/com/android/server/pm/permission/PermissionManagerServiceInterface.java index b62c64b25c36e..8d8df966dfab7 100644 --- a/services/core/java/com/android/server/pm/permission/PermissionManagerServiceInterface.java +++ b/services/core/java/com/android/server/pm/permission/PermissionManagerServiceInterface.java @@ -382,24 +382,6 @@ public interface PermissionManagerServiceInterface extends PermissionManagerInte */ int checkUidPermission(int uid, String permName); - /** - * Adds a listener for runtime permission state (permissions or flags) changes. - * - * @param listener The listener. - */ - void addOnRuntimePermissionStateChangedListener( - @NonNull PermissionManagerServiceInternal - .OnRuntimePermissionStateChangedListener listener); - - /** - * Removes a listener for runtime permission state (permissions or flags) changes. - * - * @param listener The listener. - */ - void removeOnRuntimePermissionStateChangedListener( - @NonNull PermissionManagerServiceInternal - .OnRuntimePermissionStateChangedListener listener); - /** * Get all the package names requesting app op permissions. * 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 4dd69664c8c1f..240a73a4d31a4 100644 --- a/services/core/java/com/android/server/pm/permission/PermissionManagerServiceInternal.java +++ b/services/core/java/com/android/server/pm/permission/PermissionManagerServiceInternal.java @@ -65,22 +65,6 @@ public interface PermissionManagerServiceInternal extends PermissionManagerInter //@SystemApi(client = SystemApi.Client.SYSTEM_SERVER) int checkUidPermission(int uid, @NonNull String permissionName); - /** - * 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); - /** * Get whether permission review is required for a package. * @@ -312,22 +296,6 @@ public interface PermissionManagerServiceInternal extends PermissionManagerInter @Nullable PackageState packageState, @Nullable AndroidPackage pkg, @NonNull List sharedUserPkgs, @UserIdInt int userId); - /** - * 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. * diff --git a/services/core/java/com/android/server/pm/permission/PermissionManagerServiceLoggingDecorator.java b/services/core/java/com/android/server/pm/permission/PermissionManagerServiceLoggingDecorator.java index a6fa304cfa845..83ddde5245ce0 100644 --- a/services/core/java/com/android/server/pm/permission/PermissionManagerServiceLoggingDecorator.java +++ b/services/core/java/com/android/server/pm/permission/PermissionManagerServiceLoggingDecorator.java @@ -237,23 +237,6 @@ public class PermissionManagerServiceLoggingDecorator implements PermissionManag return mService.checkUidPermission(uid, permName); } - @Override - public void addOnRuntimePermissionStateChangedListener( - @NonNull PermissionManagerServiceInternal - .OnRuntimePermissionStateChangedListener listener) { - Log.i(LOG_TAG, "addOnRuntimePermissionStateChangedListener(listener = " + listener + ")"); - mService.addOnRuntimePermissionStateChangedListener(listener); - } - - @Override - public void removeOnRuntimePermissionStateChangedListener( - @NonNull PermissionManagerServiceInternal - .OnRuntimePermissionStateChangedListener listener) { - Log.i(LOG_TAG, "removeOnRuntimePermissionStateChangedListener(listener = " + listener - + ")"); - mService.removeOnRuntimePermissionStateChangedListener(listener); - } - @Override public Map> getAllAppOpPermissionPackages() { Log.i(LOG_TAG, "getAllAppOpPermissionPackages()"); diff --git a/services/core/java/com/android/server/pm/permission/PermissionManagerServiceTestingShim.java b/services/core/java/com/android/server/pm/permission/PermissionManagerServiceTestingShim.java index 3db08deab7b4d..317fbe77ba6a3 100644 --- a/services/core/java/com/android/server/pm/permission/PermissionManagerServiceTestingShim.java +++ b/services/core/java/com/android/server/pm/permission/PermissionManagerServiceTestingShim.java @@ -312,20 +312,6 @@ public class PermissionManagerServiceTestingShim implements PermissionManagerSer return newVal; } - @Override - public void addOnRuntimePermissionStateChangedListener(@NonNull - PermissionManagerServiceInternal.OnRuntimePermissionStateChangedListener listener) { - mOldImplementation.addOnRuntimePermissionStateChangedListener(listener); - mNewImplementation.addOnRuntimePermissionStateChangedListener(listener); - } - - @Override - public void removeOnRuntimePermissionStateChangedListener(@NonNull - PermissionManagerServiceInternal.OnRuntimePermissionStateChangedListener listener) { - mOldImplementation.removeOnRuntimePermissionStateChangedListener(listener); - mNewImplementation.removeOnRuntimePermissionStateChangedListener(listener); - } - @Override public Map> getAllAppOpPermissionPackages() { Map> oldVal = mOldImplementation.getAllAppOpPermissionPackages(); diff --git a/services/core/java/com/android/server/policy/PermissionPolicyService.java b/services/core/java/com/android/server/policy/PermissionPolicyService.java index 0e99e7ee1daab..7cbc297e2489d 100644 --- a/services/core/java/com/android/server/policy/PermissionPolicyService.java +++ b/services/core/java/com/android/server/policy/PermissionPolicyService.java @@ -58,7 +58,6 @@ import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.PackageManagerInternal; import android.content.pm.PackageManagerInternal.PackageListObserver; import android.content.pm.PermissionInfo; -import android.content.pm.UserPackage; import android.content.res.Resources; import android.os.Build; import android.os.Bundle; @@ -142,18 +141,18 @@ public final class PermissionPolicyService extends SystemService { private OnInitializedCallback mOnInitializedCallback; /** - * Whether an async {@link #synchronizePackagePermissionsAndAppOpsForUser} is currently - * scheduled for a package/user. + * Whether an async {@link #synchronizeUidPermissionsAndAppOps} is currently + * scheduled for a UID. */ @GuardedBy("mLock") - private final ArraySet mIsPackageSyncsScheduled = new ArraySet<>(); + private final SparseBooleanArray mIsUidSyncScheduled = new SparseBooleanArray(); /** * Whether an async {@link #resetAppOpPermissionsIfNotRequestedForUid} is currently * scheduled for a uid. */ @GuardedBy("mLock") - private final SparseBooleanArray mIsUidSyncScheduled = new SparseBooleanArray(); + private final SparseBooleanArray mIsUidResetScheduled = new SparseBooleanArray(); /** * This change reflects the presence of the new Notification Permission @@ -199,7 +198,8 @@ public final class PermissionPolicyService extends SystemService { .getUserIds(); for (final int userId : userIds) { if (isStarted(userId)) { - synchronizePackagePermissionsAndAppOpsForUser(packageName, userId); + final int uid = UserHandle.getUid(userId, appId); + synchronizeUidPermissionsAndAppOps(uid); } } } @@ -210,8 +210,8 @@ public final class PermissionPolicyService extends SystemService { .getUserIds(); for (final int userId : userIds) { if (isStarted(userId)) { - synchronizePackagePermissionsAndAppOpsForUser(packageName, userId); final int uid = UserHandle.getUid(userId, appId); + synchronizeUidPermissionsAndAppOps(uid); resetAppOpPermissionsIfNotRequestedForUid(uid); } } @@ -230,14 +230,13 @@ public final class PermissionPolicyService extends SystemService { } }); - mPermissionManagerInternal.addOnRuntimePermissionStateChangedListener( - this::synchronizePackagePermissionsAndAppOpsAsyncForUser); + mPackageManager.addOnPermissionsChangeListener( + this::synchronizeUidPermissionsAndAppOpsAsync); mAppOpsCallback = new IAppOpsCallback.Stub() { public void opChanged(int op, int uid, @Nullable String packageName) { if (packageName != null) { - synchronizePackagePermissionsAndAppOpsAsyncForUser(packageName, - UserHandle.getUserId(uid)); + synchronizeUidPermissionsAndAppOpsAsync(uid); } resetAppOpPermissionsIfNotRequestedForUidAsync(uid); } @@ -381,24 +380,23 @@ public final class PermissionPolicyService extends SystemService { return AppOpsManager.opToSwitch(op); } - private void synchronizePackagePermissionsAndAppOpsAsyncForUser(@NonNull String packageName, - @UserIdInt int changedUserId) { - if (isStarted(changedUserId)) { + private void synchronizeUidPermissionsAndAppOpsAsync(int uid) { + final int userId = UserHandle.getUserId(uid); + if (isStarted(userId)) { synchronized (mLock) { - if (mIsPackageSyncsScheduled.add(UserPackage.of(changedUserId, packageName))) { + if (!mIsUidSyncScheduled.get(uid)) { // TODO(b/165030092): migrate this to PermissionThread.getHandler(). - // synchronizePackagePermissionsAndAppOpsForUser is a heavy operation. + // synchronizeUidPermissionsAndAppOps is a heavy operation. // Dispatched on a PermissionThread, it interferes with user switch. // FgThread is busy and schedules it after most of the switch is done. // A possible solution is to delay the callback. FgThread.getHandler().sendMessage(PooledLambda.obtainMessage( - PermissionPolicyService - ::synchronizePackagePermissionsAndAppOpsForUser, - this, packageName, changedUserId)); + PermissionPolicyService::synchronizeUidPermissionsAndAppOps, this, + uid)); + mIsUidSyncScheduled.put(uid, true); } else { if (DEBUG) { - Slog.v(LOG_TAG, "sync for " + packageName + "/" + changedUserId - + " already scheduled"); + Slog.v(LOG_TAG, "sync for UID " + uid + " already scheduled"); } } } @@ -648,39 +646,27 @@ public final class PermissionPolicyService extends SystemService { } /** - * Synchronize a single package. + * Synchronize a single UID. */ - private void synchronizePackagePermissionsAndAppOpsForUser(@NonNull String packageName, - @UserIdInt int userId) { + private void synchronizeUidPermissionsAndAppOps(int uid) { synchronized (mLock) { - mIsPackageSyncsScheduled.remove(UserPackage.of(userId, packageName)); + mIsUidSyncScheduled.delete(uid); } if (DEBUG) { Slog.v(LOG_TAG, - "synchronizePackagePermissionsAndAppOpsForUser(" + packageName + ", " - + userId + ")"); + "synchronizePackagePermissionsAndAppOpsForUser(" + uid + ")"); } - final PackageManagerInternal packageManagerInternal = LocalServices.getService( - PackageManagerInternal.class); - final PackageInfo pkg = packageManagerInternal.getPackageInfo(packageName, 0, - Process.SYSTEM_UID, userId); - if (pkg == null) { - return; - } + final UserHandle user = UserHandle.getUserHandleForUid(uid); final PermissionToOpSynchroniser synchroniser = new PermissionToOpSynchroniser( - getUserContext(getContext(), UserHandle.of(userId))); - synchroniser.addPackage(pkg.packageName); - final String[] sharedPkgNames = packageManagerInternal.getSharedUserPackagesForPackage( - pkg.packageName, userId); - - for (String sharedPkgName : sharedPkgNames) { - final AndroidPackage sharedPkg = packageManagerInternal - .getPackage(sharedPkgName); - if (sharedPkg != null) { - synchroniser.addPackage(sharedPkg.getPackageName()); - } + getUserContext(getContext(), user)); + final int appId = UserHandle.getAppId(uid); + final List pkgs = mPackageManagerInternal.getPackagesForAppId(appId); + final int pkgsSize = pkgs.size(); + for (int i = 0; i < pkgsSize; i++) { + final AndroidPackage pkg = pkgs.get(i); + synchroniser.addPackage(pkg.getPackageName()); } synchroniser.syncPackages(); } @@ -708,8 +694,8 @@ public final class PermissionPolicyService extends SystemService { private void resetAppOpPermissionsIfNotRequestedForUidAsync(int uid) { if (isStarted(UserHandle.getUserId(uid))) { synchronized (mLock) { - if (!mIsUidSyncScheduled.get(uid)) { - mIsUidSyncScheduled.put(uid, true); + if (!mIsUidResetScheduled.get(uid)) { + mIsUidResetScheduled.put(uid, true); PermissionThread.getHandler().sendMessage(PooledLambda.obtainMessage( PermissionPolicyService::resetAppOpPermissionsIfNotRequestedForUid, this, uid)); @@ -720,7 +706,7 @@ public final class PermissionPolicyService extends SystemService { private void resetAppOpPermissionsIfNotRequestedForUid(int uid) { synchronized (mLock) { - mIsUidSyncScheduled.delete(uid); + mIsUidResetScheduled.delete(uid); } final Context context = getContext(); @@ -858,7 +844,7 @@ public final class PermissionPolicyService extends SystemService { /** * Set app ops that were added in {@link #addPackage}. * - *

This processes ops previously added by {@link #addAppOps(PackageInfo, String)} + *

This processes ops previously added by {@link #addPackage(String)})} */ private void syncPackages() { // Remember which ops were already set. This makes sure that we always set the most diff --git a/services/permission/java/com/android/server/permission/access/permission/PermissionService.kt b/services/permission/java/com/android/server/permission/access/permission/PermissionService.kt index 1c6868fbbdbbf..358893ee7e3ad 100644 --- a/services/permission/java/com/android/server/permission/access/permission/PermissionService.kt +++ b/services/permission/java/com/android/server/permission/access/permission/PermissionService.kt @@ -1636,18 +1636,6 @@ class PermissionService( onPermissionsChangeListeners.removeListener(listener) } - override fun addOnRuntimePermissionStateChangedListener( - listener: PermissionManagerServiceInternal.OnRuntimePermissionStateChangedListener - ) { - // TODO: Should be removed once we remove PermissionPolicyService. - } - - override fun removeOnRuntimePermissionStateChangedListener( - listener: PermissionManagerServiceInternal.OnRuntimePermissionStateChangedListener - ) { - // TODO: Should be removed once we remove PermissionPolicyService. - } - override fun getSplitPermissions(): List { return PermissionManager.splitPermissionInfoListToParcelableList( systemConfig.splitPermissions