Repository: incubator-weex
Updated Branches:
  refs/heads/master 0b9e00eb4 -> 44adc5fea


[WEEX-376][Core] Support 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/44adc5fe
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/44adc5fe
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/44adc5fe

Branch: refs/heads/master
Commit: 44adc5fea67ac211d5c31085f2e2f51b2eb6014d
Parents: 0b9e00e
Author: miomin <691292...@qq.com>
Authored: Thu May 17 15:34:51 2018 +0800
Committer: miomin <691292...@qq.com>
Committed: Thu May 17 15:34:51 2018 +0800

----------------------------------------------------------------------
 .../java/com/taobao/weex/WXSDKInstance.java     | 10 -----
 .../java/com/taobao/weex/common/Constants.java  |  2 +
 .../com/taobao/weex/common/WXErrorCode.java     |  2 +-
 .../taobao/weex/ui/component/WXComponent.java   | 12 ++++--
 .../com/taobao/weex/ui/component/WXDiv.java     | 11 ------
 .../com/taobao/weex/ui/component/WXEmbed.java   |  2 -
 .../taobao/weex/ui/component/WXVContainer.java  | 12 ++++++
 .../com/taobao/weex/ui/view/WXFrameLayout.java  | 41 +++++++-------------
 .../weex/ui/view/border/BorderDrawable.java     |  3 ++
 .../java/com/taobao/weex/utils/WXViewUtils.java |  8 +++-
 10 files changed, 48 insertions(+), 55 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/44adc5fe/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 5459bbc..5abad4a 100644
--- a/android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java
+++ b/android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java
@@ -171,16 +171,6 @@ public class WXSDKInstance implements 
IWXActivityStateListener,View.OnLayoutChan
   private ComponentObserver mComponentObserver;
   private Map<String, GraphicActionAddElement> inactiveAddElementAction = new 
ArrayMap<>();
 
