summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms/android/androidjniaccessibility.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/platforms/android/androidjniaccessibility.cpp')
-rw-r--r--src/plugins/platforms/android/androidjniaccessibility.cpp34
1 files changed, 29 insertions, 5 deletions
diff --git a/src/plugins/platforms/android/androidjniaccessibility.cpp b/src/plugins/platforms/android/androidjniaccessibility.cpp
index 6154f4121d2..4168f818a67 100644
--- a/src/plugins/platforms/android/androidjniaccessibility.cpp
+++ b/src/plugins/platforms/android/androidjniaccessibility.cpp
@@ -43,6 +43,11 @@ namespace QtAndroidAccessibility
static jmethodID m_setRangeInfoMethodID = 0;
static jmethodID m_setVisibleToUserMethodID = 0;
+ static int RANGE_TYPE_INT = 0;
+ static int RANGE_TYPE_FLOAT = 0;
+ static int RANGE_TYPE_PERCENT = 0;
+ static int RANGE_TYPE_INDETERMINATE = 0;
+
static bool m_accessibilityActivated = false;
// This object is needed to schedule the execution of the code that
@@ -510,7 +515,6 @@ namespace QtAndroidAccessibility
return QStringLiteral("android.widget.RadioButton");
case QAccessible::Role::ProgressBar:
return QStringLiteral("android.widget.ProgressBar");
- // Range information need to be filled to announce percentages
case QAccessible::Role::SpinBox:
return QStringLiteral("android.widget.NumberPicker");
case QAccessible::Role::WebDocument:
@@ -715,14 +719,14 @@ namespace QtAndroidAccessibility
if (info.hasValue && m_setRangeInfoMethodID) {
int valueType = info.currentValue.typeId();
- jint rangeType = 3; // RANGE_TYPE_INDETERMINATE
+ jint rangeType = RANGE_TYPE_INDETERMINATE;
switch (valueType) {
case QMetaType::Float:
case QMetaType::Double:
- rangeType = 1; // RANGE_TYPE_FLOAT
+ rangeType = RANGE_TYPE_FLOAT;
break;
case QMetaType::Int:
- rangeType = 0; // RANGE_TYPE_INT
+ rangeType = RANGE_TYPE_INT;
break;
}
@@ -730,7 +734,7 @@ namespace QtAndroidAccessibility
float max = info.maxValue.toFloat();
float current = info.currentValue.toFloat();
if (info.role == QAccessible::ProgressBar) {
- rangeType = 2; // RANGE_TYPE_PERCENT
+ rangeType = RANGE_TYPE_PERCENT;
current = 100 * (current - min) / (max - min);
min = 0.0f;
max = 100.0f;
@@ -800,6 +804,14 @@ namespace QtAndroidAccessibility
return false; \
}
+#define CHECK_AND_INIT_STATIC_FIELD(TYPE, VAR, CLASS, FIELD_NAME) \
+ if (env.findStaticField<TYPE>(CLASS, FIELD_NAME) == nullptr) { \
+ __android_log_print(ANDROID_LOG_FATAL, QtAndroid::qtTagText(), \
+ QtAndroid::staticFieldErrorMsgFmt(), FIELD_NAME); \
+ return false; \
+ } \
+ VAR = QJniObject::getStaticField<TYPE>(CLASS, FIELD_NAME);
+
bool registerNatives(QJniEnvironment &env)
{
if (!env.registerNativeMethods("org/qtproject/qt/android/QtNativeAccessibility",
@@ -829,6 +841,18 @@ namespace QtAndroidAccessibility
m_setRangeInfoMethodID, nodeInfoClass, "setRangeInfo",
"(Landroid/view/accessibility/AccessibilityNodeInfo$RangeInfo;)V");
+ jclass rangeInfoClass =
+ env->FindClass("android/view/accessibility/AccessibilityNodeInfo$RangeInfo");
+ CHECK_AND_INIT_STATIC_FIELD(int, RANGE_TYPE_INT, rangeInfoClass, "RANGE_TYPE_INT");
+ CHECK_AND_INIT_STATIC_FIELD(int, RANGE_TYPE_FLOAT, rangeInfoClass, "RANGE_TYPE_FLOAT");
+ CHECK_AND_INIT_STATIC_FIELD(int, RANGE_TYPE_PERCENT, rangeInfoClass, "RANGE_TYPE_PERCENT");
+ if (QtAndroidPrivate::androidSdkVersion() >= 36) {
+ CHECK_AND_INIT_STATIC_FIELD(int, RANGE_TYPE_INDETERMINATE, rangeInfoClass,
+ "RANGE_TYPE_INDETERMINATE");
+ } else {
+ RANGE_TYPE_INDETERMINATE = RANGE_TYPE_FLOAT;
+ }
+
return true;
}
}