5package io.flutter.view;
9import androidx.annotation.NonNull;
10import androidx.annotation.UiThread;
12import io.flutter.app.FlutterPluginRegistry;
13import io.flutter.embedding.engine.FlutterEngine.EngineLifecycleListener;
14import io.flutter.embedding.engine.FlutterJNI;
15import io.flutter.embedding.engine.dart.DartExecutor;
16import io.flutter.embedding.engine.renderer.FlutterUiDisplayListener;
17import io.flutter.plugin.common.*;
18import java.nio.ByteBuffer;
26 private static final String TAG =
"FlutterNativeView";
28 private final FlutterPluginRegistry mPluginRegistry;
29 private final DartExecutor dartExecutor;
31 private final FlutterJNI mFlutterJNI;
33 private boolean applicationIsRunning;
35 private final FlutterUiDisplayListener flutterUiDisplayListener =
36 new FlutterUiDisplayListener() {
38 public void onFlutterUiDisplayed() {
39 if (mFlutterView ==
null) {
46 public void onFlutterUiNoLongerDisplayed() {
56 if (isBackgroundView) {
57 Log.
w(
TAG,
"'isBackgroundView' is no longer supported and will be ignored");
60 mPluginRegistry =
new FlutterPluginRegistry(
this, context);
61 mFlutterJNI =
new FlutterJNI();
62 mFlutterJNI.addIsDisplayingFlutterUiListener(flutterUiDisplayListener);
63 this.dartExecutor =
new DartExecutor(mFlutterJNI, context.getAssets());
64 mFlutterJNI.addEngineLifecycleListener(
new EngineLifecycleListenerImpl());
70 mPluginRegistry.detach();
75 mPluginRegistry.destroy();
76 dartExecutor.onDetachedFromJNI();
78 mFlutterJNI.removeIsDisplayingFlutterUiListener(flutterUiDisplayListener);
79 mFlutterJNI.detachFromNativeAndReleaseResources();
80 applicationIsRunning =
false;
90 return mPluginRegistry;
94 mFlutterView = flutterView;
95 mPluginRegistry.attach(flutterView, activity);
99 return mFlutterJNI.isAttached();
103 if (!
isAttached())
throw new AssertionError(
"Platform view is not attached");
107 if (
args.entrypoint ==
null) {
108 throw new AssertionError(
"An entrypoint must be specified");
111 if (applicationIsRunning)
112 throw new AssertionError(
"This Flutter engine instance is already running an application");
113 mFlutterJNI.runBundleAndSnapshotFromLibrary(
117 mContext.getResources().getAssets(),
120 applicationIsRunning =
true;
124 return applicationIsRunning;
129 return FlutterJNI.getVMServiceUri();
133 return FlutterJNI.getVMServiceUri();
139 return dartExecutor.getBinaryMessenger().makeBackgroundTaskQueue(
options);
145 dartExecutor.getBinaryMessenger().send(channel,
message);
152 Log.
d(
TAG,
"FlutterView.send called on a detached view, channel=" + channel);
162 dartExecutor.getBinaryMessenger().setMessageHandler(channel, handler);
167 public void setMessageHandler(String channel, BinaryMessageHandler handler, TaskQueue taskQueue) {
168 dartExecutor.getBinaryMessenger().setMessageHandler(channel, handler, taskQueue);
182 mFlutterJNI.attachToNative();
183 dartExecutor.onAttachedToJNI();
186 private final class EngineLifecycleListenerImpl
implements EngineLifecycleListener {
188 @SuppressWarnings(
"unused")
189 public
void onPreEngineRestart() {
190 if (mFlutterView !=
null) {
193 if (mPluginRegistry ==
null) {
196 mPluginRegistry.onPreEngineRestart();
199 public void onEngineWillDestroy() {
static void d(@NonNull String tag, @NonNull String message)
static void w(@NonNull String tag, @NonNull String message)
void setMessageHandler(String channel, BinaryMessageHandler handler)
void disableBufferingIncomingMessages()
FlutterNativeView(@NonNull Context context, boolean isBackgroundView)
void send(String channel, ByteBuffer message, BinaryReply callback)
FlutterJNI getFlutterJNI()
void send(String channel, ByteBuffer message)
static String getObservatoryUri()
void detachFromFlutterView()
FlutterPluginRegistry getPluginRegistry()
static String getVMServiceUri()
boolean isApplicationRunning()
void enableBufferingIncomingMessages()
void attachViewAndActivity(FlutterView flutterView, Activity activity)
DartExecutor getDartExecutor()
FlutterNativeView(@NonNull Context context)
void setMessageHandler(String channel, BinaryMessageHandler handler, TaskQueue taskQueue)
TaskQueue makeBackgroundTaskQueue(TaskQueueOptions options)
void runFromBundle(FlutterRunArguments args)
void resetAccessibilityTree()
G_BEGIN_DECLS G_MODULE_EXPORT FlValue * args
FlKeyEvent uint64_t FlKeyResponderAsyncCallback callback