-  private boolean hasLayerLimit = false;
-
-  public void setLayerLimit(boolean hasLayerLimit) {
-    this.hasLayerLimit = hasLayerLimit;
-  }
-
-  public boolean isLayerLimit() {
-    return hasLayerLimit;
-  }
-
   /**
    * set make weexCore run in single process mode
    * @param flag true means weexCore run in single process mode or multi 
process mode

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/44adc5fe/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 7731bd3..c5c8cb9 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
@@ -322,6 +322,8 @@ public class Constants {
 
     String ON_TRANSITION_END = "transitionEnd";
 
+    String LAYEROVERFLOW = "layeroverflow";
+
     interface SLOT_LIFECYCLE {
       String CREATE = "create";
       String ATTACH = "attach";

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/44adc5fe/android/sdk/src/main/java/com/taobao/weex/common/WXErrorCode.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/common/WXErrorCode.java 
b/android/sdk/src/main/java/com/taobao/weex/common/WXErrorCode.java
index fcc5394..467da61 100644
--- a/android/sdk/src/main/java/com/taobao/weex/common/WXErrorCode.java
+++ b/android/sdk/src/main/java/com/taobao/weex/common/WXErrorCode.java
@@ -230,7 +230,7 @@ public enum WXErrorCode {
    */
   WX_RENDER_ERR_JS_CREATE_INSTANCE("-9600", 
"WX_RENDER_ERR_JS_CREATE_INSTANCE",ErrorType.RENDER_ERROR,ErrorGroup.JS),
   WX_RENDER_ERR_JS_RUNTIME("-9601", "WX_RENDER_ERR for js 
error",ErrorType.RENDER_ERROR, ErrorGroup.JS),
-  WX_RENDER_ERR_LAYER_OVERFLOW("-9602", "WX_RENDER_ERR_LAYER_OVERFLOW", 
ErrorType.RENDER_ERROR, ErrorGroup.JS),
+  WX_RENDER_ERR_LAYER_OVERFLOW("-9602", "WX_RENDER_ERR_LAYER_OVERFLOW", 
ErrorType.NATIVE_ERROR, ErrorGroup.NATIVE),
   WX_RENDER_ERR_CONTAINER_TYPE("-9611", "WX_RENDER_ERR_CONTAINER_TYPE", 
ErrorType.JS_ERROR,ErrorGroup.JS),
 
 

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/44adc5fe/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 8c8b003..b7e2476 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
@@ -18,7 +18,6 @@
  */
 package com.taobao.weex.ui.component;
 
-import android.support.v4.util.ArraySet;
 import com.taobao.weex.dom.CSSShorthand.CORNER;
 import java.lang.annotation.ElementType;
 import java.lang.annotation.Retention;
@@ -27,6 +26,7 @@ import java.lang.annotation.Target;
 import java.lang.reflect.Type;
 import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
@@ -296,7 +296,7 @@ public abstract class WXComponent<T extends View> extends 
WXBasicComponent imple
    */
   public void addEvent(final String type) {
     if (mAppendEvents == null) {
-      mAppendEvents = new ArraySet<>();
+      mAppendEvents = new HashSet<>();
     }
     if (TextUtils.isEmpty(type) || mAppendEvents.contains(type)) {
       return;
@@ -332,7 +332,7 @@ public abstract class WXComponent<T extends View> extends 
WXBasicComponent imple
           mGesture.setPreventMoveEvent(isPreventMove);
         }
         if (mGestureType == null) {
-          mGestureType = new ArraySet<>();
+          mGestureType = new HashSet<>();
         }
         mGestureType.add(type);
         ((WXGestureObservable)view).registerGestureListener(mGesture);
@@ -1184,7 +1184,11 @@ public abstract class WXComponent<T extends View> 
extends WXBasicComponent imple
         @Override
         public void onInitializeAccessibilityNodeInfo(View host, 
AccessibilityNodeInfoCompat info) {
           super.onInitializeAccessibilityNodeInfo(host, info);
-          info.setRoleDescription(finalRole);
+          try {
+            info.setRoleDescription(finalRole);
+          } catch (Exception e) {
+            WXLogUtils.e("SetRole failed!");
+          }
         }
       };
       ViewCompat.setAccessibilityDelegate(host, delegate);

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/44adc5fe/android/sdk/src/main/java/com/taobao/weex/ui/component/WXDiv.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXDiv.java 
b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXDiv.java
index f7954ee..8af5a10 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXDiv.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXDiv.java
@@ -120,15 +120,4 @@ public class WXDiv extends WidgetContainer<WXFrameLayout> 
implements FlatCompone
   public boolean isVirtualComponent() {
     return !promoteToView(true);
   }
-
-  @Override
-  protected boolean setProperty(String key, Object param) {
-    switch (key) {
-      case Constants.Name.LAYERLIMIT:
-      case Constants.Name.LAYER_LIMIT:
-        getInstance().setLayerLimit(WXUtils.getBoolean(param, false));
-        return true;
-    }
-    return super.setProperty(key, param);
-  }
 }

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/44adc5fe/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 74c483c..254b3dc 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
@@ -333,8 +333,6 @@ public class WXEmbed extends WXDiv implements 
WXSDKInstance.OnInstanceVisibleLis
       return sdkInstance;
     }
 
