am 6961d374: am 34c17803: am 52a653f3: Fix 2241848 - 3D apps folder does not send accessibility events

Merge commit '6961d3744b5491b2e7777c64bbc0976cf9f8c4b4'

* commit '6961d3744b5491b2e7777c64bbc0976cf9f8c4b4':
  Fix 2241848 - 3D apps folder does not send accessibility events
diff --git a/res/values/strings.xml b/res/values/strings.xml
index c91e533..b642ead 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -88,6 +88,12 @@
     <!-- Title of dialog when user is selecting live folder to add to homescreen -->
     <string name="title_select_live_folder">Select folder</string>
 
+    <!-- All applications label for accessibilty (spoken when the button gets focus). -->
+    <string name="all_apps_button_label">All applications</string>
+    <!-- Label for button in all applications label to go back home (to the workspace / desktop)
+         for accessibilty (spoken when the button gets focus). -->
+    <string name="all_apps_home_button_label">Home</string>
+
     <!-- Menus items: -->
     <skip />
     <!-- Verb, menu item used to add an item on the desktop -->
diff --git a/src/com/android/launcher2/AllAppsView.java b/src/com/android/launcher2/AllAppsView.java
index 76fee5b..a4891da 100644
--- a/src/com/android/launcher2/AllAppsView.java
+++ b/src/com/android/launcher2/AllAppsView.java
@@ -46,6 +46,7 @@
 import android.view.VelocityTracker;
 import android.view.View;
 import android.view.ViewConfiguration;
+import android.view.accessibility.AccessibilityEvent;
 
 import java.util.ArrayList;
 import java.util.Collections;
@@ -565,6 +566,44 @@
         return true;
     }
 
+    @Override
+    public boolean dispatchPopulateAccessibilityEvent(AccessibilityEvent event) {
+        if (event.getEventType() == AccessibilityEvent.TYPE_VIEW_SELECTED) {
+            if (!isVisible()) {
+                return false;
+            }
+            String text = null;
+            int index;
+            int count = mAllAppsList.size() + 1; // +1 is home
+            int pos = -1;
+            switch (mLastSelection) {
+            case SELECTION_ICONS:
+                index = mRollo.mState.selectedIconIndex;
+                if (index >= 0) {
+                    ApplicationInfo info = mAllAppsList.get(index);
+                    if (info.title != null) {
+                        text = info.title.toString();
+                        pos = index;
+                    }
+                }
+                break;
+            case SELECTION_HOME:
+                text = getContext().getString(R.string.all_apps_home_button_label);
+                pos = count;
+                break;
+            }
+            if (text != null) {
+                Log.d(TAG, "dispatchPopulateAccessibilityEvent setting text=" + text);
+                event.setEnabled(true);
+                event.getText().add(text);
+                //event.setContentDescription(text);
+                event.setItemCount(count);
+                event.setCurrentItemIndex(pos);
+            }
+        }
+        return false;
+    }
+
     public void setDragController(DragController dragger) {
         mDragController = dragger;
     }
@@ -1286,19 +1325,28 @@
                     mLastSelection = SELECTION_ICONS;
                 }
 
+                int prev = mState.selectedIconIndex;
                 mState.selectedIconIndex = index;
 
+                ApplicationInfo info = mAllAppsList.get(index);
                 Bitmap selectionBitmap = mSelectionBitmap;
 
                 Utilities.drawSelectedAllAppsBitmap(mSelectionCanvas,
                         selectionBitmap.getWidth(), selectionBitmap.getHeight(),
-                        pressed == SELECTED_PRESSED,
-                        mAllAppsList.get(index).iconBitmap);
+                        pressed == SELECTED_PRESSED, info.iconBitmap);
 
                 mSelectedIcon = Allocation.createFromBitmap(mRS, selectionBitmap,
                         Element.RGBA_8888(mRS), false);
                 mSelectedIcon.uploadToTexture(0);
                 mState.selectedIconTexture = mSelectedIcon.getID();
+
+                if (prev != index) {
+                    if (info.title != null && info.title.length() > 0) {
+                        Log.d(TAG, "sendAccessibilityEvent SELECTION_ICONS " + info.title);
+                        //setContentDescription(info.title);
+                        sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_SELECTED);
+                    }
+                }
             }
         }
 
@@ -1310,6 +1358,7 @@
         }
 
         void setHomeSelected(int mode) {
+            final int prev = mLastSelection;
             switch (mode) {
             case SELECTED_NONE:
                 mState.homeButtonId = mHomeButtonNormal.getID();
@@ -1317,6 +1366,10 @@
             case SELECTED_FOCUSED:
                 mLastSelection = SELECTION_HOME;
                 mState.homeButtonId = mHomeButtonFocused.getID();
+                if (prev != SELECTION_HOME) {
+                    Log.d(TAG, "sendAccessibilityEvent SELECTION_HOME");
+                    sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_SELECTED);
+                }
                 break;
             case SELECTED_PRESSED:
                 mState.homeButtonId = mHomeButtonPressed.getID();
diff --git a/src/com/android/launcher2/HandleView.java b/src/com/android/launcher2/HandleView.java
index 2bffe4b..e07334e 100644
--- a/src/com/android/launcher2/HandleView.java
+++ b/src/com/android/launcher2/HandleView.java
@@ -45,6 +45,8 @@
         TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.HandleView, defStyle, 0);
         mOrientation = a.getInt(R.styleable.HandleView_direction, ORIENTATION_HORIZONTAL);
         a.recycle();
+
+        setContentDescription(context.getString(R.string.all_apps_button_label));
     }
 
     @Override