| |
1 /* |
| |
2 * Copyright (C) 2011 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 #ifndef _UI_INPUT_LISTENER_H |
| |
18 #define _UI_INPUT_LISTENER_H |
| |
19 |
| |
20 #include "Input.h" |
| |
21 #include <utils/RefBase.h> |
| |
22 #include <utils/Vector.h> |
| |
23 |
| |
24 namespace android { |
| |
25 |
| |
26 class InputListenerInterface; |
| |
27 |
| |
28 |
| |
29 /* Superclass of all input event argument objects */ |
| |
30 struct NotifyArgs { |
| |
31 virtual ~NotifyArgs() { } |
| |
32 |
| |
33 virtual void notify(const sp<InputListenerInterface>& listener) const = 0; |
| |
34 }; |
| |
35 |
| |
36 |
| |
37 /* Describes a configuration change event. */ |
| |
38 struct NotifyConfigurationChangedArgs : public NotifyArgs { |
| |
39 nsecs_t eventTime; |
| |
40 |
| |
41 inline NotifyConfigurationChangedArgs() { } |
| |
42 |
| |
43 NotifyConfigurationChangedArgs(nsecs_t eventTime); |
| |
44 |
| |
45 NotifyConfigurationChangedArgs(const NotifyConfigurationChangedArgs& other); |
| |
46 |
| |
47 virtual ~NotifyConfigurationChangedArgs() { } |
| |
48 |
| |
49 virtual void notify(const sp<InputListenerInterface>& listener) const; |
| |
50 }; |
| |
51 |
| |
52 |
| |
53 /* Describes a key event. */ |
| |
54 struct NotifyKeyArgs : public NotifyArgs { |
| |
55 nsecs_t eventTime; |
| |
56 int32_t deviceId; |
| |
57 uint32_t source; |
| |
58 uint32_t policyFlags; |
| |
59 int32_t action; |
| |
60 int32_t flags; |
| |
61 int32_t keyCode; |
| |
62 int32_t scanCode; |
| |
63 int32_t metaState; |
| |
64 nsecs_t downTime; |
| |
65 |
| |
66 inline NotifyKeyArgs() { } |
| |
67 |
| |
68 NotifyKeyArgs(nsecs_t eventTime, int32_t deviceId, uint32_t source, uint32_t policyFlags, |
| |
69 int32_t action, int32_t flags, int32_t keyCode, int32_t scanCode, |
| |
70 int32_t metaState, nsecs_t downTime); |
| |
71 |
| |
72 NotifyKeyArgs(const NotifyKeyArgs& other); |
| |
73 |
| |
74 virtual ~NotifyKeyArgs() { } |
| |
75 |
| |
76 virtual void notify(const sp<InputListenerInterface>& listener) const; |
| |
77 }; |
| |
78 |
| |
79 |
| |
80 /* Describes a motion event. */ |
| |
81 struct NotifyMotionArgs : public NotifyArgs { |
| |
82 nsecs_t eventTime; |
| |
83 int32_t deviceId; |
| |
84 uint32_t source; |
| |
85 uint32_t policyFlags; |
| |
86 int32_t action; |
| |
87 int32_t flags; |
| |
88 int32_t metaState; |
| |
89 int32_t buttonState; |
| |
90 int32_t edgeFlags; |
| |
91 int32_t displayId; |
| |
92 uint32_t pointerCount; |
| |
93 PointerProperties pointerProperties[MAX_POINTERS]; |
| |
94 PointerCoords pointerCoords[MAX_POINTERS]; |
| |
95 float xPrecision; |
| |
96 float yPrecision; |
| |
97 nsecs_t downTime; |
| |
98 |
| |
99 inline NotifyMotionArgs() { } |
| |
100 |
| |
101 NotifyMotionArgs(nsecs_t eventTime, int32_t deviceId, uint32_t source, uint32_t policyFlags, |
| |
102 int32_t action, int32_t flags, int32_t metaState, int32_t buttonState, |
| |
103 int32_t edgeFlags, int32_t displayId, uint32_t pointerCount, |
| |
104 const PointerProperties* pointerProperties, const PointerCoords* pointerCoords, |
| |
105 float xPrecision, float yPrecision, nsecs_t downTime); |
| |
106 |
| |
107 NotifyMotionArgs(const NotifyMotionArgs& other); |
| |
108 |
| |
109 virtual ~NotifyMotionArgs() { } |
| |
110 |
| |
111 virtual void notify(const sp<InputListenerInterface>& listener) const; |
| |
112 }; |
| |
113 |
| |
114 |
| |
115 /* Describes a switch event. */ |
| |
116 struct NotifySwitchArgs : public NotifyArgs { |
| |
117 nsecs_t eventTime; |
| |
118 uint32_t policyFlags; |
| |
119 uint32_t switchValues; |
| |
120 uint32_t switchMask; |
| |
121 |
| |
122 inline NotifySwitchArgs() { } |
| |
123 |
| |
124 NotifySwitchArgs(nsecs_t eventTime, uint32_t policyFlags, |
| |
125 uint32_t switchValues, uint32_t switchMask); |
| |
126 |
| |
127 NotifySwitchArgs(const NotifySwitchArgs& other); |
| |
128 |
| |
129 virtual ~NotifySwitchArgs() { } |
| |
130 |
| |
131 virtual void notify(const sp<InputListenerInterface>& listener) const; |
| |
132 }; |
| |
133 |
| |
134 |
| |
135 /* Describes a device reset event, such as when a device is added, |
| |
136 * reconfigured, or removed. */ |
| |
137 struct NotifyDeviceResetArgs : public NotifyArgs { |
| |
138 nsecs_t eventTime; |
| |
139 int32_t deviceId; |
| |
140 |
| |
141 inline NotifyDeviceResetArgs() { } |
| |
142 |
| |
143 NotifyDeviceResetArgs(nsecs_t eventTime, int32_t deviceId); |
| |
144 |
| |
145 NotifyDeviceResetArgs(const NotifyDeviceResetArgs& other); |
| |
146 |
| |
147 virtual ~NotifyDeviceResetArgs() { } |
| |
148 |
| |
149 virtual void notify(const sp<InputListenerInterface>& listener) const; |
| |
150 }; |
| |
151 |
| |
152 |
| |
153 /* |
| |
154 * The interface used by the InputReader to notify the InputListener about input events. |
| |
155 */ |
| |
156 class InputListenerInterface : public virtual RefBase { |
| |
157 protected: |
| |
158 InputListenerInterface() { } |
| |
159 virtual ~InputListenerInterface() { } |
| |
160 |
| |
161 public: |
| |
162 virtual void notifyConfigurationChanged(const NotifyConfigurationChangedArgs* args) = 0; |
| |
163 virtual void notifyKey(const NotifyKeyArgs* args) = 0; |
| |
164 virtual void notifyMotion(const NotifyMotionArgs* args) = 0; |
| |
165 virtual void notifySwitch(const NotifySwitchArgs* args) = 0; |
| |
166 virtual void notifyDeviceReset(const NotifyDeviceResetArgs* args) = 0; |
| |
167 }; |
| |
168 |
| |
169 |
| |
170 /* |
| |
171 * An implementation of the listener interface that queues up and defers dispatch |
| |
172 * of decoded events until flushed. |
| |
173 */ |
| |
174 class QueuedInputListener : public InputListenerInterface { |
| |
175 protected: |
| |
176 virtual ~QueuedInputListener(); |
| |
177 |
| |
178 public: |
| |
179 QueuedInputListener(const sp<InputListenerInterface>& innerListener); |
| |
180 |
| |
181 virtual void notifyConfigurationChanged(const NotifyConfigurationChangedArgs* args); |
| |
182 virtual void notifyKey(const NotifyKeyArgs* args); |
| |
183 virtual void notifyMotion(const NotifyMotionArgs* args); |
| |
184 virtual void notifySwitch(const NotifySwitchArgs* args); |
| |
185 virtual void notifyDeviceReset(const NotifyDeviceResetArgs* args); |
| |
186 |
| |
187 void flush(); |
| |
188 |
| |
189 private: |
| |
190 sp<InputListenerInterface> mInnerListener; |
| |
191 Vector<NotifyArgs*> mArgsQueue; |
| |
192 }; |
| |
193 |
| |
194 } // namespace android |
| |
195 |
| |
196 #endif // _UI_INPUT_LISTENER_H |