Use desktop API to remove desktop for dismiss

When overview tile for desktop is dismissed, use the shell API instead
of calling the system server directly to remove tasks in the desktop.
This let's desktop fix it's state and call the system server instead.

Bug: 370757235
Test: m and dismiss overview tile from desktop
Flag: com.android.window.flags.enable_desktop_windowing_back_navigation

Change-Id: Ia2abd0ab5a27759c92e0328beb460810ad2af898
This commit is contained in:
Orhan Uysal
2024-10-03 12:14:33 +00:00
parent 2aedf52b8f
commit c2adf8cf9c
2 changed files with 29 additions and 10 deletions
@@ -130,6 +130,7 @@ import android.widget.ListView;
import android.widget.OverScroller;
import android.widget.Toast;
import android.window.PictureInPictureSurfaceTransaction;
import android.window.flags.DesktopModeFlags;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
@@ -3934,9 +3935,11 @@ public abstract class RecentsView<
if (shouldRemoveTask) {
if (dismissedTaskView.isRunningTask()) {
finishRecentsAnimation(true /* toRecents */, false /* shouldPip */,
() -> removeTaskInternal(dismissedTaskViewId));
() -> removeTaskInternal(dismissedTaskViewId,
dismissedTaskView instanceof DesktopTaskView));
} else {
removeTaskInternal(dismissedTaskViewId);
removeTaskInternal(dismissedTaskViewId,
dismissedTaskView instanceof DesktopTaskView);
}
announceForAccessibility(
getResources().getString(R.string.task_view_closed));
@@ -4304,16 +4307,21 @@ public abstract class RecentsView<
return lastVisibleIndex;
}
private void removeTaskInternal(int dismissedTaskViewId) {
private void removeTaskInternal(int dismissedTaskViewId, boolean isDesktop) {
int[] taskIds = getTaskIdsForTaskViewId(dismissedTaskViewId);
UI_HELPER_EXECUTOR.getHandler().post(
() -> {
for (int taskId : taskIds) {
if (taskId != -1) {
ActivityManagerWrapper.getInstance().removeTask(taskId);
}
UI_HELPER_EXECUTOR.getHandler().post(() -> {
if (DesktopModeFlags.ENABLE_DESKTOP_WINDOWING_BACK_NAVIGATION.isTrue() && isDesktop) {
// TODO: b/372005228 - Use the api with desktop id instead.
SystemUiProxy.INSTANCE.get(getContext()).removeDesktop(
mContainer.getDisplay().getDisplayId());
} else {
for (int taskId : taskIds) {
if (taskId != -1) {
ActivityManagerWrapper.getInstance().removeTask(taskId);
}
});
}
}
});
}
protected void onDismissAnimationEnds() {