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

Commit d161294e authored by Winson Chung's avatar Winson Chung Committed by android-build-merger
Browse files

Merge "Allow recents component to launch non-exported activities" into pi-dev am: 037834d5

am: 11d224f7

Change-Id: I3047beabbf1da43569a61710accb4b2703b39812
parents 3e5644cd 11d224f7
Loading
Loading
Loading
Loading
+8 −3
Original line number Diff line number Diff line
@@ -1702,11 +1702,16 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D

    boolean checkStartAnyActivityPermission(Intent intent, ActivityInfo aInfo,
            String resultWho, int requestCode, int callingPid, int callingUid,
            String callingPackage, boolean ignoreTargetSecurity, ProcessRecord callerApp,
            ActivityRecord resultRecord, ActivityStack resultStack) {
            String callingPackage, boolean ignoreTargetSecurity, boolean launchingInTask,
            ProcessRecord callerApp, ActivityRecord resultRecord, ActivityStack resultStack) {
        final boolean isCallerRecents = mService.getRecentTasks() != null &&
                mService.getRecentTasks().isCallerRecents(callingUid);
        final int startAnyPerm = mService.checkPermission(START_ANY_ACTIVITY, callingPid,
                callingUid);
        if (startAnyPerm == PERMISSION_GRANTED) {
        if (startAnyPerm == PERMISSION_GRANTED || (isCallerRecents && launchingInTask)) {
            // If the caller has START_ANY_ACTIVITY, ignore all checks below. In addition, if the
            // caller is the recents component and we are specifically starting an activity in an
            // existing task, then also allow the activity to be fully relaunched.
            return true;
        }
        final int componentRestriction = getComponentRestrictionForCallingPackage(
+1 −1
Original line number Diff line number Diff line
@@ -713,7 +713,7 @@ class ActivityStarter {

        boolean abort = !mSupervisor.checkStartAnyActivityPermission(intent, aInfo, resultWho,
                requestCode, callingPid, callingUid, callingPackage, ignoreTargetSecurity,
                callerApp, resultRecord, resultStack);
                inTask != null, callerApp, resultRecord, resultStack);
        abort |= !mService.mIntentFirewall.checkStartActivity(intent, callingUid,
                callingPid, resolvedType, aInfo.applicationInfo);

+2 −2
Original line number Diff line number Diff line
@@ -243,7 +243,7 @@ public class ActivityStarterTests extends ActivityTestsBase {
        if (containsConditions(preconditions,PRECONDITION_CANNOT_START_ANY_ACTIVITY)) {
            doReturn(false).when(service.mStackSupervisor).checkStartAnyActivityPermission(
                    any(), any(), any(), anyInt(), anyInt(), anyInt(), any(),
                    anyBoolean(), any(), any(), any());
                    anyBoolean(), anyBoolean(), any(), any(), any());
        }

        try {
@@ -302,7 +302,7 @@ public class ActivityStarterTests extends ActivityTestsBase {
        // always allow test to start activity.
        doReturn(true).when(mService.mStackSupervisor).checkStartAnyActivityPermission(
                any(), any(), any(), anyInt(), anyInt(), anyInt(), any(),
                anyBoolean(), any(), any(), any());
                anyBoolean(), anyBoolean(), any(), any(), any());

        // instrument the stack and task used.
        final ActivityStack stack = mService.mStackSupervisor.getDefaultDisplay().createStack(