OSDN Git Service

Fixing non-scrolling of workspace view after opening/closing AllApps vew.
authorVadim Tryshev <vadimt@google.com>
Fri, 15 May 2015 15:48:11 +0000 (08:48 -0700)
committerVadim Tryshev <vadimt@google.com>
Thu, 28 May 2015 21:33:36 +0000 (14:33 -0700)
The reason for non-scrolling was excluding the pages view from the
accessibility hierarchy by marking it as non-important. So, I just
removed the code manipulating [non]importance of the PagedView.

However, this would make the PagesView accessibility-focusable, which is
undesirable. It becomes focusable because it supports long clicks in "normal"
mode. Since it doesn't support accessibility long clicks (i.e. Overview mode is
fetched NOT via accessibility long-click), I just disabled accessibility
long-clickability, which made PageView non-focusable, and it started to behave
correctly.

Bug: 21281859
Change-Id: I7ab01e5f39cb37c456c961199c27458c9bda1c3d

src/com/android/launcher3/PagedView.java
src/com/android/launcher3/Workspace.java

index dda9a16..502caaf 100644 (file)
@@ -853,7 +853,7 @@ public abstract class PagedView extends ViewGroup implements ViewGroup.OnHierarc
         int offsetY = getViewportOffsetY();
 
         // Update the viewport offsets
-        mViewport.offset(offsetX,  offsetY);
+        mViewport.offset(offsetX, offsetY);
 
         final int startIndex = mIsRtl ? childCount - 1 : 0;
         final int endIndex = mIsRtl ? -1 : childCount;
@@ -2347,6 +2347,15 @@ public abstract class PagedView extends ViewGroup implements ViewGroup.OnHierarc
         if (getCurrentPage() > 0) {
             info.addAction(AccessibilityNodeInfo.ACTION_SCROLL_BACKWARD);
         }
+        info.setClassName(getClass().getName());
+
+        // 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.
+        info.setLongClickable(false);
+        if (Utilities.isLmpOrAbove()) {
+            info.removeAction(AccessibilityNodeInfo.AccessibilityAction.ACTION_LONG_CLICK);
+        }
     }
 
     @Override
index d2c37d2..8b783ab 100644 (file)
@@ -327,7 +327,6 @@ public class Workspace extends SmoothPagedView
 
         // Disable multitouch across the workspace/all apps/customize tray
         setMotionEventSplittingEnabled(true);
-        setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_YES);
     }
 
     @Override
@@ -2019,14 +2018,9 @@ public class Workspace extends SmoothPagedView
             for (int i = numCustomPages(); i < total; i++) {
                 updateAccessibilityFlags((CellLayout) getPageAt(i), i);
             }
-            if (mState == State.NORMAL) {
-                setImportantForAccessibility(IMPORTANT_FOR_ACCESSIBILITY_NO);
-            } else {
-                setImportantForAccessibility(IMPORTANT_FOR_ACCESSIBILITY_YES);
-            }
         } else {
             int accessible = mState == State.NORMAL ?
-                    IMPORTANT_FOR_ACCESSIBILITY_NO :
+                    IMPORTANT_FOR_ACCESSIBILITY_AUTO :
                         IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS;
             setImportantForAccessibility(accessible);
         }
@@ -2045,7 +2039,7 @@ public class Workspace extends SmoothPagedView
             page.setAccessibilityDelegate(mPagesAccessibilityDelegate);
         } else {
             int accessible = mState == State.NORMAL ?
-                    IMPORTANT_FOR_ACCESSIBILITY_NO :
+                    IMPORTANT_FOR_ACCESSIBILITY_AUTO :
                         IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS;
             page.setImportantForAccessibility(IMPORTANT_FOR_ACCESSIBILITY_NO);
             page.getShortcutsAndWidgets().setImportantForAccessibility(accessible);