Add AccessibilityAction and AccessibilityEvent API for drag & drop
go/a11yDragAndDrop Drag & drop in the system has zero accessibility support. Add actions to dragging, cancelingl, and dropingp Add WINDOW_CONTENT_CHANGED subtype events for the start of a drag, the cancellation of a drag, and a drop. Other changes, like when a11y actions change, will be denoted by CONTENT_CHANGE_TYPE_UNDEFINED Test: builds Bug: 26871588 Change-Id: Ie4eeb54dd612fd92c107a267e884498656c1fac8
This commit is contained in:
@@ -2012,6 +2012,9 @@ package android {
|
||||
public static final class R.id {
|
||||
ctor public R.id();
|
||||
field public static final int accessibilityActionContextClick = 16908348; // 0x102003c
|
||||
field public static final int accessibilityActionDragCancel;
|
||||
field public static final int accessibilityActionDragDrop;
|
||||
field public static final int accessibilityActionDragStart;
|
||||
field public static final int accessibilityActionHideTooltip = 16908357; // 0x1020045
|
||||
field public static final int accessibilityActionImeEnter = 16908372; // 0x1020054
|
||||
field public static final int accessibilityActionMoveWindow = 16908354; // 0x1020042
|
||||
@@ -50637,6 +50640,9 @@ package android.view.accessibility {
|
||||
method public void setPackageName(CharSequence);
|
||||
method public void writeToParcel(android.os.Parcel, int);
|
||||
field public static final int CONTENT_CHANGE_TYPE_CONTENT_DESCRIPTION = 4; // 0x4
|
||||
field public static final int CONTENT_CHANGE_TYPE_DRAG_CANCELLED = 512; // 0x200
|
||||
field public static final int CONTENT_CHANGE_TYPE_DRAG_DROPPED = 256; // 0x100
|
||||
field public static final int CONTENT_CHANGE_TYPE_DRAG_STARTED = 128; // 0x80
|
||||
field public static final int CONTENT_CHANGE_TYPE_PANE_APPEARED = 16; // 0x10
|
||||
field public static final int CONTENT_CHANGE_TYPE_PANE_DISAPPEARED = 32; // 0x20
|
||||
field public static final int CONTENT_CHANGE_TYPE_PANE_TITLE = 8; // 0x8
|
||||
@@ -50935,6 +50941,9 @@ package android.view.accessibility {
|
||||
field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_COPY;
|
||||
field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_CUT;
|
||||
field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_DISMISS;
|
||||
field @NonNull public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_DRAG_CANCEL;
|
||||
field @NonNull public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_DRAG_DROP;
|
||||
field @NonNull public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_DRAG_START;
|
||||
field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_EXPAND;
|
||||
field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_FOCUS;
|
||||
field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_HIDE_TOOLTIP;
|
||||
|
||||
@@ -612,6 +612,36 @@ public final class AccessibilityEvent extends AccessibilityRecord implements Par
|
||||
*/
|
||||
public static final int CONTENT_CHANGE_TYPE_STATE_DESCRIPTION = 0x00000040;
|
||||
|
||||
/**
|
||||
* Change type for {@link #TYPE_WINDOW_CONTENT_CHANGED} event:
|
||||
* A drag has started while accessibility is enabled. This is either via an
|
||||
* AccessibilityAction, or via touch events. This is sent from the source that initiated the
|
||||
* drag.
|
||||
*
|
||||
* @see AccessibilityNodeInfo.AccessibilityAction#ACTION_DRAG_START
|
||||
*/
|
||||
public static final int CONTENT_CHANGE_TYPE_DRAG_STARTED = 0x00000080;
|
||||
|
||||
/**
|
||||
* Change type for {@link #TYPE_WINDOW_CONTENT_CHANGED} event:
|
||||
* A drag in with accessibility enabled has ended. This means the content has been
|
||||
* successfully dropped. This is sent from the target that accepted the dragged content.
|
||||
*
|
||||
* @see AccessibilityNodeInfo.AccessibilityAction#ACTION_DRAG_DROP
|
||||
*/
|
||||
public static final int CONTENT_CHANGE_TYPE_DRAG_DROPPED = 0x00000100;
|
||||
|
||||
/**
|
||||
* Change type for {@link #TYPE_WINDOW_CONTENT_CHANGED} event:
|
||||
* A drag in with accessibility enabled has ended. This means the content has been
|
||||
* unsuccessfully dropped, the user has canceled the action via an AccessibilityAction, or
|
||||
* no drop has been detected within a timeout and the drag was automatically cancelled. This is
|
||||
* sent from the source that initiated the drag.
|
||||
*
|
||||
* @see AccessibilityNodeInfo.AccessibilityAction#ACTION_DRAG_CANCEL
|
||||
*/
|
||||
public static final int CONTENT_CHANGE_TYPE_DRAG_CANCELLED = 0x0000200;
|
||||
|
||||
/**
|
||||
* Change type for {@link #TYPE_WINDOWS_CHANGED} event:
|
||||
* The window was added.
|
||||
|
||||
@@ -27,6 +27,7 @@ import android.annotation.NonNull;
|
||||
import android.annotation.Nullable;
|
||||
import android.annotation.TestApi;
|
||||
import android.compat.annotation.UnsupportedAppUsage;
|
||||
import android.content.ClipData;
|
||||
import android.graphics.Rect;
|
||||
import android.graphics.Region;
|
||||
import android.os.Build;
|
||||
@@ -4353,6 +4354,14 @@ public class AccessibilityNodeInfo implements Parcelable {
|
||||
case R.id.accessibilityActionImeEnter:
|
||||
return "ACTION_IME_ENTER";
|
||||
default:
|
||||
// TODO(197520937): Use finalized constants in switch
|
||||
if (action == R.id.accessibilityActionDragStart) {
|
||||
return "ACTION_DRAG";
|
||||
} else if (action == R.id.accessibilityActionDragCancel) {
|
||||
return "ACTION_CANCEL_DRAG";
|
||||
} else if (action == R.id.accessibilityActionDragDrop) {
|
||||
return "ACTION_DROP";
|
||||
}
|
||||
return "ACTION_UNKNOWN";
|
||||
}
|
||||
}
|
||||
@@ -4995,6 +5004,46 @@ public class AccessibilityNodeInfo implements Parcelable {
|
||||
@NonNull public static final AccessibilityAction ACTION_IME_ENTER =
|
||||
new AccessibilityAction(R.id.accessibilityActionImeEnter);
|
||||
|
||||
/**
|
||||
* Action to start a drag.
|
||||
* <p>
|
||||
* This action initiates a drag & drop within the system. The source's dragged content is
|
||||
* prepared before the drag begins. In View, this action should prepare the arguments to
|
||||
* {@link View#startDragAndDrop(ClipData, View.DragShadowBuilder, Object, int)} and then
|
||||
* call {@link View#startDragAndDrop(ClipData, View.DragShadowBuilder, Object, int)}. The
|
||||
* equivalent should be performed for other UI toolkits.
|
||||
* </p>
|
||||
*
|
||||
* @see AccessibilityEvent#CONTENT_CHANGE_TYPE_DRAG_STARTED
|
||||
*/
|
||||
@NonNull public static final AccessibilityAction ACTION_DRAG_START =
|
||||
new AccessibilityAction(R.id.accessibilityActionDragStart);
|
||||
|
||||
/**
|
||||
* Action to trigger a drop of the content being dragged.
|
||||
* <p>
|
||||
* This action is added to potential drop targets if the source started a drag with
|
||||
* {@link #ACTION_DRAG_START}. In View, these targets are Views that accepted
|
||||
* {@link android.view.DragEvent#ACTION_DRAG_STARTED} and have an
|
||||
* {@link View.OnDragListener}.
|
||||
* </p>
|
||||
*
|
||||
* @see AccessibilityEvent#CONTENT_CHANGE_TYPE_DRAG_DROPPED
|
||||
*/
|
||||
@NonNull public static final AccessibilityAction ACTION_DRAG_DROP =
|
||||
new AccessibilityAction(R.id.accessibilityActionDragDrop);
|
||||
|
||||
/**
|
||||
* Action to cancel a drag.
|
||||
* <p>
|
||||
* This action is added to the source that started a drag with {@link #ACTION_DRAG_START}.
|
||||
* </p>
|
||||
*
|
||||
* @see AccessibilityEvent#CONTENT_CHANGE_TYPE_DRAG_CANCELLED
|
||||
*/
|
||||
@NonNull public static final AccessibilityAction ACTION_DRAG_CANCEL =
|
||||
new AccessibilityAction(R.id.accessibilityActionDragCancel);
|
||||
|
||||
private final int mActionId;
|
||||
private final CharSequence mLabel;
|
||||
|
||||
|
||||
@@ -254,6 +254,15 @@
|
||||
<!-- Accessibility action identifier for {@link android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction#ACTION_IME_ENTER}. -->
|
||||
<item type="id" name="accessibilityActionImeEnter" />
|
||||
|
||||
<!-- Accessibility action identifier for {@link android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction#ACTION_DRAG_START}. -->
|
||||
<item type="id" name="accessibilityActionDragStart" />
|
||||
|
||||
<!-- Accessibility action identifier for {@link android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction#ACTION_DRAG_DROP}. -->
|
||||
<item type="id" name="accessibilityActionDragDrop" />
|
||||
|
||||
<!-- Accessibility action identifier for {@link android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction#ACTION_DRAG_CANCEL}. -->
|
||||
<item type="id" name="accessibilityActionDragCancel" />
|
||||
|
||||
<!-- View tag for remote views to store the index of the next child when adding nested remote views dynamically. -->
|
||||
<item type="id" name="remote_views_next_child" />
|
||||
|
||||
|
||||
@@ -3224,6 +3224,9 @@
|
||||
</staging-public-group>
|
||||
|
||||
<staging-public-group type="id" first-id="0x01fe0000">
|
||||
<public name="accessibilityActionDragStart" />
|
||||
<public name="accessibilityActionDragDrop" />
|
||||
<public name="accessibilityActionDragCancel" />
|
||||
</staging-public-group>
|
||||
|
||||
<staging-public-group type="style" first-id="0x01fd0000">
|
||||
|
||||
Reference in New Issue
Block a user