Commit 2a03cb50 authored by yangwu.jia's avatar yangwu.jia

Merge branch 'feature/flutter_1.9_upgrade' into feature/flutter_1.9_androidx_upgrade

parents 47732cda 76beb384
...@@ -2,9 +2,11 @@ package com.idlefish.flutterboost; ...@@ -2,9 +2,11 @@ package com.idlefish.flutterboost;
import android.app.Activity; import android.app.Activity;
import android.content.Context; import android.content.Context;
import android.support.annotation.Nullable;
import com.idlefish.flutterboost.interfaces.IContainerRecord; import com.idlefish.flutterboost.interfaces.IContainerRecord;
import io.flutter.app.FlutterPluginRegistry; import io.flutter.app.FlutterPluginRegistry;
import io.flutter.embedding.engine.FlutterEngine; import io.flutter.embedding.engine.FlutterEngine;
import io.flutter.embedding.engine.plugins.shim.ShimPluginRegistry;
import io.flutter.plugin.common.BinaryMessenger; import io.flutter.plugin.common.BinaryMessenger;
import io.flutter.plugin.common.PluginRegistry; import io.flutter.plugin.common.PluginRegistry;
import io.flutter.plugin.platform.PlatformViewRegistry; import io.flutter.plugin.platform.PlatformViewRegistry;
...@@ -13,23 +15,24 @@ import io.flutter.view.TextureRegistry; ...@@ -13,23 +15,24 @@ import io.flutter.view.TextureRegistry;
import java.lang.ref.WeakReference; import java.lang.ref.WeakReference;
public class BoostPluginRegistry extends FlutterPluginRegistry { public class BoostPluginRegistry extends ShimPluginRegistry {
protected WeakReference<Activity> mCurrentActivityRef; protected WeakReference<Activity> mCurrentActivityRef;
private FlutterEngine mEngine; private FlutterEngine mEngine;
private Context mContext;
public BoostPluginRegistry(FlutterEngine engine, Context context) { public BoostPluginRegistry(FlutterEngine engine, Context context) {
super(engine, context); super(engine);
mEngine = engine; mEngine = engine;
mContext=context;
} }
public PluginRegistry.Registrar registrarFor(String pluginKey) { public PluginRegistry.Registrar registrarFor(String pluginKey) {
return new BoostRegistrar(mEngine, super.registrarFor(pluginKey)); return new BoostRegistrar(mEngine, super.registrarFor(pluginKey));
} }
public void currentActivity(@Nullable Activity activity) {
mCurrentActivityRef = new WeakReference<>(activity);
}
public class BoostRegistrar implements PluginRegistry.Registrar { public class BoostRegistrar implements PluginRegistry.Registrar {
...@@ -70,12 +73,12 @@ public class BoostPluginRegistry extends FlutterPluginRegistry { ...@@ -70,12 +73,12 @@ public class BoostPluginRegistry extends FlutterPluginRegistry {
@Override @Override
public Context context() { public Context context() {
return mRegistrar.context(); return BoostPluginRegistry.this.mContext;
} }
@Override @Override
public Context activeContext() { public Context activeContext() {
return mRegistrar.activeContext(); return BoostPluginRegistry.this.mContext;
} }
@Override @Override
...@@ -90,7 +93,7 @@ public class BoostPluginRegistry extends FlutterPluginRegistry { ...@@ -90,7 +93,7 @@ public class BoostPluginRegistry extends FlutterPluginRegistry {
@Override @Override
public PlatformViewRegistry platformViewRegistry() { public PlatformViewRegistry platformViewRegistry() {
return mRegistrar.platformViewRegistry(); return mEngine.getPlatformViewsController().getRegistry();
} }
@Override @Override
......
...@@ -23,7 +23,7 @@ public class NewFlutterBoost { ...@@ -23,7 +23,7 @@ public class NewFlutterBoost {
private FlutterViewContainerManager mManager; private FlutterViewContainerManager mManager;
private Activity mCurrentActiveActivity; private Activity mCurrentActiveActivity;
private BoostPluginRegistry mRegistry;
static NewFlutterBoost sInstance = null; static NewFlutterBoost sInstance = null;
...@@ -40,10 +40,9 @@ public class NewFlutterBoost { ...@@ -40,10 +40,9 @@ public class NewFlutterBoost {
mPlatform = platform; mPlatform = platform;
mManager = new FlutterViewContainerManager(); mManager = new FlutterViewContainerManager();
if (mPlatform.whenEngineStart() == ConfigBuilder.IMMEDIATELY) {
doInitialFlutterViewRun(mPlatform); mRegistry = new BoostPluginRegistry(this.engineProvider(),
} mPlatform.getApplication());
platform.getApplication().registerActivityLifecycleCallbacks(new Application.ActivityLifecycleCallbacks() { platform.getApplication().registerActivityLifecycleCallbacks(new Application.ActivityLifecycleCallbacks() {
...@@ -53,8 +52,8 @@ public class NewFlutterBoost { ...@@ -53,8 +52,8 @@ public class NewFlutterBoost {
if (mPlatform.whenEngineStart() == ConfigBuilder.ANY_ACTIVITY_CREATED) { if (mPlatform.whenEngineStart() == ConfigBuilder.ANY_ACTIVITY_CREATED) {
Log.e("bbbb2", "xxxxx"); Log.e("bbbb2", "xxxxx");
mRegistry.currentActivity(activity);
doInitialFlutterViewRun(mPlatform); doInitialFlutterViewRun(mPlatform,mRegistry);
} }
} }
...@@ -116,15 +115,16 @@ public class NewFlutterBoost { ...@@ -116,15 +115,16 @@ public class NewFlutterBoost {
} }
}); });
if (mPlatform.whenEngineStart() == ConfigBuilder.IMMEDIATELY) {
doInitialFlutterViewRun(mPlatform,mRegistry);
}
BoostPluginRegistry registry = new BoostPluginRegistry(this.engineProvider(),
mPlatform.getApplication());
mPlatform.registerPlugins(registry);
} }
private void doInitialFlutterViewRun(Platform platform) { private void doInitialFlutterViewRun(Platform platform,BoostPluginRegistry registry) {
// Don't attempt to start a FlutterEngine if we're using a cached FlutterEngine. // Don't attempt to start a FlutterEngine if we're using a cached FlutterEngine.
// if (host.getCachedEngineId() != null) { // if (host.getCachedEngineId() != null) {
// return; // return;
...@@ -137,8 +137,8 @@ public class NewFlutterBoost { ...@@ -137,8 +137,8 @@ public class NewFlutterBoost {
// So this is expected behavior in many cases. // So this is expected behavior in many cases.
return; return;
} }
platform.registerPlugins(registry);
Log.e("bbbb3", "xxxxx");
// The engine needs to receive the Flutter app's initial route before executing any // The engine needs to receive the Flutter app's initial route before executing any
// Dart code to ensure that the initial route arrives in time to be applied. // Dart code to ensure that the initial route arrives in time to be applied.
if (platform.initialRoute() != null) { if (platform.initialRoute() != null) {
...@@ -268,5 +268,7 @@ public class NewFlutterBoost { ...@@ -268,5 +268,7 @@ public class NewFlutterBoost {
return mManager.findContainerById(id); return mManager.findContainerById(id);
} }
public BoostPluginRegistry getPluginRegistry(){
return mRegistry;
}
} }
...@@ -686,7 +686,7 @@ public class XFlutterView extends FrameLayout { ...@@ -686,7 +686,7 @@ public class XFlutterView extends FrameLayout {
resolveMemoryLeaks(); resolveMemoryLeaks();
// Instruct our FlutterRenderer that we are no longer interested in being its RenderSurface. // Instruct our FlutterRenderer that we are no longer interested in being its RenderSurface.
FlutterRenderer flutterRenderer = flutterEngine.getRenderer(); FlutterRenderer flutterRenderer = flutterEngine.getRenderer();
didRenderFirstFrame = false; // didRenderFirstFrame = false;
flutterRenderer.removeOnFirstFrameRenderedListener(onFirstFrameRenderedListener); flutterRenderer.removeOnFirstFrameRenderedListener(onFirstFrameRenderedListener);
flutterRenderer.detachFromRenderSurface(); flutterRenderer.detachFromRenderSurface();
flutterEngine = null; flutterEngine = null;
......
...@@ -28,7 +28,6 @@ import io.flutter.app.FlutterActivity; ...@@ -28,7 +28,6 @@ import io.flutter.app.FlutterActivity;
import io.flutter.embedding.android.*; import io.flutter.embedding.android.*;
import io.flutter.embedding.engine.FlutterEngine; import io.flutter.embedding.engine.FlutterEngine;
import io.flutter.embedding.engine.FlutterShellArgs; import io.flutter.embedding.engine.FlutterShellArgs;
import io.flutter.embedding.engine.renderer.OnFirstFrameRenderedListener;
import io.flutter.plugin.platform.PlatformPlugin; import io.flutter.plugin.platform.PlatformPlugin;
import io.flutter.view.FlutterMain; import io.flutter.view.FlutterMain;
...@@ -56,15 +55,7 @@ public class FlutterActivityAndFragmentDelegate implements IFlutterViewContaine ...@@ -56,15 +55,7 @@ public class FlutterActivityAndFragmentDelegate implements IFlutterViewContaine
protected IOperateSyncer mSyncer; protected IOperateSyncer mSyncer;
@NonNull
private final OnFirstFrameRenderedListener onFirstFrameRenderedListener = new OnFirstFrameRenderedListener() {
@Override
public void onFirstFrameRendered() {
if(host!=null){
host.onFirstFrameRendered();
}
}
};
FlutterActivityAndFragmentDelegate(@NonNull Host host) { FlutterActivityAndFragmentDelegate(@NonNull Host host) {
this.host = host; this.host = host;
...@@ -171,7 +162,6 @@ public class FlutterActivityAndFragmentDelegate implements IFlutterViewContaine ...@@ -171,7 +162,6 @@ public class FlutterActivityAndFragmentDelegate implements IFlutterViewContaine
ensureAlive(); ensureAlive();
flutterView = new XFlutterView(host.getActivity(), NewFlutterBoost.instance().platform().renderMode(), host.getTransparencyMode()); flutterView = new XFlutterView(host.getActivity(), NewFlutterBoost.instance().platform().renderMode(), host.getTransparencyMode());
flutterView.addOnFirstFrameRenderedListener(onFirstFrameRenderedListener);
flutterSplashView = new FlutterSplashView(host.getContext()); flutterSplashView = new FlutterSplashView(host.getContext());
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
...@@ -247,7 +237,6 @@ public class FlutterActivityAndFragmentDelegate implements IFlutterViewContaine ...@@ -247,7 +237,6 @@ public class FlutterActivityAndFragmentDelegate implements IFlutterViewContaine
mSyncer.onDestroy(); mSyncer.onDestroy();
ensureAlive(); ensureAlive();
flutterView.removeOnFirstFrameRenderedListener(onFirstFrameRenderedListener);
} }
...@@ -512,11 +501,6 @@ public class FlutterActivityAndFragmentDelegate implements IFlutterViewContaine ...@@ -512,11 +501,6 @@ public class FlutterActivityAndFragmentDelegate implements IFlutterViewContaine
*/ */
boolean shouldAttachEngineToActivity(); boolean shouldAttachEngineToActivity();
/**
* Invoked by this delegate when its {@link FlutterView} has rendered its first Flutter
* frame.
*/
void onFirstFrameRendered();
void finishContainer(Map<String, Object> result) ; void finishContainer(Map<String, Object> result) ;
......
...@@ -39,6 +39,8 @@ public class FlutterSplashView extends FrameLayout { ...@@ -39,6 +39,8 @@ public class FlutterSplashView extends FrameLayout {
@Nullable @Nullable
private String previousCompletedSplashIsolate; private String previousCompletedSplashIsolate;
private boolean hasRendered=false;
@NonNull @NonNull
private final FlutterView.FlutterEngineAttachmentListener flutterEngineAttachmentListener = new FlutterView.FlutterEngineAttachmentListener() { private final FlutterView.FlutterEngineAttachmentListener flutterEngineAttachmentListener = new FlutterView.FlutterEngineAttachmentListener() {
@Override @Override
...@@ -57,8 +59,9 @@ public class FlutterSplashView extends FrameLayout { ...@@ -57,8 +59,9 @@ public class FlutterSplashView extends FrameLayout {
private final OnFirstFrameRenderedListener onFirstFrameRenderedListener = new OnFirstFrameRenderedListener() { private final OnFirstFrameRenderedListener onFirstFrameRenderedListener = new OnFirstFrameRenderedListener() {
@Override @Override
public void onFirstFrameRendered() { public void onFirstFrameRendered() {
if (splashScreen != null) { if (splashScreen != null&&!hasRendered) {
transitionToFlutter(); transitionToFlutter();
hasRendered=true;
} }
} }
}; };
......
...@@ -466,14 +466,6 @@ public class NewBoostFlutterActivity extends Activity ...@@ -466,14 +466,6 @@ public class NewBoostFlutterActivity extends Activity
return true; return true;
} }
@Override
public void onFirstFrameRendered() {
}
......
...@@ -232,20 +232,6 @@ public class NewFlutterFragment extends Fragment implements FlutterActivityAndFr ...@@ -232,20 +232,6 @@ public class NewFlutterFragment extends Fragment implements FlutterActivityAndFr
// implementation for details about why it exists. // implementation for details about why it exists.
private FlutterActivityAndFragmentDelegate delegate; private FlutterActivityAndFragmentDelegate delegate;
private final OnFirstFrameRenderedListener onFirstFrameRenderedListener = new OnFirstFrameRenderedListener() {
@Override
public void onFirstFrameRendered() {
// Notify our subclasses that the first frame has been rendered.
NewFlutterFragment.this.onFirstFrameRendered();
// Notify our owning Activity that the first frame has been rendered.
FragmentActivity fragmentActivity = getActivity();
if (fragmentActivity instanceof OnFirstFrameRenderedListener) {
OnFirstFrameRenderedListener activityAsListener = (OnFirstFrameRenderedListener) fragmentActivity;
activityAsListener.onFirstFrameRendered();
}
}
};
public NewFlutterFragment() { public NewFlutterFragment() {
// Ensure that we at least have an empty Bundle of arguments so that we don't // Ensure that we at least have an empty Bundle of arguments so that we don't
...@@ -502,24 +488,6 @@ public class NewFlutterFragment extends Fragment implements FlutterActivityAndFr ...@@ -502,24 +488,6 @@ public class NewFlutterFragment extends Fragment implements FlutterActivityAndFr
return getArguments().getBoolean(ARG_SHOULD_ATTACH_ENGINE_TO_ACTIVITY); return getArguments().getBoolean(ARG_SHOULD_ATTACH_ENGINE_TO_ACTIVITY);
} }
/**
* Invoked after the {@link FlutterView} within this {@code NewFlutterFragment} renders its first
* frame.
* <p>
* This method forwards {@code onFirstFrameRendered()} to its attached {@code Activity}, if
* the attached {@code Activity} implements {@link OnFirstFrameRenderedListener}.
* <p>
* Subclasses that override this method must call through to the {@code super} method.
* <p>
* Used by this {@code NewFlutterFragment}'s {@link FlutterActivityAndFragmentDelegate.Host}
*/
@Override
public void onFirstFrameRendered() {
FragmentActivity attachedActivity = getActivity();
if (attachedActivity instanceof OnFirstFrameRenderedListener) {
((OnFirstFrameRenderedListener) attachedActivity).onFirstFrameRendered();
}
}
@Override @Override
public void finishContainer(Map<String, Object> result) { public void finishContainer(Map<String, Object> result) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment