InputListener.h revision b93a03f841d93498bfea6cc92a22faa34bce1337
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 <androidfw/Input.h> 21#include <utils/RefBase.h> 22#include <utils/Vector.h> 23 24namespace android { 25 26class InputListenerInterface; 27 28 29/* Superclass of all input event argument objects */ 30struct NotifyArgs { 31 virtual ~NotifyArgs() { } 32 33 virtual void notify(const sp<InputListenerInterface>& listener) const = 0; 34}; 35 36 37/* Describes a configuration change event. */ 38struct 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. */ 54struct 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. */ 81struct 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 uint32_t pointerCount; 92 PointerProperties pointerProperties[MAX_POINTERS]; 93 PointerCoords pointerCoords[MAX_POINTERS]; 94 float xPrecision; 95 float yPrecision; 96 nsecs_t downTime; 97 98 inline NotifyMotionArgs() { } 99 100 NotifyMotionArgs(nsecs_t eventTime, int32_t deviceId, uint32_t source, uint32_t policyFlags, 101 int32_t action, int32_t flags, int32_t metaState, int32_t buttonState, 102 int32_t edgeFlags, uint32_t pointerCount, 103 const PointerProperties* pointerProperties, const PointerCoords* pointerCoords, 104 float xPrecision, float yPrecision, nsecs_t downTime); 105 106 NotifyMotionArgs(const NotifyMotionArgs& other); 107 108 virtual ~NotifyMotionArgs() { } 109 110 virtual void notify(const sp<InputListenerInterface>& listener) const; 111}; 112 113 114/* Describes a switch event. */ 115struct NotifySwitchArgs : public NotifyArgs { 116 nsecs_t eventTime; 117 uint32_t policyFlags; 118 int32_t switchCode; 119 int32_t switchValue; 120 121 inline NotifySwitchArgs() { } 122 123 NotifySwitchArgs(nsecs_t eventTime, uint32_t policyFlags, 124 int32_t switchCode, int32_t switchValue); 125 126 NotifySwitchArgs(const NotifySwitchArgs& other); 127 128 virtual ~NotifySwitchArgs() { } 129 130 virtual void notify(const sp<InputListenerInterface>& listener) const; 131}; 132 133 134/* Describes a device reset event, such as when a device is added, 135 * reconfigured, or removed. */ 136struct NotifyDeviceResetArgs : public NotifyArgs { 137 nsecs_t eventTime; 138 int32_t deviceId; 139 140 inline NotifyDeviceResetArgs() { } 141 142 NotifyDeviceResetArgs(nsecs_t eventTime, int32_t deviceId); 143 144 NotifyDeviceResetArgs(const NotifyDeviceResetArgs& other); 145 146 virtual ~NotifyDeviceResetArgs() { } 147 148 virtual void notify(const sp<InputListenerInterface>& listener) const; 149}; 150 151 152/* 153 * The interface used by the InputReader to notify the InputListener about input events. 154 */ 155class InputListenerInterface : public virtual RefBase { 156protected: 157 InputListenerInterface() { } 158 virtual ~InputListenerInterface() { } 159 160public: 161 virtual void notifyConfigurationChanged(const NotifyConfigurationChangedArgs* args) = 0; 162 virtual void notifyKey(const NotifyKeyArgs* args) = 0; 163 virtual void notifyMotion(const NotifyMotionArgs* args) = 0; 164 virtual void notifySwitch(const NotifySwitchArgs* args) = 0; 165 virtual void notifyDeviceReset(const NotifyDeviceResetArgs* args) = 0; 166}; 167 168 169/* 170 * An implementation of the listener interface that queues up and defers dispatch 171 * of decoded events until flushed. 172 */ 173class QueuedInputListener : public InputListenerInterface { 174protected: 175 virtual ~QueuedInputListener(); 176 177public: 178 QueuedInputListener(const sp<InputListenerInterface>& innerListener); 179 180 virtual void notifyConfigurationChanged(const NotifyConfigurationChangedArgs* args); 181 virtual void notifyKey(const NotifyKeyArgs* args); 182 virtual void notifyMotion(const NotifyMotionArgs* args); 183 virtual void notifySwitch(const NotifySwitchArgs* args); 184 virtual void notifyDeviceReset(const NotifyDeviceResetArgs* args); 185 186 void flush(); 187 188private: 189 sp<InputListenerInterface> mInnerListener; 190 Vector<NotifyArgs*> mArgsQueue; 191}; 192 193} // namespace android 194 195#endif // _UI_INPUT_LISTENER_H 196