summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms/android
diff options
context:
space:
mode:
authorFrederik Gladhorn <frederik.gladhorn@digia.com>2013-10-24 12:48:39 +0200
committerFrederik Gladhorn <frederik.gladhorn@digia.com>2013-10-24 12:48:42 +0200
commit840f6a40e6218992b5b9d451ee3c0886a4846c89 (patch)
tree2b808decc7adf5218b810d2de6b45c5a8b4cfc42 /src/plugins/platforms/android
parent109bf980b37fed405c6c1eb14cb9c83ff897e389 (diff)
parent2e3870fe37d36ccf4bd84eb90e1d5e08ad00c1bc (diff)
Merge remote-tracking branch 'origin/stable' into dev
Diffstat (limited to 'src/plugins/platforms/android')
-rw-r--r--src/plugins/platforms/android/src/androidjniaccessibility.cpp18
-rw-r--r--src/plugins/platforms/android/src/androidjniinput.cpp57
-rw-r--r--src/plugins/platforms/android/src/androidjnimain.cpp7
-rw-r--r--src/plugins/platforms/android/src/qandroidplatformintegration.cpp1
-rw-r--r--src/plugins/platforms/android/src/qandroidplatformmenu.cpp8
5 files changed, 71 insertions, 20 deletions
diff --git a/src/plugins/platforms/android/src/androidjniaccessibility.cpp b/src/plugins/platforms/android/src/androidjniaccessibility.cpp
index 07f3371e72..a27d9f5aed 100644
--- a/src/plugins/platforms/android/src/androidjniaccessibility.cpp
+++ b/src/plugins/platforms/android/src/androidjniaccessibility.cpp
@@ -164,7 +164,7 @@ if (!clazz) { \
//__android_log_print(ANDROID_LOG_FATAL, m_qtTag, m_methodErrorMsg, METHOD_NAME, METHOD_SIGNATURE);
-#define CALL_METHOD(OBJECT, METHOD_NAME, METHOD_SIGNATURE, VALUE) \
+#define CALL_METHOD(OBJECT, METHOD_NAME, METHOD_SIGNATURE, ...) \
{ \
jclass clazz = env->GetObjectClass(OBJECT); \
jmethodID method = env->GetMethodID(clazz, METHOD_NAME, METHOD_SIGNATURE); \
@@ -172,7 +172,7 @@ if (!clazz) { \
__android_log_print(ANDROID_LOG_WARN, m_qtTag, m_methodErrorMsg, METHOD_NAME, METHOD_SIGNATURE); \
return; \
} \
- env->CallVoidMethod(OBJECT, method, VALUE); \
+ env->CallVoidMethod(OBJECT, method, __VA_ARGS__); \
}
@@ -201,9 +201,21 @@ if (!clazz) { \
}
QAccessible::State state = iface->state();
- QString desc = iface->text(QAccessible::Name);
+ // try to fill in the text property, this is what the screen reader reads
+ QString desc = iface->text(QAccessible::Value);
+ if (desc.isEmpty())
+ desc = iface->text(QAccessible::Name);
if (desc.isEmpty())
desc = iface->text(QAccessible::Description);
+ if (QAccessibleTextInterface *textIface = iface->textInterface()) {
+ if (textIface->selectionCount() > 0) {
+ int startSelection;
+ int endSelection;
+ textIface->selection(0, &startSelection, &endSelection);
+ CALL_METHOD(node, "setTextSelection", "(II)V", startSelection, endSelection)
+ }
+ }
+
if ((iface->role() != QAccessible::NoRole) &&
(iface->role() != QAccessible::Client) &&
(iface->role() != QAccessible::Pane)) {
diff --git a/src/plugins/platforms/android/src/androidjniinput.cpp b/src/plugins/platforms/android/src/androidjniinput.cpp
index 4a2d87d6a4..30d4e69afe 100644
--- a/src/plugins/platforms/android/src/androidjniinput.cpp
+++ b/src/plugins/platforms/android/src/androidjniinput.cpp
@@ -228,6 +228,9 @@ namespace QtAndroidInput
return;
QAndroidPlatformIntegration *platformIntegration = QtAndroid::androidPlatformIntegration();
+ if (!platformIntegration)
+ return;
+
QTouchDevice *touchDevice = platformIntegration->touchDevice();
if (touchDevice == 0) {
touchDevice = new QTouchDevice;
@@ -271,8 +274,8 @@ namespace QtAndroidInput
case 0x00000005:
return Qt::Key_Call;
- case 0x0000001b:
- return Qt::Key_WebCam;
+ case 0x0000001b: // KEYCODE_CAMERA
+ return Qt::Key_Camera;
case 0x0000001c:
return Qt::Key_Clear;
@@ -280,7 +283,7 @@ namespace QtAndroidInput
case 0x00000037:
return Qt::Key_Comma;
- case 0x00000043:
+ case 0x00000043: // KEYCODE_DEL
return Qt::Key_Backspace;
case 0x00000017: // KEYCODE_DPAD_CENTER
@@ -398,6 +401,27 @@ namespace QtAndroidInput
case 0x00000018:
return Qt::Key_VolumeUp;
+ case 0x00000011: // KEYCODE_STAR
+ return Qt::Key_Asterisk;
+
+ case 0x00000012: // KEYCODE_POUND
+ return Qt::Key_NumberSign;
+
+ case 0x00000050: // KEYCODE_FOCUS
+ return Qt::Key_CameraFocus;
+
+ case 0x00000070: // KEYCODE_FORWARD_DEL
+ return Qt::Key_Delete;
+
+ case 0x00000080: // KEYCODE_MEDIA_CLOSE
+ return Qt::Key_Close;
+
+ case 0x00000081: // KEYCODE_MEDIA_EJECT
+ return Qt::Key_Eject;
+
+ case 0x00000082: // KEYCODE_MEDIA_RECORD
+ return Qt::Key_MediaRecord;
+
case 0x000000b7: // KEYCODE_PROG_RED
return Qt::Key_Red;
@@ -416,13 +440,30 @@ namespace QtAndroidInput
case 0x000000a7: // KEYCODE_CHANNEL_DOWN
return Qt::Key_ChannelDown;
+ case 0x000000a8: // KEYCODE_ZOOM_IN
+ return Qt::Key_ZoomIn;
+
+ case 0x000000a9: // KEYCODE_ZOOM_OUT
+ return Qt::Key_ZoomOut;
+
+ case 0x000000af: // KEYCODE_CAPTIONS
+ return Qt::Key_Subtitle;
+
+ case 0x000000d0: // KEYCODE_CALENDAR
+ return Qt::Key_Calendar;
+
+ case 0x000000d1: // KEYCODE_MUSIC
+ return Qt::Key_Music;
+
+ case 0x000000d2: // KEYCODE_CALCULATOR
+ return Qt::Key_Calculator;
+
case 0x00000000: // KEYCODE_UNKNOWN
- case 0x00000011: // KEYCODE_STAR ?!?!?
- case 0x00000012: // KEYCODE_POUND ?!?!?
+ return Qt::Key_unknown;
+
case 0x00000053: // KEYCODE_NOTIFICATION ?!?!?
case 0x0000004f: // KEYCODE_HEADSETHOOK ?!?!?
case 0x00000044: // KEYCODE_GRAVE ?!?!?
- case 0x00000050: // KEYCODE_FOCUS ?!?!?
return Qt::Key_Any;
default:
@@ -447,7 +488,7 @@ namespace QtAndroidInput
mapAndroidKey(key),
modifiers,
QChar(unicode),
- true);
+ false);
}
static void keyUp(JNIEnv */*env*/, jobject /*thiz*/, jint key, jint unicode, jint modifier)
@@ -467,7 +508,7 @@ namespace QtAndroidInput
mapAndroidKey(key),
modifiers,
QChar(unicode),
- true);
+ false);
}
diff --git a/src/plugins/platforms/android/src/androidjnimain.cpp b/src/plugins/platforms/android/src/androidjnimain.cpp
index b51c15c5d9..5c9ca798a8 100644
--- a/src/plugins/platforms/android/src/androidjnimain.cpp
+++ b/src/plugins/platforms/android/src/androidjnimain.cpp
@@ -419,14 +419,11 @@ static jboolean startQtAndroidPlugin(JNIEnv* /*env*/, jobject /*object*//*, jobj
static void *startMainMethod(void */*data*/)
{
- char const **params;
- params = static_cast<char const **>(malloc(m_applicationParams.length() * sizeof(char *)));
+ QVarLengthArray<const char *> params(m_applicationParams.size());
for (int i = 0; i < m_applicationParams.size(); i++)
params[i] = static_cast<const char *>(m_applicationParams[i].constData());
- int ret = m_main(m_applicationParams.length(), const_cast<char **>(params));
-
- free(params);
+ int ret = m_main(m_applicationParams.length(), const_cast<char **>(params.data()));
Q_UNUSED(ret);
if (m_mainLibraryHnd) {
diff --git a/src/plugins/platforms/android/src/qandroidplatformintegration.cpp b/src/plugins/platforms/android/src/qandroidplatformintegration.cpp
index 9ce382bd53..a3db421de9 100644
--- a/src/plugins/platforms/android/src/qandroidplatformintegration.cpp
+++ b/src/plugins/platforms/android/src/qandroidplatformintegration.cpp
@@ -42,7 +42,6 @@
#include "qandroidplatformintegration.h"
#include "qabstracteventdispatcher.h"
#include "androidjnimain.h"
-#include <QtGui/private/qpixmap_raster_p.h>
#include <QtGui/qguiapplication.h>
#include <qpa/qwindowsysteminterface.h>
#include <QThread>
diff --git a/src/plugins/platforms/android/src/qandroidplatformmenu.cpp b/src/plugins/platforms/android/src/qandroidplatformmenu.cpp
index 36247e86f9..253c22a12f 100644
--- a/src/plugins/platforms/android/src/qandroidplatformmenu.cpp
+++ b/src/plugins/platforms/android/src/qandroidplatformmenu.cpp
@@ -67,9 +67,11 @@ void QAndroidPlatformMenu::insertMenuItem(QPlatformMenuItem *menuItem, QPlatform
void QAndroidPlatformMenu::removeMenuItem(QPlatformMenuItem *menuItem)
{
QMutexLocker lock(&m_menuItemsMutex);
- m_menuItems.erase(qFind(m_menuItems.begin(),
- m_menuItems.end(),
- static_cast<QAndroidPlatformMenuItem *>(menuItem)));
+ PlatformMenuItemsType::iterator it = qFind(m_menuItems.begin(),
+ m_menuItems.end(),
+ static_cast<QAndroidPlatformMenuItem *>(menuItem));
+ if (it != m_menuItems.end())
+ m_menuItems.erase(it);
}
void QAndroidPlatformMenu::syncMenuItem(QPlatformMenuItem *menuItem)