diff options
author | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2023-12-13 00:20:18 +0000 |
---|---|---|
committer | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2023-12-13 00:20:18 +0000 |
commit | 0687ad03d7c9dd39d7d6cbd4daa30ee388b5254b (patch) | |
tree | a7b8f7e34aaa6ab39aadf18e0cfcc7fb6befb61d | |
parent | 87fd51e3fc841ce1aa01ee32d14865d3ca874c15 (diff) | |
parent | e6d4cbc4188e16adb9042ce0983990f0e32a3d9e (diff) | |
download | native-0687ad03d7c9dd39d7d6cbd4daa30ee388b5254b.tar.gz |
Snap for 11211173 from e6d4cbc4188e16adb9042ce0983990f0e32a3d9e to 24Q1-release
Change-Id: I17fa6c458bc47c7624cab6fe2a09be7153b95759
-rw-r--r-- | libs/binder/Android.bp | 99 | ||||
-rw-r--r-- | libs/binder/OS_non_android_linux.cpp | 57 | ||||
-rw-r--r-- | libs/binder/trusty/OS.cpp | 5 | ||||
-rw-r--r-- | services/batteryservice/include/batteryservice/BatteryService.h | 1 | ||||
-rw-r--r-- | services/inputflinger/PointerChoreographer.cpp | 22 | ||||
-rw-r--r-- | services/inputflinger/PointerChoreographer.h | 1 | ||||
-rw-r--r-- | services/inputflinger/tests/FakePointerController.h | 2 | ||||
-rw-r--r-- | services/inputflinger/tests/PointerChoreographer_test.cpp | 424 |
8 files changed, 253 insertions, 358 deletions
diff --git a/libs/binder/Android.bp b/libs/binder/Android.bp index f1cc5f05ec..bf3699ccab 100644 --- a/libs/binder/Android.bp +++ b/libs/binder/Android.bp @@ -22,23 +22,51 @@ package { } cc_library_headers { - name: "libbinder_headers", + name: "libbinder_headers_base", export_include_dirs: ["include"], vendor_available: true, recovery_available: true, host_supported: true, - // TODO(b/153609531): remove when no longer needed. native_bridge_supported: true, header_libs: [ - "libbase_headers", "libbinder_headers_platform_shared", + ], + export_header_lib_headers: [ + "libbinder_headers_platform_shared", + ], + apex_available: [ + "//apex_available:platform", + "com.android.media", + "com.android.media.swcodec", + ], + min_sdk_version: "29", + target: { + darwin: { + enabled: false, + }, + }, + visibility: [ + ":__subpackages__", + ], +} + +cc_library_headers { + name: "libbinder_headers", + vendor_available: true, + recovery_available: true, + host_supported: true, + native_bridge_supported: true, + + header_libs: [ + "libbase_headers", + "libbinder_headers_base", "libcutils_headers", "libutils_headers", ], export_header_lib_headers: [ "libbase_headers", - "libbinder_headers_platform_shared", + "libbinder_headers_base", "libcutils_headers", "libutils_headers", ], @@ -87,6 +115,7 @@ cc_defaults { "RpcSession.cpp", "RpcServer.cpp", "RpcState.cpp", + "RpcTransportRaw.cpp", "Stability.cpp", "Status.cpp", "TextOutput.cpp", @@ -94,17 +123,8 @@ cc_defaults { "file.cpp", ], - shared_libs: [ - "libcutils", - "libutils", - ], - - static_libs: [ - "libbase", - ], - header_libs: [ - "libbinder_headers", + "libbinder_headers_base", ], cflags: [ @@ -131,7 +151,6 @@ cc_defaults { srcs: [ "OS_android.cpp", "OS_unix_base.cpp", - "RpcTransportRaw.cpp", ], target: { @@ -156,11 +175,18 @@ cc_defaults { }, shared_libs: [ + "libcutils", "liblog", + "libutils", + ], + + static_libs: [ + "libbase", ], header_libs: [ "jni_headers", + "libbinder_headers", ], export_header_lib_headers: [ @@ -217,10 +243,15 @@ cc_defaults { host_supported: true, header_libs: [ + "libbinder_headers_base", "liblog_stub", "trusty_mock_headers", ], + shared_libs: [ + "libutils_binder_sdk", + ], + cflags: [ "-DBINDER_RPC_SINGLE_THREADED", "-DBINDER_ENABLE_LIBLOG_ASSERT", @@ -351,6 +382,44 @@ cc_library { afdo: true, } +cc_library_host_shared { + name: "libbinder_sdk", + + defaults: [ + "libbinder_common_defaults", + ], + + shared_libs: [ + "libutils_binder_sdk", + ], + + cflags: [ + "-DBINDER_ENABLE_LIBLOG_ASSERT", + "-DBINDER_DISABLE_NATIVE_HANDLE", + "-DBINDER_DISABLE_BLOB", + "-DBINDER_NO_LIBBASE", + ], + + header_libs: [ + "liblog_stub", + ], + + srcs: [ + "OS_non_android_linux.cpp", + "OS_unix_base.cpp", + ], + + visibility: [ + ":__subpackages__", + ], + + target: { + windows: { + enabled: false, + }, + }, +} + cc_library_static { name: "libbinder_rpc_no_kernel", vendor_available: true, diff --git a/libs/binder/OS_non_android_linux.cpp b/libs/binder/OS_non_android_linux.cpp new file mode 100644 index 0000000000..b525d1ac34 --- /dev/null +++ b/libs/binder/OS_non_android_linux.cpp @@ -0,0 +1,57 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "OS.h" + +#include <log/log.h> + +#include <syscall.h> +#include <cstdarg> + +#ifdef __ANDROID__ +#error "This module is not intended for Android, just bare Linux" +#endif +#ifdef __APPLE__ +#error "This module is not intended for MacOS" +#endif +#ifdef _WIN32 +#error "This module is not intended for Windows" +#endif + +namespace android::binder::os { + +void trace_begin(uint64_t, const char*) {} + +void trace_end(uint64_t) {} + +uint64_t GetThreadId() { + return syscall(__NR_gettid); +} + +bool report_sysprop_change() { + return false; +} + +} // namespace android::binder::os + +int __android_log_print(int /*prio*/, const char* /*tag*/, const char* fmt, ...) { + va_list args; + va_start(args, fmt); + vfprintf(stderr, fmt, args); + va_end(args); + + return 1; +} diff --git a/libs/binder/trusty/OS.cpp b/libs/binder/trusty/OS.cpp index 9869bf3460..a8dabc3a1d 100644 --- a/libs/binder/trusty/OS.cpp +++ b/libs/binder/trusty/OS.cpp @@ -126,8 +126,3 @@ int __android_log_print(int prio [[maybe_unused]], const char* tag, const char* return 1; } - -// TODO(b/285204695): remove once trusty mock doesn't depend on libbase -extern "C" int __android_log_buf_print(int, int, const char*, const char*, ...) { - return -ENOSYS; -} diff --git a/services/batteryservice/include/batteryservice/BatteryService.h b/services/batteryservice/include/batteryservice/BatteryService.h index bf6189d7af..654c903db2 100644 --- a/services/batteryservice/include/batteryservice/BatteryService.h +++ b/services/batteryservice/include/batteryservice/BatteryService.h @@ -38,6 +38,7 @@ enum { BATTERY_PROP_MANUFACTURING_DATE = 8, // equals BATTERY_PROPERTY_MANUFACTURING_DATE BATTERY_PROP_FIRST_USAGE_DATE = 9, // equals BATTERY_PROPERTY_FIRST_USAGE_DATE BATTERY_PROP_STATE_OF_HEALTH = 10, // equals BATTERY_PROPERTY_STATE_OF_HEALTH + BATTERY_PROP_PART_STATUS = 12, // equals BATTERY_PROPERTY_PART_STATUS }; struct BatteryProperties { diff --git a/services/inputflinger/PointerChoreographer.cpp b/services/inputflinger/PointerChoreographer.cpp index 07a50411fb..0be4c327b7 100644 --- a/services/inputflinger/PointerChoreographer.cpp +++ b/services/inputflinger/PointerChoreographer.cpp @@ -327,14 +327,23 @@ void PointerChoreographer::updatePointerControllersLocked() { std::set<DeviceId> touchDevicesToKeep; std::set<DeviceId> stylusDevicesToKeep; - // Mark the displayIds or deviceIds of PointerControllers currently needed. + // Mark the displayIds or deviceIds of PointerControllers currently needed, and create + // new PointerControllers if necessary. for (const auto& info : mInputDeviceInfos) { const uint32_t sources = info.getSources(); if (isFromSource(sources, AINPUT_SOURCE_MOUSE) || isFromSource(sources, AINPUT_SOURCE_MOUSE_RELATIVE)) { - const int32_t resolvedDisplayId = - getTargetMouseDisplayLocked(info.getAssociatedDisplayId()); - mouseDisplaysToKeep.insert(resolvedDisplayId); + const int32_t displayId = getTargetMouseDisplayLocked(info.getAssociatedDisplayId()); + mouseDisplaysToKeep.insert(displayId); + // For mice, show the cursor immediately when the device is first connected or + // when it moves to a new display. + auto [mousePointerIt, isNewMousePointer] = + mMousePointersByDisplay.try_emplace(displayId, + getMouseControllerConstructor(displayId)); + auto [_, isNewMouseDevice] = mMouseDevices.emplace(info.getId()); + if (isNewMouseDevice || isNewMousePointer) { + mousePointerIt->second->unfade(PointerControllerInterface::Transition::IMMEDIATE); + } } if (isFromSource(sources, AINPUT_SOURCE_TOUCHSCREEN) && mShowTouchesEnabled && info.getAssociatedDisplayId() != ADISPLAY_ID_NONE) { @@ -356,6 +365,11 @@ void PointerChoreographer::updatePointerControllersLocked() { std::erase_if(mStylusPointersByDevice, [&stylusDevicesToKeep](const auto& pair) { return stylusDevicesToKeep.find(pair.first) == stylusDevicesToKeep.end(); }); + std::erase_if(mMouseDevices, [&](DeviceId id) REQUIRES(mLock) { + return std::find_if(mInputDeviceInfos.begin(), mInputDeviceInfos.end(), + [id](const auto& info) { return info.getId() == id; }) == + mInputDeviceInfos.end(); + }); // Notify the policy if there's a change on the pointer display ID. notifyPointerDisplayIdChangedLocked(); diff --git a/services/inputflinger/PointerChoreographer.h b/services/inputflinger/PointerChoreographer.h index 9b809a17ff..f46419ec2e 100644 --- a/services/inputflinger/PointerChoreographer.h +++ b/services/inputflinger/PointerChoreographer.h @@ -139,6 +139,7 @@ private: int32_t mDefaultMouseDisplayId GUARDED_BY(mLock); int32_t mNotifiedPointerDisplayId GUARDED_BY(mLock); std::vector<InputDeviceInfo> mInputDeviceInfos GUARDED_BY(mLock); + std::set<DeviceId> mMouseDevices GUARDED_BY(mLock); std::vector<DisplayViewport> mViewports GUARDED_BY(mLock); bool mShowTouchesEnabled GUARDED_BY(mLock); bool mStylusPointerIconEnabled GUARDED_BY(mLock); diff --git a/services/inputflinger/tests/FakePointerController.h b/services/inputflinger/tests/FakePointerController.h index 7668011378..800f8649fd 100644 --- a/services/inputflinger/tests/FakePointerController.h +++ b/services/inputflinger/tests/FakePointerController.h @@ -41,6 +41,7 @@ public: void setDisplayViewport(const DisplayViewport& viewport) override; void updatePointerIcon(PointerIconStyle iconId) override; void setCustomPointerIcon(const SpriteIcon& icon) override; + void fade(Transition) override; void assertViewportSet(int32_t displayId); void assertViewportNotSet(); @@ -56,7 +57,6 @@ private: std::string dump() override { return ""; } std::optional<FloatRect> getBounds() const override; void move(float deltaX, float deltaY) override; - void fade(Transition) override; void unfade(Transition) override; void setPresentation(Presentation) override {} void setSpots(const PointerCoords*, const uint32_t*, BitSet32 spotIdBits, diff --git a/services/inputflinger/tests/PointerChoreographer_test.cpp b/services/inputflinger/tests/PointerChoreographer_test.cpp index 2457f7c532..490cf2f55a 100644 --- a/services/inputflinger/tests/PointerChoreographer_test.cpp +++ b/services/inputflinger/tests/PointerChoreographer_test.cpp @@ -17,6 +17,7 @@ #include "../PointerChoreographer.h" #include <gtest/gtest.h> +#include <deque> #include <vector> #include "FakePointerController.h" @@ -88,14 +89,14 @@ protected: std::shared_ptr<FakePointerController> assertPointerControllerCreated( ControllerType expectedType) { - EXPECT_TRUE(mLastCreatedController) << "No PointerController was created"; - auto [type, controller] = std::move(*mLastCreatedController); + EXPECT_FALSE(mCreatedControllers.empty()) << "No PointerController was created"; + auto [type, controller] = std::move(mCreatedControllers.front()); EXPECT_EQ(expectedType, type); - mLastCreatedController.reset(); + mCreatedControllers.pop_front(); return controller; } - void assertPointerControllerNotCreated() { ASSERT_EQ(std::nullopt, mLastCreatedController); } + void assertPointerControllerNotCreated() { ASSERT_TRUE(mCreatedControllers.empty()); } void assertPointerControllerRemoved(const std::shared_ptr<FakePointerController>& pc) { // Ensure that the code under test is not holding onto this PointerController. @@ -110,6 +111,12 @@ protected: "to this PointerController"; } + void assertPointerControllerNotRemoved(const std::shared_ptr<FakePointerController>& pc) { + // See assertPointerControllerRemoved above. + ASSERT_GT(pc.use_count(), 1) << "Expected PointerChoreographer to hold at least one " + "reference to this PointerController"; + } + void assertPointerDisplayIdNotified(int32_t displayId) { ASSERT_EQ(displayId, mPointerDisplayIdNotified); mPointerDisplayIdNotified.reset(); @@ -118,17 +125,15 @@ protected: void assertPointerDisplayIdNotNotified() { ASSERT_EQ(std::nullopt, mPointerDisplayIdNotified); } private: - std::optional<std::pair<ControllerType, std::shared_ptr<FakePointerController>>> - mLastCreatedController; + std::deque<std::pair<ControllerType, std::shared_ptr<FakePointerController>>> + mCreatedControllers; std::optional<int32_t> mPointerDisplayIdNotified; std::shared_ptr<PointerControllerInterface> createPointerController( ControllerType type) override { - EXPECT_FALSE(mLastCreatedController.has_value()) - << "More than one PointerController created at a time"; std::shared_ptr<FakePointerController> pc = std::make_shared<FakePointerController>(); EXPECT_FALSE(pc->isPointerShown()); - mLastCreatedController = {type, pc}; + mCreatedControllers.emplace_back(type, pc); return pc; } @@ -184,33 +189,15 @@ TEST_F(PointerChoreographerTest, ForwardsArgsToInnerListener) { } } -TEST_F(PointerChoreographerTest, WhenMouseIsJustAddedDoesNotCreatePointerController) { +TEST_F(PointerChoreographerTest, WhenMouseIsAddedCreatesPointerController) { mChoreographer.notifyInputDevicesChanged( {/*id=*/0, {generateTestDeviceInfo(DEVICE_ID, AINPUT_SOURCE_MOUSE, ADISPLAY_ID_NONE)}}); - assertPointerControllerNotCreated(); -} - -TEST_F(PointerChoreographerTest, WhenMouseEventOccursCreatesPointerController) { - mChoreographer.notifyInputDevicesChanged( - {/*id=*/0, {generateTestDeviceInfo(DEVICE_ID, AINPUT_SOURCE_MOUSE, ADISPLAY_ID_NONE)}}); - mChoreographer.notifyMotion( - MotionArgsBuilder(AMOTION_EVENT_ACTION_HOVER_MOVE, AINPUT_SOURCE_MOUSE) - .pointer(MOUSE_POINTER) - .deviceId(DEVICE_ID) - .displayId(ADISPLAY_ID_NONE) - .build()); assertPointerControllerCreated(ControllerType::MOUSE); } TEST_F(PointerChoreographerTest, WhenMouseIsRemovedRemovesPointerController) { mChoreographer.notifyInputDevicesChanged( {/*id=*/0, {generateTestDeviceInfo(DEVICE_ID, AINPUT_SOURCE_MOUSE, ADISPLAY_ID_NONE)}}); - mChoreographer.notifyMotion( - MotionArgsBuilder(AMOTION_EVENT_ACTION_HOVER_MOVE, AINPUT_SOURCE_MOUSE) - .pointer(MOUSE_POINTER) - .deviceId(DEVICE_ID) - .displayId(ADISPLAY_ID_NONE) - .build()); auto pc = assertPointerControllerCreated(ControllerType::MOUSE); // Remove the mouse. @@ -226,34 +213,20 @@ TEST_F(PointerChoreographerTest, WhenKeyboardIsAddedDoesNotCreatePointerControll } TEST_F(PointerChoreographerTest, SetsViewportForAssociatedMouse) { - // Just adding a viewport or device should not create a PointerController. + // Just adding a viewport or device should create a PointerController. mChoreographer.setDisplayViewports(createViewports({DISPLAY_ID})); mChoreographer.notifyInputDevicesChanged( {/*id=*/0, {generateTestDeviceInfo(DEVICE_ID, AINPUT_SOURCE_MOUSE, DISPLAY_ID)}}); - assertPointerControllerNotCreated(); - // After the mouse emits event, PointerController will be created and viewport will be set. - mChoreographer.notifyMotion( - MotionArgsBuilder(AMOTION_EVENT_ACTION_HOVER_MOVE, AINPUT_SOURCE_MOUSE) - .pointer(MOUSE_POINTER) - .deviceId(DEVICE_ID) - .displayId(DISPLAY_ID) - .build()); auto pc = assertPointerControllerCreated(ControllerType::MOUSE); pc->assertViewportSet(DISPLAY_ID); + ASSERT_TRUE(pc->isPointerShown()); } TEST_F(PointerChoreographerTest, WhenViewportSetLaterSetsViewportForAssociatedMouse) { - // Without viewport information, PointerController will be created by a mouse event - // but viewport won't be set. + // Without viewport information, PointerController will be created but viewport won't be set. mChoreographer.notifyInputDevicesChanged( {/*id=*/0, {generateTestDeviceInfo(DEVICE_ID, AINPUT_SOURCE_MOUSE, DISPLAY_ID)}}); - mChoreographer.notifyMotion( - MotionArgsBuilder(AMOTION_EVENT_ACTION_HOVER_MOVE, AINPUT_SOURCE_MOUSE) - .pointer(MOUSE_POINTER) - .deviceId(DEVICE_ID) - .displayId(DISPLAY_ID) - .build()); auto pc = assertPointerControllerCreated(ControllerType::MOUSE); pc->assertViewportNotSet(); @@ -270,14 +243,9 @@ TEST_F(PointerChoreographerTest, SetsDefaultMouseViewportForPointerController) { // the PointerController. mChoreographer.notifyInputDevicesChanged( {/*id=*/0, {generateTestDeviceInfo(DEVICE_ID, AINPUT_SOURCE_MOUSE, ADISPLAY_ID_NONE)}}); - mChoreographer.notifyMotion( - MotionArgsBuilder(AMOTION_EVENT_ACTION_HOVER_MOVE, AINPUT_SOURCE_MOUSE) - .pointer(MOUSE_POINTER) - .deviceId(DEVICE_ID) - .displayId(ADISPLAY_ID_NONE) - .build()); auto pc = assertPointerControllerCreated(ControllerType::MOUSE); pc->assertViewportSet(DISPLAY_ID); + ASSERT_TRUE(pc->isPointerShown()); } TEST_F(PointerChoreographerTest, @@ -287,29 +255,18 @@ TEST_F(PointerChoreographerTest, mChoreographer.setDefaultMouseDisplayId(DISPLAY_ID); mChoreographer.notifyInputDevicesChanged( {/*id=*/0, {generateTestDeviceInfo(DEVICE_ID, AINPUT_SOURCE_MOUSE, ADISPLAY_ID_NONE)}}); - mChoreographer.notifyMotion( - MotionArgsBuilder(AMOTION_EVENT_ACTION_HOVER_MOVE, AINPUT_SOURCE_MOUSE) - .pointer(MOUSE_POINTER) - .deviceId(DEVICE_ID) - .displayId(ADISPLAY_ID_NONE) - .build()); auto firstDisplayPc = assertPointerControllerCreated(ControllerType::MOUSE); firstDisplayPc->assertViewportSet(DISPLAY_ID); + ASSERT_TRUE(firstDisplayPc->isPointerShown()); - // Change default mouse display. Existing PointerController should be removed. + // Change default mouse display. Existing PointerController should be removed and a new one + // should be created. mChoreographer.setDefaultMouseDisplayId(ANOTHER_DISPLAY_ID); assertPointerControllerRemoved(firstDisplayPc); - assertPointerControllerNotCreated(); - // New PointerController for the new default display will be created by the motion event. - mChoreographer.notifyMotion( - MotionArgsBuilder(AMOTION_EVENT_ACTION_HOVER_MOVE, AINPUT_SOURCE_MOUSE) - .pointer(MOUSE_POINTER) - .deviceId(DEVICE_ID) - .displayId(ADISPLAY_ID_NONE) - .build()); auto secondDisplayPc = assertPointerControllerCreated(ControllerType::MOUSE); secondDisplayPc->assertViewportSet(ANOTHER_DISPLAY_ID); + ASSERT_TRUE(secondDisplayPc->isPointerShown()); } TEST_F(PointerChoreographerTest, CallsNotifyPointerDisplayIdChanged) { @@ -317,12 +274,6 @@ TEST_F(PointerChoreographerTest, CallsNotifyPointerDisplayIdChanged) { mChoreographer.setDisplayViewports(createViewports({DISPLAY_ID})); mChoreographer.notifyInputDevicesChanged( {/*id=*/0, {generateTestDeviceInfo(DEVICE_ID, AINPUT_SOURCE_MOUSE, ADISPLAY_ID_NONE)}}); - mChoreographer.notifyMotion( - MotionArgsBuilder(AMOTION_EVENT_ACTION_HOVER_MOVE, AINPUT_SOURCE_MOUSE) - .pointer(MOUSE_POINTER) - .deviceId(DEVICE_ID) - .displayId(ADISPLAY_ID_NONE) - .build()); assertPointerControllerCreated(ControllerType::MOUSE); assertPointerDisplayIdNotified(DISPLAY_ID); @@ -332,12 +283,6 @@ TEST_F(PointerChoreographerTest, WhenViewportIsSetLaterCallsNotifyPointerDisplay mChoreographer.setDefaultMouseDisplayId(DISPLAY_ID); mChoreographer.notifyInputDevicesChanged( {/*id=*/0, {generateTestDeviceInfo(DEVICE_ID, AINPUT_SOURCE_MOUSE, ADISPLAY_ID_NONE)}}); - mChoreographer.notifyMotion( - MotionArgsBuilder(AMOTION_EVENT_ACTION_HOVER_MOVE, AINPUT_SOURCE_MOUSE) - .pointer(MOUSE_POINTER) - .deviceId(DEVICE_ID) - .displayId(ADISPLAY_ID_NONE) - .build()); assertPointerControllerCreated(ControllerType::MOUSE); assertPointerDisplayIdNotNotified(); @@ -350,12 +295,6 @@ TEST_F(PointerChoreographerTest, WhenMouseIsRemovedCallsNotifyPointerDisplayIdCh mChoreographer.setDisplayViewports(createViewports({DISPLAY_ID})); mChoreographer.notifyInputDevicesChanged( {/*id=*/0, {generateTestDeviceInfo(DEVICE_ID, AINPUT_SOURCE_MOUSE, ADISPLAY_ID_NONE)}}); - mChoreographer.notifyMotion( - MotionArgsBuilder(AMOTION_EVENT_ACTION_HOVER_MOVE, AINPUT_SOURCE_MOUSE) - .pointer(MOUSE_POINTER) - .deviceId(DEVICE_ID) - .displayId(ADISPLAY_ID_NONE) - .build()); auto pc = assertPointerControllerCreated(ControllerType::MOUSE); assertPointerDisplayIdNotified(DISPLAY_ID); @@ -372,28 +311,13 @@ TEST_F(PointerChoreographerTest, WhenDefaultMouseDisplayChangesCallsNotifyPointe mChoreographer.setDefaultMouseDisplayId(DISPLAY_ID); mChoreographer.notifyInputDevicesChanged( {/*id=*/0, {generateTestDeviceInfo(DEVICE_ID, AINPUT_SOURCE_MOUSE, ADISPLAY_ID_NONE)}}); - mChoreographer.notifyMotion( - MotionArgsBuilder(AMOTION_EVENT_ACTION_HOVER_MOVE, AINPUT_SOURCE_MOUSE) - .pointer(MOUSE_POINTER) - .deviceId(DEVICE_ID) - .displayId(ADISPLAY_ID_NONE) - .build()); auto firstDisplayPc = assertPointerControllerCreated(ControllerType::MOUSE); assertPointerDisplayIdNotified(DISPLAY_ID); - // Set another viewport as a default mouse display ID. ADISPLAY_ID_NONE will be notified - // before a mouse event. + // Set another viewport as a default mouse display ID. The mouse is moved to the other display. mChoreographer.setDefaultMouseDisplayId(ANOTHER_DISPLAY_ID); - assertPointerDisplayIdNotified(ADISPLAY_ID_NONE); assertPointerControllerRemoved(firstDisplayPc); - // After a mouse event, pointer display ID will be notified with new default mouse display. - mChoreographer.notifyMotion( - MotionArgsBuilder(AMOTION_EVENT_ACTION_HOVER_MOVE, AINPUT_SOURCE_MOUSE) - .pointer(MOUSE_POINTER) - .deviceId(DEVICE_ID) - .displayId(ADISPLAY_ID_NONE) - .build()); assertPointerControllerCreated(ControllerType::MOUSE); assertPointerDisplayIdNotified(ANOTHER_DISPLAY_ID); } @@ -403,13 +327,6 @@ TEST_F(PointerChoreographerTest, MouseMovesPointerAndReturnsNewArgs) { mChoreographer.setDefaultMouseDisplayId(DISPLAY_ID); mChoreographer.notifyInputDevicesChanged( {/*id=*/0, {generateTestDeviceInfo(DEVICE_ID, AINPUT_SOURCE_MOUSE, ADISPLAY_ID_NONE)}}); - mChoreographer.notifyMotion( - MotionArgsBuilder(AMOTION_EVENT_ACTION_HOVER_MOVE, AINPUT_SOURCE_MOUSE) - .pointer(MOUSE_POINTER) - .deviceId(DEVICE_ID) - .displayId(ADISPLAY_ID_NONE) - .build()); - mTestListener.assertNotifyMotionWasCalled(WithMotionAction(AMOTION_EVENT_ACTION_HOVER_MOVE)); auto pc = assertPointerControllerCreated(ControllerType::MOUSE); ASSERT_EQ(DISPLAY_ID, pc->getDisplayId()); @@ -428,7 +345,7 @@ TEST_F(PointerChoreographerTest, MouseMovesPointerAndReturnsNewArgs) { pc->assertPosition(110, 220); ASSERT_TRUE(pc->isPointerShown()); - // Check that x-y cooridnates, displayId and cursor position are correctly updated. + // Check that x-y coordinates, displayId and cursor position are correctly updated. mTestListener.assertNotifyMotionWasCalled( AllOf(WithCoords(110, 220), WithDisplayId(DISPLAY_ID), WithCursorPosition(110, 220))); } @@ -444,23 +361,8 @@ TEST_F(PointerChoreographerTest, {/*id=*/0, {generateTestDeviceInfo(DEVICE_ID, AINPUT_SOURCE_MOUSE, ADISPLAY_ID_NONE), generateTestDeviceInfo(SECOND_DEVICE_ID, AINPUT_SOURCE_MOUSE, ANOTHER_DISPLAY_ID)}}); - mChoreographer.notifyMotion( - MotionArgsBuilder(AMOTION_EVENT_ACTION_HOVER_MOVE, AINPUT_SOURCE_MOUSE) - .pointer(MOUSE_POINTER) - .deviceId(DEVICE_ID) - .displayId(ADISPLAY_ID_NONE) - .build()); - mTestListener.assertNotifyMotionWasCalled(WithMotionAction(AMOTION_EVENT_ACTION_HOVER_MOVE)); auto unassociatedMousePc = assertPointerControllerCreated(ControllerType::MOUSE); ASSERT_EQ(DISPLAY_ID, unassociatedMousePc->getDisplayId()); - - mChoreographer.notifyMotion( - MotionArgsBuilder(AMOTION_EVENT_ACTION_HOVER_MOVE, AINPUT_SOURCE_MOUSE) - .pointer(MOUSE_POINTER) - .deviceId(SECOND_DEVICE_ID) - .displayId(ANOTHER_DISPLAY_ID) - .build()); - mTestListener.assertNotifyMotionWasCalled(WithMotionAction(AMOTION_EVENT_ACTION_HOVER_MOVE)); auto associatedMousePc = assertPointerControllerCreated(ControllerType::MOUSE); ASSERT_EQ(ANOTHER_DISPLAY_ID, associatedMousePc->getDisplayId()); @@ -483,7 +385,7 @@ TEST_F(PointerChoreographerTest, ASSERT_EQ(ANOTHER_DISPLAY_ID, associatedMousePc->getDisplayId()); ASSERT_TRUE(associatedMousePc->isPointerShown()); - // Check that x-y cooridnates, displayId and cursor position are correctly updated. + // Check that x-y coordinates, displayId and cursor position are correctly updated. mTestListener.assertNotifyMotionWasCalled( AllOf(WithCoords(310, 420), WithDeviceId(SECOND_DEVICE_ID), WithDisplayId(ANOTHER_DISPLAY_ID), WithCursorPosition(310, 420))); @@ -494,13 +396,6 @@ TEST_F(PointerChoreographerTest, DoesNotMovePointerForMouseRelativeSource) { mChoreographer.setDefaultMouseDisplayId(DISPLAY_ID); mChoreographer.notifyInputDevicesChanged( {/*id=*/0, {generateTestDeviceInfo(DEVICE_ID, AINPUT_SOURCE_MOUSE, ADISPLAY_ID_NONE)}}); - mChoreographer.notifyMotion( - MotionArgsBuilder(AMOTION_EVENT_ACTION_HOVER_MOVE, AINPUT_SOURCE_MOUSE) - .pointer(MOUSE_POINTER) - .deviceId(DEVICE_ID) - .displayId(ADISPLAY_ID_NONE) - .build()); - mTestListener.assertNotifyMotionWasCalled(WithMotionAction(AMOTION_EVENT_ACTION_HOVER_MOVE)); auto pc = assertPointerControllerCreated(ControllerType::MOUSE); ASSERT_EQ(DISPLAY_ID, pc->getDisplayId()); @@ -531,7 +426,7 @@ TEST_F(PointerChoreographerTest, DoesNotMovePointerForMouseRelativeSource) { pc->assertPosition(100, 200); ASSERT_FALSE(pc->isPointerShown()); - // Check x-y cooridnates, displayId and cursor position are not changed. + // Check x-y coordinates, displayId and cursor position are not changed. mTestListener.assertNotifyMotionWasCalled( AllOf(WithCoords(10, 20), WithRelativeMotion(10, 20), WithDisplayId(ADISPLAY_ID_NONE), WithCursorPosition(AMOTION_EVENT_INVALID_CURSOR_POSITION, @@ -543,13 +438,6 @@ TEST_F(PointerChoreographerTest, WhenPointerCaptureEnabledHidesPointer) { mChoreographer.setDefaultMouseDisplayId(DISPLAY_ID); mChoreographer.notifyInputDevicesChanged( {/*id=*/0, {generateTestDeviceInfo(DEVICE_ID, AINPUT_SOURCE_MOUSE, ADISPLAY_ID_NONE)}}); - mChoreographer.notifyMotion( - MotionArgsBuilder(AMOTION_EVENT_ACTION_HOVER_MOVE, AINPUT_SOURCE_MOUSE) - .pointer(MOUSE_POINTER) - .deviceId(DEVICE_ID) - .displayId(ADISPLAY_ID_NONE) - .build()); - mTestListener.assertNotifyMotionWasCalled(WithMotionAction(AMOTION_EVENT_ACTION_HOVER_MOVE)); auto pc = assertPointerControllerCreated(ControllerType::MOUSE); ASSERT_EQ(DISPLAY_ID, pc->getDisplayId()); ASSERT_TRUE(pc->isPointerShown()); @@ -561,6 +449,65 @@ TEST_F(PointerChoreographerTest, WhenPointerCaptureEnabledHidesPointer) { ASSERT_FALSE(pc->isPointerShown()); } +TEST_F(PointerChoreographerTest, MultipleMiceConnectionAndRemoval) { + mChoreographer.setDisplayViewports(createViewports({DISPLAY_ID})); + mChoreographer.setDefaultMouseDisplayId(DISPLAY_ID); + + // A mouse is connected, and the pointer is shown. + mChoreographer.notifyInputDevicesChanged( + {/*id=*/0, {generateTestDeviceInfo(DEVICE_ID, AINPUT_SOURCE_MOUSE, ADISPLAY_ID_NONE)}}); + + auto pc = assertPointerControllerCreated(ControllerType::MOUSE); + ASSERT_TRUE(pc->isPointerShown()); + + pc->fade(PointerControllerInterface::Transition::IMMEDIATE); + + // Add a second mouse is added, the pointer is shown again. + mChoreographer.notifyInputDevicesChanged( + {/*id=*/0, + {generateTestDeviceInfo(DEVICE_ID, AINPUT_SOURCE_MOUSE, ADISPLAY_ID_NONE), + generateTestDeviceInfo(SECOND_DEVICE_ID, AINPUT_SOURCE_MOUSE, ADISPLAY_ID_NONE)}}); + ASSERT_TRUE(pc->isPointerShown()); + + // One of the mice is removed, and it does not cause the mouse pointer to fade, because + // we have one more mouse connected. + mChoreographer.notifyInputDevicesChanged( + {/*id=*/0, + {generateTestDeviceInfo(SECOND_DEVICE_ID, AINPUT_SOURCE_MOUSE, ADISPLAY_ID_NONE)}}); + assertPointerControllerNotRemoved(pc); + ASSERT_TRUE(pc->isPointerShown()); + + // The final mouse is removed. The pointer is removed. + mChoreographer.notifyInputDevicesChanged({/*id=*/0, {}}); + assertPointerControllerRemoved(pc); +} + +TEST_F(PointerChoreographerTest, UnrelatedChangeDoesNotUnfadePointer) { + mChoreographer.setDisplayViewports(createViewports({DISPLAY_ID})); + mChoreographer.setDefaultMouseDisplayId(DISPLAY_ID); + mChoreographer.notifyInputDevicesChanged( + {/*id=*/0, {generateTestDeviceInfo(DEVICE_ID, AINPUT_SOURCE_MOUSE, ADISPLAY_ID_NONE)}}); + + auto pc = assertPointerControllerCreated(ControllerType::MOUSE); + ASSERT_TRUE(pc->isPointerShown()); + + pc->fade(PointerControllerInterface::Transition::IMMEDIATE); + + // Adding a touchscreen device does not unfade the mouse pointer. + mChoreographer.notifyInputDevicesChanged( + {/*id=*/0, + {generateTestDeviceInfo(DEVICE_ID, AINPUT_SOURCE_MOUSE, ADISPLAY_ID_NONE), + generateTestDeviceInfo(DEVICE_ID, AINPUT_SOURCE_TOUCHSCREEN | AINPUT_SOURCE_STYLUS, + DISPLAY_ID)}}); + + ASSERT_FALSE(pc->isPointerShown()); + + // Show touches setting change does not unfade the mouse pointer. + mChoreographer.setShowTouchesEnabled(true); + + ASSERT_FALSE(pc->isPointerShown()); +} + TEST_F(PointerChoreographerTest, WhenShowTouchesEnabledAndDisabledDoesNotCreatePointerController) { // Disable show touches and add a touch device. mChoreographer.setShowTouchesEnabled(false); @@ -1038,25 +985,11 @@ TEST_F(PointerChoreographerTest, WhenStylusDeviceIsResetRemovesPointer) { assertPointerControllerRemoved(pc); } -TEST_F(PointerChoreographerTest, WhenTouchpadIsJustAddedDoesNotCreatePointerController) { +TEST_F(PointerChoreographerTest, WhenTouchpadIsAddedCreatesPointerController) { mChoreographer.notifyInputDevicesChanged( {/*id=*/0, {generateTestDeviceInfo(DEVICE_ID, AINPUT_SOURCE_MOUSE | AINPUT_SOURCE_TOUCHPAD, ADISPLAY_ID_NONE)}}); - assertPointerControllerNotCreated(); -} - -TEST_F(PointerChoreographerTest, WhenTouchpadEventOccursCreatesPointerController) { - mChoreographer.notifyInputDevicesChanged( - {/*id=*/0, - {generateTestDeviceInfo(DEVICE_ID, AINPUT_SOURCE_MOUSE | AINPUT_SOURCE_TOUCHPAD, - ADISPLAY_ID_NONE)}}); - mChoreographer.notifyMotion( - MotionArgsBuilder(AMOTION_EVENT_ACTION_HOVER_MOVE, AINPUT_SOURCE_MOUSE) - .pointer(TOUCHPAD_POINTER) - .deviceId(DEVICE_ID) - .displayId(ADISPLAY_ID_NONE) - .build()); assertPointerControllerCreated(ControllerType::MOUSE); } @@ -1065,12 +998,6 @@ TEST_F(PointerChoreographerTest, WhenTouchpadIsRemovedRemovesPointerController) {/*id=*/0, {generateTestDeviceInfo(DEVICE_ID, AINPUT_SOURCE_MOUSE | AINPUT_SOURCE_TOUCHPAD, ADISPLAY_ID_NONE)}}); - mChoreographer.notifyMotion( - MotionArgsBuilder(AMOTION_EVENT_ACTION_HOVER_MOVE, AINPUT_SOURCE_MOUSE) - .pointer(TOUCHPAD_POINTER) - .deviceId(DEVICE_ID) - .displayId(ADISPLAY_ID_NONE) - .build()); auto pc = assertPointerControllerCreated(ControllerType::MOUSE); // Remove the touchpad. @@ -1085,15 +1012,6 @@ TEST_F(PointerChoreographerTest, SetsViewportForAssociatedTouchpad) { {/*id=*/0, {generateTestDeviceInfo(DEVICE_ID, AINPUT_SOURCE_MOUSE | AINPUT_SOURCE_TOUCHPAD, DISPLAY_ID)}}); - assertPointerControllerNotCreated(); - - // After the touchpad emits event, PointerController will be created and viewport will be set. - mChoreographer.notifyMotion( - MotionArgsBuilder(AMOTION_EVENT_ACTION_HOVER_MOVE, AINPUT_SOURCE_MOUSE) - .pointer(TOUCHPAD_POINTER) - .deviceId(DEVICE_ID) - .displayId(DISPLAY_ID) - .build()); auto pc = assertPointerControllerCreated(ControllerType::MOUSE); pc->assertViewportSet(DISPLAY_ID); } @@ -1105,12 +1023,6 @@ TEST_F(PointerChoreographerTest, WhenViewportSetLaterSetsViewportForAssociatedTo {/*id=*/0, {generateTestDeviceInfo(DEVICE_ID, AINPUT_SOURCE_MOUSE | AINPUT_SOURCE_TOUCHPAD, DISPLAY_ID)}}); - mChoreographer.notifyMotion( - MotionArgsBuilder(AMOTION_EVENT_ACTION_HOVER_MOVE, AINPUT_SOURCE_MOUSE) - .pointer(TOUCHPAD_POINTER) - .deviceId(DEVICE_ID) - .displayId(DISPLAY_ID) - .build()); auto pc = assertPointerControllerCreated(ControllerType::MOUSE); pc->assertViewportNotSet(); @@ -1127,32 +1039,19 @@ TEST_F(PointerChoreographerTest, SetsDefaultTouchpadViewportForPointerController // the PointerController. mChoreographer.notifyInputDevicesChanged( {/*id=*/0, {generateTestDeviceInfo(DEVICE_ID, AINPUT_SOURCE_MOUSE, ADISPLAY_ID_NONE)}}); - mChoreographer.notifyMotion( - MotionArgsBuilder(AMOTION_EVENT_ACTION_HOVER_MOVE, AINPUT_SOURCE_MOUSE) - .pointer(TOUCHPAD_POINTER) - .deviceId(DEVICE_ID) - .displayId(ADISPLAY_ID_NONE) - .build()); auto pc = assertPointerControllerCreated(ControllerType::MOUSE); pc->assertViewportSet(DISPLAY_ID); } TEST_F(PointerChoreographerTest, WhenDefaultTouchpadDisplayChangesSetsDefaultTouchpadViewportForPointerController) { - // Set one display as a default touchpad display and emit touchpad event to create - // PointerController. + // Set one display as a default touchpad display and create PointerController. mChoreographer.setDisplayViewports(createViewports({DISPLAY_ID, ANOTHER_DISPLAY_ID})); mChoreographer.setDefaultMouseDisplayId(DISPLAY_ID); mChoreographer.notifyInputDevicesChanged( {/*id=*/0, {generateTestDeviceInfo(DEVICE_ID, AINPUT_SOURCE_MOUSE | AINPUT_SOURCE_TOUCHPAD, ADISPLAY_ID_NONE)}}); - mChoreographer.notifyMotion( - MotionArgsBuilder(AMOTION_EVENT_ACTION_HOVER_MOVE, AINPUT_SOURCE_MOUSE) - .pointer(TOUCHPAD_POINTER) - .deviceId(DEVICE_ID) - .displayId(ADISPLAY_ID_NONE) - .build()); auto firstDisplayPc = assertPointerControllerCreated(ControllerType::MOUSE); firstDisplayPc->assertViewportSet(DISPLAY_ID); @@ -1160,13 +1059,6 @@ TEST_F(PointerChoreographerTest, mChoreographer.setDefaultMouseDisplayId(ANOTHER_DISPLAY_ID); assertPointerControllerRemoved(firstDisplayPc); - // New PointerController for the new default display will be created by the motion event. - mChoreographer.notifyMotion( - MotionArgsBuilder(AMOTION_EVENT_ACTION_HOVER_MOVE, AINPUT_SOURCE_MOUSE) - .pointer(TOUCHPAD_POINTER) - .deviceId(DEVICE_ID) - .displayId(ADISPLAY_ID_NONE) - .build()); auto secondDisplayPc = assertPointerControllerCreated(ControllerType::MOUSE); secondDisplayPc->assertViewportSet(ANOTHER_DISPLAY_ID); } @@ -1178,12 +1070,6 @@ TEST_F(PointerChoreographerTest, TouchpadCallsNotifyPointerDisplayIdChanged) { {/*id=*/0, {generateTestDeviceInfo(DEVICE_ID, AINPUT_SOURCE_MOUSE | AINPUT_SOURCE_TOUCHPAD, ADISPLAY_ID_NONE)}}); - mChoreographer.notifyMotion( - MotionArgsBuilder(AMOTION_EVENT_ACTION_HOVER_MOVE, AINPUT_SOURCE_MOUSE) - .pointer(TOUCHPAD_POINTER) - .deviceId(DEVICE_ID) - .displayId(ADISPLAY_ID_NONE) - .build()); assertPointerControllerCreated(ControllerType::MOUSE); assertPointerDisplayIdNotified(DISPLAY_ID); @@ -1195,12 +1081,6 @@ TEST_F(PointerChoreographerTest, WhenViewportIsSetLaterTouchpadCallsNotifyPointe {/*id=*/0, {generateTestDeviceInfo(DEVICE_ID, AINPUT_SOURCE_MOUSE | AINPUT_SOURCE_TOUCHPAD, ADISPLAY_ID_NONE)}}); - mChoreographer.notifyMotion( - MotionArgsBuilder(AMOTION_EVENT_ACTION_HOVER_MOVE, AINPUT_SOURCE_MOUSE) - .pointer(TOUCHPAD_POINTER) - .deviceId(DEVICE_ID) - .displayId(ADISPLAY_ID_NONE) - .build()); assertPointerControllerCreated(ControllerType::MOUSE); assertPointerDisplayIdNotNotified(); @@ -1215,12 +1095,6 @@ TEST_F(PointerChoreographerTest, WhenTouchpadIsRemovedCallsNotifyPointerDisplayI {/*id=*/0, {generateTestDeviceInfo(DEVICE_ID, AINPUT_SOURCE_MOUSE | AINPUT_SOURCE_TOUCHPAD, ADISPLAY_ID_NONE)}}); - mChoreographer.notifyMotion( - MotionArgsBuilder(AMOTION_EVENT_ACTION_HOVER_MOVE, AINPUT_SOURCE_MOUSE) - .pointer(TOUCHPAD_POINTER) - .deviceId(DEVICE_ID) - .displayId(ADISPLAY_ID_NONE) - .build()); auto pc = assertPointerControllerCreated(ControllerType::MOUSE); assertPointerDisplayIdNotified(DISPLAY_ID); @@ -1240,28 +1114,14 @@ TEST_F(PointerChoreographerTest, {/*id=*/0, {generateTestDeviceInfo(DEVICE_ID, AINPUT_SOURCE_MOUSE | AINPUT_SOURCE_TOUCHPAD, ADISPLAY_ID_NONE)}}); - mChoreographer.notifyMotion( - MotionArgsBuilder(AMOTION_EVENT_ACTION_HOVER_MOVE, AINPUT_SOURCE_MOUSE) - .pointer(TOUCHPAD_POINTER) - .deviceId(DEVICE_ID) - .displayId(ADISPLAY_ID_NONE) - .build()); auto firstDisplayPc = assertPointerControllerCreated(ControllerType::MOUSE); assertPointerDisplayIdNotified(DISPLAY_ID); // Set another viewport as a default mouse display ID. ADISPLAY_ID_NONE will be notified // before a touchpad event. mChoreographer.setDefaultMouseDisplayId(ANOTHER_DISPLAY_ID); - assertPointerDisplayIdNotified(ADISPLAY_ID_NONE); assertPointerControllerRemoved(firstDisplayPc); - // After a touchpad event, pointer display ID will be notified with new default mouse display. - mChoreographer.notifyMotion( - MotionArgsBuilder(AMOTION_EVENT_ACTION_HOVER_MOVE, AINPUT_SOURCE_MOUSE) - .pointer(TOUCHPAD_POINTER) - .deviceId(DEVICE_ID) - .displayId(ADISPLAY_ID_NONE) - .build()); assertPointerControllerCreated(ControllerType::MOUSE); assertPointerDisplayIdNotified(ANOTHER_DISPLAY_ID); } @@ -1273,13 +1133,6 @@ TEST_F(PointerChoreographerTest, TouchpadMovesPointerAndReturnsNewArgs) { {/*id=*/0, {generateTestDeviceInfo(DEVICE_ID, AINPUT_SOURCE_MOUSE | AINPUT_SOURCE_TOUCHPAD, ADISPLAY_ID_NONE)}}); - mChoreographer.notifyMotion( - MotionArgsBuilder(AMOTION_EVENT_ACTION_HOVER_MOVE, AINPUT_SOURCE_MOUSE) - .pointer(TOUCHPAD_POINTER) - .deviceId(DEVICE_ID) - .displayId(ADISPLAY_ID_NONE) - .build()); - mTestListener.assertNotifyMotionWasCalled(WithMotionAction(AMOTION_EVENT_ACTION_HOVER_MOVE)); auto pc = assertPointerControllerCreated(ControllerType::MOUSE); ASSERT_EQ(DISPLAY_ID, pc->getDisplayId()); @@ -1298,7 +1151,7 @@ TEST_F(PointerChoreographerTest, TouchpadMovesPointerAndReturnsNewArgs) { pc->assertPosition(110, 220); ASSERT_TRUE(pc->isPointerShown()); - // Check that x-y cooridnates, displayId and cursor position are correctly updated. + // Check that x-y coordinates, displayId and cursor position are correctly updated. mTestListener.assertNotifyMotionWasCalled( AllOf(WithCoords(110, 220), WithDisplayId(DISPLAY_ID), WithCursorPosition(110, 220))); } @@ -1310,13 +1163,6 @@ TEST_F(PointerChoreographerTest, TouchpadAddsPointerPositionToTheCoords) { {/*id=*/0, {generateTestDeviceInfo(DEVICE_ID, AINPUT_SOURCE_MOUSE | AINPUT_SOURCE_TOUCHPAD, ADISPLAY_ID_NONE)}}); - mChoreographer.notifyMotion( - MotionArgsBuilder(AMOTION_EVENT_ACTION_HOVER_MOVE, AINPUT_SOURCE_MOUSE) - .pointer(TOUCHPAD_POINTER) - .deviceId(DEVICE_ID) - .displayId(ADISPLAY_ID_NONE) - .build()); - mTestListener.assertNotifyMotionWasCalled(WithMotionAction(AMOTION_EVENT_ACTION_HOVER_MOVE)); auto pc = assertPointerControllerCreated(ControllerType::MOUSE); ASSERT_EQ(DISPLAY_ID, pc->getDisplayId()); @@ -1398,23 +1244,8 @@ TEST_F(PointerChoreographerTest, ADISPLAY_ID_NONE), generateTestDeviceInfo(SECOND_DEVICE_ID, AINPUT_SOURCE_MOUSE | AINPUT_SOURCE_TOUCHPAD, ANOTHER_DISPLAY_ID)}}); - mChoreographer.notifyMotion( - MotionArgsBuilder(AMOTION_EVENT_ACTION_HOVER_MOVE, AINPUT_SOURCE_MOUSE) - .pointer(TOUCHPAD_POINTER) - .deviceId(DEVICE_ID) - .displayId(ADISPLAY_ID_NONE) - .build()); - mTestListener.assertNotifyMotionWasCalled(WithMotionAction(AMOTION_EVENT_ACTION_HOVER_MOVE)); auto unassociatedMousePc = assertPointerControllerCreated(ControllerType::MOUSE); ASSERT_EQ(DISPLAY_ID, unassociatedMousePc->getDisplayId()); - - mChoreographer.notifyMotion( - MotionArgsBuilder(AMOTION_EVENT_ACTION_HOVER_MOVE, AINPUT_SOURCE_MOUSE) - .pointer(TOUCHPAD_POINTER) - .deviceId(SECOND_DEVICE_ID) - .displayId(ANOTHER_DISPLAY_ID) - .build()); - mTestListener.assertNotifyMotionWasCalled(WithMotionAction(AMOTION_EVENT_ACTION_HOVER_MOVE)); auto associatedMousePc = assertPointerControllerCreated(ControllerType::MOUSE); ASSERT_EQ(ANOTHER_DISPLAY_ID, associatedMousePc->getDisplayId()); @@ -1437,7 +1268,7 @@ TEST_F(PointerChoreographerTest, ASSERT_EQ(ANOTHER_DISPLAY_ID, associatedMousePc->getDisplayId()); ASSERT_TRUE(associatedMousePc->isPointerShown()); - // Check that x-y cooridnates, displayId and cursor position are correctly updated. + // Check that x-y coordinates, displayId and cursor position are correctly updated. mTestListener.assertNotifyMotionWasCalled( AllOf(WithCoords(310, 420), WithDeviceId(SECOND_DEVICE_ID), WithDisplayId(ANOTHER_DISPLAY_ID), WithCursorPosition(310, 420))); @@ -1450,13 +1281,6 @@ TEST_F(PointerChoreographerTest, DoesNotMovePointerForTouchpadSource) { {/*id=*/0, {generateTestDeviceInfo(DEVICE_ID, AINPUT_SOURCE_MOUSE | AINPUT_SOURCE_TOUCHPAD, ADISPLAY_ID_NONE)}}); - mChoreographer.notifyMotion( - MotionArgsBuilder(AMOTION_EVENT_ACTION_HOVER_MOVE, AINPUT_SOURCE_MOUSE) - .pointer(TOUCHPAD_POINTER) - .deviceId(DEVICE_ID) - .displayId(ADISPLAY_ID_NONE) - .build()); - mTestListener.assertNotifyMotionWasCalled(WithMotionAction(AMOTION_EVENT_ACTION_HOVER_MOVE)); auto pc = assertPointerControllerCreated(ControllerType::MOUSE); ASSERT_EQ(DISPLAY_ID, pc->getDisplayId()); @@ -1479,7 +1303,7 @@ TEST_F(PointerChoreographerTest, DoesNotMovePointerForTouchpadSource) { pc->assertPosition(200, 300); ASSERT_FALSE(pc->isPointerShown()); - // Check x-y cooridnates, displayId and cursor position are not changed. + // Check x-y coordinates, displayId and cursor position are not changed. mTestListener.assertNotifyMotionWasCalled( AllOf(WithCoords(100, 200), WithDisplayId(ADISPLAY_ID_NONE), WithCursorPosition(AMOTION_EVENT_INVALID_CURSOR_POSITION, @@ -1493,13 +1317,6 @@ TEST_F(PointerChoreographerTest, WhenPointerCaptureEnabledTouchpadHidesPointer) {/*id=*/0, {generateTestDeviceInfo(DEVICE_ID, AINPUT_SOURCE_MOUSE | AINPUT_SOURCE_TOUCHPAD, ADISPLAY_ID_NONE)}}); - mChoreographer.notifyMotion( - MotionArgsBuilder(AMOTION_EVENT_ACTION_HOVER_MOVE, AINPUT_SOURCE_MOUSE) - .pointer(TOUCHPAD_POINTER) - .deviceId(DEVICE_ID) - .displayId(ADISPLAY_ID_NONE) - .build()); - mTestListener.assertNotifyMotionWasCalled(WithMotionAction(AMOTION_EVENT_ACTION_HOVER_MOVE)); auto pc = assertPointerControllerCreated(ControllerType::MOUSE); ASSERT_EQ(DISPLAY_ID, pc->getDisplayId()); ASSERT_TRUE(pc->isPointerShown()); @@ -1517,12 +1334,6 @@ TEST_F(PointerChoreographerTest, SetsPointerIconForMouse) { mChoreographer.setDefaultMouseDisplayId(DISPLAY_ID); mChoreographer.notifyInputDevicesChanged( {/*id=*/0, {generateTestDeviceInfo(DEVICE_ID, AINPUT_SOURCE_MOUSE, ADISPLAY_ID_NONE)}}); - mChoreographer.notifyMotion( - MotionArgsBuilder(AMOTION_EVENT_ACTION_HOVER_MOVE, AINPUT_SOURCE_MOUSE) - .pointer(MOUSE_POINTER) - .deviceId(DEVICE_ID) - .displayId(ADISPLAY_ID_NONE) - .build()); auto pc = assertPointerControllerCreated(ControllerType::MOUSE); pc->assertPointerIconNotSet(); @@ -1537,12 +1348,6 @@ TEST_F(PointerChoreographerTest, DoesNotSetMousePointerIconForWrongDisplayId) { mChoreographer.setDefaultMouseDisplayId(DISPLAY_ID); mChoreographer.notifyInputDevicesChanged( {/*id=*/0, {generateTestDeviceInfo(DEVICE_ID, AINPUT_SOURCE_MOUSE, ADISPLAY_ID_NONE)}}); - mChoreographer.notifyMotion( - MotionArgsBuilder(AMOTION_EVENT_ACTION_HOVER_MOVE, AINPUT_SOURCE_MOUSE) - .pointer(MOUSE_POINTER) - .deviceId(DEVICE_ID) - .displayId(ADISPLAY_ID_NONE) - .build()); auto pc = assertPointerControllerCreated(ControllerType::MOUSE); pc->assertPointerIconNotSet(); @@ -1558,12 +1363,6 @@ TEST_F(PointerChoreographerTest, DoesNotSetPointerIconForWrongDeviceId) { mChoreographer.setDefaultMouseDisplayId(DISPLAY_ID); mChoreographer.notifyInputDevicesChanged( {/*id=*/0, {generateTestDeviceInfo(DEVICE_ID, AINPUT_SOURCE_MOUSE, ADISPLAY_ID_NONE)}}); - mChoreographer.notifyMotion( - MotionArgsBuilder(AMOTION_EVENT_ACTION_HOVER_MOVE, AINPUT_SOURCE_MOUSE) - .pointer(MOUSE_POINTER) - .deviceId(DEVICE_ID) - .displayId(ADISPLAY_ID_NONE) - .build()); auto pc = assertPointerControllerCreated(ControllerType::MOUSE); pc->assertPointerIconNotSet(); @@ -1573,41 +1372,12 @@ TEST_F(PointerChoreographerTest, DoesNotSetPointerIconForWrongDeviceId) { pc->assertPointerIconNotSet(); } -TEST_F(PointerChoreographerTest, DoesNotSetPointerIconForDeviceWithoutPointerController) { - // Add two devices, one with a PointerController and the other without PointerController. - mChoreographer.setDisplayViewports(createViewports({DISPLAY_ID})); - mChoreographer.setDefaultMouseDisplayId(DISPLAY_ID); - mChoreographer.notifyInputDevicesChanged( - {/*id=*/0, - {generateTestDeviceInfo(DEVICE_ID, AINPUT_SOURCE_MOUSE, ADISPLAY_ID_NONE), - generateTestDeviceInfo(SECOND_DEVICE_ID, AINPUT_SOURCE_MOUSE, ANOTHER_DISPLAY_ID)}}); - mChoreographer.notifyMotion( - MotionArgsBuilder(AMOTION_EVENT_ACTION_HOVER_MOVE, AINPUT_SOURCE_MOUSE) - .pointer(MOUSE_POINTER) - .deviceId(DEVICE_ID) - .displayId(ADISPLAY_ID_NONE) - .build()); - auto pc = assertPointerControllerCreated(ControllerType::MOUSE); - pc->assertPointerIconNotSet(); - - // Set pointer icon for the device without PointerController. This should be ignored. - ASSERT_FALSE(mChoreographer.setPointerIcon(PointerIconStyle::TYPE_TEXT, ANOTHER_DISPLAY_ID, - SECOND_DEVICE_ID)); - pc->assertPointerIconNotSet(); -} - TEST_F(PointerChoreographerTest, SetsCustomPointerIconForMouse) { // Make sure there is a PointerController. mChoreographer.setDisplayViewports(createViewports({DISPLAY_ID})); mChoreographer.setDefaultMouseDisplayId(DISPLAY_ID); mChoreographer.notifyInputDevicesChanged( {/*id=*/0, {generateTestDeviceInfo(DEVICE_ID, AINPUT_SOURCE_MOUSE, ADISPLAY_ID_NONE)}}); - mChoreographer.notifyMotion( - MotionArgsBuilder(AMOTION_EVENT_ACTION_HOVER_MOVE, AINPUT_SOURCE_MOUSE) - .pointer(MOUSE_POINTER) - .deviceId(DEVICE_ID) - .displayId(ADISPLAY_ID_NONE) - .build()); auto pc = assertPointerControllerCreated(ControllerType::MOUSE); pc->assertCustomPointerIconNotSet(); @@ -1632,20 +1402,8 @@ TEST_F(PointerChoreographerTest, SetsPointerIconForMouseOnTwoDisplays) { {/*id=*/0, {generateTestDeviceInfo(DEVICE_ID, AINPUT_SOURCE_MOUSE, ADISPLAY_ID_NONE), generateTestDeviceInfo(SECOND_DEVICE_ID, AINPUT_SOURCE_MOUSE, ANOTHER_DISPLAY_ID)}}); - mChoreographer.notifyMotion( - MotionArgsBuilder(AMOTION_EVENT_ACTION_HOVER_MOVE, AINPUT_SOURCE_MOUSE) - .pointer(MOUSE_POINTER) - .deviceId(DEVICE_ID) - .displayId(ADISPLAY_ID_NONE) - .build()); auto firstMousePc = assertPointerControllerCreated(ControllerType::MOUSE); ASSERT_EQ(DISPLAY_ID, firstMousePc->getDisplayId()); - mChoreographer.notifyMotion( - MotionArgsBuilder(AMOTION_EVENT_ACTION_HOVER_MOVE, AINPUT_SOURCE_MOUSE) - .pointer(MOUSE_POINTER) - .deviceId(SECOND_DEVICE_ID) - .displayId(ANOTHER_DISPLAY_ID) - .build()); auto secondMousePc = assertPointerControllerCreated(ControllerType::MOUSE); ASSERT_EQ(ANOTHER_DISPLAY_ID, secondMousePc->getDisplayId()); |