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);
|
m_accessibilityDelegate.notifyObjectHide(viewId, parentId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@UsedFromNativeCode
|
||||||
|
public void notifyObjectShow(int parentId)
|
||||||
|
{
|
||||||
|
if (m_accessibilityDelegate == null)
|
||||||
|
return;
|
||||||
|
m_accessibilityDelegate.notifyObjectShow(parentId);
|
||||||
|
}
|
||||||
|
|
||||||
@UsedFromNativeCode
|
@UsedFromNativeCode
|
||||||
public void notifyObjectFocus(int viewId)
|
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)
|
public void notifyObjectFocus(int viewId)
|
||||||
{
|
{
|
||||||
QtNative.runAction(() -> {
|
QtNative.runAction(() -> {
|
||||||
|
@ -127,6 +127,12 @@ namespace QtAndroidAccessibility
|
|||||||
QtAndroid::notifyObjectHide(accessibilityObjectId, parentObjectId);
|
QtAndroid::notifyObjectHide(accessibilityObjectId, parentObjectId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void notifyObjectShow(uint accessibilityObjectId)
|
||||||
|
{
|
||||||
|
const auto parentObjectId = parentId_helper(accessibilityObjectId);
|
||||||
|
QtAndroid::notifyObjectShow(parentObjectId);
|
||||||
|
}
|
||||||
|
|
||||||
void notifyObjectFocus(uint accessibilityObjectId)
|
void notifyObjectFocus(uint accessibilityObjectId)
|
||||||
{
|
{
|
||||||
QtAndroid::notifyObjectFocus(accessibilityObjectId);
|
QtAndroid::notifyObjectFocus(accessibilityObjectId);
|
||||||
|
@ -18,6 +18,7 @@ namespace QtAndroidAccessibility
|
|||||||
bool registerNatives(QJniEnvironment &env);
|
bool registerNatives(QJniEnvironment &env);
|
||||||
void notifyLocationChange(uint accessibilityObjectId);
|
void notifyLocationChange(uint accessibilityObjectId);
|
||||||
void notifyObjectHide(uint accessibilityObjectId);
|
void notifyObjectHide(uint accessibilityObjectId);
|
||||||
|
void notifyObjectShow(uint accessibilityObjectId);
|
||||||
void notifyObjectFocus(uint accessibilityObjectId);
|
void notifyObjectFocus(uint accessibilityObjectId);
|
||||||
void notifyValueChanged(uint accessibilityObjectId);
|
void notifyValueChanged(uint accessibilityObjectId);
|
||||||
void notifyScrolledEvent(uint accessibilityObjectId);
|
void notifyScrolledEvent(uint accessibilityObjectId);
|
||||||
|
@ -245,6 +245,12 @@ namespace QtAndroid
|
|||||||
accessibilityObjectId, parentObjectId);
|
accessibilityObjectId, parentObjectId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void notifyObjectShow(uint parentObjectId)
|
||||||
|
{
|
||||||
|
qtActivityDelegate().callMethod<void>("notifyObjectShow",
|
||||||
|
parentObjectId);
|
||||||
|
}
|
||||||
|
|
||||||
void notifyObjectFocus(uint accessibilityObjectId)
|
void notifyObjectFocus(uint accessibilityObjectId)
|
||||||
{
|
{
|
||||||
qtActivityDelegate().callMethod<void>("notifyObjectFocus", accessibilityObjectId);
|
qtActivityDelegate().callMethod<void>("notifyObjectFocus", accessibilityObjectId);
|
||||||
|
@ -65,6 +65,7 @@ namespace QtAndroid
|
|||||||
|
|
||||||
void notifyAccessibilityLocationChange(uint accessibilityObjectId);
|
void notifyAccessibilityLocationChange(uint accessibilityObjectId);
|
||||||
void notifyObjectHide(uint accessibilityObjectId, uint parentObjectId);
|
void notifyObjectHide(uint accessibilityObjectId, uint parentObjectId);
|
||||||
|
void notifyObjectShow(uint parentObjectId);
|
||||||
void notifyObjectFocus(uint accessibilityObjectId);
|
void notifyObjectFocus(uint accessibilityObjectId);
|
||||||
void notifyValueChanged(uint accessibilityObjectId, jstring value);
|
void notifyValueChanged(uint accessibilityObjectId, jstring value);
|
||||||
void notifyScrolledEvent(uint accessibilityObjectId);
|
void notifyScrolledEvent(uint accessibilityObjectId);
|
||||||
|
@ -28,6 +28,8 @@ void QAndroidPlatformAccessibility::notifyAccessibilityUpdate(QAccessibleEvent *
|
|||||||
QtAndroidAccessibility::notifyLocationChange(event->uniqueId());
|
QtAndroidAccessibility::notifyLocationChange(event->uniqueId());
|
||||||
} else if (event->type() == QAccessible::ObjectHide) {
|
} else if (event->type() == QAccessible::ObjectHide) {
|
||||||
QtAndroidAccessibility::notifyObjectHide(event->uniqueId());
|
QtAndroidAccessibility::notifyObjectHide(event->uniqueId());
|
||||||
|
} else if (event->type() == QAccessible::ObjectShow) {
|
||||||
|
QtAndroidAccessibility::notifyObjectShow(event->uniqueId());
|
||||||
} else if (event->type() == QAccessible::Focus) {
|
} else if (event->type() == QAccessible::Focus) {
|
||||||
QtAndroidAccessibility::notifyObjectFocus(event->uniqueId());
|
QtAndroidAccessibility::notifyObjectFocus(event->uniqueId());
|
||||||
} else if (event->type() == QAccessible::ValueChanged) {
|
} else if (event->type() == QAccessible::ValueChanged) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user