15912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown/* 25912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * Copyright (C) 2011 The Android Open Source Project 35912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * 45912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * Licensed under the Apache License, Version 2.0 (the "License"); 55912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * you may not use this file except in compliance with the License. 65912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * You may obtain a copy of the License at 75912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * 85912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * http://www.apache.org/licenses/LICENSE-2.0 95912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * 105912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * Unless required by applicable law or agreed to in writing, software 115912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * distributed under the License is distributed on an "AS IS" BASIS, 125912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 135912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * See the License for the specific language governing permissions and 145912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * limitations under the License. 155912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown */ 165912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 175912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown#include <math.h> 185912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 195912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown#include <binder/Parcel.h> 205912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown#include <gtest/gtest.h> 215912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown#include <input/Input.h> 225912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 235912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brownnamespace android { 245912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 255912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brownclass BaseTest : public testing::Test { 265912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brownprotected: 275912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown virtual void SetUp() { } 285912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown virtual void TearDown() { } 295912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown}; 305912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 315912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown// --- PointerCoordsTest --- 325912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 335912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brownclass PointerCoordsTest : public BaseTest { 345912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown}; 355912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 365912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff BrownTEST_F(PointerCoordsTest, ClearSetsBitsToZero) { 375912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown PointerCoords coords; 385912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown coords.clear(); 395912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 405912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(0ULL, coords.bits); 415912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown} 425912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 435912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff BrownTEST_F(PointerCoordsTest, AxisValues) { 445912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown float* valuePtr; 455912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown PointerCoords coords; 465912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown coords.clear(); 475912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 485912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown // Check invariants when no axes are present. 495912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(0, coords.getAxisValue(0)) 505912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown << "getAxisValue should return zero because axis is not present"; 515912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(0, coords.getAxisValue(1)) 525912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown << "getAxisValue should return zero because axis is not present"; 535912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 545912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown // Set first axis. 555912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(OK, coords.setAxisValue(1, 5)); 565912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(5, coords.values[0]); 57b8290c2642ec7a0cb8a1703a7e1e8958a6a5f9f3Narayan Kamath ASSERT_EQ(0x4000000000000000ULL, coords.bits); 585912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 595912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(0, coords.getAxisValue(0)) 605912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown << "getAxisValue should return zero because axis is not present"; 615912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(5, coords.getAxisValue(1)) 625912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown << "getAxisValue should return value of axis"; 635912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 645912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown // Set an axis with a higher id than all others. (appending value at the end) 655912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(OK, coords.setAxisValue(3, 2)); 66b8290c2642ec7a0cb8a1703a7e1e8958a6a5f9f3Narayan Kamath ASSERT_EQ(0x5000000000000000ULL, coords.bits); 675912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(5, coords.values[0]); 685912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(2, coords.values[1]); 695912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 705912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(0, coords.getAxisValue(0)) 715912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown << "getAxisValue should return zero because axis is not present"; 725912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(5, coords.getAxisValue(1)) 735912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown << "getAxisValue should return value of axis"; 745912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(0, coords.getAxisValue(2)) 755912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown << "getAxisValue should return zero because axis is not present"; 765912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(2, coords.getAxisValue(3)) 775912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown << "getAxisValue should return value of axis"; 785912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 795912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown // Set an axis with an id lower than all others. (prepending value at beginning) 805912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(OK, coords.setAxisValue(0, 4)); 81b8290c2642ec7a0cb8a1703a7e1e8958a6a5f9f3Narayan Kamath ASSERT_EQ(0xd000000000000000ULL, coords.bits); 825912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(4, coords.values[0]); 835912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(5, coords.values[1]); 845912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(2, coords.values[2]); 855912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 865912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(4, coords.getAxisValue(0)) 875912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown << "getAxisValue should return value of axis"; 885912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(5, coords.getAxisValue(1)) 895912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown << "getAxisValue should return value of axis"; 905912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(0, coords.getAxisValue(2)) 915912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown << "getAxisValue should return zero because axis is not present"; 925912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(2, coords.getAxisValue(3)) 935912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown << "getAxisValue should return value of axis"; 945912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 955912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown // Set an axis with an id between the others. (inserting value in the middle) 965912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(OK, coords.setAxisValue(2, 1)); 97b8290c2642ec7a0cb8a1703a7e1e8958a6a5f9f3Narayan Kamath ASSERT_EQ(0xf000000000000000ULL, coords.bits); 985912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(4, coords.values[0]); 995912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(5, coords.values[1]); 1005912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(1, coords.values[2]); 1015912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(2, coords.values[3]); 1025912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 1035912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(4, coords.getAxisValue(0)) 1045912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown << "getAxisValue should return value of axis"; 1055912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(5, coords.getAxisValue(1)) 1065912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown << "getAxisValue should return value of axis"; 1075912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(1, coords.getAxisValue(2)) 1085912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown << "getAxisValue should return value of axis"; 1095912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(2, coords.getAxisValue(3)) 1105912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown << "getAxisValue should return value of axis"; 1115912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 1125912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown // Set an existing axis value in place. 1135912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(OK, coords.setAxisValue(1, 6)); 114b8290c2642ec7a0cb8a1703a7e1e8958a6a5f9f3Narayan Kamath ASSERT_EQ(0xf000000000000000ULL, coords.bits); 1155912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(4, coords.values[0]); 1165912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(6, coords.values[1]); 1175912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(1, coords.values[2]); 1185912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(2, coords.values[3]); 1195912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 1205912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(4, coords.getAxisValue(0)) 1215912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown << "getAxisValue should return value of axis"; 1225912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(6, coords.getAxisValue(1)) 1235912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown << "getAxisValue should return value of axis"; 1245912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(1, coords.getAxisValue(2)) 1255912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown << "getAxisValue should return value of axis"; 1265912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(2, coords.getAxisValue(3)) 1275912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown << "getAxisValue should return value of axis"; 1285912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 1295912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown // Set maximum number of axes. 1305912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown for (size_t axis = 4; axis < PointerCoords::MAX_AXES; axis++) { 1315912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(OK, coords.setAxisValue(axis, axis)); 1325912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown } 1335912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(PointerCoords::MAX_AXES, __builtin_popcountll(coords.bits)); 1345912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 1355912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown // Try to set one more axis beyond maximum number. 1365912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown // Ensure bits are unchanged. 1375912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(NO_MEMORY, coords.setAxisValue(PointerCoords::MAX_AXES, 100)); 1385912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(PointerCoords::MAX_AXES, __builtin_popcountll(coords.bits)); 1395912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown} 1405912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 1415912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff BrownTEST_F(PointerCoordsTest, Parcel) { 1425912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown Parcel parcel; 1435912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 1445912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown PointerCoords inCoords; 1455912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown inCoords.clear(); 1465912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown PointerCoords outCoords; 1475912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 1485912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown // Round trip with empty coords. 1495912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown inCoords.writeToParcel(&parcel); 1505912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown parcel.setDataPosition(0); 1515912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown outCoords.readFromParcel(&parcel); 1525912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 1535912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(0ULL, outCoords.bits); 1545912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 1555912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown // Round trip with some values. 1565912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown parcel.freeData(); 1575912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown inCoords.setAxisValue(2, 5); 1585912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown inCoords.setAxisValue(5, 8); 1595912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 1605912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown inCoords.writeToParcel(&parcel); 1615912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown parcel.setDataPosition(0); 1625912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown outCoords.readFromParcel(&parcel); 1635912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 1645912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(outCoords.bits, inCoords.bits); 1655912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(outCoords.values[0], inCoords.values[0]); 1665912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(outCoords.values[1], inCoords.values[1]); 1675912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown} 1685912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 1695912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 1705912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown// --- KeyEventTest --- 1715912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 1725912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brownclass KeyEventTest : public BaseTest { 1735912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown}; 1745912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 1755912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff BrownTEST_F(KeyEventTest, Properties) { 1765912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown KeyEvent event; 1775912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 1785912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown // Initialize and get properties. 1795912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown const nsecs_t ARBITRARY_DOWN_TIME = 1; 1805912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown const nsecs_t ARBITRARY_EVENT_TIME = 2; 1815912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown event.initialize(2, AINPUT_SOURCE_GAMEPAD, AKEY_EVENT_ACTION_DOWN, 1825912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown AKEY_EVENT_FLAG_FROM_SYSTEM, AKEYCODE_BUTTON_X, 121, 1835912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown AMETA_ALT_ON, 1, ARBITRARY_DOWN_TIME, ARBITRARY_EVENT_TIME); 1845912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 1855912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(AINPUT_EVENT_TYPE_KEY, event.getType()); 1865912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(2, event.getDeviceId()); 1875912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(AINPUT_SOURCE_GAMEPAD, event.getSource()); 1885912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(AKEY_EVENT_ACTION_DOWN, event.getAction()); 1895912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(AKEY_EVENT_FLAG_FROM_SYSTEM, event.getFlags()); 1905912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(AKEYCODE_BUTTON_X, event.getKeyCode()); 1915912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(121, event.getScanCode()); 1925912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(AMETA_ALT_ON, event.getMetaState()); 1935912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(1, event.getRepeatCount()); 1945912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(ARBITRARY_DOWN_TIME, event.getDownTime()); 1955912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(ARBITRARY_EVENT_TIME, event.getEventTime()); 1965912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 1975912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown // Set source. 1985912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown event.setSource(AINPUT_SOURCE_JOYSTICK); 1995912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(AINPUT_SOURCE_JOYSTICK, event.getSource()); 2005912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown} 2015912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 2025912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 2035912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown// --- MotionEventTest --- 2045912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 2055912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brownclass MotionEventTest : public BaseTest { 2065912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brownprotected: 2075912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown static const nsecs_t ARBITRARY_DOWN_TIME; 2085912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown static const nsecs_t ARBITRARY_EVENT_TIME; 2095912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown static const float X_OFFSET; 2105912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown static const float Y_OFFSET; 2115912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 2125912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown void initializeEventWithHistory(MotionEvent* event); 2135912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown void assertEqualsEventWithHistory(const MotionEvent* event); 2145912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown}; 2155912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 2165912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brownconst nsecs_t MotionEventTest::ARBITRARY_DOWN_TIME = 1; 2175912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brownconst nsecs_t MotionEventTest::ARBITRARY_EVENT_TIME = 2; 2185912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brownconst float MotionEventTest::X_OFFSET = 1.0f; 2195912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brownconst float MotionEventTest::Y_OFFSET = 1.1f; 2205912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 2215912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brownvoid MotionEventTest::initializeEventWithHistory(MotionEvent* event) { 2225912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown PointerProperties pointerProperties[2]; 2235912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown pointerProperties[0].clear(); 2245912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown pointerProperties[0].id = 1; 2255912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown pointerProperties[0].toolType = AMOTION_EVENT_TOOL_TYPE_FINGER; 2265912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown pointerProperties[1].clear(); 2275912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown pointerProperties[1].id = 2; 2285912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown pointerProperties[1].toolType = AMOTION_EVENT_TOOL_TYPE_STYLUS; 2295912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 2305912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown PointerCoords pointerCoords[2]; 2315912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown pointerCoords[0].clear(); 2325912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown pointerCoords[0].setAxisValue(AMOTION_EVENT_AXIS_X, 10); 2335912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown pointerCoords[0].setAxisValue(AMOTION_EVENT_AXIS_Y, 11); 2345912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown pointerCoords[0].setAxisValue(AMOTION_EVENT_AXIS_PRESSURE, 12); 2355912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown pointerCoords[0].setAxisValue(AMOTION_EVENT_AXIS_SIZE, 13); 2365912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown pointerCoords[0].setAxisValue(AMOTION_EVENT_AXIS_TOUCH_MAJOR, 14); 2375912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown pointerCoords[0].setAxisValue(AMOTION_EVENT_AXIS_TOUCH_MINOR, 15); 2385912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown pointerCoords[0].setAxisValue(AMOTION_EVENT_AXIS_TOOL_MAJOR, 16); 2395912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown pointerCoords[0].setAxisValue(AMOTION_EVENT_AXIS_TOOL_MINOR, 17); 2405912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown pointerCoords[0].setAxisValue(AMOTION_EVENT_AXIS_ORIENTATION, 18); 2415912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown pointerCoords[1].clear(); 2425912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown pointerCoords[1].setAxisValue(AMOTION_EVENT_AXIS_X, 20); 2435912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown pointerCoords[1].setAxisValue(AMOTION_EVENT_AXIS_Y, 21); 2445912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown pointerCoords[1].setAxisValue(AMOTION_EVENT_AXIS_PRESSURE, 22); 2455912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown pointerCoords[1].setAxisValue(AMOTION_EVENT_AXIS_SIZE, 23); 2465912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown pointerCoords[1].setAxisValue(AMOTION_EVENT_AXIS_TOUCH_MAJOR, 24); 2475912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown pointerCoords[1].setAxisValue(AMOTION_EVENT_AXIS_TOUCH_MINOR, 25); 2485912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown pointerCoords[1].setAxisValue(AMOTION_EVENT_AXIS_TOOL_MAJOR, 26); 2495912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown pointerCoords[1].setAxisValue(AMOTION_EVENT_AXIS_TOOL_MINOR, 27); 2505912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown pointerCoords[1].setAxisValue(AMOTION_EVENT_AXIS_ORIENTATION, 28); 2515912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown event->initialize(2, AINPUT_SOURCE_TOUCHSCREEN, AMOTION_EVENT_ACTION_MOVE, 2525912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown AMOTION_EVENT_FLAG_WINDOW_IS_OBSCURED, 2535912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown AMOTION_EVENT_EDGE_FLAG_TOP, AMETA_ALT_ON, AMOTION_EVENT_BUTTON_PRIMARY, 2545912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown X_OFFSET, Y_OFFSET, 2.0f, 2.1f, 2555912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ARBITRARY_DOWN_TIME, ARBITRARY_EVENT_TIME, 2565912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 2, pointerProperties, pointerCoords); 2575912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 2585912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown pointerCoords[0].setAxisValue(AMOTION_EVENT_AXIS_X, 110); 2595912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown pointerCoords[0].setAxisValue(AMOTION_EVENT_AXIS_Y, 111); 2605912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown pointerCoords[0].setAxisValue(AMOTION_EVENT_AXIS_PRESSURE, 112); 2615912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown pointerCoords[0].setAxisValue(AMOTION_EVENT_AXIS_SIZE, 113); 2625912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown pointerCoords[0].setAxisValue(AMOTION_EVENT_AXIS_TOUCH_MAJOR, 114); 2635912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown pointerCoords[0].setAxisValue(AMOTION_EVENT_AXIS_TOUCH_MINOR, 115); 2645912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown pointerCoords[0].setAxisValue(AMOTION_EVENT_AXIS_TOOL_MAJOR, 116); 2655912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown pointerCoords[0].setAxisValue(AMOTION_EVENT_AXIS_TOOL_MINOR, 117); 2665912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown pointerCoords[0].setAxisValue(AMOTION_EVENT_AXIS_ORIENTATION, 118); 2675912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown pointerCoords[1].setAxisValue(AMOTION_EVENT_AXIS_X, 120); 2685912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown pointerCoords[1].setAxisValue(AMOTION_EVENT_AXIS_Y, 121); 2695912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown pointerCoords[1].setAxisValue(AMOTION_EVENT_AXIS_PRESSURE, 122); 2705912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown pointerCoords[1].setAxisValue(AMOTION_EVENT_AXIS_SIZE, 123); 2715912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown pointerCoords[1].setAxisValue(AMOTION_EVENT_AXIS_TOUCH_MAJOR, 124); 2725912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown pointerCoords[1].setAxisValue(AMOTION_EVENT_AXIS_TOUCH_MINOR, 125); 2735912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown pointerCoords[1].setAxisValue(AMOTION_EVENT_AXIS_TOOL_MAJOR, 126); 2745912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown pointerCoords[1].setAxisValue(AMOTION_EVENT_AXIS_TOOL_MINOR, 127); 2755912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown pointerCoords[1].setAxisValue(AMOTION_EVENT_AXIS_ORIENTATION, 128); 2765912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown event->addSample(ARBITRARY_EVENT_TIME + 1, pointerCoords); 2775912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 2785912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown pointerCoords[0].setAxisValue(AMOTION_EVENT_AXIS_X, 210); 2795912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown pointerCoords[0].setAxisValue(AMOTION_EVENT_AXIS_Y, 211); 2805912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown pointerCoords[0].setAxisValue(AMOTION_EVENT_AXIS_PRESSURE, 212); 2815912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown pointerCoords[0].setAxisValue(AMOTION_EVENT_AXIS_SIZE, 213); 2825912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown pointerCoords[0].setAxisValue(AMOTION_EVENT_AXIS_TOUCH_MAJOR, 214); 2835912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown pointerCoords[0].setAxisValue(AMOTION_EVENT_AXIS_TOUCH_MINOR, 215); 2845912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown pointerCoords[0].setAxisValue(AMOTION_EVENT_AXIS_TOOL_MAJOR, 216); 2855912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown pointerCoords[0].setAxisValue(AMOTION_EVENT_AXIS_TOOL_MINOR, 217); 2865912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown pointerCoords[0].setAxisValue(AMOTION_EVENT_AXIS_ORIENTATION, 218); 2875912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown pointerCoords[1].setAxisValue(AMOTION_EVENT_AXIS_X, 220); 2885912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown pointerCoords[1].setAxisValue(AMOTION_EVENT_AXIS_Y, 221); 2895912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown pointerCoords[1].setAxisValue(AMOTION_EVENT_AXIS_PRESSURE, 222); 2905912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown pointerCoords[1].setAxisValue(AMOTION_EVENT_AXIS_SIZE, 223); 2915912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown pointerCoords[1].setAxisValue(AMOTION_EVENT_AXIS_TOUCH_MAJOR, 224); 2925912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown pointerCoords[1].setAxisValue(AMOTION_EVENT_AXIS_TOUCH_MINOR, 225); 2935912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown pointerCoords[1].setAxisValue(AMOTION_EVENT_AXIS_TOOL_MAJOR, 226); 2945912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown pointerCoords[1].setAxisValue(AMOTION_EVENT_AXIS_TOOL_MINOR, 227); 2955912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown pointerCoords[1].setAxisValue(AMOTION_EVENT_AXIS_ORIENTATION, 228); 2965912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown event->addSample(ARBITRARY_EVENT_TIME + 2, pointerCoords); 2975912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown} 2985912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 2995912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brownvoid MotionEventTest::assertEqualsEventWithHistory(const MotionEvent* event) { 3005912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown // Check properties. 3015912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(AINPUT_EVENT_TYPE_MOTION, event->getType()); 3025912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(2, event->getDeviceId()); 3035912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(AINPUT_SOURCE_TOUCHSCREEN, event->getSource()); 3045912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, event->getAction()); 3055912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(AMOTION_EVENT_FLAG_WINDOW_IS_OBSCURED, event->getFlags()); 3065912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(AMOTION_EVENT_EDGE_FLAG_TOP, event->getEdgeFlags()); 3075912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(AMETA_ALT_ON, event->getMetaState()); 3085912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(AMOTION_EVENT_BUTTON_PRIMARY, event->getButtonState()); 3095912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(X_OFFSET, event->getXOffset()); 3105912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(Y_OFFSET, event->getYOffset()); 3115912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(2.0f, event->getXPrecision()); 3125912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(2.1f, event->getYPrecision()); 3135912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(ARBITRARY_DOWN_TIME, event->getDownTime()); 3145912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 3155912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(2U, event->getPointerCount()); 3165912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(1, event->getPointerId(0)); 3175912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, event->getToolType(0)); 3185912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(2, event->getPointerId(1)); 3195912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_STYLUS, event->getToolType(1)); 3205912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 3215912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(2U, event->getHistorySize()); 3225912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 3235912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown // Check data. 3245912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(ARBITRARY_EVENT_TIME, event->getHistoricalEventTime(0)); 3255912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(ARBITRARY_EVENT_TIME + 1, event->getHistoricalEventTime(1)); 3265912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(ARBITRARY_EVENT_TIME + 2, event->getEventTime()); 3275912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 3285912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(11, event->getHistoricalRawPointerCoords(0, 0)-> 3295912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown getAxisValue(AMOTION_EVENT_AXIS_Y)); 3305912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(21, event->getHistoricalRawPointerCoords(1, 0)-> 3315912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown getAxisValue(AMOTION_EVENT_AXIS_Y)); 3325912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(111, event->getHistoricalRawPointerCoords(0, 1)-> 3335912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown getAxisValue(AMOTION_EVENT_AXIS_Y)); 3345912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(121, event->getHistoricalRawPointerCoords(1, 1)-> 3355912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown getAxisValue(AMOTION_EVENT_AXIS_Y)); 3365912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(211, event->getRawPointerCoords(0)-> 3375912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown getAxisValue(AMOTION_EVENT_AXIS_Y)); 3385912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(221, event->getRawPointerCoords(1)-> 3395912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown getAxisValue(AMOTION_EVENT_AXIS_Y)); 3405912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 3415912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(11, event->getHistoricalRawAxisValue(AMOTION_EVENT_AXIS_Y, 0, 0)); 3425912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(21, event->getHistoricalRawAxisValue(AMOTION_EVENT_AXIS_Y, 1, 0)); 3435912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(111, event->getHistoricalRawAxisValue(AMOTION_EVENT_AXIS_Y, 0, 1)); 3445912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(121, event->getHistoricalRawAxisValue(AMOTION_EVENT_AXIS_Y, 1, 1)); 3455912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(211, event->getRawAxisValue(AMOTION_EVENT_AXIS_Y, 0)); 3465912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(221, event->getRawAxisValue(AMOTION_EVENT_AXIS_Y, 1)); 3475912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 3485912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(10, event->getHistoricalRawX(0, 0)); 3495912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(20, event->getHistoricalRawX(1, 0)); 3505912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(110, event->getHistoricalRawX(0, 1)); 3515912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(120, event->getHistoricalRawX(1, 1)); 3525912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(210, event->getRawX(0)); 3535912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(220, event->getRawX(1)); 3545912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 3555912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(11, event->getHistoricalRawY(0, 0)); 3565912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(21, event->getHistoricalRawY(1, 0)); 3575912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(111, event->getHistoricalRawY(0, 1)); 3585912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(121, event->getHistoricalRawY(1, 1)); 3595912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(211, event->getRawY(0)); 3605912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(221, event->getRawY(1)); 3615912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 3625912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(X_OFFSET + 10, event->getHistoricalX(0, 0)); 3635912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(X_OFFSET + 20, event->getHistoricalX(1, 0)); 3645912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(X_OFFSET + 110, event->getHistoricalX(0, 1)); 3655912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(X_OFFSET + 120, event->getHistoricalX(1, 1)); 3665912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(X_OFFSET + 210, event->getX(0)); 3675912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(X_OFFSET + 220, event->getX(1)); 3685912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 3695912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(Y_OFFSET + 11, event->getHistoricalY(0, 0)); 3705912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(Y_OFFSET + 21, event->getHistoricalY(1, 0)); 3715912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(Y_OFFSET + 111, event->getHistoricalY(0, 1)); 3725912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(Y_OFFSET + 121, event->getHistoricalY(1, 1)); 3735912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(Y_OFFSET + 211, event->getY(0)); 3745912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(Y_OFFSET + 221, event->getY(1)); 3755912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 3765912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(12, event->getHistoricalPressure(0, 0)); 3775912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(22, event->getHistoricalPressure(1, 0)); 3785912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(112, event->getHistoricalPressure(0, 1)); 3795912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(122, event->getHistoricalPressure(1, 1)); 3805912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(212, event->getPressure(0)); 3815912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(222, event->getPressure(1)); 3825912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 3835912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(13, event->getHistoricalSize(0, 0)); 3845912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(23, event->getHistoricalSize(1, 0)); 3855912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(113, event->getHistoricalSize(0, 1)); 3865912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(123, event->getHistoricalSize(1, 1)); 3875912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(213, event->getSize(0)); 3885912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(223, event->getSize(1)); 3895912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 3905912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(14, event->getHistoricalTouchMajor(0, 0)); 3915912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(24, event->getHistoricalTouchMajor(1, 0)); 3925912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(114, event->getHistoricalTouchMajor(0, 1)); 3935912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(124, event->getHistoricalTouchMajor(1, 1)); 3945912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(214, event->getTouchMajor(0)); 3955912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(224, event->getTouchMajor(1)); 3965912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 3975912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(15, event->getHistoricalTouchMinor(0, 0)); 3985912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(25, event->getHistoricalTouchMinor(1, 0)); 3995912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(115, event->getHistoricalTouchMinor(0, 1)); 4005912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(125, event->getHistoricalTouchMinor(1, 1)); 4015912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(215, event->getTouchMinor(0)); 4025912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(225, event->getTouchMinor(1)); 4035912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 4045912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(16, event->getHistoricalToolMajor(0, 0)); 4055912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(26, event->getHistoricalToolMajor(1, 0)); 4065912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(116, event->getHistoricalToolMajor(0, 1)); 4075912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(126, event->getHistoricalToolMajor(1, 1)); 4085912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(216, event->getToolMajor(0)); 4095912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(226, event->getToolMajor(1)); 4105912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 4115912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(17, event->getHistoricalToolMinor(0, 0)); 4125912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(27, event->getHistoricalToolMinor(1, 0)); 4135912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(117, event->getHistoricalToolMinor(0, 1)); 4145912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(127, event->getHistoricalToolMinor(1, 1)); 4155912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(217, event->getToolMinor(0)); 4165912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(227, event->getToolMinor(1)); 4175912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 4185912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(18, event->getHistoricalOrientation(0, 0)); 4195912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(28, event->getHistoricalOrientation(1, 0)); 4205912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(118, event->getHistoricalOrientation(0, 1)); 4215912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(128, event->getHistoricalOrientation(1, 1)); 4225912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(218, event->getOrientation(0)); 4235912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(228, event->getOrientation(1)); 4245912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown} 4255912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 4265912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff BrownTEST_F(MotionEventTest, Properties) { 4275912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown MotionEvent event; 4285912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 4295912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown // Initialize, add samples and check properties. 4305912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown initializeEventWithHistory(&event); 4315912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_NO_FATAL_FAILURE(assertEqualsEventWithHistory(&event)); 4325912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 4335912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown // Set source. 4345912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown event.setSource(AINPUT_SOURCE_JOYSTICK); 4355912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(AINPUT_SOURCE_JOYSTICK, event.getSource()); 4365912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 4375912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown // Set action. 4385912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown event.setAction(AMOTION_EVENT_ACTION_CANCEL); 4395912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(AMOTION_EVENT_ACTION_CANCEL, event.getAction()); 4405912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 4415912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown // Set meta state. 4425912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown event.setMetaState(AMETA_CTRL_ON); 4435912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(AMETA_CTRL_ON, event.getMetaState()); 4445912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown} 4455912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 4465912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff BrownTEST_F(MotionEventTest, CopyFrom_KeepHistory) { 4475912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown MotionEvent event; 4485912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown initializeEventWithHistory(&event); 4495912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 4505912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown MotionEvent copy; 4515912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown copy.copyFrom(&event, true /*keepHistory*/); 4525912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 4535912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_NO_FATAL_FAILURE(assertEqualsEventWithHistory(&event)); 4545912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown} 4555912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 4565912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff BrownTEST_F(MotionEventTest, CopyFrom_DoNotKeepHistory) { 4575912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown MotionEvent event; 4585912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown initializeEventWithHistory(&event); 4595912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 4605912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown MotionEvent copy; 4615912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown copy.copyFrom(&event, false /*keepHistory*/); 4625912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 4635912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(event.getPointerCount(), copy.getPointerCount()); 4645912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(0U, copy.getHistorySize()); 4655912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 4665912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(event.getPointerId(0), copy.getPointerId(0)); 4675912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(event.getPointerId(1), copy.getPointerId(1)); 4685912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 4695912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(event.getEventTime(), copy.getEventTime()); 4705912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 4715912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(event.getX(0), copy.getX(0)); 4725912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown} 4735912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 4745912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff BrownTEST_F(MotionEventTest, OffsetLocation) { 4755912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown MotionEvent event; 4765912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown initializeEventWithHistory(&event); 4775912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 4785912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown event.offsetLocation(5.0f, -2.0f); 4795912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 4805912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(X_OFFSET + 5.0f, event.getXOffset()); 4815912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(Y_OFFSET - 2.0f, event.getYOffset()); 4825912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown} 4835912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 4845912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff BrownTEST_F(MotionEventTest, Scale) { 4855912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown MotionEvent event; 4865912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown initializeEventWithHistory(&event); 4875912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 4885912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown event.scale(2.0f); 4895912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 4905912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(X_OFFSET * 2, event.getXOffset()); 4915912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(Y_OFFSET * 2, event.getYOffset()); 4925912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 4935912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(210 * 2, event.getRawX(0)); 4945912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(211 * 2, event.getRawY(0)); 4955912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ((X_OFFSET + 210) * 2, event.getX(0)); 4965912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ((Y_OFFSET + 211) * 2, event.getY(0)); 4975912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(212, event.getPressure(0)); 4985912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(213, event.getSize(0)); 4995912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(214 * 2, event.getTouchMajor(0)); 5005912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(215 * 2, event.getTouchMinor(0)); 5015912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(216 * 2, event.getToolMajor(0)); 5025912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(217 * 2, event.getToolMinor(0)); 5035912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(218, event.getOrientation(0)); 5045912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown} 5055912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 5065912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff BrownTEST_F(MotionEventTest, Parcel) { 5075912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown Parcel parcel; 5085912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 5095912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown MotionEvent inEvent; 5105912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown initializeEventWithHistory(&inEvent); 5115912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown MotionEvent outEvent; 5125912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 5135912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown // Round trip. 5145912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown inEvent.writeToParcel(&parcel); 5155912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown parcel.setDataPosition(0); 5165912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown outEvent.readFromParcel(&parcel); 5175912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 5185912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_NO_FATAL_FAILURE(assertEqualsEventWithHistory(&outEvent)); 5195912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown} 5205912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 521313eff7bb7e5eedbdbea805343451fd473241266Jeff Brownstatic void setRotationMatrix(float matrix[9], float angle) { 522313eff7bb7e5eedbdbea805343451fd473241266Jeff Brown float sin = sinf(angle); 523313eff7bb7e5eedbdbea805343451fd473241266Jeff Brown float cos = cosf(angle); 524313eff7bb7e5eedbdbea805343451fd473241266Jeff Brown matrix[0] = cos; 525313eff7bb7e5eedbdbea805343451fd473241266Jeff Brown matrix[1] = -sin; 526313eff7bb7e5eedbdbea805343451fd473241266Jeff Brown matrix[2] = 0; 527313eff7bb7e5eedbdbea805343451fd473241266Jeff Brown matrix[3] = sin; 528313eff7bb7e5eedbdbea805343451fd473241266Jeff Brown matrix[4] = cos; 529313eff7bb7e5eedbdbea805343451fd473241266Jeff Brown matrix[5] = 0; 530313eff7bb7e5eedbdbea805343451fd473241266Jeff Brown matrix[6] = 0; 531313eff7bb7e5eedbdbea805343451fd473241266Jeff Brown matrix[7] = 0; 532313eff7bb7e5eedbdbea805343451fd473241266Jeff Brown matrix[8] = 1.0f; 533313eff7bb7e5eedbdbea805343451fd473241266Jeff Brown} 534313eff7bb7e5eedbdbea805343451fd473241266Jeff Brown 5355912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff BrownTEST_F(MotionEventTest, Transform) { 5365912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown // Generate some points on a circle. 5375912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown // Each point 'i' is a point on a circle of radius ROTATION centered at (3,2) at an angle 5385912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown // of ARC * i degrees clockwise relative to the Y axis. 5395912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown // The geometrical representation is irrelevant to the test, it's just easy to generate 5405912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown // and check rotation. We set the orientation to the same angle. 5415912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown // Coordinate system: down is increasing Y, right is increasing X. 5425912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown const float PI_180 = float(M_PI / 180); 5435912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown const float RADIUS = 10; 5445912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown const float ARC = 36; 5455912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown const float ROTATION = ARC * 2; 5465912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 5475912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown const size_t pointerCount = 11; 5485912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown PointerProperties pointerProperties[pointerCount]; 5495912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown PointerCoords pointerCoords[pointerCount]; 5505912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown for (size_t i = 0; i < pointerCount; i++) { 5515912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown float angle = float(i * ARC * PI_180); 5525912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown pointerProperties[i].clear(); 5535912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown pointerProperties[i].id = i; 5545912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown pointerCoords[i].clear(); 5555912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown pointerCoords[i].setAxisValue(AMOTION_EVENT_AXIS_X, sinf(angle) * RADIUS + 3); 5565912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown pointerCoords[i].setAxisValue(AMOTION_EVENT_AXIS_Y, -cosf(angle) * RADIUS + 2); 5575912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown pointerCoords[i].setAxisValue(AMOTION_EVENT_AXIS_ORIENTATION, angle); 5585912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown } 5595912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown MotionEvent event; 5605912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown event.initialize(0, 0, AMOTION_EVENT_ACTION_MOVE, 0, 0, 0, 0, 5615912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 0, 0, 0, 0, 0, 0, pointerCount, pointerProperties, pointerCoords); 5625912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown float originalRawX = 0 + 3; 5635912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown float originalRawY = -RADIUS + 2; 5645912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 5655912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown // Check original raw X and Y assumption. 5665912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_NEAR(originalRawX, event.getRawX(0), 0.001); 5675912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_NEAR(originalRawY, event.getRawY(0), 0.001); 5685912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 5695912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown // Now translate the motion event so the circle's origin is at (0,0). 5705912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown event.offsetLocation(-3, -2); 5715912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 5725912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown // Offsetting the location should preserve the raw X and Y of the first point. 5735912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_NEAR(originalRawX, event.getRawX(0), 0.001); 5745912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_NEAR(originalRawY, event.getRawY(0), 0.001); 5755912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 5765912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown // Apply a rotation about the origin by ROTATION degrees clockwise. 577313eff7bb7e5eedbdbea805343451fd473241266Jeff Brown float matrix[9]; 578313eff7bb7e5eedbdbea805343451fd473241266Jeff Brown setRotationMatrix(matrix, ROTATION * PI_180); 579313eff7bb7e5eedbdbea805343451fd473241266Jeff Brown event.transform(matrix); 5805912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 5815912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown // Check the points. 5825912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown for (size_t i = 0; i < pointerCount; i++) { 5835912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown float angle = float((i * ARC + ROTATION) * PI_180); 5845912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_NEAR(sinf(angle) * RADIUS, event.getX(i), 0.001); 5855912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_NEAR(-cosf(angle) * RADIUS, event.getY(i), 0.001); 5865912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_NEAR(tanf(angle), tanf(event.getOrientation(i)), 0.1); 5875912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown } 5885912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 5895912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown // Applying the transformation should preserve the raw X and Y of the first point. 5905912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_NEAR(originalRawX, event.getRawX(0), 0.001); 5915912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_NEAR(originalRawY, event.getRawY(0), 0.001); 5925912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown} 5935912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 5945912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown} // namespace android 595