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; - } /**