Loading services/inputflinger/reader/InputDevice.cpp +8 −8 Original line number Diff line number Diff line Loading @@ -309,15 +309,15 @@ void InputDevice::configure(nsecs_t when, const InputReaderConfiguration* config const auto& displayPort = ports.find(inputPort); if (displayPort != ports.end()) { mAssociatedDisplayPort = std::make_optional(displayPort->second); } } const std::string& inputDeviceName = mIdentifier.name; const std::unordered_map<std::string, std::string>& names = } else { const std::unordered_map<std::string, std::string>& displayUniqueIds = config->uniqueIdAssociations; const auto& displayUniqueId = names.find(inputDeviceName); if (displayUniqueId != names.end()) { const auto& displayUniqueId = displayUniqueIds.find(inputPort); if (displayUniqueId != displayUniqueIds.end()) { mAssociatedDisplayUniqueId = displayUniqueId->second; } } } // If the device was explicitly disabled by the user, it would be present in the // "disabledDevices" list. If it is associated with a specific display, and it was not Loading @@ -338,7 +338,7 @@ void InputDevice::configure(nsecs_t when, const InputReaderConfiguration* config if (!mAssociatedViewport) { ALOGW("Input device %s should be associated with display %s but the " "corresponding viewport cannot be found", inputDeviceName.c_str(), mAssociatedDisplayUniqueId->c_str()); getName().c_str(), mAssociatedDisplayUniqueId->c_str()); enabled = false; } } Loading services/inputflinger/reader/include/InputDevice.h +6 −0 Original line number Diff line number Diff line Loading @@ -61,6 +61,9 @@ public: inline std::optional<uint8_t> getAssociatedDisplayPort() const { return mAssociatedDisplayPort; } inline std::optional<std::string> getAssociatedDisplayUniqueId() const { return mAssociatedDisplayUniqueId; } inline std::optional<DisplayViewport> getAssociatedViewport() const { return mAssociatedViewport; } Loading Loading @@ -386,6 +389,9 @@ public: inline std::optional<uint8_t> getAssociatedDisplayPort() const { return mDevice.getAssociatedDisplayPort(); } inline std::optional<std::string> getAssociatedDisplayUniqueId() const { return mDevice.getAssociatedDisplayUniqueId(); } inline std::optional<DisplayViewport> getAssociatedViewport() const { return mDevice.getAssociatedViewport(); } Loading services/inputflinger/reader/mapper/TouchInputMapper.cpp +6 −0 Original line number Diff line number Diff line Loading @@ -565,6 +565,12 @@ std::optional<DisplayViewport> TouchInputMapper::findViewport() { return getDeviceContext().getAssociatedViewport(); } const std::optional<std::string> associatedDisplayUniqueId = getDeviceContext().getAssociatedDisplayUniqueId(); if (associatedDisplayUniqueId) { return getDeviceContext().getAssociatedViewport(); } if (mDeviceMode == DeviceMode::POINTER) { std::optional<DisplayViewport> viewport = mConfig.getDisplayViewportById(mConfig.defaultPointerDisplayId); Loading services/inputflinger/tests/InputReader_test.cpp +16 −1 Original line number Diff line number Diff line Loading @@ -2862,7 +2862,7 @@ TEST_F(InputDeviceTest, Configure_AssignsDisplayUniqueId) { // Device should be disabled because it is associated with a specific display, but the // corresponding display is not found. const std::string DISPLAY_UNIQUE_ID = "displayUniqueId"; mFakePolicy->addInputUniqueIdAssociation(DEVICE_NAME, DISPLAY_UNIQUE_ID); mFakePolicy->addInputUniqueIdAssociation(DEVICE_LOCATION, DISPLAY_UNIQUE_ID); mDevice->configure(ARBITRARY_TIME, mFakePolicy->getReaderConfiguration(), InputReaderConfiguration::CHANGE_DISPLAY_INFO); ASSERT_FALSE(mDevice->isEnabled()); Loading @@ -2887,6 +2887,21 @@ TEST_F(InputDeviceTest, Configure_AssignsDisplayUniqueId) { ASSERT_FALSE(mDevice->isEnabled()); } TEST_F(InputDeviceTest, Configure_UniqueId_CorrectlyMatches) { mFakePolicy->clearViewports(); mDevice->addMapper<FakeInputMapper>(EVENTHUB_ID, AINPUT_SOURCE_KEYBOARD); mDevice->configure(ARBITRARY_TIME, mFakePolicy->getReaderConfiguration(), 0); const std::string DISPLAY_UNIQUE_ID = "displayUniqueId"; mFakePolicy->addInputUniqueIdAssociation(DEVICE_LOCATION, DISPLAY_UNIQUE_ID); mFakePolicy->addDisplayViewport(SECONDARY_DISPLAY_ID, DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_ORIENTATION_0, /* isActive= */ true, DISPLAY_UNIQUE_ID, NO_PORT, ViewportType::INTERNAL); mDevice->configure(ARBITRARY_TIME, mFakePolicy->getReaderConfiguration(), InputReaderConfiguration::CHANGE_DISPLAY_INFO); ASSERT_EQ(DISPLAY_UNIQUE_ID, mDevice->getAssociatedDisplayUniqueId()); } // --- InputMapperTest --- class InputMapperTest : public testing::Test { Loading Loading
services/inputflinger/reader/InputDevice.cpp +8 −8 Original line number Diff line number Diff line Loading @@ -309,15 +309,15 @@ void InputDevice::configure(nsecs_t when, const InputReaderConfiguration* config const auto& displayPort = ports.find(inputPort); if (displayPort != ports.end()) { mAssociatedDisplayPort = std::make_optional(displayPort->second); } } const std::string& inputDeviceName = mIdentifier.name; const std::unordered_map<std::string, std::string>& names = } else { const std::unordered_map<std::string, std::string>& displayUniqueIds = config->uniqueIdAssociations; const auto& displayUniqueId = names.find(inputDeviceName); if (displayUniqueId != names.end()) { const auto& displayUniqueId = displayUniqueIds.find(inputPort); if (displayUniqueId != displayUniqueIds.end()) { mAssociatedDisplayUniqueId = displayUniqueId->second; } } } // If the device was explicitly disabled by the user, it would be present in the // "disabledDevices" list. If it is associated with a specific display, and it was not Loading @@ -338,7 +338,7 @@ void InputDevice::configure(nsecs_t when, const InputReaderConfiguration* config if (!mAssociatedViewport) { ALOGW("Input device %s should be associated with display %s but the " "corresponding viewport cannot be found", inputDeviceName.c_str(), mAssociatedDisplayUniqueId->c_str()); getName().c_str(), mAssociatedDisplayUniqueId->c_str()); enabled = false; } } Loading
services/inputflinger/reader/include/InputDevice.h +6 −0 Original line number Diff line number Diff line Loading @@ -61,6 +61,9 @@ public: inline std::optional<uint8_t> getAssociatedDisplayPort() const { return mAssociatedDisplayPort; } inline std::optional<std::string> getAssociatedDisplayUniqueId() const { return mAssociatedDisplayUniqueId; } inline std::optional<DisplayViewport> getAssociatedViewport() const { return mAssociatedViewport; } Loading Loading @@ -386,6 +389,9 @@ public: inline std::optional<uint8_t> getAssociatedDisplayPort() const { return mDevice.getAssociatedDisplayPort(); } inline std::optional<std::string> getAssociatedDisplayUniqueId() const { return mDevice.getAssociatedDisplayUniqueId(); } inline std::optional<DisplayViewport> getAssociatedViewport() const { return mDevice.getAssociatedViewport(); } Loading
services/inputflinger/reader/mapper/TouchInputMapper.cpp +6 −0 Original line number Diff line number Diff line Loading @@ -565,6 +565,12 @@ std::optional<DisplayViewport> TouchInputMapper::findViewport() { return getDeviceContext().getAssociatedViewport(); } const std::optional<std::string> associatedDisplayUniqueId = getDeviceContext().getAssociatedDisplayUniqueId(); if (associatedDisplayUniqueId) { return getDeviceContext().getAssociatedViewport(); } if (mDeviceMode == DeviceMode::POINTER) { std::optional<DisplayViewport> viewport = mConfig.getDisplayViewportById(mConfig.defaultPointerDisplayId); Loading
services/inputflinger/tests/InputReader_test.cpp +16 −1 Original line number Diff line number Diff line Loading @@ -2862,7 +2862,7 @@ TEST_F(InputDeviceTest, Configure_AssignsDisplayUniqueId) { // Device should be disabled because it is associated with a specific display, but the // corresponding display is not found. const std::string DISPLAY_UNIQUE_ID = "displayUniqueId"; mFakePolicy->addInputUniqueIdAssociation(DEVICE_NAME, DISPLAY_UNIQUE_ID); mFakePolicy->addInputUniqueIdAssociation(DEVICE_LOCATION, DISPLAY_UNIQUE_ID); mDevice->configure(ARBITRARY_TIME, mFakePolicy->getReaderConfiguration(), InputReaderConfiguration::CHANGE_DISPLAY_INFO); ASSERT_FALSE(mDevice->isEnabled()); Loading @@ -2887,6 +2887,21 @@ TEST_F(InputDeviceTest, Configure_AssignsDisplayUniqueId) { ASSERT_FALSE(mDevice->isEnabled()); } TEST_F(InputDeviceTest, Configure_UniqueId_CorrectlyMatches) { mFakePolicy->clearViewports(); mDevice->addMapper<FakeInputMapper>(EVENTHUB_ID, AINPUT_SOURCE_KEYBOARD); mDevice->configure(ARBITRARY_TIME, mFakePolicy->getReaderConfiguration(), 0); const std::string DISPLAY_UNIQUE_ID = "displayUniqueId"; mFakePolicy->addInputUniqueIdAssociation(DEVICE_LOCATION, DISPLAY_UNIQUE_ID); mFakePolicy->addDisplayViewport(SECONDARY_DISPLAY_ID, DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_ORIENTATION_0, /* isActive= */ true, DISPLAY_UNIQUE_ID, NO_PORT, ViewportType::INTERNAL); mDevice->configure(ARBITRARY_TIME, mFakePolicy->getReaderConfiguration(), InputReaderConfiguration::CHANGE_DISPLAY_INFO); ASSERT_EQ(DISPLAY_UNIQUE_ID, mDevice->getAssociatedDisplayUniqueId()); } // --- InputMapperTest --- class InputMapperTest : public testing::Test { Loading