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);
         }
       }