diff options
author | Ivan Solovev <ivan.solovev@qt.io> | 2022-05-10 16:01:48 +0200 |
---|---|---|
committer | Ivan Solovev <ivan.solovev@qt.io> | 2022-05-16 15:16:35 +0200 |
commit | 0613146d210e494bf98e0e4de97e03fc5021736e (patch) | |
tree | a0742b5462c4ae80b4b42677cba8cdcce3eb5a61 /src/android | |
parent | 53ee4c8b1f7ae72e7005166e1c0dbc4659f2ab32 (diff) |
Android A11Y: handle LocationChanged event only for focused element
LocationChanged event unconditionally triggered invalidateVirtualViewId
call. That call results in TYPE_WINDOW_CONTENT_CHANGED Android event,
which causes a lot of background processing.
That is not correct, because LocationChanged event is generated by
every accessible element, not only the one that has A11Y focus.
This patch checks event->uniqueId(), and processes only events that
come from the focused accessible element.
Done-with: Mike Achtelik <mike.achtelik@gmail.com>
Task-number: QTBUG-102594
Pick-to: 6.3 6.2 5.15
Change-Id: I6b941733c9d215fed5ee5a7aeeb5be234add9ebe
Reviewed-by: Mike Achtelik <mike.achtelik@gmail.com>
Reviewed-by: Jan Arve Sæther <jan-arve.saether@qt.io>
Diffstat (limited to 'src/android')
4 files changed, 9 insertions, 8 deletions
diff --git a/src/android/jar/src/org/qtproject/qt/android/QtActivityDelegate.java b/src/android/jar/src/org/qtproject/qt/android/QtActivityDelegate.java index 24098de241..bf9a7d5961 100644 --- a/src/android/jar/src/org/qtproject/qt/android/QtActivityDelegate.java +++ b/src/android/jar/src/org/qtproject/qt/android/QtActivityDelegate.java @@ -949,11 +949,11 @@ public class QtActivityDelegate m_splashScreen.startAnimation(fadeOut); } - public void notifyAccessibilityLocationChange() + public void notifyAccessibilityLocationChange(int viewId) { if (m_accessibilityDelegate == null) return; - m_accessibilityDelegate.notifyLocationChange(); + m_accessibilityDelegate.notifyLocationChange(viewId); } public void notifyObjectHide(int viewId, int parentId) diff --git a/src/android/jar/src/org/qtproject/qt/android/QtNative.java b/src/android/jar/src/org/qtproject/qt/android/QtNative.java index e750159d8c..bc090db25d 100644 --- a/src/android/jar/src/org/qtproject/qt/android/QtNative.java +++ b/src/android/jar/src/org/qtproject/qt/android/QtNative.java @@ -973,13 +973,13 @@ public class QtNative return m_activityDelegate.isKeyboardVisible() && !m_isKeyboardHiding; } - private static void notifyAccessibilityLocationChange() + private static void notifyAccessibilityLocationChange(final int viewId) { runAction(new Runnable() { @Override public void run() { if (m_activityDelegate != null) { - m_activityDelegate.notifyAccessibilityLocationChange(); + m_activityDelegate.notifyAccessibilityLocationChange(viewId); } } }); diff --git a/src/android/jar/src/org/qtproject/qt/android/accessibility/QtAccessibilityDelegate.java b/src/android/jar/src/org/qtproject/qt/android/accessibility/QtAccessibilityDelegate.java index c5f5fb92e6..c8503b42da 100644 --- a/src/android/jar/src/org/qtproject/qt/android/accessibility/QtAccessibilityDelegate.java +++ b/src/android/jar/src/org/qtproject/qt/android/accessibility/QtAccessibilityDelegate.java @@ -193,9 +193,10 @@ public class QtAccessibilityDelegate extends View.AccessibilityDelegate return true; } - public void notifyLocationChange() + public void notifyLocationChange(int viewId) { - invalidateVirtualViewId(m_focusedVirtualViewId); + if (m_focusedVirtualViewId == viewId) + invalidateVirtualViewId(m_focusedVirtualViewId); } public void notifyObjectHide(int viewId, int parentId) diff --git a/src/android/java/src/org/qtproject/qt/android/bindings/QtActivity.java b/src/android/java/src/org/qtproject/qt/android/bindings/QtActivity.java index 0242f05693..47b500fbf3 100644 --- a/src/android/java/src/org/qtproject/qt/android/bindings/QtActivity.java +++ b/src/android/java/src/org/qtproject/qt/android/bindings/QtActivity.java @@ -1133,9 +1133,9 @@ public class QtActivity extends Activity QtNative.activityDelegate().updateSelection(selStart, selEnd, candidatesStart, candidatesEnd); } - public void notifyAccessibilityLocationChange() + public void notifyAccessibilityLocationChange(int viewId) { - QtNative.activityDelegate().notifyAccessibilityLocationChange(); + QtNative.activityDelegate().notifyAccessibilityLocationChange(viewId); } public void notifyObjectHide(int viewId, int parentId) |