Loading libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java +13 −3 Original line number Diff line number Diff line Loading @@ -320,9 +320,19 @@ public abstract class WMShellModule { WindowDecorViewModel windowDecorViewModel, DisplayController displayController, @ShellMainThread ShellExecutor mainExecutor, @ShellAnimationThread ShellExecutor animExecutor) { return new FreeformTaskTransitionHandler(shellInit, transitions, context, windowDecorViewModel, displayController, mainExecutor, animExecutor); @ShellAnimationThread ShellExecutor animExecutor, @DynamicOverride DesktopModeTaskRepository desktopModeTaskRepository, InteractionJankMonitor interactionJankMonitor) { return new FreeformTaskTransitionHandler( shellInit, transitions, context, windowDecorViewModel, displayController, mainExecutor, animExecutor, desktopModeTaskRepository, interactionJankMonitor); } @WMSingleton Loading libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopModeTaskRepository.kt +5 −0 Original line number Diff line number Diff line Loading @@ -194,6 +194,11 @@ class DesktopModeTaskRepository { fun getActiveNonMinimizedOrderedTasks(displayId: Int): List<Int> = getFreeformTasksInZOrder(displayId).filter { !isMinimizedTask(it) } /** Returns the count of active non-minimized tasks for [displayId]. */ fun getActiveNonMinimizedTaskCount(displayId: Int): Int { return getActiveTasks(displayId).count { !isMinimizedTask(it) } } /** Returns a list of freeform tasks, ordered from top-bottom (top at index 0). */ fun getFreeformTasksInZOrder(displayId: Int): ArrayList<Int> = ArrayList(desktopTaskDataByDisplayId[displayId]?.freeformTasksInZOrder ?: emptyList()) Loading libs/WindowManager/Shell/src/com/android/wm/shell/freeform/FreeformTaskTransitionHandler.java +26 −8 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.android.wm.shell.freeform; import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM; import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN; import static com.android.internal.jank.Cuj.CUJ_DESKTOP_MODE_EXIT_MODE_ON_LAST_WINDOW_CLOSE; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; Loading @@ -37,8 +38,10 @@ import android.window.WindowContainerTransaction; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import com.android.internal.jank.InteractionJankMonitor; import com.android.wm.shell.common.DisplayController; import com.android.wm.shell.common.ShellExecutor; import com.android.wm.shell.desktopmode.DesktopModeTaskRepository; import com.android.wm.shell.sysui.ShellInit; import com.android.wm.shell.transition.Transitions; import com.android.wm.shell.windowdecor.WindowDecorViewModel; Loading @@ -56,7 +59,9 @@ public class FreeformTaskTransitionHandler private final Context mContext; private final Transitions mTransitions; private final WindowDecorViewModel mWindowDecorViewModel; private final DesktopModeTaskRepository mDesktopModeTaskRepository; private final DisplayController mDisplayController; private final InteractionJankMonitor mInteractionJankMonitor; private final ShellExecutor mMainExecutor; private final ShellExecutor mAnimExecutor; Loading @@ -71,11 +76,15 @@ public class FreeformTaskTransitionHandler WindowDecorViewModel windowDecorViewModel, DisplayController displayController, ShellExecutor mainExecutor, ShellExecutor animExecutor) { ShellExecutor animExecutor, DesktopModeTaskRepository desktopModeTaskRepository, InteractionJankMonitor interactionJankMonitor) { mTransitions = transitions; mContext = context; mWindowDecorViewModel = windowDecorViewModel; mDesktopModeTaskRepository = desktopModeTaskRepository; mDisplayController = displayController; mInteractionJankMonitor = interactionJankMonitor; mMainExecutor = mainExecutor; mAnimExecutor = animExecutor; if (Transitions.ENABLE_SHELL_TRANSITIONS) { Loading Loading @@ -238,11 +247,20 @@ public class FreeformTaskTransitionHandler startBounds.top + (animation.getAnimatedFraction() * screenHeight)); t.apply(); }); animator.addListener(new AnimatorListenerAdapter() { if (mDesktopModeTaskRepository.getActiveNonMinimizedTaskCount( change.getTaskInfo().displayId) == 1) { // Starting the jank trace if closing the last window in desktop mode. mInteractionJankMonitor.begin( sc, mContext, CUJ_DESKTOP_MODE_EXIT_MODE_ON_LAST_WINDOW_CLOSE); } animator.addListener( new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { animations.remove(animator); onAnimFinish.run(); mInteractionJankMonitor.end( CUJ_DESKTOP_MODE_EXIT_MODE_ON_LAST_WINDOW_CLOSE); } }); animations.add(animator); Loading Loading
libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java +13 −3 Original line number Diff line number Diff line Loading @@ -320,9 +320,19 @@ public abstract class WMShellModule { WindowDecorViewModel windowDecorViewModel, DisplayController displayController, @ShellMainThread ShellExecutor mainExecutor, @ShellAnimationThread ShellExecutor animExecutor) { return new FreeformTaskTransitionHandler(shellInit, transitions, context, windowDecorViewModel, displayController, mainExecutor, animExecutor); @ShellAnimationThread ShellExecutor animExecutor, @DynamicOverride DesktopModeTaskRepository desktopModeTaskRepository, InteractionJankMonitor interactionJankMonitor) { return new FreeformTaskTransitionHandler( shellInit, transitions, context, windowDecorViewModel, displayController, mainExecutor, animExecutor, desktopModeTaskRepository, interactionJankMonitor); } @WMSingleton Loading
libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopModeTaskRepository.kt +5 −0 Original line number Diff line number Diff line Loading @@ -194,6 +194,11 @@ class DesktopModeTaskRepository { fun getActiveNonMinimizedOrderedTasks(displayId: Int): List<Int> = getFreeformTasksInZOrder(displayId).filter { !isMinimizedTask(it) } /** Returns the count of active non-minimized tasks for [displayId]. */ fun getActiveNonMinimizedTaskCount(displayId: Int): Int { return getActiveTasks(displayId).count { !isMinimizedTask(it) } } /** Returns a list of freeform tasks, ordered from top-bottom (top at index 0). */ fun getFreeformTasksInZOrder(displayId: Int): ArrayList<Int> = ArrayList(desktopTaskDataByDisplayId[displayId]?.freeformTasksInZOrder ?: emptyList()) Loading
libs/WindowManager/Shell/src/com/android/wm/shell/freeform/FreeformTaskTransitionHandler.java +26 −8 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.android.wm.shell.freeform; import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM; import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN; import static com.android.internal.jank.Cuj.CUJ_DESKTOP_MODE_EXIT_MODE_ON_LAST_WINDOW_CLOSE; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; Loading @@ -37,8 +38,10 @@ import android.window.WindowContainerTransaction; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import com.android.internal.jank.InteractionJankMonitor; import com.android.wm.shell.common.DisplayController; import com.android.wm.shell.common.ShellExecutor; import com.android.wm.shell.desktopmode.DesktopModeTaskRepository; import com.android.wm.shell.sysui.ShellInit; import com.android.wm.shell.transition.Transitions; import com.android.wm.shell.windowdecor.WindowDecorViewModel; Loading @@ -56,7 +59,9 @@ public class FreeformTaskTransitionHandler private final Context mContext; private final Transitions mTransitions; private final WindowDecorViewModel mWindowDecorViewModel; private final DesktopModeTaskRepository mDesktopModeTaskRepository; private final DisplayController mDisplayController; private final InteractionJankMonitor mInteractionJankMonitor; private final ShellExecutor mMainExecutor; private final ShellExecutor mAnimExecutor; Loading @@ -71,11 +76,15 @@ public class FreeformTaskTransitionHandler WindowDecorViewModel windowDecorViewModel, DisplayController displayController, ShellExecutor mainExecutor, ShellExecutor animExecutor) { ShellExecutor animExecutor, DesktopModeTaskRepository desktopModeTaskRepository, InteractionJankMonitor interactionJankMonitor) { mTransitions = transitions; mContext = context; mWindowDecorViewModel = windowDecorViewModel; mDesktopModeTaskRepository = desktopModeTaskRepository; mDisplayController = displayController; mInteractionJankMonitor = interactionJankMonitor; mMainExecutor = mainExecutor; mAnimExecutor = animExecutor; if (Transitions.ENABLE_SHELL_TRANSITIONS) { Loading Loading @@ -238,11 +247,20 @@ public class FreeformTaskTransitionHandler startBounds.top + (animation.getAnimatedFraction() * screenHeight)); t.apply(); }); animator.addListener(new AnimatorListenerAdapter() { if (mDesktopModeTaskRepository.getActiveNonMinimizedTaskCount( change.getTaskInfo().displayId) == 1) { // Starting the jank trace if closing the last window in desktop mode. mInteractionJankMonitor.begin( sc, mContext, CUJ_DESKTOP_MODE_EXIT_MODE_ON_LAST_WINDOW_CLOSE); } animator.addListener( new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { animations.remove(animator); onAnimFinish.run(); mInteractionJankMonitor.end( CUJ_DESKTOP_MODE_EXIT_MODE_ON_LAST_WINDOW_CLOSE); } }); animations.add(animator); Loading