summaryrefslogtreecommitdiffstats
path: root/src/android
diff options
context:
space:
mode:
authorAssam Boudjelthia <assam.boudjelthia@qt.io>2022-07-08 13:46:37 +0300
committerAssam Boudjelthia <assam.boudjelthia@qt.io>2022-07-15 13:49:46 +0300
commit37d593b9354e8f10558ae618e548748252f44d73 (patch)
tree3b798bce5d2d62b59a13a009e706dc63d616ce37 /src/android
parent791b29e3fcac8779f4aa3beb963d8c975e269b35 (diff)
Android A11Y: Add content change type to content change event
This fixes a problem where the accessibility tree is not correctly updated, when using e.g. a StackView. The problem was, that sometimes when pushing items of the previous view where still selectable via TalkBack. When popping this sometimes lead to some views not being selectable because the subtree wasn't updated. To solve this, lets tell android directly that the subtree changed when invalidating a view. Fixes: QTBUG-102825 Change-Id: Ifbf8da1b95f02935b9bcffabfe821547b1128103 Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io> (cherry picked from commit d48ebb02fb171d0b6fe3749a28a312fc624f8b8e) Reviewed-by: Ivan Solovev <ivan.solovev@qt.io>
Diffstat (limited to 'src/android')
-rw-r--r--src/android/jar/src/org/qtproject/qt5/android/accessibility/QtAccessibilityDelegate.java26
1 files changed, 19 insertions, 7 deletions
diff --git a/src/android/jar/src/org/qtproject/qt5/android/accessibility/QtAccessibilityDelegate.java b/src/android/jar/src/org/qtproject/qt5/android/accessibility/QtAccessibilityDelegate.java
index 3b910e288d..5913187acc 100644
--- a/src/android/jar/src/org/qtproject/qt5/android/accessibility/QtAccessibilityDelegate.java
+++ b/src/android/jar/src/org/qtproject/qt5/android/accessibility/QtAccessibilityDelegate.java
@@ -255,10 +255,14 @@ public class QtAccessibilityDelegate extends View.AccessibilityDelegate
public boolean sendEventForVirtualViewId(int virtualViewId, int eventType)
{
- if ((virtualViewId == INVALID_ID) || !m_manager.isEnabled()) {
- Log.w(TAG, "sendEventForVirtualViewId for invalid view");
+ final AccessibilityEvent event = getEventForVirtualViewId(virtualViewId, eventType);
+ return sendAccessibilityEvent(event);
+ }
+
+ public boolean sendAccessibilityEvent(AccessibilityEvent event)
+ {
+ if (event == null)
return false;
- }
final ViewGroup group = (ViewGroup) m_view.getParent();
if (group == null) {
@@ -266,15 +270,18 @@ public class QtAccessibilityDelegate extends View.AccessibilityDelegate
return false;
}
- final AccessibilityEvent event;
- event = getEventForVirtualViewId(virtualViewId, eventType);
return group.requestSendAccessibilityEvent(m_view, event);
}
public void invalidateVirtualViewId(int virtualViewId)
{
- if (virtualViewId != INVALID_ID)
- sendEventForVirtualViewId(virtualViewId, AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED);
+ final AccessibilityEvent event = getEventForVirtualViewId(virtualViewId, AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED);
+
+ if (event == null)
+ return;
+
+ event.setContentChangeTypes(AccessibilityEvent.CONTENT_CHANGE_TYPE_SUBTREE);
+ sendAccessibilityEvent(event);
}
private void setHoveredVirtualViewId(int virtualViewId)
@@ -291,6 +298,11 @@ public class QtAccessibilityDelegate extends View.AccessibilityDelegate
private AccessibilityEvent getEventForVirtualViewId(int virtualViewId, int eventType)
{
+ if ((virtualViewId == INVALID_ID) || !m_manager.isEnabled()) {
+ Log.w(TAG, "getEventForVirtualViewId for invalid view");
+ return null;
+ }
+
final AccessibilityEvent event = AccessibilityEvent.obtain(eventType);
event.setEnabled(true);