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

Commit 3401d23a authored by Prabir Pradhan's avatar Prabir Pradhan
Browse files

Allow PointerController to be disabled on creation

Disable the legacy PointerController when the PointerChoreographer is
enabled.

Bug: 278783893
Test: manual
Change-Id: I475f3286c83b90e161e186e62c2842e539434603
parent d96ece53
Loading
Loading
Loading
Loading
+40 −6
Original line number Diff line number Diff line
@@ -63,10 +63,10 @@ void PointerController::DisplayInfoListener::onPointerControllerDestroyed() {

std::shared_ptr<PointerController> PointerController::create(
        const sp<PointerControllerPolicyInterface>& policy, const sp<Looper>& looper,
        SpriteController& spriteController) {
        SpriteController& spriteController, bool enabled) {
    // using 'new' to access non-public constructor
    std::shared_ptr<PointerController> controller = std::shared_ptr<PointerController>(
            new PointerController(policy, looper, spriteController));
            new PointerController(policy, looper, spriteController, enabled));

    /*
     * Now we need to hook up the constructed PointerController object to its callbacks.
@@ -85,9 +85,10 @@ std::shared_ptr<PointerController> PointerController::create(
}

PointerController::PointerController(const sp<PointerControllerPolicyInterface>& policy,
                                     const sp<Looper>& looper, SpriteController& spriteController)
                                     const sp<Looper>& looper, SpriteController& spriteController,
                                     bool enabled)
      : PointerController(
                policy, looper, spriteController,
                policy, looper, spriteController, enabled,
                [](const sp<android::gui::WindowInfosListener>& listener) {
                    SurfaceComposerClient::getDefault()->addWindowInfosListener(listener);
                },
@@ -97,9 +98,10 @@ PointerController::PointerController(const sp<PointerControllerPolicyInterface>&

PointerController::PointerController(const sp<PointerControllerPolicyInterface>& policy,
                                     const sp<Looper>& looper, SpriteController& spriteController,
                                     WindowListenerConsumer registerListener,
                                     bool enabled, WindowListenerConsumer registerListener,
                                     WindowListenerConsumer unregisterListener)
      : mContext(policy, looper, spriteController, *this),
      : mEnabled(enabled),
        mContext(policy, looper, spriteController, *this),
        mCursorController(mContext),
        mDisplayInfoListener(sp<DisplayInfoListener>::make(this)),
        mUnregisterWindowInfosListener(std::move(unregisterListener)) {
@@ -119,10 +121,14 @@ std::mutex& PointerController::getLock() const {
}

std::optional<FloatRect> PointerController::getBounds() const {
    if (!mEnabled) return {};

    return mCursorController.getBounds();
}

void PointerController::move(float deltaX, float deltaY) {
    if (!mEnabled) return;

    const int32_t displayId = mCursorController.getDisplayId();
    vec2 transformed;
    {
@@ -134,6 +140,8 @@ void PointerController::move(float deltaX, float deltaY) {
}

void PointerController::setPosition(float x, float y) {
    if (!mEnabled) return;

    const int32_t displayId = mCursorController.getDisplayId();
    vec2 transformed;
    {
@@ -145,6 +153,11 @@ void PointerController::setPosition(float x, float y) {
}

FloatPoint PointerController::getPosition() const {
    if (!mEnabled) {
        return FloatPoint{AMOTION_EVENT_INVALID_CURSOR_POSITION,
                          AMOTION_EVENT_INVALID_CURSOR_POSITION};
    }

    const int32_t displayId = mCursorController.getDisplayId();
    const auto p = mCursorController.getPosition();
    {
@@ -155,20 +168,28 @@ FloatPoint PointerController::getPosition() const {
}

int32_t PointerController::getDisplayId() const {
    if (!mEnabled) return ADISPLAY_ID_NONE;

    return mCursorController.getDisplayId();
}

void PointerController::fade(Transition transition) {
    if (!mEnabled) return;

    std::scoped_lock lock(getLock());
    mCursorController.fade(transition);
}

void PointerController::unfade(Transition transition) {
    if (!mEnabled) return;

    std::scoped_lock lock(getLock());
    mCursorController.unfade(transition);
}

void PointerController::setPresentation(Presentation presentation) {
    if (!mEnabled) return;

    std::scoped_lock lock(getLock());

    if (mLocked.presentation == presentation) {
@@ -193,6 +214,8 @@ void PointerController::setPresentation(Presentation presentation) {

void PointerController::setSpots(const PointerCoords* spotCoords, const uint32_t* spotIdToIndex,
                                 BitSet32 spotIdBits, int32_t displayId) {
    if (!mEnabled) return;

    std::scoped_lock lock(getLock());
    std::array<PointerCoords, MAX_POINTERS> outSpotCoords{};
    const ui::Transform& transform = getTransformForDisplayLocked(displayId);
@@ -216,6 +239,8 @@ void PointerController::setSpots(const PointerCoords* spotCoords, const uint32_t
}

void PointerController::clearSpots() {
    if (!mEnabled) return;

    std::scoped_lock lock(getLock());
    clearSpotsLocked();
}
@@ -277,11 +302,15 @@ void PointerController::setDisplayViewport(const DisplayViewport& viewport) {
}

void PointerController::updatePointerIcon(PointerIconStyle iconId) {
    if (!mEnabled) return;

    std::scoped_lock lock(getLock());
    mCursorController.updatePointerIcon(iconId);
}

void PointerController::setCustomPointerIcon(const SpriteIcon& icon) {
    if (!mEnabled) return;

    std::scoped_lock lock(getLock());
    mCursorController.setCustomPointerIcon(icon);
}
@@ -326,6 +355,11 @@ const ui::Transform& PointerController::getTransformForDisplayLocked(int display
}

void PointerController::dump(std::string& dump) {
    if (!mEnabled) {
        dump += INDENT "PointerController: DISABLED due to ongoing PointerChoreographer refactor\n";
        return;
    }

    dump += INDENT "PointerController:\n";
    std::scoped_lock lock(getLock());
    dump += StringPrintf(INDENT2 "Presentation: %s\n",
+6 −3
Original line number Diff line number Diff line
@@ -47,7 +47,7 @@ class PointerController : public PointerControllerInterface {
public:
    static std::shared_ptr<PointerController> create(
            const sp<PointerControllerPolicyInterface>& policy, const sp<Looper>& looper,
            SpriteController& spriteController);
            SpriteController& spriteController, bool enabled);

    ~PointerController() override;

@@ -83,12 +83,13 @@ protected:

    // Constructor used to test WindowInfosListener registration.
    PointerController(const sp<PointerControllerPolicyInterface>& policy, const sp<Looper>& looper,
                      SpriteController& spriteController, WindowListenerConsumer registerListener,
                      SpriteController& spriteController, bool enabled,
                      WindowListenerConsumer registerListener,
                      WindowListenerConsumer unregisterListener);

private:
    PointerController(const sp<PointerControllerPolicyInterface>& policy, const sp<Looper>& looper,
                      SpriteController& spriteController);
                      SpriteController& spriteController, bool enabled);

    friend PointerControllerContext::LooperCallback;
    friend PointerControllerContext::MessageHandler;
@@ -99,6 +100,8 @@ private:
    // we use the DisplayInfoListener's lock in PointerController.
    std::mutex& getLock() const;

    const bool mEnabled;

    PointerControllerContext mContext;

    MouseCursorController mCursorController;
+3 −1
Original line number Diff line number Diff line
@@ -181,7 +181,8 @@ PointerControllerTest::PointerControllerTest() : mPointerSprite(new NiceMock<Moc
    EXPECT_CALL(*mSpriteController, createSprite())
            .WillOnce(Return(mPointerSprite));

    mPointerController = PointerController::create(mPolicy, mLooper, *mSpriteController);
    mPointerController =
            PointerController::create(mPolicy, mLooper, *mSpriteController, /*enabled=*/true);
}

