Merge "Fix delay on TYPE_TASK_FRAGMENT_VANISHED" into tm-qpr-dev am: 05dbbf292f
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/20731415 Change-Id: Iadfffd5c4d053153723b913d0d4f7cb70bad33af Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -227,10 +227,15 @@ class TaskFragment extends WindowContainer<WindowContainer> {
|
||||
private TaskFragment mCompanionTaskFragment;
|
||||
|
||||
/**
|
||||
* Prevents duplicate calls to onTaskAppeared.
|
||||
* Prevents duplicate calls to onTaskFragmentAppeared.
|
||||
*/
|
||||
boolean mTaskFragmentAppearedSent;
|
||||
|
||||
/**
|
||||
* Prevents unnecessary callbacks after onTaskFragmentVanished.
|
||||
*/
|
||||
boolean mTaskFragmentVanishedSent;
|
||||
|
||||
/**
|
||||
* The last running activity of the TaskFragment was finished due to clear task while launching
|
||||
* an activity in the Task.
|
||||
|
||||
@@ -553,6 +553,9 @@ public class TaskFragmentOrganizerController extends ITaskFragmentOrganizerContr
|
||||
|
||||
void onTaskFragmentAppeared(@NonNull ITaskFragmentOrganizer organizer,
|
||||
@NonNull TaskFragment taskFragment) {
|
||||
if (taskFragment.mTaskFragmentVanishedSent) {
|
||||
return;
|
||||
}
|
||||
if (taskFragment.getTask() == null) {
|
||||
Slog.w(TAG, "onTaskFragmentAppeared failed because it is not attached tf="
|
||||
+ taskFragment);
|
||||
@@ -574,6 +577,9 @@ public class TaskFragmentOrganizerController extends ITaskFragmentOrganizerContr
|
||||
|
||||
void onTaskFragmentInfoChanged(@NonNull ITaskFragmentOrganizer organizer,
|
||||
@NonNull TaskFragment taskFragment) {
|
||||
if (taskFragment.mTaskFragmentVanishedSent) {
|
||||
return;
|
||||
}
|
||||
validateAndGetState(organizer);
|
||||
if (!taskFragment.mTaskFragmentAppearedSent) {
|
||||
// Skip if TaskFragment still not appeared.
|
||||
@@ -586,10 +592,6 @@ public class TaskFragmentOrganizerController extends ITaskFragmentOrganizerContr
|
||||
.setTaskFragment(taskFragment)
|
||||
.build();
|
||||
} else {
|
||||
if (pendingEvent.mEventType == PendingTaskFragmentEvent.EVENT_VANISHED) {
|
||||
// Skipped the info changed event if vanished event is pending.
|
||||
return;
|
||||
}
|
||||
// Remove and add for re-ordering.
|
||||
removePendingEvent(pendingEvent);
|
||||
// Reset the defer time when TaskFragment is changed, so that it can check again if
|
||||
@@ -602,6 +604,10 @@ public class TaskFragmentOrganizerController extends ITaskFragmentOrganizerContr
|
||||
|
||||
void onTaskFragmentVanished(@NonNull ITaskFragmentOrganizer organizer,
|
||||
@NonNull TaskFragment taskFragment) {
|
||||
if (taskFragment.mTaskFragmentVanishedSent) {
|
||||
return;
|
||||
}
|
||||
taskFragment.mTaskFragmentVanishedSent = true;
|
||||
final TaskFragmentOrganizerState state = validateAndGetState(organizer);
|
||||
final List<PendingTaskFragmentEvent> pendingEvents = mPendingTaskFragmentEvents
|
||||
.get(organizer.asBinder());
|
||||
@@ -617,20 +623,18 @@ public class TaskFragmentOrganizerController extends ITaskFragmentOrganizerContr
|
||||
.setTaskFragment(taskFragment)
|
||||
.build());
|
||||
state.removeTaskFragment(taskFragment);
|
||||
// Make sure the vanished event will be dispatched if there are no other changes.
|
||||
mAtmService.mWindowManager.mWindowPlacerLocked.requestTraversal();
|
||||
}
|
||||
|
||||
void onTaskFragmentError(@NonNull ITaskFragmentOrganizer organizer,
|
||||
@Nullable IBinder errorCallbackToken, @Nullable TaskFragment taskFragment,
|
||||
int opType, @NonNull Throwable exception) {
|
||||
validateAndGetState(organizer);
|
||||
Slog.w(TAG, "onTaskFragmentError ", exception);
|
||||
final PendingTaskFragmentEvent vanishedEvent = taskFragment != null
|
||||
? getPendingTaskFragmentEvent(taskFragment, PendingTaskFragmentEvent.EVENT_VANISHED)
|
||||
: null;
|
||||
if (vanishedEvent != null) {
|
||||
// No need to notify if the TaskFragment has been removed.
|
||||
if (taskFragment != null && taskFragment.mTaskFragmentVanishedSent) {
|
||||
return;
|
||||
}
|
||||
validateAndGetState(organizer);
|
||||
Slog.w(TAG, "onTaskFragmentError ", exception);
|
||||
addPendingEvent(new PendingTaskFragmentEvent.Builder(
|
||||
PendingTaskFragmentEvent.EVENT_ERROR, organizer)
|
||||
.setErrorCallbackToken(errorCallbackToken)
|
||||
|
||||
@@ -247,6 +247,7 @@ public class TaskFragmentOrganizerControllerTest extends WindowTestsBase {
|
||||
mController.onTaskFragmentVanished(mTaskFragment.getTaskFragmentOrganizer(), mTaskFragment);
|
||||
mController.dispatchPendingEvents();
|
||||
|
||||
assertTrue(mTaskFragment.mTaskFragmentVanishedSent);
|
||||
assertTaskFragmentVanishedTransaction();
|
||||
}
|
||||
|
||||
@@ -259,10 +260,12 @@ public class TaskFragmentOrganizerControllerTest extends WindowTestsBase {
|
||||
mController.onTaskFragmentVanished(mTaskFragment.getTaskFragmentOrganizer(), mTaskFragment);
|
||||
mController.dispatchPendingEvents();
|
||||
|
||||
assertTrue(mTaskFragment.mTaskFragmentVanishedSent);
|
||||
assertTaskFragmentVanishedTransaction();
|
||||
|
||||
// Not trigger onTaskFragmentInfoChanged.
|
||||
// Call onTaskFragmentAppeared before calling onTaskFragmentInfoChanged.
|
||||
mTaskFragment.mTaskFragmentVanishedSent = false;
|
||||
mController.onTaskFragmentAppeared(mTaskFragment.getTaskFragmentOrganizer(), mTaskFragment);
|
||||
mController.dispatchPendingEvents();
|
||||
clearInvocations(mOrganizer);
|
||||
|
||||
Reference in New Issue
Block a user