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

Commit 8dfbf3af authored by Marvin Ramin's avatar Marvin Ramin
Browse files

Fix Activity start for appop permissions

Activities that specify a permission in their manifest entry that are of
type appop used to only check AppOpsManager, but not of the other types
a permission could be granted. This change fixes this.

Bug: 419149719
Test: manual
Flag: com.android.media.projection.flags.recording_overlay
Change-Id: I492acaa201330fe5a4169120f845d1e94af2959c
parent 9b58606e
Loading
Loading
Loading
Loading
+20 −0
Original line number Diff line number Diff line
@@ -109,6 +109,7 @@ import android.app.servertransaction.LaunchActivityItem;
import android.app.servertransaction.PauseActivityItem;
import android.app.servertransaction.ResumeActivityItem;
import android.app.servertransaction.StopActivityItem;
import android.content.AttributionSource;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
@@ -140,6 +141,7 @@ import android.os.Trace;
import android.os.UserHandle;
import android.os.UserManager;
import android.os.WorkSource;
import android.permission.PermissionManager;
import android.provider.MediaStore;
import android.util.ArrayMap;
import android.util.Slog;
@@ -291,6 +293,7 @@ public class ActivityTaskSupervisor implements RecentTasks.Callbacks {
    private WindowManagerService mWindowManager;

    private AppOpsManager mAppOpsManager;
    private PermissionManager mPermissionManager;
    private VirtualDeviceManagerInternal mVirtualDeviceManagerInternal;

    /** Common synchronization logic used to save things to disks. */
@@ -1353,6 +1356,13 @@ public class ActivityTaskSupervisor implements RecentTasks.Callbacks {
        return mAppOpsManager;
    }

    private PermissionManager getPermissionManager() {
        if (mPermissionManager == null) {
            mPermissionManager = mService.mContext.getSystemService(PermissionManager.class);
        }
        return mPermissionManager;
    }

    BackgroundActivityStartController getBackgroundActivityLaunchController() {
        return mBalController;
    }
@@ -1370,6 +1380,16 @@ public class ActivityTaskSupervisor implements RecentTasks.Callbacks {
            return ACTIVITY_RESTRICTION_NONE;
        }

        // TODO(b/419317335): Fully migrate to PermissionManager behind additional flags
        if (com.android.media.projection.flags.Flags.recordingOverlay()) {
            if (ignoreTargetSecurity || getPermissionManager().checkPermissionForDataDelivery(
                    activityInfo.permission,
                    new AttributionSource(callingUid, callingPackage, callingFeatureId), "")
                    == PermissionManager.PERMISSION_GRANTED) {
                return ACTIVITY_RESTRICTION_NONE;
            }
        }

        final int opCode = AppOpsManager.permissionToOpCode(activityInfo.permission);
        if (opCode == AppOpsManager.OP_NONE) {
            return ACTIVITY_RESTRICTION_NONE;