Loading services/core/java/com/android/server/wm/ActivityStarter.java +17 −13 Original line number Diff line number Diff line Loading @@ -840,7 +840,7 @@ class ActivityStarter { final int startFlags = request.startFlags; final SafeActivityOptions options = request.activityOptions; Task inTask = request.inTask; mInTaskFragment = request.inTaskFragment; TaskFragment inTaskFragment = request.inTaskFragment; int err = ActivityManager.START_SUCCESS; // Pull the optional Ephemeral Installer-only bundle out of the options early. Loading Loading @@ -1181,8 +1181,8 @@ class ActivityStarter { } mLastStartActivityResult = startActivityUnchecked(r, sourceRecord, voiceSession, request.voiceInteractor, startFlags, true /* doResume */, checkedOptions, inTask, restrictedBgActivity, intentGrants); request.voiceInteractor, startFlags, true /* doResume */, checkedOptions, inTask, inTaskFragment, restrictedBgActivity, intentGrants); if (request.outActivity != null) { request.outActivity[0] = mLastStartActivityRecord; Loading Loading @@ -1540,7 +1540,8 @@ class ActivityStarter { private int startActivityUnchecked(final ActivityRecord r, ActivityRecord sourceRecord, IVoiceInteractionSession voiceSession, IVoiceInteractor voiceInteractor, int startFlags, boolean doResume, ActivityOptions options, Task inTask, boolean restrictedBgActivity, NeededUriGrants intentGrants) { TaskFragment inTaskFragment, boolean restrictedBgActivity, NeededUriGrants intentGrants) { int result = START_CANCELED; final Task startedActivityRootTask; Loading @@ -1565,7 +1566,8 @@ class ActivityStarter { mService.deferWindowLayout(); Trace.traceBegin(Trace.TRACE_TAG_WINDOW_MANAGER, "startActivityInner"); result = startActivityInner(r, sourceRecord, voiceSession, voiceInteractor, startFlags, doResume, options, inTask, restrictedBgActivity, intentGrants); startFlags, doResume, options, inTask, inTaskFragment, restrictedBgActivity, intentGrants); } finally { Trace.traceEnd(Trace.TRACE_TAG_WINDOW_MANAGER); startedActivityRootTask = handleStartResult(r, result); Loading Loading @@ -1668,9 +1670,10 @@ class ActivityStarter { int startActivityInner(final ActivityRecord r, ActivityRecord sourceRecord, IVoiceInteractionSession voiceSession, IVoiceInteractor voiceInteractor, int startFlags, boolean doResume, ActivityOptions options, Task inTask, boolean restrictedBgActivity, NeededUriGrants intentGrants) { setInitialState(r, options, inTask, doResume, startFlags, sourceRecord, voiceSession, voiceInteractor, restrictedBgActivity); TaskFragment inTaskFragment, boolean restrictedBgActivity, NeededUriGrants intentGrants) { setInitialState(r, options, inTask, inTaskFragment, doResume, startFlags, sourceRecord, voiceSession, voiceInteractor, restrictedBgActivity); computeLaunchingTaskFlags(); Loading Loading @@ -2238,9 +2241,9 @@ class ActivityStarter { } private void setInitialState(ActivityRecord r, ActivityOptions options, Task inTask, boolean doResume, int startFlags, ActivityRecord sourceRecord, IVoiceInteractionSession voiceSession, IVoiceInteractor voiceInteractor, boolean restrictedBgActivity) { TaskFragment inTaskFragment, boolean doResume, int startFlags, ActivityRecord sourceRecord, IVoiceInteractionSession voiceSession, IVoiceInteractor voiceInteractor, boolean restrictedBgActivity) { reset(false /* clearRequest */); mStartActivity = r; Loading Loading @@ -2343,6 +2346,7 @@ class ActivityStarter { Slog.w(TAG, "Starting activity in task not in recents: " + inTask); mInTask = null; } mInTaskFragment = inTaskFragment; mStartFlags = startFlags; // If the onlyIfNeeded flag is set, then we can do this if the activity being launched Loading services/tests/wmtests/src/com/android/server/wm/ActivityStarterTests.java +26 −0 Original line number Diff line number Diff line Loading @@ -1135,6 +1135,7 @@ public class ActivityStarterTests extends WindowTestsBase { /* doResume */true, /* options */null, /* inTask */null, /* inTaskFragment */ null, /* restrictedBgActivity */false, /* intentGrants */null); Loading @@ -1144,6 +1145,31 @@ public class ActivityStarterTests extends WindowTestsBase { assertTrue(targetRecord.mVisibleRequested); } @Test public void testStartActivityInner_inTaskFragment() { final ActivityStarter starter = prepareStarter(0, false); final ActivityRecord targetRecord = new ActivityBuilder(mAtm).build(); final ActivityRecord sourceRecord = new ActivityBuilder(mAtm).setCreateTask(true).build(); final TaskFragment taskFragment = new TaskFragment(mAtm, sourceRecord.token, true /* createdByOrganizer */); sourceRecord.getTask().addChild(taskFragment, POSITION_TOP); starter.startActivityInner( /* r */targetRecord, /* sourceRecord */ sourceRecord, /* voiceSession */null, /* voiceInteractor */ null, /* startFlags */ 0, /* doResume */true, /* options */null, /* inTask */null, /* inTaskFragment */ taskFragment, /* restrictedBgActivity */false, /* intentGrants */null); assertTrue(taskFragment.hasChild()); } @Test public void testLaunchCookie_newAndExistingTask() { final ActivityStarter starter = prepareStarter(0, false); Loading Loading
services/core/java/com/android/server/wm/ActivityStarter.java +17 −13 Original line number Diff line number Diff line Loading @@ -840,7 +840,7 @@ class ActivityStarter { final int startFlags = request.startFlags; final SafeActivityOptions options = request.activityOptions; Task inTask = request.inTask; mInTaskFragment = request.inTaskFragment; TaskFragment inTaskFragment = request.inTaskFragment; int err = ActivityManager.START_SUCCESS; // Pull the optional Ephemeral Installer-only bundle out of the options early. Loading Loading @@ -1181,8 +1181,8 @@ class ActivityStarter { } mLastStartActivityResult = startActivityUnchecked(r, sourceRecord, voiceSession, request.voiceInteractor, startFlags, true /* doResume */, checkedOptions, inTask, restrictedBgActivity, intentGrants); request.voiceInteractor, startFlags, true /* doResume */, checkedOptions, inTask, inTaskFragment, restrictedBgActivity, intentGrants); if (request.outActivity != null) { request.outActivity[0] = mLastStartActivityRecord; Loading Loading @@ -1540,7 +1540,8 @@ class ActivityStarter { private int startActivityUnchecked(final ActivityRecord r, ActivityRecord sourceRecord, IVoiceInteractionSession voiceSession, IVoiceInteractor voiceInteractor, int startFlags, boolean doResume, ActivityOptions options, Task inTask, boolean restrictedBgActivity, NeededUriGrants intentGrants) { TaskFragment inTaskFragment, boolean restrictedBgActivity, NeededUriGrants intentGrants) { int result = START_CANCELED; final Task startedActivityRootTask; Loading @@ -1565,7 +1566,8 @@ class ActivityStarter { mService.deferWindowLayout(); Trace.traceBegin(Trace.TRACE_TAG_WINDOW_MANAGER, "startActivityInner"); result = startActivityInner(r, sourceRecord, voiceSession, voiceInteractor, startFlags, doResume, options, inTask, restrictedBgActivity, intentGrants); startFlags, doResume, options, inTask, inTaskFragment, restrictedBgActivity, intentGrants); } finally { Trace.traceEnd(Trace.TRACE_TAG_WINDOW_MANAGER); startedActivityRootTask = handleStartResult(r, result); Loading Loading @@ -1668,9 +1670,10 @@ class ActivityStarter { int startActivityInner(final ActivityRecord r, ActivityRecord sourceRecord, IVoiceInteractionSession voiceSession, IVoiceInteractor voiceInteractor, int startFlags, boolean doResume, ActivityOptions options, Task inTask, boolean restrictedBgActivity, NeededUriGrants intentGrants) { setInitialState(r, options, inTask, doResume, startFlags, sourceRecord, voiceSession, voiceInteractor, restrictedBgActivity); TaskFragment inTaskFragment, boolean restrictedBgActivity, NeededUriGrants intentGrants) { setInitialState(r, options, inTask, inTaskFragment, doResume, startFlags, sourceRecord, voiceSession, voiceInteractor, restrictedBgActivity); computeLaunchingTaskFlags(); Loading Loading @@ -2238,9 +2241,9 @@ class ActivityStarter { } private void setInitialState(ActivityRecord r, ActivityOptions options, Task inTask, boolean doResume, int startFlags, ActivityRecord sourceRecord, IVoiceInteractionSession voiceSession, IVoiceInteractor voiceInteractor, boolean restrictedBgActivity) { TaskFragment inTaskFragment, boolean doResume, int startFlags, ActivityRecord sourceRecord, IVoiceInteractionSession voiceSession, IVoiceInteractor voiceInteractor, boolean restrictedBgActivity) { reset(false /* clearRequest */); mStartActivity = r; Loading Loading @@ -2343,6 +2346,7 @@ class ActivityStarter { Slog.w(TAG, "Starting activity in task not in recents: " + inTask); mInTask = null; } mInTaskFragment = inTaskFragment; mStartFlags = startFlags; // If the onlyIfNeeded flag is set, then we can do this if the activity being launched Loading
services/tests/wmtests/src/com/android/server/wm/ActivityStarterTests.java +26 −0 Original line number Diff line number Diff line Loading @@ -1135,6 +1135,7 @@ public class ActivityStarterTests extends WindowTestsBase { /* doResume */true, /* options */null, /* inTask */null, /* inTaskFragment */ null, /* restrictedBgActivity */false, /* intentGrants */null); Loading @@ -1144,6 +1145,31 @@ public class ActivityStarterTests extends WindowTestsBase { assertTrue(targetRecord.mVisibleRequested); } @Test public void testStartActivityInner_inTaskFragment() { final ActivityStarter starter = prepareStarter(0, false); final ActivityRecord targetRecord = new ActivityBuilder(mAtm).build(); final ActivityRecord sourceRecord = new ActivityBuilder(mAtm).setCreateTask(true).build(); final TaskFragment taskFragment = new TaskFragment(mAtm, sourceRecord.token, true /* createdByOrganizer */); sourceRecord.getTask().addChild(taskFragment, POSITION_TOP); starter.startActivityInner( /* r */targetRecord, /* sourceRecord */ sourceRecord, /* voiceSession */null, /* voiceInteractor */ null, /* startFlags */ 0, /* doResume */true, /* options */null, /* inTask */null, /* inTaskFragment */ taskFragment, /* restrictedBgActivity */false, /* intentGrants */null); assertTrue(taskFragment.hasChild()); } @Test public void testLaunchCookie_newAndExistingTask() { final ActivityStarter starter = prepareStarter(0, false); Loading