diff options
author | Assam Boudjelthia <assam.boudjelthia@qt.io> | 2023-09-16 03:31:33 +0300 |
---|---|---|
committer | Assam Boudjelthia <assam.boudjelthia@qt.io> | 2023-10-18 16:54:31 +0300 |
commit | ac7f22ed0a4bb25146b87c0f6be54323909ea401 (patch) | |
tree | dd25e1846c943f6b70a66bf9ddd2b4146dd10763 /src/corelib/kernel/qjnihelpers.cpp | |
parent | ed2fbed47913139c1187ef89b454b36f5f78ac83 (diff) |
Android: move input handling from QtActivityDelegate to separate class
To further simplify the code and logic of the delegate, move keyboard
input code to separate class. Make an input delegate available under the
QtActivityDelegate to allow classes like QtNative and the Activity to
access that. For now, it's okay to leave access from QtNative to that,
but for future even that should be simplified and the Activity should be
accessing that directly.
For the case where the QtInputDelegate needs access to
QtActivityDelegate, for now namely updateFullScreen(), a new Listener
is implemented to be implemented under QtActivityDelegate.
Along the way use newer JNI APIs under C++ QtAndroidInput.
Don't make them static methods, so that it can be possible later to
do various keyboard operations to specific activity and not a global
one.
Task-number: QTBUG-114593
Task-number: QTBUG-118077
Change-Id: I110b897f6f16d0ae5f5a645551b4a82e8ad3f2fb
Reviewed-by: Tinja Paavoseppä <tinja.paavoseppa@qt.io>
Diffstat (limited to 'src/corelib/kernel/qjnihelpers.cpp')
-rw-r--r-- | src/corelib/kernel/qjnihelpers.cpp | 62 |
1 files changed, 0 insertions, 62 deletions
diff --git a/src/corelib/kernel/qjnihelpers.cpp b/src/corelib/kernel/qjnihelpers.cpp index 78d05261e5..47c4e0ed17 100644 --- a/src/corelib/kernel/qjnihelpers.cpp +++ b/src/corelib/kernel/qjnihelpers.cpp @@ -26,8 +26,6 @@ namespace QtAndroidPrivate { ResumePauseListener::~ResumePauseListener() {} void ResumePauseListener::handlePause() {} void ResumePauseListener::handleResume() {} - GenericMotionEventListener::~GenericMotionEventListener() {} - KeyEventListener::~KeyEventListener() {} } static JavaVM *g_javaVM = nullptr; @@ -42,40 +40,6 @@ Q_CONSTINIT static QBasicAtomicInt g_serviceSetupLockers = Q_BASIC_ATOMIC_INITIA Q_GLOBAL_STATIC(QReadWriteLock, g_updateMutex); -namespace { - struct GenericMotionEventListeners { - QMutex mutex; - QList<QtAndroidPrivate::GenericMotionEventListener *> listeners; - }; -} -Q_GLOBAL_STATIC(GenericMotionEventListeners, g_genericMotionEventListeners) - -static jboolean dispatchGenericMotionEvent(JNIEnv *, jclass, jobject event) -{ - jboolean ret = JNI_FALSE; - QMutexLocker locker(&g_genericMotionEventListeners()->mutex); - for (auto *listener : std::as_const(g_genericMotionEventListeners()->listeners)) - ret |= listener->handleGenericMotionEvent(event); - return ret; -} - -namespace { - struct KeyEventListeners { - QMutex mutex; - QList<QtAndroidPrivate::KeyEventListener *> listeners; - }; -} -Q_GLOBAL_STATIC(KeyEventListeners, g_keyEventListeners) - -static jboolean dispatchKeyEvent(JNIEnv *, jclass, jobject event) -{ - jboolean ret = JNI_FALSE; - QMutexLocker locker(&g_keyEventListeners()->mutex); - for (auto *listener : std::as_const(g_keyEventListeners()->listeners)) - ret |= listener->handleKeyEvent(event); - return ret; -} - static jboolean updateNativeActivity(JNIEnv *env, jclass = nullptr) { @@ -272,8 +236,6 @@ jint QtAndroidPrivate::initJNI(JavaVM *vm, JNIEnv *env) } static const JNINativeMethod methods[] = { - {"dispatchGenericMotionEvent", "(Landroid/view/MotionEvent;)Z", reinterpret_cast<void *>(dispatchGenericMotionEvent)}, - {"dispatchKeyEvent", "(Landroid/view/KeyEvent;)Z", reinterpret_cast<void *>(dispatchKeyEvent)}, {"updateNativeActivity", "()Z", reinterpret_cast<void *>(updateNativeActivity) }, }; @@ -331,30 +293,6 @@ jint QtAndroidPrivate::androidSdkVersion() return sdkVersion; } -void QtAndroidPrivate::registerGenericMotionEventListener(QtAndroidPrivate::GenericMotionEventListener *listener) -{ - QMutexLocker locker(&g_genericMotionEventListeners()->mutex); - g_genericMotionEventListeners()->listeners.push_back(listener); -} - -void QtAndroidPrivate::unregisterGenericMotionEventListener(QtAndroidPrivate::GenericMotionEventListener *listener) -{ - QMutexLocker locker(&g_genericMotionEventListeners()->mutex); - g_genericMotionEventListeners()->listeners.removeOne(listener); -} - -void QtAndroidPrivate::registerKeyEventListener(QtAndroidPrivate::KeyEventListener *listener) -{ - QMutexLocker locker(&g_keyEventListeners()->mutex); - g_keyEventListeners()->listeners.push_back(listener); -} - -void QtAndroidPrivate::unregisterKeyEventListener(QtAndroidPrivate::KeyEventListener *listener) -{ - QMutexLocker locker(&g_keyEventListeners()->mutex); - g_keyEventListeners()->listeners.removeOne(listener); -} - void QtAndroidPrivate::waitForServiceSetup() { g_waitForServiceSetupSemaphore->acquire(); |