| OLD | NEW | 
|---|
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be | 
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. | 
| 4 | 4 | 
| 5 #include <android/input.h> | 5 #include <android/input.h> | 
| 6 #include <stddef.h> | 6 #include <stddef.h> | 
|  | 7 #include <cmath> | 
| 7 | 8 | 
| 8 #include "base/android/jni_android.h" | 9 #include "base/android/jni_android.h" | 
| 9 #include "testing/gtest/include/gtest/gtest.h" | 10 #include "testing/gtest/include/gtest/gtest.h" | 
| 10 #include "ui/events/android/motion_event_android.h" | 11 #include "ui/events/android/motion_event_android.h" | 
| 11 #include "ui/events/event_constants.h" | 12 #include "ui/events/event_constants.h" | 
| 12 #include "ui/events/test/motion_event_test_utils.h" | 13 #include "ui/events/test/motion_event_test_utils.h" | 
| 13 | 14 | 
| 14 namespace ui { | 15 namespace ui { | 
| 15 class MotionEvent; | 16 class MotionEvent; | 
| 16 | 17 | 
| 17 namespace { | 18 namespace { | 
| 18 const float kPixToDip = 0.5f; | 19 const float kPixToDip = 0.5f; | 
| 19 | 20 | 
| 20 int kAndroidActionButton = 0; | 21 int kAndroidActionButton = 0; | 
| 21 int kAndroidActionDown = AMOTION_EVENT_ACTION_DOWN; | 22 int kAndroidActionDown = AMOTION_EVENT_ACTION_DOWN; | 
| 22 int kAndroidActionPointerDown = AMOTION_EVENT_ACTION_POINTER_DOWN; | 23 int kAndroidActionPointerDown = AMOTION_EVENT_ACTION_POINTER_DOWN; | 
| 23 int kAndroidAltKeyDown = AMETA_ALT_ON; | 24 int kAndroidAltKeyDown = AMETA_ALT_ON; | 
| 24 | 25 | 
| 25 // Corresponds to TOOL_TYPE_FINGER, see | 26 // Corresponds to TOOL_TYPE_FINGER, see | 
| 26 // developer.android.com/reference/android/view/MotionEvent.html | 27 // developer.android.com/reference/android/view/MotionEvent.html | 
| 27 //     #TOOL_TYPE_FINGER. | 28 //     #TOOL_TYPE_FINGER. | 
| 28 int kAndroidToolTypeFinger = 1; | 29 int kAndroidToolTypeFinger = 1; | 
| 29 | 30 | 
| 30 // Corresponds to BUTTON_PRIMARY, see | 31 // Corresponds to BUTTON_PRIMARY, see | 
| 31 // developer.android.com/reference/android/view/MotionEvent.html#BUTTON_PRIMARY. | 32 // developer.android.com/reference/android/view/MotionEvent.html#BUTTON_PRIMARY. | 
| 32 int kAndroidButtonPrimary = 1; | 33 int kAndroidButtonPrimary = 1; | 
| 33 | 34 | 
|  | 35 // This function convert tilt_x and tilt_y back to tilt_rad. | 
|  | 36 float ConvertToTiltRad(float tilt_x, float tilt_y) { | 
|  | 37   float tilt_x_r = sin(tilt_x * M_PI / 180.f); | 
|  | 38   float tilt_x_z = cos(tilt_x * M_PI / 180.f); | 
|  | 39   float tilt_y_r = sin(tilt_y * M_PI / 180.f); | 
|  | 40   float tilt_y_z = cos(tilt_y * M_PI / 180.f); | 
|  | 41   float r_x = tilt_x_r * tilt_y_z; | 
|  | 42   float r_y = tilt_y_r * tilt_x_z; | 
|  | 43   float r = sqrt(r_x * r_x + r_y * r_y); | 
|  | 44   float z = tilt_x_z * tilt_y_z; | 
|  | 45   return atan2(r, z); | 
|  | 46 } | 
| 34 }  // namespace | 47 }  // namespace | 
| 35 | 48 | 
|  | 49 constexpr float float_error = 0.0001f; | 
| 36 // Note that these tests avoid creating a Java instance of the MotionEvent, as | 50 // Note that these tests avoid creating a Java instance of the MotionEvent, as | 
| 37 // we're primarily testing caching behavior, and the code necessary to | 51 // we're primarily testing caching behavior, and the code necessary to | 
| 38 // construct a Java-backed MotionEvent itself adds unnecessary complexity. | 52 // construct a Java-backed MotionEvent itself adds unnecessary complexity. | 
| 39 TEST(MotionEventAndroidTest, Constructor) { | 53 TEST(MotionEventAndroidTest, Constructor) { | 
| 40   int event_time_ms = 5; | 54   int event_time_ms = 5; | 
| 41   base::TimeTicks event_time = | 55   base::TimeTicks event_time = | 
| 42       base::TimeTicks() + base::TimeDelta::FromMilliseconds(event_time_ms); | 56       base::TimeTicks() + base::TimeDelta::FromMilliseconds(event_time_ms); | 
| 43   MotionEventAndroid::Pointer p0( | 57   MotionEventAndroid::Pointer p0( | 
| 44       1, 13.7f, -7.13f, 5.3f, 1.2f, 0.1f, 0.2f, kAndroidToolTypeFinger); | 58       1, 13.7f, -7.13f, 5.3f, 1.2f, 0.1f, 0.2f, kAndroidToolTypeFinger); | 
| 45   MotionEventAndroid::Pointer p1( | 59   MotionEventAndroid::Pointer p1(2, -13.7f, 7.13f, 3.5f, 12.1f, -0.1f, 0.4f, | 
| 46       2, -13.7f, 7.13f, 3.5f, 12.1f, -0.1f, -0.4f, kAndroidToolTypeFinger); | 60                                  kAndroidToolTypeFinger); | 
| 47   float raw_offset = -3.f; | 61   float raw_offset = -3.f; | 
| 48   int pointer_count = 2; | 62   int pointer_count = 2; | 
| 49   int history_size = 0; | 63   int history_size = 0; | 
| 50   int action_index = -1; | 64   int action_index = -1; | 
| 51   MotionEventAndroid event( | 65   MotionEventAndroid event( | 
| 52       base::android::AttachCurrentThread(), nullptr, kPixToDip, 0.f, 0.f, 0.f, | 66       base::android::AttachCurrentThread(), nullptr, kPixToDip, 0.f, 0.f, 0.f, | 
| 53       event_time_ms, kAndroidActionDown, pointer_count, history_size, | 67       event_time_ms, kAndroidActionDown, pointer_count, history_size, | 
| 54       action_index, kAndroidActionButton, kAndroidButtonPrimary, | 68       action_index, kAndroidActionButton, kAndroidButtonPrimary, | 
| 55       kAndroidAltKeyDown, raw_offset, -raw_offset, &p0, &p1); | 69       kAndroidAltKeyDown, raw_offset, -raw_offset, &p0, &p1); | 
| 56 | 70 | 
| 57   EXPECT_EQ(MotionEvent::ACTION_DOWN, event.GetAction()); | 71   EXPECT_EQ(MotionEvent::ACTION_DOWN, event.GetAction()); | 
| 58   EXPECT_EQ(event_time, event.GetEventTime()); | 72   EXPECT_EQ(event_time, event.GetEventTime()); | 
| 59   EXPECT_EQ(p0.pos_x_pixels * kPixToDip, event.GetX(0)); | 73   EXPECT_EQ(p0.pos_x_pixels * kPixToDip, event.GetX(0)); | 
| 60   EXPECT_EQ(p0.pos_y_pixels * kPixToDip, event.GetY(0)); | 74   EXPECT_EQ(p0.pos_y_pixels * kPixToDip, event.GetY(0)); | 
| 61   EXPECT_EQ(p1.pos_x_pixels * kPixToDip, event.GetX(1)); | 75   EXPECT_EQ(p1.pos_x_pixels * kPixToDip, event.GetX(1)); | 
| 62   EXPECT_EQ(p1.pos_y_pixels * kPixToDip, event.GetY(1)); | 76   EXPECT_EQ(p1.pos_y_pixels * kPixToDip, event.GetY(1)); | 
| 63   EXPECT_FLOAT_EQ((p0.pos_x_pixels + raw_offset) * kPixToDip, event.GetRawX(0)); | 77   EXPECT_FLOAT_EQ((p0.pos_x_pixels + raw_offset) * kPixToDip, event.GetRawX(0)); | 
| 64   EXPECT_FLOAT_EQ((p0.pos_y_pixels - raw_offset) * kPixToDip, event.GetRawY(0)); | 78   EXPECT_FLOAT_EQ((p0.pos_y_pixels - raw_offset) * kPixToDip, event.GetRawY(0)); | 
| 65   EXPECT_FLOAT_EQ((p1.pos_x_pixels + raw_offset) * kPixToDip, event.GetRawX(1)); | 79   EXPECT_FLOAT_EQ((p1.pos_x_pixels + raw_offset) * kPixToDip, event.GetRawX(1)); | 
| 66   EXPECT_FLOAT_EQ((p1.pos_y_pixels - raw_offset) * kPixToDip, event.GetRawY(1)); | 80   EXPECT_FLOAT_EQ((p1.pos_y_pixels - raw_offset) * kPixToDip, event.GetRawY(1)); | 
| 67   EXPECT_EQ(p0.touch_major_pixels * kPixToDip, event.GetTouchMajor(0)); | 81   EXPECT_EQ(p0.touch_major_pixels * kPixToDip, event.GetTouchMajor(0)); | 
| 68   EXPECT_EQ(p1.touch_major_pixels * kPixToDip, event.GetTouchMajor(1)); | 82   EXPECT_EQ(p1.touch_major_pixels * kPixToDip, event.GetTouchMajor(1)); | 
| 69   EXPECT_EQ(p0.touch_minor_pixels * kPixToDip, event.GetTouchMinor(0)); | 83   EXPECT_EQ(p0.touch_minor_pixels * kPixToDip, event.GetTouchMinor(0)); | 
| 70   EXPECT_EQ(p1.touch_minor_pixels * kPixToDip, event.GetTouchMinor(1)); | 84   EXPECT_EQ(p1.touch_minor_pixels * kPixToDip, event.GetTouchMinor(1)); | 
| 71   EXPECT_EQ(p0.orientation_rad, event.GetOrientation(0)); | 85   EXPECT_EQ(p0.orientation_rad, event.GetOrientation(0)); | 
| 72   EXPECT_EQ(p1.orientation_rad, event.GetOrientation(1)); | 86   EXPECT_EQ(p1.orientation_rad, event.GetOrientation(1)); | 
| 73   EXPECT_EQ(p0.tilt_rad, event.GetTilt(0)); | 87   EXPECT_NEAR(p0.tilt_rad, | 
| 74   EXPECT_EQ(p1.tilt_rad, event.GetTilt(1)); | 88               ConvertToTiltRad(event.GetTiltX(0), event.GetTiltY(0)), | 
|  | 89               float_error); | 
|  | 90   EXPECT_NEAR(p1.tilt_rad, | 
|  | 91               ConvertToTiltRad(event.GetTiltX(1), event.GetTiltY(1)), | 
|  | 92               float_error); | 
| 75   EXPECT_EQ(p0.id, event.GetPointerId(0)); | 93   EXPECT_EQ(p0.id, event.GetPointerId(0)); | 
| 76   EXPECT_EQ(p1.id, event.GetPointerId(1)); | 94   EXPECT_EQ(p1.id, event.GetPointerId(1)); | 
| 77   EXPECT_EQ(MotionEvent::TOOL_TYPE_FINGER, event.GetToolType(0)); | 95   EXPECT_EQ(MotionEvent::TOOL_TYPE_FINGER, event.GetToolType(0)); | 
| 78   EXPECT_EQ(MotionEvent::TOOL_TYPE_FINGER, event.GetToolType(1)); | 96   EXPECT_EQ(MotionEvent::TOOL_TYPE_FINGER, event.GetToolType(1)); | 
| 79   EXPECT_EQ(MotionEvent::BUTTON_PRIMARY, event.GetButtonState()); | 97   EXPECT_EQ(MotionEvent::BUTTON_PRIMARY, event.GetButtonState()); | 
| 80   EXPECT_EQ(ui::EF_ALT_DOWN | ui::EF_LEFT_MOUSE_BUTTON, event.GetFlags()); | 98   EXPECT_EQ(ui::EF_ALT_DOWN | ui::EF_LEFT_MOUSE_BUTTON, event.GetFlags()); | 
| 81   EXPECT_EQ(static_cast<size_t>(pointer_count), event.GetPointerCount()); | 99   EXPECT_EQ(static_cast<size_t>(pointer_count), event.GetPointerCount()); | 
| 82   EXPECT_EQ(static_cast<size_t>(history_size), event.GetHistorySize()); | 100   EXPECT_EQ(static_cast<size_t>(history_size), event.GetHistorySize()); | 
| 83 } | 101 } | 
| 84 | 102 | 
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 153   MotionEventAndroid event(base::android::AttachCurrentThread(), nullptr, | 171   MotionEventAndroid event(base::android::AttachCurrentThread(), nullptr, | 
| 154                            kPixToDip, 0, 0, 0, 0, kAndroidActionPointerDown, | 172                            kPixToDip, 0, 0, 0, 0, kAndroidActionPointerDown, | 
| 155                            pointer_count, history_size, action_index, 0, 0, 0, | 173                            pointer_count, history_size, action_index, 0, 0, 0, | 
| 156                            0, 0, &p0, &p1); | 174                            0, 0, &p0, &p1); | 
| 157 | 175 | 
| 158   EXPECT_EQ(MotionEvent::ACTION_POINTER_DOWN, event.GetAction()); | 176   EXPECT_EQ(MotionEvent::ACTION_POINTER_DOWN, event.GetAction()); | 
| 159   EXPECT_EQ(action_index, event.GetActionIndex()); | 177   EXPECT_EQ(action_index, event.GetActionIndex()); | 
| 160 } | 178 } | 
| 161 | 179 | 
| 162 }  // namespace content | 180 }  // namespace content | 
| OLD | NEW | 
|---|