am a1dc761c: Adding scroll actions to accessibility node info.
* commit 'a1dc761c8322355eb1bb71d3d6c9c603c1d1fc0f': Adding scroll actions to accessibility node info.
This commit is contained in:
@@ -25234,6 +25234,8 @@ package android.view.accessibility {
|
|||||||
field public static final int ACTION_NEXT_HTML_ELEMENT = 1024; // 0x400
|
field public static final int ACTION_NEXT_HTML_ELEMENT = 1024; // 0x400
|
||||||
field public static final int ACTION_PREVIOUS_AT_MOVEMENT_GRANULARITY = 512; // 0x200
|
field public static final int ACTION_PREVIOUS_AT_MOVEMENT_GRANULARITY = 512; // 0x200
|
||||||
field public static final int ACTION_PREVIOUS_HTML_ELEMENT = 2048; // 0x800
|
field public static final int ACTION_PREVIOUS_HTML_ELEMENT = 2048; // 0x800
|
||||||
|
field public static final int ACTION_SCROLL_BACKWARD = 8192; // 0x2000
|
||||||
|
field public static final int ACTION_SCROLL_FORWARD = 4096; // 0x1000
|
||||||
field public static final int ACTION_SELECT = 4; // 0x4
|
field public static final int ACTION_SELECT = 4; // 0x4
|
||||||
field public static final android.os.Parcelable.Creator CREATOR;
|
field public static final android.os.Parcelable.Creator CREATOR;
|
||||||
field public static final int FOCUS_ACCESSIBILITY = 2; // 0x2
|
field public static final int FOCUS_ACCESSIBILITY = 2; // 0x2
|
||||||
|
|||||||
@@ -204,6 +204,16 @@ public class AccessibilityNodeInfo implements Parcelable {
|
|||||||
*/
|
*/
|
||||||
public static final int ACTION_PREVIOUS_HTML_ELEMENT = 0x00000800;
|
public static final int ACTION_PREVIOUS_HTML_ELEMENT = 0x00000800;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Action to scroll the node content forward.
|
||||||
|
*/
|
||||||
|
public static final int ACTION_SCROLL_FORWARD = 0x00001000;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Action to scroll the node content backward.
|
||||||
|
*/
|
||||||
|
public static final int ACTION_SCROLL_BACKWARD = 0x00002000;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Argument for which movement granularity to be used when traversing the node text.
|
* Argument for which movement granularity to be used when traversing the node text.
|
||||||
* <p>
|
* <p>
|
||||||
@@ -569,6 +579,16 @@ public class AccessibilityNodeInfo implements Parcelable {
|
|||||||
* @see AccessibilityNodeInfo#ACTION_CLEAR_FOCUS
|
* @see AccessibilityNodeInfo#ACTION_CLEAR_FOCUS
|
||||||
* @see AccessibilityNodeInfo#ACTION_SELECT
|
* @see AccessibilityNodeInfo#ACTION_SELECT
|
||||||
* @see AccessibilityNodeInfo#ACTION_CLEAR_SELECTION
|
* @see AccessibilityNodeInfo#ACTION_CLEAR_SELECTION
|
||||||
|
* @see AccessibilityNodeInfo#ACTION_ACCESSIBILITY_FOCUS
|
||||||
|
* @see AccessibilityNodeInfo#ACTION_CLEAR_ACCESSIBILITY_FOCUS
|
||||||
|
* @see AccessibilityNodeInfo#ACTION_CLICK
|
||||||
|
* @see AccessibilityNodeInfo#ACTION_LONG_CLICK
|
||||||
|
* @see AccessibilityNodeInfo#ACTION_NEXT_AT_MOVEMENT_GRANULARITY
|
||||||
|
* @see AccessibilityNodeInfo#ACTION_PREVIOUS_AT_MOVEMENT_GRANULARITY
|
||||||
|
* @see AccessibilityNodeInfo#ACTION_NEXT_HTML_ELEMENT
|
||||||
|
* @see AccessibilityNodeInfo#ACTION_PREVIOUS_HTML_ELEMENT
|
||||||
|
* @see AccessibilityNodeInfo#ACTION_SCROLL_FORWARD
|
||||||
|
* @see AccessibilityNodeInfo#ACTION_SCROLL_BACKWARD
|
||||||
*/
|
*/
|
||||||
public int getActions() {
|
public int getActions() {
|
||||||
return mActions;
|
return mActions;
|
||||||
@@ -1578,6 +1598,10 @@ public class AccessibilityNodeInfo implements Parcelable {
|
|||||||
return "ACTION_NEXT_HTML_ELEMENT";
|
return "ACTION_NEXT_HTML_ELEMENT";
|
||||||
case ACTION_PREVIOUS_HTML_ELEMENT:
|
case ACTION_PREVIOUS_HTML_ELEMENT:
|
||||||
return "ACTION_PREVIOUS_HTML_ELEMENT";
|
return "ACTION_PREVIOUS_HTML_ELEMENT";
|
||||||
|
case ACTION_SCROLL_FORWARD:
|
||||||
|
return "ACTION_SCROLL_FORWARD";
|
||||||
|
case ACTION_SCROLL_BACKWARD:
|
||||||
|
return "ACTION_SCROLL_BACKWARD";
|
||||||
default:
|
default:
|
||||||
throw new IllegalArgumentException("Unknown action: " + action);
|
throw new IllegalArgumentException("Unknown action: " + action);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1355,6 +1355,33 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te
|
|||||||
public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
|
public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
|
||||||
super.onInitializeAccessibilityNodeInfo(info);
|
super.onInitializeAccessibilityNodeInfo(info);
|
||||||
info.setClassName(AbsListView.class.getName());
|
info.setClassName(AbsListView.class.getName());
|
||||||
|
if (getFirstVisiblePosition() > 0) {
|
||||||
|
info.addAction(AccessibilityNodeInfo.ACTION_SCROLL_BACKWARD);
|
||||||
|
}
|
||||||
|
if (getLastVisiblePosition() < getCount() - 1) {
|
||||||
|
info.addAction(AccessibilityNodeInfo.ACTION_SCROLL_FORWARD);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean performAccessibilityAction(int action, Bundle arguments) {
|
||||||
|
switch (action) {
|
||||||
|
case AccessibilityNodeInfo.ACTION_SCROLL_FORWARD: {
|
||||||
|
if (getLastVisiblePosition() < getCount() - 1) {
|
||||||
|
final int viewportHeight = getHeight() - mListPadding.top - mListPadding.bottom;
|
||||||
|
smoothScrollBy(viewportHeight, PositionScroller.SCROLL_DURATION);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
} return false;
|
||||||
|
case AccessibilityNodeInfo.ACTION_SCROLL_BACKWARD: {
|
||||||
|
if (mFirstPosition > 0) {
|
||||||
|
final int viewportHeight = getHeight() - mListPadding.top - mListPadding.bottom;
|
||||||
|
smoothScrollBy(-viewportHeight, PositionScroller.SCROLL_DURATION);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
} return false;
|
||||||
|
}
|
||||||
|
return super.performAccessibilityAction(action, arguments);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ import android.content.Context;
|
|||||||
import android.content.res.TypedArray;
|
import android.content.res.TypedArray;
|
||||||
import android.graphics.Canvas;
|
import android.graphics.Canvas;
|
||||||
import android.graphics.Rect;
|
import android.graphics.Rect;
|
||||||
|
import android.os.Bundle;
|
||||||
import android.util.AttributeSet;
|
import android.util.AttributeSet;
|
||||||
import android.view.FocusFinder;
|
import android.view.FocusFinder;
|
||||||
import android.view.InputDevice;
|
import android.view.InputDevice;
|
||||||
@@ -736,11 +737,43 @@ public class HorizontalScrollView extends FrameLayout {
|
|||||||
awakenScrollBars();
|
awakenScrollBars();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean performAccessibilityAction(int action, Bundle arguments) {
|
||||||
|
switch (action) {
|
||||||
|
case AccessibilityNodeInfo.ACTION_SCROLL_FORWARD: {
|
||||||
|
final int viewportWidth = getWidth() - mPaddingLeft - mPaddingRight;
|
||||||
|
final int targetScrollX = Math.min(mScrollX + viewportWidth, getScrollRange());
|
||||||
|
if (targetScrollX != mScrollX) {
|
||||||
|
smoothScrollTo(targetScrollX, 0);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
} return false;
|
||||||
|
case AccessibilityNodeInfo.ACTION_SCROLL_BACKWARD: {
|
||||||
|
final int viewportWidth = getWidth() - mPaddingLeft - mPaddingRight;
|
||||||
|
final int targetScrollX = Math.max(0, mScrollX - viewportWidth);
|
||||||
|
if (targetScrollX != mScrollX) {
|
||||||
|
smoothScrollTo(targetScrollX, 0);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
} return false;
|
||||||
|
}
|
||||||
|
return super.performAccessibilityAction(action, arguments);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
|
public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
|
||||||
super.onInitializeAccessibilityNodeInfo(info);
|
super.onInitializeAccessibilityNodeInfo(info);
|
||||||
info.setClassName(HorizontalScrollView.class.getName());
|
info.setClassName(HorizontalScrollView.class.getName());
|
||||||
info.setScrollable(getScrollRange() > 0);
|
final int scrollRange = getScrollRange();
|
||||||
|
if (scrollRange > 0) {
|
||||||
|
info.setScrollable(true);
|
||||||
|
if (mScrollX > 0) {
|
||||||
|
info.addAction(AccessibilityNodeInfo.ACTION_SCROLL_BACKWARD);
|
||||||
|
}
|
||||||
|
if (mScrollX < scrollRange) {
|
||||||
|
info.addAction(AccessibilityNodeInfo.ACTION_SCROLL_FORWARD);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ import android.content.Context;
|
|||||||
import android.content.res.TypedArray;
|
import android.content.res.TypedArray;
|
||||||
import android.graphics.Canvas;
|
import android.graphics.Canvas;
|
||||||
import android.graphics.Rect;
|
import android.graphics.Rect;
|
||||||
|
import android.os.Bundle;
|
||||||
import android.os.StrictMode;
|
import android.os.StrictMode;
|
||||||
import android.util.AttributeSet;
|
import android.util.AttributeSet;
|
||||||
import android.view.FocusFinder;
|
import android.view.FocusFinder;
|
||||||
@@ -739,11 +740,43 @@ public class ScrollView extends FrameLayout {
|
|||||||
awakenScrollBars();
|
awakenScrollBars();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean performAccessibilityAction(int action, Bundle arguments) {
|
||||||
|
switch (action) {
|
||||||
|
case AccessibilityNodeInfo.ACTION_SCROLL_FORWARD: {
|
||||||
|
final int viewportHeight = getHeight() - mPaddingBottom - mPaddingTop;
|
||||||
|
final int targetScrollY = Math.min(mScrollY + viewportHeight, getScrollRange());
|
||||||
|
if (targetScrollY != mScrollY) {
|
||||||
|
smoothScrollTo(0, targetScrollY);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
} return false;
|
||||||
|
case AccessibilityNodeInfo.ACTION_SCROLL_BACKWARD: {
|
||||||
|
final int viewportHeight = getHeight() - mPaddingBottom - mPaddingTop;
|
||||||
|
final int targetScrollY = Math.max(mScrollY - viewportHeight, 0);
|
||||||
|
if (targetScrollY != mScrollY) {
|
||||||
|
smoothScrollTo(0, targetScrollY);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
} return false;
|
||||||
|
}
|
||||||
|
return super.performAccessibilityAction(action, arguments);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
|
public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
|
||||||
super.onInitializeAccessibilityNodeInfo(info);
|
super.onInitializeAccessibilityNodeInfo(info);
|
||||||
info.setClassName(ScrollView.class.getName());
|
info.setClassName(ScrollView.class.getName());
|
||||||
info.setScrollable(getScrollRange() > 0);
|
final int scrollRange = getScrollRange();
|
||||||
|
if (scrollRange > 0) {
|
||||||
|
info.setScrollable(true);
|
||||||
|
if (mScrollY > 0) {
|
||||||
|
info.addAction(AccessibilityNodeInfo.ACTION_SCROLL_BACKWARD);
|
||||||
|
}
|
||||||
|
if (mScrollY < scrollRange) {
|
||||||
|
info.addAction(AccessibilityNodeInfo.ACTION_SCROLL_FORWARD);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -1701,14 +1701,9 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
|
|||||||
| AccessibilityNodeInfo.ACTION_NEXT_AT_MOVEMENT_GRANULARITY
|
| AccessibilityNodeInfo.ACTION_NEXT_AT_MOVEMENT_GRANULARITY
|
||||||
| AccessibilityNodeInfo.ACTION_PREVIOUS_AT_MOVEMENT_GRANULARITY
|
| AccessibilityNodeInfo.ACTION_PREVIOUS_AT_MOVEMENT_GRANULARITY
|
||||||
| AccessibilityNodeInfo.ACTION_NEXT_HTML_ELEMENT
|
| AccessibilityNodeInfo.ACTION_NEXT_HTML_ELEMENT
|
||||||
| AccessibilityNodeInfo.ACTION_PREVIOUS_HTML_ELEMENT;
|
| AccessibilityNodeInfo.ACTION_PREVIOUS_HTML_ELEMENT
|
||||||
|
| AccessibilityNodeInfo.ACTION_SCROLL_FORWARD
|
||||||
private static final int VALID_GRANULARITIES =
|
| AccessibilityNodeInfo.ACTION_SCROLL_BACKWARD;
|
||||||
AccessibilityNodeInfo.MOVEMENT_GRANULARITY_CHARACTER
|
|
||||||
| AccessibilityNodeInfo.MOVEMENT_GRANULARITY_WORD
|
|
||||||
| AccessibilityNodeInfo.MOVEMENT_GRANULARITY_LINE
|
|
||||||
| AccessibilityNodeInfo.MOVEMENT_GRANULARITY_PARAGRAPH
|
|
||||||
| AccessibilityNodeInfo.MOVEMENT_GRANULARITY_PAGE;
|
|
||||||
|
|
||||||
private static final int RETRIEVAL_ALLOWING_EVENT_TYPES =
|
private static final int RETRIEVAL_ALLOWING_EVENT_TYPES =
|
||||||
AccessibilityEvent.TYPE_VIEW_CLICKED
|
AccessibilityEvent.TYPE_VIEW_CLICKED
|
||||||
|
|||||||
Reference in New Issue
Block a user