You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@weex.apache.org by ky...@apache.org on 2018/05/22 10:20:48 UTC
[2/3] incubator-weex git commit: [WEEX-376][Android] Fix div
layeroverflow event
[WEEX-376][Android] Fix div layeroverflow event
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/2a757359
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/2a757359
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/2a757359
Branch: refs/heads/master
Commit: 2a7573591eb0bd563ed2e2a5bc13baa52dd16937
Parents: 4dd5b4f
Author: miomin <69...@qq.com>
Authored: Tue May 22 15:02:46 2018 +0800
Committer: miomin <mi...@foxmail.com>
Committed: Tue May 22 15:14:00 2018 +0800
----------------------------------------------------------------------
.../java/com/taobao/weex/WXSDKInstance.java | 21 +++++++++++++++
.../java/com/taobao/weex/common/Constants.java | 6 +++++
.../taobao/weex/ui/component/WXComponent.java | 19 ++++++++++++-
.../com/taobao/weex/ui/component/WXEmbed.java | 13 ++++++++-
.../taobao/weex/ui/component/WXVContainer.java | 10 -------
.../com/taobao/weex/ui/view/WXFrameLayout.java | 28 +++++++++++++++++++-
.../Source/android/base/string/string_utils.h | 2 ++
weex_core/Source/core/render/node/render_list.h | 3 ---
8 files changed, 86 insertions(+), 16 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2a757359/android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java b/android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java
index 5abad4a..a75092d 100644
--- a/android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java
+++ b/android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java
@@ -162,6 +162,23 @@ public class WXSDKInstance implements IWXActivityStateListener,View.OnLayoutChan
private List<OnWXScrollListener> mWXScrollListeners;
+ private List<String> mLayerOverFlowListeners;
+
+ public List<String> getLayerOverFlowListeners() {
+ return mLayerOverFlowListeners;
+ }
+
+ public void addLayerOverFlowListener(String ref) {
+ if (mLayerOverFlowListeners == null)
+ mLayerOverFlowListeners = new ArrayList<>();
+ mLayerOverFlowListeners.add(ref);
+ }
+
+ public void removeLayerOverFlowListener(String ref) {
+ if (mLayerOverFlowListeners != null)
+ mLayerOverFlowListeners.remove(ref);
+ }
+
/**
* whether we are in preRender mode
* */
@@ -1339,6 +1356,10 @@ public class WXSDKInstance implements IWXActivityStateListener,View.OnLayoutChan
mComponentObserver = null;
}
+ if (mLayerOverFlowListeners != null) {
+ mLayerOverFlowListeners.clear();
+ }
+
getFlatUIContext().destroy();
mFlatGUIContext = null;
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2a757359/android/sdk/src/main/java/com/taobao/weex/common/Constants.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/common/Constants.java b/android/sdk/src/main/java/com/taobao/weex/common/Constants.java
index c5c8cb9..fdf5e82 100644
--- a/android/sdk/src/main/java/com/taobao/weex/common/Constants.java
+++ b/android/sdk/src/main/java/com/taobao/weex/common/Constants.java
@@ -26,6 +26,12 @@ public class Constants {
int VERTICAL = 1;
}
+ public interface Weex {
+ String REF = "ref";
+ String INSTANCEID = "instanceid";
+ String TYPE = "type";
+ }
+
public interface Name {
String DEFAULT_WIDTH = "defaultWidth";
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2a757359/android/sdk/src/main/java/com/taobao/weex/ui/component/WXComponent.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXComponent.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXComponent.java
index 74a81fd..e5a7660 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXComponent.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXComponent.java
@@ -65,7 +65,6 @@ import android.support.v4.view.AccessibilityDelegateCompat;
import android.support.v4.view.ViewCompat;
import android.support.v4.view.accessibility.AccessibilityNodeInfoCompat;
import android.text.TextUtils;
-import android.util.Log;
import android.util.Pair;
import android.view.Menu;
import android.view.View;
@@ -304,6 +303,10 @@ public abstract class WXComponent<T extends View> extends WXBasicComponent imple
return;
}
final View view = getRealView();
+
+ if (type.equals(Constants.Event.LAYEROVERFLOW))
+ addLayerOverFlowListener(getRef());
+
if (type.equals(Constants.Event.CLICK)) {
if (view == null) {
// wait next time to add.
@@ -1402,6 +1405,10 @@ public abstract class WXComponent<T extends View> extends WXBasicComponent imple
if (getEvents() == null || mAppendEvents == null || mGestureType == null) {
return;
}
+
+ if (type.equals(Constants.Event.LAYEROVERFLOW))
+ removeLayerOverFlowListener(getRef());
+
getEvents().remove(type);
mAppendEvents.remove(type);//only clean append events, not dom's events.
mGestureType.remove(type);
@@ -2276,4 +2283,14 @@ public abstract class WXComponent<T extends View> extends WXBasicComponent imple
updateNativeStyle(objectEntry.getKey(), objectEntry.getValue());
}
}
+
+ public void addLayerOverFlowListener(String ref) {
+ if (getInstance() != null)
+ getInstance().addLayerOverFlowListener(ref);
+ }
+
+ public void removeLayerOverFlowListener(String ref) {
+ if (getInstance() != null)
+ getInstance().removeLayerOverFlowListener(ref);
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2a757359/android/sdk/src/main/java/com/taobao/weex/ui/component/WXEmbed.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXEmbed.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXEmbed.java
index 254b3dc..3160172 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXEmbed.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXEmbed.java
@@ -20,7 +20,6 @@ package com.taobao.weex.ui.component;
import android.annotation.SuppressLint;
import android.text.TextUtils;
-import android.util.Log;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
@@ -501,4 +500,16 @@ public class WXEmbed extends WXDiv implements WXSDKInstance.OnInstanceVisibleLis
+ " strategy " + this.strategy);
}
}
+
+ @Override
+ public void addLayerOverFlowListener(String ref) {
+ if (mNestedInstance != null)
+ mNestedInstance.addLayerOverFlowListener(getRef());
+ }
+
+ @Override
+ public void removeLayerOverFlowListener(String ref) {
+ if (mNestedInstance != null)
+ mNestedInstance.removeLayerOverFlowListener(ref);
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2a757359/android/sdk/src/main/java/com/taobao/weex/ui/component/WXVContainer.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXVContainer.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXVContainer.java
index 85dfbf2..88c9818 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXVContainer.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXVContainer.java
@@ -351,16 +351,6 @@ public abstract class WXVContainer<T extends ViewGroup> extends WXComponent<T> {
}
}
- public void notifyLayerOverFlow() {
- if (containsEvent(Constants.Event.LAYEROVERFLOW)) {
- Map<String, Object> params = new HashMap<>();
- params.put("ref", getRef());
- params.put("instanceid", getInstanceId());
- fireEvent(Constants.Event.LAYEROVERFLOW, params);
- }
- }
-
-
/********************************************************
* begin hook Activity life cycle callback *
********************************************************/
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2a757359/android/sdk/src/main/java/com/taobao/weex/ui/view/WXFrameLayout.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/view/WXFrameLayout.java b/android/sdk/src/main/java/com/taobao/weex/ui/view/WXFrameLayout.java
index e1c375a..551a0e2 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/view/WXFrameLayout.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/view/WXFrameLayout.java
@@ -28,7 +28,11 @@ import android.view.MotionEvent;
import android.view.View;
import android.widget.FrameLayout;
+import com.taobao.weex.WXSDKInstance;
+import com.taobao.weex.WXSDKManager;
+import com.taobao.weex.common.Constants;
import com.taobao.weex.common.WXErrorCode;
+import com.taobao.weex.ui.component.WXComponent;
import com.taobao.weex.ui.component.WXDiv;
import com.taobao.weex.ui.flat.widget.Widget;
import com.taobao.weex.ui.view.gesture.WXGesture;
@@ -37,7 +41,9 @@ import com.taobao.weex.utils.WXExceptionUtils;
import com.taobao.weex.utils.WXLogUtils;
import com.taobao.weex.utils.WXViewUtils;
import java.lang.ref.WeakReference;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
/**
* FrameLayout wrapper
@@ -105,7 +111,7 @@ public class WXFrameLayout extends FrameLayout implements WXGestureObservable,IR
dispatchDrawInterval(canvas);
} catch (Throwable e) {
if (getComponent() != null) {
- getComponent().notifyLayerOverFlow();
+ notifyLayerOverFlow();
reportLayerOverFlowError();
}
WXLogUtils.e("Layer overflow limit error", WXLogUtils.getStackTrace(e));
@@ -145,4 +151,24 @@ public class WXFrameLayout extends FrameLayout implements WXGestureObservable,IR
}
return deep;
}
+
+ public void notifyLayerOverFlow() {
+ if (getComponent() == null)
+ return;
+
+ WXSDKInstance instance = getComponent().getInstance();
+ if (instance == null)
+ return;
+
+ if (instance.getLayerOverFlowListeners() == null)
+ return;
+
+ for (String ref : instance.getLayerOverFlowListeners()) {
+ WXComponent component = WXSDKManager.getInstance().getWXRenderManager().getWXComponent(instance.getInstanceId(), ref);
+ Map<String, Object> params = new HashMap<>();
+ params.put(Constants.Weex.REF, ref);
+ params.put(Constants.Weex.INSTANCEID, component.getInstanceId());
+ component.fireEvent(Constants.Event.LAYEROVERFLOW, params);
+ }
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2a757359/weex_core/Source/android/base/string/string_utils.h
----------------------------------------------------------------------
diff --git a/weex_core/Source/android/base/string/string_utils.h b/weex_core/Source/android/base/string/string_utils.h
index aeda0c5..8c51873 100644
--- a/weex_core/Source/android/base/string/string_utils.h
+++ b/weex_core/Source/android/base/string/string_utils.h
@@ -58,6 +58,8 @@ static inline std::string jString2Str(JNIEnv *env, const jstring &jstr) {
}
static inline std::string jString2StrFast(JNIEnv *env, const jstring &jstr){
+ if (jstr == nullptr)
+ return std::string("");
const char *nativeString = env->GetStringUTFChars(jstr, JNI_FALSE);
return std::string(nativeString);
}
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2a757359/weex_core/Source/core/render/node/render_list.h
----------------------------------------------------------------------
diff --git a/weex_core/Source/core/render/node/render_list.h b/weex_core/Source/core/render/node/render_list.h
index a1cb190..25b6ed0 100644
--- a/weex_core/Source/core/render/node/render_list.h
+++ b/weex_core/Source/core/render/node/render_list.h
@@ -196,7 +196,6 @@ namespace WeexCore {
}
if(mColumnWidth != 0 && !isnan(mColumnWidth)) {
- //LOGE("listen child->ApplyStyle %s %s", child->Ref().c_str(), std::to_string(mColumnWidth).c_str());
AddRenderObjectWidth(child, false);
}
return index;
@@ -241,8 +240,6 @@ namespace WeexCore {
int count = getChildCount();
for (Index i = 0; i < count; i++) {
RenderObject *child = GetChild(i);
- //LOGE("listen child->UpdateAttr %s %s", child->Ref().c_str(), std::to_string(mColumnWidth).c_str());
- // ApplyStyle(WIDTH, std::to_string(mColumnWidth));
AddRenderObjectWidth(this, true);
}
}