1be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown/*
2be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown * Copyright (C) 2011 The Android Open Source Project
3be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown *
4be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown * Licensed under the Apache License, Version 2.0 (the "License");
5be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown * you may not use this file except in compliance with the License.
6be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown * You may obtain a copy of the License at
7be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown *
8be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown *      http://www.apache.org/licenses/LICENSE-2.0
9be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown *
10be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown * Unless required by applicable law or agreed to in writing, software
11be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown * distributed under the License is distributed on an "AS IS" BASIS,
12be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown * See the License for the specific language governing permissions and
14be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown * limitations under the License.
15be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown */
16be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown
17be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown#ifndef _UI_INPUT_LISTENER_H
18be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown#define _UI_INPUT_LISTENER_H
19be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown
209d3b1a424c5c61e24e9659d15fb353026a00d925Jeff Brown#include <input/Input.h>
21be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown#include <utils/RefBase.h>
22be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown#include <utils/Vector.h>
23be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown
24be1aa8250cee7819c49741e819e81659d1d03823Jeff Brownnamespace android {
25be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown
26be1aa8250cee7819c49741e819e81659d1d03823Jeff Brownclass InputListenerInterface;
27be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown
28be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown
29be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown/* Superclass of all input event argument objects */
30be1aa8250cee7819c49741e819e81659d1d03823Jeff Brownstruct NotifyArgs {
31be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown    virtual ~NotifyArgs() { }
32be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown
33be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown    virtual void notify(const sp<InputListenerInterface>& listener) const = 0;
34be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown};
35be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown
36be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown
37be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown/* Describes a configuration change event. */
38be1aa8250cee7819c49741e819e81659d1d03823Jeff Brownstruct NotifyConfigurationChangedArgs : public NotifyArgs {
39be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown    nsecs_t eventTime;
40be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown
41be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown    inline NotifyConfigurationChangedArgs() { }
42be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown
43be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown    NotifyConfigurationChangedArgs(nsecs_t eventTime);
44be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown
45be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown    NotifyConfigurationChangedArgs(const NotifyConfigurationChangedArgs& other);
46be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown
47be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown    virtual ~NotifyConfigurationChangedArgs() { }
48be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown
49be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown    virtual void notify(const sp<InputListenerInterface>& listener) const;
50be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown};
51be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown
52be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown
53be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown/* Describes a key event. */
54be1aa8250cee7819c49741e819e81659d1d03823Jeff Brownstruct NotifyKeyArgs : public NotifyArgs {
55be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown    nsecs_t eventTime;
56be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown    int32_t deviceId;
57be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown    uint32_t source;
58be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown    uint32_t policyFlags;
59be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown    int32_t action;
60be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown    int32_t flags;
61be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown    int32_t keyCode;
62be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown    int32_t scanCode;
63be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown    int32_t metaState;
64be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown    nsecs_t downTime;
65be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown
66be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown    inline NotifyKeyArgs() { }
67be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown
68be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown    NotifyKeyArgs(nsecs_t eventTime, int32_t deviceId, uint32_t source, uint32_t policyFlags,
69be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown            int32_t action, int32_t flags, int32_t keyCode, int32_t scanCode,
70be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown            int32_t metaState, nsecs_t downTime);
71be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown
72be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown    NotifyKeyArgs(const NotifyKeyArgs& other);
73be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown
74be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown    virtual ~NotifyKeyArgs() { }
75be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown
76be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown    virtual void notify(const sp<InputListenerInterface>& listener) const;
77be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown};
78be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown
79be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown
80be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown/* Describes a motion event. */
81be1aa8250cee7819c49741e819e81659d1d03823Jeff Brownstruct NotifyMotionArgs : public NotifyArgs {
82be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown    nsecs_t eventTime;
83be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown    int32_t deviceId;
84be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown    uint32_t source;
85be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown    uint32_t policyFlags;
86be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown    int32_t action;
87be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown    int32_t flags;
88be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown    int32_t metaState;
89be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown    int32_t buttonState;
90be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown    int32_t edgeFlags;
9183d616a9c7b9505153d258511eb5c16b552e268dJeff Brown    int32_t displayId;
92be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown    uint32_t pointerCount;
93be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown    PointerProperties pointerProperties[MAX_POINTERS];
94be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown    PointerCoords pointerCoords[MAX_POINTERS];
95be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown    float xPrecision;
96be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown    float yPrecision;
97be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown    nsecs_t downTime;
98be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown
99be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown    inline NotifyMotionArgs() { }
100be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown
101be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown    NotifyMotionArgs(nsecs_t eventTime, int32_t deviceId, uint32_t source, uint32_t policyFlags,
102be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown            int32_t action, int32_t flags, int32_t metaState, int32_t buttonState,
10383d616a9c7b9505153d258511eb5c16b552e268dJeff Brown            int32_t edgeFlags, int32_t displayId, uint32_t pointerCount,
104be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown            const PointerProperties* pointerProperties, const PointerCoords* pointerCoords,
105be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown            float xPrecision, float yPrecision, nsecs_t downTime);
106be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown
107be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown    NotifyMotionArgs(const NotifyMotionArgs& other);
108be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown
109be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown    virtual ~NotifyMotionArgs() { }
110be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown
111be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown    virtual void notify(const sp<InputListenerInterface>& listener) const;
112be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown};
113be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown
114be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown
115be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown/* Describes a switch event. */
116be1aa8250cee7819c49741e819e81659d1d03823Jeff Brownstruct NotifySwitchArgs : public NotifyArgs {
117be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown    nsecs_t eventTime;
118be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown    uint32_t policyFlags;
119bcc046af4ef171aa3aa3c6b64efb5cafc1e46cd3Jeff Brown    uint32_t switchValues;
120bcc046af4ef171aa3aa3c6b64efb5cafc1e46cd3Jeff Brown    uint32_t switchMask;
121be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown
122be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown    inline NotifySwitchArgs() { }
123be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown
124be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown    NotifySwitchArgs(nsecs_t eventTime, uint32_t policyFlags,
125bcc046af4ef171aa3aa3c6b64efb5cafc1e46cd3Jeff Brown            uint32_t switchValues, uint32_t switchMask);
126be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown
127be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown    NotifySwitchArgs(const NotifySwitchArgs& other);
128be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown
129be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown    virtual ~NotifySwitchArgs() { }
130be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown
131be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown    virtual void notify(const sp<InputListenerInterface>& listener) const;
132be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown};
133be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown
134be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown
13565fd251c3913fc921468a3dad190810db19eb9dfJeff Brown/* Describes a device reset event, such as when a device is added,
13665fd251c3913fc921468a3dad190810db19eb9dfJeff Brown * reconfigured, or removed. */
13765fd251c3913fc921468a3dad190810db19eb9dfJeff Brownstruct NotifyDeviceResetArgs : public NotifyArgs {
13865fd251c3913fc921468a3dad190810db19eb9dfJeff Brown    nsecs_t eventTime;
13965fd251c3913fc921468a3dad190810db19eb9dfJeff Brown    int32_t deviceId;
14065fd251c3913fc921468a3dad190810db19eb9dfJeff Brown
14165fd251c3913fc921468a3dad190810db19eb9dfJeff Brown    inline NotifyDeviceResetArgs() { }
14265fd251c3913fc921468a3dad190810db19eb9dfJeff Brown
14365fd251c3913fc921468a3dad190810db19eb9dfJeff Brown    NotifyDeviceResetArgs(nsecs_t eventTime, int32_t deviceId);
14465fd251c3913fc921468a3dad190810db19eb9dfJeff Brown
14565fd251c3913fc921468a3dad190810db19eb9dfJeff Brown    NotifyDeviceResetArgs(const NotifyDeviceResetArgs& other);
14665fd251c3913fc921468a3dad190810db19eb9dfJeff Brown
14765fd251c3913fc921468a3dad190810db19eb9dfJeff Brown    virtual ~NotifyDeviceResetArgs() { }
14865fd251c3913fc921468a3dad190810db19eb9dfJeff Brown
14965fd251c3913fc921468a3dad190810db19eb9dfJeff Brown    virtual void notify(const sp<InputListenerInterface>& listener) const;
15065fd251c3913fc921468a3dad190810db19eb9dfJeff Brown};
15165fd251c3913fc921468a3dad190810db19eb9dfJeff Brown
15265fd251c3913fc921468a3dad190810db19eb9dfJeff Brown
153be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown/*
154be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown * The interface used by the InputReader to notify the InputListener about input events.
155be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown */
156be1aa8250cee7819c49741e819e81659d1d03823Jeff Brownclass InputListenerInterface : public virtual RefBase {
157be1aa8250cee7819c49741e819e81659d1d03823Jeff Brownprotected:
158be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown    InputListenerInterface() { }
159be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown    virtual ~InputListenerInterface() { }
160be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown
161be1aa8250cee7819c49741e819e81659d1d03823Jeff Brownpublic:
162be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown    virtual void notifyConfigurationChanged(const NotifyConfigurationChangedArgs* args) = 0;
163be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown    virtual void notifyKey(const NotifyKeyArgs* args) = 0;
164be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown    virtual void notifyMotion(const NotifyMotionArgs* args) = 0;
165be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown    virtual void notifySwitch(const NotifySwitchArgs* args) = 0;
16665fd251c3913fc921468a3dad190810db19eb9dfJeff Brown    virtual void notifyDeviceReset(const NotifyDeviceResetArgs* args) = 0;
167be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown};
168be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown
169be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown
170be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown/*
171be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown * An implementation of the listener interface that queues up and defers dispatch
172be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown * of decoded events until flushed.
173be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown */
174be1aa8250cee7819c49741e819e81659d1d03823Jeff Brownclass QueuedInputListener : public InputListenerInterface {
175be1aa8250cee7819c49741e819e81659d1d03823Jeff Brownprotected:
176be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown    virtual ~QueuedInputListener();
177be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown
178be1aa8250cee7819c49741e819e81659d1d03823Jeff Brownpublic:
179be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown    QueuedInputListener(const sp<InputListenerInterface>& innerListener);
180be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown
181be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown    virtual void notifyConfigurationChanged(const NotifyConfigurationChangedArgs* args);
182be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown    virtual void notifyKey(const NotifyKeyArgs* args);
183be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown    virtual void notifyMotion(const NotifyMotionArgs* args);
184be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown    virtual void notifySwitch(const NotifySwitchArgs* args);
18565fd251c3913fc921468a3dad190810db19eb9dfJeff Brown    virtual void notifyDeviceReset(const NotifyDeviceResetArgs* args);
186be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown
187be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown    void flush();
188be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown
189be1aa8250cee7819c49741e819e81659d1d03823Jeff Brownprivate:
190be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown    sp<InputListenerInterface> mInnerListener;
191be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown    Vector<NotifyArgs*> mArgsQueue;
192be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown};
193be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown
194be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown} // namespace android
195be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown
196be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown#endif // _UI_INPUT_LISTENER_H
197