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#define LOG_TAG "InputListener" 18be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown 19be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown//#define LOG_NDEBUG 0 20be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown 21be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown#include "InputListener.h" 22be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown 23be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown#include <cutils/log.h> 24be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown 25be1aa8250cee7819c49741e819e81659d1d03823Jeff Brownnamespace android { 26be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown 27be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown// --- NotifyConfigurationChangedArgs --- 28be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown 29be1aa8250cee7819c49741e819e81659d1d03823Jeff BrownNotifyConfigurationChangedArgs::NotifyConfigurationChangedArgs(nsecs_t eventTime) : 30be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown eventTime(eventTime) { 31be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown} 32be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown 33be1aa8250cee7819c49741e819e81659d1d03823Jeff BrownNotifyConfigurationChangedArgs::NotifyConfigurationChangedArgs( 34be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown const NotifyConfigurationChangedArgs& other) : 35be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown eventTime(other.eventTime) { 36be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown} 37be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown 38be1aa8250cee7819c49741e819e81659d1d03823Jeff Brownvoid NotifyConfigurationChangedArgs::notify(const sp<InputListenerInterface>& listener) const { 39be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown listener->notifyConfigurationChanged(this); 40be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown} 41be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown 42be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown 43be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown// --- NotifyKeyArgs --- 44be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown 45be1aa8250cee7819c49741e819e81659d1d03823Jeff BrownNotifyKeyArgs::NotifyKeyArgs(nsecs_t eventTime, int32_t deviceId, uint32_t source, 46be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown uint32_t policyFlags, 47be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown int32_t action, int32_t flags, int32_t keyCode, int32_t scanCode, 48be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown int32_t metaState, nsecs_t downTime) : 49be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown eventTime(eventTime), deviceId(deviceId), source(source), policyFlags(policyFlags), 50be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown action(action), flags(flags), keyCode(keyCode), scanCode(scanCode), 51be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown metaState(metaState), downTime(downTime) { 52be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown} 53be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown 54be1aa8250cee7819c49741e819e81659d1d03823Jeff BrownNotifyKeyArgs::NotifyKeyArgs(const NotifyKeyArgs& other) : 55be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown eventTime(other.eventTime), deviceId(other.deviceId), source(other.source), 56be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown policyFlags(other.policyFlags), 57be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown action(other.action), flags(other.flags), 58be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown keyCode(other.keyCode), scanCode(other.scanCode), 59be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown metaState(other.metaState), downTime(other.downTime) { 60be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown} 61be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown 62be1aa8250cee7819c49741e819e81659d1d03823Jeff Brownvoid NotifyKeyArgs::notify(const sp<InputListenerInterface>& listener) const { 63be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown listener->notifyKey(this); 64be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown} 65be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown 66be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown 67be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown// --- NotifyMotionArgs --- 68be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown 69be1aa8250cee7819c49741e819e81659d1d03823Jeff BrownNotifyMotionArgs::NotifyMotionArgs(nsecs_t eventTime, int32_t deviceId, uint32_t source, 70be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown uint32_t policyFlags, 71be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown int32_t action, int32_t flags, int32_t metaState, int32_t buttonState, 7283d616a9c7b9505153d258511eb5c16b552e268dJeff Brown int32_t edgeFlags, int32_t displayId, uint32_t pointerCount, 73be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown const PointerProperties* pointerProperties, const PointerCoords* pointerCoords, 74be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown float xPrecision, float yPrecision, nsecs_t downTime) : 75be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown eventTime(eventTime), deviceId(deviceId), source(source), policyFlags(policyFlags), 76be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown action(action), flags(flags), metaState(metaState), buttonState(buttonState), 7783d616a9c7b9505153d258511eb5c16b552e268dJeff Brown edgeFlags(edgeFlags), displayId(displayId), pointerCount(pointerCount), 78be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown xPrecision(xPrecision), yPrecision(yPrecision), downTime(downTime) { 79be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown for (uint32_t i = 0; i < pointerCount; i++) { 80be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown this->pointerProperties[i].copyFrom(pointerProperties[i]); 81be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown this->pointerCoords[i].copyFrom(pointerCoords[i]); 82be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown } 83be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown} 84be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown 85be1aa8250cee7819c49741e819e81659d1d03823Jeff BrownNotifyMotionArgs::NotifyMotionArgs(const NotifyMotionArgs& other) : 86be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown eventTime(other.eventTime), deviceId(other.deviceId), source(other.source), 87be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown policyFlags(other.policyFlags), 88be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown action(other.action), flags(other.flags), 89be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown metaState(other.metaState), buttonState(other.buttonState), 9083d616a9c7b9505153d258511eb5c16b552e268dJeff Brown edgeFlags(other.edgeFlags), displayId(other.displayId), 9183d616a9c7b9505153d258511eb5c16b552e268dJeff Brown pointerCount(other.pointerCount), 92be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown xPrecision(other.xPrecision), yPrecision(other.yPrecision), downTime(other.downTime) { 93be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown for (uint32_t i = 0; i < pointerCount; i++) { 94be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown pointerProperties[i].copyFrom(other.pointerProperties[i]); 95be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown pointerCoords[i].copyFrom(other.pointerCoords[i]); 96be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown } 97be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown} 98be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown 99be1aa8250cee7819c49741e819e81659d1d03823Jeff Brownvoid NotifyMotionArgs::notify(const sp<InputListenerInterface>& listener) const { 100be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown listener->notifyMotion(this); 101be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown} 102be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown 103be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown 104be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown// --- NotifySwitchArgs --- 105be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown 106be1aa8250cee7819c49741e819e81659d1d03823Jeff BrownNotifySwitchArgs::NotifySwitchArgs(nsecs_t eventTime, uint32_t policyFlags, 107bcc046af4ef171aa3aa3c6b64efb5cafc1e46cd3Jeff Brown uint32_t switchValues, uint32_t switchMask) : 108be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown eventTime(eventTime), policyFlags(policyFlags), 109bcc046af4ef171aa3aa3c6b64efb5cafc1e46cd3Jeff Brown switchValues(switchValues), switchMask(switchMask) { 110be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown} 111be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown 112be1aa8250cee7819c49741e819e81659d1d03823Jeff BrownNotifySwitchArgs::NotifySwitchArgs(const NotifySwitchArgs& other) : 113be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown eventTime(other.eventTime), policyFlags(other.policyFlags), 114bcc046af4ef171aa3aa3c6b64efb5cafc1e46cd3Jeff Brown switchValues(other.switchValues), switchMask(other.switchMask) { 115be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown} 116be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown 117be1aa8250cee7819c49741e819e81659d1d03823Jeff Brownvoid NotifySwitchArgs::notify(const sp<InputListenerInterface>& listener) const { 118be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown listener->notifySwitch(this); 119be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown} 120be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown 121be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown 12265fd251c3913fc921468a3dad190810db19eb9dfJeff Brown// --- NotifyDeviceResetArgs --- 12365fd251c3913fc921468a3dad190810db19eb9dfJeff Brown 12465fd251c3913fc921468a3dad190810db19eb9dfJeff BrownNotifyDeviceResetArgs::NotifyDeviceResetArgs(nsecs_t eventTime, int32_t deviceId) : 12565fd251c3913fc921468a3dad190810db19eb9dfJeff Brown eventTime(eventTime), deviceId(deviceId) { 12665fd251c3913fc921468a3dad190810db19eb9dfJeff Brown} 12765fd251c3913fc921468a3dad190810db19eb9dfJeff Brown 12865fd251c3913fc921468a3dad190810db19eb9dfJeff BrownNotifyDeviceResetArgs::NotifyDeviceResetArgs(const NotifyDeviceResetArgs& other) : 12965fd251c3913fc921468a3dad190810db19eb9dfJeff Brown eventTime(other.eventTime), deviceId(other.deviceId) { 13065fd251c3913fc921468a3dad190810db19eb9dfJeff Brown} 13165fd251c3913fc921468a3dad190810db19eb9dfJeff Brown 13265fd251c3913fc921468a3dad190810db19eb9dfJeff Brownvoid NotifyDeviceResetArgs::notify(const sp<InputListenerInterface>& listener) const { 13365fd251c3913fc921468a3dad190810db19eb9dfJeff Brown listener->notifyDeviceReset(this); 13465fd251c3913fc921468a3dad190810db19eb9dfJeff Brown} 13565fd251c3913fc921468a3dad190810db19eb9dfJeff Brown 13665fd251c3913fc921468a3dad190810db19eb9dfJeff Brown 137be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown// --- QueuedInputListener --- 138be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown 139be1aa8250cee7819c49741e819e81659d1d03823Jeff BrownQueuedInputListener::QueuedInputListener(const sp<InputListenerInterface>& innerListener) : 140be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown mInnerListener(innerListener) { 141be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown} 142be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown 143be1aa8250cee7819c49741e819e81659d1d03823Jeff BrownQueuedInputListener::~QueuedInputListener() { 144be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown size_t count = mArgsQueue.size(); 145be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown for (size_t i = 0; i < count; i++) { 146be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown delete mArgsQueue[i]; 147be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown } 148be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown} 149be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown 150be1aa8250cee7819c49741e819e81659d1d03823Jeff Brownvoid QueuedInputListener::notifyConfigurationChanged( 151be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown const NotifyConfigurationChangedArgs* args) { 152be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown mArgsQueue.push(new NotifyConfigurationChangedArgs(*args)); 153be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown} 154be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown 155be1aa8250cee7819c49741e819e81659d1d03823Jeff Brownvoid QueuedInputListener::notifyKey(const NotifyKeyArgs* args) { 156be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown mArgsQueue.push(new NotifyKeyArgs(*args)); 157be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown} 158be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown 159be1aa8250cee7819c49741e819e81659d1d03823Jeff Brownvoid QueuedInputListener::notifyMotion(const NotifyMotionArgs* args) { 160be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown mArgsQueue.push(new NotifyMotionArgs(*args)); 161be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown} 162be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown 163be1aa8250cee7819c49741e819e81659d1d03823Jeff Brownvoid QueuedInputListener::notifySwitch(const NotifySwitchArgs* args) { 164be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown mArgsQueue.push(new NotifySwitchArgs(*args)); 165be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown} 166be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown 16765fd251c3913fc921468a3dad190810db19eb9dfJeff Brownvoid QueuedInputListener::notifyDeviceReset(const NotifyDeviceResetArgs* args) { 16865fd251c3913fc921468a3dad190810db19eb9dfJeff Brown mArgsQueue.push(new NotifyDeviceResetArgs(*args)); 16965fd251c3913fc921468a3dad190810db19eb9dfJeff Brown} 17065fd251c3913fc921468a3dad190810db19eb9dfJeff Brown 171be1aa8250cee7819c49741e819e81659d1d03823Jeff Brownvoid QueuedInputListener::flush() { 172be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown size_t count = mArgsQueue.size(); 173be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown for (size_t i = 0; i < count; i++) { 174be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown NotifyArgs* args = mArgsQueue[i]; 175be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown args->notify(mInnerListener); 176be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown delete args; 177be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown } 178be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown mArgsQueue.clear(); 179be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown} 180be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown 181be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown 182be1aa8250cee7819c49741e819e81659d1d03823Jeff Brown} // namespace android 183