Merge "Sends TaskFragment info before scheduling activity launch" into sc-v2-dev

This commit is contained in:
Louis Chang
2021-09-30 07:13:13 +00:00
committed by Android (Google) Code Review
2 changed files with 45 additions and 22 deletions

View File

@@ -841,6 +841,12 @@ public class ActivityTaskSupervisor implements RecentTasks.Callbacks {
logIfTransactionTooLarge(r.intent, r.getSavedState());
if (r.isEmbedded()) {
// Sending TaskFragmentInfo to client to ensure the info is updated before
// the activity creation.
mService.mTaskFragmentOrganizerController.dispatchPendingInfoChangedEvent(
r.getOrganizedTaskFragment());
}
// Create activity launch transaction.
final ClientTransaction clientTransaction = ClientTransaction.obtain(

View File

@@ -505,29 +505,46 @@ public class TaskFragmentOrganizerController extends ITaskFragmentOrganizerContr
}
for (int i = 0, n = mPendingTaskFragmentEvents.size(); i < n; i++) {
PendingTaskFragmentEvent event = mPendingTaskFragmentEvents.get(i);
final ITaskFragmentOrganizer taskFragmentOrg = event.mTaskFragmentOrg;
final TaskFragment taskFragment = event.mTaskFragment;
final TaskFragmentOrganizerState state =
mTaskFragmentOrganizerState.get(taskFragmentOrg.asBinder());
if (state == null) continue;
switch (event.mEventType) {
case PendingTaskFragmentEvent.EVENT_APPEARED:
state.onTaskFragmentAppeared(taskFragmentOrg, taskFragment);
break;
case PendingTaskFragmentEvent.EVENT_VANISHED:
state.onTaskFragmentVanished(taskFragmentOrg, taskFragment);
break;
case PendingTaskFragmentEvent.EVENT_INFO_CHANGED:
state.onTaskFragmentInfoChanged(taskFragmentOrg, taskFragment);
break;
case PendingTaskFragmentEvent.EVENT_PARENT_INFO_CHANGED:
state.onTaskFragmentParentInfoChanged(taskFragmentOrg, taskFragment);
break;
case PendingTaskFragmentEvent.EVENT_ERROR:
state.onTaskFragmentError(taskFragmentOrg, event.mErrorCallback,
event.mException);
}
dispatchEvent(event);
}
mPendingTaskFragmentEvents.clear();
}
void dispatchPendingInfoChangedEvent(TaskFragment taskFragment) {
PendingTaskFragmentEvent event = getPendingTaskFragmentEvent(taskFragment,
PendingTaskFragmentEvent.EVENT_INFO_CHANGED);
if (event == null) {
return;
}
dispatchEvent(event);
mPendingTaskFragmentEvents.remove(event);
}
private void dispatchEvent(PendingTaskFragmentEvent event) {
final ITaskFragmentOrganizer taskFragmentOrg = event.mTaskFragmentOrg;
final TaskFragment taskFragment = event.mTaskFragment;
final TaskFragmentOrganizerState state =
mTaskFragmentOrganizerState.get(taskFragmentOrg.asBinder());
if (state == null) {
return;
}
switch (event.mEventType) {
case PendingTaskFragmentEvent.EVENT_APPEARED:
state.onTaskFragmentAppeared(taskFragmentOrg, taskFragment);
break;
case PendingTaskFragmentEvent.EVENT_VANISHED:
state.onTaskFragmentVanished(taskFragmentOrg, taskFragment);
break;
case PendingTaskFragmentEvent.EVENT_INFO_CHANGED:
state.onTaskFragmentInfoChanged(taskFragmentOrg, taskFragment);
break;
case PendingTaskFragmentEvent.EVENT_PARENT_INFO_CHANGED:
state.onTaskFragmentParentInfoChanged(taskFragmentOrg, taskFragment);
break;
case PendingTaskFragmentEvent.EVENT_ERROR:
state.onTaskFragmentError(taskFragmentOrg, event.mErrorCallback,
event.mException);
}
}
}