Index: content/public/android/java/src/org/chromium/content/browser/accessibility/BrowserAccessibilityManager.java |
diff --git a/content/public/android/java/src/org/chromium/content/browser/accessibility/BrowserAccessibilityManager.java b/content/public/android/java/src/org/chromium/content/browser/accessibility/BrowserAccessibilityManager.java |
deleted file mode 100644 |
index 1a58d459923719032927b99cdeb3520263b5bf39..0000000000000000000000000000000000000000 |
--- a/content/public/android/java/src/org/chromium/content/browser/accessibility/BrowserAccessibilityManager.java |
+++ /dev/null |
@@ -1,620 +0,0 @@ |
-// Copyright 2013 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-package org.chromium.content.browser.accessibility; |
- |
-import android.content.Context; |
-import android.graphics.Rect; |
-import android.os.Build; |
-import android.os.Bundle; |
-import android.view.MotionEvent; |
-import android.view.View; |
-import android.view.ViewParent; |
-import android.view.accessibility.AccessibilityEvent; |
-import android.view.accessibility.AccessibilityManager; |
-import android.view.accessibility.AccessibilityNodeInfo; |
-import android.view.accessibility.AccessibilityNodeProvider; |
- |
-import org.chromium.base.CalledByNative; |
-import org.chromium.base.JNINamespace; |
-import org.chromium.content.browser.ContentViewCore; |
-import org.chromium.content.browser.RenderCoordinates; |
- |
-import java.util.ArrayList; |
-import java.util.List; |
- |
-/** |
- * Native accessibility for a {@link ContentViewCore}. |
- * |
- * This class is safe to load on ICS and can be used to run tests, but |
- * only the subclass, JellyBeanBrowserAccessibilityManager, actually |
- * has a AccessibilityNodeProvider implementation needed for native |
- * accessibility. |
- */ |
-@JNINamespace("content") |
-public class BrowserAccessibilityManager { |
- private static final String TAG = "BrowserAccessibilityManager"; |
- |
- private ContentViewCore mContentViewCore; |
- private final AccessibilityManager mAccessibilityManager; |
- private final RenderCoordinates mRenderCoordinates; |
- private long mNativeObj; |
- private int mAccessibilityFocusId; |
- private int mCurrentHoverId; |
- private int mCurrentRootId; |
- private final int[] mTempLocation = new int[2]; |
- private final View mView; |
- private boolean mUserHasTouchExplored; |
- private boolean mFrameInfoInitialized; |
- |
- // If this is true, enables an experimental feature that focuses the web page after it |
- // finishes loading. Disabled for now because it can be confusing if the user was |
- // trying to do something when this happens. |
- private boolean mFocusPageOnLoad; |
- |
- /** |
- * Create a BrowserAccessibilityManager object, which is owned by the C++ |
- * BrowserAccessibilityManagerAndroid instance, and connects to the content view. |
- * @param nativeBrowserAccessibilityManagerAndroid A pointer to the counterpart native |
- * C++ object that owns this object. |
- * @param contentViewCore The content view that this object provides accessibility for. |
- */ |
- @CalledByNative |
- private static BrowserAccessibilityManager create(long nativeBrowserAccessibilityManagerAndroid, |
- ContentViewCore contentViewCore) { |
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { |
- return new KitKatBrowserAccessibilityManager( |
- nativeBrowserAccessibilityManagerAndroid, contentViewCore); |
- } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { |
- return new JellyBeanBrowserAccessibilityManager( |
- nativeBrowserAccessibilityManagerAndroid, contentViewCore); |
- } else { |
- return new BrowserAccessibilityManager( |
- nativeBrowserAccessibilityManagerAndroid, contentViewCore); |
- } |
- } |
- |
- protected BrowserAccessibilityManager(long nativeBrowserAccessibilityManagerAndroid, |
- ContentViewCore contentViewCore) { |
- mNativeObj = nativeBrowserAccessibilityManagerAndroid; |
- mContentViewCore = contentViewCore; |
- mContentViewCore.setBrowserAccessibilityManager(this); |
- mAccessibilityFocusId = View.NO_ID; |
- mCurrentHoverId = View.NO_ID; |
- mCurrentRootId = View.NO_ID; |
- mView = mContentViewCore.getContainerView(); |
- mRenderCoordinates = mContentViewCore.getRenderCoordinates(); |
- mAccessibilityManager = |
- (AccessibilityManager) mContentViewCore.getContext() |
- .getSystemService(Context.ACCESSIBILITY_SERVICE); |
- } |
- |
- @CalledByNative |
- private void onNativeObjectDestroyed() { |
- if (mContentViewCore.getBrowserAccessibilityManager() == this) { |
- mContentViewCore.setBrowserAccessibilityManager(null); |
- } |
- mNativeObj = 0; |
- mContentViewCore = null; |
- } |
- |
- /** |
- * @return An AccessibilityNodeProvider on JellyBean, and null on previous versions. |
- */ |
- public AccessibilityNodeProvider getAccessibilityNodeProvider() { |
- return null; |
- } |
- |
- /** |
- * @see AccessibilityNodeProvider#createAccessibilityNodeInfo(int) |
- */ |
- protected AccessibilityNodeInfo createAccessibilityNodeInfo(int virtualViewId) { |
- if (!mAccessibilityManager.isEnabled() || mNativeObj == 0) { |
- return null; |
- } |
- |
- int rootId = nativeGetRootId(mNativeObj); |
- |
- if (virtualViewId == View.NO_ID) { |
- return createNodeForHost(rootId); |
- } |
- |
- if (!mFrameInfoInitialized) { |
- return null; |
- } |
- |
- final AccessibilityNodeInfo info = AccessibilityNodeInfo.obtain(mView); |
- info.setPackageName(mContentViewCore.getContext().getPackageName()); |
- info.setSource(mView, virtualViewId); |
- |
- if (virtualViewId == rootId) { |
- info.setParent(mView); |
- } |
- |
- if (nativePopulateAccessibilityNodeInfo(mNativeObj, info, virtualViewId)) { |
- return info; |
- } else { |
- info.recycle(); |
- return null; |
- } |
- } |
- |
- /** |
- * @see AccessibilityNodeProvider#findAccessibilityNodeInfosByText(String, int) |
- */ |
- protected List<AccessibilityNodeInfo> findAccessibilityNodeInfosByText(String text, |
- int virtualViewId) { |
- return new ArrayList<AccessibilityNodeInfo>(); |
- } |
- |
- /** |
- * @see AccessibilityNodeProvider#performAction(int, int, Bundle) |
- */ |
- protected boolean performAction(int virtualViewId, int action, Bundle arguments) { |
- // We don't support any actions on the host view or nodes |
- // that are not (any longer) in the tree. |
- if (!mAccessibilityManager.isEnabled() || mNativeObj == 0 |
- || !nativeIsNodeValid(mNativeObj, virtualViewId)) { |
- return false; |
- } |
- |
- switch (action) { |
- case AccessibilityNodeInfo.ACTION_ACCESSIBILITY_FOCUS: |
- if (mAccessibilityFocusId == virtualViewId) { |
- return true; |
- } |
- |
- mAccessibilityFocusId = virtualViewId; |
- sendAccessibilityEvent(mAccessibilityFocusId, |
- AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED); |
- return true; |
- case AccessibilityNodeInfo.ACTION_CLEAR_ACCESSIBILITY_FOCUS: |
- if (mAccessibilityFocusId == virtualViewId) { |
- sendAccessibilityEvent(mAccessibilityFocusId, |
- AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUS_CLEARED); |
- mAccessibilityFocusId = View.NO_ID; |
- } |
- return true; |
- case AccessibilityNodeInfo.ACTION_CLICK: |
- nativeClick(mNativeObj, virtualViewId); |
- sendAccessibilityEvent(virtualViewId, |
- AccessibilityEvent.TYPE_VIEW_CLICKED); |
- return true; |
- case AccessibilityNodeInfo.ACTION_FOCUS: |
- nativeFocus(mNativeObj, virtualViewId); |
- return true; |
- case AccessibilityNodeInfo.ACTION_CLEAR_FOCUS: |
- nativeBlur(mNativeObj); |
- return true; |
- default: |
- break; |
- } |
- return false; |
- } |
- |
- /** |
- * @see View#onHoverEvent(MotionEvent) |
- */ |
- public boolean onHoverEvent(MotionEvent event) { |
- if (!mAccessibilityManager.isEnabled() || mNativeObj == 0) { |
- return false; |
- } |
- |
- if (event.getAction() == MotionEvent.ACTION_HOVER_EXIT) return true; |
- |
- mUserHasTouchExplored = true; |
- float x = event.getX(); |
- float y = event.getY(); |
- |
- // Convert to CSS coordinates. |
- int cssX = (int) (mRenderCoordinates.fromPixToLocalCss(x) + |
- mRenderCoordinates.getScrollX()); |
- int cssY = (int) (mRenderCoordinates.fromPixToLocalCss(y) + |
- mRenderCoordinates.getScrollY()); |
- int id = nativeHitTest(mNativeObj, cssX, cssY); |
- if (mCurrentHoverId != id) { |
- sendAccessibilityEvent(mCurrentHoverId, AccessibilityEvent.TYPE_VIEW_HOVER_EXIT); |
- sendAccessibilityEvent(id, AccessibilityEvent.TYPE_VIEW_HOVER_ENTER); |
- mCurrentHoverId = id; |
- } |
- |
- return true; |
- } |
- |
- /** |
- * Called by ContentViewCore to notify us when the frame info is initialized, |
- * the first time, since until that point, we can't use mRenderCoordinates to transform |
- * web coordinates to screen coordinates. |
- */ |
- public void notifyFrameInfoInitialized() { |
- if (mFrameInfoInitialized) return; |
- |
- mFrameInfoInitialized = true; |
- // Invalidate the host, since the chrome accessibility tree is now |
- // ready and listed as the child of the host. |
- mView.sendAccessibilityEvent(AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED); |
- |
- // (Re-) focus focused element, since we weren't able to create an |
- // AccessibilityNodeInfo for this element before. |
- if (mAccessibilityFocusId != View.NO_ID) { |
- sendAccessibilityEvent(mAccessibilityFocusId, |
- AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED); |
- } |
- } |
- |
- private void sendAccessibilityEvent(int virtualViewId, int eventType) { |
- // If mFrameInfoInitialized is false, then the virtual hierarchy |
- // doesn't exist in the view of the Android framework, so should |
- // never send any events. |
- if (!mAccessibilityManager.isEnabled() || mNativeObj == 0 |
- || !mFrameInfoInitialized) { |
- return; |
- } |
- |
- final AccessibilityEvent event = AccessibilityEvent.obtain(eventType); |
- event.setPackageName(mContentViewCore.getContext().getPackageName()); |
- event.setSource(mView, virtualViewId); |
- if (!nativePopulateAccessibilityEvent(mNativeObj, event, virtualViewId, eventType)) { |
- event.recycle(); |
- return; |
- } |
- |
- // This is currently needed if we want Android to draw the yellow box around |
- // the item that has accessibility focus. In practice, this doesn't seem to slow |
- // things down, because it's only called when the accessibility focus moves. |
- // TODO(dmazzoni): remove this if/when Android framework fixes bug. |
- mContentViewCore.getContainerView().postInvalidate(); |
- |
- mContentViewCore.getContainerView().requestSendAccessibilityEvent(mView, event); |
- } |
- |
- private Bundle getOrCreateBundleForAccessibilityEvent(AccessibilityEvent event) { |
- Bundle bundle = (Bundle) event.getParcelableData(); |
- if (bundle == null) { |
- bundle = new Bundle(); |
- event.setParcelableData(bundle); |
- } |
- return bundle; |
- } |
- |
- private AccessibilityNodeInfo createNodeForHost(int rootId) { |
- // Since we don't want the parent to be focusable, but we can't remove |
- // actions from a node, copy over the necessary fields. |
- final AccessibilityNodeInfo result = AccessibilityNodeInfo.obtain(mView); |
- final AccessibilityNodeInfo source = AccessibilityNodeInfo.obtain(mView); |
- mView.onInitializeAccessibilityNodeInfo(source); |
- |
- // Copy over parent and screen bounds. |
- Rect rect = new Rect(); |
- source.getBoundsInParent(rect); |
- result.setBoundsInParent(rect); |
- source.getBoundsInScreen(rect); |
- result.setBoundsInScreen(rect); |
- |
- // Set up the parent view, if applicable. |
- final ViewParent parent = mView.getParentForAccessibility(); |
- if (parent instanceof View) { |
- result.setParent((View) parent); |
- } |
- |
- // Populate the minimum required fields. |
- result.setVisibleToUser(source.isVisibleToUser()); |
- result.setEnabled(source.isEnabled()); |
- result.setPackageName(source.getPackageName()); |
- result.setClassName(source.getClassName()); |
- |
- // Add the Chrome root node. |
- if (mFrameInfoInitialized) { |
- result.addChild(mView, rootId); |
- } |
- |
- return result; |
- } |
- |
- @CalledByNative |
- private void handlePageLoaded(int id) { |
- if (mUserHasTouchExplored) return; |
- |
- if (mFocusPageOnLoad) { |
- // Focus the natively focused node (usually document), |
- // if this feature is enabled. |
- mAccessibilityFocusId = id; |
- sendAccessibilityEvent(id, AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED); |
- } |
- } |
- |
- @CalledByNative |
- private void handleFocusChanged(int id) { |
- sendAccessibilityEvent(id, AccessibilityEvent.TYPE_VIEW_FOCUSED); |
- |
- // Update accessibility focus if not already set to this node. |
- if (mAccessibilityFocusId != id) { |
- sendAccessibilityEvent(id, AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED); |
- mAccessibilityFocusId = id; |
- } |
- } |
- |
- @CalledByNative |
- private void handleCheckStateChanged(int id) { |
- sendAccessibilityEvent(id, AccessibilityEvent.TYPE_VIEW_CLICKED); |
- } |
- |
- @CalledByNative |
- private void handleTextSelectionChanged(int id) { |
- sendAccessibilityEvent(id, AccessibilityEvent.TYPE_VIEW_TEXT_SELECTION_CHANGED); |
- } |
- |
- @CalledByNative |
- private void handleEditableTextChanged(int id) { |
- sendAccessibilityEvent(id, AccessibilityEvent.TYPE_VIEW_TEXT_CHANGED); |
- } |
- |
- @CalledByNative |
- private void handleContentChanged(int id) { |
- int rootId = nativeGetRootId(mNativeObj); |
- if (rootId != mCurrentRootId) { |
- mCurrentRootId = rootId; |
- mView.sendAccessibilityEvent(AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED); |
- } else { |
- sendAccessibilityEvent(id, AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED); |
- } |
- } |
- |
- @CalledByNative |
- private void handleNavigate() { |
- mAccessibilityFocusId = View.NO_ID; |
- mUserHasTouchExplored = false; |
- mFrameInfoInitialized = false; |
- // Invalidate the host, since its child is now gone. |
- mView.sendAccessibilityEvent(AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED); |
- } |
- |
- @CalledByNative |
- private void handleScrolledToAnchor(int id) { |
- if (mAccessibilityFocusId == id) { |
- return; |
- } |
- |
- mAccessibilityFocusId = id; |
- sendAccessibilityEvent(id, AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED); |
- } |
- |
- @CalledByNative |
- private void announceLiveRegionText(String text) { |
- mView.announceForAccessibility(text); |
- } |
- |
- @CalledByNative |
- private void setAccessibilityNodeInfoParent(AccessibilityNodeInfo node, int parentId) { |
- node.setParent(mView, parentId); |
- } |
- |
- @CalledByNative |
- private void addAccessibilityNodeInfoChild(AccessibilityNodeInfo node, int childId) { |
- node.addChild(mView, childId); |
- } |
- |
- @CalledByNative |
- private void setAccessibilityNodeInfoBooleanAttributes(AccessibilityNodeInfo node, |
- int virtualViewId, boolean checkable, boolean checked, boolean clickable, |
- boolean enabled, boolean focusable, boolean focused, boolean password, |
- boolean scrollable, boolean selected, boolean visibleToUser) { |
- node.setCheckable(checkable); |
- node.setChecked(checked); |
- node.setClickable(clickable); |
- node.setEnabled(enabled); |
- node.setFocusable(focusable); |
- node.setFocused(focused); |
- node.setPassword(password); |
- node.setScrollable(scrollable); |
- node.setSelected(selected); |
- node.setVisibleToUser(visibleToUser); |
- |
- if (focusable) { |
- if (focused) { |
- node.addAction(AccessibilityNodeInfo.ACTION_CLEAR_FOCUS); |
- } else { |
- node.addAction(AccessibilityNodeInfo.ACTION_FOCUS); |
- } |
- } |
- |
- if (mAccessibilityFocusId == virtualViewId) { |
- node.setAccessibilityFocused(true); |
- node.addAction(AccessibilityNodeInfo.ACTION_CLEAR_ACCESSIBILITY_FOCUS); |
- } else { |
- node.setAccessibilityFocused(false); |
- node.addAction(AccessibilityNodeInfo.ACTION_ACCESSIBILITY_FOCUS); |
- } |
- |
- if (clickable) { |
- node.addAction(AccessibilityNodeInfo.ACTION_CLICK); |
- } |
- } |
- |
- @CalledByNative |
- private void setAccessibilityNodeInfoStringAttributes(AccessibilityNodeInfo node, |
- String className, String contentDescription) { |
- node.setClassName(className); |
- node.setContentDescription(contentDescription); |
- } |
- |
- @CalledByNative |
- private void setAccessibilityNodeInfoLocation(AccessibilityNodeInfo node, |
- int absoluteLeft, int absoluteTop, int parentRelativeLeft, int parentRelativeTop, |
- int width, int height, boolean isRootNode) { |
- // First set the bounds in parent. |
- Rect boundsInParent = new Rect(parentRelativeLeft, parentRelativeTop, |
- parentRelativeLeft + width, parentRelativeTop + height); |
- if (isRootNode) { |
- // Offset of the web content relative to the View. |
- boundsInParent.offset(0, (int) mRenderCoordinates.getContentOffsetYPix()); |
- } |
- node.setBoundsInParent(boundsInParent); |
- |
- // Now set the absolute rect, which requires several transformations. |
- Rect rect = new Rect(absoluteLeft, absoluteTop, absoluteLeft + width, absoluteTop + height); |
- |
- // Offset by the scroll position. |
- rect.offset(-(int) mRenderCoordinates.getScrollX(), |
- -(int) mRenderCoordinates.getScrollY()); |
- |
- // Convert CSS (web) pixels to Android View pixels |
- rect.left = (int) mRenderCoordinates.fromLocalCssToPix(rect.left); |
- rect.top = (int) mRenderCoordinates.fromLocalCssToPix(rect.top); |
- rect.bottom = (int) mRenderCoordinates.fromLocalCssToPix(rect.bottom); |
- rect.right = (int) mRenderCoordinates.fromLocalCssToPix(rect.right); |
- |
- // Offset by the location of the web content within the view. |
- rect.offset(0, |
- (int) mRenderCoordinates.getContentOffsetYPix()); |
- |
- // Finally offset by the location of the view within the screen. |
- final int[] viewLocation = new int[2]; |
- mView.getLocationOnScreen(viewLocation); |
- rect.offset(viewLocation[0], viewLocation[1]); |
- |
- node.setBoundsInScreen(rect); |
- } |
- |
- @CalledByNative |
- protected void setAccessibilityNodeInfoKitKatAttributes(AccessibilityNodeInfo node, |
- boolean canOpenPopup, |
- boolean contentInvalid, |
- boolean dismissable, |
- boolean multiLine, |
- int inputType, |
- int liveRegion) { |
- // Requires KitKat or higher. |
- } |
- |
- @CalledByNative |
- protected void setAccessibilityNodeInfoCollectionInfo(AccessibilityNodeInfo node, |
- int rowCount, int columnCount, boolean hierarchical) { |
- // Requires KitKat or higher. |
- } |
- |
- @CalledByNative |
- protected void setAccessibilityNodeInfoCollectionItemInfo(AccessibilityNodeInfo node, |
- int rowIndex, int rowSpan, int columnIndex, int columnSpan, boolean heading) { |
- // Requires KitKat or higher. |
- } |
- |
- @CalledByNative |
- protected void setAccessibilityNodeInfoRangeInfo(AccessibilityNodeInfo node, |
- int rangeType, float min, float max, float current) { |
- // Requires KitKat or higher. |
- } |
- |
- @CalledByNative |
- private void setAccessibilityEventBooleanAttributes(AccessibilityEvent event, |
- boolean checked, boolean enabled, boolean password, boolean scrollable) { |
- event.setChecked(checked); |
- event.setEnabled(enabled); |
- event.setPassword(password); |
- event.setScrollable(scrollable); |
- } |
- |
- @CalledByNative |
- private void setAccessibilityEventClassName(AccessibilityEvent event, String className) { |
- event.setClassName(className); |
- } |
- |
- @CalledByNative |
- private void setAccessibilityEventListAttributes(AccessibilityEvent event, |
- int currentItemIndex, int itemCount) { |
- event.setCurrentItemIndex(currentItemIndex); |
- event.setItemCount(itemCount); |
- } |
- |
- @CalledByNative |
- private void setAccessibilityEventScrollAttributes(AccessibilityEvent event, |
- int scrollX, int scrollY, int maxScrollX, int maxScrollY) { |
- event.setScrollX(scrollX); |
- event.setScrollY(scrollY); |
- event.setMaxScrollX(maxScrollX); |
- event.setMaxScrollY(maxScrollY); |
- } |
- |
- @CalledByNative |
- private void setAccessibilityEventTextChangedAttrs(AccessibilityEvent event, |
- int fromIndex, int addedCount, int removedCount, String beforeText, String text) { |
- event.setFromIndex(fromIndex); |
- event.setAddedCount(addedCount); |
- event.setRemovedCount(removedCount); |
- event.setBeforeText(beforeText); |
- event.getText().add(text); |
- } |
- |
- @CalledByNative |
- private void setAccessibilityEventSelectionAttrs(AccessibilityEvent event, |
- int fromIndex, int addedCount, int itemCount, String text) { |
- event.setFromIndex(fromIndex); |
- event.setAddedCount(addedCount); |
- event.setItemCount(itemCount); |
- event.getText().add(text); |
- } |
- |
- @CalledByNative |
- protected void setAccessibilityEventKitKatAttributes(AccessibilityEvent event, |
- boolean canOpenPopup, |
- boolean contentInvalid, |
- boolean dismissable, |
- boolean multiLine, |
- int inputType, |
- int liveRegion) { |
- // Backwards compatibility for KitKat AccessibilityNodeInfo fields. |
- Bundle bundle = getOrCreateBundleForAccessibilityEvent(event); |
- bundle.putBoolean("AccessibilityNodeInfo.canOpenPopup", canOpenPopup); |
- bundle.putBoolean("AccessibilityNodeInfo.contentInvalid", contentInvalid); |
- bundle.putBoolean("AccessibilityNodeInfo.dismissable", dismissable); |
- bundle.putBoolean("AccessibilityNodeInfo.multiLine", multiLine); |
- bundle.putInt("AccessibilityNodeInfo.inputType", inputType); |
- bundle.putInt("AccessibilityNodeInfo.liveRegion", liveRegion); |
- } |
- |
- @CalledByNative |
- protected void setAccessibilityEventCollectionInfo(AccessibilityEvent event, |
- int rowCount, int columnCount, boolean hierarchical) { |
- // Backwards compatibility for KitKat AccessibilityNodeInfo fields. |
- Bundle bundle = getOrCreateBundleForAccessibilityEvent(event); |
- bundle.putInt("AccessibilityNodeInfo.CollectionInfo.rowCount", rowCount); |
- bundle.putInt("AccessibilityNodeInfo.CollectionInfo.columnCount", columnCount); |
- bundle.putBoolean("AccessibilityNodeInfo.CollectionInfo.hierarchical", hierarchical); |
- } |
- |
- @CalledByNative |
- protected void setAccessibilityEventCollectionItemInfo(AccessibilityEvent event, |
- int rowIndex, int rowSpan, int columnIndex, int columnSpan, boolean heading) { |
- // Backwards compatibility for KitKat AccessibilityNodeInfo fields. |
- Bundle bundle = getOrCreateBundleForAccessibilityEvent(event); |
- bundle.putInt("AccessibilityNodeInfo.CollectionItemInfo.rowIndex", rowIndex); |
- bundle.putInt("AccessibilityNodeInfo.CollectionItemInfo.rowSpan", rowSpan); |
- bundle.putInt("AccessibilityNodeInfo.CollectionItemInfo.columnIndex", columnIndex); |
- bundle.putInt("AccessibilityNodeInfo.CollectionItemInfo.columnSpan", columnSpan); |
- bundle.putBoolean("AccessibilityNodeInfo.CollectionItemInfo.heading", heading); |
- } |
- |
- @CalledByNative |
- protected void setAccessibilityEventRangeInfo(AccessibilityEvent event, |
- int rangeType, float min, float max, float current) { |
- // Backwards compatibility for KitKat AccessibilityNodeInfo fields. |
- Bundle bundle = getOrCreateBundleForAccessibilityEvent(event); |
- bundle.putInt("AccessibilityNodeInfo.RangeInfo.type", rangeType); |
- bundle.putFloat("AccessibilityNodeInfo.RangeInfo.min", min); |
- bundle.putFloat("AccessibilityNodeInfo.RangeInfo.max", max); |
- bundle.putFloat("AccessibilityNodeInfo.RangeInfo.current", current); |
- } |
- |
- private native int nativeGetRootId(long nativeBrowserAccessibilityManagerAndroid); |
- private native boolean nativeIsNodeValid(long nativeBrowserAccessibilityManagerAndroid, int id); |
- private native int nativeHitTest(long nativeBrowserAccessibilityManagerAndroid, int x, int y); |
- private native boolean nativePopulateAccessibilityNodeInfo( |
- long nativeBrowserAccessibilityManagerAndroid, AccessibilityNodeInfo info, int id); |
- private native boolean nativePopulateAccessibilityEvent( |
- long nativeBrowserAccessibilityManagerAndroid, AccessibilityEvent event, int id, |
- int eventType); |
- private native void nativeClick(long nativeBrowserAccessibilityManagerAndroid, int id); |
- private native void nativeFocus(long nativeBrowserAccessibilityManagerAndroid, int id); |
- private native void nativeBlur(long nativeBrowserAccessibilityManagerAndroid); |
-} |