Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 31207a9b authored by mrulhania's avatar mrulhania
Browse files

Support virtual device in permissions listener

Clients can opt-in for virtual devices
permission changes by overriding new callback.

Bug: 289355341
Bug: 302627733
Test: presubmit
Change-Id: I282eb4fabea6d36005b8eb1dc4a8c6887d3cd400
parent 95ed1f1f
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -4114,6 +4114,7 @@ package android.content.pm {
  public static interface PackageManager.OnPermissionsChangedListener {
    method public void onPermissionsChanged(int);
    method @FlaggedApi("android.permission.flags.device_aware_permission_apis") public default void onPermissionsChanged(int, @NonNull String);
  }
  @IntDef(prefix={"FLAG_PERMISSION_"}, value={android.content.pm.PackageManager.FLAG_PERMISSION_USER_SET, android.content.pm.PackageManager.FLAG_PERMISSION_USER_FIXED, android.content.pm.PackageManager.FLAG_PERMISSION_POLICY_FIXED, android.content.pm.PackageManager.FLAG_PERMISSION_REVOKE_ON_UPGRADE, android.content.pm.PackageManager.FLAG_PERMISSION_SYSTEM_FIXED, android.content.pm.PackageManager.FLAG_PERMISSION_GRANTED_BY_DEFAULT, android.content.pm.PackageManager.FLAG_PERMISSION_USER_SENSITIVE_WHEN_GRANTED, android.content.pm.PackageManager.FLAG_PERMISSION_USER_SENSITIVE_WHEN_DENIED, android.content.pm.PackageManager.FLAG_PERMISSION_RESTRICTION_UPGRADE_EXEMPT, android.content.pm.PackageManager.FLAG_PERMISSION_RESTRICTION_SYSTEM_EXEMPT, android.content.pm.PackageManager.FLAG_PERMISSION_RESTRICTION_INSTALLER_EXEMPT, android.content.pm.PackageManager.FLAG_PERMISSION_APPLY_RESTRICTION, android.content.pm.PackageManager.FLAG_PERMISSION_GRANTED_BY_ROLE, android.content.pm.PackageManager.FLAG_PERMISSION_REVOKED_COMPAT, android.content.pm.PackageManager.FLAG_PERMISSION_ONE_TIME, android.content.pm.PackageManager.FLAG_PERMISSION_AUTO_REVOKED}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface PackageManager.PermissionFlags {
+23 −3
Original line number Diff line number Diff line
@@ -43,6 +43,7 @@ import android.app.PackageInstallObserver;
import android.app.PropertyInvalidatedCache;
import android.app.admin.DevicePolicyManager;
import android.app.usage.StorageStatsManager;
import android.companion.virtual.VirtualDeviceManager;
import android.compat.annotation.ChangeId;
import android.compat.annotation.EnabledSince;
import android.compat.annotation.UnsupportedAppUsage;
@@ -710,12 +711,31 @@ public abstract class PackageManager {
     */
    @SystemApi
    public interface OnPermissionsChangedListener {

        /**
         * Called when the permissions for a UID change.
         * Called when the permissions for a UID change for the default device.
         *
         * @param uid The UID with a change.
         * @see Context#DEVICE_ID_DEFAULT
         */
        void onPermissionsChanged(int uid);

        /**
         * Called when the permissions for a UID change for a device, including virtual devices.
         *
         * @param uid The UID of permission change event.
         * @param persistentDeviceId The persistent device ID of permission change event.
         *
         * @see VirtualDeviceManager.VirtualDevice#getPersistentDeviceId()
         * @see VirtualDeviceManager#PERSISTENT_DEVICE_ID_DEFAULT
         */
        public void onPermissionsChanged(int uid);
        @FlaggedApi(android.permission.flags.Flags.FLAG_DEVICE_AWARE_PERMISSION_APIS)
        default void onPermissionsChanged(int uid, @NonNull String persistentDeviceId) {
            Objects.requireNonNull(persistentDeviceId);
            if (Objects.equals(persistentDeviceId,
                    VirtualDeviceManager.PERSISTENT_DEVICE_ID_DEFAULT)) {
                onPermissionsChanged(uid);
            }
        }
    }

    /** @hide */
+1 −1
Original line number Diff line number Diff line
@@ -21,5 +21,5 @@ package android.permission;
 * {@hide}
 */
oneway interface IOnPermissionsChangeListener {
    void onPermissionsChanged(int uid);
    void onPermissionsChanged(int uid, String deviceId);
}
+5 −4
Original line number Diff line number Diff line
@@ -1738,8 +1738,8 @@ public final class PermissionManager {
        }

        @Override
        public void onPermissionsChanged(int uid) {
            mHandler.obtainMessage(MSG_PERMISSIONS_CHANGED, uid, 0).sendToTarget();
        public void onPermissionsChanged(int uid, String deviceId) {
            mHandler.obtainMessage(MSG_PERMISSIONS_CHANGED, uid, 0, deviceId).sendToTarget();
        }

        @Override
@@ -1747,7 +1747,8 @@ public final class PermissionManager {
            switch (msg.what) {
                case MSG_PERMISSIONS_CHANGED: {
                    final int uid = msg.arg1;
                    mListener.onPermissionsChanged(uid);
                    final String deviceId = msg.obj.toString();
                    mListener.onPermissionsChanged(uid, deviceId);
                    return true;
                }
                default:
+3 −1
Original line number Diff line number Diff line
@@ -70,6 +70,7 @@ import android.app.ActivityManager;
import android.app.AppOpsManager;
import android.app.IActivityManager;
import android.app.admin.DevicePolicyManagerInternal;
import android.companion.virtual.VirtualDeviceManager;
import android.compat.annotation.ChangeId;
import android.compat.annotation.EnabledAfter;
import android.content.Context;
@@ -5327,7 +5328,8 @@ public class PermissionManagerServiceImpl implements PermissionManagerServiceInt
                    IOnPermissionsChangeListener callback = mPermissionListeners
                            .getBroadcastItem(i);
                    try {
                        callback.onPermissionsChanged(uid);
                        callback.onPermissionsChanged(uid,
                                VirtualDeviceManager.PERSISTENT_DEVICE_ID_DEFAULT);
                    } catch (RemoteException e) {
                        Log.e(TAG, "Permission listener is dead", e);
                    }
Loading