mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
Revert "Android a11y bridge sets importantness" (flutter/engine#44569)
Reverts flutter/engine#44452 Failing the roll to the framework on FTL tests: https://ci.chromium.org/ui/p/flutter/builders/try/Linux%20firebase_android_embedding_v2_smoke_test/58307/overview
This commit is contained in:
parent
45292c3ab7
commit
2ecdda61fa
@ -575,11 +575,6 @@ public class AccessibilityBridge extends AccessibilityNodeProvider {
|
||||
sendLatestAccessibilityFlagsToFlutter();
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
public AccessibilityNodeInfo obtainAccessibilityNodeInfo(View rootView) {
|
||||
return AccessibilityNodeInfo.obtain(rootView);
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
public AccessibilityNodeInfo obtainAccessibilityNodeInfo(View rootView, int virtualViewId) {
|
||||
return AccessibilityNodeInfo.obtain(rootView, virtualViewId);
|
||||
@ -621,14 +616,13 @@ public class AccessibilityBridge extends AccessibilityNodeProvider {
|
||||
}
|
||||
|
||||
if (virtualViewId == View.NO_ID) {
|
||||
AccessibilityNodeInfo result = obtainAccessibilityNodeInfo(rootAccessibilityView);
|
||||
AccessibilityNodeInfo result = AccessibilityNodeInfo.obtain(rootAccessibilityView);
|
||||
rootAccessibilityView.onInitializeAccessibilityNodeInfo(result);
|
||||
// TODO(mattcarroll): what does it mean for the semantics tree to contain or not contain
|
||||
// the root node ID?
|
||||
if (flutterSemanticsTree.containsKey(ROOT_NODE_ID)) {
|
||||
result.addChild(rootAccessibilityView, ROOT_NODE_ID);
|
||||
}
|
||||
result.setImportantForAccessibility(false);
|
||||
return result;
|
||||
}
|
||||
|
||||
@ -659,11 +653,6 @@ public class AccessibilityBridge extends AccessibilityNodeProvider {
|
||||
|
||||
AccessibilityNodeInfo result =
|
||||
obtainAccessibilityNodeInfo(rootAccessibilityView, virtualViewId);
|
||||
|
||||
// Accessibility Scanner uses isImportantForAccessibility to decide whether to check
|
||||
// or skip this node.
|
||||
result.setImportantForAccessibility(isImportant(semanticsNode));
|
||||
|
||||
// Work around for https://github.com/flutter/flutter/issues/2101
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
|
||||
result.setViewIdResourceName("");
|
||||
@ -994,19 +983,6 @@ public class AccessibilityBridge extends AccessibilityNodeProvider {
|
||||
return result;
|
||||
}
|
||||
|
||||
private boolean isImportant(SemanticsNode node) {
|
||||
if (node.hasFlag(Flag.SCOPES_ROUTE)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (node.getValueLabelHint() != null) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// Return true if the node has had any user action (not including system actions)
|
||||
return (node.actions & ~systemAction) != 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the bounds in screen with root FlutterView's offset.
|
||||
*
|
||||
@ -2165,14 +2141,6 @@ public class AccessibilityBridge extends AccessibilityNodeProvider {
|
||||
}
|
||||
}
|
||||
|
||||
// Actions that are triggered by Android OS, as opposed to user-triggered actions.
|
||||
//
|
||||
// This int is intended to be use in a bitwise comparison.
|
||||
static int systemAction =
|
||||
Action.DID_GAIN_ACCESSIBILITY_FOCUS.value
|
||||
& Action.DID_LOSE_ACCESSIBILITY_FOCUS.value
|
||||
& Action.SHOW_ON_SCREEN.value;
|
||||
|
||||
// Must match SemanticsFlag in semantics.dart
|
||||
// https://github.com/flutter/engine/blob/main/lib/ui/semantics.dart
|
||||
/* Package */ enum Flag {
|
||||
|
||||
@ -49,7 +49,6 @@ import io.flutter.embedding.engine.dart.DartExecutor;
|
||||
import io.flutter.embedding.engine.systemchannels.AccessibilityChannel;
|
||||
import io.flutter.plugin.common.BasicMessageChannel;
|
||||
import io.flutter.plugin.platform.PlatformViewsAccessibilityDelegate;
|
||||
import io.flutter.view.AccessibilityBridge.Action;
|
||||
import io.flutter.view.AccessibilityBridge.Flag;
|
||||
import java.nio.ByteBuffer;
|
||||
import java.nio.charset.Charset;
|
||||
@ -322,129 +321,6 @@ public class AccessibilityBridgeTest {
|
||||
verify(mockNodeInfo2, times(1)).setTraversalAfter(eq(mockRootView), eq(1));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void itSetsRootViewNotImportantForAccessibility() {
|
||||
AccessibilityViewEmbedder mockViewEmbedder = mock(AccessibilityViewEmbedder.class);
|
||||
AccessibilityManager mockManager = mock(AccessibilityManager.class);
|
||||
View mockRootView = mock(View.class);
|
||||
Context context = mock(Context.class);
|
||||
when(mockRootView.getContext()).thenReturn(context);
|
||||
when(context.getPackageName()).thenReturn("test");
|
||||
AccessibilityBridge accessibilityBridge =
|
||||
setUpBridge(mockRootView, mockManager, mockViewEmbedder);
|
||||
ViewParent mockParent = mock(ViewParent.class);
|
||||
when(mockRootView.getParent()).thenReturn(mockParent);
|
||||
when(mockManager.isEnabled()).thenReturn(true);
|
||||
|
||||
TestSemanticsNode root = new TestSemanticsNode();
|
||||
root.id = 0;
|
||||
TestSemanticsUpdate testSemanticsUpdate = root.toUpdate();
|
||||
testSemanticsUpdate.sendUpdateToBridge(accessibilityBridge);
|
||||
|
||||
AccessibilityBridge spyAccessibilityBridge = spy(accessibilityBridge);
|
||||
AccessibilityNodeInfo mockNodeInfo = mock(AccessibilityNodeInfo.class);
|
||||
|
||||
when(spyAccessibilityBridge.obtainAccessibilityNodeInfo(mockRootView)).thenReturn(mockNodeInfo);
|
||||
spyAccessibilityBridge.createAccessibilityNodeInfo(View.NO_ID);
|
||||
verify(mockNodeInfo, times(1)).setImportantForAccessibility(eq(false));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void itSetsNodeImportantForAccessibilityIfItHasContent() {
|
||||
AccessibilityViewEmbedder mockViewEmbedder = mock(AccessibilityViewEmbedder.class);
|
||||
AccessibilityManager mockManager = mock(AccessibilityManager.class);
|
||||
View mockRootView = mock(View.class);
|
||||
Context context = mock(Context.class);
|
||||
when(mockRootView.getContext()).thenReturn(context);
|
||||
when(context.getPackageName()).thenReturn("test");
|
||||
AccessibilityBridge accessibilityBridge =
|
||||
setUpBridge(mockRootView, mockManager, mockViewEmbedder);
|
||||
ViewParent mockParent = mock(ViewParent.class);
|
||||
when(mockRootView.getParent()).thenReturn(mockParent);
|
||||
when(mockManager.isEnabled()).thenReturn(true);
|
||||
|
||||
TestSemanticsNode root = new TestSemanticsNode();
|
||||
root.id = 0;
|
||||
root.label = "some label";
|
||||
TestSemanticsUpdate testSemanticsUpdate = root.toUpdate();
|
||||
testSemanticsUpdate.sendUpdateToBridge(accessibilityBridge);
|
||||
|
||||
AccessibilityBridge spyAccessibilityBridge = spy(accessibilityBridge);
|
||||
AccessibilityNodeInfo mockNodeInfo = mock(AccessibilityNodeInfo.class);
|
||||
|
||||
when(spyAccessibilityBridge.obtainAccessibilityNodeInfo(mockRootView, 0))
|
||||
.thenReturn(mockNodeInfo);
|
||||
spyAccessibilityBridge.createAccessibilityNodeInfo(0);
|
||||
verify(mockNodeInfo, times(1)).setImportantForAccessibility(eq(true));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void itSetsNodeImportantForAccessibilityIfItHasActions() {
|
||||
AccessibilityViewEmbedder mockViewEmbedder = mock(AccessibilityViewEmbedder.class);
|
||||
AccessibilityManager mockManager = mock(AccessibilityManager.class);
|
||||
View mockRootView = mock(View.class);
|
||||
Context context = mock(Context.class);
|
||||
when(mockRootView.getContext()).thenReturn(context);
|
||||
when(context.getPackageName()).thenReturn("test");
|
||||
AccessibilityBridge accessibilityBridge =
|
||||
setUpBridge(mockRootView, mockManager, mockViewEmbedder);
|
||||
ViewParent mockParent = mock(ViewParent.class);
|
||||
when(mockRootView.getParent()).thenReturn(mockParent);
|
||||
when(mockManager.isEnabled()).thenReturn(true);
|
||||
|
||||
TestSemanticsNode root = new TestSemanticsNode();
|
||||
root.id = 0;
|
||||
root.addAction(Action.TAP);
|
||||
TestSemanticsUpdate testSemanticsUpdate = root.toUpdate();
|
||||
testSemanticsUpdate.sendUpdateToBridge(accessibilityBridge);
|
||||
|
||||
AccessibilityBridge spyAccessibilityBridge = spy(accessibilityBridge);
|
||||
AccessibilityNodeInfo mockNodeInfo = mock(AccessibilityNodeInfo.class);
|
||||
|
||||
when(spyAccessibilityBridge.obtainAccessibilityNodeInfo(mockRootView, 0))
|
||||
.thenReturn(mockNodeInfo);
|
||||
spyAccessibilityBridge.createAccessibilityNodeInfo(0);
|
||||
verify(mockNodeInfo, times(1)).setImportantForAccessibility(eq(true));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void itSetsNodeUnImportantForAccessibilityIfItIsEmpty() {
|
||||
AccessibilityViewEmbedder mockViewEmbedder = mock(AccessibilityViewEmbedder.class);
|
||||
AccessibilityManager mockManager = mock(AccessibilityManager.class);
|
||||
View mockRootView = mock(View.class);
|
||||
Context context = mock(Context.class);
|
||||
when(mockRootView.getContext()).thenReturn(context);
|
||||
when(context.getPackageName()).thenReturn("test");
|
||||
AccessibilityBridge accessibilityBridge =
|
||||
setUpBridge(mockRootView, mockManager, mockViewEmbedder);
|
||||
ViewParent mockParent = mock(ViewParent.class);
|
||||
when(mockRootView.getParent()).thenReturn(mockParent);
|
||||
when(mockManager.isEnabled()).thenReturn(true);
|
||||
|
||||
TestSemanticsNode root = new TestSemanticsNode();
|
||||
root.id = 0;
|
||||
TestSemanticsNode node = new TestSemanticsNode();
|
||||
node.id = 1;
|
||||
root.children.add(node);
|
||||
TestSemanticsUpdate testSemanticsUpdate = root.toUpdate();
|
||||
testSemanticsUpdate.sendUpdateToBridge(accessibilityBridge);
|
||||
|
||||
AccessibilityBridge spyAccessibilityBridge = spy(accessibilityBridge);
|
||||
AccessibilityNodeInfo mockNodeInfo = mock(AccessibilityNodeInfo.class);
|
||||
|
||||
when(spyAccessibilityBridge.obtainAccessibilityNodeInfo(mockRootView, 0))
|
||||
.thenReturn(mockNodeInfo);
|
||||
spyAccessibilityBridge.createAccessibilityNodeInfo(0);
|
||||
verify(mockNodeInfo, times(1)).setImportantForAccessibility(eq(false));
|
||||
|
||||
AccessibilityNodeInfo mockNodeInfo1 = mock(AccessibilityNodeInfo.class);
|
||||
|
||||
when(spyAccessibilityBridge.obtainAccessibilityNodeInfo(mockRootView, 1))
|
||||
.thenReturn(mockNodeInfo1);
|
||||
spyAccessibilityBridge.createAccessibilityNodeInfo(1);
|
||||
verify(mockNodeInfo1, times(1)).setImportantForAccessibility(eq(false));
|
||||
}
|
||||
|
||||
@TargetApi(28)
|
||||
@Test
|
||||
public void itSetCutoutInsetBasedonLayoutModeNever() {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user