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