blob: 47fc7e1cdf13ab7d17b9ef18b7c1ba24e2e0ed72 [file] [log] [blame]
RyanlwLina0daddd2019-06-19 11:39:01 +08001/*
2 * Copyright (C) 2019 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package android.accessibilityservice;
18
19
Dieter Hsu3cbd0982019-12-13 12:17:54 +080020import static android.accessibilityservice.AccessibilityService.GESTURE_2_FINGER_DOUBLE_TAP;
21import static android.accessibilityservice.AccessibilityService.GESTURE_2_FINGER_SINGLE_TAP;
22import static android.accessibilityservice.AccessibilityService.GESTURE_2_FINGER_TRIPLE_TAP;
23import static android.accessibilityservice.AccessibilityService.GESTURE_3_FINGER_DOUBLE_TAP;
24import static android.accessibilityservice.AccessibilityService.GESTURE_3_FINGER_SINGLE_TAP;
25import static android.accessibilityservice.AccessibilityService.GESTURE_3_FINGER_TRIPLE_TAP;
Ameer Armaly51106a32019-09-17 14:40:36 -070026import static android.accessibilityservice.AccessibilityService.GESTURE_DOUBLE_TAP;
27import static android.accessibilityservice.AccessibilityService.GESTURE_DOUBLE_TAP_AND_HOLD;
RyanlwLina0daddd2019-06-19 11:39:01 +080028import static android.accessibilityservice.AccessibilityService.GESTURE_SWIPE_DOWN;
29import static android.accessibilityservice.AccessibilityService.GESTURE_SWIPE_DOWN_AND_LEFT;
30import static android.accessibilityservice.AccessibilityService.GESTURE_SWIPE_DOWN_AND_RIGHT;
31import static android.accessibilityservice.AccessibilityService.GESTURE_SWIPE_DOWN_AND_UP;
32import static android.accessibilityservice.AccessibilityService.GESTURE_SWIPE_LEFT;
33import static android.accessibilityservice.AccessibilityService.GESTURE_SWIPE_LEFT_AND_DOWN;
34import static android.accessibilityservice.AccessibilityService.GESTURE_SWIPE_LEFT_AND_RIGHT;
35import static android.accessibilityservice.AccessibilityService.GESTURE_SWIPE_LEFT_AND_UP;
36import static android.accessibilityservice.AccessibilityService.GESTURE_SWIPE_RIGHT;
37import static android.accessibilityservice.AccessibilityService.GESTURE_SWIPE_RIGHT_AND_DOWN;
38import static android.accessibilityservice.AccessibilityService.GESTURE_SWIPE_RIGHT_AND_LEFT;
39import static android.accessibilityservice.AccessibilityService.GESTURE_SWIPE_RIGHT_AND_UP;
40import static android.accessibilityservice.AccessibilityService.GESTURE_SWIPE_UP;
41import static android.accessibilityservice.AccessibilityService.GESTURE_SWIPE_UP_AND_DOWN;
42import static android.accessibilityservice.AccessibilityService.GESTURE_SWIPE_UP_AND_LEFT;
43import static android.accessibilityservice.AccessibilityService.GESTURE_SWIPE_UP_AND_RIGHT;
44
45import android.annotation.IntDef;
46import android.annotation.NonNull;
47import android.annotation.TestApi;
48import android.os.Parcel;
49import android.os.Parcelable;
50
51import java.lang.annotation.Retention;
52import java.lang.annotation.RetentionPolicy;
53
54/**
RyanlwLin0d17f042019-09-02 21:22:09 +080055 * This class describes the gesture event including gesture id and which display it happens
RyanlwLina0daddd2019-06-19 11:39:01 +080056 * on.
57 * <p>
58 * <strong>Note:</strong> Accessibility services setting the
59 * {@link android.accessibilityservice.AccessibilityServiceInfo#FLAG_REQUEST_TOUCH_EXPLORATION_MODE}
60 * flag can receive gestures.
61 *
RyanlwLin0d17f042019-09-02 21:22:09 +080062 * @see AccessibilityService#onGesture(AccessibilityGestureEvent)
RyanlwLina0daddd2019-06-19 11:39:01 +080063 */
64
RyanlwLin0d17f042019-09-02 21:22:09 +080065public final class AccessibilityGestureEvent implements Parcelable {
RyanlwLina0daddd2019-06-19 11:39:01 +080066
67 /** @hide */
68 @IntDef(prefix = { "GESTURE_" }, value = {
Dieter Hsu3cbd0982019-12-13 12:17:54 +080069 GESTURE_2_FINGER_SINGLE_TAP,
70 GESTURE_2_FINGER_DOUBLE_TAP,
71 GESTURE_2_FINGER_TRIPLE_TAP,
72 GESTURE_3_FINGER_SINGLE_TAP,
73 GESTURE_3_FINGER_DOUBLE_TAP,
74 GESTURE_3_FINGER_TRIPLE_TAP,
Ameer Armaly51106a32019-09-17 14:40:36 -070075 GESTURE_DOUBLE_TAP,
76 GESTURE_DOUBLE_TAP_AND_HOLD,
RyanlwLina0daddd2019-06-19 11:39:01 +080077 GESTURE_SWIPE_UP,
78 GESTURE_SWIPE_UP_AND_LEFT,
79 GESTURE_SWIPE_UP_AND_DOWN,
80 GESTURE_SWIPE_UP_AND_RIGHT,
81 GESTURE_SWIPE_DOWN,
82 GESTURE_SWIPE_DOWN_AND_LEFT,
83 GESTURE_SWIPE_DOWN_AND_UP,
84 GESTURE_SWIPE_DOWN_AND_RIGHT,
85 GESTURE_SWIPE_LEFT,
86 GESTURE_SWIPE_LEFT_AND_UP,
87 GESTURE_SWIPE_LEFT_AND_RIGHT,
88 GESTURE_SWIPE_LEFT_AND_DOWN,
89 GESTURE_SWIPE_RIGHT,
90 GESTURE_SWIPE_RIGHT_AND_UP,
91 GESTURE_SWIPE_RIGHT_AND_LEFT,
92 GESTURE_SWIPE_RIGHT_AND_DOWN
93 })
94 @Retention(RetentionPolicy.SOURCE)
ryanlwlindafef882019-11-11 20:21:31 +080095 public @interface GestureId {}
RyanlwLina0daddd2019-06-19 11:39:01 +080096
ryanlwlindafef882019-11-11 20:21:31 +080097 @GestureId
RyanlwLina0daddd2019-06-19 11:39:01 +080098 private final int mGestureId;
99 private final int mDisplayId;
100
101 /** @hide */
102 @TestApi
RyanlwLin0d17f042019-09-02 21:22:09 +0800103 public AccessibilityGestureEvent(int gestureId, int displayId) {
RyanlwLina0daddd2019-06-19 11:39:01 +0800104 mGestureId = gestureId;
105 mDisplayId = displayId;
106 }
107
RyanlwLin0d17f042019-09-02 21:22:09 +0800108 private AccessibilityGestureEvent(@NonNull Parcel parcel) {
RyanlwLina0daddd2019-06-19 11:39:01 +0800109 mGestureId = parcel.readInt();
110 mDisplayId = parcel.readInt();
111 }
112
113 /**
114 * Returns the display id of the received-gesture display, for use with
115 * {@link android.hardware.display.DisplayManager#getDisplay(int)}.
116 *
117 * @return the display id.
118 */
119 public int getDisplayId() {
120 return mDisplayId;
121 }
122
123 /**
124 * Returns performed gesture id.
125 *
126 * @return the performed gesture id.
127 *
128 */
ryanlwlindafef882019-11-11 20:21:31 +0800129 @GestureId public int getGestureId() {
RyanlwLina0daddd2019-06-19 11:39:01 +0800130 return mGestureId;
131 }
132
Aurimas Liutikas4d1699d2019-08-28 13:01:05 -0700133 @NonNull
RyanlwLina0daddd2019-06-19 11:39:01 +0800134 @Override
135 public String toString() {
RyanlwLin0d17f042019-09-02 21:22:09 +0800136 StringBuilder stringBuilder = new StringBuilder("AccessibilityGestureEvent[");
Dieter Hsu3cbd0982019-12-13 12:17:54 +0800137 stringBuilder.append("gestureId: ").append(eventTypeToString(mGestureId));
RyanlwLina0daddd2019-06-19 11:39:01 +0800138 stringBuilder.append(", ");
139 stringBuilder.append("displayId: ").append(mDisplayId);
140 stringBuilder.append(']');
141 return stringBuilder.toString();
142 }
143
Dieter Hsu3cbd0982019-12-13 12:17:54 +0800144 private static String eventTypeToString(int eventType) {
145 switch (eventType) {
146 case GESTURE_2_FINGER_SINGLE_TAP: return "GESTURE_2_FINGER_SINGLE_TAP";
147 case GESTURE_2_FINGER_DOUBLE_TAP: return "GESTURE_2_FINGER_DOUBLE_TAP";
148 case GESTURE_2_FINGER_TRIPLE_TAP: return "GESTURE_2_FINGER_TRIPLE_TAP";
149 case GESTURE_3_FINGER_SINGLE_TAP: return "GESTURE_3_FINGER_SINGLE_TAP";
150 case GESTURE_3_FINGER_DOUBLE_TAP: return "GESTURE_3_FINGER_DOUBLE_TAP";
151 case GESTURE_3_FINGER_TRIPLE_TAP: return "GESTURE_3_FINGER_TRIPLE_TAP";
152 case GESTURE_DOUBLE_TAP: return "GESTURE_DOUBLE_TAP";
153 case GESTURE_DOUBLE_TAP_AND_HOLD: return "GESTURE_DOUBLE_TAP_AND_HOLD";
154 case GESTURE_SWIPE_DOWN: return "GESTURE_SWIPE_DOWN";
155 case GESTURE_SWIPE_DOWN_AND_LEFT: return "GESTURE_SWIPE_DOWN_AND_LEFT";
156 case GESTURE_SWIPE_DOWN_AND_UP: return "GESTURE_SWIPE_DOWN_AND_UP";
157 case GESTURE_SWIPE_DOWN_AND_RIGHT: return "GESTURE_SWIPE_DOWN_AND_RIGHT";
158 case GESTURE_SWIPE_LEFT: return "GESTURE_SWIPE_LEFT";
159 case GESTURE_SWIPE_LEFT_AND_UP: return "GESTURE_SWIPE_LEFT_AND_UP";
160 case GESTURE_SWIPE_LEFT_AND_RIGHT: return "GESTURE_SWIPE_LEFT_AND_RIGHT";
161 case GESTURE_SWIPE_LEFT_AND_DOWN: return "GESTURE_SWIPE_LEFT_AND_DOWN";
162 case GESTURE_SWIPE_RIGHT: return "GESTURE_SWIPE_RIGHT";
163 case GESTURE_SWIPE_RIGHT_AND_UP: return "GESTURE_SWIPE_RIGHT_AND_UP";
164 case GESTURE_SWIPE_RIGHT_AND_LEFT: return "GESTURE_SWIPE_RIGHT_AND_LEFT";
165 case GESTURE_SWIPE_RIGHT_AND_DOWN: return "GESTURE_SWIPE_RIGHT_AND_DOWN";
166 case GESTURE_SWIPE_UP: return "GESTURE_SWIPE_UP";
167 case GESTURE_SWIPE_UP_AND_LEFT: return "GESTURE_SWIPE_UP_AND_LEFT";
168 case GESTURE_SWIPE_UP_AND_DOWN: return "GESTURE_SWIPE_UP_AND_DOWN";
169 case GESTURE_SWIPE_UP_AND_RIGHT: return "GESTURE_SWIPE_UP_AND_RIGHT";
170 default: return Integer.toHexString(eventType);
171 }
172 }
173
RyanlwLina0daddd2019-06-19 11:39:01 +0800174 /**
175 * {@inheritDoc}
176 */
177 @Override
178 public int describeContents() {
179 return 0;
180 }
181
182 @Override
Aurimas Liutikas4d1699d2019-08-28 13:01:05 -0700183 public void writeToParcel(@NonNull Parcel parcel, int flags) {
RyanlwLina0daddd2019-06-19 11:39:01 +0800184 parcel.writeInt(mGestureId);
185 parcel.writeInt(mDisplayId);
186 }
187
188 /**
189 * @see Parcelable.Creator
190 */
RyanlwLin0d17f042019-09-02 21:22:09 +0800191 public static final @NonNull Parcelable.Creator<AccessibilityGestureEvent> CREATOR =
192 new Parcelable.Creator<AccessibilityGestureEvent>() {
193 public AccessibilityGestureEvent createFromParcel(Parcel parcel) {
194 return new AccessibilityGestureEvent(parcel);
RyanlwLina0daddd2019-06-19 11:39:01 +0800195 }
196
RyanlwLin0d17f042019-09-02 21:22:09 +0800197 public AccessibilityGestureEvent[] newArray(int size) {
198 return new AccessibilityGestureEvent[size];
RyanlwLina0daddd2019-06-19 11:39:01 +0800199 }
200 };
201
202}