Loading quickstep/src/com/android/launcher3/popup/QuickstepSystemShortcut.java +1 −1 Original line number Diff line number Diff line Loading @@ -101,7 +101,7 @@ public interface QuickstepSystemShortcut { RecentsView recentsView = mTarget.getOverviewPanel(); // Check if there is already an instance of this app running, if so, initiate the split // using that. recentsView.findLastActiveTaskAndDoSplitOperation( recentsView.findLastActiveTaskAndRunCallback( intent.getComponent(), (Consumer<Task>) foundTask -> { SplitSelectSource source = new SplitSelectSource(mOriginalView, Loading quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java +33 −6 Original line number Diff line number Diff line Loading @@ -94,6 +94,7 @@ import com.android.launcher3.util.TraceHelper; import com.android.launcher3.util.ViewCache; import com.android.launcher3.views.ActivityContext; import com.android.quickstep.views.RecentsView; import com.android.quickstep.views.TaskView; import com.android.systemui.shared.recents.model.Task; import com.android.systemui.shared.rotation.RotationButtonController; import com.android.systemui.shared.system.ActivityManagerWrapper; Loading @@ -101,6 +102,7 @@ import com.android.systemui.unfold.updates.RotationChangeProvider; import com.android.systemui.unfold.util.ScopedUnfoldTransitionProgressProvider; import java.io.PrintWriter; import java.util.function.Consumer; /** * The {@link ActivityContext} with which we inflate Taskbar-related Views. This allows UI elements Loading Loading @@ -778,12 +780,12 @@ public class TaskbarActivityContext extends BaseTaskbarContext { }); }); } else if (tag instanceof WorkspaceItemInfo) { // Tapping a launchable icon on Taskbar WorkspaceItemInfo info = (WorkspaceItemInfo) tag; if (!info.isDisabled() || !ItemClickHandler.handleDisabledItemClicked(info, this)) { TaskbarUIController taskbarUIController = mControllers.uiController; RecentsView recents = taskbarUIController.getRecentsView(); if (recents != null && taskbarUIController.getRecentsView().isSplitSelectionActive()) { if (recents != null && recents.isSplitSelectionActive()) { // If we are selecting a second app for split, launch the split tasks taskbarUIController.triggerSecondAppForSplit(info, info.intent, view); } else { Loading @@ -810,7 +812,7 @@ public class TaskbarActivityContext extends BaseTaskbarContext { getSystemService(LauncherApps.class) .startShortcut(packageName, id, null, null, info.user); } else { startItemInfoActivity(info); launchFromTaskbarPreservingSplitIfVisible(recents, info); } mControllers.uiController.onTaskbarIconLaunched(info); Loading @@ -825,6 +827,7 @@ public class TaskbarActivityContext extends BaseTaskbarContext { mControllers.taskbarStashController.updateAndAnimateTransientTaskbar(true); } } else if (tag instanceof AppInfo) { // Tapping an item in AllApps AppInfo info = (AppInfo) tag; TaskbarUIController taskbarUIController = mControllers.uiController; RecentsView recents = taskbarUIController.getRecentsView(); Loading @@ -833,9 +836,8 @@ public class TaskbarActivityContext extends BaseTaskbarContext { // If we are selecting a second app for split, launch the split tasks taskbarUIController.triggerSecondAppForSplit(info, info.intent, view); } else { // Else launch the selected task startItemInfoActivity((AppInfo) tag); mControllers.uiController.onTaskbarIconLaunched((AppInfo) tag); launchFromTaskbarPreservingSplitIfVisible(recents, info); mControllers.uiController.onTaskbarIconLaunched(info); } mControllers.taskbarStashController.updateAndAnimateTransientTaskbar(true); } else if (tag instanceof ItemClickProxy) { Loading @@ -847,6 +849,31 @@ public class TaskbarActivityContext extends BaseTaskbarContext { AbstractFloatingView.closeAllOpenViews(this); } /** * Run when the user taps a Taskbar icon while in Overview. If the tapped app is currently * visible to the user in Overview, or is part of a visible split pair, we expand the TaskView * as if the user tapped on it (preserving the split pair). Otherwise, launch it normally * (potentially breaking a split pair). */ private void launchFromTaskbarPreservingSplitIfVisible(RecentsView recents, ItemInfo info) { recents.findLastActiveTaskAndRunCallback( info.getTargetComponent(), (Consumer<Task>) foundTask -> { if (foundTask != null) { TaskView foundTaskView = recents.getTaskViewByTaskId(foundTask.key.id); if (foundTaskView != null && foundTaskView.isVisibleToUser()) { TestLogging.recordEvent( TestProtocol.SEQUENCE_MAIN, "start: taskbarAppIcon"); foundTaskView.launchTasks(); return; } } startItemInfoActivity(info); }); } private void startItemInfoActivity(ItemInfo info) { Intent intent = new Intent(info.getIntent()) .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); Loading quickstep/src/com/android/launcher3/taskbar/TaskbarUIController.java +1 −1 Original line number Diff line number Diff line Loading @@ -170,7 +170,7 @@ public class TaskbarUIController { */ public void triggerSecondAppForSplit(ItemInfoWithIcon info, Intent intent, View startingView) { RecentsView recents = getRecentsView(); recents.findLastActiveTaskAndDoSplitOperation( recents.findLastActiveTaskAndRunCallback( info.getTargetComponent(), (Consumer<Task>) foundTask -> { if (foundTask != null) { Loading quickstep/src/com/android/quickstep/views/RecentsView.java +4 −4 Original line number Diff line number Diff line Loading @@ -1275,14 +1275,14 @@ public abstract class RecentsView<ACTIVITY_TYPE extends StatefulActivity<STATE_T } /** * Pulls the list of active Tasks from RecentModel, and finds the most recently active Task * Pulls the list of active Tasks from RecentsModel, and finds the most recently active Task * matching a given ComponentName. Then uses that Task (which could be null) with the given * callback. * * Used in various splitscreen operations when we need to check if there is a currently running * Task of a certain type and use the most recent one. * Used in various task-switching or splitscreen operations when we need to check if there is a * currently running Task of a certain type and use the most recent one. */ public void findLastActiveTaskAndDoSplitOperation(ComponentName componentName, public void findLastActiveTaskAndRunCallback(ComponentName componentName, Consumer<Task> callback) { mModel.getTasks(taskGroups -> { Task lastActiveTask = null; Loading Loading
quickstep/src/com/android/launcher3/popup/QuickstepSystemShortcut.java +1 −1 Original line number Diff line number Diff line Loading @@ -101,7 +101,7 @@ public interface QuickstepSystemShortcut { RecentsView recentsView = mTarget.getOverviewPanel(); // Check if there is already an instance of this app running, if so, initiate the split // using that. recentsView.findLastActiveTaskAndDoSplitOperation( recentsView.findLastActiveTaskAndRunCallback( intent.getComponent(), (Consumer<Task>) foundTask -> { SplitSelectSource source = new SplitSelectSource(mOriginalView, Loading
quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java +33 −6 Original line number Diff line number Diff line Loading @@ -94,6 +94,7 @@ import com.android.launcher3.util.TraceHelper; import com.android.launcher3.util.ViewCache; import com.android.launcher3.views.ActivityContext; import com.android.quickstep.views.RecentsView; import com.android.quickstep.views.TaskView; import com.android.systemui.shared.recents.model.Task; import com.android.systemui.shared.rotation.RotationButtonController; import com.android.systemui.shared.system.ActivityManagerWrapper; Loading @@ -101,6 +102,7 @@ import com.android.systemui.unfold.updates.RotationChangeProvider; import com.android.systemui.unfold.util.ScopedUnfoldTransitionProgressProvider; import java.io.PrintWriter; import java.util.function.Consumer; /** * The {@link ActivityContext} with which we inflate Taskbar-related Views. This allows UI elements Loading Loading @@ -778,12 +780,12 @@ public class TaskbarActivityContext extends BaseTaskbarContext { }); }); } else if (tag instanceof WorkspaceItemInfo) { // Tapping a launchable icon on Taskbar WorkspaceItemInfo info = (WorkspaceItemInfo) tag; if (!info.isDisabled() || !ItemClickHandler.handleDisabledItemClicked(info, this)) { TaskbarUIController taskbarUIController = mControllers.uiController; RecentsView recents = taskbarUIController.getRecentsView(); if (recents != null && taskbarUIController.getRecentsView().isSplitSelectionActive()) { if (recents != null && recents.isSplitSelectionActive()) { // If we are selecting a second app for split, launch the split tasks taskbarUIController.triggerSecondAppForSplit(info, info.intent, view); } else { Loading @@ -810,7 +812,7 @@ public class TaskbarActivityContext extends BaseTaskbarContext { getSystemService(LauncherApps.class) .startShortcut(packageName, id, null, null, info.user); } else { startItemInfoActivity(info); launchFromTaskbarPreservingSplitIfVisible(recents, info); } mControllers.uiController.onTaskbarIconLaunched(info); Loading @@ -825,6 +827,7 @@ public class TaskbarActivityContext extends BaseTaskbarContext { mControllers.taskbarStashController.updateAndAnimateTransientTaskbar(true); } } else if (tag instanceof AppInfo) { // Tapping an item in AllApps AppInfo info = (AppInfo) tag; TaskbarUIController taskbarUIController = mControllers.uiController; RecentsView recents = taskbarUIController.getRecentsView(); Loading @@ -833,9 +836,8 @@ public class TaskbarActivityContext extends BaseTaskbarContext { // If we are selecting a second app for split, launch the split tasks taskbarUIController.triggerSecondAppForSplit(info, info.intent, view); } else { // Else launch the selected task startItemInfoActivity((AppInfo) tag); mControllers.uiController.onTaskbarIconLaunched((AppInfo) tag); launchFromTaskbarPreservingSplitIfVisible(recents, info); mControllers.uiController.onTaskbarIconLaunched(info); } mControllers.taskbarStashController.updateAndAnimateTransientTaskbar(true); } else if (tag instanceof ItemClickProxy) { Loading @@ -847,6 +849,31 @@ public class TaskbarActivityContext extends BaseTaskbarContext { AbstractFloatingView.closeAllOpenViews(this); } /** * Run when the user taps a Taskbar icon while in Overview. If the tapped app is currently * visible to the user in Overview, or is part of a visible split pair, we expand the TaskView * as if the user tapped on it (preserving the split pair). Otherwise, launch it normally * (potentially breaking a split pair). */ private void launchFromTaskbarPreservingSplitIfVisible(RecentsView recents, ItemInfo info) { recents.findLastActiveTaskAndRunCallback( info.getTargetComponent(), (Consumer<Task>) foundTask -> { if (foundTask != null) { TaskView foundTaskView = recents.getTaskViewByTaskId(foundTask.key.id); if (foundTaskView != null && foundTaskView.isVisibleToUser()) { TestLogging.recordEvent( TestProtocol.SEQUENCE_MAIN, "start: taskbarAppIcon"); foundTaskView.launchTasks(); return; } } startItemInfoActivity(info); }); } private void startItemInfoActivity(ItemInfo info) { Intent intent = new Intent(info.getIntent()) .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); Loading
quickstep/src/com/android/launcher3/taskbar/TaskbarUIController.java +1 −1 Original line number Diff line number Diff line Loading @@ -170,7 +170,7 @@ public class TaskbarUIController { */ public void triggerSecondAppForSplit(ItemInfoWithIcon info, Intent intent, View startingView) { RecentsView recents = getRecentsView(); recents.findLastActiveTaskAndDoSplitOperation( recents.findLastActiveTaskAndRunCallback( info.getTargetComponent(), (Consumer<Task>) foundTask -> { if (foundTask != null) { Loading
quickstep/src/com/android/quickstep/views/RecentsView.java +4 −4 Original line number Diff line number Diff line Loading @@ -1275,14 +1275,14 @@ public abstract class RecentsView<ACTIVITY_TYPE extends StatefulActivity<STATE_T } /** * Pulls the list of active Tasks from RecentModel, and finds the most recently active Task * Pulls the list of active Tasks from RecentsModel, and finds the most recently active Task * matching a given ComponentName. Then uses that Task (which could be null) with the given * callback. * * Used in various splitscreen operations when we need to check if there is a currently running * Task of a certain type and use the most recent one. * Used in various task-switching or splitscreen operations when we need to check if there is a * currently running Task of a certain type and use the most recent one. */ public void findLastActiveTaskAndDoSplitOperation(ComponentName componentName, public void findLastActiveTaskAndRunCallback(ComponentName componentName, Consumer<Task> callback) { mModel.getTasks(taskGroups -> { Task lastActiveTask = null; Loading