Android: private export GenericMotionEventListener and KeyEventListener
Partially reverts ac7f22ed0a4bb25146b87c0f6be54323909ea401. Bring back the following to qjnihelpers_p.h so they can be exported as private APIs used to handle event listeners. * GenericMotionEventListener and KeyEventListener * register and unregister listener calls Task-number: QTBUG-118077 Change-Id: I5b9c7073801f0b1305237184bb2ab91678e1b1b1 Reviewed-by: Andy Nichols <andy.nichols@qt.io> Reviewed-by: Tinja Paavoseppä <tinja.paavoseppa@qt.io> (cherry picked from commit 6b105c54eee069f6ddeeac41d9f93ad533f24586) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
parent
1a833d82f4
commit
707388775e
@ -18,6 +18,10 @@
|
|||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
|
Q_DECLARE_JNI_CLASS(QtInputDelegate, "org/qtproject/qt/android/QtInputDelegate");
|
||||||
|
Q_DECLARE_JNI_CLASS(MotionEvent, "android/view/MotionEvent");
|
||||||
|
Q_DECLARE_JNI_CLASS(KeyEvent, "android/view/KeyEvent");
|
||||||
|
|
||||||
namespace QtAndroidPrivate {
|
namespace QtAndroidPrivate {
|
||||||
// *Listener virtual function implementations.
|
// *Listener virtual function implementations.
|
||||||
// Defined out-of-line to pin the vtable/type_info.
|
// Defined out-of-line to pin the vtable/type_info.
|
||||||
@ -141,6 +145,68 @@ void QtAndroidPrivate::handleNewIntent(JNIEnv *env, jobject intent)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QtAndroidPrivate::GenericMotionEventListener::~GenericMotionEventListener() {}
|
||||||
|
namespace {
|
||||||
|
struct GenericMotionEventListeners {
|
||||||
|
QMutex mutex;
|
||||||
|
QList<QtAndroidPrivate::GenericMotionEventListener *> listeners;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
Q_GLOBAL_STATIC(GenericMotionEventListeners, g_genericMotionEventListeners)
|
||||||
|
|
||||||
|
static jboolean dispatchGenericMotionEvent(JNIEnv *, jclass, QtJniTypes::MotionEvent event)
|
||||||
|
{
|
||||||
|
jboolean ret = JNI_FALSE;
|
||||||
|
QMutexLocker locker(&g_genericMotionEventListeners()->mutex);
|
||||||
|
for (auto *listener : std::as_const(g_genericMotionEventListeners()->listeners))
|
||||||
|
ret |= listener->handleGenericMotionEvent(event.object());
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
Q_DECLARE_JNI_NATIVE_METHOD(dispatchGenericMotionEvent);
|
||||||
|
|
||||||
|
QtAndroidPrivate::KeyEventListener::~KeyEventListener() {}
|
||||||
|
namespace {
|
||||||
|
struct KeyEventListeners {
|
||||||
|
QMutex mutex;
|
||||||
|
QList<QtAndroidPrivate::KeyEventListener *> listeners;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
Q_GLOBAL_STATIC(KeyEventListeners, g_keyEventListeners)
|
||||||
|
|
||||||
|
static jboolean dispatchKeyEvent(JNIEnv *, jclass, QtJniTypes::KeyEvent event)
|
||||||
|
{
|
||||||
|
jboolean ret = JNI_FALSE;
|
||||||
|
QMutexLocker locker(&g_keyEventListeners()->mutex);
|
||||||
|
for (auto *listener : std::as_const(g_keyEventListeners()->listeners))
|
||||||
|
ret |= listener->handleKeyEvent(event.object());
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
Q_DECLARE_JNI_NATIVE_METHOD(dispatchKeyEvent);
|
||||||
|
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
class ResumePauseListeners
|
class ResumePauseListeners
|
||||||
{
|
{
|
||||||
@ -245,6 +311,15 @@ jint QtAndroidPrivate::initJNI(JavaVM *vm, JNIEnv *env)
|
|||||||
return JNI_ERR;
|
return JNI_ERR;
|
||||||
|
|
||||||
QJniEnvironment qJniEnv;
|
QJniEnvironment qJniEnv;
|
||||||
|
using namespace QtJniTypes;
|
||||||
|
if (!QtInputDelegate::registerNativeMethods(
|
||||||
|
{ Q_JNI_NATIVE_METHOD(dispatchGenericMotionEvent),
|
||||||
|
Q_JNI_NATIVE_METHOD(dispatchKeyEvent) })) {
|
||||||
|
qCritical() << "Failed to register natives methods for"
|
||||||
|
<< Traits<QtInputDelegate>::className();
|
||||||
|
return JNI_ERR;
|
||||||
|
}
|
||||||
|
|
||||||
if (!registerPermissionNatives(qJniEnv))
|
if (!registerPermissionNatives(qJniEnv))
|
||||||
return JNI_ERR;
|
return JNI_ERR;
|
||||||
|
|
||||||
|
@ -56,6 +56,20 @@ namespace QtAndroidPrivate
|
|||||||
virtual jobject onBind(jobject intent) = 0;
|
virtual jobject onBind(jobject intent) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class Q_CORE_EXPORT GenericMotionEventListener
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
virtual ~GenericMotionEventListener();
|
||||||
|
virtual bool handleGenericMotionEvent(jobject event) = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
class Q_CORE_EXPORT KeyEventListener
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
virtual ~KeyEventListener();
|
||||||
|
virtual bool handleKeyEvent(jobject event) = 0;
|
||||||
|
};
|
||||||
|
|
||||||
Q_CORE_EXPORT QtJniTypes::Activity activity();
|
Q_CORE_EXPORT QtJniTypes::Activity activity();
|
||||||
Q_CORE_EXPORT QtJniTypes::Service service();
|
Q_CORE_EXPORT QtJniTypes::Service service();
|
||||||
Q_CORE_EXPORT QtJniTypes::Context context();
|
Q_CORE_EXPORT QtJniTypes::Context context();
|
||||||
@ -77,6 +91,12 @@ namespace QtAndroidPrivate
|
|||||||
Q_CORE_EXPORT void registerNewIntentListener(NewIntentListener *listener);
|
Q_CORE_EXPORT void registerNewIntentListener(NewIntentListener *listener);
|
||||||
Q_CORE_EXPORT void unregisterNewIntentListener(NewIntentListener *listener);
|
Q_CORE_EXPORT void unregisterNewIntentListener(NewIntentListener *listener);
|
||||||
|
|
||||||
|
Q_CORE_EXPORT void registerGenericMotionEventListener(GenericMotionEventListener *listener);
|
||||||
|
Q_CORE_EXPORT void unregisterGenericMotionEventListener(GenericMotionEventListener *listener);
|
||||||
|
|
||||||
|
Q_CORE_EXPORT void registerKeyEventListener(KeyEventListener *listener);
|
||||||
|
Q_CORE_EXPORT void unregisterKeyEventListener(KeyEventListener *listener);
|
||||||
|
|
||||||
Q_CORE_EXPORT void handlePause();
|
Q_CORE_EXPORT void handlePause();
|
||||||
Q_CORE_EXPORT void handleResume();
|
Q_CORE_EXPORT void handleResume();
|
||||||
Q_CORE_EXPORT void registerResumePauseListener(ResumePauseListener *listener);
|
Q_CORE_EXPORT void registerResumePauseListener(ResumePauseListener *listener);
|
||||||
|
@ -38,66 +38,6 @@ namespace QtAndroidInput
|
|||||||
|
|
||||||
static QPointer<QWindow> m_mouseGrabber;
|
static QPointer<QWindow> m_mouseGrabber;
|
||||||
|
|
||||||
GenericMotionEventListener::~GenericMotionEventListener() {}
|
|
||||||
namespace {
|
|
||||||
struct GenericMotionEventListeners {
|
|
||||||
QMutex mutex;
|
|
||||||
QList<QtAndroidInput::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;
|
|
||||||
}
|
|
||||||
|
|
||||||
KeyEventListener::~KeyEventListener() {}
|
|
||||||
namespace {
|
|
||||||
struct KeyEventListeners {
|
|
||||||
QMutex mutex;
|
|
||||||
QList<QtAndroidInput::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;
|
|
||||||
}
|
|
||||||
|
|
||||||
void registerGenericMotionEventListener(QtAndroidInput::GenericMotionEventListener *listener)
|
|
||||||
{
|
|
||||||
QMutexLocker locker(&g_genericMotionEventListeners()->mutex);
|
|
||||||
g_genericMotionEventListeners()->listeners.push_back(listener);
|
|
||||||
}
|
|
||||||
|
|
||||||
void unregisterGenericMotionEventListener(QtAndroidInput::GenericMotionEventListener *listener)
|
|
||||||
{
|
|
||||||
QMutexLocker locker(&g_genericMotionEventListeners()->mutex);
|
|
||||||
g_genericMotionEventListeners()->listeners.removeOne(listener);
|
|
||||||
}
|
|
||||||
|
|
||||||
void registerKeyEventListener(QtAndroidInput::KeyEventListener *listener)
|
|
||||||
{
|
|
||||||
QMutexLocker locker(&g_keyEventListeners()->mutex);
|
|
||||||
g_keyEventListeners()->listeners.push_back(listener);
|
|
||||||
}
|
|
||||||
|
|
||||||
void unregisterKeyEventListener(QtAndroidInput::KeyEventListener *listener)
|
|
||||||
{
|
|
||||||
QMutexLocker locker(&g_keyEventListeners()->mutex);
|
|
||||||
g_keyEventListeners()->listeners.removeOne(listener);
|
|
||||||
}
|
|
||||||
|
|
||||||
QJniObject qtLayout()
|
QJniObject qtLayout()
|
||||||
{
|
{
|
||||||
AndroidBackendRegister *reg = QtAndroid::backendRegister();
|
AndroidBackendRegister *reg = QtAndroid::backendRegister();
|
||||||
@ -978,8 +918,6 @@ namespace QtAndroidInput
|
|||||||
{"keyboardVisibilityChanged", "(Z)V", (void *)keyboardVisibilityChanged},
|
{"keyboardVisibilityChanged", "(Z)V", (void *)keyboardVisibilityChanged},
|
||||||
{"keyboardGeometryChanged", "(IIII)V", (void *)keyboardGeometryChanged},
|
{"keyboardGeometryChanged", "(IIII)V", (void *)keyboardGeometryChanged},
|
||||||
{"handleLocationChanged", "(III)V", (void *)handleLocationChanged},
|
{"handleLocationChanged", "(III)V", (void *)handleLocationChanged},
|
||||||
{"dispatchGenericMotionEvent", "(Landroid/view/MotionEvent;)Z", reinterpret_cast<void *>(dispatchGenericMotionEvent)},
|
|
||||||
{"dispatchKeyEvent", "(Landroid/view/KeyEvent;)Z", reinterpret_cast<void *>(dispatchKeyEvent)},
|
|
||||||
};
|
};
|
||||||
|
|
||||||
bool registerNatives(QJniEnvironment &env)
|
bool registerNatives(QJniEnvironment &env)
|
||||||
|
@ -31,26 +31,6 @@ namespace QtAndroidInput
|
|||||||
QPoint cursor = QPoint(), QPoint anchor = QPoint(), bool rtl = false);
|
QPoint cursor = QPoint(), QPoint anchor = QPoint(), bool rtl = false);
|
||||||
int getSelectHandleWidth();
|
int getSelectHandleWidth();
|
||||||
|
|
||||||
class GenericMotionEventListener
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
virtual ~GenericMotionEventListener();
|
|
||||||
virtual bool handleGenericMotionEvent(jobject event) = 0;
|
|
||||||
};
|
|
||||||
|
|
||||||
class KeyEventListener
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
virtual ~KeyEventListener();
|
|
||||||
virtual bool handleKeyEvent(jobject event) = 0;
|
|
||||||
};
|
|
||||||
|
|
||||||
void registerGenericMotionEventListener(GenericMotionEventListener *listener);
|
|
||||||
void unregisterGenericMotionEventListener(GenericMotionEventListener *listener);
|
|
||||||
|
|
||||||
void registerKeyEventListener(KeyEventListener *listener);
|
|
||||||
void unregisterKeyEventListener(KeyEventListener *listener);
|
|
||||||
|
|
||||||
bool registerNatives(QJniEnvironment &env);
|
bool registerNatives(QJniEnvironment &env);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user