Merge "Add AccessibilityAction and AccessibilityEvent API for drag & drop" into sc-v2-dev am: 0e08f81393

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/15585174

Change-Id: I84e49aad247b54871cda1635457302e1d1841737
This commit is contained in:
Sally Yuen
2021-08-24 12:31:15 +00:00
committed by Automerger Merge Worker
5 changed files with 100 additions and 0 deletions

View File

@@ -2012,6 +2012,9 @@ package android {
public static final class R.id { public static final class R.id {
ctor public R.id(); ctor public R.id();
field public static final int accessibilityActionContextClick = 16908348; // 0x102003c 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 accessibilityActionHideTooltip = 16908357; // 0x1020045
field public static final int accessibilityActionImeEnter = 16908372; // 0x1020054 field public static final int accessibilityActionImeEnter = 16908372; // 0x1020054
field public static final int accessibilityActionMoveWindow = 16908354; // 0x1020042 field public static final int accessibilityActionMoveWindow = 16908354; // 0x1020042
@@ -50661,6 +50664,9 @@ package android.view.accessibility {
method public void setPackageName(CharSequence); method public void setPackageName(CharSequence);
method public void writeToParcel(android.os.Parcel, int); 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_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_APPEARED = 16; // 0x10
field public static final int CONTENT_CHANGE_TYPE_PANE_DISAPPEARED = 32; // 0x20 field public static final int CONTENT_CHANGE_TYPE_PANE_DISAPPEARED = 32; // 0x20
field public static final int CONTENT_CHANGE_TYPE_PANE_TITLE = 8; // 0x8 field public static final int CONTENT_CHANGE_TYPE_PANE_TITLE = 8; // 0x8
@@ -50959,6 +50965,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_COPY;
field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_CUT; field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_CUT;
field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_DISMISS; 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_EXPAND;
field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_FOCUS; field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_FOCUS;
field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_HIDE_TOOLTIP; field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_HIDE_TOOLTIP;

View File

@@ -612,6 +612,36 @@ public final class AccessibilityEvent extends AccessibilityRecord implements Par
*/ */
public static final int CONTENT_CHANGE_TYPE_STATE_DESCRIPTION = 0x00000040; 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: * Change type for {@link #TYPE_WINDOWS_CHANGED} event:
* The window was added. * The window was added.

View File

@@ -27,6 +27,7 @@ import android.annotation.NonNull;
import android.annotation.Nullable; import android.annotation.Nullable;
import android.annotation.TestApi; import android.annotation.TestApi;
import android.compat.annotation.UnsupportedAppUsage; import android.compat.annotation.UnsupportedAppUsage;
import android.content.ClipData;
import android.graphics.Rect; import android.graphics.Rect;
import android.graphics.Region; import android.graphics.Region;
import android.os.Build; import android.os.Build;
@@ -4353,6 +4354,14 @@ public class AccessibilityNodeInfo implements Parcelable {
case R.id.accessibilityActionImeEnter: case R.id.accessibilityActionImeEnter:
return "ACTION_IME_ENTER"; return "ACTION_IME_ENTER";
default: 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"; return "ACTION_UNKNOWN";
} }
} }
@@ -4995,6 +5004,46 @@ public class AccessibilityNodeInfo implements Parcelable {
@NonNull public static final AccessibilityAction ACTION_IME_ENTER = @NonNull public static final AccessibilityAction ACTION_IME_ENTER =
new AccessibilityAction(R.id.accessibilityActionImeEnter); 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 int mActionId;
private final CharSequence mLabel; private final CharSequence mLabel;

View File

@@ -254,6 +254,15 @@
<!-- Accessibility action identifier for {@link android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction#ACTION_IME_ENTER}. --> <!-- Accessibility action identifier for {@link android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction#ACTION_IME_ENTER}. -->
<item type="id" name="accessibilityActionImeEnter" /> <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. --> <!-- 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" /> <item type="id" name="remote_views_next_child" />

View File

@@ -3224,6 +3224,9 @@
</staging-public-group> </staging-public-group>
<staging-public-group type="id" first-id="0x01fe0000"> <staging-public-group type="id" first-id="0x01fe0000">
<public name="accessibilityActionDragStart" />
<public name="accessibilityActionDragDrop" />
<public name="accessibilityActionDragCancel" />
</staging-public-group> </staging-public-group>
<staging-public-group type="style" first-id="0x01fd0000"> <staging-public-group type="style" first-id="0x01fd0000">