| 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
|
| index a8326c7e6f8f688516b4f239dc596896025f029a..b77c88ceac3ab7543c3ec2a461734942780914f5 100644
|
| --- 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
|
| @@ -50,7 +50,6 @@ public class BrowserAccessibilityManager {
|
| private final AccessibilityManager mAccessibilityManager;
|
| private final RenderCoordinates mRenderCoordinates;
|
| private long mNativeObj;
|
| - private int mAccessibilityFocusId;
|
| private Rect mAccessibilityFocusRect;
|
| private boolean mIsHovering;
|
| private int mLastHoverId = View.NO_ID;
|
| @@ -63,7 +62,8 @@ public class BrowserAccessibilityManager {
|
| private int mSelectionGranularity;
|
| private int mSelectionStartIndex;
|
| private int mSelectionEndIndex;
|
| - private boolean mVisible = true;
|
| + protected int mAccessibilityFocusId;
|
| + protected boolean mVisible = true;
|
|
|
| /**
|
| * Create a BrowserAccessibilityManager object, which is owned by the C++
|
| @@ -75,13 +75,10 @@ public class BrowserAccessibilityManager {
|
| @CalledByNative
|
| private static BrowserAccessibilityManager create(long nativeBrowserAccessibilityManagerAndroid,
|
| ContentViewCore contentViewCore) {
|
| - // A bug in the KitKat framework prevents us from using these new APIs.
|
| - // http://crbug.com/348088/
|
| - // if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
|
| - // return new KitKatBrowserAccessibilityManager(
|
| - // nativeBrowserAccessibilityManagerAndroid, contentViewCore);
|
| -
|
| - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
|
| + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
| + return new LollipopBrowserAccessibilityManager(
|
| + nativeBrowserAccessibilityManagerAndroid, contentViewCore);
|
| + } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
|
| return new JellyBeanBrowserAccessibilityManager(
|
| nativeBrowserAccessibilityManagerAndroid, contentViewCore);
|
| } else {
|
| @@ -670,8 +667,8 @@ public class BrowserAccessibilityManager {
|
|
|
| @CalledByNative
|
| private void setAccessibilityNodeInfoBooleanAttributes(AccessibilityNodeInfo node,
|
| - int virtualViewId, boolean canScrollForward, boolean canScrollBackward,
|
| - boolean checkable, boolean checked, boolean clickable, boolean editableText,
|
| + 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);
|
| @@ -685,15 +682,30 @@ public class BrowserAccessibilityManager {
|
| node.setSelected(selected);
|
| node.setVisibleToUser(visibleToUser && mVisible);
|
|
|
| - node.addAction(AccessibilityNodeInfo.ACTION_NEXT_HTML_ELEMENT);
|
| - node.addAction(AccessibilityNodeInfo.ACTION_PREVIOUS_HTML_ELEMENT);
|
| - node.addAction(AccessibilityNodeInfo.ACTION_NEXT_AT_MOVEMENT_GRANULARITY);
|
| - node.addAction(AccessibilityNodeInfo.ACTION_PREVIOUS_AT_MOVEMENT_GRANULARITY);
|
| node.setMovementGranularities(
|
| AccessibilityNodeInfo.MOVEMENT_GRANULARITY_CHARACTER
|
| | AccessibilityNodeInfo.MOVEMENT_GRANULARITY_WORD
|
| | AccessibilityNodeInfo.MOVEMENT_GRANULARITY_LINE);
|
|
|
| + if (mAccessibilityFocusId == virtualViewId) {
|
| + node.setAccessibilityFocused(true);
|
| + } else if (mVisible) {
|
| + node.setAccessibilityFocused(false);
|
| + }
|
| + }
|
| +
|
| + // LollipopBrowserAccessibilityManager overrides this with the non-deprecated APIs.
|
| + @SuppressWarnings("deprecation")
|
| + @CalledByNative
|
| + protected void addAccessibilityNodeInfoActions(AccessibilityNodeInfo node,
|
| + int virtualViewId, boolean canScrollForward, boolean canScrollBackward,
|
| + boolean clickable, boolean editableText, boolean enabled, boolean focusable,
|
| + boolean focused) {
|
| + node.addAction(AccessibilityNodeInfo.ACTION_NEXT_HTML_ELEMENT);
|
| + node.addAction(AccessibilityNodeInfo.ACTION_PREVIOUS_HTML_ELEMENT);
|
| + node.addAction(AccessibilityNodeInfo.ACTION_NEXT_AT_MOVEMENT_GRANULARITY);
|
| + node.addAction(AccessibilityNodeInfo.ACTION_PREVIOUS_AT_MOVEMENT_GRANULARITY);
|
| +
|
| if (editableText && enabled) {
|
| node.addAction(ACTION_SET_TEXT);
|
| node.addAction(AccessibilityNodeInfo.ACTION_SET_SELECTION);
|
| @@ -716,10 +728,8 @@ public class BrowserAccessibilityManager {
|
| }
|
|
|
| if (mAccessibilityFocusId == virtualViewId) {
|
| - node.setAccessibilityFocused(true);
|
| node.addAction(AccessibilityNodeInfo.ACTION_CLEAR_ACCESSIBILITY_FOCUS);
|
| } else if (mVisible) {
|
| - node.setAccessibilityFocused(false);
|
| node.addAction(AccessibilityNodeInfo.ACTION_ACCESSIBILITY_FOCUS);
|
| }
|
|
|
| @@ -800,32 +810,32 @@ public class BrowserAccessibilityManager {
|
| }
|
|
|
| @CalledByNative
|
| - protected void setAccessibilityNodeInfoKitKatAttributes(AccessibilityNodeInfo node,
|
| + protected void setAccessibilityNodeInfoLollipopAttributes(AccessibilityNodeInfo node,
|
| boolean canOpenPopup,
|
| boolean contentInvalid,
|
| boolean dismissable,
|
| boolean multiLine,
|
| int inputType,
|
| int liveRegion) {
|
| - // Requires KitKat or higher.
|
| + // Requires Lollipop or higher.
|
| }
|
|
|
| @CalledByNative
|
| protected void setAccessibilityNodeInfoCollectionInfo(AccessibilityNodeInfo node,
|
| int rowCount, int columnCount, boolean hierarchical) {
|
| - // Requires KitKat or higher.
|
| + // Requires Lollipop or higher.
|
| }
|
|
|
| @CalledByNative
|
| protected void setAccessibilityNodeInfoCollectionItemInfo(AccessibilityNodeInfo node,
|
| int rowIndex, int rowSpan, int columnIndex, int columnSpan, boolean heading) {
|
| - // Requires KitKat or higher.
|
| + // Requires Lollipop or higher.
|
| }
|
|
|
| @CalledByNative
|
| protected void setAccessibilityNodeInfoRangeInfo(AccessibilityNodeInfo node,
|
| int rangeType, float min, float max, float current) {
|
| - // Requires KitKat or higher.
|
| + // Requires Lollipop or higher.
|
| }
|
|
|
| @CalledByNative
|
| @@ -878,14 +888,14 @@ public class BrowserAccessibilityManager {
|
| }
|
|
|
| @CalledByNative
|
| - protected void setAccessibilityEventKitKatAttributes(AccessibilityEvent event,
|
| + protected void setAccessibilityEventLollipopAttributes(AccessibilityEvent event,
|
| boolean canOpenPopup,
|
| boolean contentInvalid,
|
| boolean dismissable,
|
| boolean multiLine,
|
| int inputType,
|
| int liveRegion) {
|
| - // Backwards compatibility for KitKat AccessibilityNodeInfo fields.
|
| + // Backwards compatibility for Lollipop AccessibilityNodeInfo fields.
|
| Bundle bundle = getOrCreateBundleForAccessibilityEvent(event);
|
| bundle.putBoolean("AccessibilityNodeInfo.canOpenPopup", canOpenPopup);
|
| bundle.putBoolean("AccessibilityNodeInfo.contentInvalid", contentInvalid);
|
| @@ -898,7 +908,7 @@ public class BrowserAccessibilityManager {
|
| @CalledByNative
|
| protected void setAccessibilityEventCollectionInfo(AccessibilityEvent event,
|
| int rowCount, int columnCount, boolean hierarchical) {
|
| - // Backwards compatibility for KitKat AccessibilityNodeInfo fields.
|
| + // Backwards compatibility for Lollipop AccessibilityNodeInfo fields.
|
| Bundle bundle = getOrCreateBundleForAccessibilityEvent(event);
|
| bundle.putInt("AccessibilityNodeInfo.CollectionInfo.rowCount", rowCount);
|
| bundle.putInt("AccessibilityNodeInfo.CollectionInfo.columnCount", columnCount);
|
| @@ -908,7 +918,7 @@ public class BrowserAccessibilityManager {
|
| @CalledByNative
|
| protected void setAccessibilityEventHeadingFlag(AccessibilityEvent event,
|
| boolean heading) {
|
| - // Backwards compatibility for KitKat AccessibilityNodeInfo fields.
|
| + // Backwards compatibility for Lollipop AccessibilityNodeInfo fields.
|
| Bundle bundle = getOrCreateBundleForAccessibilityEvent(event);
|
| bundle.putBoolean("AccessibilityNodeInfo.CollectionItemInfo.heading", heading);
|
| }
|
| @@ -916,7 +926,7 @@ public class BrowserAccessibilityManager {
|
| @CalledByNative
|
| protected void setAccessibilityEventCollectionItemInfo(AccessibilityEvent event,
|
| int rowIndex, int rowSpan, int columnIndex, int columnSpan) {
|
| - // Backwards compatibility for KitKat AccessibilityNodeInfo fields.
|
| + // Backwards compatibility for Lollipop AccessibilityNodeInfo fields.
|
| Bundle bundle = getOrCreateBundleForAccessibilityEvent(event);
|
| bundle.putInt("AccessibilityNodeInfo.CollectionItemInfo.rowIndex", rowIndex);
|
| bundle.putInt("AccessibilityNodeInfo.CollectionItemInfo.rowSpan", rowSpan);
|
| @@ -927,7 +937,7 @@ public class BrowserAccessibilityManager {
|
| @CalledByNative
|
| protected void setAccessibilityEventRangeInfo(AccessibilityEvent event,
|
| int rangeType, float min, float max, float current) {
|
| - // Backwards compatibility for KitKat AccessibilityNodeInfo fields.
|
| + // Backwards compatibility for Lollipop AccessibilityNodeInfo fields.
|
| Bundle bundle = getOrCreateBundleForAccessibilityEvent(event);
|
| bundle.putInt("AccessibilityNodeInfo.RangeInfo.type", rangeType);
|
| bundle.putFloat("AccessibilityNodeInfo.RangeInfo.min", min);
|
|
|