Skip to content

Commit

Permalink
Fix talkback in hybrid composition while using FlutterFragmentActivity (
Browse files Browse the repository at this point in the history
  • Loading branch information
Emmanuel Garcia authored and chaselatta committed Nov 30, 2020
1 parent 2377840 commit 5c70469
Show file tree
Hide file tree
Showing 4 changed files with 16 additions and 10 deletions.
Expand Up @@ -15,6 +15,13 @@ public interface PlatformViewsAccessibilityDelegate {
*/
View getPlatformViewById(Integer id);

/**
* Returns true if the platform view uses virtual displays.
*
* @hide
*/
boolean usesVirtualDisplay(Integer id);

/**
* Attaches an accessibility bridge for this platform views accessibility delegate.
*
Expand Down
Expand Up @@ -584,6 +584,11 @@ public View getPlatformViewById(Integer id) {
return controller.getView();
}

@Override
public boolean usesVirtualDisplay(Integer id) {
return vdControllers.containsKey(id);
}

private void lockInputConnection(@NonNull VirtualDisplayController controller) {
if (textInputPlugin == null) {
return;
Expand Down
Expand Up @@ -28,7 +28,6 @@
import androidx.annotation.VisibleForTesting;
import io.flutter.BuildConfig;
import io.flutter.Log;
import io.flutter.embedding.android.FlutterActivity;
import io.flutter.embedding.engine.systemchannels.AccessibilityChannel;
import io.flutter.plugin.platform.PlatformViewsAccessibilityDelegate;
import io.flutter.util.Predicate;
Expand Down Expand Up @@ -558,8 +557,7 @@ public AccessibilityNodeInfo createAccessibilityNodeInfo(int virtualViewId) {
if (semanticsNode.platformViewId != -1) {
View embeddedView =
platformViewsAccessibilityDelegate.getPlatformViewById(semanticsNode.platformViewId);
boolean childUsesVirtualDisplay = !(embeddedView.getContext() instanceof FlutterActivity);
if (childUsesVirtualDisplay) {
if (platformViewsAccessibilityDelegate.usesVirtualDisplay(semanticsNode.platformViewId)) {
Rect bounds = semanticsNode.getGlobalRect();
return accessibilityViewEmbedder.getRootNode(embeddedView, semanticsNode.id, bounds);
}
Expand Down Expand Up @@ -853,8 +851,7 @@ && shouldSetCollectionInfo(semanticsNode)) {
// mirrored.
//
// See the case above for how virtual displays are handled.
boolean childUsesHybridComposition = embeddedView.getContext() instanceof FlutterActivity;
if (childUsesHybridComposition) {
if (!platformViewsAccessibilityDelegate.usesVirtualDisplay(child.platformViewId)) {
result.addChild(embeddedView);
continue;
}
Expand Down
Expand Up @@ -17,7 +17,6 @@
import static org.mockito.Mockito.when;

import android.annotation.TargetApi;
import android.app.Activity;
import android.content.ContentResolver;
import android.content.Context;
import android.graphics.Rect;
Expand All @@ -27,7 +26,6 @@
import android.view.accessibility.AccessibilityEvent;
import android.view.accessibility.AccessibilityManager;
import android.view.accessibility.AccessibilityNodeInfo;
import io.flutter.embedding.android.FlutterActivity;
import io.flutter.embedding.engine.systemchannels.AccessibilityChannel;
import io.flutter.plugin.platform.PlatformViewsAccessibilityDelegate;
import java.nio.ByteBuffer;
Expand Down Expand Up @@ -430,8 +428,7 @@ public void itProducesPlatformViewNodeForHybridComposition() {

View embeddedView = mock(View.class);
when(accessibilityDelegate.getPlatformViewById(1)).thenReturn(embeddedView);

when(embeddedView.getContext()).thenReturn(mock(FlutterActivity.class));
when(accessibilityDelegate.usesVirtualDisplay(1)).thenReturn(false);

AccessibilityNodeInfo nodeInfo = mock(AccessibilityNodeInfo.class);
when(embeddedView.createAccessibilityNodeInfo()).thenReturn(nodeInfo);
Expand Down Expand Up @@ -464,7 +461,7 @@ public void itProducesPlatformViewNodeForVirtualDisplay() {

View embeddedView = mock(View.class);
when(accessibilityDelegate.getPlatformViewById(1)).thenReturn(embeddedView);
when(embeddedView.getContext()).thenReturn(mock(Activity.class));
when(accessibilityDelegate.usesVirtualDisplay(1)).thenReturn(true);

accessibilityBridge.createAccessibilityNodeInfo(0);
verify(accessibilityViewEmbedder).getRootNode(eq(embeddedView), eq(0), any(Rect.class));
Expand Down

0 comments on commit 5c70469

Please sign in to comment.