From 0ecfb69596c6728d0310637f209c4b606ddeb0f2 Mon Sep 17 00:00:00 2001 From: Sunny Goyal Date: Thu, 30 Sep 2021 12:07:37 -0700 Subject: [PATCH] Removing overscroll pluging support Bug: 201677812 Test: Presubmit Change-Id: Id8136e99746946ba840754ef8e71a4574f49938e --- .../com/android/quickstep/GestureState.java | 4 - .../quickstep/OverscrollPluginFactory.java | 40 --- .../quickstep/TouchInteractionService.java | 44 +-- .../OtherActivityInputConsumer.java | 3 +- .../OverscrollInputConsumer.java | 284 ------------------ .../launcher3/config/FeatureFlags.java | 16 - .../AbstractStateChangeTouchController.java | 5 +- .../systemui/plugins/OverscrollPlugin.java | 75 ----- 8 files changed, 5 insertions(+), 466 deletions(-) delete mode 100644 quickstep/src/com/android/quickstep/OverscrollPluginFactory.java delete mode 100644 quickstep/src/com/android/quickstep/inputconsumers/OverscrollInputConsumer.java delete mode 100644 src_plugins/com/android/systemui/plugins/OverscrollPlugin.java diff --git a/quickstep/src/com/android/quickstep/GestureState.java b/quickstep/src/com/android/quickstep/GestureState.java index e3ae36182e..c61554e144 100644 --- a/quickstep/src/com/android/quickstep/GestureState.java +++ b/quickstep/src/com/android/quickstep/GestureState.java @@ -122,10 +122,6 @@ public class GestureState implements RecentsAnimationCallbacks.RecentsAnimationL public static final int STATE_RECENTS_ANIMATION_ENDED = getFlagForIndex("STATE_RECENTS_ANIMATION_ENDED"); - // Called when we create an overscroll window when swiping right to left on the most recent app - public static final int STATE_OVERSCROLL_WINDOW_CREATED = - getFlagForIndex("STATE_OVERSCROLL_WINDOW_CREATED"); - // Called when RecentsView stops scrolling and settles on a TaskView. public static final int STATE_RECENTS_SCROLLING_FINISHED = getFlagForIndex("STATE_RECENTS_SCROLLING_FINISHED"); diff --git a/quickstep/src/com/android/quickstep/OverscrollPluginFactory.java b/quickstep/src/com/android/quickstep/OverscrollPluginFactory.java deleted file mode 100644 index 4c261abc7a..0000000000 --- a/quickstep/src/com/android/quickstep/OverscrollPluginFactory.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright (C) 2020 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; - -import static com.android.launcher3.util.MainThreadInitializedObject.forOverride; - -import com.android.launcher3.R; -import com.android.launcher3.util.MainThreadInitializedObject; -import com.android.launcher3.util.ResourceBasedOverride; -import com.android.systemui.plugins.OverscrollPlugin; - -/** - * Resource overrideable factory for forcing a local overscroll plugin. - * Override {@link R.string#overscroll_plugin_factory_class} to set a different class. - */ -public class OverscrollPluginFactory implements ResourceBasedOverride { - public static final MainThreadInitializedObject INSTANCE = forOverride( - OverscrollPluginFactory.class, - R.string.overscroll_plugin_factory_class); - - /** - * Get the plugin that is defined locally in launcher, as opposed to a dynamic side loaded one. - */ - public OverscrollPlugin getLocalOverscrollPlugin() { - return null; - } -} diff --git a/quickstep/src/com/android/quickstep/TouchInteractionService.java b/quickstep/src/com/android/quickstep/TouchInteractionService.java index bb8473bc1d..46b228ed30 100644 --- a/quickstep/src/com/android/quickstep/TouchInteractionService.java +++ b/quickstep/src/com/android/quickstep/TouchInteractionService.java @@ -40,7 +40,6 @@ import android.app.PendingIntent; import android.app.RemoteAction; import android.app.Service; import android.content.ComponentName; -import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.content.res.Configuration; @@ -90,7 +89,6 @@ import com.android.quickstep.inputconsumers.AssistantInputConsumer; import com.android.quickstep.inputconsumers.DeviceLockedInputConsumer; import com.android.quickstep.inputconsumers.OneHandedModeInputConsumer; import com.android.quickstep.inputconsumers.OtherActivityInputConsumer; -import com.android.quickstep.inputconsumers.OverscrollInputConsumer; import com.android.quickstep.inputconsumers.OverviewInputConsumer; import com.android.quickstep.inputconsumers.OverviewWithoutFocusInputConsumer; import com.android.quickstep.inputconsumers.ResetGestureInputConsumer; @@ -103,8 +101,6 @@ import com.android.quickstep.util.LauncherSplitScreenListener; import com.android.quickstep.util.ProtoTracer; import com.android.quickstep.util.ProxyScreenStatusProvider; import com.android.quickstep.util.SplitScreenBounds; -import com.android.systemui.plugins.OverscrollPlugin; -import com.android.systemui.plugins.PluginListener; import com.android.systemui.shared.recents.IOverviewProxy; import com.android.systemui.shared.recents.ISystemUiProxy; import com.android.systemui.shared.system.ActivityManagerWrapper; @@ -129,8 +125,8 @@ import java.util.LinkedList; * Service connected by system-UI for handling touch interaction. */ @TargetApi(Build.VERSION_CODES.R) -public class TouchInteractionService extends Service implements PluginListener, - ProtoTraceable { +public class TouchInteractionService extends Service + implements ProtoTraceable { private static final String TAG = "TouchInteractionService"; @@ -149,8 +145,6 @@ public class TouchInteractionService extends Service implements PluginListener mSquaredSlop)) { - mPassedSlop = true; - mStartDragPos.set(mLastPos.x, mLastPos.y); - mGestureState.setState(GestureState.STATE_OVERSCROLL_WINDOW_CREATED); - } - - boolean becomeActive = mPassedSlop && !mPassedActiveThreshold && isOverscrolled() - && (squaredDist > mSquaredActiveThreshold); - if (becomeActive) { - debugPrint("Past slop and past threshold, set active"); - mPassedActiveThreshold = true; - setActive(ev); - } - - if (mPassedActiveThreshold) { - debugPrint("ACTION_MOVE Relaying touch event"); - mPlugin.onTouchEvent(ev, getHorizontalDistancePx(), getVerticalDistancePx(), - (int) Math.sqrt(mSquaredFinishThreshold), mFlingDistanceThresholdPx, - mFlingVelocityThresholdPx, getDeviceState(), getUnderlyingActivity()); - } - - break; - } - case ACTION_CANCEL: - case ACTION_UP: - debugPrint("ACTION_UP"); - if (mPassedActiveThreshold) { - debugPrint("ACTION_UP Relaying touch event"); - - mPlugin.onTouchEvent(ev, getHorizontalDistancePx(), getVerticalDistancePx(), - (int) Math.sqrt(mSquaredFinishThreshold), mFlingDistanceThresholdPx, - mFlingVelocityThresholdPx, getDeviceState(), getUnderlyingActivity()); - } - - - mPassedSlop = false; - mPassedActiveThreshold = false; - mState = STATE_INACTIVE; - break; - } - - if (mState != STATE_ACTIVE) { - mDelegate.onMotionEvent(ev); - } - } - - private boolean isOverscrolled() { - if (mRecentsView == null) { - BaseDraggingActivity activity = mGestureState.getActivityInterface() - .getCreatedActivity(); - if (activity != null) { - mRecentsView = activity.getOverviewPanel(); - } - } - - // Make sure there isn't an app to quick switch to on our right - int maxIndex = 0; - - boolean atRightMostApp = mRecentsView == null - || (mRecentsView.getRunningTaskIndex() <= maxIndex); - - // Check if the gesture is within our angle threshold of horizontal - float deltaY = abs(mLastPos.y - mDownPos.y); - float deltaX = mLastPos.x - mDownPos.x; - - boolean angleInBounds = (Math.toDegrees(Math.atan2(deltaY, abs(deltaX))) < mAngleThreshold); - - boolean overscrollVisible = mPlugin.blockOtherGestures(); - boolean overscrollInvisibleAndLeftSwipe = !overscrollVisible && deltaX < 0; - boolean gestureDirectionMatchesVisibility = overscrollVisible - || overscrollInvisibleAndLeftSwipe; - return atRightMostApp && angleInBounds && gestureDirectionMatchesVisibility; - } - - private String getDeviceState() { - String deviceState = OverscrollPlugin.DEVICE_STATE_UNKNOWN; - int consumerType = mDelegate.getType(); - if (((consumerType & InputConsumer.TYPE_OVERVIEW) > 0) - || ((consumerType & InputConsumer.TYPE_OVERVIEW_WITHOUT_FOCUS)) > 0) { - deviceState = OverscrollPlugin.DEVICE_STATE_LAUNCHER; - } else if ((consumerType & InputConsumer.TYPE_OTHER_ACTIVITY) > 0) { - deviceState = OverscrollPlugin.DEVICE_STATE_APP; - } else if (((consumerType & InputConsumer.TYPE_RESET_GESTURE) > 0) - || ((consumerType & InputConsumer.TYPE_DEVICE_LOCKED) > 0)) { - deviceState = OverscrollPlugin.DEVICE_STATE_LOCKED; - } - - return deviceState; - } - - private int getHorizontalDistancePx() { - return (int) (mLastPos.x - mDownPos.x); - } - - private int getVerticalDistancePx() { - return (int) (mLastPos.y - mDownPos.y); - } - - private @NonNull String getUnderlyingActivity() { - // Overly defensive, got guidance on code review that something in the chain of - // `mGestureState.getRunningTask().topActivity` can be null and thus cause a null pointer - // exception to be thrown, but we aren't sure which part can be null. - if ((mGestureState == null) || (mGestureState.getRunningTask() == null) - || (mGestureState.getRunningTask().topActivity == null)) { - return ""; - } - return mGestureState.getRunningTask().topActivity.flattenToString(); - } -} diff --git a/src/com/android/launcher3/config/FeatureFlags.java b/src/com/android/launcher3/config/FeatureFlags.java index 0acafc0b96..2faf00ab34 100644 --- a/src/com/android/launcher3/config/FeatureFlags.java +++ b/src/com/android/launcher3/config/FeatureFlags.java @@ -72,12 +72,6 @@ public final class FeatureFlags { "PROMISE_APPS_NEW_INSTALLS", true, "Adds a promise icon to the home screen for new install sessions."); - public static final BooleanFlag QUICKSTEP_SPRINGS = getDebugFlag( - "QUICKSTEP_SPRINGS", true, "Enable springs for quickstep animations"); - - public static final BooleanFlag UNSTABLE_SPRINGS = getDebugFlag( - "UNSTABLE_SPRINGS", false, "Enable unstable springs for quickstep animations"); - public static final BooleanFlag ENABLE_LOCAL_COLOR_POPUPS = getDebugFlag( "ENABLE_LOCAL_COLOR_POPUPS", false, "Enable local color extraction for popups."); @@ -119,16 +113,6 @@ public final class FeatureFlags { public static final BooleanFlag ENABLE_PREDICTION_DISMISS = getDebugFlag( "ENABLE_PREDICTION_DISMISS", true, "Allow option to dimiss apps from predicted list"); - public static final BooleanFlag ENABLE_QUICK_CAPTURE_GESTURE = getDebugFlag( - "ENABLE_QUICK_CAPTURE_GESTURE", true, "Swipe from right to left to quick capture"); - - public static final BooleanFlag ENABLE_QUICK_CAPTURE_WINDOW = getDebugFlag( - "ENABLE_QUICK_CAPTURE_WINDOW", false, "Use window to host quick capture"); - - public static final BooleanFlag FORCE_LOCAL_OVERSCROLL_PLUGIN = getDebugFlag( - "FORCE_LOCAL_OVERSCROLL_PLUGIN", false, - "Use a launcher-provided OverscrollPlugin if available"); - public static final BooleanFlag ASSISTANT_GIVES_LAUNCHER_FOCUS = getDebugFlag( "ASSISTANT_GIVES_LAUNCHER_FOCUS", false, "Allow Launcher to handle nav bar gestures while Assistant is running over it"); diff --git a/src/com/android/launcher3/touch/AbstractStateChangeTouchController.java b/src/com/android/launcher3/touch/AbstractStateChangeTouchController.java index 5f8a4d4f3c..61d488c91b 100644 --- a/src/com/android/launcher3/touch/AbstractStateChangeTouchController.java +++ b/src/com/android/launcher3/touch/AbstractStateChangeTouchController.java @@ -21,7 +21,6 @@ import static com.android.launcher3.LauncherState.ALL_APPS; import static com.android.launcher3.LauncherState.NORMAL; import static com.android.launcher3.LauncherState.OVERVIEW; import static com.android.launcher3.anim.Interpolators.scrollInterpolatorForVelocity; -import static com.android.launcher3.config.FeatureFlags.UNSTABLE_SPRINGS; import static com.android.launcher3.logging.StatsLogManager.LAUNCHER_STATE_ALLAPPS; import static com.android.launcher3.logging.StatsLogManager.LAUNCHER_STATE_HOME; import static com.android.launcher3.logging.StatsLogManager.LAUNCHER_STATE_OVERVIEW; @@ -217,7 +216,7 @@ public abstract class AbstractStateChangeTouchController mFlingBlockCheck.blockFling(); } } - if (mToState == LauncherState.ALL_APPS && !UNSTABLE_SPRINGS.get()) { + if (mToState == LauncherState.ALL_APPS) { mAllAppsOvershootStarted = true; // 1f, value when all apps container hit the top mLauncher.getAppsView().onPull(progress - 1f, progress - 1f); @@ -333,7 +332,7 @@ public abstract class AbstractStateChangeTouchController anim.setFloatValues(startProgress, endProgress); updateSwipeCompleteAnimation(anim, duration, targetState, velocity, fling); mCurrentAnimation.dispatchOnStart(); - if (targetState == LauncherState.ALL_APPS && !UNSTABLE_SPRINGS.get()) { + if (targetState == LauncherState.ALL_APPS) { if (mAllAppsOvershootStarted) { mLauncher.getAppsView().onRelease(); mAllAppsOvershootStarted = false; diff --git a/src_plugins/com/android/systemui/plugins/OverscrollPlugin.java b/src_plugins/com/android/systemui/plugins/OverscrollPlugin.java deleted file mode 100644 index a434d078bc..0000000000 --- a/src_plugins/com/android/systemui/plugins/OverscrollPlugin.java +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Copyright (C) 2019 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.systemui.plugins; - -import android.view.MotionEvent; - -import com.android.systemui.plugins.annotations.ProvidesInterface; - -/** - * Implement this interface to receive a callback when the user swipes right - * to left on the gesture area. It won't fire if the user has quick switched to a previous app - * (swiped right) and the current app isn't yet the active one (i.e., if swiping left would take - * the user to a more recent app). - */ -@ProvidesInterface(action = com.android.systemui.plugins.OverscrollPlugin.ACTION, - version = com.android.systemui.plugins.OverscrollPlugin.VERSION) -public interface OverscrollPlugin extends Plugin { - - String ACTION = "com.android.systemui.action.PLUGIN_LAUNCHER_OVERSCROLL"; - int VERSION = 4; - - String DEVICE_STATE_LOCKED = "Locked"; - String DEVICE_STATE_LAUNCHER = "Launcher"; - String DEVICE_STATE_APP = "App"; - String DEVICE_STATE_UNKNOWN = "Unknown"; - - /** - * @return true if the plugin is active and will accept overscroll gestures - */ - boolean isActive(); - - /** - * Called when a touch has been recognized as an overscroll gesture. - * @param horizontalDistancePx Horizontal distance from the last finger location to the finger - * location when it first touched the screen. - * @param verticalDistancePx Horizontal distance from the last finger location to the finger - * location when it first touched the screen. - * @param thresholdPx Minimum distance for gesture. - * @param flingDistanceThresholdPx Minimum distance for gesture by fling. - * @param flingVelocityThresholdPx Minimum velocity for gesture by fling. - * @param deviceState String representing the current device state - * @param underlyingActivity String representing the currently active Activity - */ - void onTouchEvent(MotionEvent event, - int horizontalDistancePx, - int verticalDistancePx, - int thresholdPx, - int flingDistanceThresholdPx, - int flingVelocityThresholdPx, - String deviceState, - String underlyingActivity); - - /** - * @return `true` if overscroll gesture handling should override all other gestures. - */ - boolean blockOtherGestures(); - - /** - * @return `true` if the overscroll gesture can pan the underlying app. - */ - boolean allowsUnderlyingActivityOverscroll(); -}