未验证 提交 eecb5e5c 编写于 作者: M Matt Carroll 提交者: GitHub

Notify PlatformViewsController within FlutterEngine when a hot restart occurs. (#48518) (#16230)

上级 e5209202
......@@ -112,6 +112,8 @@ public class FlutterEngine {
for (EngineLifecycleListener lifecycleListener : engineLifecycleListeners) {
lifecycleListener.onPreEngineRestart();
}
platformViewsController.onPreEngineRestart();
}
};
......@@ -190,6 +192,27 @@ public class 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);
......@@ -214,7 +237,7 @@ public class FlutterEngine {
systemChannel = new SystemChannel(dartExecutor);
textInputChannel = new TextInputChannel(dartExecutor);
platformViewsController = new PlatformViewsController();
this.platformViewsController = platformViewsController;
this.pluginRegistry = new FlutterEnginePluginRegistry(
context.getApplicationContext(),
......
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;
......@@ -17,8 +19,11 @@ import io.flutter.embedding.engine.FlutterJNI;
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)
......@@ -64,4 +69,37 @@ public class FlutterEngineTest {
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();
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册