Commit 308502f7 authored by yangwu.jia's avatar yangwu.jia

Fixed crash and activity leak

parent f887dd98
...@@ -55,8 +55,6 @@ public class BoostFlutterView extends FrameLayout { ...@@ -55,8 +55,6 @@ public class BoostFlutterView extends FrameLayout {
private XFlutterView mFlutterView; private XFlutterView mFlutterView;
private PlatformPlugin mPlatformPlugin;
private Bundle mArguments; private Bundle mArguments;
private RenderingProgressCoverCreator mRenderingProgressCoverCreator; private RenderingProgressCoverCreator mRenderingProgressCoverCreator;
...@@ -116,8 +114,6 @@ public class BoostFlutterView extends FrameLayout { ...@@ -116,8 +114,6 @@ public class BoostFlutterView extends FrameLayout {
mArguments = new Bundle(); mArguments = new Bundle();
} }
mPlatformPlugin = new PlatformPlugin((Activity) getContext(), mFlutterEngine.getPlatformChannel());
mFlutterView = new XFlutterView(getContext(), getRenderMode(), getTransparencyMode()); mFlutterView = new XFlutterView(getContext(), getRenderMode(), getTransparencyMode());
addView(mFlutterView, new FrameLayout.LayoutParams( addView(mFlutterView, new FrameLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
...@@ -213,7 +209,6 @@ public class BoostFlutterView extends FrameLayout { ...@@ -213,7 +209,6 @@ public class BoostFlutterView extends FrameLayout {
@Override @Override
protected void onAttachedToWindow() { protected void onAttachedToWindow() {
super.onAttachedToWindow(); super.onAttachedToWindow();
mPlatformPlugin.onPostResume();
ViewCompat.requestApplyInsets(this); ViewCompat.requestApplyInsets(this);
getViewTreeObserver().addOnGlobalLayoutListener(mGlobalLayoutListener); getViewTreeObserver().addOnGlobalLayoutListener(mGlobalLayoutListener);
} }
......
...@@ -168,8 +168,14 @@ public class XFlutterView extends FrameLayout { ...@@ -168,8 +168,14 @@ public class XFlutterView extends FrameLayout {
@Override @Override
protected void onConfigurationChanged(Configuration newConfig) { protected void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig); super.onConfigurationChanged(newConfig);
sendLocalesToFlutter(newConfig); try {
sendUserSettingsToFlutter(); sendLocalesToFlutter(newConfig);
sendUserSettingsToFlutter();
}catch (Throwable e){
Log.e(TAG, "onConfigurationChanged error ");
}
} }
/** /**
...@@ -462,25 +468,31 @@ public class XFlutterView extends FrameLayout { ...@@ -462,25 +468,31 @@ public class XFlutterView extends FrameLayout {
textInputPlugin textInputPlugin
); );
androidTouchProcessor = new AndroidTouchProcessor(this.flutterEngine.getRenderer()); androidTouchProcessor = new AndroidTouchProcessor(this.flutterEngine.getRenderer());
accessibilityBridge = new AccessibilityBridge(
this, if(accessibilityBridge==null){
flutterEngine.getAccessibilityChannel(), accessibilityBridge = new AccessibilityBridge(
(AccessibilityManager) getContext().getSystemService(Context.ACCESSIBILITY_SERVICE), this,
getContext().getContentResolver(), flutterEngine.getAccessibilityChannel(),
// TODO(mattcaroll): plumb the platform views controller to the accessibility bridge. (AccessibilityManager) getContext().getSystemService(Context.ACCESSIBILITY_SERVICE),
// https://github.com/flutter/flutter/issues/29618 getContext().getContentResolver(),
null // TODO(mattcaroll): plumb the platform views controller to the accessibility bridge.
); // https://github.com/flutter/flutter/issues/29618
accessibilityBridge.setOnAccessibilityChangeListener(onAccessibilityChangeListener); null
resetWillNotDraw( );
accessibilityBridge.isAccessibilityEnabled(), accessibilityBridge.setOnAccessibilityChangeListener(onAccessibilityChangeListener);
accessibilityBridge.isTouchExplorationEnabled() resetWillNotDraw(
); accessibilityBridge.isAccessibilityEnabled(),
accessibilityBridge.isTouchExplorationEnabled()
);
textInputPlugin.getInputMethodManager().restartInput(this);
}
// Inform the Android framework that it should retrieve a new InputConnection // Inform the Android framework that it should retrieve a new InputConnection
// now that an engine is attached. // now that an engine is attached.
// TODO(mattcarroll): once this is proven to work, move this line ot TextInputPlugin // TODO(mattcarroll): once this is proven to work, move this line ot TextInputPlugin
textInputPlugin.getInputMethodManager().restartInput(this);
// Push View and Context related information from Android to Flutter. // Push View and Context related information from Android to Flutter.
sendUserSettingsToFlutter(); sendUserSettingsToFlutter();
...@@ -511,7 +523,6 @@ public class XFlutterView extends FrameLayout { ...@@ -511,7 +523,6 @@ public class XFlutterView extends FrameLayout {
// signifies that this View does not process input (until a new engine is attached). // signifies that this View does not process input (until a new engine is attached).
// TODO(mattcarroll): once this is proven to work, move this line ot TextInputPlugin // TODO(mattcarroll): once this is proven to work, move this line ot TextInputPlugin
textInputPlugin.getInputMethodManager().restartInput(this); textInputPlugin.getInputMethodManager().restartInput(this);
// 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.
flutterEngine.getRenderer().detachFromRenderSurface(); flutterEngine.getRenderer().detachFromRenderSurface();
flutterEngine = null; flutterEngine = null;
...@@ -560,10 +571,13 @@ public class XFlutterView extends FrameLayout { ...@@ -560,10 +571,13 @@ public class XFlutterView extends FrameLayout {
* FlutterEngine must be non-null when this method is invoked. * FlutterEngine must be non-null when this method is invoked.
*/ */
private void sendUserSettingsToFlutter() { private void sendUserSettingsToFlutter() {
flutterEngine.getSettingsChannel().startMessage() if(flutterEngine!=null&&flutterEngine.getSettingsChannel()!=null){
.setTextScaleFactor(getResources().getConfiguration().fontScale) flutterEngine.getSettingsChannel().startMessage()
.setUse24HourFormat(DateFormat.is24HourFormat(getContext())) .setTextScaleFactor(getResources().getConfiguration().fontScale)
.send(); .setUse24HourFormat(DateFormat.is24HourFormat(getContext()))
.send();
}
} }
// TODO(mattcarroll): consider introducing a system channel for this communication instead of JNI // TODO(mattcarroll): consider introducing a system channel for this communication instead of JNI
......
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