Repository: incubator-weex
Updated Branches:
  refs/heads/master 8eee198d0 -> fb6010943


Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/incubator-weex 
into merge-pull-request-master

[WEEX-130][android] High Performance Binary Wson Supported

[WEEX-192][android] [Weex Support Template MD5 Not Match Downgrade]

[WEEX-194][android]Scroller Show Refresh Header When Long Touch on Click event 
cell
close #987


Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/b91ac7db
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/b91ac7db
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/b91ac7db

Branch: refs/heads/master
Commit: b91ac7dba0e7872661050fd38d0510aecd27afbe
Parents: 674070b c330abc
Author: acton393 <[email protected]>
Authored: Thu Jan 18 14:09:47 2018 +0800
Committer: acton393 <[email protected]>
Committed: Thu Jan 18 14:13:14 2018 +0800

----------------------------------------------------------------------
 .../java/com/taobao/weex/WXSDKInstance.java     | 48 ++++++++++++++++++--
 .../com/taobao/weex/bridge/WXBridgeManager.java |  2 +-
 .../java/com/taobao/weex/common/Constants.java  |  5 ++
 .../taobao/weex/ui/component/WXScroller.java    |  1 +
 .../weex/ui/component/list/WXListComponent.java |  2 +-
 .../com/taobao/weex/ui/module/WXMetaModule.java | 23 ++++++++++
 .../java/com/taobao/weex/utils/WXFileUtils.java | 22 +++++++++
 .../com/taobao/weex/utils/WXFileUtilsTest.java  |  1 +
 8 files changed, 97 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b91ac7db/android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java
----------------------------------------------------------------------
diff --cc android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java
index d9edcd9,d9edcd9..2c1b47b
--- a/android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java
+++ b/android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java
@@@ -100,6 -100,6 +100,8 @@@ import static com.taobao.weex.http.WXHt
   */
  public class WXSDKInstance implements IWXActivityStateListener,DomContext, 
