diff options
Diffstat (limited to 'libs/gui/tests/EndToEndNativeInputTest.cpp')
-rw-r--r-- | libs/gui/tests/EndToEndNativeInputTest.cpp | 82 |
1 files changed, 74 insertions, 8 deletions
diff --git a/libs/gui/tests/EndToEndNativeInputTest.cpp b/libs/gui/tests/EndToEndNativeInputTest.cpp index 6b77f1e950..f5e196d652 100644 --- a/libs/gui/tests/EndToEndNativeInputTest.cpp +++ b/libs/gui/tests/EndToEndNativeInputTest.cpp @@ -68,12 +68,10 @@ class InputSurface { public: InputSurface(const sp<SurfaceControl> &sc, int width, int height) { mSurfaceControl = sc; - std::unique_ptr<InputChannel> clientChannel; - InputChannel::openInputChannelPair("testchannels", mServerChannel, clientChannel); - mClientChannel = std::move(clientChannel); mInputFlinger = getInputFlinger(); - mInputFlinger->registerInputChannel(*mServerChannel); + mClientChannel = std::make_shared<InputChannel>(); + mInputFlinger->createInputChannel("testchannels", mClientChannel.get()); populateInputInfo(width, height); @@ -159,7 +157,7 @@ public: EXPECT_EQ(0, mev->getFlags() & VERIFIED_MOTION_EVENT_FLAGS); } - ~InputSurface() { mInputFlinger->unregisterInputChannel(mServerChannel->getConnectionToken()); } + ~InputSurface() { mInputFlinger->removeInputChannel(mClientChannel->getConnectionToken()); } void doTransaction(std::function<void(SurfaceComposerClient::Transaction&, const sp<SurfaceControl>&)> transactionBody) { @@ -196,7 +194,7 @@ private: } void populateInputInfo(int width, int height) { - mInputInfo.token = mServerChannel->getConnectionToken(); + mInputInfo.token = mClientChannel->getConnectionToken(); mInputInfo.name = "Test info"; mInputInfo.flags = InputWindowInfo::Flag::NOT_TOUCH_MODAL; mInputInfo.type = InputWindowInfo::Type::BASE_APPLICATION; @@ -223,7 +221,6 @@ private: } public: sp<SurfaceControl> mSurfaceControl; - std::unique_ptr<InputChannel> mServerChannel; std::shared_ptr<InputChannel> mClientChannel; sp<IInputFlinger> mInputFlinger; @@ -388,7 +385,7 @@ TEST_F(InputSurfacesTest, input_respects_cropped_surface_insets) { childSurface->doTransaction([&](auto &t, auto &sc) { t.setPosition(sc, -5, -5); - t.reparent(sc, parentSurface->mSurfaceControl->getHandle()); + t.reparent(sc, parentSurface->mSurfaceControl); }); injectTap(106, 106); @@ -540,4 +537,73 @@ TEST_F(InputSurfacesTest, can_be_focused) { surface->assertFocusChange(true); } + +TEST_F(InputSurfacesTest, rotate_surface) { + std::unique_ptr<InputSurface> surface = makeSurface(100, 100); + surface->showAt(10, 10); + surface->doTransaction([](auto &t, auto &sc) { + t.setMatrix(sc, 0, 1, -1, 0); // 90 degrees + }); + injectTap(8, 11); + surface->expectTap(1, 2); + + surface->doTransaction([](auto &t, auto &sc) { + t.setMatrix(sc, -1, 0, 0, -1); // 180 degrees + }); + injectTap(9, 8); + surface->expectTap(1, 2); + + surface->doTransaction([](auto &t, auto &sc) { + t.setMatrix(sc, 0, -1, 1, 0); // 270 degrees + }); + injectTap(12, 9); + surface->expectTap(1, 2); +} + +TEST_F(InputSurfacesTest, rotate_surface_with_scale) { + std::unique_ptr<InputSurface> surface = makeSurface(100, 100); + surface->showAt(10, 10); + surface->doTransaction([](auto &t, auto &sc) { + t.setMatrix(sc, 0, 2, -4, 0); // 90 degrees + }); + injectTap(2, 12); + surface->expectTap(1, 2); + + surface->doTransaction([](auto &t, auto &sc) { + t.setMatrix(sc, -2, 0, 0, -4); // 180 degrees + }); + injectTap(8, 2); + surface->expectTap(1, 2); + + surface->doTransaction([](auto &t, auto &sc) { + t.setMatrix(sc, 0, -2, 4, 0); // 270 degrees + }); + injectTap(18, 8); + surface->expectTap(1, 2); +} + +TEST_F(InputSurfacesTest, rotate_surface_with_scale_and_insets) { + std::unique_ptr<InputSurface> surface = makeSurface(100, 100); + surface->mInputInfo.surfaceInset = 5; + surface->showAt(100, 100); + + surface->doTransaction([](auto &t, auto &sc) { + t.setMatrix(sc, 0, 2, -4, 0); // 90 degrees + }); + injectTap(40, 120); + surface->expectTap(5, 10); + + surface->doTransaction([](auto &t, auto &sc) { + t.setMatrix(sc, -2, 0, 0, -4); // 180 degrees + }); + injectTap(80, 40); + surface->expectTap(5, 10); + + surface->doTransaction([](auto &t, auto &sc) { + t.setMatrix(sc, 0, -2, 4, 0); // 270 degrees + }); + injectTap(160, 80); + surface->expectTap(5, 10); +} + } // namespace android::test |