From 042804b06df11066affc25e095a0453c88b70bd0 Mon Sep 17 00:00:00 2001 From: Jason Simmons Date: Fri, 29 May 2020 16:23:01 -0700 Subject: [PATCH] Disconnect the channel message handler when releasing the AccessibilityBridge (#18657) --- .../io/flutter/view/AccessibilityBridge.java | 1 + .../io/flutter/view/AccessibilityBridgeTest.java | 15 +++++++++++++++ 2 files changed, 16 insertions(+) diff --git a/shell/platform/android/io/flutter/view/AccessibilityBridge.java b/shell/platform/android/io/flutter/view/AccessibilityBridge.java index 0f4cefd0a88..f6ed0179be8 100644 --- a/shell/platform/android/io/flutter/view/AccessibilityBridge.java +++ b/shell/platform/android/io/flutter/view/AccessibilityBridge.java @@ -435,6 +435,7 @@ public class AccessibilityBridge extends AccessibilityNodeProvider { touchExplorationStateChangeListener); } contentResolver.unregisterContentObserver(animationScaleObserver); + accessibilityChannel.setAccessibilityMessageHandler(null); } /** Returns true if the Android OS currently has accessibility enabled, false otherwise. */ diff --git a/shell/platform/android/test/io/flutter/view/AccessibilityBridgeTest.java b/shell/platform/android/test/io/flutter/view/AccessibilityBridgeTest.java index 7a3e4289be6..38a6d7e695e 100644 --- a/shell/platform/android/test/io/flutter/view/AccessibilityBridgeTest.java +++ b/shell/platform/android/test/io/flutter/view/AccessibilityBridgeTest.java @@ -6,6 +6,7 @@ package io.flutter.view; import static org.junit.Assert.assertEquals; import static org.mockito.Matchers.eq; +import static org.mockito.Mockito.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; @@ -157,6 +158,20 @@ public class AccessibilityBridgeTest { accessibilityBridge.onAccessibilityHoverEvent(MotionEvent.obtain(1, 1, 1, -10, -10, 0)); } + @Test + public void releaseDropsChannelMessageHandler() { + AccessibilityChannel mockChannel = mock(AccessibilityChannel.class); + AccessibilityManager mockManager = mock(AccessibilityManager.class); + when(mockManager.isEnabled()).thenReturn(true); + AccessibilityBridge accessibilityBridge = + setUpBridge(null, mockChannel, mockManager, null, null, null); + verify(mockChannel) + .setAccessibilityMessageHandler( + any(AccessibilityChannel.AccessibilityMessageHandler.class)); + accessibilityBridge.release(); + verify(mockChannel).setAccessibilityMessageHandler(null); + } + AccessibilityBridge setUpBridge() { return setUpBridge(null, null, null, null, null, null); }