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 2019/01/08 07:22:17 UTC

[incubator-weex] branch master updated: [WEEX][Android] Support Downgrade To Full Page Root Instance (#1952)

This is an automated email from the ASF dual-hosted git repository.

kyork pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-weex.git


The following commit(s) were added to refs/heads/master by this push:
     new 8b9ce52  [WEEX][Android] Support  Downgrade To Full Page Root Instance (#1952)
8b9ce52 is described below

commit 8b9ce52b33a3665dfa1d64ee045e66d4d7e6d9c0
Author: codefurture <gu...@163.com>
AuthorDate: Tue Jan 8 15:22:13 2019 +0800

    [WEEX][Android] Support  Downgrade To Full Page Root Instance (#1952)
---
 .../sdk/src/main/java/com/taobao/weex/WXSDKInstance.java    | 13 +++++++++++++
 .../main/java/com/taobao/weex/common/WXInstanceWrap.java    |  9 ++++++++-
 .../src/main/java/com/taobao/weex/ui/component/WXEmbed.java |  2 +-
 3 files changed, 22 insertions(+), 2 deletions(-)

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 36ca0bb..083dc90 100644
--- a/android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java
+++ b/android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java
@@ -182,6 +182,8 @@ public class WXSDKInstance implements IWXActivityStateListener,View.OnLayoutChan
 
   private List<String> mLayerOverFlowListeners;
 
+  private WXSDKInstance mParentInstance;
+
   public List<String> getLayerOverFlowListeners() {
     return mLayerOverFlowListeners;
   }
@@ -1499,6 +1501,14 @@ public class WXSDKInstance implements IWXActivityStateListener,View.OnLayoutChan
       mWXPerformance.screenRenderTime = System.currentTimeMillis() - mRenderStartTime;
   }
 
+  public WXSDKInstance getParentInstance() {
+    return mParentInstance;
+  }
+
+  public void setParentInstance(WXSDKInstance mParentInstance) {
+    this.mParentInstance = mParentInstance;
+  }
+
   private void destroyView(View rootView) {
     try {
       if (rootView instanceof ViewGroup) {
@@ -1522,6 +1532,9 @@ public class WXSDKInstance implements IWXActivityStateListener,View.OnLayoutChan
 
   public synchronized void destroy() {
     if(!isDestroy()) {
+      if(mParentInstance != null){
+         mParentInstance = null;
+      }
       mApmForInstance.onEnd();
       if(mRendered) {
         WXSDKManager.getInstance().destroyInstance(mInstanceId);
diff --git a/android/sdk/src/main/java/com/taobao/weex/common/WXInstanceWrap.java b/android/sdk/src/main/java/com/taobao/weex/common/WXInstanceWrap.java
index cbca430..46c6274 100644
--- a/android/sdk/src/main/java/com/taobao/weex/common/WXInstanceWrap.java
+++ b/android/sdk/src/main/java/com/taobao/weex/common/WXInstanceWrap.java
@@ -18,6 +18,7 @@
  */
 package com.taobao.weex.common;
 
+import com.taobao.weex.WXSDKInstance;
 import com.taobao.weex.annotation.JSMethod;
 
 /**
@@ -28,7 +29,13 @@ public class WXInstanceWrap extends WXModule {
   @JSMethod
   public void error(String type, String code, String info) {
     if (mWXSDKInstance != null) {
-      mWXSDKInstance.onRenderError(type + "|" + code, info);
+      WXSDKInstance root = mWXSDKInstance;
+      if(info != null && info.contains("downgrade_to_root")){
+        while (root.getParentInstance() != null){
+          root = root.getParentInstance();
+        }
+      }
+      root.onRenderError(type + "|" + code, info);
     }
   }
 }
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 81b4025..b95c8a0 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
@@ -338,7 +338,7 @@ public class WXEmbed extends WXDiv implements WXSDKInstance.OnInstanceVisibleLis
 
   private WXSDKInstance createInstance() {
     WXSDKInstance sdkInstance = getInstance().createNestedInstance(this);
-
+    sdkInstance.setParentInstance(getInstance());
     boolean needsAdd = !getAttrs().containsKey("disableInstanceVisibleListener");
     if(needsAdd){ //prevent switch off fire viewappear event twice
         getInstance().addOnInstanceVisibleListener(this);