diff --git a/engine/src/flutter/shell/platform/android/io/flutter/plugin/platform/PlatformPlugin.java b/engine/src/flutter/shell/platform/android/io/flutter/plugin/platform/PlatformPlugin.java index 6dbfedd9bb..9100476b74 100644 --- a/engine/src/flutter/shell/platform/android/io/flutter/plugin/platform/PlatformPlugin.java +++ b/engine/src/flutter/shell/platform/android/io/flutter/plugin/platform/PlatformPlugin.java @@ -38,7 +38,7 @@ public class PlatformPlugin { private final Activity activity; private final PlatformChannel platformChannel; - private final PlatformPluginDelegate platformPluginDelegate; + @Nullable private final PlatformPluginDelegate platformPluginDelegate; private PlatformChannel.SystemChromeStyle currentTheme; private int mEnabledOverlays; private static final String TAG = "PlatformPlugin"; @@ -161,7 +161,7 @@ public class PlatformPlugin { public PlatformPlugin( @NonNull Activity activity, @NonNull PlatformChannel platformChannel, - @NonNull PlatformPluginDelegate delegate) { + @Nullable PlatformPluginDelegate delegate) { this.activity = activity; this.platformChannel = platformChannel; this.platformChannel.setPlatformMessageHandler(mPlatformMessageHandler); @@ -499,7 +499,9 @@ public class PlatformPlugin { } private void setFrameworkHandlesBack(boolean frameworkHandlesBack) { - platformPluginDelegate.setFrameworkHandlesBack(frameworkHandlesBack); + if (platformPluginDelegate != null) { + platformPluginDelegate.setFrameworkHandlesBack(frameworkHandlesBack); + } } private void popSystemNavigator() { diff --git a/engine/src/flutter/shell/platform/android/test/io/flutter/plugin/platform/PlatformPluginTest.java b/engine/src/flutter/shell/platform/android/test/io/flutter/plugin/platform/PlatformPluginTest.java index 3d5fdbce74..1d312057d4 100644 --- a/engine/src/flutter/shell/platform/android/test/io/flutter/plugin/platform/PlatformPluginTest.java +++ b/engine/src/flutter/shell/platform/android/test/io/flutter/plugin/platform/PlatformPluginTest.java @@ -11,6 +11,7 @@ import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; import static org.mockito.Mockito.any; import static org.mockito.Mockito.anyBoolean; import static org.mockito.Mockito.doThrow; @@ -613,6 +614,20 @@ public class PlatformPluginTest { verify(mockPlatformPluginDelegate, times(1)).setFrameworkHandlesBack(true); } + @Test + public void testPlatformPluginDelegateNull() throws Exception { + Activity mockActivity = mock(Activity.class); + PlatformPlugin platformPlugin = + new PlatformPlugin(mockActivity, mockPlatformChannel, null /*platformPluginDelegate*/); + + try { + platformPlugin.mPlatformMessageHandler.setFrameworkHandlesBack(true); + } catch (NullPointerException e) { + // Not expected + fail("NullPointerException was thrown"); + } + } + @Test public void popSystemNavigatorFlutterActivity() { Activity mockActivity = mock(Activity.class);