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