304 lines
13 KiB
Java
304 lines
13 KiB
Java
package io.flutter.embedding.engine;
|
|
|
|
import android.content.Context;
|
|
import android.content.pm.PackageManager;
|
|
import android.content.res.AssetManager;
|
|
import io.flutter.FlutterInjector;
|
|
import io.flutter.Log;
|
|
import io.flutter.embedding.engine.dart.DartExecutor;
|
|
import io.flutter.embedding.engine.deferredcomponents.DeferredComponentManager;
|
|
import io.flutter.embedding.engine.loader.FlutterLoader;
|
|
import io.flutter.embedding.engine.plugins.PluginRegistry;
|
|
import io.flutter.embedding.engine.plugins.activity.ActivityControlSurface;
|
|
import io.flutter.embedding.engine.plugins.broadcastreceiver.BroadcastReceiverControlSurface;
|
|
import io.flutter.embedding.engine.plugins.contentprovider.ContentProviderControlSurface;
|
|
import io.flutter.embedding.engine.plugins.service.ServiceControlSurface;
|
|
import io.flutter.embedding.engine.plugins.util.GeneratedPluginRegister;
|
|
import io.flutter.embedding.engine.renderer.FlutterRenderer;
|
|
import io.flutter.embedding.engine.systemchannels.AccessibilityChannel;
|
|
import io.flutter.embedding.engine.systemchannels.DeferredComponentChannel;
|
|
import io.flutter.embedding.engine.systemchannels.LifecycleChannel;
|
|
import io.flutter.embedding.engine.systemchannels.LocalizationChannel;
|
|
import io.flutter.embedding.engine.systemchannels.MouseCursorChannel;
|
|
import io.flutter.embedding.engine.systemchannels.NavigationChannel;
|
|
import io.flutter.embedding.engine.systemchannels.PlatformChannel;
|
|
import io.flutter.embedding.engine.systemchannels.RestorationChannel;
|
|
import io.flutter.embedding.engine.systemchannels.SettingsChannel;
|
|
import io.flutter.embedding.engine.systemchannels.SpellCheckChannel;
|
|
import io.flutter.embedding.engine.systemchannels.SystemChannel;
|
|
import io.flutter.embedding.engine.systemchannels.TextInputChannel;
|
|
import io.flutter.plugin.localization.LocalizationPlugin;
|
|
import io.flutter.plugin.platform.PlatformViewsController;
|
|
import java.util.HashSet;
|
|
import java.util.Iterator;
|
|
import java.util.List;
|
|
import java.util.Set;
|
|
|
|
/* loaded from: classes.dex */
|
|
public class FlutterEngine {
|
|
private static final String TAG = "FlutterEngine";
|
|
private final AccessibilityChannel accessibilityChannel;
|
|
private final DartExecutor dartExecutor;
|
|
private final DeferredComponentChannel deferredComponentChannel;
|
|
private final EngineLifecycleListener engineLifecycleListener;
|
|
private final Set<EngineLifecycleListener> engineLifecycleListeners;
|
|
private final FlutterJNI flutterJNI;
|
|
private final LifecycleChannel lifecycleChannel;
|
|
private final LocalizationChannel localizationChannel;
|
|
private final LocalizationPlugin localizationPlugin;
|
|
private final MouseCursorChannel mouseCursorChannel;
|
|
private final NavigationChannel navigationChannel;
|
|
private final PlatformChannel platformChannel;
|
|
private final PlatformViewsController platformViewsController;
|
|
private final FlutterEngineConnectionRegistry pluginRegistry;
|
|
private final FlutterRenderer renderer;
|
|
private final RestorationChannel restorationChannel;
|
|
private final SettingsChannel settingsChannel;
|
|
private final SpellCheckChannel spellCheckChannel;
|
|
private final SystemChannel systemChannel;
|
|
private final TextInputChannel textInputChannel;
|
|
|
|
/* loaded from: classes.dex */
|
|
public interface EngineLifecycleListener {
|
|
void onEngineWillDestroy();
|
|
|
|
void onPreEngineRestart();
|
|
}
|
|
|
|
public AccessibilityChannel getAccessibilityChannel() {
|
|
return this.accessibilityChannel;
|
|
}
|
|
|
|
public ActivityControlSurface getActivityControlSurface() {
|
|
return this.pluginRegistry;
|
|
}
|
|
|
|
public BroadcastReceiverControlSurface getBroadcastReceiverControlSurface() {
|
|
return this.pluginRegistry;
|
|
}
|
|
|
|
public ContentProviderControlSurface getContentProviderControlSurface() {
|
|
return this.pluginRegistry;
|
|
}
|
|
|
|
public DartExecutor getDartExecutor() {
|
|
return this.dartExecutor;
|
|
}
|
|
|
|
public DeferredComponentChannel getDeferredComponentChannel() {
|
|
return this.deferredComponentChannel;
|
|
}
|
|
|
|
public LifecycleChannel getLifecycleChannel() {
|
|
return this.lifecycleChannel;
|
|
}
|
|
|
|
public LocalizationChannel getLocalizationChannel() {
|
|
return this.localizationChannel;
|
|
}
|
|
|
|
public LocalizationPlugin getLocalizationPlugin() {
|
|
return this.localizationPlugin;
|
|
}
|
|
|
|
public MouseCursorChannel getMouseCursorChannel() {
|
|
return this.mouseCursorChannel;
|
|
}
|
|
|
|
public NavigationChannel getNavigationChannel() {
|
|
return this.navigationChannel;
|
|
}
|
|
|
|
public PlatformChannel getPlatformChannel() {
|
|
return this.platformChannel;
|
|
}
|
|
|
|
public PlatformViewsController getPlatformViewsController() {
|
|
return this.platformViewsController;
|
|
}
|
|
|
|
public PluginRegistry getPlugins() {
|
|
return this.pluginRegistry;
|
|
}
|
|
|
|
public FlutterRenderer getRenderer() {
|
|
return this.renderer;
|
|
}
|
|
|
|
public RestorationChannel getRestorationChannel() {
|
|
return this.restorationChannel;
|
|
}
|
|
|
|
public ServiceControlSurface getServiceControlSurface() {
|
|
return this.pluginRegistry;
|
|
}
|
|
|
|
public SettingsChannel getSettingsChannel() {
|
|
return this.settingsChannel;
|
|
}
|
|
|
|
public SpellCheckChannel getSpellCheckChannel() {
|
|
return this.spellCheckChannel;
|
|
}
|
|
|
|
public SystemChannel getSystemChannel() {
|
|
return this.systemChannel;
|
|
}
|
|
|
|
public TextInputChannel getTextInputChannel() {
|
|
return this.textInputChannel;
|
|
}
|
|
|
|
public FlutterEngine(Context context) {
|
|
this(context, null);
|
|
}
|
|
|
|
public FlutterEngine(Context context, String[] strArr) {
|
|
this(context, null, null, strArr, true);
|
|
}
|
|
|
|
public FlutterEngine(Context context, String[] strArr, boolean z) {
|
|
this(context, null, null, strArr, z);
|
|
}
|
|
|
|
public FlutterEngine(Context context, String[] strArr, boolean z, boolean z2) {
|
|
this(context, null, null, new PlatformViewsController(), strArr, z, z2);
|
|
}
|
|
|
|
public FlutterEngine(Context context, FlutterLoader flutterLoader, FlutterJNI flutterJNI) {
|
|
this(context, flutterLoader, flutterJNI, null, true);
|
|
}
|
|
|
|
public FlutterEngine(Context context, FlutterLoader flutterLoader, FlutterJNI flutterJNI, String[] strArr, boolean z) {
|
|
this(context, flutterLoader, flutterJNI, new PlatformViewsController(), strArr, z);
|
|
}
|
|
|
|
public FlutterEngine(Context context, FlutterLoader flutterLoader, FlutterJNI flutterJNI, PlatformViewsController platformViewsController, String[] strArr, boolean z) {
|
|
this(context, flutterLoader, flutterJNI, platformViewsController, strArr, z, false);
|
|
}
|
|
|
|
public FlutterEngine(Context context, FlutterLoader flutterLoader, FlutterJNI flutterJNI, PlatformViewsController platformViewsController, String[] strArr, boolean z, boolean z2) {
|
|
AssetManager assets;
|
|
this.engineLifecycleListeners = new HashSet();
|
|
this.engineLifecycleListener = new EngineLifecycleListener(this) { // from class: io.flutter.embedding.engine.FlutterEngine.1
|
|
final FlutterEngine this$0;
|
|
|
|
@Override // io.flutter.embedding.engine.FlutterEngine.EngineLifecycleListener
|
|
public void onEngineWillDestroy() {
|
|
}
|
|
|
|
{
|
|
this.this$0 = this;
|
|
}
|
|
|
|
@Override // io.flutter.embedding.engine.FlutterEngine.EngineLifecycleListener
|
|
public void onPreEngineRestart() {
|
|
Log.v(FlutterEngine.TAG, "onPreEngineRestart()");
|
|
Iterator it = this.this$0.engineLifecycleListeners.iterator();
|
|
while (it.hasNext()) {
|
|
((EngineLifecycleListener) it.next()).onPreEngineRestart();
|
|
}
|
|
this.this$0.platformViewsController.onPreEngineRestart();
|
|
this.this$0.restorationChannel.clearData();
|
|
}
|
|
};
|
|
try {
|
|
assets = context.createPackageContext(context.getPackageName(), 0).getAssets();
|
|
} catch (PackageManager.NameNotFoundException unused) {
|
|
assets = context.getAssets();
|
|
}
|
|
FlutterInjector instance = FlutterInjector.instance();
|
|
flutterJNI = flutterJNI == null ? instance.getFlutterJNIFactory().provideFlutterJNI() : flutterJNI;
|
|
this.flutterJNI = flutterJNI;
|
|
DartExecutor dartExecutor = new DartExecutor(flutterJNI, assets);
|
|
this.dartExecutor = dartExecutor;
|
|
dartExecutor.onAttachedToJNI();
|
|
DeferredComponentManager deferredComponentManager = FlutterInjector.instance().deferredComponentManager();
|
|
this.accessibilityChannel = new AccessibilityChannel(dartExecutor, flutterJNI);
|
|
DeferredComponentChannel deferredComponentChannel = new DeferredComponentChannel(dartExecutor);
|
|
this.deferredComponentChannel = deferredComponentChannel;
|
|
this.lifecycleChannel = new LifecycleChannel(dartExecutor);
|
|
LocalizationChannel localizationChannel = new LocalizationChannel(dartExecutor);
|
|
this.localizationChannel = localizationChannel;
|
|
this.mouseCursorChannel = new MouseCursorChannel(dartExecutor);
|
|
this.navigationChannel = new NavigationChannel(dartExecutor);
|
|
this.platformChannel = new PlatformChannel(dartExecutor);
|
|
this.restorationChannel = new RestorationChannel(dartExecutor, z2);
|
|
this.settingsChannel = new SettingsChannel(dartExecutor);
|
|
this.spellCheckChannel = new SpellCheckChannel(dartExecutor);
|
|
this.systemChannel = new SystemChannel(dartExecutor);
|
|
this.textInputChannel = new TextInputChannel(dartExecutor);
|
|
if (deferredComponentManager != null) {
|
|
deferredComponentManager.setDeferredComponentChannel(deferredComponentChannel);
|
|
}
|
|
LocalizationPlugin localizationPlugin = new LocalizationPlugin(context, localizationChannel);
|
|
this.localizationPlugin = localizationPlugin;
|
|
flutterLoader = flutterLoader == null ? instance.flutterLoader() : flutterLoader;
|
|
if (!flutterJNI.isAttached()) {
|
|
flutterLoader.startInitialization(context.getApplicationContext());
|
|
flutterLoader.ensureInitializationComplete(context, strArr);
|
|
}
|
|
flutterJNI.addEngineLifecycleListener(this.engineLifecycleListener);
|
|
flutterJNI.setPlatformViewsController(platformViewsController);
|
|
flutterJNI.setLocalizationPlugin(localizationPlugin);
|
|
flutterJNI.setDeferredComponentManager(instance.deferredComponentManager());
|
|
if (!flutterJNI.isAttached()) {
|
|
attachToJni();
|
|
}
|
|
this.renderer = new FlutterRenderer(flutterJNI);
|
|
this.platformViewsController = platformViewsController;
|
|
platformViewsController.onAttachedToJNI();
|
|
this.pluginRegistry = new FlutterEngineConnectionRegistry(context.getApplicationContext(), this, flutterLoader);
|
|
localizationPlugin.sendLocalesToFlutter(context.getResources().getConfiguration());
|
|
if (z && flutterLoader.automaticallyRegisterPlugins()) {
|
|
GeneratedPluginRegister.registerGeneratedPlugins(this);
|
|
}
|
|
}
|
|
|
|
private void attachToJni() {
|
|
Log.v(TAG, "Attaching to JNI.");
|
|
this.flutterJNI.attachToNative();
|
|
if (!isAttachedToJni()) {
|
|
throw new RuntimeException("FlutterEngine failed to attach to its native Object reference.");
|
|
}
|
|
}
|
|
|
|
private boolean isAttachedToJni() {
|
|
return this.flutterJNI.isAttached();
|
|
}
|
|
|
|
/* JADX INFO: Access modifiers changed from: package-private */
|
|
public FlutterEngine spawn(Context context, DartExecutor.DartEntrypoint dartEntrypoint, String str, List<String> list, PlatformViewsController platformViewsController, boolean z, boolean z2) {
|
|
if (!isAttachedToJni()) {
|
|
throw new IllegalStateException("Spawn can only be called on a fully constructed FlutterEngine");
|
|
}
|
|
return new FlutterEngine(context, null, this.flutterJNI.spawn(dartEntrypoint.dartEntrypointFunctionName, dartEntrypoint.dartEntrypointLibrary, str, list), platformViewsController, null, z, z2);
|
|
}
|
|
|
|
public void destroy() {
|
|
Log.v(TAG, "Destroying.");
|
|
Iterator<EngineLifecycleListener> it = this.engineLifecycleListeners.iterator();
|
|
while (it.hasNext()) {
|
|
it.next().onEngineWillDestroy();
|
|
}
|
|
this.pluginRegistry.destroy();
|
|
this.platformViewsController.onDetachedFromJNI();
|
|
this.dartExecutor.onDetachedFromJNI();
|
|
this.flutterJNI.removeEngineLifecycleListener(this.engineLifecycleListener);
|
|
this.flutterJNI.setDeferredComponentManager(null);
|
|
this.flutterJNI.detachFromNativeAndReleaseResources();
|
|
if (FlutterInjector.instance().deferredComponentManager() != null) {
|
|
FlutterInjector.instance().deferredComponentManager().destroy();
|
|
this.deferredComponentChannel.setDeferredComponentManager(null);
|
|
}
|
|
}
|
|
|
|
public void addEngineLifecycleListener(EngineLifecycleListener engineLifecycleListener) {
|
|
this.engineLifecycleListeners.add(engineLifecycleListener);
|
|
}
|
|
|
|
public void removeEngineLifecycleListener(EngineLifecycleListener engineLifecycleListener) {
|
|
this.engineLifecycleListeners.remove(engineLifecycleListener);
|
|
}
|
|
}
|