Merge "Sends TaskFragment info before scheduling activity launch" into sc-v2-dev am: 2496d18f31

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/15897576

Change-Id: I8852bb8755d7cd0cec9ba7c4f8f03c7b010ddd1b
This commit is contained in:
Louis Chang
2021-09-30 07:26:29 +00:00
committed by Automerger Merge Worker
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()); 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. // Create activity launch transaction.
final ClientTransaction clientTransaction = ClientTransaction.obtain( final ClientTransaction clientTransaction = ClientTransaction.obtain(

View File

@@ -505,11 +505,30 @@ public class TaskFragmentOrganizerController extends ITaskFragmentOrganizerContr
} }
for (int i = 0, n = mPendingTaskFragmentEvents.size(); i < n; i++) { for (int i = 0, n = mPendingTaskFragmentEvents.size(); i < n; i++) {
PendingTaskFragmentEvent event = mPendingTaskFragmentEvents.get(i); PendingTaskFragmentEvent event = mPendingTaskFragmentEvents.get(i);
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 ITaskFragmentOrganizer taskFragmentOrg = event.mTaskFragmentOrg;
final TaskFragment taskFragment = event.mTaskFragment; final TaskFragment taskFragment = event.mTaskFragment;
final TaskFragmentOrganizerState state = final TaskFragmentOrganizerState state =
mTaskFragmentOrganizerState.get(taskFragmentOrg.asBinder()); mTaskFragmentOrganizerState.get(taskFragmentOrg.asBinder());
if (state == null) continue; if (state == null) {
return;
}
switch (event.mEventType) { switch (event.mEventType) {
case PendingTaskFragmentEvent.EVENT_APPEARED: case PendingTaskFragmentEvent.EVENT_APPEARED:
state.onTaskFragmentAppeared(taskFragmentOrg, taskFragment); state.onTaskFragmentAppeared(taskFragmentOrg, taskFragment);
@@ -528,6 +547,4 @@ public class TaskFragmentOrganizerController extends ITaskFragmentOrganizerContr
event.mException); event.mException);
} }
} }
mPendingTaskFragmentEvents.clear();
}
} }