Merge "Fix the target TaskFragment lost in ActivityStarter" into sc-v2-dev
This commit is contained in:
@@ -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.
|
||||
@@ -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;
|
||||
@@ -1538,9 +1538,10 @@ class ActivityStarter {
|
||||
* Here also ensures that the starting activity is removed if the start wasn't successful.
|
||||
*/
|
||||
private int startActivityUnchecked(final ActivityRecord r, ActivityRecord sourceRecord,
|
||||
IVoiceInteractionSession voiceSession, IVoiceInteractor voiceInteractor,
|
||||
int startFlags, boolean doResume, ActivityOptions options, Task inTask,
|
||||
boolean restrictedBgActivity, NeededUriGrants intentGrants) {
|
||||
IVoiceInteractionSession voiceSession, IVoiceInteractor voiceInteractor,
|
||||
int startFlags, boolean doResume, ActivityOptions options, Task inTask,
|
||||
TaskFragment inTaskFragment, boolean restrictedBgActivity,
|
||||
NeededUriGrants intentGrants) {
|
||||
int result = START_CANCELED;
|
||||
final Task startedActivityRootTask;
|
||||
|
||||
@@ -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);
|
||||
@@ -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();
|
||||
|
||||
@@ -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;
|
||||
@@ -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
|
||||
|
||||
@@ -1135,6 +1135,7 @@ public class ActivityStarterTests extends WindowTestsBase {
|
||||
/* doResume */true,
|
||||
/* options */null,
|
||||
/* inTask */null,
|
||||
/* inTaskFragment */ null,
|
||||
/* restrictedBgActivity */false,
|
||||
/* intentGrants */null);
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user