Loading libs/WindowManager/Shell/src/com/android/wm/shell/freeform/FreeformTaskTransitionObserver.java +16 −8 Original line number Original line Diff line number Diff line Loading @@ -61,6 +61,7 @@ public class FreeformTaskTransitionObserver implements Transitions.TransitionObs new HashMap<>(); new HashMap<>(); private final Map<Integer, ActivityManager.RunningTaskInfo> mPendingHiddenTasks = private final Map<Integer, ActivityManager.RunningTaskInfo> mPendingHiddenTasks = new HashMap<>(); new HashMap<>(); private IBinder mTransientTransition; public FreeformTaskTransitionObserver( public FreeformTaskTransitionObserver( ShellInit shellInit, ShellInit shellInit, Loading Loading @@ -141,11 +142,9 @@ public class FreeformTaskTransitionObserver implements Transitions.TransitionObs break; break; case WindowManager.TRANSIT_TO_BACK: { case WindowManager.TRANSIT_TO_BACK: { if (info.getType() == TRANSIT_START_RECENTS_TRANSITION) { if (info.getType() == TRANSIT_START_RECENTS_TRANSITION) { // The tasks will be transiently hidden, which means they are still visible. mTransientTransition = transition; mPendingHiddenTasks.put(taskInfo.taskId, taskInfo); } else { onToBackTransitionReady(change, startT, finishT); } } onToBackTransitionReady(change, startT, finishT); break; break; } } case WindowManager.TRANSIT_CLOSE: { case WindowManager.TRANSIT_CLOSE: { Loading Loading @@ -204,8 +203,13 @@ public class FreeformTaskTransitionObserver implements Transitions.TransitionObs TransitionInfo.Change change, TransitionInfo.Change change, SurfaceControl.Transaction startT, SurfaceControl.Transaction startT, SurfaceControl.Transaction finishT) { SurfaceControl.Transaction finishT) { if (mTransientTransition != null) { // The tasks will be transiently hidden, which means they are still visible. mPendingHiddenTasks.put(change.getTaskInfo().taskId, change.getTaskInfo()); } else { mTaskChangeListener.ifPresent( mTaskChangeListener.ifPresent( listener -> listener.onTaskMovingToBack(change.getTaskInfo())); listener -> listener.onTaskMovingToBack(change.getTaskInfo())); } mWindowDecorViewModel.onTaskChanging( mWindowDecorViewModel.onTaskChanging( change.getTaskInfo(), change.getLeash(), startT, finishT); change.getTaskInfo(), change.getLeash(), startT, finishT); } } Loading Loading @@ -259,8 +263,12 @@ public class FreeformTaskTransitionObserver implements Transitions.TransitionObs mWindowDecorViewModel.destroyWindowDecoration(taskInfo.get(i)); mWindowDecorViewModel.destroyWindowDecoration(taskInfo.get(i)); } } if (transition == mTransientTransition) { for (ActivityManager.RunningTaskInfo task : mPendingHiddenTasks.values()) { for (ActivityManager.RunningTaskInfo task : mPendingHiddenTasks.values()) { mTaskChangeListener.ifPresent(it -> it.onTaskMovingToBack(task)); mTaskChangeListener.ifPresent(it -> it.onTaskMovingToBack(task)); } } mPendingHiddenTasks.clear(); mTransientTransition = null; } } } } } Loading
libs/WindowManager/Shell/src/com/android/wm/shell/freeform/FreeformTaskTransitionObserver.java +16 −8 Original line number Original line Diff line number Diff line Loading @@ -61,6 +61,7 @@ public class FreeformTaskTransitionObserver implements Transitions.TransitionObs new HashMap<>(); new HashMap<>(); private final Map<Integer, ActivityManager.RunningTaskInfo> mPendingHiddenTasks = private final Map<Integer, ActivityManager.RunningTaskInfo> mPendingHiddenTasks = new HashMap<>(); new HashMap<>(); private IBinder mTransientTransition; public FreeformTaskTransitionObserver( public FreeformTaskTransitionObserver( ShellInit shellInit, ShellInit shellInit, Loading Loading @@ -141,11 +142,9 @@ public class FreeformTaskTransitionObserver implements Transitions.TransitionObs break; break; case WindowManager.TRANSIT_TO_BACK: { case WindowManager.TRANSIT_TO_BACK: { if (info.getType() == TRANSIT_START_RECENTS_TRANSITION) { if (info.getType() == TRANSIT_START_RECENTS_TRANSITION) { // The tasks will be transiently hidden, which means they are still visible. mTransientTransition = transition; mPendingHiddenTasks.put(taskInfo.taskId, taskInfo); } else { onToBackTransitionReady(change, startT, finishT); } } onToBackTransitionReady(change, startT, finishT); break; break; } } case WindowManager.TRANSIT_CLOSE: { case WindowManager.TRANSIT_CLOSE: { Loading Loading @@ -204,8 +203,13 @@ public class FreeformTaskTransitionObserver implements Transitions.TransitionObs TransitionInfo.Change change, TransitionInfo.Change change, SurfaceControl.Transaction startT, SurfaceControl.Transaction startT, SurfaceControl.Transaction finishT) { SurfaceControl.Transaction finishT) { if (mTransientTransition != null) { // The tasks will be transiently hidden, which means they are still visible. mPendingHiddenTasks.put(change.getTaskInfo().taskId, change.getTaskInfo()); } else { mTaskChangeListener.ifPresent( mTaskChangeListener.ifPresent( listener -> listener.onTaskMovingToBack(change.getTaskInfo())); listener -> listener.onTaskMovingToBack(change.getTaskInfo())); } mWindowDecorViewModel.onTaskChanging( mWindowDecorViewModel.onTaskChanging( change.getTaskInfo(), change.getLeash(), startT, finishT); change.getTaskInfo(), change.getLeash(), startT, finishT); } } Loading Loading @@ -259,8 +263,12 @@ public class FreeformTaskTransitionObserver implements Transitions.TransitionObs mWindowDecorViewModel.destroyWindowDecoration(taskInfo.get(i)); mWindowDecorViewModel.destroyWindowDecoration(taskInfo.get(i)); } } if (transition == mTransientTransition) { for (ActivityManager.RunningTaskInfo task : mPendingHiddenTasks.values()) { for (ActivityManager.RunningTaskInfo task : mPendingHiddenTasks.values()) { mTaskChangeListener.ifPresent(it -> it.onTaskMovingToBack(task)); mTaskChangeListener.ifPresent(it -> it.onTaskMovingToBack(task)); } } mPendingHiddenTasks.clear(); mTransientTransition = null; } } } } }