You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@weex.apache.org by GitBox <gi...@apache.org> on 2018/11/28 09:13:40 UTC

[GitHub] YorkShen closed pull request #1835: * [Android] edit interaction logic && edit exception report logic

YorkShen closed pull request #1835: * [Android] edit interaction logic && edit exception report logic
URL: https://github.com/apache/incubator-weex/pull/1835
 
 
   

This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:

As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):

diff --git a/android/playground/app/src/main/java/com/alibaba/weex/extend/adapter/WXInstanceApmAdapter.java b/android/playground/app/src/main/java/com/alibaba/weex/extend/adapter/WXInstanceApmAdapter.java
index 93785db927..c9ff68355a 100644
--- a/android/playground/app/src/main/java/com/alibaba/weex/extend/adapter/WXInstanceApmAdapter.java
+++ b/android/playground/app/src/main/java/com/alibaba/weex/extend/adapter/WXInstanceApmAdapter.java
@@ -99,6 +99,11 @@ public void onDisappear() {
         isAppear = false;
     }
 
+    @Override
+    public String parseReportUrl(String originUrl) {
+        return originUrl;
+    }
+
     private APMInfo getAndCheckAndSubProcedureMap(String procedureName) {
         APMInfo info = mSubProcedureInfo.get(procedureName);
         if (null != info) {
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 6b91c07f56..823949b5a9 100644
--- a/android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java
+++ b/android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java
@@ -1359,9 +1359,12 @@ public void onRefreshSuccess(final int width, final int height) {
 
   public void onChangeElement(WXComponent component, boolean isOutOfScreen) {
 
-    if (isDestroy()  || null == mRenderContainer || mWXPerformance == null || "videoplus".equals(component.getComponentType())){
+    if (isDestroy()  || null == mRenderContainer || mWXPerformance == null ){
       return;
     }
+    if (null == component || component.isIgnoreInteraction){
+        return;
+    }
 
     if (mRenderContainer.hasConsumeEvent()) {
       return;
diff --git a/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridgeManager.java b/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridgeManager.java
index cbe68aebff..f77d2d28de 100644
--- a/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridgeManager.java
+++ b/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridgeManager.java
@@ -618,7 +618,15 @@ public Object callNativeComponent(String instanceId, String componentRef, String
 
     try {
       WXDomModule dom = WXModuleManager.getDomModule(instanceId);
-      dom.invokeMethod(componentRef, method, arguments);
+      if (null != dom){
+        dom.invokeMethod(componentRef, method, arguments);
+      }else {
+        WXSDKInstance instance = WXSDKManager.getInstance().getSDKInstance(instanceId);
+        if(null == instance || !instance.isDestroy()){
+          WXLogUtils.e("WXBridgeManager","callNativeComponent exception :null == dom ,method:"+method);
+        }
+      }
+
     } catch (Exception e) {
       WXLogUtils.e("[WXBridgeManager] callNativeComponent exception: ", e);
       WXExceptionUtils.commitCriticalExceptionRT(instanceId,
diff --git a/android/sdk/src/main/java/com/taobao/weex/performance/IWXApmMonitorAdapter.java b/android/sdk/src/main/java/com/taobao/weex/performance/IWXApmMonitorAdapter.java
index 6abc620911..1fe198e012 100644
--- a/android/sdk/src/main/java/com/taobao/weex/performance/IWXApmMonitorAdapter.java
+++ b/android/sdk/src/main/java/com/taobao/weex/performance/IWXApmMonitorAdapter.java
@@ -78,4 +78,5 @@
 
     void onDisappear();
 
+    String parseReportUrl(String originUrl);
 }
diff --git a/android/sdk/src/main/java/com/taobao/weex/performance/WXInstanceApm.java b/android/sdk/src/main/java/com/taobao/weex/performance/WXInstanceApm.java
index 88dfbd8256..533dc5dc93 100644
--- a/android/sdk/src/main/java/com/taobao/weex/performance/WXInstanceApm.java
+++ b/android/sdk/src/main/java/com/taobao/weex/performance/WXInstanceApm.java
@@ -21,6 +21,7 @@
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 
+import android.graphics.Rect;
 import android.text.TextUtils;
 import android.util.Log;
 import com.taobao.weex.BuildConfig;
@@ -116,6 +117,10 @@
     private boolean mEnd = false;
     private boolean hasRecordFistInteractionView =false;
     public final Map<String,Object> extInfo;
+    public boolean forceStopRecordInteraction = false;
+    public Rect instanceRect;
+    public String reportPageName;
+    public boolean hasReportLayerOverDraw = false;
 
     public WXInstanceApm(String instanceId) {
         mInstanceId = instanceId;
@@ -223,8 +228,9 @@ public void setPageName(String pageName) {
                 pageName = instance.getContainerInfo().get(KEY_PAGE_PROPERTIES_CONTAINER_NAME);
             }
         }
-        String fixPageName = TextUtils.isEmpty(pageName) ? "emptyPageName" : pageName;
-        addProperty(KEY_PAGE_PROPERTIES_BIZ_ID, fixPageName);
+        reportPageName = null == apmInstance?pageName:apmInstance.parseReportUrl(pageName);
+        reportPageName = TextUtils.isEmpty(reportPageName) ? "emptyPageName" : reportPageName;
+        addProperty(KEY_PAGE_PROPERTIES_BIZ_ID, reportPageName);
     }
 
     public void onAppear(){
@@ -269,7 +275,7 @@ public void arriveFSRenderTime() {
     }
 
     public void arriveInteraction(WXComponent targetComponent) {
-        if (null == apmInstance || null == targetComponent || targetComponent.getInstance() == null ) {
+        if (null == apmInstance || null == targetComponent || targetComponent.getInstance() == null) {
             return;
         }
         WXPerformance performanceRecord = targetComponent.getInstance().getWXPerformance();
@@ -281,6 +287,9 @@ public void arriveInteraction(WXComponent targetComponent) {
             onStage(KEY_PAGE_STAGES_FIRST_INTERACTION_VIEW);
             hasRecordFistInteractionView = true;
         }
+        if (forceStopRecordInteraction){
+            return;
+        }
 
         long curTime = WXUtils.getFixUnixTime();
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/action/GraphicActionAddElement.java b/android/sdk/src/main/java/com/taobao/weex/ui/action/GraphicActionAddElement.java
index 3295d8f777..2e17719b32 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/action/GraphicActionAddElement.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/action/GraphicActionAddElement.java
@@ -75,6 +75,13 @@ public GraphicActionAddElement(@NonNull WXSDKInstance instance, String ref,
           mParentRef);
       child = createComponent(instance, parent, basicComponentData);
       child.setTransition(WXTransition.fromMap(child.getStyles(), child));
+      if (null != parent && parent.isIgnoreInteraction){
+        child.isIgnoreInteraction = true;
+      }
+      if (null!= child && null != child.getAttrs() && "1".equals(child.getAttrs().get("ignoreInteraction"))){
+        child.isIgnoreInteraction = true;
+      }
+
     } catch (ClassCastException e) {
       Map<String, String> ext = new ArrayMap<>();
       WXComponent parent = WXSDKManager.getInstance().getWXRenderManager()
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 4d9447168d..1255579e2d 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
@@ -180,6 +180,7 @@
   public static final int TYPE_VIRTUAL = 1;
 
   private boolean waste = false;
+  public boolean isIgnoreInteraction = false;
 
   private ContentBoxMeasurement contentBoxMeasurement;
   private WXTransition mTransition;
@@ -987,8 +988,20 @@ public void setLayout(WXComponent component) {
     mAbsoluteY = (int) (nullParent ? 0 : mParent.getAbsoluteY() + getCSSLayoutTop());
     mAbsoluteX = (int) (nullParent ? 0 : mParent.getAbsoluteX() + getCSSLayoutLeft());
 
-    if (mIsAddElementToTree)
-      mInstance.onChangeElement(this, mAbsoluteY > mInstance.getWeexHeight() + 1);
+    if (mIsAddElementToTree){
+      if (null == getInstance().getApmForInstance().instanceRect){
+        getInstance().getApmForInstance().instanceRect = new Rect();
+      }
+      Rect instanceRect = getInstance().getApmForInstance().instanceRect;
+      instanceRect.set(0,0,mInstance.getWeexWidth(),mInstance.getWeexHeight());
+      boolean inScreen =
+          instanceRect.contains(mAbsoluteX,mAbsoluteY) //leftTop
+          || instanceRect.contains(mAbsoluteX+realWidth,mAbsoluteY)//rightTop
+          || instanceRect.contains(mAbsoluteX,mAbsoluteY+realHeight)//leftBottom
+          || instanceRect.contains(mAbsoluteX+realWidth,mAbsoluteY+realHeight);//rightBottom
+      mInstance.onChangeElement(this,!inScreen);
+    }
+
 
     if (mHost == null) {
       return;
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 b3be471a7e..91d4b29aa5 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
@@ -117,7 +117,13 @@ protected void dispatchDraw(Canvas canvas) {
     } catch (Throwable e) {
       if (getComponent() != null) {
         notifyLayerOverFlow();
-        reportLayerOverFlowError();
+        if (null != getComponent()){
+          WXSDKInstance instance = WXSDKManager.getInstance().getSDKInstance(getComponent().getInstanceId());
+          if (null != instance && null != instance.getApmForInstance() &&!instance.getApmForInstance().hasReportLayerOverDraw){
+            instance.getApmForInstance().hasReportLayerOverDraw = true;
+            reportLayerOverFlowError();
+          }
+        }
       }
       WXLogUtils.e("Layer overflow limit error", WXLogUtils.getStackTrace(e));
     }
diff --git a/android/sdk/src/main/java/com/taobao/weex/utils/WXExceptionUtils.java b/android/sdk/src/main/java/com/taobao/weex/utils/WXExceptionUtils.java
index fb67f6053e..54edfe86b4 100644
--- a/android/sdk/src/main/java/com/taobao/weex/utils/WXExceptionUtils.java
+++ b/android/sdk/src/main/java/com/taobao/weex/utils/WXExceptionUtils.java
@@ -95,7 +95,7 @@ public static void commitCriticalExceptionWithDefaultUrl(
             instance = WXSDKManager.getInstance().getAllInstanceMap().get(instanceId);
 
             if (null != instance) {
-                bundleUrlCommit = instance.getBundleUrl();
+                bundleUrlCommit = instance.getApmForInstance().reportPageName;
                 commitMap.put("templateInfo",instance.getTemplateInfo());
                 if (TextUtils.isEmpty(bundleUrlCommit) || bundleUrlCommit.equals(WXPerformance.DEFAULT)) {
                     if (!TextUtils.equals(degradeUrl, "BundleUrlDefaultDegradeUrl")) {


 

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


With regards,
Apache Git Services