Sends TaskFragment info before scheduling activity launch
Otherwise, the app developers are not able to know whether the activity is in split while activity created. Bug: 200303250 Test: run demo app Change-Id: I42fa20280db0158dcb5cfb8ece1f74e66b246ed2
This commit is contained in:
@@ -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(
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user