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")); } }
