diff options
Diffstat (limited to 'src/plugins/platforms/android/androidjniaccessibility.cpp')
| -rw-r--r-- | src/plugins/platforms/android/androidjniaccessibility.cpp | 34 |
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; } } |
