am b99788c3: Merge "Update keyboard view used by node provider. Remove global layout listener." into jb-dev

* commit 'b99788c3b8382d81dfa4353312c3c4828ac30557':
  Update keyboard view used by node provider. Remove global layout listener.
diff --git a/java/src/com/android/inputmethod/accessibility/AccessibilityEntityProvider.java b/java/src/com/android/inputmethod/accessibility/AccessibilityEntityProvider.java
index 8bc7893..9986f6e 100644
--- a/java/src/com/android/inputmethod/accessibility/AccessibilityEntityProvider.java
+++ b/java/src/com/android/inputmethod/accessibility/AccessibilityEntityProvider.java
@@ -29,7 +29,6 @@
 import android.util.SparseArray;
 import android.view.MotionEvent;
 import android.view.View;
-import android.view.ViewTreeObserver.OnGlobalLayoutListener;
 import android.view.accessibility.AccessibilityEvent;
 import android.view.inputmethod.EditorInfo;
 
@@ -51,7 +50,6 @@
     private static final String TAG = AccessibilityEntityProvider.class.getSimpleName();
     private static final int UNDEFINED = Integer.MIN_VALUE;
 
-    private final KeyboardView mKeyboardView;
     private final InputMethodService mInputMethodService;
     private final KeyCodeDescriptionMapper mKeyCodeDescriptionMapper;
     private final AccessibilityUtils mAccessibilityUtils;
@@ -68,18 +66,28 @@
     /** The virtual view identifier for the focused node. */
     private int mAccessibilityFocusedView = UNDEFINED;
 
+    /** The current keyboard view. */
+    private KeyboardView mKeyboardView;
+
     public AccessibilityEntityProvider(KeyboardView keyboardView, InputMethodService inputMethod) {
-        mKeyboardView = keyboardView;
         mInputMethodService = inputMethod;
 
         mKeyCodeDescriptionMapper = KeyCodeDescriptionMapper.getInstance();
         mAccessibilityUtils = AccessibilityUtils.getInstance();
 
+        setView(keyboardView);
+    }
+
+    /**
+     * Sets the keyboard view represented by this node provider.
+     *
+     * @param keyboardView The keyboard view to represent.
+     */
+    public void setView(KeyboardView keyboardView) {
+        mKeyboardView = keyboardView;
+
         assignVirtualViewIds();
         updateParentLocation();
-
-        // Ensure that the on-screen bounds are cleared when the layout changes.
-        mKeyboardView.getViewTreeObserver().addOnGlobalLayoutListener(mGlobalLayoutListener);
     }
 
     /**
@@ -196,8 +204,8 @@
      * @param key The key to press.
      */
     void simulateKeyPress(Key key) {
-        final int x = key.mX + (key.mWidth / 2);
-        final int y = key.mY + (key.mHeight / 2);
+        final int x = key.mHitBox.centerX();
+        final int y = key.mHitBox.centerY();
         final long downTime = SystemClock.uptimeMillis();
         final MotionEvent downEvent = MotionEvent.obtain(
                 downTime, downTime, MotionEvent.ACTION_DOWN, x, y, 0);
@@ -331,12 +339,4 @@
         // left-half of the integer and OR'ing with the y-coordinate.
         return ((0xFFFF & key.mX) << (Integer.SIZE / 2)) | (0xFFFF & key.mY);
     }
-
-    private final OnGlobalLayoutListener mGlobalLayoutListener = new OnGlobalLayoutListener() {
-        @Override
-        public void onGlobalLayout() {
-            assignVirtualViewIds();
-            updateParentLocation();
-        }
-    };
 }
diff --git a/java/src/com/android/inputmethod/accessibility/AccessibleKeyboardViewProxy.java b/java/src/com/android/inputmethod/accessibility/AccessibleKeyboardViewProxy.java
index 2623dcc..59f1eec 100644
--- a/java/src/com/android/inputmethod/accessibility/AccessibleKeyboardViewProxy.java
+++ b/java/src/com/android/inputmethod/accessibility/AccessibleKeyboardViewProxy.java
@@ -80,6 +80,10 @@
 
         // Ensure that the view has an accessibility delegate.
         ViewCompat.setAccessibilityDelegate(view, this);
+
+        if (mAccessibilityNodeProvider != null) {
+            mAccessibilityNodeProvider.setView(view);
+        }
     }
 
     /**