| 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 |