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

Commit c9804e7b authored by Winson Chung's avatar Winson Chung
Browse files

Allow recents component to launch non-exported activities

- When relaunching an activity in an existing task, allow the recents
  component to launch all activity including those that are not exported
  (since the recents component can not have START_ANY_ACTIVITY).

Bug: 73068266
Test: Open facebook, hit back to end the task, and try and relaunch from
      Overview

Change-Id: I45e7ce339f83aadfb5a7faf5af51df97dd1414a5
parent 869c6f55
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(