During accessible drag, hover events were not properly getting dispatched to the DragAndDropAccessibilityDelegate

=> regressed in ag/10634216 which attemped to use onHoverListener
=> the problem is that onHoverListener is only triggered when the event is passed to the CellLayout, however, as with all dispatching, these events are handled depth first, and so in cases where a child handled the event, it would never bubble back up to the parent.
=> instead we have to continue to override dispatchHover event to always give presecedence to the delegate when it exists

b/155956518

Change-Id: Ic3ecf1b422c1821456328035a66a2fc1277e6746
diff --git a/src/com/android/launcher3/CellLayout.java b/src/com/android/launcher3/CellLayout.java
index ed71ddc..89d768c 100644
--- a/src/com/android/launcher3/CellLayout.java
+++ b/src/com/android/launcher3/CellLayout.java
@@ -182,7 +182,7 @@
     private static final Paint sPaint = new Paint();
 
     // Related to accessible drag and drop
-    private boolean mUseTouchHelper = false;
+    DragAndDropAccessibilityDelegate mTouchHelper;
 
     public CellLayout(Context context) {
         this(context, null);
@@ -290,17 +290,15 @@
         addView(mShortcutsAndWidgets);
     }
 
-
     /**
      * Sets or clears a delegate used for accessible drag and drop
      */
     public void setDragAndDropAccessibilityDelegate(DragAndDropAccessibilityDelegate delegate) {
         setOnClickListener(delegate);
-        setOnHoverListener(delegate);
         ViewCompat.setAccessibilityDelegate(this, delegate);
 
-        mUseTouchHelper = delegate != null;
-        int accessibilityFlag = mUseTouchHelper
+        mTouchHelper = delegate;
+        int accessibilityFlag = mTouchHelper != null
                 ? IMPORTANT_FOR_ACCESSIBILITY_YES : IMPORTANT_FOR_ACCESSIBILITY_NO;
         setImportantForAccessibility(accessibilityFlag);
         getShortcutsAndWidgets().setImportantForAccessibility(accessibilityFlag);
@@ -313,9 +311,18 @@
     }
 
     @Override
+    public boolean dispatchHoverEvent(MotionEvent event) {
+        // Always attempt to dispatch hover events to accessibility first.
+        if (mTouchHelper != null && mTouchHelper.dispatchHoverEvent(event)) {
+            return true;
+        }
+        return super.dispatchHoverEvent(event);
+    }
+
+    @Override
     public boolean onInterceptTouchEvent(MotionEvent ev) {
-        if (mUseTouchHelper ||
-                (mInterceptTouchListener != null && mInterceptTouchListener.onTouch(this, ev))) {
+        if (mTouchHelper != null
+                || (mInterceptTouchListener != null && mInterceptTouchListener.onTouch(this, ev))) {
             return true;
         }
         return false;