• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
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 
17 package android.accessibilityservice;
18 
19 
20 import static android.accessibilityservice.AccessibilityService.GESTURE_2_FINGER_DOUBLE_TAP;
21 import static android.accessibilityservice.AccessibilityService.GESTURE_2_FINGER_DOUBLE_TAP_AND_HOLD;
22 import static android.accessibilityservice.AccessibilityService.GESTURE_2_FINGER_SINGLE_TAP;
23 import static android.accessibilityservice.AccessibilityService.GESTURE_2_FINGER_SWIPE_DOWN;
24 import static android.accessibilityservice.AccessibilityService.GESTURE_2_FINGER_SWIPE_LEFT;
25 import static android.accessibilityservice.AccessibilityService.GESTURE_2_FINGER_SWIPE_RIGHT;
26 import static android.accessibilityservice.AccessibilityService.GESTURE_2_FINGER_SWIPE_UP;
27 import static android.accessibilityservice.AccessibilityService.GESTURE_2_FINGER_TRIPLE_TAP;
28 import static android.accessibilityservice.AccessibilityService.GESTURE_3_FINGER_DOUBLE_TAP;
29 import static android.accessibilityservice.AccessibilityService.GESTURE_3_FINGER_DOUBLE_TAP_AND_HOLD;
30 import static android.accessibilityservice.AccessibilityService.GESTURE_3_FINGER_SINGLE_TAP;
31 import static android.accessibilityservice.AccessibilityService.GESTURE_3_FINGER_SWIPE_DOWN;
32 import static android.accessibilityservice.AccessibilityService.GESTURE_3_FINGER_SWIPE_LEFT;
33 import static android.accessibilityservice.AccessibilityService.GESTURE_3_FINGER_SWIPE_RIGHT;
34 import static android.accessibilityservice.AccessibilityService.GESTURE_3_FINGER_SWIPE_UP;
35 import static android.accessibilityservice.AccessibilityService.GESTURE_3_FINGER_TRIPLE_TAP;
36 import static android.accessibilityservice.AccessibilityService.GESTURE_4_FINGER_DOUBLE_TAP;
37 import static android.accessibilityservice.AccessibilityService.GESTURE_4_FINGER_DOUBLE_TAP_AND_HOLD;
38 import static android.accessibilityservice.AccessibilityService.GESTURE_4_FINGER_SINGLE_TAP;
39 import static android.accessibilityservice.AccessibilityService.GESTURE_4_FINGER_SWIPE_DOWN;
40 import static android.accessibilityservice.AccessibilityService.GESTURE_4_FINGER_SWIPE_LEFT;
41 import static android.accessibilityservice.AccessibilityService.GESTURE_4_FINGER_SWIPE_RIGHT;
42 import static android.accessibilityservice.AccessibilityService.GESTURE_4_FINGER_SWIPE_UP;
43 import static android.accessibilityservice.AccessibilityService.GESTURE_4_FINGER_TRIPLE_TAP;
44 import static android.accessibilityservice.AccessibilityService.GESTURE_DOUBLE_TAP;
45 import static android.accessibilityservice.AccessibilityService.GESTURE_DOUBLE_TAP_AND_HOLD;
46 import static android.accessibilityservice.AccessibilityService.GESTURE_SWIPE_DOWN;
47 import static android.accessibilityservice.AccessibilityService.GESTURE_SWIPE_DOWN_AND_LEFT;
48 import static android.accessibilityservice.AccessibilityService.GESTURE_SWIPE_DOWN_AND_RIGHT;
49 import static android.accessibilityservice.AccessibilityService.GESTURE_SWIPE_DOWN_AND_UP;
50 import static android.accessibilityservice.AccessibilityService.GESTURE_SWIPE_LEFT;
51 import static android.accessibilityservice.AccessibilityService.GESTURE_SWIPE_LEFT_AND_DOWN;
52 import static android.accessibilityservice.AccessibilityService.GESTURE_SWIPE_LEFT_AND_RIGHT;
53 import static android.accessibilityservice.AccessibilityService.GESTURE_SWIPE_LEFT_AND_UP;
54 import static android.accessibilityservice.AccessibilityService.GESTURE_SWIPE_RIGHT;
55 import static android.accessibilityservice.AccessibilityService.GESTURE_SWIPE_RIGHT_AND_DOWN;
56 import static android.accessibilityservice.AccessibilityService.GESTURE_SWIPE_RIGHT_AND_LEFT;
57 import static android.accessibilityservice.AccessibilityService.GESTURE_SWIPE_RIGHT_AND_UP;
58 import static android.accessibilityservice.AccessibilityService.GESTURE_SWIPE_UP;
59 import static android.accessibilityservice.AccessibilityService.GESTURE_SWIPE_UP_AND_DOWN;
60 import static android.accessibilityservice.AccessibilityService.GESTURE_SWIPE_UP_AND_LEFT;
61 import static android.accessibilityservice.AccessibilityService.GESTURE_SWIPE_UP_AND_RIGHT;
62 
63 import android.annotation.IntDef;
64 import android.annotation.NonNull;
65 import android.annotation.TestApi;
66 import android.os.Parcel;
67 import android.os.Parcelable;
68 
69 import java.lang.annotation.Retention;
70 import java.lang.annotation.RetentionPolicy;
71 
72 /**
73  * This class describes the gesture event including gesture id and which display it happens
74  * on.
75  * <p>
76  * <strong>Note:</strong> Accessibility services setting the
77  * {@link android.accessibilityservice.AccessibilityServiceInfo#FLAG_REQUEST_TOUCH_EXPLORATION_MODE}
78  * flag can receive gestures.
79  *
80  * @see AccessibilityService#onGesture(AccessibilityGestureEvent)
81  */
82 
83 public final class AccessibilityGestureEvent implements Parcelable {
84 
85     /** @hide */
86     @IntDef(prefix = { "GESTURE_" }, value = {
87             GESTURE_2_FINGER_SINGLE_TAP,
88             GESTURE_2_FINGER_DOUBLE_TAP,
89             GESTURE_2_FINGER_DOUBLE_TAP_AND_HOLD,
90             GESTURE_2_FINGER_TRIPLE_TAP,
91             GESTURE_3_FINGER_SINGLE_TAP,
92             GESTURE_3_FINGER_DOUBLE_TAP,
93             GESTURE_3_FINGER_DOUBLE_TAP_AND_HOLD,
94             GESTURE_3_FINGER_TRIPLE_TAP,
95             GESTURE_DOUBLE_TAP,
96             GESTURE_DOUBLE_TAP_AND_HOLD,
97             GESTURE_SWIPE_UP,
98             GESTURE_SWIPE_UP_AND_LEFT,
99             GESTURE_SWIPE_UP_AND_DOWN,
100             GESTURE_SWIPE_UP_AND_RIGHT,
101             GESTURE_SWIPE_DOWN,
102             GESTURE_SWIPE_DOWN_AND_LEFT,
103             GESTURE_SWIPE_DOWN_AND_UP,
104             GESTURE_SWIPE_DOWN_AND_RIGHT,
105             GESTURE_SWIPE_LEFT,
106             GESTURE_SWIPE_LEFT_AND_UP,
107             GESTURE_SWIPE_LEFT_AND_RIGHT,
108             GESTURE_SWIPE_LEFT_AND_DOWN,
109             GESTURE_SWIPE_RIGHT,
110             GESTURE_SWIPE_RIGHT_AND_UP,
111             GESTURE_SWIPE_RIGHT_AND_LEFT,
112             GESTURE_SWIPE_RIGHT_AND_DOWN,
113             GESTURE_2_FINGER_SWIPE_DOWN,
114             GESTURE_2_FINGER_SWIPE_LEFT,
115             GESTURE_2_FINGER_SWIPE_RIGHT,
116             GESTURE_2_FINGER_SWIPE_UP,
117             GESTURE_3_FINGER_SWIPE_DOWN,
118             GESTURE_3_FINGER_SWIPE_LEFT,
119             GESTURE_3_FINGER_SWIPE_RIGHT,
120             GESTURE_3_FINGER_SWIPE_UP,
121             GESTURE_4_FINGER_DOUBLE_TAP,
122             GESTURE_4_FINGER_DOUBLE_TAP_AND_HOLD,
123             GESTURE_4_FINGER_SINGLE_TAP,
124             GESTURE_4_FINGER_SWIPE_DOWN,
125             GESTURE_4_FINGER_SWIPE_LEFT,
126             GESTURE_4_FINGER_SWIPE_RIGHT,
127             GESTURE_4_FINGER_SWIPE_UP,
128             GESTURE_4_FINGER_TRIPLE_TAP
129     })
130     @Retention(RetentionPolicy.SOURCE)
131     public @interface GestureId {}
132 
133     @GestureId
134     private final int mGestureId;
135     private final int mDisplayId;
136 
137     /** @hide */
138     @TestApi
AccessibilityGestureEvent(int gestureId, int displayId)139     public AccessibilityGestureEvent(int gestureId, int displayId) {
140         mGestureId = gestureId;
141         mDisplayId = displayId;
142     }
143 
AccessibilityGestureEvent(@onNull Parcel parcel)144     private AccessibilityGestureEvent(@NonNull Parcel parcel) {
145         mGestureId = parcel.readInt();
146         mDisplayId = parcel.readInt();
147     }
148 
149     /**
150      * Returns the display id of the received-gesture display, for use with
151      * {@link android.hardware.display.DisplayManager#getDisplay(int)}.
152      *
153      * @return the display id.
154      */
getDisplayId()155     public int getDisplayId() {
156         return mDisplayId;
157     }
158 
159     /**
160      * Returns performed gesture id.
161      *
162      * @return the performed gesture id.
163      *
164      */
getGestureId()165     @GestureId public int getGestureId() {
166         return mGestureId;
167     }
168 
169     @NonNull
170     @Override
toString()171     public String toString() {
172         StringBuilder stringBuilder = new StringBuilder("AccessibilityGestureEvent[");
173         stringBuilder.append("gestureId: ").append(eventTypeToString(mGestureId));
174         stringBuilder.append(", ");
175         stringBuilder.append("displayId: ").append(mDisplayId);
176         stringBuilder.append(']');
177         return stringBuilder.toString();
178     }
179 
eventTypeToString(int eventType)180     private static String eventTypeToString(int eventType) {
181         switch (eventType) {
182             case GESTURE_2_FINGER_SINGLE_TAP: return "GESTURE_2_FINGER_SINGLE_TAP";
183             case GESTURE_2_FINGER_DOUBLE_TAP: return "GESTURE_2_FINGER_DOUBLE_TAP";
184             case GESTURE_2_FINGER_DOUBLE_TAP_AND_HOLD:
185                 return "GESTURE_2_FINGER_DOUBLE_TAP_AND_HOLD";
186             case GESTURE_2_FINGER_TRIPLE_TAP: return "GESTURE_2_FINGER_TRIPLE_TAP";
187             case GESTURE_3_FINGER_SINGLE_TAP: return "GESTURE_3_FINGER_SINGLE_TAP";
188             case GESTURE_3_FINGER_DOUBLE_TAP: return "GESTURE_3_FINGER_DOUBLE_TAP";
189             case GESTURE_3_FINGER_DOUBLE_TAP_AND_HOLD:
190                 return "GESTURE_3_FINGER_DOUBLE_TAP_AND_HOLD";
191             case GESTURE_3_FINGER_TRIPLE_TAP: return "GESTURE_3_FINGER_TRIPLE_TAP";
192             case GESTURE_4_FINGER_SINGLE_TAP: return "GESTURE_4_FINGER_SINGLE_TAP";
193             case GESTURE_4_FINGER_DOUBLE_TAP: return "GESTURE_4_FINGER_DOUBLE_TAP";
194             case GESTURE_4_FINGER_DOUBLE_TAP_AND_HOLD:
195                 return "GESTURE_4_FINGER_DOUBLE_TAP_AND_HOLD";
196             case GESTURE_4_FINGER_TRIPLE_TAP: return "GESTURE_4_FINGER_TRIPLE_TAP";
197             case GESTURE_DOUBLE_TAP: return "GESTURE_DOUBLE_TAP";
198             case GESTURE_DOUBLE_TAP_AND_HOLD: return "GESTURE_DOUBLE_TAP_AND_HOLD";
199             case GESTURE_SWIPE_DOWN: return "GESTURE_SWIPE_DOWN";
200             case GESTURE_SWIPE_DOWN_AND_LEFT: return "GESTURE_SWIPE_DOWN_AND_LEFT";
201             case GESTURE_SWIPE_DOWN_AND_UP: return "GESTURE_SWIPE_DOWN_AND_UP";
202             case GESTURE_SWIPE_DOWN_AND_RIGHT: return "GESTURE_SWIPE_DOWN_AND_RIGHT";
203             case GESTURE_SWIPE_LEFT: return "GESTURE_SWIPE_LEFT";
204             case GESTURE_SWIPE_LEFT_AND_UP: return "GESTURE_SWIPE_LEFT_AND_UP";
205             case GESTURE_SWIPE_LEFT_AND_RIGHT: return "GESTURE_SWIPE_LEFT_AND_RIGHT";
206             case GESTURE_SWIPE_LEFT_AND_DOWN: return "GESTURE_SWIPE_LEFT_AND_DOWN";
207             case GESTURE_SWIPE_RIGHT: return "GESTURE_SWIPE_RIGHT";
208             case GESTURE_SWIPE_RIGHT_AND_UP: return "GESTURE_SWIPE_RIGHT_AND_UP";
209             case GESTURE_SWIPE_RIGHT_AND_LEFT: return "GESTURE_SWIPE_RIGHT_AND_LEFT";
210             case GESTURE_SWIPE_RIGHT_AND_DOWN: return "GESTURE_SWIPE_RIGHT_AND_DOWN";
211             case GESTURE_SWIPE_UP: return "GESTURE_SWIPE_UP";
212             case GESTURE_SWIPE_UP_AND_LEFT: return "GESTURE_SWIPE_UP_AND_LEFT";
213             case GESTURE_SWIPE_UP_AND_DOWN: return "GESTURE_SWIPE_UP_AND_DOWN";
214             case GESTURE_SWIPE_UP_AND_RIGHT: return "GESTURE_SWIPE_UP_AND_RIGHT";
215             case GESTURE_2_FINGER_SWIPE_DOWN: return "GESTURE_2_FINGER_SWIPE_DOWN";
216             case GESTURE_2_FINGER_SWIPE_LEFT: return "GESTURE_2_FINGER_SWIPE_LEFT";
217             case GESTURE_2_FINGER_SWIPE_RIGHT: return "GESTURE_2_FINGER_SWIPE_RIGHT";
218             case GESTURE_2_FINGER_SWIPE_UP: return "GESTURE_2_FINGER_SWIPE_UP";
219             case GESTURE_3_FINGER_SWIPE_DOWN: return "GESTURE_3_FINGER_SWIPE_DOWN";
220             case GESTURE_3_FINGER_SWIPE_LEFT: return "GESTURE_3_FINGER_SWIPE_LEFT";
221             case GESTURE_3_FINGER_SWIPE_RIGHT: return "GESTURE_3_FINGER_SWIPE_RIGHT";
222             case GESTURE_3_FINGER_SWIPE_UP: return "GESTURE_3_FINGER_SWIPE_UP";
223             case GESTURE_4_FINGER_SWIPE_DOWN: return "GESTURE_4_FINGER_SWIPE_DOWN";
224             case GESTURE_4_FINGER_SWIPE_LEFT: return "GESTURE_4_FINGER_SWIPE_LEFT";
225             case GESTURE_4_FINGER_SWIPE_RIGHT: return "GESTURE_4_FINGER_SWIPE_RIGHT";
226             case GESTURE_4_FINGER_SWIPE_UP: return "GESTURE_4_FINGER_SWIPE_UP";
227             default: return Integer.toHexString(eventType);
228         }
229     }
230 
231     /**
232      * {@inheritDoc}
233      */
234     @Override
describeContents()235     public int describeContents() {
236         return 0;
237     }
238 
239     @Override
writeToParcel(@onNull Parcel parcel, int flags)240     public void writeToParcel(@NonNull Parcel parcel, int flags) {
241         parcel.writeInt(mGestureId);
242         parcel.writeInt(mDisplayId);
243     }
244 
245     /**
246      * @see Parcelable.Creator
247      */
248     public static final @NonNull Parcelable.Creator<AccessibilityGestureEvent> CREATOR =
249             new Parcelable.Creator<AccessibilityGestureEvent>() {
250         public AccessibilityGestureEvent createFromParcel(Parcel parcel) {
251             return new AccessibilityGestureEvent(parcel);
252         }
253 
254         public AccessibilityGestureEvent[] newArray(int size) {
255             return new AccessibilityGestureEvent[size];
256         }
257     };
258 
259 }
260