diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index bafb528dd1..2eda54d962 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -3036,6 +3036,7 @@ public class Launcher extends StatefulActivity return mPopupDataProvider.getDotInfoForItem(info); } + @NonNull public LauncherOverlayManager getOverlayManager() { return mOverlayManager; } diff --git a/src/com/android/launcher3/PagedView.java b/src/com/android/launcher3/PagedView.java index 365fbd3919..0ec3b79071 100644 --- a/src/com/android/launcher3/PagedView.java +++ b/src/com/android/launcher3/PagedView.java @@ -1463,6 +1463,15 @@ public abstract class PagedView extends ViewGrou mEdgeGlowLeft.onFlingVelocity(velocity); mEdgeGlowRight.onFlingVelocity(velocity); } + + // Detect if user tries to swipe to -1 page but gets disallowed by checking if there was + // left-over values in mEdgeGlowLeft (or mEdgeGlowRight in RLT). + final int layoutDir = getLayoutDirection(); + if ((mEdgeGlowLeft.getDistance() > 0 && layoutDir == LAYOUT_DIRECTION_LTR) + || (mEdgeGlowRight.getDistance() > 0 && layoutDir == LAYOUT_DIRECTION_RTL)) { + onDisallowSwipeToMinusOnePage(); + } + mEdgeGlowLeft.onRelease(ev); mEdgeGlowRight.onRelease(ev); // End any intermediate reordering states @@ -1487,6 +1496,8 @@ public abstract class PagedView extends ViewGrou return true; } + protected void onDisallowSwipeToMinusOnePage() {} + protected void onNotSnappingToPageInFreeScroll() { } /** diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java index 255260e8af..0e9c8610e6 100644 --- a/src/com/android/launcher3/Workspace.java +++ b/src/com/android/launcher3/Workspace.java @@ -1123,6 +1123,11 @@ public class Workspace extends PagedView return super.onTouchEvent(ev); } + @Override + protected void onDisallowSwipeToMinusOnePage() { + mLauncher.getOverlayManager().onDisallowSwipeToMinusOnePage(); + } + /** * Called directly from a CellLayout (not by the framework), after we've been added as a * listener via setOnInterceptTouchEventListener(). This allows us to tell the CellLayout diff --git a/src_plugins/com/android/systemui/plugins/shared/LauncherOverlayManager.java b/src_plugins/com/android/systemui/plugins/shared/LauncherOverlayManager.java index a940774ff0..eaa9ef0b20 100644 --- a/src_plugins/com/android/systemui/plugins/shared/LauncherOverlayManager.java +++ b/src_plugins/com/android/systemui/plugins/shared/LauncherOverlayManager.java @@ -49,6 +49,8 @@ public interface LauncherOverlayManager { default void onActivityDestroyed() { } + default void onDisallowSwipeToMinusOnePage() {} + /** * @deprecated use LauncherOverlayTouchProxy directly */