Loading libs/input/PointerController.cpp +1 −1 Original line number Original line Diff line number Diff line Loading @@ -290,7 +290,7 @@ void PointerController::doInactivityTimeout() { fade(Transition::GRADUAL); fade(Transition::GRADUAL); } } void PointerController::onDisplayViewportsUpdated(std::vector<DisplayViewport>& viewports) { void PointerController::onDisplayViewportsUpdated(const std::vector<DisplayViewport>& viewports) { std::unordered_set<int32_t> displayIdSet; std::unordered_set<int32_t> displayIdSet; for (const DisplayViewport& viewport : viewports) { for (const DisplayViewport& viewport : viewports) { displayIdSet.insert(viewport.displayId); displayIdSet.insert(viewport.displayId); Loading libs/input/PointerController.h +1 −1 Original line number Original line Diff line number Diff line Loading @@ -70,7 +70,7 @@ public: void setInactivityTimeout(InactivityTimeout inactivityTimeout); void setInactivityTimeout(InactivityTimeout inactivityTimeout); void doInactivityTimeout(); void doInactivityTimeout(); void reloadPointerResources(); void reloadPointerResources(); void onDisplayViewportsUpdated(std::vector<DisplayViewport>& viewports); void onDisplayViewportsUpdated(const std::vector<DisplayViewport>& viewports); void onDisplayInfosChangedLocked(const std::vector<gui::DisplayInfo>& displayInfos) void onDisplayInfosChangedLocked(const std::vector<gui::DisplayInfo>& displayInfos) REQUIRES(getLock()); REQUIRES(getLock()); Loading services/core/jni/com_android_server_input_InputManagerService.cpp +58 −32 Original line number Original line Diff line number Diff line Loading @@ -262,7 +262,8 @@ static std::string getStringElementFromJavaArray(JNIEnv* env, jobjectArray array class NativeInputManager : public virtual InputReaderPolicyInterface, class NativeInputManager : public virtual InputReaderPolicyInterface, public virtual InputDispatcherPolicyInterface, public virtual InputDispatcherPolicyInterface, public virtual PointerControllerPolicyInterface { public virtual PointerControllerPolicyInterface, public virtual PointerChoreographerPolicyInterface { protected: protected: virtual ~NativeInputManager(); virtual ~NativeInputManager(); Loading Loading @@ -370,6 +371,9 @@ public: virtual PointerIconStyle getCustomPointerIconId(); virtual PointerIconStyle getCustomPointerIconId(); virtual void onPointerDisplayIdChanged(int32_t displayId, const FloatPoint& position); virtual void onPointerDisplayIdChanged(int32_t displayId, const FloatPoint& position); /* --- PointerControllerPolicyInterface implementation --- */ virtual std::shared_ptr<PointerControllerInterface> createPointerController() override; private: private: sp<InputManagerInterface> mInputManager; sp<InputManagerInterface> mInputManager; Loading Loading @@ -402,8 +406,12 @@ private: // Sprite controller singleton, created on first use. // Sprite controller singleton, created on first use. std::shared_ptr<SpriteController> spriteController{}; std::shared_ptr<SpriteController> spriteController{}; // TODO(b/293587049): Remove when the PointerChoreographer refactoring is complete. // Pointer controller singleton, created and destroyed as needed. // Pointer controller singleton, created and destroyed as needed. std::weak_ptr<PointerController> pointerController{}; std::weak_ptr<PointerController> legacyPointerController{}; // The list of PointerControllers created and managed by the PointerChoreographer. std::list<std::weak_ptr<PointerController>> pointerControllers{}; // Input devices to be disabled // Input devices to be disabled std::set<int32_t> disabledInputDevices{}; std::set<int32_t> disabledInputDevices{}; Loading Loading @@ -443,6 +451,9 @@ private: jmethodID method, const char* methodName, jmethodID method, const char* methodName, std::function<T(std::string)> opOnValue = [](auto&& v) { return std::move(v); }); std::function<T(std::string)> opOnValue = [](auto&& v) { return std::move(v); }); void forEachPointerControllerLocked(std::function<void(PointerController&)> apply) REQUIRES(mLock); static inline JNIEnv* jniEnv() { return AndroidRuntime::getJNIEnv(); } static inline JNIEnv* jniEnv() { return AndroidRuntime::getJNIEnv(); } }; }; Loading @@ -452,7 +463,7 @@ NativeInputManager::NativeInputManager(jobject serviceObj, const sp<Looper>& loo mServiceObj = env->NewGlobalRef(serviceObj); mServiceObj = env->NewGlobalRef(serviceObj); InputManager* im = new InputManager(this, *this); InputManager* im = new InputManager(this, *this, *this); mInputManager = im; mInputManager = im; defaultServiceManager()->addService(String16("inputflinger"), im); defaultServiceManager()->addService(String16("inputflinger"), im); } } Loading @@ -465,10 +476,8 @@ NativeInputManager::~NativeInputManager() { void NativeInputManager::dump(std::string& dump) { void NativeInputManager::dump(std::string& dump) { dump += "Input Manager State:\n"; dump += "Input Manager State:\n"; { dump += StringPrintf(INDENT "Interactive: %s\n", toString(mInteractive.load())); dump += StringPrintf(INDENT "Interactive: %s\n", toString(mInteractive.load())); } { // acquire lock { std::scoped_lock _l(mLock); std::scoped_lock _l(mLock); dump += StringPrintf(INDENT "System UI Lights Out: %s\n", dump += StringPrintf(INDENT "System UI Lights Out: %s\n", toString(mLocked.systemUiLightsOut)); toString(mLocked.systemUiLightsOut)); Loading @@ -480,11 +489,8 @@ void NativeInputManager::dump(std::string& dump) { dump += StringPrintf(INDENT "Pointer Capture: %s, seq=%" PRIu32 "\n", dump += StringPrintf(INDENT "Pointer Capture: %s, seq=%" PRIu32 "\n", mLocked.pointerCaptureRequest.enable ? "Enabled" : "Disabled", mLocked.pointerCaptureRequest.enable ? "Enabled" : "Disabled", mLocked.pointerCaptureRequest.seq); mLocked.pointerCaptureRequest.seq); auto pointerController = mLocked.pointerController.lock(); forEachPointerControllerLocked([&dump](PointerController& pc) { pc.dump(dump); }); if (pointerController != nullptr) { } // release lock pointerController->dump(dump); } } dump += "\n"; dump += "\n"; mInputManager->dump(dump); mInputManager->dump(dump); Loading Loading @@ -524,10 +530,9 @@ void NativeInputManager::setDisplayViewports(JNIEnv* env, jobjectArray viewportO { // acquire lock { // acquire lock std::scoped_lock _l(mLock); std::scoped_lock _l(mLock); mLocked.viewports = viewports; mLocked.viewports = viewports; std::shared_ptr<PointerController> controller = mLocked.pointerController.lock(); forEachPointerControllerLocked([viewports = std::move(viewports)](PointerController& pc) { if (controller != nullptr) { pc.onDisplayViewportsUpdated(viewports); controller->onDisplayViewportsUpdated(mLocked.viewports); }); } } // release lock } // release lock mInputManager->getReader().requestRefreshConfiguration( mInputManager->getReader().requestRefreshConfiguration( Loading Loading @@ -700,23 +705,51 @@ std::unordered_map<std::string, T> NativeInputManager::readMapFromInterleavedJav return map; return map; } } void NativeInputManager::forEachPointerControllerLocked( std::function<void(PointerController&)> apply) { if (auto pc = mLocked.legacyPointerController.lock(); pc) { apply(*pc); } auto it = mLocked.pointerControllers.begin(); while (it != mLocked.pointerControllers.end()) { auto pc = it->lock(); if (!pc) { it = mLocked.pointerControllers.erase(it); continue; } apply(*pc); } } // TODO(b/293587049): Remove the old way of obtaining PointerController when the // PointerChoreographer refactoring is complete. std::shared_ptr<PointerControllerInterface> NativeInputManager::obtainPointerController( std::shared_ptr<PointerControllerInterface> NativeInputManager::obtainPointerController( int32_t /* deviceId */) { int32_t /* deviceId */) { ATRACE_CALL(); ATRACE_CALL(); std::scoped_lock _l(mLock); std::scoped_lock _l(mLock); std::shared_ptr<PointerController> controller = mLocked.pointerController.lock(); std::shared_ptr<PointerController> controller = mLocked.legacyPointerController.lock(); if (controller == nullptr) { if (controller == nullptr) { ensureSpriteControllerLocked(); ensureSpriteControllerLocked(); controller = PointerController::create(this, mLooper, *mLocked.spriteController); controller = PointerController::create(this, mLooper, *mLocked.spriteController); mLocked.pointerController = controller; mLocked.legacyPointerController = controller; updateInactivityTimeoutLocked(); updateInactivityTimeoutLocked(); } } return controller; return controller; } } std::shared_ptr<PointerControllerInterface> NativeInputManager::createPointerController() { std::scoped_lock _l(mLock); ensureSpriteControllerLocked(); std::shared_ptr<PointerController> pc = PointerController::create(this, mLooper, *mLocked.spriteController); mLocked.pointerControllers.emplace_back(pc); return pc; } void NativeInputManager::onPointerDisplayIdChanged(int32_t pointerDisplayId, void NativeInputManager::onPointerDisplayIdChanged(int32_t pointerDisplayId, const FloatPoint& position) { const FloatPoint& position) { JNIEnv* env = jniEnv(); JNIEnv* env = jniEnv(); Loading Loading @@ -1071,13 +1104,9 @@ void NativeInputManager::setSystemUiLightsOut(bool lightsOut) { } } void NativeInputManager::updateInactivityTimeoutLocked() REQUIRES(mLock) { void NativeInputManager::updateInactivityTimeoutLocked() REQUIRES(mLock) { std::shared_ptr<PointerController> controller = mLocked.pointerController.lock(); forEachPointerControllerLocked([lightsOut = mLocked.systemUiLightsOut](PointerController& pc) { if (controller == nullptr) { pc.setInactivityTimeout(lightsOut ? InactivityTimeout::SHORT : InactivityTimeout::NORMAL); return; }); } controller->setInactivityTimeout(mLocked.systemUiLightsOut ? InactivityTimeout::SHORT : InactivityTimeout::NORMAL); } } void NativeInputManager::setPointerDisplayId(int32_t displayId) { void NativeInputManager::setPointerDisplayId(int32_t displayId) { Loading Loading @@ -1247,7 +1276,7 @@ void NativeInputManager::reloadCalibration() { void NativeInputManager::setPointerIconType(PointerIconStyle iconId) { void NativeInputManager::setPointerIconType(PointerIconStyle iconId) { std::scoped_lock _l(mLock); std::scoped_lock _l(mLock); std::shared_ptr<PointerController> controller = mLocked.pointerController.lock(); std::shared_ptr<PointerController> controller = mLocked.legacyPointerController.lock(); if (controller != nullptr) { if (controller != nullptr) { controller->updatePointerIcon(iconId); controller->updatePointerIcon(iconId); } } Loading @@ -1255,15 +1284,12 @@ void NativeInputManager::setPointerIconType(PointerIconStyle iconId) { void NativeInputManager::reloadPointerIcons() { void NativeInputManager::reloadPointerIcons() { std::scoped_lock _l(mLock); std::scoped_lock _l(mLock); std::shared_ptr<PointerController> controller = mLocked.pointerController.lock(); forEachPointerControllerLocked([](PointerController& pc) { pc.reloadPointerResources(); }); if (controller != nullptr) { controller->reloadPointerResources(); } } } void NativeInputManager::setCustomPointerIcon(const SpriteIcon& icon) { void NativeInputManager::setCustomPointerIcon(const SpriteIcon& icon) { std::scoped_lock _l(mLock); std::scoped_lock _l(mLock); std::shared_ptr<PointerController> controller = mLocked.pointerController.lock(); std::shared_ptr<PointerController> controller = mLocked.legacyPointerController.lock(); if (controller != nullptr) { if (controller != nullptr) { controller->setCustomPointerIcon(icon); controller->setCustomPointerIcon(icon); } } Loading Loading @@ -1656,7 +1682,7 @@ void NativeInputManager::setStylusButtonMotionEventsEnabled(bool enabled) { FloatPoint NativeInputManager::getMouseCursorPosition() { FloatPoint NativeInputManager::getMouseCursorPosition() { std::scoped_lock _l(mLock); std::scoped_lock _l(mLock); const auto pc = mLocked.pointerController.lock(); const auto pc = mLocked.legacyPointerController.lock(); if (!pc) return {AMOTION_EVENT_INVALID_CURSOR_POSITION, AMOTION_EVENT_INVALID_CURSOR_POSITION}; if (!pc) return {AMOTION_EVENT_INVALID_CURSOR_POSITION, AMOTION_EVENT_INVALID_CURSOR_POSITION}; return pc->getPosition(); return pc->getPosition(); Loading Loading
libs/input/PointerController.cpp +1 −1 Original line number Original line Diff line number Diff line Loading @@ -290,7 +290,7 @@ void PointerController::doInactivityTimeout() { fade(Transition::GRADUAL); fade(Transition::GRADUAL); } } void PointerController::onDisplayViewportsUpdated(std::vector<DisplayViewport>& viewports) { void PointerController::onDisplayViewportsUpdated(const std::vector<DisplayViewport>& viewports) { std::unordered_set<int32_t> displayIdSet; std::unordered_set<int32_t> displayIdSet; for (const DisplayViewport& viewport : viewports) { for (const DisplayViewport& viewport : viewports) { displayIdSet.insert(viewport.displayId); displayIdSet.insert(viewport.displayId); Loading
libs/input/PointerController.h +1 −1 Original line number Original line Diff line number Diff line Loading @@ -70,7 +70,7 @@ public: void setInactivityTimeout(InactivityTimeout inactivityTimeout); void setInactivityTimeout(InactivityTimeout inactivityTimeout); void doInactivityTimeout(); void doInactivityTimeout(); void reloadPointerResources(); void reloadPointerResources(); void onDisplayViewportsUpdated(std::vector<DisplayViewport>& viewports); void onDisplayViewportsUpdated(const std::vector<DisplayViewport>& viewports); void onDisplayInfosChangedLocked(const std::vector<gui::DisplayInfo>& displayInfos) void onDisplayInfosChangedLocked(const std::vector<gui::DisplayInfo>& displayInfos) REQUIRES(getLock()); REQUIRES(getLock()); Loading
services/core/jni/com_android_server_input_InputManagerService.cpp +58 −32 Original line number Original line Diff line number Diff line Loading @@ -262,7 +262,8 @@ static std::string getStringElementFromJavaArray(JNIEnv* env, jobjectArray array class NativeInputManager : public virtual InputReaderPolicyInterface, class NativeInputManager : public virtual InputReaderPolicyInterface, public virtual InputDispatcherPolicyInterface, public virtual InputDispatcherPolicyInterface, public virtual PointerControllerPolicyInterface { public virtual PointerControllerPolicyInterface, public virtual PointerChoreographerPolicyInterface { protected: protected: virtual ~NativeInputManager(); virtual ~NativeInputManager(); Loading Loading @@ -370,6 +371,9 @@ public: virtual PointerIconStyle getCustomPointerIconId(); virtual PointerIconStyle getCustomPointerIconId(); virtual void onPointerDisplayIdChanged(int32_t displayId, const FloatPoint& position); virtual void onPointerDisplayIdChanged(int32_t displayId, const FloatPoint& position); /* --- PointerControllerPolicyInterface implementation --- */ virtual std::shared_ptr<PointerControllerInterface> createPointerController() override; private: private: sp<InputManagerInterface> mInputManager; sp<InputManagerInterface> mInputManager; Loading Loading @@ -402,8 +406,12 @@ private: // Sprite controller singleton, created on first use. // Sprite controller singleton, created on first use. std::shared_ptr<SpriteController> spriteController{}; std::shared_ptr<SpriteController> spriteController{}; // TODO(b/293587049): Remove when the PointerChoreographer refactoring is complete. // Pointer controller singleton, created and destroyed as needed. // Pointer controller singleton, created and destroyed as needed. std::weak_ptr<PointerController> pointerController{}; std::weak_ptr<PointerController> legacyPointerController{}; // The list of PointerControllers created and managed by the PointerChoreographer. std::list<std::weak_ptr<PointerController>> pointerControllers{}; // Input devices to be disabled // Input devices to be disabled std::set<int32_t> disabledInputDevices{}; std::set<int32_t> disabledInputDevices{}; Loading Loading @@ -443,6 +451,9 @@ private: jmethodID method, const char* methodName, jmethodID method, const char* methodName, std::function<T(std::string)> opOnValue = [](auto&& v) { return std::move(v); }); std::function<T(std::string)> opOnValue = [](auto&& v) { return std::move(v); }); void forEachPointerControllerLocked(std::function<void(PointerController&)> apply) REQUIRES(mLock); static inline JNIEnv* jniEnv() { return AndroidRuntime::getJNIEnv(); } static inline JNIEnv* jniEnv() { return AndroidRuntime::getJNIEnv(); } }; }; Loading @@ -452,7 +463,7 @@ NativeInputManager::NativeInputManager(jobject serviceObj, const sp<Looper>& loo mServiceObj = env->NewGlobalRef(serviceObj); mServiceObj = env->NewGlobalRef(serviceObj); InputManager* im = new InputManager(this, *this); InputManager* im = new InputManager(this, *this, *this); mInputManager = im; mInputManager = im; defaultServiceManager()->addService(String16("inputflinger"), im); defaultServiceManager()->addService(String16("inputflinger"), im); } } Loading @@ -465,10 +476,8 @@ NativeInputManager::~NativeInputManager() { void NativeInputManager::dump(std::string& dump) { void NativeInputManager::dump(std::string& dump) { dump += "Input Manager State:\n"; dump += "Input Manager State:\n"; { dump += StringPrintf(INDENT "Interactive: %s\n", toString(mInteractive.load())); dump += StringPrintf(INDENT "Interactive: %s\n", toString(mInteractive.load())); } { // acquire lock { std::scoped_lock _l(mLock); std::scoped_lock _l(mLock); dump += StringPrintf(INDENT "System UI Lights Out: %s\n", dump += StringPrintf(INDENT "System UI Lights Out: %s\n", toString(mLocked.systemUiLightsOut)); toString(mLocked.systemUiLightsOut)); Loading @@ -480,11 +489,8 @@ void NativeInputManager::dump(std::string& dump) { dump += StringPrintf(INDENT "Pointer Capture: %s, seq=%" PRIu32 "\n", dump += StringPrintf(INDENT "Pointer Capture: %s, seq=%" PRIu32 "\n", mLocked.pointerCaptureRequest.enable ? "Enabled" : "Disabled", mLocked.pointerCaptureRequest.enable ? "Enabled" : "Disabled", mLocked.pointerCaptureRequest.seq); mLocked.pointerCaptureRequest.seq); auto pointerController = mLocked.pointerController.lock(); forEachPointerControllerLocked([&dump](PointerController& pc) { pc.dump(dump); }); if (pointerController != nullptr) { } // release lock pointerController->dump(dump); } } dump += "\n"; dump += "\n"; mInputManager->dump(dump); mInputManager->dump(dump); Loading Loading @@ -524,10 +530,9 @@ void NativeInputManager::setDisplayViewports(JNIEnv* env, jobjectArray viewportO { // acquire lock { // acquire lock std::scoped_lock _l(mLock); std::scoped_lock _l(mLock); mLocked.viewports = viewports; mLocked.viewports = viewports; std::shared_ptr<PointerController> controller = mLocked.pointerController.lock(); forEachPointerControllerLocked([viewports = std::move(viewports)](PointerController& pc) { if (controller != nullptr) { pc.onDisplayViewportsUpdated(viewports); controller->onDisplayViewportsUpdated(mLocked.viewports); }); } } // release lock } // release lock mInputManager->getReader().requestRefreshConfiguration( mInputManager->getReader().requestRefreshConfiguration( Loading Loading @@ -700,23 +705,51 @@ std::unordered_map<std::string, T> NativeInputManager::readMapFromInterleavedJav return map; return map; } } void NativeInputManager::forEachPointerControllerLocked( std::function<void(PointerController&)> apply) { if (auto pc = mLocked.legacyPointerController.lock(); pc) { apply(*pc); } auto it = mLocked.pointerControllers.begin(); while (it != mLocked.pointerControllers.end()) { auto pc = it->lock(); if (!pc) { it = mLocked.pointerControllers.erase(it); continue; } apply(*pc); } } // TODO(b/293587049): Remove the old way of obtaining PointerController when the // PointerChoreographer refactoring is complete. std::shared_ptr<PointerControllerInterface> NativeInputManager::obtainPointerController( std::shared_ptr<PointerControllerInterface> NativeInputManager::obtainPointerController( int32_t /* deviceId */) { int32_t /* deviceId */) { ATRACE_CALL(); ATRACE_CALL(); std::scoped_lock _l(mLock); std::scoped_lock _l(mLock); std::shared_ptr<PointerController> controller = mLocked.pointerController.lock(); std::shared_ptr<PointerController> controller = mLocked.legacyPointerController.lock(); if (controller == nullptr) { if (controller == nullptr) { ensureSpriteControllerLocked(); ensureSpriteControllerLocked(); controller = PointerController::create(this, mLooper, *mLocked.spriteController); controller = PointerController::create(this, mLooper, *mLocked.spriteController); mLocked.pointerController = controller; mLocked.legacyPointerController = controller; updateInactivityTimeoutLocked(); updateInactivityTimeoutLocked(); } } return controller; return controller; } } std::shared_ptr<PointerControllerInterface> NativeInputManager::createPointerController() { std::scoped_lock _l(mLock); ensureSpriteControllerLocked(); std::shared_ptr<PointerController> pc = PointerController::create(this, mLooper, *mLocked.spriteController); mLocked.pointerControllers.emplace_back(pc); return pc; } void NativeInputManager::onPointerDisplayIdChanged(int32_t pointerDisplayId, void NativeInputManager::onPointerDisplayIdChanged(int32_t pointerDisplayId, const FloatPoint& position) { const FloatPoint& position) { JNIEnv* env = jniEnv(); JNIEnv* env = jniEnv(); Loading Loading @@ -1071,13 +1104,9 @@ void NativeInputManager::setSystemUiLightsOut(bool lightsOut) { } } void NativeInputManager::updateInactivityTimeoutLocked() REQUIRES(mLock) { void NativeInputManager::updateInactivityTimeoutLocked() REQUIRES(mLock) { std::shared_ptr<PointerController> controller = mLocked.pointerController.lock(); forEachPointerControllerLocked([lightsOut = mLocked.systemUiLightsOut](PointerController& pc) { if (controller == nullptr) { pc.setInactivityTimeout(lightsOut ? InactivityTimeout::SHORT : InactivityTimeout::NORMAL); return; }); } controller->setInactivityTimeout(mLocked.systemUiLightsOut ? InactivityTimeout::SHORT : InactivityTimeout::NORMAL); } } void NativeInputManager::setPointerDisplayId(int32_t displayId) { void NativeInputManager::setPointerDisplayId(int32_t displayId) { Loading Loading @@ -1247,7 +1276,7 @@ void NativeInputManager::reloadCalibration() { void NativeInputManager::setPointerIconType(PointerIconStyle iconId) { void NativeInputManager::setPointerIconType(PointerIconStyle iconId) { std::scoped_lock _l(mLock); std::scoped_lock _l(mLock); std::shared_ptr<PointerController> controller = mLocked.pointerController.lock(); std::shared_ptr<PointerController> controller = mLocked.legacyPointerController.lock(); if (controller != nullptr) { if (controller != nullptr) { controller->updatePointerIcon(iconId); controller->updatePointerIcon(iconId); } } Loading @@ -1255,15 +1284,12 @@ void NativeInputManager::setPointerIconType(PointerIconStyle iconId) { void NativeInputManager::reloadPointerIcons() { void NativeInputManager::reloadPointerIcons() { std::scoped_lock _l(mLock); std::scoped_lock _l(mLock); std::shared_ptr<PointerController> controller = mLocked.pointerController.lock(); forEachPointerControllerLocked([](PointerController& pc) { pc.reloadPointerResources(); }); if (controller != nullptr) { controller->reloadPointerResources(); } } } void NativeInputManager::setCustomPointerIcon(const SpriteIcon& icon) { void NativeInputManager::setCustomPointerIcon(const SpriteIcon& icon) { std::scoped_lock _l(mLock); std::scoped_lock _l(mLock); std::shared_ptr<PointerController> controller = mLocked.pointerController.lock(); std::shared_ptr<PointerController> controller = mLocked.legacyPointerController.lock(); if (controller != nullptr) { if (controller != nullptr) { controller->setCustomPointerIcon(icon); controller->setCustomPointerIcon(icon); } } Loading Loading @@ -1656,7 +1682,7 @@ void NativeInputManager::setStylusButtonMotionEventsEnabled(bool enabled) { FloatPoint NativeInputManager::getMouseCursorPosition() { FloatPoint NativeInputManager::getMouseCursorPosition() { std::scoped_lock _l(mLock); std::scoped_lock _l(mLock); const auto pc = mLocked.pointerController.lock(); const auto pc = mLocked.legacyPointerController.lock(); if (!pc) return {AMOTION_EVENT_INVALID_CURSOR_POSITION, AMOTION_EVENT_INVALID_CURSOR_POSITION}; if (!pc) return {AMOTION_EVENT_INVALID_CURSOR_POSITION, AMOTION_EVENT_INVALID_CURSOR_POSITION}; return pc->getPosition(); return pc->getPosition(); Loading