Loading quickstep/src/com/android/launcher3/taskbar/KeyboardQuickSwitchViewController.java +2 −30 Original line number Diff line number Diff line Loading @@ -15,12 +15,7 @@ */ package com.android.launcher3.taskbar; import static android.window.SplashScreen.SPLASH_SCREEN_STYLE_UNDEFINED; import static com.android.launcher3.util.Executors.UI_HELPER_EXECUTOR; import android.animation.Animator; import android.app.ActivityOptions; import android.view.KeyEvent; import android.view.animation.AnimationUtils; import android.window.RemoteTransition; Loading @@ -31,13 +26,10 @@ import androidx.annotation.Nullable; import com.android.launcher3.Utilities; import com.android.launcher3.anim.AnimatorListeners; import com.android.launcher3.taskbar.overlay.TaskbarOverlayContext; import com.android.quickstep.SystemUiProxy; import com.android.quickstep.util.DesktopTask; import com.android.quickstep.util.GroupTask; import com.android.quickstep.util.SlideInRemoteTransition; import com.android.systemui.shared.recents.model.Task; import com.android.systemui.shared.recents.model.ThumbnailData; import com.android.systemui.shared.system.ActivityManagerWrapper; import com.android.systemui.shared.system.QuickStepContract; import java.io.PrintWriter; Loading Loading @@ -158,28 +150,8 @@ public class KeyboardQuickSwitchViewController { AnimationUtils.loadInterpolator( context, android.R.interpolator.fast_out_extra_slow_in)), "SlideInTransition"); if (task instanceof DesktopTask) { UI_HELPER_EXECUTOR.execute(() -> SystemUiProxy.INSTANCE.get(mKeyboardQuickSwitchView.getContext()) .showDesktopApps( mKeyboardQuickSwitchView.getDisplay().getDisplayId(), remoteTransition)); } else if (mOnDesktop) { UI_HELPER_EXECUTOR.execute(() -> SystemUiProxy.INSTANCE.get(mKeyboardQuickSwitchView.getContext()) .showDesktopApp(task.task1.key.id)); } else if (task.task2 == null) { UI_HELPER_EXECUTOR.execute(() -> { ActivityOptions activityOptions = mControllers.taskbarActivityContext .makeDefaultActivityOptions(SPLASH_SCREEN_STYLE_UNDEFINED).options; activityOptions.setRemoteTransition(remoteTransition); ActivityManagerWrapper.getInstance().startActivityFromRecents( task.task1.key, activityOptions); }); } else { mControllers.uiController.launchSplitTasks(task, remoteTransition); } mControllers.taskbarActivityContext.handleGroupTaskLaunch( task, remoteTransition, mOnDesktop); return -1; } Loading quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java +38 −5 Original line number Diff line number Diff line Loading @@ -67,6 +67,7 @@ import android.view.View; import android.view.WindowInsets; import android.view.WindowManager; import android.widget.Toast; import android.window.RemoteTransition; import androidx.annotation.NonNull; import androidx.annotation.Nullable; Loading Loading @@ -131,6 +132,9 @@ import com.android.launcher3.views.ActivityContext; import com.android.quickstep.LauncherActivityInterface; import com.android.quickstep.NavHandle; import com.android.quickstep.RecentsModel; import com.android.quickstep.SystemUiProxy; import com.android.quickstep.util.DesktopTask; import com.android.quickstep.util.GroupTask; import com.android.quickstep.views.RecentsView; import com.android.quickstep.views.TaskView; import com.android.systemui.shared.recents.model.Task; Loading Loading @@ -298,7 +302,7 @@ public class TaskbarActivityContext extends BaseTaskbarContext { TaskbarEduTooltipController.newInstance(this), new KeyboardQuickSwitchController(), new TaskbarPinningController(this, () -> DisplayController.INSTANCE.get(this).getInfo().isInDesktopMode()), DisplayController.isInDesktopMode(this)), bubbleControllersOptional); mLauncherPrefs = LauncherPrefs.get(this); Loading Loading @@ -1081,10 +1085,9 @@ public class TaskbarActivityContext extends BaseTaskbarContext { RecentsView recents = taskbarUIController.getRecentsView(); boolean shouldCloseAllOpenViews = true; Object tag = view.getTag(); if (tag instanceof Task) { Task task = (Task) tag; ActivityManagerWrapper.getInstance().startActivityFromRecents(task.key, ActivityOptions.makeBasic()); if (tag instanceof GroupTask groupTask) { handleGroupTaskLaunch(groupTask, /* remoteTransition = */ null, DisplayController.isInDesktopMode(this)); mControllers.taskbarStashController.updateAndAnimateTransientTaskbar(true); } else if (tag instanceof FolderInfo) { // Tapping an expandable folder icon on Taskbar Loading Loading @@ -1184,6 +1187,36 @@ public class TaskbarActivityContext extends BaseTaskbarContext { } } /** * Launches the given GroupTask with the following behavior: * - If the GroupTask is a DesktopTask, launch the tasks in that Desktop. * - If {@code onDesktop}, bring the given GroupTask to the front. * - If the GroupTask is a single task, launch it via startActivityFromRecents. * - Otherwise, we assume the GroupTask is a Split pair and launch them together. */ public void handleGroupTaskLaunch(GroupTask task, @Nullable RemoteTransition remoteTransition, boolean onDesktop) { if (task instanceof DesktopTask) { UI_HELPER_EXECUTOR.execute(() -> SystemUiProxy.INSTANCE.get(this).showDesktopApps(getDisplay().getDisplayId(), remoteTransition)); } else if (onDesktop) { UI_HELPER_EXECUTOR.execute(() -> SystemUiProxy.INSTANCE.get(this).showDesktopApp(task.task1.key.id)); } else if (task.task2 == null) { UI_HELPER_EXECUTOR.execute(() -> { ActivityOptions activityOptions = makeDefaultActivityOptions(SPLASH_SCREEN_STYLE_UNDEFINED).options; activityOptions.setRemoteTransition(remoteTransition); ActivityManagerWrapper.getInstance().startActivityFromRecents( task.task1.key, activityOptions); }); } else { mControllers.uiController.launchSplitTasks(task, remoteTransition); } } /** * Runs when the user taps a Taskbar icon in TaskbarActivityContext (Overview or inside an app), * and calls the appropriate method to animate and launch. Loading src/com/android/launcher3/util/DisplayController.java +5 −0 Original line number Diff line number Diff line Loading @@ -182,6 +182,11 @@ public class DisplayController implements ComponentCallbacks, SafeCloseable { return INSTANCE.get(context).getInfo().isTransientTaskbar(); } /** Returns whether we are currently in Desktop mode. */ public static boolean isInDesktopMode(Context context) { return INSTANCE.get(context).getInfo().isInDesktopMode(); } /** * Handles info change for desktop mode. */ Loading Loading
quickstep/src/com/android/launcher3/taskbar/KeyboardQuickSwitchViewController.java +2 −30 Original line number Diff line number Diff line Loading @@ -15,12 +15,7 @@ */ package com.android.launcher3.taskbar; import static android.window.SplashScreen.SPLASH_SCREEN_STYLE_UNDEFINED; import static com.android.launcher3.util.Executors.UI_HELPER_EXECUTOR; import android.animation.Animator; import android.app.ActivityOptions; import android.view.KeyEvent; import android.view.animation.AnimationUtils; import android.window.RemoteTransition; Loading @@ -31,13 +26,10 @@ import androidx.annotation.Nullable; import com.android.launcher3.Utilities; import com.android.launcher3.anim.AnimatorListeners; import com.android.launcher3.taskbar.overlay.TaskbarOverlayContext; import com.android.quickstep.SystemUiProxy; import com.android.quickstep.util.DesktopTask; import com.android.quickstep.util.GroupTask; import com.android.quickstep.util.SlideInRemoteTransition; import com.android.systemui.shared.recents.model.Task; import com.android.systemui.shared.recents.model.ThumbnailData; import com.android.systemui.shared.system.ActivityManagerWrapper; import com.android.systemui.shared.system.QuickStepContract; import java.io.PrintWriter; Loading Loading @@ -158,28 +150,8 @@ public class KeyboardQuickSwitchViewController { AnimationUtils.loadInterpolator( context, android.R.interpolator.fast_out_extra_slow_in)), "SlideInTransition"); if (task instanceof DesktopTask) { UI_HELPER_EXECUTOR.execute(() -> SystemUiProxy.INSTANCE.get(mKeyboardQuickSwitchView.getContext()) .showDesktopApps( mKeyboardQuickSwitchView.getDisplay().getDisplayId(), remoteTransition)); } else if (mOnDesktop) { UI_HELPER_EXECUTOR.execute(() -> SystemUiProxy.INSTANCE.get(mKeyboardQuickSwitchView.getContext()) .showDesktopApp(task.task1.key.id)); } else if (task.task2 == null) { UI_HELPER_EXECUTOR.execute(() -> { ActivityOptions activityOptions = mControllers.taskbarActivityContext .makeDefaultActivityOptions(SPLASH_SCREEN_STYLE_UNDEFINED).options; activityOptions.setRemoteTransition(remoteTransition); ActivityManagerWrapper.getInstance().startActivityFromRecents( task.task1.key, activityOptions); }); } else { mControllers.uiController.launchSplitTasks(task, remoteTransition); } mControllers.taskbarActivityContext.handleGroupTaskLaunch( task, remoteTransition, mOnDesktop); return -1; } Loading
quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java +38 −5 Original line number Diff line number Diff line Loading @@ -67,6 +67,7 @@ import android.view.View; import android.view.WindowInsets; import android.view.WindowManager; import android.widget.Toast; import android.window.RemoteTransition; import androidx.annotation.NonNull; import androidx.annotation.Nullable; Loading Loading @@ -131,6 +132,9 @@ import com.android.launcher3.views.ActivityContext; import com.android.quickstep.LauncherActivityInterface; import com.android.quickstep.NavHandle; import com.android.quickstep.RecentsModel; import com.android.quickstep.SystemUiProxy; import com.android.quickstep.util.DesktopTask; import com.android.quickstep.util.GroupTask; import com.android.quickstep.views.RecentsView; import com.android.quickstep.views.TaskView; import com.android.systemui.shared.recents.model.Task; Loading Loading @@ -298,7 +302,7 @@ public class TaskbarActivityContext extends BaseTaskbarContext { TaskbarEduTooltipController.newInstance(this), new KeyboardQuickSwitchController(), new TaskbarPinningController(this, () -> DisplayController.INSTANCE.get(this).getInfo().isInDesktopMode()), DisplayController.isInDesktopMode(this)), bubbleControllersOptional); mLauncherPrefs = LauncherPrefs.get(this); Loading Loading @@ -1081,10 +1085,9 @@ public class TaskbarActivityContext extends BaseTaskbarContext { RecentsView recents = taskbarUIController.getRecentsView(); boolean shouldCloseAllOpenViews = true; Object tag = view.getTag(); if (tag instanceof Task) { Task task = (Task) tag; ActivityManagerWrapper.getInstance().startActivityFromRecents(task.key, ActivityOptions.makeBasic()); if (tag instanceof GroupTask groupTask) { handleGroupTaskLaunch(groupTask, /* remoteTransition = */ null, DisplayController.isInDesktopMode(this)); mControllers.taskbarStashController.updateAndAnimateTransientTaskbar(true); } else if (tag instanceof FolderInfo) { // Tapping an expandable folder icon on Taskbar Loading Loading @@ -1184,6 +1187,36 @@ public class TaskbarActivityContext extends BaseTaskbarContext { } } /** * Launches the given GroupTask with the following behavior: * - If the GroupTask is a DesktopTask, launch the tasks in that Desktop. * - If {@code onDesktop}, bring the given GroupTask to the front. * - If the GroupTask is a single task, launch it via startActivityFromRecents. * - Otherwise, we assume the GroupTask is a Split pair and launch them together. */ public void handleGroupTaskLaunch(GroupTask task, @Nullable RemoteTransition remoteTransition, boolean onDesktop) { if (task instanceof DesktopTask) { UI_HELPER_EXECUTOR.execute(() -> SystemUiProxy.INSTANCE.get(this).showDesktopApps(getDisplay().getDisplayId(), remoteTransition)); } else if (onDesktop) { UI_HELPER_EXECUTOR.execute(() -> SystemUiProxy.INSTANCE.get(this).showDesktopApp(task.task1.key.id)); } else if (task.task2 == null) { UI_HELPER_EXECUTOR.execute(() -> { ActivityOptions activityOptions = makeDefaultActivityOptions(SPLASH_SCREEN_STYLE_UNDEFINED).options; activityOptions.setRemoteTransition(remoteTransition); ActivityManagerWrapper.getInstance().startActivityFromRecents( task.task1.key, activityOptions); }); } else { mControllers.uiController.launchSplitTasks(task, remoteTransition); } } /** * Runs when the user taps a Taskbar icon in TaskbarActivityContext (Overview or inside an app), * and calls the appropriate method to animate and launch. Loading
src/com/android/launcher3/util/DisplayController.java +5 −0 Original line number Diff line number Diff line Loading @@ -182,6 +182,11 @@ public class DisplayController implements ComponentCallbacks, SafeCloseable { return INSTANCE.get(context).getInfo().isTransientTaskbar(); } /** Returns whether we are currently in Desktop mode. */ public static boolean isInDesktopMode(Context context) { return INSTANCE.get(context).getInfo().isInDesktopMode(); } /** * Handles info change for desktop mode. */ Loading