From af6daa2873a82e9222cad3589061e5c2b26702b5 Mon Sep 17 00:00:00 2001 From: Pinyao Ting Date: Wed, 18 Sep 2019 22:18:03 +0000 Subject: [PATCH 1/2] Revert "Revert "support scroll backward to minus one screen via voice/switch access"" This reverts commit 3ad4ace203c73aebac98010812703dbb6879d55d. Reason for revert: roll forward and bugfixes Change-Id: Icd56cdeddb3baf9819700cc567c04af0905825ef --- src/com/android/launcher3/PagedView.java | 22 +++++++++++++++------- src/com/android/launcher3/Workspace.java | 7 +++++++ 2 files changed, 22 insertions(+), 7 deletions(-) diff --git a/src/com/android/launcher3/PagedView.java b/src/com/android/launcher3/PagedView.java index a99c7c28f9..5c790f3797 100644 --- a/src/com/android/launcher3/PagedView.java +++ b/src/com/android/launcher3/PagedView.java @@ -1548,7 +1548,7 @@ public abstract class PagedView extends ViewGrou snapToPage(getNextPage() - 1); return true; } - return false; + return onOverscroll(-getMeasuredWidth()); } public boolean scrollRight() { @@ -1556,7 +1556,15 @@ public abstract class PagedView extends ViewGrou snapToPage(getNextPage() + 1); return true; } - return false; + return onOverscroll(getMeasuredWidth()); + } + + protected boolean onOverscroll(int amount) { + if (!mAllowOverScroll) return false; + onScrollInteractionBegin(); + overScroll(amount); + onScrollInteractionEnd(); + return true; } @Override @@ -1576,8 +1584,9 @@ public abstract class PagedView extends ViewGrou public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) { super.onInitializeAccessibilityNodeInfo(info); final boolean pagesFlipped = isPageOrderFlipped(); - info.setScrollable(getPageCount() > 1); - if (getCurrentPage() < getPageCount() - 1) { + int offset = (mAllowOverScroll ? 0 : 1); + info.setScrollable(getPageCount() > offset); + if (getCurrentPage() < getPageCount() - offset) { info.addAction(pagesFlipped ? AccessibilityNodeInfo.AccessibilityAction.ACTION_SCROLL_BACKWARD : AccessibilityNodeInfo.AccessibilityAction.ACTION_SCROLL_FORWARD); @@ -1585,7 +1594,7 @@ public abstract class PagedView extends ViewGrou AccessibilityNodeInfo.AccessibilityAction.ACTION_PAGE_LEFT : AccessibilityNodeInfo.AccessibilityAction.ACTION_PAGE_RIGHT); } - if (getCurrentPage() > 0) { + if (getCurrentPage() >= offset) { info.addAction(pagesFlipped ? AccessibilityNodeInfo.AccessibilityAction.ACTION_SCROLL_FORWARD : AccessibilityNodeInfo.AccessibilityAction.ACTION_SCROLL_BACKWARD); @@ -1593,7 +1602,6 @@ public abstract class PagedView extends ViewGrou AccessibilityNodeInfo.AccessibilityAction.ACTION_PAGE_RIGHT : AccessibilityNodeInfo.AccessibilityAction.ACTION_PAGE_LEFT); } - // Accessibility-wise, PagedView doesn't support long click, so disabling it. // Besides disabling the accessibility long-click, this also prevents this view from getting // accessibility focus. @@ -1612,7 +1620,7 @@ public abstract class PagedView extends ViewGrou @Override public void onInitializeAccessibilityEvent(AccessibilityEvent event) { super.onInitializeAccessibilityEvent(event); - event.setScrollable(getPageCount() > 1); + event.setScrollable(mAllowOverScroll || getPageCount() > 1); } @Override diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java index f9201d04c7..1cb15db98e 100644 --- a/src/com/android/launcher3/Workspace.java +++ b/src/com/android/launcher3/Workspace.java @@ -1034,6 +1034,13 @@ public class Workspace extends PagedView } } + @Override + protected boolean onOverscroll(int amount) { + // Enforce overscroll on -1 direction + if ((amount > 0 && !mIsRtl) || (amount < 0 && mIsRtl)) return false; + return super.onOverscroll(amount); + } + @Override protected boolean shouldFlingForVelocity(int velocityX) { // When the overlay is moving, the fling or settle transition is controlled by the overlay. From 7752023c08643554ef422447c8ed841476137f8f Mon Sep 17 00:00:00 2001 From: Pinyao Ting Date: Wed, 18 Sep 2019 17:10:54 -0700 Subject: [PATCH 2/2] fix test for a11y change in supporting -1 page Bug: 140406263 Change-Id: I0a39db135a5e5b0fe570ace55a368a7f4b6cb453 Test: run TaplTestLauncher3 locally --- src/com/android/launcher3/PagedView.java | 7 +++++++ .../launcher3/testing/TestInformationHandler.java | 11 ++++++++++- src/com/android/launcher3/testing/TestProtocol.java | 2 ++ tests/tapl/com/android/launcher3/tapl/Workspace.java | 11 ++++++----- 4 files changed, 25 insertions(+), 6 deletions(-) diff --git a/src/com/android/launcher3/PagedView.java b/src/com/android/launcher3/PagedView.java index 5c790f3797..34b102c0b7 100644 --- a/src/com/android/launcher3/PagedView.java +++ b/src/com/android/launcher3/PagedView.java @@ -1708,4 +1708,11 @@ public abstract class PagedView extends ViewGrou mTmpIntPair[1] = rightChild; return mTmpIntPair; } + + /** + * Returns true if overscroll is allowed, otherwise false. + */ + public boolean allowOverScroll() { + return mAllowOverScroll; + } } diff --git a/src/com/android/launcher3/testing/TestInformationHandler.java b/src/com/android/launcher3/testing/TestInformationHandler.java index 0d1d1a6709..d62b591b8c 100644 --- a/src/com/android/launcher3/testing/TestInformationHandler.java +++ b/src/com/android/launcher3/testing/TestInformationHandler.java @@ -15,9 +15,10 @@ */ package com.android.launcher3.testing; -import static com.android.launcher3.util.Executors.MAIN_EXECUTOR; import static android.graphics.Bitmap.Config.ARGB_8888; +import static com.android.launcher3.util.Executors.MAIN_EXECUTOR; + import android.content.Context; import android.graphics.Bitmap; import android.graphics.Color; @@ -81,6 +82,14 @@ public class TestInformationHandler implements ResourceBasedOverride { break; } + case TestProtocol.REQUEST_DOES_WORKSPACE_HAVE_SECOND_PAGE: { + if (mLauncher == null) return null; + + response.putBoolean(TestProtocol.TEST_INFO_RESPONSE_FIELD, + mLauncher.getWorkspace().getPageCount() > 1); + break; + } + case TestProtocol.REQUEST_IS_LAUNCHER_INITIALIZED: { response.putBoolean(TestProtocol.TEST_INFO_RESPONSE_FIELD, true); break; diff --git a/src/com/android/launcher3/testing/TestProtocol.java b/src/com/android/launcher3/testing/TestProtocol.java index 19c557c9ff..a68a140ef3 100644 --- a/src/com/android/launcher3/testing/TestProtocol.java +++ b/src/com/android/launcher3/testing/TestProtocol.java @@ -66,6 +66,8 @@ public final class TestProtocol { "all-apps-to-overview-swipe-height"; public static final String REQUEST_HOME_TO_ALL_APPS_SWIPE_HEIGHT = "home-to-all-apps-swipe-height"; + public static final String REQUEST_DOES_WORKSPACE_HAVE_SECOND_PAGE = + "does-workspace-have-second-page"; public static final String REQUEST_HOTSEAT_TOP = "hotseat-top"; public static final String REQUEST_IS_LAUNCHER_INITIALIZED = "is-launcher-initialized"; public static final String REQUEST_FREEZE_APP_LIST = "freeze-app-list"; diff --git a/tests/tapl/com/android/launcher3/tapl/Workspace.java b/tests/tapl/com/android/launcher3/tapl/Workspace.java index 510ea14091..d556afc9ba 100644 --- a/tests/tapl/com/android/launcher3/tapl/Workspace.java +++ b/tests/tapl/com/android/launcher3/tapl/Workspace.java @@ -22,6 +22,7 @@ import static junit.framework.TestCase.assertTrue; import android.graphics.Point; import android.graphics.Rect; +import android.os.Bundle; import android.os.SystemClock; import android.view.KeyEvent; import android.view.MotionEvent; @@ -125,7 +126,7 @@ public final class Workspace extends Home { */ public void ensureWorkspaceIsScrollable() { final UiObject2 workspace = verifyActiveContainer(); - if (!isWorkspaceScrollable(workspace)) { + if (!isWorkspaceScrollable()) { try (LauncherInstrumentation.Closable c = mLauncher.addContextLayer( "dragging icon to a second page of workspace to make it scrollable")) { dragIconToWorkspace( @@ -137,12 +138,12 @@ public final class Workspace extends Home { verifyActiveContainer(); } } - assertTrue("Home screen workspace didn't become scrollable", - isWorkspaceScrollable(workspace)); + assertTrue("Home screen workspace didn't become scrollable", isWorkspaceScrollable()); } - private boolean isWorkspaceScrollable(UiObject2 workspace) { - return workspace.isScrollable(); + private boolean isWorkspaceScrollable() { + Bundle result = mLauncher.getTestInfo(TestProtocol.REQUEST_DOES_WORKSPACE_HAVE_SECOND_PAGE); + return result.getBoolean(TestProtocol.TEST_INFO_RESPONSE_FIELD, false); } @NonNull