diff --git a/core/api/test-current.txt b/core/api/test-current.txt index da5b88bbfbf40..19de1a5b0aa6b 100644 --- a/core/api/test-current.txt +++ b/core/api/test-current.txt @@ -3349,12 +3349,17 @@ package android.window { ctor public TaskFragmentOrganizer(@NonNull java.util.concurrent.Executor); method @NonNull public java.util.concurrent.Executor getExecutor(); method @NonNull public android.window.TaskFragmentOrganizerToken getOrganizerToken(); - method public void onTaskFragmentAppeared(@NonNull android.window.TaskFragmentInfo); + method public void onActivityReparentedToTask(@NonNull android.window.WindowContainerTransaction, int, @NonNull android.content.Intent, @NonNull android.os.IBinder); + method @Deprecated public void onTaskFragmentAppeared(@NonNull android.window.TaskFragmentInfo); + method public void onTaskFragmentAppeared(@NonNull android.window.WindowContainerTransaction, @NonNull android.window.TaskFragmentInfo); method @Deprecated public void onTaskFragmentError(@NonNull android.os.IBinder, @NonNull Throwable); - method public void onTaskFragmentError(@NonNull android.os.IBinder, @Nullable android.window.TaskFragmentInfo, int, @NonNull Throwable); - method public void onTaskFragmentInfoChanged(@NonNull android.window.TaskFragmentInfo); - method public void onTaskFragmentParentInfoChanged(@NonNull android.os.IBinder, @NonNull android.content.res.Configuration); - method public void onTaskFragmentVanished(@NonNull android.window.TaskFragmentInfo); + method public void onTaskFragmentError(@NonNull android.window.WindowContainerTransaction, @NonNull android.os.IBinder, @Nullable android.window.TaskFragmentInfo, int, @NonNull Throwable); + method @Deprecated public void onTaskFragmentInfoChanged(@NonNull android.window.TaskFragmentInfo); + method public void onTaskFragmentInfoChanged(@NonNull android.window.WindowContainerTransaction, @NonNull android.window.TaskFragmentInfo); + method @Deprecated public void onTaskFragmentParentInfoChanged(@NonNull android.os.IBinder, @NonNull android.content.res.Configuration); + method public void onTaskFragmentParentInfoChanged(@NonNull android.window.WindowContainerTransaction, int, @NonNull android.content.res.Configuration); + method @Deprecated public void onTaskFragmentVanished(@NonNull android.window.TaskFragmentInfo); + method public void onTaskFragmentVanished(@NonNull android.window.WindowContainerTransaction, @NonNull android.window.TaskFragmentInfo); method @CallSuper public void registerOrganizer(); method @CallSuper public void unregisterOrganizer(); } diff --git a/core/java/android/window/TaskFragmentOrganizer.java b/core/java/android/window/TaskFragmentOrganizer.java index 5372071f7f0e0..c43cf55ce8477 100644 --- a/core/java/android/window/TaskFragmentOrganizer.java +++ b/core/java/android/window/TaskFragmentOrganizer.java @@ -26,6 +26,7 @@ import static android.window.TaskFragmentTransaction.TYPE_TASK_FRAGMENT_VANISHED import android.annotation.CallSuper; import android.annotation.NonNull; import android.annotation.Nullable; +import android.annotation.SuppressLint; import android.annotation.TestApi; import android.content.Intent; import android.content.res.Configuration; @@ -151,23 +152,71 @@ public class TaskFragmentOrganizer extends WindowOrganizer { * Called when a TaskFragment is created and organized by this organizer. * * @param taskFragmentInfo Info of the TaskFragment that is created. + * @deprecated Use {@link #onTaskFragmentAppeared(WindowContainerTransaction, TaskFragmentInfo)} + * instead. */ + @Deprecated public void onTaskFragmentAppeared(@NonNull TaskFragmentInfo taskFragmentInfo) {} + /** + * Called when a TaskFragment is created and organized by this organizer. + * + * @param wct The {@link WindowContainerTransaction} to make any changes with if needed. No + * need to call {@link #applyTransaction} as it will be applied by the caller. + * @param taskFragmentInfo Info of the TaskFragment that is created. + */ + public void onTaskFragmentAppeared(@NonNull WindowContainerTransaction wct, + @NonNull TaskFragmentInfo taskFragmentInfo) { + // TODO(b/240519866): doing so to keep CTS compatibility. Remove in the next release. + onTaskFragmentAppeared(taskFragmentInfo); + } + /** * Called when the status of an organized TaskFragment is changed. * * @param taskFragmentInfo Info of the TaskFragment that is changed. + * @deprecated Use {@link #onTaskFragmentInfoChanged(WindowContainerTransaction, + * TaskFragmentInfo)} instead. */ + @Deprecated public void onTaskFragmentInfoChanged(@NonNull TaskFragmentInfo taskFragmentInfo) {} + /** + * Called when the status of an organized TaskFragment is changed. + * + * @param wct The {@link WindowContainerTransaction} to make any changes with if needed. No + * need to call {@link #applyTransaction} as it will be applied by the caller. + * @param taskFragmentInfo Info of the TaskFragment that is changed. + */ + public void onTaskFragmentInfoChanged(@NonNull WindowContainerTransaction wct, + @NonNull TaskFragmentInfo taskFragmentInfo) { + // TODO(b/240519866): doing so to keep CTS compatibility. Remove in the next release. + onTaskFragmentInfoChanged(taskFragmentInfo); + } + /** * Called when an organized TaskFragment is removed. * * @param taskFragmentInfo Info of the TaskFragment that is removed. + * @deprecated Use {@link #onTaskFragmentVanished(WindowContainerTransaction, + * TaskFragmentInfo)} instead. */ + @Deprecated public void onTaskFragmentVanished(@NonNull TaskFragmentInfo taskFragmentInfo) {} + /** + * Called when an organized TaskFragment is removed. + * + * @param wct The {@link WindowContainerTransaction} to make any changes with if needed. No + * need to call {@link #applyTransaction} as it will be applied by the caller. + * @param taskFragmentInfo Info of the TaskFragment that is removed. + */ + public void onTaskFragmentVanished(@NonNull WindowContainerTransaction wct, + @NonNull TaskFragmentInfo taskFragmentInfo) { + // TODO(b/240519866): doing so to keep CTS compatibility. Remove in the next release. + onTaskFragmentVanished(taskFragmentInfo); + } + /** * Called when the parent leaf Task of organized TaskFragments is changed. * When the leaf Task is changed, the organizer may want to update the TaskFragments in one @@ -176,7 +225,13 @@ public class TaskFragmentOrganizer extends WindowOrganizer { * For case like screen size change, it will trigger onTaskFragmentParentInfoChanged with new * Task bounds, but may not trigger onTaskFragmentInfoChanged because there can be an override * bounds. + * + * @param fragmentToken The parent Task this TaskFragment is changed. + * @param parentConfig Config of the parent Task. + * @deprecated Use {@link #onTaskFragmentParentInfoChanged(WindowContainerTransaction, int, + * Configuration)} instead. */ + @Deprecated public void onTaskFragmentParentInfoChanged( @NonNull IBinder fragmentToken, @NonNull Configuration parentConfig) {} @@ -189,11 +244,13 @@ public class TaskFragmentOrganizer extends WindowOrganizer { * Task bounds, but may not trigger onTaskFragmentInfoChanged because there can be an override * bounds. * + * @param wct The {@link WindowContainerTransaction} to make any changes with if needed. No + * need to call {@link #applyTransaction} as it will be applied by the caller. * @param taskId Id of the parent Task that is changed. * @param parentConfig Config of the parent Task. - * @hide */ - public void onTaskFragmentParentInfoChanged(int taskId, @NonNull Configuration parentConfig) { + public void onTaskFragmentParentInfoChanged(@NonNull WindowContainerTransaction wct, int taskId, + @NonNull Configuration parentConfig) { // TODO(b/240519866): doing so to keep CTS compatibility. Remove in the next release. final List tokens = mTaskIdToFragmentTokens.get(taskId); if (tokens == null || tokens.isEmpty()) { @@ -211,9 +268,8 @@ public class TaskFragmentOrganizer extends WindowOrganizer { * @param errorCallbackToken token set in * {@link WindowContainerTransaction#setErrorCallbackToken(IBinder)} * @param exception exception from the server side. - * - * @deprecated Use {@link #onTaskFragmentError(IBinder, TaskFragmentInfo, int, Throwable)} - * instead. + * @deprecated Use {@link #onTaskFragmentError(WindowContainerTransaction, IBinder, + * TaskFragmentInfo, int, Throwable)} instead. */ @Deprecated public void onTaskFragmentError( @@ -223,6 +279,8 @@ public class TaskFragmentOrganizer extends WindowOrganizer { * Called when the {@link WindowContainerTransaction} created with * {@link WindowContainerTransaction#setErrorCallbackToken(IBinder)} failed on the server side. * + * @param wct The {@link WindowContainerTransaction} to make any changes with if needed. No + * need to call {@link #applyTransaction} as it will be applied by the caller. * @param errorCallbackToken token set in * {@link WindowContainerTransaction#setErrorCallbackToken(IBinder)} * @param taskFragmentInfo The {@link TaskFragmentInfo}. This could be {@code null} if no @@ -231,7 +289,7 @@ public class TaskFragmentOrganizer extends WindowOrganizer { * transaction operation. * @param exception exception from the server side. */ - public void onTaskFragmentError( + public void onTaskFragmentError(@NonNull WindowContainerTransaction wct, @NonNull IBinder errorCallbackToken, @Nullable TaskFragmentInfo taskFragmentInfo, int opType, @NonNull Throwable exception) { // Doing so to keep compatibility. This will be removed in the next release. @@ -244,6 +302,8 @@ public class TaskFragmentOrganizer extends WindowOrganizer { * original Task. In this case, we need to notify the organizer so that it can check if the * Activity matches any split rule. * + * @param wct The {@link WindowContainerTransaction} to make any changes with if needed. No + * need to call {@link #applyTransaction} as it will be applied by the caller. * @param taskId The Task that the activity is reparented to. * @param activityIntent The intent that the activity is original launched with. * @param activityToken If the activity belongs to the same process as the organizer, this @@ -251,20 +311,23 @@ public class TaskFragmentOrganizer extends WindowOrganizer { * different process, the server will generate a temporary token that * the organizer can use to reparent the activity through * {@link WindowContainerTransaction} if needed. - * @hide */ - public void onActivityReparentedToTask(int taskId, @NonNull Intent activityIntent, - @NonNull IBinder activityToken) {} + public void onActivityReparentedToTask(@NonNull WindowContainerTransaction wct, + int taskId, @NonNull Intent activityIntent, @NonNull IBinder activityToken) {} /** * Called when the transaction is ready so that the organizer can update the TaskFragments based * on the changes in transaction. + * Note: {@link WindowOrganizer#applyTransaction} permission requirement is conditional for + * {@link TaskFragmentOrganizer}. + * @see com.android.server.wm.WindowOrganizerController#enforceTaskPermission * @hide */ + @SuppressLint("AndroidFrameworkRequiresPermission") public void onTransactionReady(@NonNull TaskFragmentTransaction transaction) { + final WindowContainerTransaction wct = new WindowContainerTransaction(); final List changes = transaction.getChanges(); for (TaskFragmentTransaction.Change change : changes) { - // TODO(b/240519866): apply all changes in one WCT. final int taskId = change.getTaskId(); switch (change.getType()) { case TYPE_TASK_FRAGMENT_APPEARED: @@ -277,10 +340,10 @@ public class TaskFragmentOrganizer extends WindowOrganizer { onTaskFragmentParentInfoChanged(change.getTaskFragmentToken(), mTaskIdToConfigurations.get(taskId)); - onTaskFragmentAppeared(change.getTaskFragmentInfo()); + onTaskFragmentAppeared(wct, change.getTaskFragmentInfo()); break; case TYPE_TASK_FRAGMENT_INFO_CHANGED: - onTaskFragmentInfoChanged(change.getTaskFragmentInfo()); + onTaskFragmentInfoChanged(wct, change.getTaskFragmentInfo()); break; case TYPE_TASK_FRAGMENT_VANISHED: // TODO(b/240519866): doing so to keep CTS compatibility. Remove in the next @@ -294,18 +357,19 @@ public class TaskFragmentOrganizer extends WindowOrganizer { } } - onTaskFragmentVanished(change.getTaskFragmentInfo()); + onTaskFragmentVanished(wct, change.getTaskFragmentInfo()); break; case TYPE_TASK_FRAGMENT_PARENT_INFO_CHANGED: // TODO(b/240519866): doing so to keep CTS compatibility. Remove in the next // release. mTaskIdToConfigurations.put(taskId, change.getTaskConfiguration()); - onTaskFragmentParentInfoChanged(taskId, change.getTaskConfiguration()); + onTaskFragmentParentInfoChanged(wct, taskId, change.getTaskConfiguration()); break; case TYPE_TASK_FRAGMENT_ERROR: final Bundle errorBundle = change.getErrorBundle(); onTaskFragmentError( + wct, change.getErrorCallbackToken(), errorBundle.getParcelable( KEY_ERROR_CALLBACK_TASK_FRAGMENT_INFO, TaskFragmentInfo.class), @@ -315,6 +379,7 @@ public class TaskFragmentOrganizer extends WindowOrganizer { break; case TYPE_ACTIVITY_REPARENTED_TO_TASK: onActivityReparentedToTask( + wct, change.getTaskId(), change.getActivityIntent(), change.getActivityToken()); @@ -324,6 +389,8 @@ public class TaskFragmentOrganizer extends WindowOrganizer { "Unknown TaskFragmentEvent=" + change.getType()); } } + // TODO(b/240519866): notify TaskFragmentOrganizerController that the transition is done. + applyTransaction(wct); } @Override diff --git a/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/JetpackTaskFragmentOrganizer.java b/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/JetpackTaskFragmentOrganizer.java index 9fb7d1988772f..1335e5ea051f5 100644 --- a/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/JetpackTaskFragmentOrganizer.java +++ b/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/JetpackTaskFragmentOrganizer.java @@ -271,56 +271,49 @@ class JetpackTaskFragmentOrganizer extends TaskFragmentOrganizer { } @Override - public void onTaskFragmentAppeared(@NonNull TaskFragmentInfo taskFragmentInfo) { - final WindowContainerTransaction wct = new WindowContainerTransaction(); + public void onTaskFragmentAppeared(@NonNull WindowContainerTransaction wct, + @NonNull TaskFragmentInfo taskFragmentInfo) { final IBinder fragmentToken = taskFragmentInfo.getFragmentToken(); mFragmentInfos.put(fragmentToken, taskFragmentInfo); mCallback.onTaskFragmentAppeared(wct, taskFragmentInfo); - applyTransaction(wct); } @Override - public void onTaskFragmentInfoChanged(@NonNull TaskFragmentInfo taskFragmentInfo) { - final WindowContainerTransaction wct = new WindowContainerTransaction(); + public void onTaskFragmentInfoChanged(@NonNull WindowContainerTransaction wct, + @NonNull TaskFragmentInfo taskFragmentInfo) { final IBinder fragmentToken = taskFragmentInfo.getFragmentToken(); mFragmentInfos.put(fragmentToken, taskFragmentInfo); mCallback.onTaskFragmentInfoChanged(wct, taskFragmentInfo); - applyTransaction(wct); } @Override - public void onTaskFragmentVanished(@NonNull TaskFragmentInfo taskFragmentInfo) { - final WindowContainerTransaction wct = new WindowContainerTransaction(); + public void onTaskFragmentVanished(@NonNull WindowContainerTransaction wct, + @NonNull TaskFragmentInfo taskFragmentInfo) { mFragmentInfos.remove(taskFragmentInfo.getFragmentToken()); mCallback.onTaskFragmentVanished(wct, taskFragmentInfo); - applyTransaction(wct); } @Override - public void onTaskFragmentParentInfoChanged(int taskId, @NonNull Configuration parentConfig) { - final WindowContainerTransaction wct = new WindowContainerTransaction(); + public void onTaskFragmentParentInfoChanged(@NonNull WindowContainerTransaction wct, + int taskId, @NonNull Configuration parentConfig) { mCallback.onTaskFragmentParentInfoChanged(wct, taskId, parentConfig); - applyTransaction(wct); } @Override - public void onActivityReparentedToTask(int taskId, @NonNull Intent activityIntent, - @NonNull IBinder activityToken) { - final WindowContainerTransaction wct = new WindowContainerTransaction(); + public void onActivityReparentedToTask(@NonNull WindowContainerTransaction wct, + int taskId, @NonNull Intent activityIntent, @NonNull IBinder activityToken) { mCallback.onActivityReparentedToTask(wct, taskId, activityIntent, activityToken); - applyTransaction(wct); } @Override - public void onTaskFragmentError(@NonNull IBinder errorCallbackToken, + public void onTaskFragmentError(@NonNull WindowContainerTransaction wct, + @NonNull IBinder errorCallbackToken, @Nullable TaskFragmentInfo taskFragmentInfo, int opType, @NonNull Throwable exception) { - final WindowContainerTransaction wct = new WindowContainerTransaction(); if (taskFragmentInfo != null) { final IBinder fragmentToken = taskFragmentInfo.getFragmentToken(); mFragmentInfos.put(fragmentToken, taskFragmentInfo); } mCallback.onTaskFragmentError(wct, taskFragmentInfo, opType); - applyTransaction(wct); } } diff --git a/services/tests/wmtests/src/com/android/server/wm/TaskFragmentOrganizerControllerTest.java b/services/tests/wmtests/src/com/android/server/wm/TaskFragmentOrganizerControllerTest.java index 8332cb4209efa..da72030b313d9 100644 --- a/services/tests/wmtests/src/com/android/server/wm/TaskFragmentOrganizerControllerTest.java +++ b/services/tests/wmtests/src/com/android/server/wm/TaskFragmentOrganizerControllerTest.java @@ -158,7 +158,7 @@ public class TaskFragmentOrganizerControllerTest extends WindowTestsBase { mController.onTaskFragmentAppeared(mTaskFragment.getTaskFragmentOrganizer(), mTaskFragment); mController.dispatchPendingEvents(); - verify(mOrganizer, never()).onTaskFragmentAppeared(any()); + verify(mOrganizer, never()).onTaskFragmentAppeared(any(), any()); // Send callback when the TaskFragment is attached. setupMockParent(mTaskFragment, mTask); @@ -166,7 +166,7 @@ public class TaskFragmentOrganizerControllerTest extends WindowTestsBase { mController.onTaskFragmentAppeared(mTaskFragment.getTaskFragmentOrganizer(), mTaskFragment); mController.dispatchPendingEvents(); - verify(mOrganizer).onTaskFragmentAppeared(any()); + verify(mOrganizer).onTaskFragmentAppeared(any(), any()); } @Test @@ -179,13 +179,13 @@ public class TaskFragmentOrganizerControllerTest extends WindowTestsBase { mTaskFragment); mController.dispatchPendingEvents(); - verify(mOrganizer, never()).onTaskFragmentInfoChanged(any()); + verify(mOrganizer, never()).onTaskFragmentInfoChanged(any(), any()); // Call onTaskFragmentAppeared first. mController.onTaskFragmentAppeared(mTaskFragment.getTaskFragmentOrganizer(), mTaskFragment); mController.dispatchPendingEvents(); - verify(mOrganizer).onTaskFragmentAppeared(any()); + verify(mOrganizer).onTaskFragmentAppeared(any(), any()); // No callback if the info is not changed. doReturn(true).when(mTaskFragmentInfo).equalsForTaskFragmentOrganizer(any()); @@ -195,7 +195,7 @@ public class TaskFragmentOrganizerControllerTest extends WindowTestsBase { mTaskFragment); mController.dispatchPendingEvents(); - verify(mOrganizer, never()).onTaskFragmentInfoChanged(any()); + verify(mOrganizer, never()).onTaskFragmentInfoChanged(any(), any()); // Trigger callback if the info is changed. doReturn(false).when(mTaskFragmentInfo).equalsForTaskFragmentOrganizer(any()); @@ -204,7 +204,7 @@ public class TaskFragmentOrganizerControllerTest extends WindowTestsBase { mTaskFragment); mController.dispatchPendingEvents(); - verify(mOrganizer).onTaskFragmentInfoChanged(eq(mTaskFragmentInfo)); + verify(mOrganizer).onTaskFragmentInfoChanged(any(), eq(mTaskFragmentInfo)); } @Test @@ -215,7 +215,7 @@ public class TaskFragmentOrganizerControllerTest extends WindowTestsBase { mController.onTaskFragmentVanished(mTaskFragment.getTaskFragmentOrganizer(), mTaskFragment); mController.dispatchPendingEvents(); - verify(mOrganizer).onTaskFragmentVanished(any()); + verify(mOrganizer).onTaskFragmentVanished(any(), any()); } @Test @@ -228,10 +228,10 @@ public class TaskFragmentOrganizerControllerTest extends WindowTestsBase { mController.onTaskFragmentVanished(mTaskFragment.getTaskFragmentOrganizer(), mTaskFragment); mController.dispatchPendingEvents(); - verify(mOrganizer, never()).onTaskFragmentAppeared(any()); - verify(mOrganizer, never()).onTaskFragmentInfoChanged(any()); - verify(mOrganizer, never()).onTaskFragmentParentInfoChanged(anyInt(), any()); - verify(mOrganizer).onTaskFragmentVanished(eq(mTaskFragmentInfo)); + verify(mOrganizer, never()).onTaskFragmentAppeared(any(), any()); + verify(mOrganizer, never()).onTaskFragmentInfoChanged(any(), any()); + verify(mOrganizer, never()).onTaskFragmentParentInfoChanged(any(), anyInt(), any()); + verify(mOrganizer).onTaskFragmentVanished(any(), eq(mTaskFragmentInfo)); // Not trigger onTaskFragmentInfoChanged. // Call onTaskFragmentAppeared before calling onTaskFragmentInfoChanged. @@ -244,10 +244,10 @@ public class TaskFragmentOrganizerControllerTest extends WindowTestsBase { mController.onTaskFragmentVanished(mTaskFragment.getTaskFragmentOrganizer(), mTaskFragment); mController.dispatchPendingEvents(); - verify(mOrganizer, never()).onTaskFragmentAppeared(any()); - verify(mOrganizer, never()).onTaskFragmentInfoChanged(any()); - verify(mOrganizer, never()).onTaskFragmentParentInfoChanged(anyInt(), any()); - verify(mOrganizer).onTaskFragmentVanished(eq(mTaskFragmentInfo)); + verify(mOrganizer, never()).onTaskFragmentAppeared(any(), any()); + verify(mOrganizer, never()).onTaskFragmentInfoChanged(any(), any()); + verify(mOrganizer, never()).onTaskFragmentParentInfoChanged(any(), anyInt(), any()); + verify(mOrganizer).onTaskFragmentVanished(any(), eq(mTaskFragmentInfo)); } @Test @@ -260,7 +260,7 @@ public class TaskFragmentOrganizerControllerTest extends WindowTestsBase { mTaskFragment.getTaskFragmentOrganizer(), mTaskFragment); mController.dispatchPendingEvents(); - verify(mOrganizer).onTaskFragmentParentInfoChanged(eq(mTask.mTaskId), any()); + verify(mOrganizer).onTaskFragmentParentInfoChanged(any(), eq(mTask.mTaskId), any()); // No extra callback if the info is not changed. clearInvocations(mOrganizer); @@ -269,7 +269,7 @@ public class TaskFragmentOrganizerControllerTest extends WindowTestsBase { mTaskFragment.getTaskFragmentOrganizer(), mTaskFragment); mController.dispatchPendingEvents(); - verify(mOrganizer, never()).onTaskFragmentParentInfoChanged(anyInt(), any()); + verify(mOrganizer, never()).onTaskFragmentParentInfoChanged(any(), anyInt(), any()); // Trigger callback if the size is changed. mTask.getConfiguration().smallestScreenWidthDp = 100; @@ -277,7 +277,7 @@ public class TaskFragmentOrganizerControllerTest extends WindowTestsBase { mTaskFragment.getTaskFragmentOrganizer(), mTaskFragment); mController.dispatchPendingEvents(); - verify(mOrganizer).onTaskFragmentParentInfoChanged(eq(mTask.mTaskId), any()); + verify(mOrganizer).onTaskFragmentParentInfoChanged(any(), eq(mTask.mTaskId), any()); // Trigger callback if the windowing mode is changed. clearInvocations(mOrganizer); @@ -286,7 +286,7 @@ public class TaskFragmentOrganizerControllerTest extends WindowTestsBase { mTaskFragment.getTaskFragmentOrganizer(), mTaskFragment); mController.dispatchPendingEvents(); - verify(mOrganizer).onTaskFragmentParentInfoChanged(eq(mTask.mTaskId), any()); + verify(mOrganizer).onTaskFragmentParentInfoChanged(any(), eq(mTask.mTaskId), any()); } @Test @@ -298,7 +298,7 @@ public class TaskFragmentOrganizerControllerTest extends WindowTestsBase { mErrorToken, null /* taskFragment */, -1 /* opType */, exception); mController.dispatchPendingEvents(); - verify(mOrganizer).onTaskFragmentError(eq(mErrorToken), eq(null), eq(-1), + verify(mOrganizer).onTaskFragmentError(any(), eq(mErrorToken), eq(null), eq(-1), eq(exception)); } @@ -318,14 +318,14 @@ public class TaskFragmentOrganizerControllerTest extends WindowTestsBase { mController.onActivityReparentedToTask(activity); mController.dispatchPendingEvents(); - verify(mOrganizer, never()).onActivityReparentedToTask(anyInt(), any(), any()); + verify(mOrganizer, never()).onActivityReparentedToTask(any(), anyInt(), any(), any()); // Notify organizer if it was embedded before entered Pip. activity.mLastTaskFragmentOrganizerBeforePip = mIOrganizer; mController.onActivityReparentedToTask(activity); mController.dispatchPendingEvents(); - verify(mOrganizer).onActivityReparentedToTask(eq(task.mTaskId), eq(activity.intent), + verify(mOrganizer).onActivityReparentedToTask(any(), eq(task.mTaskId), eq(activity.intent), eq(activity.token)); // Notify organizer if there is any embedded in the Task. @@ -341,7 +341,7 @@ public class TaskFragmentOrganizerControllerTest extends WindowTestsBase { mController.dispatchPendingEvents(); verify(mOrganizer, times(2)) - .onActivityReparentedToTask(eq(task.mTaskId), eq(activity.intent), + .onActivityReparentedToTask(any(), eq(task.mTaskId), eq(activity.intent), eq(activity.token)); } @@ -371,7 +371,7 @@ public class TaskFragmentOrganizerControllerTest extends WindowTestsBase { mController.dispatchPendingEvents(); // Allow organizer to reparent activity in other process using the temporary token. - verify(mOrganizer).onActivityReparentedToTask(eq(task.mTaskId), eq(activity.intent), + verify(mOrganizer).onActivityReparentedToTask(any(), eq(task.mTaskId), eq(activity.intent), token.capture()); final IBinder temporaryToken = token.getValue(); assertNotEquals(activity.token, temporaryToken); @@ -801,7 +801,7 @@ public class TaskFragmentOrganizerControllerTest extends WindowTestsBase { mController.dispatchPendingEvents(); // Verifies that event was not sent - verify(mOrganizer, never()).onTaskFragmentInfoChanged(any()); + verify(mOrganizer, never()).onTaskFragmentInfoChanged(any(), any()); } @Test @@ -827,7 +827,7 @@ public class TaskFragmentOrganizerControllerTest extends WindowTestsBase { mController.dispatchPendingEvents(); // Verifies that event was not sent - verify(mOrganizer, never()).onTaskFragmentInfoChanged(any()); + verify(mOrganizer, never()).onTaskFragmentInfoChanged(any(), any()); // Mock the task becomes visible, and activity resumed doReturn(true).when(task).shouldBeVisible(any()); @@ -835,7 +835,7 @@ public class TaskFragmentOrganizerControllerTest extends WindowTestsBase { // Verifies that event is sent. mController.dispatchPendingEvents(); - verify(mOrganizer).onTaskFragmentInfoChanged(any()); + verify(mOrganizer).onTaskFragmentInfoChanged(any(), any()); } /** @@ -869,7 +869,7 @@ public class TaskFragmentOrganizerControllerTest extends WindowTestsBase { reset(mOrganizer); mController.onTaskFragmentInfoChanged(mIOrganizer, taskFragment); mController.dispatchPendingEvents(); - verify(mOrganizer).onTaskFragmentInfoChanged(any()); + verify(mOrganizer).onTaskFragmentInfoChanged(any(), any()); } /** @@ -887,8 +887,8 @@ public class TaskFragmentOrganizerControllerTest extends WindowTestsBase { .createActivityCount(1) .build(); final ActivityRecord embeddedActivity = taskFragment.getTopNonFinishingActivity(); - // Add another activity in the Task so that it always contains a non-finishing activitiy. - final ActivityRecord nonEmbeddedActivity = createActivityRecord(task); + // Add another activity in the Task so that it always contains a non-finishing activity. + createActivityRecord(task); assertTrue(task.shouldBeVisible(null)); // Dispatch pending info changed event from creating the activity @@ -896,21 +896,21 @@ public class TaskFragmentOrganizerControllerTest extends WindowTestsBase { taskFragment.mTaskFragmentAppearedSent = true; mController.onTaskFragmentInfoChanged(mIOrganizer, taskFragment); mController.dispatchPendingEvents(); - verify(mOrganizer).onTaskFragmentInfoChanged(any()); + verify(mOrganizer).onTaskFragmentInfoChanged(any(), any()); // Verify the info changed callback is not called when the task is invisible reset(mOrganizer); doReturn(false).when(task).shouldBeVisible(any()); mController.onTaskFragmentInfoChanged(mIOrganizer, taskFragment); mController.dispatchPendingEvents(); - verify(mOrganizer, never()).onTaskFragmentInfoChanged(any()); + verify(mOrganizer, never()).onTaskFragmentInfoChanged(any(), any()); // Finish the embedded activity, and verify the info changed callback is called because the // TaskFragment is becoming empty. embeddedActivity.finishing = true; mController.onTaskFragmentInfoChanged(mIOrganizer, taskFragment); mController.dispatchPendingEvents(); - verify(mOrganizer).onTaskFragmentInfoChanged(any()); + verify(mOrganizer).onTaskFragmentInfoChanged(any(), any()); } /** @@ -1020,7 +1020,7 @@ public class TaskFragmentOrganizerControllerTest extends WindowTestsBase { // The pending event will be dispatched on the handler (from requestTraversal). waitHandlerIdle(mWm.mAnimationHandler); - verify(mOrganizer).onTaskFragmentError(eq(mErrorToken), any(), + verify(mOrganizer).onTaskFragmentError(any(), eq(mErrorToken), any(), eq(HIERARCHY_OP_TYPE_REPARENT_ACTIVITY_TO_TASK_FRAGMENT), any(SecurityException.class)); } @@ -1059,7 +1059,7 @@ public class TaskFragmentOrganizerControllerTest extends WindowTestsBase { // The pending event will be dispatched on the handler (from requestTraversal). waitHandlerIdle(mWm.mAnimationHandler); - verify(mOrganizer).onTaskFragmentError(eq(mErrorToken), any(), + verify(mOrganizer).onTaskFragmentError(any(), eq(mErrorToken), any(), eq(HIERARCHY_OP_TYPE_REPARENT_CHILDREN), any(SecurityException.class)); }