From 43de5913f55547c53c3d265547e15371412d20ca Mon Sep 17 00:00:00 2001 From: hyb1996 <946994919@qq.com> Date: Thu, 25 Jan 2018 13:35:13 +0800 Subject: [PATCH] fix: inflate layout with activity instead of application context --- .../autojs/core/ui/ConvertLayoutInflater.java | 1 + .../core/ui/inflater/DynamicLayoutInflater.java | 11 +++++++++-- .../java/com/stardust/autojs/runtime/api/Floaty.java | 8 ++++++-- .../main/java/com/stardust/autojs/runtime/api/UI.java | 2 +- 4 files changed, 17 insertions(+), 5 deletions(-) diff --git a/autojs/src/main/java/com/stardust/autojs/core/ui/ConvertLayoutInflater.java b/autojs/src/main/java/com/stardust/autojs/core/ui/ConvertLayoutInflater.java index c4a2d31c..3823194d 100644 --- a/autojs/src/main/java/com/stardust/autojs/core/ui/ConvertLayoutInflater.java +++ b/autojs/src/main/java/com/stardust/autojs/core/ui/ConvertLayoutInflater.java @@ -25,6 +25,7 @@ public class ConvertLayoutInflater implements JsLayoutInflater { try { String androidLayoutXml = XmlConverter.convertToAndroidLayout(xml); JsFrameLayout root = new JsFrameLayout(context); + mDynamicLayoutInflater.setContext(context); mDynamicLayoutInflater.inflate(androidLayoutXml, root); return root; } catch (Exception e) { diff --git a/autojs/src/main/java/com/stardust/autojs/core/ui/inflater/DynamicLayoutInflater.java b/autojs/src/main/java/com/stardust/autojs/core/ui/inflater/DynamicLayoutInflater.java index 4eef76bb..749ca140 100644 --- a/autojs/src/main/java/com/stardust/autojs/core/ui/inflater/DynamicLayoutInflater.java +++ b/autojs/src/main/java/com/stardust/autojs/core/ui/inflater/DynamicLayoutInflater.java @@ -81,12 +81,19 @@ public class DynamicLayoutInflater { private Context mContext; private ValueParser mValueParser; - public DynamicLayoutInflater(Context context, ValueParser valueParser) { - mContext = context; + public DynamicLayoutInflater(ValueParser valueParser) { mValueParser = valueParser; registerViewAttrSetters(); } + public Context getContext() { + return mContext; + } + + public void setContext(Context context) { + mContext = context; + } + protected void registerViewAttrSetters() { registerViewAttrSetter(TextView.class.getName(), new TextViewAttrSetter<>(mValueParser)); registerViewAttrSetter(EditText.class.getName(), new TextViewAttrSetter<>(mValueParser)); diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/api/Floaty.java b/autojs/src/main/java/com/stardust/autojs/runtime/api/Floaty.java index da81fcf1..c4e54e7f 100644 --- a/autojs/src/main/java/com/stardust/autojs/runtime/api/Floaty.java +++ b/autojs/src/main/java/com/stardust/autojs/runtime/api/Floaty.java @@ -63,8 +63,8 @@ public class Floaty { Iterator iterator = mWindows.iterator(); while (iterator.hasNext()) { JsFloatyWindow window = iterator.next(); - window.close(); iterator.remove(); + window.close(false); } } @@ -141,7 +141,11 @@ public class Floaty { } public void close() { - if (mWindow == null || !mWindows.remove(this)) { + close(true); + } + + void close(boolean removeFromWindows) { + if (removeFromWindows && !mWindows.remove(this)) { return; } runWithWindow(() -> { diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/api/UI.java b/autojs/src/main/java/com/stardust/autojs/runtime/api/UI.java index 9e0d73d6..eb937e78 100644 --- a/autojs/src/main/java/com/stardust/autojs/runtime/api/UI.java +++ b/autojs/src/main/java/com/stardust/autojs/runtime/api/UI.java @@ -35,7 +35,7 @@ public class UI extends ProxyObject { mContext = context; mRuntime = runtime; mValueParser = new ValueParser(new Drawables()); - DynamicLayoutInflater inflater = new DynamicLayoutInflater(context, mValueParser); + DynamicLayoutInflater inflater = new DynamicLayoutInflater(mValueParser); inflater.registerViewAttrSetter(JsImageView.class.getName(), new JsImageViewAttrSetter(mValueParser)); mJsLayoutInflater = new ConvertLayoutInflater(inflater);