View.OnLayoutChangeListener {
  
++  private static  final  String SOURCE_TEMPLATE_BASE64_MD5 = 
"templateSourceBase64MD5";
++
    //Performance
    public boolean mEnd = false;
    public static final String BUNDLE_URL = "bundleUrl";
@@@ -1787,21 -1787,21 +1789,57 @@@
    public String getTemplateInfo() {
      String template = getTemplate();
      if(template == null){
--      return " template md5 null";
++      return " template md5 null " + JSONObject.toJSONString(responseHeaders);
      }
      if(TextUtils.isEmpty(template)){
--      return " template md5  length 0";
++      return " template md5  length 0 " + 
JSONObject.toJSONString(responseHeaders);
      }
      try {
        byte[] bts = template.getBytes("UTF-8");
--      return " template md5 " + WXFileUtils.md5(bts) + " length " +   
bts.length
--               + "response header " + 
JSONObject.toJSONString(responseHeaders);
++      String sourceMD5 = WXFileUtils.md5(bts);
++      String sourceBase64MD5 = WXFileUtils.base64Md5(bts);
++      ArrayList<String> sourceMD5List = new ArrayList<>();
++      ArrayList<String> sourceBase64MD5List = new ArrayList<>();
++      sourceMD5List.add(sourceMD5);
++      sourceBase64MD5List.add(sourceBase64MD5);
++      responseHeaders.put("templateSourceMD5", sourceMD5List);
++      responseHeaders.put(SOURCE_TEMPLATE_BASE64_MD5, sourceBase64MD5List);
++      return " template md5 " + sourceMD5 + " length " +   bts.length
++              + " base64 md5 " + sourceBase64MD5
++               + " response header " + 
JSONObject.toJSONString(responseHeaders);
      } catch (UnsupportedEncodingException e) {
        return "template md5 getBytes error";
      }
  
    }
  
++  /**
++   * check template header md5 match with header  content-md5
++   * */
++  public boolean isContentMd5Match(){
++    if(responseHeaders == null){
++      return true;
++    }
++    List<String> contentMD5s = responseHeaders.get("Content-Md5");
++    if(contentMD5s == null){
++      contentMD5s  = responseHeaders.get("content-md5");
++    }
++    if(contentMD5s == null || contentMD5s.size() <= 0){
++      return true;
++    }
++    String md5 = contentMD5s.get(0);
++
++    List<String> sourceBase64Md5 = 
responseHeaders.get(SOURCE_TEMPLATE_BASE64_MD5);
++    if(sourceBase64Md5 == null){
++      getTemplateInfo();
++      sourceBase64Md5 = responseHeaders.get(SOURCE_TEMPLATE_BASE64_MD5);
++    }
++    if(sourceBase64Md5 == null || sourceBase64Md5.size() == 0){
++      return  true;
++    }
++    return  md5.equals(sourceBase64Md5.get(0));
++  }
++
    public String getTemplate() {
      if(templateRef == null){
        return  null;
@@@ -1810,7 -1810,7 +1848,7 @@@
    }
  
    public void setTemplate(String template) {
--    this.templateRef = new WeakReference<String>(template);
++    this.templateRef = new WeakReference<>(template);
    }
  
    public interface NestedInstanceInterceptor {

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b91ac7db/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridgeManager.java
----------------------------------------------------------------------
diff --cc android/sdk/src/main/java/com/taobao/weex/bridge/WXBridgeManager.java
index 54e0643,54e0643..d86dfbc
--- a/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridgeManager.java
+++ b/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridgeManager.java
@@@ -2033,7 -2033,7 +2033,7 @@@ public class WXBridgeManager implement
      WXSDKInstance instance = null;
      if (instanceId != null && (instance = 
WXSDKManager.getInstance().getSDKInstance(instanceId)) != null) {
          exception +=   "\n getTemplateInfo==" 
+instance.getTemplateInfo();//add network header info
--      if (METHOD_CREATE_INSTANCE.equals(function)) {
++      if (METHOD_CREATE_INSTANCE.equals(function) || 
!instance.isContentMd5Match()) {
          try {
            if (isJSFrameworkInit() && reInitCount > 1 && 
!instance.isNeedReLoad()) {
              // JSONObject domObject = JSON.parseObject(tasks);

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b91ac7db/android/sdk/src/main/java/com/taobao/weex/common/Constants.java
----------------------------------------------------------------------
diff --cc android/sdk/src/main/java/com/taobao/weex/common/Constants.java
index 0a1e434,0a1e434..3bb91f6
--- a/android/sdk/src/main/java/com/taobao/weex/common/Constants.java
+++ b/android/sdk/src/main/java/com/taobao/weex/common/Constants.java
@@@ -220,6 -220,6 +220,9 @@@ public class Constants 
  
      String SHOULD_STOP_PROPAGATION_INIT_RESULT = 
"shouldStopPropagationInitResult";
      String SHOULD_STOP_PROPAGATION_INTERVAL = "shouldStopPropagationInterval";
++
++
++    String NEST_SCROLLING_ENABLED = "nestedScrollingEnabled";
    }
  
    public interface Value {
@@@ -317,6 -317,6 +320,8 @@@
  
      String SHOULD_STOP_PROPAGATION = "shouldStopPropagation";
  
++
++
    }
  
    public interface PSEUDO {

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b91ac7db/android/sdk/src/main/java/com/taobao/weex/ui/component/WXScroller.java
----------------------------------------------------------------------
diff --cc android/sdk/src/main/java/com/taobao/weex/ui/component/WXScroller.java
index 9c198e3,9c198e3..4e3561d
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXScroller.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXScroller.java
@@@ -411,6 -411,6 +411,7 @@@ public class WXScroller extends WXVCont
          LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
        innerView.addView(mRealView, layoutParams);
        innerView.setVerticalScrollBarEnabled(true);
++      
innerView.setNestedScrollingEnabled(WXUtils.getBoolean(getDomObject().getAttrs().get(Constants.Name.NEST_SCROLLING_ENABLED),
 true));
        innerView.addScrollViewListener(new WXScrollViewListener() {
          @Override
          public void onScrollChanged(WXScrollView scrollView, int x, int y, 
int oldx, int oldy) {

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b91ac7db/android/sdk/src/main/java/com/taobao/weex/ui/component/list/WXListComponent.java
----------------------------------------------------------------------
diff --cc 
android/sdk/src/main/java/com/taobao/weex/ui/component/list/WXListComponent.java
index 20da13e,20da13e..046903b
--- 
a/android/sdk/src/main/java/com/taobao/weex/ui/component/list/WXListComponent.java
+++ 
b/android/sdk/src/main/java/com/taobao/weex/ui/component/list/WXListComponent.java
@@@ -83,7 -83,7 +83,7 @@@ public class WXListComponent extends Ba
    protected BounceRecyclerView generateListView(Context context, int 
orientation) {
      BounceRecyclerView bounceRecyclerView = new 
BounceRecyclerView(context,mLayoutType,mColumnCount,mColumnGap,orientation);
      if(bounceRecyclerView.getSwipeLayout()  != null){
--      
if(WXUtils.getBoolean(getDomObject().getAttrs().get("nestedScrollingEnabled"), 
false)) {
++      
if(WXUtils.getBoolean(getDomObject().getAttrs().get(Constants.Name.NEST_SCROLLING_ENABLED),
 false)) {
            bounceRecyclerView.getSwipeLayout().setNestedScrollingEnabled(true);
        }
      }

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b91ac7db/android/sdk/src/main/java/com/taobao/weex/ui/module/WXMetaModule.java
----------------------------------------------------------------------
diff --cc android/sdk/src/main/java/com/taobao/weex/ui/module/WXMetaModule.java
index 7b3eb8d,7b3eb8d..b3c5034
--- a/android/sdk/src/main/java/com/taobao/weex/ui/module/WXMetaModule.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/module/WXMetaModule.java
@@@ -27,13 -27,13 +27,20 @@@ import android.widget.Toast
  import com.alibaba.fastjson.JSON;
  import com.alibaba.fastjson.JSONObject;
  import com.taobao.weex.WXEnvironment;
++import com.taobao.weex.WXSDKInstance;
++import com.taobao.weex.WXSDKManager;
  import com.taobao.weex.annotation.JSMethod;
++import com.taobao.weex.bridge.JSCallback;
  import com.taobao.weex.common.WXModule;
  import com.taobao.weex.utils.WXLogUtils;
  import com.taobao.weex.utils.WXUtils;
  import com.taobao.weex.utils.WXViewUtils;
  
  import java.net.URLDecoder;
++import java.util.ArrayList;
++import java.util.HashMap;
++import java.util.List;
++import java.util.Map;
  
  /**
   * Created by zhengshihan on 16/12/20.
@@@ -90,4 -90,4 +97,20 @@@ public class WXMetaModule extends WXMod
              }
          }
      }
++
++    @JSMethod(uiThread = false)
++    public void getPageInfo(JSCallback callback) {
++        if(callback == null){
++            return;
++        }
++        List<WXSDKInstance> instances = 
WXSDKManager.getInstance().getWXRenderManager().getAllInstances();
++        Map<String,Object> map = new HashMap<>(4);
++        for(WXSDKInstance instance : instances){
++            if(TextUtils.isEmpty(instance.getBundleUrl())){
++                continue;
++            }
++            map.put(instance.getBundleUrl(), instance.getTemplateInfo());
++        }
++        callback.invoke(map);
++    }
  }

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b91ac7db/android/sdk/src/main/java/com/taobao/weex/utils/WXFileUtils.java
----------------------------------------------------------------------
diff --cc android/sdk/src/main/java/com/taobao/weex/utils/WXFileUtils.java
index 3921cfd,3921cfd..7b354f1
--- a/android/sdk/src/main/java/com/taobao/weex/utils/WXFileUtils.java
+++ b/android/sdk/src/main/java/com/taobao/weex/utils/WXFileUtils.java
@@@ -20,6 -20,6 +20,7 @@@ package com.taobao.weex.utils
  
  import android.content.Context;
  import android.text.TextUtils;
++import android.util.Base64;
  
  import java.io.BufferedReader;
  import java.io.File;
@@@ -156,4 -156,4 +157,25 @@@ public class WXFileUtils 
        return  "";
      }
    }
++
++  public static String base64Md5(String  template){
++    try {
++      if(template == null){
++        return  "";
++      }
++      return  base64Md5(template.getBytes("UTF-8"));
++    } catch (UnsupportedEncodingException e) {
++      return  "";
++    }
++  }
++
++  public static String base64Md5(byte[] bts){
++    try {
++      MessageDigest digest = MessageDigest.getInstance("MD5");
++      digest.update(bts);
++      return Base64.encodeToString(digest.digest(), Base64.NO_WRAP);
++    } catch (NoSuchAlgorithmException e) {;
++      return  "";
++    }
++  }
  }

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b91ac7db/android/sdk/src/test/java/com/taobao/weex/utils/WXFileUtilsTest.java
----------------------------------------------------------------------
diff --cc android/sdk/src/test/java/com/taobao/weex/utils/WXFileUtilsTest.java
index 13d47a3,13d47a3..5a7e9ce
--- a/android/sdk/src/test/java/com/taobao/weex/utils/WXFileUtilsTest.java
+++ b/android/sdk/src/test/java/com/taobao/weex/utils/WXFileUtilsTest.java
@@@ -69,5 -69,5 +69,6 @@@ public class WXFileUtilsTest 
    @Test
    public void  testMd5(){
      Assert.assertEquals("77963b7a931377ad4ab5ad6a9cd718aa", 
WXFileUtils.md5("ddd"));
++    Assert.assertEquals("d5Y7epMTd61Kta1qnNcYqg==", 
WXFileUtils.base64Md5("ddd"));
    }
  }

Reply via email to