|
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 |