Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8a02d1d0 authored by Arpit Singh's avatar Arpit Singh Committed by Android (Google) Code Review
Browse files

Merge "Add method to set SkipScreenshot flag on cursorcontroller sprites" into main

parents 9f3bb4e3 f4ae0ac6
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -165,6 +165,15 @@ void MouseCursorController::setStylusHoverMode(bool stylusHoverMode) {
    }
}

void MouseCursorController::setSkipScreenshot(bool skip) {
    std::scoped_lock lock(mLock);
    if (mLocked.skipScreenshot == skip) {
        return;
    }
    mLocked.skipScreenshot = skip;
    updatePointerLocked();
}

void MouseCursorController::reloadPointerResources(bool getAdditionalMouseResources) {
    std::scoped_lock lock(mLock);

@@ -352,6 +361,7 @@ void MouseCursorController::updatePointerLocked() REQUIRES(mLock) {
    mLocked.pointerSprite->setLayer(Sprite::BASE_LAYER_POINTER);
    mLocked.pointerSprite->setPosition(mLocked.pointerX, mLocked.pointerY);
    mLocked.pointerSprite->setDisplayId(mLocked.viewport.displayId);
    mLocked.pointerSprite->setSkipScreenshot(mLocked.skipScreenshot);

    if (mLocked.pointerAlpha > 0) {
        mLocked.pointerSprite->setAlpha(mLocked.pointerAlpha);
+4 −0
Original line number Diff line number Diff line
@@ -53,6 +53,9 @@ public:
    void setDisplayViewport(const DisplayViewport& viewport, bool getAdditionalMouseResources);
    void setStylusHoverMode(bool stylusHoverMode);

    // Set/Unset flag to hide the mouse cursor on the mirrored display
    void setSkipScreenshot(bool skip);

    void updatePointerIcon(PointerIconStyle iconId);
    void setCustomPointerIcon(const SpriteIcon& icon);
    void reloadPointerResources(bool getAdditionalMouseResources);
@@ -94,6 +97,7 @@ private:
        PointerIconStyle requestedPointerType;
        PointerIconStyle resolvedPointerType;

        bool skipScreenshot{false};
        bool animating{false};

    } mLocked GUARDED_BY(mLock);
+9 −6
Original line number Diff line number Diff line
@@ -286,13 +286,16 @@ void PointerController::setCustomPointerIcon(const SpriteIcon& icon) {
    mCursorController.setCustomPointerIcon(icon);
}

void PointerController::setSkipScreenshot(ui::LogicalDisplayId displayId, bool skip) {
void PointerController::setSkipScreenshotFlagForDisplay(ui::LogicalDisplayId displayId) {
    std::scoped_lock lock(getLock());
    if (skip) {
    mLocked.displaysToSkipScreenshot.insert(displayId);
    } else {
        mLocked.displaysToSkipScreenshot.erase(displayId);
    mCursorController.setSkipScreenshot(true);
}

void PointerController::clearSkipScreenshotFlags() {
    std::scoped_lock lock(getLock());
    mLocked.displaysToSkipScreenshot.clear();
    mCursorController.setSkipScreenshot(false);
}

void PointerController::doInactivityTimeout() {
+2 −1
Original line number Diff line number Diff line
@@ -66,7 +66,8 @@ public:
    void clearSpots() override;
    void updatePointerIcon(PointerIconStyle iconId) override;
    void setCustomPointerIcon(const SpriteIcon& icon) override;
    void setSkipScreenshot(ui::LogicalDisplayId displayId, bool skip) override;
    void setSkipScreenshotFlagForDisplay(ui::LogicalDisplayId displayId) override;
    void clearSkipScreenshotFlags() override;

    virtual void setInactivityTimeout(InactivityTimeout inactivityTimeout);
    void doInactivityTimeout();
+49 −5
Original line number Diff line number Diff line
@@ -183,12 +183,16 @@ private:
        MyLooper() : Looper(false) {}
        ~MyLooper() = default;
    };
    sp<MyLooper> mLooper;
    std::thread mThread;

protected:
    sp<MyLooper> mLooper;
};

PointerControllerTest::PointerControllerTest() : mPointerSprite(new NiceMock<MockSprite>),
        mLooper(new MyLooper), mThread(&PointerControllerTest::loopThread, this) {
PointerControllerTest::PointerControllerTest()
      : mPointerSprite(new NiceMock<MockSprite>),
        mThread(&PointerControllerTest::loopThread, this),
        mLooper(new MyLooper) {
    mSpriteController.reset(new NiceMock<MockSpriteController>(mLooper));
    mPolicy = new MockPointerControllerPolicyInterface();

@@ -339,7 +343,7 @@ TEST_F(PointerControllerTest, updatesSkipScreenshotFlagForTouchSpots) {
    testing::Mock::VerifyAndClearExpectations(testSpotSprite.get());

    // Marking the display to skip screenshot should update sprite as well
    mPointerController->setSkipScreenshot(ui::LogicalDisplayId::DEFAULT, true);
    mPointerController->setSkipScreenshotFlagForDisplay(ui::LogicalDisplayId::DEFAULT);
    EXPECT_CALL(*testSpotSprite, setSkipScreenshot).With(testing::Args<0>(true));

    // Update spots to sync state with sprite
@@ -348,13 +352,53 @@ TEST_F(PointerControllerTest, updatesSkipScreenshotFlagForTouchSpots) {
    testing::Mock::VerifyAndClearExpectations(testSpotSprite.get());

    // Reset flag and verify again
    mPointerController->setSkipScreenshot(ui::LogicalDisplayId::DEFAULT, false);
    mPointerController->clearSkipScreenshotFlags();
    EXPECT_CALL(*testSpotSprite, setSkipScreenshot).With(testing::Args<0>(false));
    mPointerController->setSpots(&testSpotCoords, testIdToIndex.cbegin(), testIdBits,
                                 ui::LogicalDisplayId::DEFAULT);
    testing::Mock::VerifyAndClearExpectations(testSpotSprite.get());
}

class PointerControllerSkipScreenshotFlagTest
      : public PointerControllerTest,
        public testing::WithParamInterface<PointerControllerInterface::ControllerType> {};

TEST_P(PointerControllerSkipScreenshotFlagTest, updatesSkipScreenshotFlag) {
    sp<MockSprite> testPointerSprite(new NiceMock<MockSprite>);
    EXPECT_CALL(*mSpriteController, createSprite).WillOnce(Return(testPointerSprite));

    // Create a pointer controller
    mPointerController =
            PointerController::create(mPolicy, mLooper, *mSpriteController, GetParam());
    ensureDisplayViewportIsSet(ui::LogicalDisplayId::DEFAULT);

    // By default skip screenshot flag is not set for the sprite
    EXPECT_CALL(*testPointerSprite, setSkipScreenshot).With(testing::Args<0>(false));

    // Update pointer to sync state with sprite
    mPointerController->setPosition(100, 100);
    testing::Mock::VerifyAndClearExpectations(testPointerSprite.get());

    // Marking the controller to skip screenshot should update pointer sprite
    mPointerController->setSkipScreenshotFlagForDisplay(ui::LogicalDisplayId::DEFAULT);
    EXPECT_CALL(*testPointerSprite, setSkipScreenshot).With(testing::Args<0>(true));

    // Update pointer to sync state with sprite
    mPointerController->move(10, 10);
    testing::Mock::VerifyAndClearExpectations(testPointerSprite.get());

    // Reset flag and verify again
    mPointerController->clearSkipScreenshotFlags();
    EXPECT_CALL(*testPointerSprite, setSkipScreenshot).With(testing::Args<0>(false));
    mPointerController->move(10, 10);
    testing::Mock::VerifyAndClearExpectations(testPointerSprite.get());
}

INSTANTIATE_TEST_SUITE_P(PointerControllerSkipScreenshotFlagTest,
                         PointerControllerSkipScreenshotFlagTest,
                         testing::Values(PointerControllerInterface::ControllerType::MOUSE,
                                         PointerControllerInterface::ControllerType::STYLUS));

class PointerControllerWindowInfoListenerTest : public Test {};

TEST_F(PointerControllerWindowInfoListenerTest,