InputDispatcher_test.cpp revision 199d1c131d29b5356f71fbd7826a592c1dd8575f
1199d1c131d29b5356f71fbd7826a592c1dd8575fJames Dong/* 2199d1c131d29b5356f71fbd7826a592c1dd8575fJames Dong * Copyright (C) 2010 The Android Open Source Project 3199d1c131d29b5356f71fbd7826a592c1dd8575fJames Dong * 4199d1c131d29b5356f71fbd7826a592c1dd8575fJames Dong * Licensed under the Apache License, Version 2.0 (the "License"); 5199d1c131d29b5356f71fbd7826a592c1dd8575fJames Dong * you may not use this file except in compliance with the License. 6199d1c131d29b5356f71fbd7826a592c1dd8575fJames Dong * You may obtain a copy of the License at 7199d1c131d29b5356f71fbd7826a592c1dd8575fJames Dong * 8199d1c131d29b5356f71fbd7826a592c1dd8575fJames Dong * http://www.apache.org/licenses/LICENSE-2.0 9199d1c131d29b5356f71fbd7826a592c1dd8575fJames Dong * 10199d1c131d29b5356f71fbd7826a592c1dd8575fJames Dong * Unless required by applicable law or agreed to in writing, software 11199d1c131d29b5356f71fbd7826a592c1dd8575fJames Dong * distributed under the License is distributed on an "AS IS" BASIS, 12199d1c131d29b5356f71fbd7826a592c1dd8575fJames Dong * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13199d1c131d29b5356f71fbd7826a592c1dd8575fJames Dong * See the License for the specific language governing permissions and 14199d1c131d29b5356f71fbd7826a592c1dd8575fJames Dong * limitations under the License. 15199d1c131d29b5356f71fbd7826a592c1dd8575fJames Dong */ 1646b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown 17b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown#include "../InputDispatcher.h" 18b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown 1946b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown#include <gtest/gtest.h> 20c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown#include <linux/input.h> 2146b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown 2246b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brownnamespace android { 2346b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown 24c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown// An arbitrary time value. 25c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brownstatic const nsecs_t ARBITRARY_TIME = 1234; 26c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown 27c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown// An arbitrary device id. 28c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brownstatic const int32_t DEVICE_ID = 1; 29c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown 30c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown// An arbitrary injector pid / uid pair that has permission to inject events. 31c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brownstatic const int32_t INJECTOR_PID = 999; 32c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brownstatic const int32_t INJECTOR_UID = 1001; 33c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown 34c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown 35c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown// --- FakeInputDispatcherPolicy --- 36c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown 37c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brownclass FakeInputDispatcherPolicy : public InputDispatcherPolicyInterface { 38c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brownprotected: 39c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown virtual ~FakeInputDispatcherPolicy() { 40c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown } 41c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown 4246b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brownpublic: 43c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown FakeInputDispatcherPolicy() { 44c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown } 45c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown 46c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brownprivate: 47c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown virtual void notifyConfigurationChanged(nsecs_t when) { 48c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown } 49c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown 50c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown virtual nsecs_t notifyANR(const sp<InputApplicationHandle>& inputApplicationHandle, 51928e054931d357326613c78e62f4d850b7c442ffJeff Brown const sp<InputWindowHandle>& inputWindowHandle) { 52c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown return 0; 53c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown } 54c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown 55928e054931d357326613c78e62f4d850b7c442ffJeff Brown virtual void notifyInputChannelBroken(const sp<InputWindowHandle>& inputWindowHandle) { 56c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown } 57c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown 58c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown virtual nsecs_t getKeyRepeatTimeout() { 59c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown return 500 * 1000000LL; 60c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown } 61c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown 62c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown virtual nsecs_t getKeyRepeatDelay() { 63c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown return 50 * 1000000LL; 64c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown } 65c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown 66c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown virtual int32_t getMaxEventsPerSecond() { 67c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown return 60; 68c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown } 69c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown 701f2451007c660091b7b090c1ea332f9044515d2dJeff Brown virtual void interceptKeyBeforeQueueing(const KeyEvent* keyEvent, uint32_t& policyFlags) { 71c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown } 72c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown 7356194ebec6212e229f4ccdaa4b187166d20013efJeff Brown virtual void interceptMotionBeforeQueueing(nsecs_t when, uint32_t& policyFlags) { 74c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown } 75c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown 76928e054931d357326613c78e62f4d850b7c442ffJeff Brown virtual bool interceptKeyBeforeDispatching(const sp<InputWindowHandle>& inputWindowHandle, 77c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown const KeyEvent* keyEvent, uint32_t policyFlags) { 78c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown return false; 79c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown } 80c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown 81928e054931d357326613c78e62f4d850b7c442ffJeff Brown virtual bool dispatchUnhandledKey(const sp<InputWindowHandle>& inputWindowHandle, 8249ed71db425c5054e3ad9526496a7e116c89556bJeff Brown const KeyEvent* keyEvent, uint32_t policyFlags, KeyEvent* outFallbackKeyEvent) { 833915bb845b032dc184dba5e60970b803390ca3edJeff Brown return false; 843915bb845b032dc184dba5e60970b803390ca3edJeff Brown } 853915bb845b032dc184dba5e60970b803390ca3edJeff Brown 86c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown virtual void notifySwitch(nsecs_t when, 87c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown int32_t switchCode, int32_t switchValue, uint32_t policyFlags) { 88c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown } 89c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown 90c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown virtual void pokeUserActivity(nsecs_t eventTime, int32_t eventType) { 91c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown } 92c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown 93c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown virtual bool checkInjectEventsPermissionNonReentrant( 94c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown int32_t injectorPid, int32_t injectorUid) { 95c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown return false; 96c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown } 9746b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown}; 9846b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown 99c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown 100c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown// --- InputDispatcherTest --- 101c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown 102c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brownclass InputDispatcherTest : public testing::Test { 103c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brownprotected: 104c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown sp<FakeInputDispatcherPolicy> mFakePolicy; 105c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown sp<InputDispatcher> mDispatcher; 106c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown 107c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown virtual void SetUp() { 108c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown mFakePolicy = new FakeInputDispatcherPolicy(); 109c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown mDispatcher = new InputDispatcher(mFakePolicy); 110c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown } 111c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown 112c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown virtual void TearDown() { 113c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown mFakePolicy.clear(); 114c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown mDispatcher.clear(); 115c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown } 116c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown}; 117c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown 118c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown 119c3db858de9fa152480b9cf53c8c0cb793a280722Jeff BrownTEST_F(InputDispatcherTest, InjectInputEvent_ValidatesKeyEvents) { 120c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown KeyEvent event; 121c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown 122c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown // Rejects undefined key actions. 123c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown event.initialize(DEVICE_ID, AINPUT_SOURCE_KEYBOARD, 124c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown /*action*/ -1, 0, 125c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown AKEYCODE_A, KEY_A, AMETA_NONE, 0, ARBITRARY_TIME, ARBITRARY_TIME); 126c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown ASSERT_EQ(INPUT_EVENT_INJECTION_FAILED, mDispatcher->injectInputEvent(&event, 127c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown INJECTOR_PID, INJECTOR_UID, INPUT_EVENT_INJECTION_SYNC_NONE, 0)) 128c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown << "Should reject key events with undefined action."; 129c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown 130c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown // Rejects ACTION_MULTIPLE since it is not supported despite being defined in the API. 131c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown event.initialize(DEVICE_ID, AINPUT_SOURCE_KEYBOARD, 132c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown AKEY_EVENT_ACTION_MULTIPLE, 0, 133c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown AKEYCODE_A, KEY_A, AMETA_NONE, 0, ARBITRARY_TIME, ARBITRARY_TIME); 134c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown ASSERT_EQ(INPUT_EVENT_INJECTION_FAILED, mDispatcher->injectInputEvent(&event, 135c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown INJECTOR_PID, INJECTOR_UID, INPUT_EVENT_INJECTION_SYNC_NONE, 0)) 136c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown << "Should reject key events with ACTION_MULTIPLE."; 137c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown} 138c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown 139c3db858de9fa152480b9cf53c8c0cb793a280722Jeff BrownTEST_F(InputDispatcherTest, InjectInputEvent_ValidatesMotionEvents) { 140c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown MotionEvent event; 141c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown int32_t pointerIds[MAX_POINTERS + 1]; 142c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown PointerCoords pointerCoords[MAX_POINTERS + 1]; 143c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown for (int i = 0; i <= MAX_POINTERS; i++) { 144c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown pointerIds[i] = i; 145c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown } 146c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown 147c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown // Rejects undefined motion actions. 148c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown event.initialize(DEVICE_ID, AINPUT_SOURCE_TOUCHSCREEN, 149c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown /*action*/ -1, 0, 0, AMETA_NONE, 0, 0, 0, 0, 150c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown ARBITRARY_TIME, ARBITRARY_TIME, 151c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown /*pointerCount*/ 1, pointerIds, pointerCoords); 152c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown ASSERT_EQ(INPUT_EVENT_INJECTION_FAILED, mDispatcher->injectInputEvent(&event, 153c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown INJECTOR_PID, INJECTOR_UID, INPUT_EVENT_INJECTION_SYNC_NONE, 0)) 154c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown << "Should reject motion events with undefined action."; 155c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown 156c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown // Rejects pointer down with invalid index. 157c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown event.initialize(DEVICE_ID, AINPUT_SOURCE_TOUCHSCREEN, 158c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown AMOTION_EVENT_ACTION_POINTER_DOWN | (1 << AMOTION_EVENT_ACTION_POINTER_INDEX_SHIFT), 159c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown 0, 0, AMETA_NONE, 0, 0, 0, 0, 160c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown ARBITRARY_TIME, ARBITRARY_TIME, 161c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown /*pointerCount*/ 1, pointerIds, pointerCoords); 162c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown ASSERT_EQ(INPUT_EVENT_INJECTION_FAILED, mDispatcher->injectInputEvent(&event, 163c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown INJECTOR_PID, INJECTOR_UID, INPUT_EVENT_INJECTION_SYNC_NONE, 0)) 164c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown << "Should reject motion events with pointer down index too large."; 165c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown 166c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown event.initialize(DEVICE_ID, AINPUT_SOURCE_TOUCHSCREEN, 167c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown AMOTION_EVENT_ACTION_POINTER_DOWN | (-1 << AMOTION_EVENT_ACTION_POINTER_INDEX_SHIFT), 168c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown 0, 0, AMETA_NONE, 0, 0, 0, 0, 169c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown ARBITRARY_TIME, ARBITRARY_TIME, 170c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown /*pointerCount*/ 1, pointerIds, pointerCoords); 171c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown ASSERT_EQ(INPUT_EVENT_INJECTION_FAILED, mDispatcher->injectInputEvent(&event, 172c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown INJECTOR_PID, INJECTOR_UID, INPUT_EVENT_INJECTION_SYNC_NONE, 0)) 173c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown << "Should reject motion events with pointer down index too small."; 174c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown 175c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown // Rejects pointer up with invalid index. 176c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown event.initialize(DEVICE_ID, AINPUT_SOURCE_TOUCHSCREEN, 177c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown AMOTION_EVENT_ACTION_POINTER_UP | (1 << AMOTION_EVENT_ACTION_POINTER_INDEX_SHIFT), 178c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown 0, 0, AMETA_NONE, 0, 0, 0, 0, 179c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown ARBITRARY_TIME, ARBITRARY_TIME, 180c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown /*pointerCount*/ 1, pointerIds, pointerCoords); 181c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown ASSERT_EQ(INPUT_EVENT_INJECTION_FAILED, mDispatcher->injectInputEvent(&event, 182c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown INJECTOR_PID, INJECTOR_UID, INPUT_EVENT_INJECTION_SYNC_NONE, 0)) 183c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown << "Should reject motion events with pointer up index too large."; 184c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown 185c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown event.initialize(DEVICE_ID, AINPUT_SOURCE_TOUCHSCREEN, 186c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown AMOTION_EVENT_ACTION_POINTER_UP | (-1 << AMOTION_EVENT_ACTION_POINTER_INDEX_SHIFT), 187c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown 0, 0, AMETA_NONE, 0, 0, 0, 0, 188c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown ARBITRARY_TIME, ARBITRARY_TIME, 189c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown /*pointerCount*/ 1, pointerIds, pointerCoords); 190c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown ASSERT_EQ(INPUT_EVENT_INJECTION_FAILED, mDispatcher->injectInputEvent(&event, 191c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown INJECTOR_PID, INJECTOR_UID, INPUT_EVENT_INJECTION_SYNC_NONE, 0)) 192c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown << "Should reject motion events with pointer up index too small."; 193c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown 194c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown // Rejects motion events with invalid number of pointers. 195c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown event.initialize(DEVICE_ID, AINPUT_SOURCE_TOUCHSCREEN, 196c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown AMOTION_EVENT_ACTION_DOWN, 0, 0, AMETA_NONE, 0, 0, 0, 0, 197c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown ARBITRARY_TIME, ARBITRARY_TIME, 198c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown /*pointerCount*/ 0, pointerIds, pointerCoords); 199c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown ASSERT_EQ(INPUT_EVENT_INJECTION_FAILED, mDispatcher->injectInputEvent(&event, 200c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown INJECTOR_PID, INJECTOR_UID, INPUT_EVENT_INJECTION_SYNC_NONE, 0)) 201c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown << "Should reject motion events with 0 pointers."; 202c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown 203c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown event.initialize(DEVICE_ID, AINPUT_SOURCE_TOUCHSCREEN, 204c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown AMOTION_EVENT_ACTION_DOWN, 0, 0, AMETA_NONE, 0, 0, 0, 0, 205c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown ARBITRARY_TIME, ARBITRARY_TIME, 206c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown /*pointerCount*/ MAX_POINTERS + 1, pointerIds, pointerCoords); 207c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown ASSERT_EQ(INPUT_EVENT_INJECTION_FAILED, mDispatcher->injectInputEvent(&event, 208c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown INJECTOR_PID, INJECTOR_UID, INPUT_EVENT_INJECTION_SYNC_NONE, 0)) 209c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown << "Should reject motion events with more than MAX_POINTERS pointers."; 210c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown 211c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown // Rejects motion events with invalid pointer ids. 212c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown pointerIds[0] = -1; 213c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown event.initialize(DEVICE_ID, AINPUT_SOURCE_TOUCHSCREEN, 214c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown AMOTION_EVENT_ACTION_DOWN, 0, 0, AMETA_NONE, 0, 0, 0, 0, 215c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown ARBITRARY_TIME, ARBITRARY_TIME, 216c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown /*pointerCount*/ 1, pointerIds, pointerCoords); 217c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown ASSERT_EQ(INPUT_EVENT_INJECTION_FAILED, mDispatcher->injectInputEvent(&event, 218c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown INJECTOR_PID, INJECTOR_UID, INPUT_EVENT_INJECTION_SYNC_NONE, 0)) 219c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown << "Should reject motion events with pointer ids less than 0."; 220c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown 221c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown pointerIds[0] = MAX_POINTER_ID + 1; 222c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown event.initialize(DEVICE_ID, AINPUT_SOURCE_TOUCHSCREEN, 223c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown AMOTION_EVENT_ACTION_DOWN, 0, 0, AMETA_NONE, 0, 0, 0, 0, 224c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown ARBITRARY_TIME, ARBITRARY_TIME, 225c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown /*pointerCount*/ 1, pointerIds, pointerCoords); 226c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown ASSERT_EQ(INPUT_EVENT_INJECTION_FAILED, mDispatcher->injectInputEvent(&event, 227c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown INJECTOR_PID, INJECTOR_UID, INPUT_EVENT_INJECTION_SYNC_NONE, 0)) 228c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown << "Should reject motion events with pointer ids greater than MAX_POINTER_ID."; 229c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown 230c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown // Rejects motion events with duplicate pointer ids. 231c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown pointerIds[0] = 1; 232c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown pointerIds[1] = 1; 233c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown event.initialize(DEVICE_ID, AINPUT_SOURCE_TOUCHSCREEN, 234c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown AMOTION_EVENT_ACTION_DOWN, 0, 0, AMETA_NONE, 0, 0, 0, 0, 235c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown ARBITRARY_TIME, ARBITRARY_TIME, 236c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown /*pointerCount*/ 2, pointerIds, pointerCoords); 237c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown ASSERT_EQ(INPUT_EVENT_INJECTION_FAILED, mDispatcher->injectInputEvent(&event, 238c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown INJECTOR_PID, INJECTOR_UID, INPUT_EVENT_INJECTION_SYNC_NONE, 0)) 239c3db858de9fa152480b9cf53c8c0cb793a280722Jeff Brown << "Should reject motion events with duplicate pointer ids."; 24046b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown} 24146b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown 24246b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown} // namespace android 243