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

Commit b6e12c1e authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Allow PointerController to be disabled on creation" into main

parents d8f9519d 3401d23a
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;
}