-    sdkInstance.setLayerLimit(getInstance().isLayerLimit());
-
     sdkInstance.renderByUrl(WXPerformance.DEFAULT,
             url,
             null, null,

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/44adc5fe/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 9897e26..85dfbf2 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
@@ -38,6 +38,8 @@ import com.taobao.weex.utils.WXUtils;
 import com.taobao.weex.utils.WXViewUtils;
 
 import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Map;
 
 /**
  * All container components must implement this class
@@ -349,6 +351,16 @@ 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/44adc5fe/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 8e3638d..e1c375a 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
@@ -6,9 +6,9 @@
  * to you under the Apache License, Version 2.0 (the
  * "License"); you may not use this file except in compliance
  * with the License.  You may obtain a copy of the License at
- * 
+ *
  *   http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing,
  * software distributed under the License is distributed on an
  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
@@ -101,30 +101,26 @@ public class WXFrameLayout extends FrameLayout implements 
WXGestureObservable,IR
 
   @Override
   protected void dispatchDraw(Canvas canvas) {
-    if (getComponent() != null && getComponent().getInstance().isLayerLimit()) 
{
-      try {
-        dispatchDrawInterval(canvas);
-      } catch (StackOverflowError e) {
-        reportLayerOverFlowError();
-        WXLogUtils.e("FlatGUI Crashed when dispatchDraw", 
WXLogUtils.getStackTrace(e));
-      }
-    } else {
-      try {
-        dispatchDrawInterval(canvas);
-      } catch (StackOverflowError e){
+    try {
+      dispatchDrawInterval(canvas);
+    } catch (Throwable e) {
+      if (getComponent() != null) {
+        getComponent().notifyLayerOverFlow();
         reportLayerOverFlowError();
-        WXLogUtils.e("FlatGUI Crashed when dispatchDraw", 
WXLogUtils.getStackTrace(e));
       }
+      WXLogUtils.e("Layer overflow limit error", WXLogUtils.getStackTrace(e));
     }
   }
 
   private int reportLayerOverFlowError() {
     int deep = calLayerDeep(this, 0);
-    WXExceptionUtils.commitCriticalExceptionRT(getComponent().getInstanceId(),
-            WXErrorCode.WX_RENDER_ERR_LAYER_OVERFLOW,
-            "draw android view",
-            WXErrorCode.WX_RENDER_ERR_LAYER_OVERFLOW.getErrorMsg() + "Layer 
overflow limit error: " + deep + " layers!",
-            null);
+    if (getComponent() != null) {
+      
WXExceptionUtils.commitCriticalExceptionRT(getComponent().getInstanceId(),
+              WXErrorCode.WX_RENDER_ERR_LAYER_OVERFLOW,
+              "draw android view",
+              WXErrorCode.WX_RENDER_ERR_LAYER_OVERFLOW.getErrorMsg() + "Layer 
overflow limit error: " + deep + " layers!",
+              null);
+    }
     return deep;
   }
 
@@ -142,13 +138,6 @@ public class WXFrameLayout extends FrameLayout implements 
WXGestureObservable,IR
     }
   }
 
-  static class LayerOverFlowLimitException extends RuntimeException {
-
-    public LayerOverFlowLimitException(String message) {
-      super(message);
-    }
-  }
-
   private int calLayerDeep(View view, int deep) {
     deep++;
     if (view.getParent() != null && view.getParent() instanceof View) {

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/44adc5fe/android/sdk/src/main/java/com/taobao/weex/ui/view/border/BorderDrawable.java
----------------------------------------------------------------------
diff --git 
a/android/sdk/src/main/java/com/taobao/weex/ui/view/border/BorderDrawable.java 
b/android/sdk/src/main/java/com/taobao/weex/ui/view/border/BorderDrawable.java
index d1ff5c2..e4c0dfb 100644
--- 
a/android/sdk/src/main/java/com/taobao/weex/ui/view/border/BorderDrawable.java
+++ 
b/android/sdk/src/main/java/com/taobao/weex/ui/view/border/BorderDrawable.java
@@ -438,6 +438,9 @@ public class BorderDrawable extends Drawable {
       mRectBounds.set(getBounds());
     }
 
+    if (mBorderWidth == null)
+      return;
+
     final float leftBorderWidth = mBorderWidth.get(EDGE.LEFT);
     final float topBorderWidth = mBorderWidth.get(EDGE.TOP);
     final float bottomBorderWidth = mBorderWidth.get(EDGE.BOTTOM);

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/44adc5fe/android/sdk/src/main/java/com/taobao/weex/utils/WXViewUtils.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/utils/WXViewUtils.java 
b/android/sdk/src/main/java/com/taobao/weex/utils/WXViewUtils.java
index a654cf2..2f94490 100644
--- a/android/sdk/src/main/java/com/taobao/weex/utils/WXViewUtils.java
+++ b/android/sdk/src/main/java/com/taobao/weex/utils/WXViewUtils.java
@@ -178,12 +178,18 @@ public class WXViewUtils {
 
   public static int getScreenHeight(Context cxt) {
     if(cxt!=null){
+      Resources res = cxt.getResources();
       mScreenHeight =cxt.getResources().getDisplayMetrics().heightPixels;
+      if(WXEnvironment.SETTING_FORCE_VERTICAL_SCREEN){
+        mScreenWidth = res
+                .getDisplayMetrics()
+                .widthPixels;
+        mScreenHeight = mScreenHeight > mScreenWidth ? mScreenHeight : 
mScreenWidth;
+      }
     } else if (WXEnvironment.isApkDebugable()){
       throw new WXRuntimeException("Error Context is null When 
getScreenHeight");
     }
     return mScreenHeight;
-
   }
 
   /**

Reply via email to