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