Loading quickstep/src/com/android/launcher3/uioverrides/QuickstepLauncher.java +9 −1 Original line number Diff line number Diff line Loading @@ -132,6 +132,7 @@ import com.android.launcher3.uioverrides.touchcontrollers.TaskViewTouchControlle import com.android.launcher3.uioverrides.touchcontrollers.TransposedQuickSwitchTouchController; import com.android.launcher3.uioverrides.touchcontrollers.TwoButtonNavbarTouchController; import com.android.launcher3.util.ActivityOptionsWrapper; import com.android.launcher3.util.BackPressHandler; import com.android.launcher3.util.DisplayController; import com.android.launcher3.util.Executors; import com.android.launcher3.util.IntSet; Loading Loading @@ -229,7 +230,8 @@ public class QuickstepLauncher extends Launcher { mSplitSelectStateController = new SplitSelectStateController(this, mHandler, getStateManager(), getDepthController(), getStatsLogManager(), SystemUiProxy.INSTANCE.get(this), RecentsModel.INSTANCE.get(this)); SystemUiProxy.INSTANCE.get(this), RecentsModel.INSTANCE.get(this), () -> onStateBack()); overviewPanel.init(mActionsView, mSplitSelectStateController); mSplitWithKeyboardShortcutController = new SplitWithKeyboardShortcutController(this, mSplitSelectStateController); Loading @@ -254,6 +256,7 @@ public class QuickstepLauncher extends Launcher { mEnableWidgetDepth = SystemProperties.getBoolean("ro.launcher.depth.widget", true); getWorkspace().addOverlayCallback(progress -> onTaskbarInAppDisplayProgressUpdate(progress, MINUS_ONE_PAGE_PROGRESS_INDEX)); addBackAnimationCallback(mSplitSelectStateController.getSplitBackHandler()); } @Override Loading Loading @@ -479,6 +482,7 @@ public class QuickstepLauncher extends Launcher { mHotseatPredictionController.destroy(); mSplitWithKeyboardShortcutController.onDestroy(); if (mViewCapture != null) mViewCapture.close(); removeBackAnimationCallback(mSplitSelectStateController.getSplitBackHandler()); } @Override Loading Loading @@ -663,6 +667,10 @@ public class QuickstepLauncher extends Launcher { anim.buildAnim().start(); } @Override protected boolean isSplitSelectionEnabled() { return mSplitSelectStateController.isSplitSelectActive(); } @Override protected void onResume() { Loading quickstep/src/com/android/quickstep/RecentsActivity.java +2 −1 Original line number Diff line number Diff line Loading @@ -136,7 +136,8 @@ public final class RecentsActivity extends StatefulActivity<RecentsState> { mSplitSelectStateController = new SplitSelectStateController(this, mHandler, getStateManager(), null /* depthController */, getStatsLogManager(), SystemUiProxy.INSTANCE.get(this), RecentsModel.INSTANCE.get(this)); SystemUiProxy.INSTANCE.get(this), RecentsModel.INSTANCE.get(this), null /*activityBackCallback*/); mDragLayer.recreateControllers(); mFallbackRecentsView.init(mActionsView, mSplitSelectStateController); Loading quickstep/src/com/android/quickstep/util/SplitSelectStateController.java +32 −5 Original line number Diff line number Diff line Loading @@ -42,7 +42,6 @@ import android.app.ActivityManager; import android.app.ActivityOptions; import android.app.ActivityThread; import android.app.PendingIntent; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; import android.content.pm.ShortcutInfo; Loading Loading @@ -77,8 +76,10 @@ import com.android.launcher3.logging.StatsLogManager; import com.android.launcher3.model.data.ItemInfo; import com.android.launcher3.statehandlers.DepthController; import com.android.launcher3.statemanager.StateManager; import com.android.launcher3.statemanager.StatefulActivity; import com.android.launcher3.testing.TestLogging; import com.android.launcher3.testing.shared.TestProtocol; import com.android.launcher3.util.BackPressHandler; import com.android.launcher3.util.ComponentKey; import com.android.launcher3.util.SplitConfigurationOptions.StagePosition; import com.android.quickstep.OverviewComponentObserver; Loading Loading @@ -113,9 +114,11 @@ import java.util.function.Consumer; public class SplitSelectStateController { private static final String TAG = "SplitSelectStateCtor"; private Context mContext; private StatefulActivity mContext; private final Handler mHandler; private final RecentsModel mRecentTasksModel; @Nullable private final Runnable mActivityBackCallback; private final SplitAnimationController mSplitAnimationController; private final AppPairsController mAppPairsController; private final SplitSelectDataHolder mSplitSelectDataHolder; Loading @@ -142,9 +145,28 @@ public class SplitSelectStateController { private final List<SplitSelectionListener> mSplitSelectionListeners = new ArrayList<>(); public SplitSelectStateController(Context context, Handler handler, StateManager stateManager, DepthController depthController, StatsLogManager statsLogManager, SystemUiProxy systemUiProxy, RecentsModel recentsModel) { private final BackPressHandler mSplitBackHandler = new BackPressHandler() { @Override public boolean canHandleBack() { return FeatureFlags.ENABLE_SPLIT_FROM_WORKSPACE_TO_WORKSPACE.get() && isSplitSelectActive(); } @Override public void onBackInvoked() { // When exiting from split selection, leave current context to go to // homescreen as well getSplitAnimationController().playPlaceholderDismissAnim(mContext); if (mActivityBackCallback != null) { mActivityBackCallback.run(); } } }; public SplitSelectStateController(StatefulActivity context, Handler handler, StateManager stateManager, DepthController depthController, StatsLogManager statsLogManager, SystemUiProxy systemUiProxy, RecentsModel recentsModel, Runnable activityBackCallback) { mContext = context; mHandler = handler; mStatsLogManager = statsLogManager; Loading @@ -152,6 +174,7 @@ public class SplitSelectStateController { mStateManager = stateManager; mDepthController = depthController; mRecentTasksModel = recentsModel; mActivityBackCallback = activityBackCallback; mSplitAnimationController = new SplitAnimationController(this); mAppPairsController = new AppPairsController(context, this, statsLogManager); mSplitSelectDataHolder = new SplitSelectDataHolder(mContext); Loading Loading @@ -716,6 +739,10 @@ public class SplitSelectStateController { return mAppPairsController; } public BackPressHandler getSplitBackHandler() { return mSplitBackHandler; } public void dump(String prefix, PrintWriter writer) { if (mSplitSelectDataHolder != null) { mSplitSelectDataHolder.dump(prefix, writer); Loading quickstep/src/com/android/quickstep/views/FloatingTaskView.java +15 −2 Original line number Diff line number Diff line /* * Copyright (C) 2023 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.quickstep.views; import static com.android.app.animation.Interpolators.LINEAR; Loading Loading @@ -47,8 +62,6 @@ import com.android.systemui.shared.system.QuickStepContract; * {@link #addConfirmAnimation(PendingAnimation, RectF, Rect, boolean, boolean)} * giving a starting and ending bounds. Currently this is set to use the split placeholder view, * but it could be generified. * * TODO: Figure out how to copy thumbnail data from existing TaskView to this view. */ public class FloatingTaskView extends FrameLayout { Loading quickstep/tests/src/com/android/quickstep/util/SplitSelectStateControllerTest.kt +4 −2 Original line number Diff line number Diff line Loading @@ -31,6 +31,7 @@ import com.android.launcher3.logging.StatsLogManager import com.android.launcher3.model.data.ItemInfo import com.android.launcher3.statehandlers.DepthController import com.android.launcher3.statemanager.StateManager import com.android.launcher3.statemanager.StatefulActivity import com.android.launcher3.util.ComponentKey import com.android.launcher3.util.SplitConfigurationOptions import com.android.launcher3.util.withArgCaptor Loading Loading @@ -58,7 +59,7 @@ class SplitSelectStateControllerTest { @Mock lateinit var statsLogManager: StatsLogManager @Mock lateinit var stateManager: StateManager<LauncherState> @Mock lateinit var handler: Handler @Mock lateinit var context: Context @Mock lateinit var context: StatefulActivity<*> @Mock lateinit var recentsModel: RecentsModel @Mock lateinit var pendingIntent: PendingIntent Loading @@ -81,7 +82,8 @@ class SplitSelectStateControllerTest { depthController, statsLogManager, systemUiProxy, recentsModel recentsModel, null /*activityBackCallback*/ ) } Loading Loading
quickstep/src/com/android/launcher3/uioverrides/QuickstepLauncher.java +9 −1 Original line number Diff line number Diff line Loading @@ -132,6 +132,7 @@ import com.android.launcher3.uioverrides.touchcontrollers.TaskViewTouchControlle import com.android.launcher3.uioverrides.touchcontrollers.TransposedQuickSwitchTouchController; import com.android.launcher3.uioverrides.touchcontrollers.TwoButtonNavbarTouchController; import com.android.launcher3.util.ActivityOptionsWrapper; import com.android.launcher3.util.BackPressHandler; import com.android.launcher3.util.DisplayController; import com.android.launcher3.util.Executors; import com.android.launcher3.util.IntSet; Loading Loading @@ -229,7 +230,8 @@ public class QuickstepLauncher extends Launcher { mSplitSelectStateController = new SplitSelectStateController(this, mHandler, getStateManager(), getDepthController(), getStatsLogManager(), SystemUiProxy.INSTANCE.get(this), RecentsModel.INSTANCE.get(this)); SystemUiProxy.INSTANCE.get(this), RecentsModel.INSTANCE.get(this), () -> onStateBack()); overviewPanel.init(mActionsView, mSplitSelectStateController); mSplitWithKeyboardShortcutController = new SplitWithKeyboardShortcutController(this, mSplitSelectStateController); Loading @@ -254,6 +256,7 @@ public class QuickstepLauncher extends Launcher { mEnableWidgetDepth = SystemProperties.getBoolean("ro.launcher.depth.widget", true); getWorkspace().addOverlayCallback(progress -> onTaskbarInAppDisplayProgressUpdate(progress, MINUS_ONE_PAGE_PROGRESS_INDEX)); addBackAnimationCallback(mSplitSelectStateController.getSplitBackHandler()); } @Override Loading Loading @@ -479,6 +482,7 @@ public class QuickstepLauncher extends Launcher { mHotseatPredictionController.destroy(); mSplitWithKeyboardShortcutController.onDestroy(); if (mViewCapture != null) mViewCapture.close(); removeBackAnimationCallback(mSplitSelectStateController.getSplitBackHandler()); } @Override Loading Loading @@ -663,6 +667,10 @@ public class QuickstepLauncher extends Launcher { anim.buildAnim().start(); } @Override protected boolean isSplitSelectionEnabled() { return mSplitSelectStateController.isSplitSelectActive(); } @Override protected void onResume() { Loading
quickstep/src/com/android/quickstep/RecentsActivity.java +2 −1 Original line number Diff line number Diff line Loading @@ -136,7 +136,8 @@ public final class RecentsActivity extends StatefulActivity<RecentsState> { mSplitSelectStateController = new SplitSelectStateController(this, mHandler, getStateManager(), null /* depthController */, getStatsLogManager(), SystemUiProxy.INSTANCE.get(this), RecentsModel.INSTANCE.get(this)); SystemUiProxy.INSTANCE.get(this), RecentsModel.INSTANCE.get(this), null /*activityBackCallback*/); mDragLayer.recreateControllers(); mFallbackRecentsView.init(mActionsView, mSplitSelectStateController); Loading
quickstep/src/com/android/quickstep/util/SplitSelectStateController.java +32 −5 Original line number Diff line number Diff line Loading @@ -42,7 +42,6 @@ import android.app.ActivityManager; import android.app.ActivityOptions; import android.app.ActivityThread; import android.app.PendingIntent; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; import android.content.pm.ShortcutInfo; Loading Loading @@ -77,8 +76,10 @@ import com.android.launcher3.logging.StatsLogManager; import com.android.launcher3.model.data.ItemInfo; import com.android.launcher3.statehandlers.DepthController; import com.android.launcher3.statemanager.StateManager; import com.android.launcher3.statemanager.StatefulActivity; import com.android.launcher3.testing.TestLogging; import com.android.launcher3.testing.shared.TestProtocol; import com.android.launcher3.util.BackPressHandler; import com.android.launcher3.util.ComponentKey; import com.android.launcher3.util.SplitConfigurationOptions.StagePosition; import com.android.quickstep.OverviewComponentObserver; Loading Loading @@ -113,9 +114,11 @@ import java.util.function.Consumer; public class SplitSelectStateController { private static final String TAG = "SplitSelectStateCtor"; private Context mContext; private StatefulActivity mContext; private final Handler mHandler; private final RecentsModel mRecentTasksModel; @Nullable private final Runnable mActivityBackCallback; private final SplitAnimationController mSplitAnimationController; private final AppPairsController mAppPairsController; private final SplitSelectDataHolder mSplitSelectDataHolder; Loading @@ -142,9 +145,28 @@ public class SplitSelectStateController { private final List<SplitSelectionListener> mSplitSelectionListeners = new ArrayList<>(); public SplitSelectStateController(Context context, Handler handler, StateManager stateManager, DepthController depthController, StatsLogManager statsLogManager, SystemUiProxy systemUiProxy, RecentsModel recentsModel) { private final BackPressHandler mSplitBackHandler = new BackPressHandler() { @Override public boolean canHandleBack() { return FeatureFlags.ENABLE_SPLIT_FROM_WORKSPACE_TO_WORKSPACE.get() && isSplitSelectActive(); } @Override public void onBackInvoked() { // When exiting from split selection, leave current context to go to // homescreen as well getSplitAnimationController().playPlaceholderDismissAnim(mContext); if (mActivityBackCallback != null) { mActivityBackCallback.run(); } } }; public SplitSelectStateController(StatefulActivity context, Handler handler, StateManager stateManager, DepthController depthController, StatsLogManager statsLogManager, SystemUiProxy systemUiProxy, RecentsModel recentsModel, Runnable activityBackCallback) { mContext = context; mHandler = handler; mStatsLogManager = statsLogManager; Loading @@ -152,6 +174,7 @@ public class SplitSelectStateController { mStateManager = stateManager; mDepthController = depthController; mRecentTasksModel = recentsModel; mActivityBackCallback = activityBackCallback; mSplitAnimationController = new SplitAnimationController(this); mAppPairsController = new AppPairsController(context, this, statsLogManager); mSplitSelectDataHolder = new SplitSelectDataHolder(mContext); Loading Loading @@ -716,6 +739,10 @@ public class SplitSelectStateController { return mAppPairsController; } public BackPressHandler getSplitBackHandler() { return mSplitBackHandler; } public void dump(String prefix, PrintWriter writer) { if (mSplitSelectDataHolder != null) { mSplitSelectDataHolder.dump(prefix, writer); Loading
quickstep/src/com/android/quickstep/views/FloatingTaskView.java +15 −2 Original line number Diff line number Diff line /* * Copyright (C) 2023 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.quickstep.views; import static com.android.app.animation.Interpolators.LINEAR; Loading Loading @@ -47,8 +62,6 @@ import com.android.systemui.shared.system.QuickStepContract; * {@link #addConfirmAnimation(PendingAnimation, RectF, Rect, boolean, boolean)} * giving a starting and ending bounds. Currently this is set to use the split placeholder view, * but it could be generified. * * TODO: Figure out how to copy thumbnail data from existing TaskView to this view. */ public class FloatingTaskView extends FrameLayout { Loading
quickstep/tests/src/com/android/quickstep/util/SplitSelectStateControllerTest.kt +4 −2 Original line number Diff line number Diff line Loading @@ -31,6 +31,7 @@ import com.android.launcher3.logging.StatsLogManager import com.android.launcher3.model.data.ItemInfo import com.android.launcher3.statehandlers.DepthController import com.android.launcher3.statemanager.StateManager import com.android.launcher3.statemanager.StatefulActivity import com.android.launcher3.util.ComponentKey import com.android.launcher3.util.SplitConfigurationOptions import com.android.launcher3.util.withArgCaptor Loading Loading @@ -58,7 +59,7 @@ class SplitSelectStateControllerTest { @Mock lateinit var statsLogManager: StatsLogManager @Mock lateinit var stateManager: StateManager<LauncherState> @Mock lateinit var handler: Handler @Mock lateinit var context: Context @Mock lateinit var context: StatefulActivity<*> @Mock lateinit var recentsModel: RecentsModel @Mock lateinit var pendingIntent: PendingIntent Loading @@ -81,7 +82,8 @@ class SplitSelectStateControllerTest { depthController, statsLogManager, systemUiProxy, recentsModel recentsModel, null /*activityBackCallback*/ ) } Loading