Adjust the logic of isImportantForAccessibility
According to the logic in #isImportantForAccessibility, SurfaceView wouldn't be important by default. This results in the A11yNodeInfo generated by this SurfaceView isn't important. If this SurfaceView hosts an embedded hierarchy, the accessibility services may ignore it. Hence, it couldn't compose the complete node tree. Bug: 149266686 Test: a11y CTS & unit tests Change-Id: I90d9f043339d2ad72607e8ae8c8dfc2c1b0f004d
This commit is contained in:
@@ -1596,6 +1596,19 @@ public class SurfaceView extends View implements ViewRootImpl.SurfaceChangedCall
|
||||
info.addChild(wrapper.getLeashToken());
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getImportantForAccessibility() {
|
||||
final int mode = super.getImportantForAccessibility();
|
||||
// If developers explicitly set the important mode for it, don't change the mode.
|
||||
// Only change the mode to important when this SurfaceView isn't explicitly set and has
|
||||
// an embedded hierarchy.
|
||||
if (mRemoteAccessibilityEmbeddedConnection == null
|
||||
|| mode != IMPORTANT_FOR_ACCESSIBILITY_AUTO) {
|
||||
return mode;
|
||||
}
|
||||
return IMPORTANT_FOR_ACCESSIBILITY_YES;
|
||||
}
|
||||
|
||||
private void initEmbeddedHierarchyForAccessibility(SurfaceControlViewHost.SurfacePackage p) {
|
||||
final IAccessibilityEmbeddedConnection connection = p.getAccessibilityEmbeddedConnection();
|
||||
final RemoteAccessibilityEmbeddedConnection wrapper =
|
||||
|
||||
@@ -13429,8 +13429,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
|
||||
* @see #getImportantForAccessibility()
|
||||
*/
|
||||
public boolean isImportantForAccessibility() {
|
||||
final int mode = (mPrivateFlags2 & PFLAG2_IMPORTANT_FOR_ACCESSIBILITY_MASK)
|
||||
>> PFLAG2_IMPORTANT_FOR_ACCESSIBILITY_SHIFT;
|
||||
final int mode = getImportantForAccessibility();
|
||||
if (mode == IMPORTANT_FOR_ACCESSIBILITY_NO
|
||||
|| mode == IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS) {
|
||||
return false;
|
||||
|
||||
Reference in New Issue
Block a user