Skip to content

Commit

Permalink
Notify PlatformViewsController within FlutterEngine when a hot restar…
Browse files Browse the repository at this point in the history
…t occurs. (flutter#48518) (flutter#16230)
  • Loading branch information
matthew-carroll authored Jan 30, 2020
1 parent e520920 commit eecb5e5
Show file tree
Hide file tree
Showing 2 changed files with 62 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,8 @@ public void onPreEngineRestart() {
for (EngineLifecycleListener lifecycleListener : engineLifecycleListeners) {
lifecycleListener.onPreEngineRestart();
}

platformViewsController.onPreEngineRestart();
}
};

Expand Down Expand Up @@ -190,6 +192,27 @@ public FlutterEngine(
@NonNull FlutterJNI flutterJNI,
@Nullable String[] dartVmArgs,
boolean automaticallyRegisterPlugins
) {
this(
context,
flutterLoader,
flutterJNI,
new PlatformViewsController(),
dartVmArgs,
automaticallyRegisterPlugins
);
}

/**
* Fully configurable {@code FlutterEngine} constructor.
*/
public FlutterEngine(
@NonNull Context context,
@NonNull FlutterLoader flutterLoader,
@NonNull FlutterJNI flutterJNI,
@NonNull PlatformViewsController platformViewsController,
@Nullable String[] dartVmArgs,
boolean automaticallyRegisterPlugins
) {
this.flutterJNI = flutterJNI;
flutterLoader.startInitialization(context);
Expand All @@ -214,7 +237,7 @@ public FlutterEngine(
systemChannel = new SystemChannel(dartExecutor);
textInputChannel = new TextInputChannel(dartExecutor);

platformViewsController = new PlatformViewsController();
this.platformViewsController = platformViewsController;

this.pluginRegistry = new FlutterEnginePluginRegistry(
context.getApplicationContext(),
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
package test.io.flutter.embedding.engine;

import io.flutter.plugin.platform.PlatformViewsController;
import io.flutter.plugins.GeneratedPluginRegistrant;
import java.util.List;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner;
Expand All @@ -17,8 +19,11 @@
import io.flutter.embedding.engine.loader.FlutterLoader;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

@Config(manifest=Config.NONE)
Expand Down Expand Up @@ -64,4 +69,37 @@ public void itCanBeConfiguredToNotAutomaticallyRegisterPlugins() {

assertTrue(GeneratedPluginRegistrant.getRegisteredEngines().isEmpty());
}

@Test
public void itNotifiesPlatformViewsControllerWhenDevHotRestart() {
// Setup test.
FlutterJNI mockFlutterJNI = mock(FlutterJNI.class);
when(mockFlutterJNI.isAttached()).thenReturn(true);

PlatformViewsController platformViewsController = mock(PlatformViewsController.class);

ArgumentCaptor<FlutterEngine.EngineLifecycleListener> engineLifecycleListenerArgumentCaptor = ArgumentCaptor.forClass(FlutterEngine.EngineLifecycleListener.class);

// Execute behavior under test.
new FlutterEngine(
RuntimeEnvironment.application,
mock(FlutterLoader.class),
mockFlutterJNI,
platformViewsController,
/*dartVmArgs=*/new String[] {},
/*automaticallyRegisterPlugins=*/false
);

// Obtain the EngineLifecycleListener within FlutterEngine that was given to FlutterJNI.
verify(mockFlutterJNI).addEngineLifecycleListener(engineLifecycleListenerArgumentCaptor.capture());
FlutterEngine.EngineLifecycleListener engineLifecycleListener = engineLifecycleListenerArgumentCaptor.getValue();
assertNotNull(engineLifecycleListener);

// Simulate a pre-engine restart, AKA hot restart.
engineLifecycleListener.onPreEngineRestart();

// Verify that FlutterEngine notified PlatformViewsController of the pre-engine restart,
// AKA hot restart.
verify(platformViewsController, times(1)).onPreEngineRestart();
}
}

0 comments on commit eecb5e5

Please sign in to comment.