Merge "Do not change created-by-organizer task to different organizer" into tm-dev
This commit is contained in:
@@ -1175,7 +1175,7 @@ class Task extends TaskFragment {
|
|||||||
// Call this again after super onParentChanged in-case the surface wasn't created yet
|
// Call this again after super onParentChanged in-case the surface wasn't created yet
|
||||||
// (happens when the task is first inserted into the hierarchy). It's a no-op if it
|
// (happens when the task is first inserted into the hierarchy). It's a no-op if it
|
||||||
// already ran fully within super.onParentChanged
|
// already ran fully within super.onParentChanged
|
||||||
updateTaskOrganizerState(false /* forceUpdate */);
|
updateTaskOrganizerState();
|
||||||
|
|
||||||
// TODO(b/168037178): The check for null display content and setting it to null doesn't
|
// TODO(b/168037178): The check for null display content and setting it to null doesn't
|
||||||
// really make sense here...
|
// really make sense here...
|
||||||
@@ -1951,7 +1951,7 @@ class Task extends TaskFragment {
|
|||||||
}
|
}
|
||||||
|
|
||||||
saveLaunchingStateIfNeeded();
|
saveLaunchingStateIfNeeded();
|
||||||
final boolean taskOrgChanged = updateTaskOrganizerState(false /* forceUpdate */);
|
final boolean taskOrgChanged = updateTaskOrganizerState();
|
||||||
if (taskOrgChanged) {
|
if (taskOrgChanged) {
|
||||||
updateSurfacePosition(getSyncTransaction());
|
updateSurfacePosition(getSyncTransaction());
|
||||||
if (!isOrganized()) {
|
if (!isOrganized()) {
|
||||||
@@ -4269,21 +4269,18 @@ class Task extends TaskFragment {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean updateTaskOrganizerState(boolean forceUpdate) {
|
boolean updateTaskOrganizerState() {
|
||||||
return updateTaskOrganizerState(forceUpdate, false /* skipTaskAppeared */);
|
return updateTaskOrganizerState(false /* skipTaskAppeared */);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called when the task state changes (ie. from windowing mode change) an the task organizer
|
* Called when the task state changes (ie. from windowing mode change) an the task organizer
|
||||||
* state should also be updated.
|
* state should also be updated.
|
||||||
*
|
*
|
||||||
* @param forceUpdate Updates the task organizer to the one currently specified in the task
|
|
||||||
* org controller for the task's windowing mode, ignoring the cached
|
|
||||||
* windowing mode checks.
|
|
||||||
* @param skipTaskAppeared Skips calling taskAppeared for the new organizer if it has changed
|
* @param skipTaskAppeared Skips calling taskAppeared for the new organizer if it has changed
|
||||||
* @return {@code true} if task organizer changed.
|
* @return {@code true} if task organizer changed.
|
||||||
*/
|
*/
|
||||||
boolean updateTaskOrganizerState(boolean forceUpdate, boolean skipTaskAppeared) {
|
boolean updateTaskOrganizerState(boolean skipTaskAppeared) {
|
||||||
if (getSurfaceControl() == null) {
|
if (getSurfaceControl() == null) {
|
||||||
// Can't call onTaskAppeared without a surfacecontrol, so defer this until next one
|
// Can't call onTaskAppeared without a surfacecontrol, so defer this until next one
|
||||||
// is created.
|
// is created.
|
||||||
@@ -4295,7 +4292,10 @@ class Task extends TaskFragment {
|
|||||||
|
|
||||||
final TaskOrganizerController controller = mWmService.mAtmService.mTaskOrganizerController;
|
final TaskOrganizerController controller = mWmService.mAtmService.mTaskOrganizerController;
|
||||||
final ITaskOrganizer organizer = controller.getTaskOrganizer();
|
final ITaskOrganizer organizer = controller.getTaskOrganizer();
|
||||||
if (!forceUpdate && mTaskOrganizer == organizer) {
|
// Do not change to different organizer if the task is created by organizer because only
|
||||||
|
// the creator knows how to manage it.
|
||||||
|
if (mCreatedByOrganizer && mTaskOrganizer != null && organizer != null
|
||||||
|
&& mTaskOrganizer != organizer) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return setTaskOrganizer(organizer, skipTaskAppeared);
|
return setTaskOrganizer(organizer, skipTaskAppeared);
|
||||||
|
|||||||
@@ -257,7 +257,7 @@ class TaskOrganizerController extends ITaskOrganizerController.Stub {
|
|||||||
// organizer is disposed off to avoid inconsistent behavior.
|
// organizer is disposed off to avoid inconsistent behavior.
|
||||||
t.removeImmediately();
|
t.removeImmediately();
|
||||||
} else {
|
} else {
|
||||||
t.updateTaskOrganizerState(true /* forceUpdate */);
|
t.updateTaskOrganizerState();
|
||||||
}
|
}
|
||||||
if (mOrganizedTasks.contains(t)) {
|
if (mOrganizedTasks.contains(t)) {
|
||||||
// updateTaskOrganizerState should remove the task from the list, but still
|
// updateTaskOrganizerState should remove the task from the list, but still
|
||||||
@@ -381,8 +381,7 @@ class TaskOrganizerController extends ITaskOrganizerController.Stub {
|
|||||||
final TaskOrganizerState state = mTaskOrganizerStates.get(organizer.asBinder());
|
final TaskOrganizerState state = mTaskOrganizerStates.get(organizer.asBinder());
|
||||||
mService.mRootWindowContainer.forAllTasks((task) -> {
|
mService.mRootWindowContainer.forAllTasks((task) -> {
|
||||||
boolean returnTask = !task.mCreatedByOrganizer;
|
boolean returnTask = !task.mCreatedByOrganizer;
|
||||||
task.updateTaskOrganizerState(true /* forceUpdate */,
|
task.updateTaskOrganizerState(returnTask /* skipTaskAppeared */);
|
||||||
returnTask /* skipTaskAppeared */);
|
|
||||||
if (returnTask) {
|
if (returnTask) {
|
||||||
SurfaceControl outSurfaceControl = state.addTaskWithoutCallback(task,
|
SurfaceControl outSurfaceControl = state.addTaskWithoutCallback(task,
|
||||||
"TaskOrganizerController.registerTaskOrganizer");
|
"TaskOrganizerController.registerTaskOrganizer");
|
||||||
|
|||||||
@@ -370,13 +370,16 @@ public class WindowOrganizerTests extends WindowTestsBase {
|
|||||||
// Ensure events dispatch to organizer.
|
// Ensure events dispatch to organizer.
|
||||||
mWm.mAtmService.mTaskOrganizerController.dispatchPendingEvents();
|
mWm.mAtmService.mTaskOrganizerController.dispatchPendingEvents();
|
||||||
assertContainsTasks(existingTasks2, rootTask);
|
assertContainsTasks(existingTasks2, rootTask);
|
||||||
verify(organizer2, times(1)).onTaskAppeared(any(RunningTaskInfo.class),
|
verify(organizer2, never()).onTaskAppeared(any(RunningTaskInfo.class),
|
||||||
any(SurfaceControl.class));
|
any(SurfaceControl.class));
|
||||||
verify(organizer2, times(0)).onTaskVanished(any());
|
verify(organizer2, times(0)).onTaskVanished(any());
|
||||||
// Removed tasks from the original organizer
|
// The non-CreatedByOrganizer task is removed from the original organizer.
|
||||||
assertTaskVanished(organizer, true /* expectVanished */, rootTask, rootTask2);
|
assertTaskVanished(organizer, true /* expectVanished */, rootTask);
|
||||||
assertTrue(rootTask2.isOrganized());
|
assertEquals(organizer2, rootTask.mTaskOrganizer);
|
||||||
|
// The CreatedByOrganizer task should be still organized by the original organizer.
|
||||||
|
assertEquals(organizer, rootTask2.mTaskOrganizer);
|
||||||
|
|
||||||
|
clearInvocations(organizer);
|
||||||
// Now we unregister the second one, the first one should automatically be reregistered
|
// Now we unregister the second one, the first one should automatically be reregistered
|
||||||
// so we verify that it's now seeing changes.
|
// so we verify that it's now seeing changes.
|
||||||
mWm.mAtmService.mTaskOrganizerController.unregisterTaskOrganizer(organizer2);
|
mWm.mAtmService.mTaskOrganizerController.unregisterTaskOrganizer(organizer2);
|
||||||
@@ -385,9 +388,13 @@ public class WindowOrganizerTests extends WindowTestsBase {
|
|||||||
|
|
||||||
verify(organizer, times(2))
|
verify(organizer, times(2))
|
||||||
.onTaskAppeared(any(RunningTaskInfo.class), any(SurfaceControl.class));
|
.onTaskAppeared(any(RunningTaskInfo.class), any(SurfaceControl.class));
|
||||||
assertFalse(rootTask2.isOrganized());
|
|
||||||
assertTaskVanished(organizer2, true /* expectVanished */, rootTask,
|
// Unregister the first one. The CreatedByOrganizer task created by it must be removed.
|
||||||
rootTask2);
|
mWm.mAtmService.mTaskOrganizerController.unregisterTaskOrganizer(organizer);
|
||||||
|
assertFalse(rootTask2.isAttached());
|
||||||
|
assertFalse(task2.isAttached());
|
||||||
|
// Normal task should keep.
|
||||||
|
assertTrue(task.isAttached());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|||||||
Reference in New Issue
Block a user