Android: Propagate a11y ObjectShow events to screen reader
Sending an ObjectShow event, e.g. by setting QQuickItem::visible to true, has to trigger a refresh of the screen reader hierarchy. If the signal is ignored the source of the signal will be ignored by the screen reader. Fixes: QTBUG-122436 Pick-to: 6.5 Change-Id: I32ee2e8b2602cd0dd9b9a83ff1fe426d88d137a8 Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io> (cherry picked from commit efd00066b42d9cbd3a85336f4851213d94cdc28e)
This commit is contained in:
parent
5eecb650f6
commit
56c8ed47a1
@ -176,6 +176,14 @@ abstract class QtActivityDelegateBase
|
||||
m_accessibilityDelegate.notifyObjectHide(viewId, parentId);
|
||||
}
|
||||
|
||||
@UsedFromNativeCode
|
||||
public void notifyObjectShow(int parentId)
|
||||
{
|
||||
if (m_accessibilityDelegate == null)
|
||||
return;
|
||||
m_accessibilityDelegate.notifyObjectShow(parentId);
|
||||
}
|
||||
|
||||
@UsedFromNativeCode
|
||||
public void notifyObjectFocus(int viewId)
|
||||
{
|
||||
|
@ -191,6 +191,15 @@ public class QtAccessibilityDelegate extends View.AccessibilityDelegate
|
||||
});
|
||||
}
|
||||
|
||||
public void notifyObjectShow(int parentId)
|
||||
{
|
||||
QtNative.runAction(() -> {
|
||||
// When the object is shown, we need to notify its parent about
|
||||
// content change, not the shown object itself
|
||||
invalidateVirtualViewId(parentId);
|
||||
});
|
||||
}
|
||||
|
||||
public void notifyObjectFocus(int viewId)
|
||||
{
|
||||
QtNative.runAction(() -> {
|
||||
|
@ -127,6 +127,12 @@ namespace QtAndroidAccessibility
|
||||
QtAndroid::notifyObjectHide(accessibilityObjectId, parentObjectId);
|
||||
}
|
||||
|
||||
void notifyObjectShow(uint accessibilityObjectId)
|
||||
{
|
||||
const auto parentObjectId = parentId_helper(accessibilityObjectId);
|
||||
QtAndroid::notifyObjectShow(parentObjectId);
|
||||
}
|
||||
|
||||
void notifyObjectFocus(uint accessibilityObjectId)
|
||||
{
|
||||
QtAndroid::notifyObjectFocus(accessibilityObjectId);
|
||||
|
@ -18,6 +18,7 @@ namespace QtAndroidAccessibility
|
||||
bool registerNatives(QJniEnvironment &env);
|
||||
void notifyLocationChange(uint accessibilityObjectId);
|
||||
void notifyObjectHide(uint accessibilityObjectId);
|
||||
void notifyObjectShow(uint accessibilityObjectId);
|
||||
void notifyObjectFocus(uint accessibilityObjectId);
|
||||
void notifyValueChanged(uint accessibilityObjectId);
|
||||
void notifyScrolledEvent(uint accessibilityObjectId);
|
||||
|
@ -245,6 +245,12 @@ namespace QtAndroid
|
||||
accessibilityObjectId, parentObjectId);
|
||||
}
|
||||
|
||||
void notifyObjectShow(uint parentObjectId)
|
||||
{
|
||||
qtActivityDelegate().callMethod<void>("notifyObjectShow",
|
||||
parentObjectId);
|
||||
}
|
||||
|
||||
void notifyObjectFocus(uint accessibilityObjectId)
|
||||
{
|
||||
qtActivityDelegate().callMethod<void>("notifyObjectFocus", accessibilityObjectId);
|
||||
|
@ -65,6 +65,7 @@ namespace QtAndroid
|
||||
|
||||
void notifyAccessibilityLocationChange(uint accessibilityObjectId);
|
||||
void notifyObjectHide(uint accessibilityObjectId, uint parentObjectId);
|
||||
void notifyObjectShow(uint parentObjectId);
|
||||
void notifyObjectFocus(uint accessibilityObjectId);
|
||||
void notifyValueChanged(uint accessibilityObjectId, jstring value);
|
||||
void notifyScrolledEvent(uint accessibilityObjectId);
|
||||
|
@ -28,6 +28,8 @@ void QAndroidPlatformAccessibility::notifyAccessibilityUpdate(QAccessibleEvent *
|
||||
QtAndroidAccessibility::notifyLocationChange(event->uniqueId());
|
||||
} else if (event->type() == QAccessible::ObjectHide) {
|
||||
QtAndroidAccessibility::notifyObjectHide(event->uniqueId());
|
||||
} else if (event->type() == QAccessible::ObjectShow) {
|
||||
QtAndroidAccessibility::notifyObjectShow(event->uniqueId());
|
||||
} else if (event->type() == QAccessible::Focus) {
|
||||
QtAndroidAccessibility::notifyObjectFocus(event->uniqueId());
|
||||
} else if (event->type() == QAccessible::ValueChanged) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user