PointerControllerTest::~PointerControllerTest() {
@@ -321,6 +322,7 @@ public:
                          const sp<Looper>& looper, SpriteController& spriteController)
          : PointerController(
                    new MockPointerControllerPolicyInterface(), looper, spriteController,
                    /*enabled=*/true,
                    [&registeredListener](const sp<android::gui::WindowInfosListener>& listener) {
                        // Register listener
                        registeredListener = listener;
+8 −2
Original line number Diff line number Diff line
@@ -733,7 +733,13 @@ std::shared_ptr<PointerControllerInterface> NativeInputManager::obtainPointerCon
    if (controller == nullptr) {
        ensureSpriteControllerLocked();

        controller = PointerController::create(this, mLooper, *mLocked.spriteController);
        static const bool ENABLE_POINTER_CHOREOGRAPHER =
                sysprop::InputProperties::enable_pointer_choreographer().value_or(false);

        // Disable the functionality of the legacy PointerController if PointerChoreographer is
        // enabled.
        controller = PointerController::create(this, mLooper, *mLocked.spriteController,
                                               /*enabled=*/!ENABLE_POINTER_CHOREOGRAPHER);
        mLocked.legacyPointerController = controller;
        updateInactivityTimeoutLocked();
    }
@@ -745,7 +751,7 @@ std::shared_ptr<PointerControllerInterface> NativeInputManager::createPointerCon
    std::scoped_lock _l(mLock);
    ensureSpriteControllerLocked();
    std::shared_ptr<PointerController> pc =
            PointerController::create(this, mLooper, *mLocked.spriteController);
            PointerController::create(this, mLooper, *mLocked.spriteController, /*enabled=*/true);
    mLocked.pointerControllers.emplace_back(pc);
    return pc;
}