Disconnect the channel message handler when releasing the AccessibilityBridge (#18657)

This commit is contained in:
Jason Simmons 2020-05-29 16:23:01 -07:00 committed by GitHub
parent 685699b351
commit 042804b06d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 16 additions and 0 deletions

View File

@ -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. */

View File

@ -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);
}