diff options
Diffstat (limited to 'src/android/jar/src/org/qtproject/qt5')
3 files changed, 78 insertions, 5 deletions
diff --git a/src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java b/src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java index 742505c39a..b06ccc5ec6 100644 --- a/src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java +++ b/src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java @@ -231,6 +231,8 @@ public class QtActivityDelegate public static final int ApplicationInactive = 0x2; public static final int ApplicationActive = 0x4; + private QtAccessibilityDelegate m_accessibilityDelegate = null; + public boolean setKeyboardVisibility(boolean visibility, long timeStamp) { @@ -859,10 +861,30 @@ public class QtActivityDelegate m_splashScreen.startAnimation(fadeOut); } + public void notifyAccessibilityLocationChange() + { + if (m_accessibilityDelegate == null) + return; + m_accessibilityDelegate.notifyLocationChange(); + } + + public void notifyObjectHide(int viewId) + { + if (m_accessibilityDelegate == null) + return; + m_accessibilityDelegate.notifyObjectHide(viewId); + } + + public void notifyObjectFocus(int viewId) + { + if (m_accessibilityDelegate == null) + return; + m_accessibilityDelegate.notifyObjectFocus(viewId); + } public void initializeAccessibility() { - new QtAccessibilityDelegate(m_activity, m_layout, this); + m_accessibilityDelegate = new QtAccessibilityDelegate(m_activity, m_layout, this); } public void onWindowFocusChanged(boolean hasFocus) { diff --git a/src/android/jar/src/org/qtproject/qt5/android/QtNative.java b/src/android/jar/src/org/qtproject/qt5/android/QtNative.java index 341ac7b75e..39f1220722 100644 --- a/src/android/jar/src/org/qtproject/qt5/android/QtNative.java +++ b/src/android/jar/src/org/qtproject/qt5/android/QtNative.java @@ -929,6 +929,42 @@ public class QtNative }); } + private static void notifyAccessibilityLocationChange() + { + runAction(new Runnable() { + @Override + public void run() { + if (m_activityDelegate != null) { + m_activityDelegate.notifyAccessibilityLocationChange(); + } + } + }); + } + + private static void notifyObjectHide(final int viewId) + { + runAction(new Runnable() { + @Override + public void run() { + if (m_activityDelegate != null) { + m_activityDelegate.notifyObjectHide(viewId); + } + } + }); + } + + private static void notifyObjectFocus(final int viewId) + { + runAction(new Runnable() { + @Override + public void run() { + if (m_activityDelegate != null) { + m_activityDelegate.notifyObjectFocus(viewId); + } + } + }); + } + private static void registerClipboardManager() { if (m_service == null || m_activity != null) { // Avoid freezing if only service 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 79caaf318e..a607eccc85 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 @@ -191,6 +191,23 @@ public class QtAccessibilityDelegate extends View.AccessibilityDelegate return true; } + public void notifyLocationChange() + { + invalidateVirtualViewId(m_focusedVirtualViewId); + } + + public void notifyObjectHide(int viewId) + { + invalidateVirtualViewId(viewId); + } + + public void notifyObjectFocus(int viewId) + { + m_view.invalidate(); + sendEventForVirtualViewId(viewId, + AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED); + } + public boolean sendEventForVirtualViewId(int virtualViewId, int eventType) { if ((virtualViewId == INVALID_ID) || !m_manager.isEnabled()) { @@ -211,7 +228,8 @@ public class QtAccessibilityDelegate extends View.AccessibilityDelegate public void invalidateVirtualViewId(int virtualViewId) { - sendEventForVirtualViewId(virtualViewId, AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED); + if (virtualViewId != INVALID_ID) + sendEventForVirtualViewId(virtualViewId, AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED); } private void setHoveredVirtualViewId(int virtualViewId) @@ -336,9 +354,6 @@ public class QtAccessibilityDelegate extends View.AccessibilityDelegate node.addAction(AccessibilityNodeInfo.ACTION_ACCESSIBILITY_FOCUS); } - int[] ids = QtNativeAccessibility.childIdListForAccessibleObject(virtualViewId); - for (int i = 0; i < ids.length; ++i) - node.addChild(m_view, ids[i]); return node; } |