You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@weex.apache.org by gu...@apache.org on 2017/10/18 04:16:39 UTC
[01/50] [abbrv] incubator-weex git commit: * [ios] fire
accessibilityMagicTap Event
Repository: incubator-weex
Updated Branches:
refs/heads/master b7383a416 -> 556cc0683
* [ios] fire accessibilityMagicTap 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/52cfd68d
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/52cfd68d
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/52cfd68d
Branch: refs/heads/master
Commit: 52cfd68de679d7b0423ee2e7d2cab80b49d77b72
Parents: 06d160b
Author: acton393 <zh...@gmail.com>
Authored: Tue Oct 3 16:02:03 2017 +0800
Committer: gurisxie <27...@qq.com>
Committed: Wed Oct 4 16:21:38 2017 +0800
----------------------------------------------------------------------
ios/sdk/WeexSDK/Sources/View/WXView.m | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/52cfd68d/ios/sdk/WeexSDK/Sources/View/WXView.m
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/View/WXView.m b/ios/sdk/WeexSDK/Sources/View/WXView.m
index 397ece3..5e099c3 100644
--- a/ios/sdk/WeexSDK/Sources/View/WXView.m
+++ b/ios/sdk/WeexSDK/Sources/View/WXView.m
@@ -65,7 +65,7 @@
- (BOOL)accessibilityPerformMagicTap
{
if (self.wx_component->_accessibilityMagicTapEvent) {
- [self.wx_component fireEvent:@"accessibilityPerformMagicTap" params:nil];
+ [self.wx_component fireEvent:@"accessibilityMagicTap" params:nil];
}
return [super accessibilityPerformMagicTap];
}
[31/50] [abbrv] incubator-weex git commit: * [android] first startup,
if jsf work not ready, report exception and use h5 render
Posted by gu...@apache.org.
* [android] first startup, if jsf work not ready, report exception and use h5 render
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/4330ad65
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/4330ad65
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/4330ad65
Branch: refs/heads/master
Commit: 4330ad658da8c55a7659592f9d664ebb818d1f99
Parents: e560483
Author: yuhun-alibaba <to...@gmail.com>
Authored: Sat Oct 14 20:03:26 2017 +0800
Committer: gurisxie <27...@qq.com>
Committed: Mon Oct 16 14:08:05 2017 +0800
----------------------------------------------------------------------
.../src/main/java/com/taobao/weex/bridge/WXBridgeManager.java | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/4330ad65/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridgeManager.java
----------------------------------------------------------------------
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 70dfc90..713c4c2 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
@@ -1378,8 +1378,8 @@ public class WXBridgeManager implements Callback,BactchExecutor {
return;
}
- // 如果没有初始化尽快返回Exception,并且异步初始化
- if (!isJSFrameworkInit()) {
+ // 如果首次启动没初始化尽快返回Exception,并且异步初始化
+ if (!isJSFrameworkInit() && reInitCount == 1) {
instance.onRenderError(WXRenderErrorCode.WX_CREATE_INSTANCE_ERROR, "createInstance fail!");
post(new Runnable() {
@Override
[28/50] [abbrv] incubator-weex git commit: * [android] if jsf not
initialed,
use weex to load page may fail and report exception in order to aovid wait
exception, report creat instance failed directly and initFramework async
Posted by gu...@apache.org.
* [android] if jsf not initialed, use weex to load page may fail and report exception
in order to aovid wait exception, report creat instance failed directly and initFramework async
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/35a03a8d
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/35a03a8d
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/35a03a8d
Branch: refs/heads/master
Commit: 35a03a8dd460d1c5fba5e4046dfd5424f13f1ba8
Parents: 9ea8bbd
Author: yuhun-alibaba <to...@gmail.com>
Authored: Wed Oct 11 22:41:33 2017 +0800
Committer: yuhun-alibaba <to...@gmail.com>
Committed: Wed Oct 11 22:41:33 2017 +0800
----------------------------------------------------------------------
.../java/com/taobao/weex/bridge/WXBridgeManager.java | 13 +++++++++++++
1 file changed, 13 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/35a03a8d/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridgeManager.java
----------------------------------------------------------------------
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 07f2381..70dfc90 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
@@ -1377,6 +1377,19 @@ public class WXBridgeManager implements Callback,BactchExecutor {
instance.onRenderError(WXRenderErrorCode.WX_CREATE_INSTANCE_ERROR, "createInstance fail!");
return;
}
+
+ // 如果没有初始化尽快返回Exception,并且异步初始化
+ if (!isJSFrameworkInit()) {
+ instance.onRenderError(WXRenderErrorCode.WX_CREATE_INSTANCE_ERROR, "createInstance fail!");
+ post(new Runnable() {
+ @Override
+ public void run() {
+ initFramework("");
+ }
+ }, instanceId);
+ return;
+ }
+
WXModuleManager.createDomModule(instance);
post(new Runnable() {
@Override
[26/50] [abbrv] incubator-weex git commit: Revert "* [ios] set
default value to nil when the configuration is empty"
Posted by gu...@apache.org.
Revert "* [ios] set default value to nil when the configuration is empty"
This reverts commit 4376205615fdcbd4fd9f118a02961e074eb057bf.
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/ccf0590b
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/ccf0590b
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/ccf0590b
Branch: refs/heads/master
Commit: ccf0590b344c4adce40030315b7be1d22dd99ac9
Parents: 4376205
Author: acton393 <zh...@gmail.com>
Authored: Wed Oct 11 12:25:29 2017 +0800
Committer: acton393 <zh...@gmail.com>
Committed: Wed Oct 11 12:25:29 2017 +0800
----------------------------------------------------------------------
ios/sdk/WeexSDK/Sources/Component/WXScrollerComponent.m | 4 ----
1 file changed, 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/ccf0590b/ios/sdk/WeexSDK/Sources/Component/WXScrollerComponent.m
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Component/WXScrollerComponent.m b/ios/sdk/WeexSDK/Sources/Component/WXScrollerComponent.m
index fafc41d..b7a522a 100644
--- a/ios/sdk/WeexSDK/Sources/Component/WXScrollerComponent.m
+++ b/ios/sdk/WeexSDK/Sources/Component/WXScrollerComponent.m
@@ -122,13 +122,9 @@ WX_EXPORT_METHOD(@selector(resetLoadmore))
if (attributes[@"alwaysScrollableVertical"]) {
_alwaysScrollableVertical = [WXConvert NSString:attributes[@"alwaysScrollableVertical"]];
- }else {
- _alwaysScrollableVertical = nil;
}
if (attributes[@"alwaysScrollableHorizontal"]) {
_alwaysScrollableHorizontal = [WXConvert NSString:attributes[@"alwaysScrollableHorizontal"]];
- } else {
- _alwaysScrollableHorizontal = nil;
}
_pagingEnabled = attributes[@"pagingEnabled"] ? [WXConvert BOOL:attributes[@"pagingEnabled"]] : NO;
_loadMoreOffset = attributes[@"loadmoreoffset"] ? [WXConvert WXPixelType:attributes[@"loadmoreoffset"] scaleFactor:self.weexInstance.pixelScaleFactor] : 0;
[46/50] [abbrv] incubator-weex git commit: * [test] update border
base png
Posted by gu...@apache.org.
* [test] update border base png
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/0ea259d0
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/0ea259d0
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/0ea259d0
Branch: refs/heads/master
Commit: 0ea259d0b259295ea4f15a207dc672a17bfa14de
Parents: f3bfa02
Author: gurisxie <27...@qq.com>
Authored: Tue Oct 17 19:31:11 2017 +0800
Committer: gurisxie <27...@qq.com>
Committed: Tue Oct 17 19:31:11 2017 +0800
----------------------------------------------------------------------
test/screenshot/border-android.png | Bin 0 -> 164260 bytes
test/screenshot/border-ios.png | Bin 128088 -> 129071 bytes
2 files changed, 0 insertions(+), 0 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/0ea259d0/test/screenshot/border-android.png
----------------------------------------------------------------------
diff --git a/test/screenshot/border-android.png b/test/screenshot/border-android.png
new file mode 100644
index 0000000..d774b6b
Binary files /dev/null and b/test/screenshot/border-android.png differ
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/0ea259d0/test/screenshot/border-ios.png
----------------------------------------------------------------------
diff --git a/test/screenshot/border-ios.png b/test/screenshot/border-ios.png
old mode 100755
new mode 100644
index 2bacdd3..992ea7d
Binary files a/test/screenshot/border-ios.png and b/test/screenshot/border-ios.png differ
[04/50] [abbrv] incubator-weex git commit: update so for jsf init
exception
Posted by gu...@apache.org.
update so for jsf init exception
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/f2d6a33b
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/f2d6a33b
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/f2d6a33b
Branch: refs/heads/master
Commit: f2d6a33be7ced318b06e273f60eaa6a8a26edf39
Parents: 6492c33
Author: yuhun-alibaba <to...@gmail.com>
Authored: Wed Oct 4 13:13:50 2017 +0800
Committer: gurisxie <27...@qq.com>
Committed: Wed Oct 4 16:21:39 2017 +0800
----------------------------------------------------------------------
android/sdk/libs/armeabi/libweexjsb.so | Bin 22556 -> 22620 bytes
android/sdk/libs/armeabi/libweexjsc.so | Bin 325664 -> 338160 bytes
android/sdk/libs/armeabi/libweexjss.so | Bin 6754016 -> 6754016 bytes
3 files changed, 0 insertions(+), 0 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/f2d6a33b/android/sdk/libs/armeabi/libweexjsb.so
----------------------------------------------------------------------
diff --git a/android/sdk/libs/armeabi/libweexjsb.so b/android/sdk/libs/armeabi/libweexjsb.so
index c46e857..4b13b06 100755
Binary files a/android/sdk/libs/armeabi/libweexjsb.so and b/android/sdk/libs/armeabi/libweexjsb.so differ
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/f2d6a33b/android/sdk/libs/armeabi/libweexjsc.so
----------------------------------------------------------------------
diff --git a/android/sdk/libs/armeabi/libweexjsc.so b/android/sdk/libs/armeabi/libweexjsc.so
index 2cde143..12f6df2 100755
Binary files a/android/sdk/libs/armeabi/libweexjsc.so and b/android/sdk/libs/armeabi/libweexjsc.so differ
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/f2d6a33b/android/sdk/libs/armeabi/libweexjss.so
----------------------------------------------------------------------
diff --git a/android/sdk/libs/armeabi/libweexjss.so b/android/sdk/libs/armeabi/libweexjss.so
index 13e5bc6..0187882 100755
Binary files a/android/sdk/libs/armeabi/libweexjss.so and b/android/sdk/libs/armeabi/libweexjss.so differ
[17/50] [abbrv] incubator-weex git commit: add apache license
Posted by gu...@apache.org.
add apache license
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/045e8386
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/045e8386
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/045e8386
Branch: refs/heads/master
Commit: 045e83863c64bd8b2727063abb32ffad37d8cf83
Parents: d5c7253
Author: jianbai.gbj <ji...@alibaba-inc.com>
Authored: Tue Oct 10 10:58:56 2017 +0800
Committer: gurisxie <27...@qq.com>
Committed: Tue Oct 10 12:02:29 2017 +0800
----------------------------------------------------------------------
.../java/com/taobao/weex/dom/flex/CSSNode.java | 18 ++++++++++++++++++
1 file changed, 18 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/045e8386/android/sdk/src/main/java/com/taobao/weex/dom/flex/CSSNode.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/flex/CSSNode.java b/android/sdk/src/main/java/com/taobao/weex/dom/flex/CSSNode.java
index 624c4c9..0818c15 100755
--- a/android/sdk/src/main/java/com/taobao/weex/dom/flex/CSSNode.java
+++ b/android/sdk/src/main/java/com/taobao/weex/dom/flex/CSSNode.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * 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
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
/**
* Copyright (c) 2014, Facebook, Inc. All rights reserved. <p/> This source code is licensed under
* the BSD-cssstyle license found in the LICENSE file in the root directory of this source tree. An
[02/50] [abbrv] incubator-weex git commit: * [ios] support
accessibility magic Tap event
Posted by gu...@apache.org.
* [ios] support accessibility magic Tap 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/06d160be
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/06d160be
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/06d160be
Branch: refs/heads/master
Commit: 06d160befb9e708628fcf78ce2de3392c49939d8
Parents: 927cc65
Author: acton393 <zh...@gmail.com>
Authored: Mon Oct 2 15:09:01 2017 +0800
Committer: gurisxie <27...@qq.com>
Committed: Wed Oct 4 16:21:38 2017 +0800
----------------------------------------------------------------------
.../WeexSDK/Sources/Component/WXComponent_internal.h | 2 ++
ios/sdk/WeexSDK/Sources/Events/WXComponent+Events.m | 15 ++++++++++++++-
ios/sdk/WeexSDK/Sources/View/WXView.m | 9 +++++++++
3 files changed, 25 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/06d160be/ios/sdk/WeexSDK/Sources/Component/WXComponent_internal.h
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Component/WXComponent_internal.h b/ios/sdk/WeexSDK/Sources/Component/WXComponent_internal.h
index 5d9b687..f1163a9 100644
--- a/ios/sdk/WeexSDK/Sources/Component/WXComponent_internal.h
+++ b/ios/sdk/WeexSDK/Sources/Component/WXComponent_internal.h
@@ -72,6 +72,8 @@ typedef id (^WXDataBindingBlock)(NSDictionary *data, BOOL *needUpdate);
NSString * _accessibilityHintContent; // hint for the action
NSString * _testId;// just for auto-test
+ BOOL _accessibilityMagicTapEvent;
+
/**
* PseudoClass
*/
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/06d160be/ios/sdk/WeexSDK/Sources/Events/WXComponent+Events.m
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Events/WXComponent+Events.m b/ios/sdk/WeexSDK/Sources/Events/WXComponent+Events.m
index 6247f07..2c343f4 100644
--- a/ios/sdk/WeexSDK/Sources/Events/WXComponent+Events.m
+++ b/ios/sdk/WeexSDK/Sources/Events/WXComponent+Events.m
@@ -172,6 +172,7 @@ if ([removeEventName isEqualToString:@#eventName]) {\
WX_ADD_EVENT(touchmove, addTouchMoveEvent)
WX_ADD_EVENT(touchend, addTouchEndEvent)
WX_ADD_EVENT(touchcancel, addTouchCancelEvent)
+ WX_ADD_EVENT(accessibilityMagicTap, addAccessibilityMagicTapEvent)
if(_isListenPseudoTouch) {
self.touchGesture.listenPseudoTouch = YES;
@@ -200,7 +201,7 @@ if ([removeEventName isEqualToString:@#eventName]) {\
WX_REMOVE_EVENT(touchmove, removeTouchMoveEvent)
WX_REMOVE_EVENT(touchend, removeTouchEndEvent)
WX_REMOVE_EVENT(touchcancel, removeTouchCancelEvent)
-
+ WX_REMOVE_EVENT(accessibilityMagicTap, removeAccessibilityMagicTapEvent)
if(_isListenPseudoTouch) {
self.touchGesture.listenPseudoTouch = NO;
}
@@ -259,6 +260,18 @@ if ([removeEventName isEqualToString:@#eventName]) {\
[self checkRemoveTouchGesture];
}
+#pragma mark - Accessibility Event
+
+- (void)addAccessibilityMagicTapEvent
+{
+ _accessibilityMagicTapEvent = YES;
+}
+
+- (void)removeAccessibilityMagicTapEvent
+{
+ _accessibilityMagicTapEvent = NO;
+}
+
#pragma mark - Click Event
- (void)addClickEvent
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/06d160be/ios/sdk/WeexSDK/Sources/View/WXView.m
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/View/WXView.m b/ios/sdk/WeexSDK/Sources/View/WXView.m
index 4619ef1..397ece3 100644
--- a/ios/sdk/WeexSDK/Sources/View/WXView.m
+++ b/ios/sdk/WeexSDK/Sources/View/WXView.m
@@ -20,6 +20,7 @@
#import "WXView.h"
#import "WXComponent.h"
#import "WXLayer.h"
+#import "WXComponent_internal.h"
@implementation WXView
@@ -61,4 +62,12 @@
return nil;
}
+- (BOOL)accessibilityPerformMagicTap
+{
+ if (self.wx_component->_accessibilityMagicTapEvent) {
+ [self.wx_component fireEvent:@"accessibilityPerformMagicTap" params:nil];
+ }
+ return [super accessibilityPerformMagicTap];
+}
+
@end
[09/50] [abbrv] incubator-weex git commit: * [jsfm] upgrade
weex-js-framework to 0.22.5
Posted by gu...@apache.org.
* [jsfm] upgrade weex-js-framework to 0.22.5
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/b5b506f6
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/b5b506f6
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/b5b506f6
Branch: refs/heads/master
Commit: b5b506f63469855c5ee1c229d5226355df0e695a
Parents: 767d4ec
Author: Hanks <zh...@gmail.com>
Authored: Mon Oct 9 17:42:36 2017 +0800
Committer: Hanks <zh...@gmail.com>
Committed: Mon Oct 9 17:42:36 2017 +0800
----------------------------------------------------------------------
pre-build/native-bundle-main.js | 16 ++++++++--------
1 file changed, 8 insertions(+), 8 deletions(-)
----------------------------------------------------------------------
[18/50] [abbrv] incubator-weex git commit: remove cell-slot from
recycler-list dom tree reduce layout and create component time,
layout async always and dom support clone this
Posted by gu...@apache.org.
remove cell-slot from recycler-list dom tree reduce layout and create component time, layout async always and dom support clone this
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/9c1f2983
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/9c1f2983
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/9c1f2983
Branch: refs/heads/master
Commit: 9c1f2983e126f25956e3720b1149e1a633ea941b
Parents: 6849d52
Author: jianbai.gbj <ji...@alibaba-inc.com>
Authored: Tue Oct 3 20:19:24 2017 +0800
Committer: gurisxie <27...@qq.com>
Committed: Tue Oct 10 12:02:29 2017 +0800
----------------------------------------------------------------------
.../java/com/taobao/weex/dom/WXDomObject.java | 13 +++++++
.../taobao/weex/dom/WXRecyclerDomObject.java | 3 ++
.../com/taobao/weex/dom/WXTextDomObject.java | 7 +++-
.../taobao/weex/ui/component/WXComponent.java | 24 +++++-------
.../weex/ui/component/binding/Layouts.java | 25 +++++++++++-
.../component/list/template/DomTreeBuilder.java | 33 ++++++++++++----
.../list/template/WXRecyclerTemplateList.java | 41 +++++++-------------
7 files changed, 94 insertions(+), 52 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/9c1f2983/android/sdk/src/main/java/com/taobao/weex/dom/WXDomObject.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/WXDomObject.java b/android/sdk/src/main/java/com/taobao/weex/dom/WXDomObject.java
index 8398a2d..f990792 100644
--- a/android/sdk/src/main/java/com/taobao/weex/dom/WXDomObject.java
+++ b/android/sdk/src/main/java/com/taobao/weex/dom/WXDomObject.java
@@ -104,6 +104,8 @@ public class WXDomObject extends CSSNode implements Cloneable,ImmutableDomObject
public long mDomThreadNanos;
public long mDomThreadTimestamp;
+ private boolean cloneThis = false;
+
public void traverseTree(Consumer...consumers){
long startNanos = System.nanoTime();
if (consumers == null) {
@@ -598,6 +600,9 @@ public class WXDomObject extends CSSNode implements Cloneable,ImmutableDomObject
if (sDestroy.get()) {
return null;
}
+ if(cloneThis){
+ return this;
+ }
WXDomObject dom = null;
try {
dom = WXDomObjectFactory.newInstance(mType);
@@ -722,4 +727,12 @@ public class WXDomObject extends CSSNode implements Cloneable,ImmutableDomObject
public interface Consumer{
void accept(WXDomObject dom);
}
+
+ public boolean isCloneThis() {
+ return cloneThis;
+ }
+
+ public void setCloneThis(boolean cloneThis) {
+ this.cloneThis = cloneThis;
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/9c1f2983/android/sdk/src/main/java/com/taobao/weex/dom/WXRecyclerDomObject.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/WXRecyclerDomObject.java b/android/sdk/src/main/java/com/taobao/weex/dom/WXRecyclerDomObject.java
index 11918e8..805ef8e 100644
--- a/android/sdk/src/main/java/com/taobao/weex/dom/WXRecyclerDomObject.java
+++ b/android/sdk/src/main/java/com/taobao/weex/dom/WXRecyclerDomObject.java
@@ -225,6 +225,9 @@ public class WXRecyclerDomObject extends WXDomObject{
@Override
public WXDomObject clone() {
+ if(isCloneThis()){
+ return this;
+ }
WXRecyclerDomObject domObject = (WXRecyclerDomObject) super.clone();
domObject.cellList = cellList;
return domObject;
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/9c1f2983/android/sdk/src/main/java/com/taobao/weex/dom/WXTextDomObject.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/WXTextDomObject.java b/android/sdk/src/main/java/com/taobao/weex/dom/WXTextDomObject.java
index bdcfd39..749afbd 100644
--- a/android/sdk/src/main/java/com/taobao/weex/dom/WXTextDomObject.java
+++ b/android/sdk/src/main/java/com/taobao/weex/dom/WXTextDomObject.java
@@ -174,7 +174,9 @@ public class WXTextDomObject extends WXDomObject {
updateStyleAndText();
spanned = createSpanned(mText);
if(hasNewLayout()){
- WXLogUtils.e("TextDom", new IllegalStateException("Previous csslayout was ignored! markLayoutSeen() never called"));
+ if(WXEnvironment.isApkDebugable()) {
+ WXLogUtils.w("TextDom", new IllegalStateException("Previous csslayout was ignored! markLayoutSeen() never called"));
+ }
markUpdateSeen();
}
super.dirty();
@@ -226,6 +228,9 @@ public class WXTextDomObject extends WXDomObject {
@Override
public WXTextDomObject clone() {
+ if(isCloneThis()){
+ return this;
+ }
WXTextDomObject dom = null;
try {
dom = new WXTextDomObject();
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/9c1f2983/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 f735e4e..1d64d5d 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
@@ -1408,14 +1408,6 @@ public abstract class WXComponent<T extends View> implements IWXObject, IWXActi
view.setVisibility(View.GONE);
}
}
- if(mDomObj != null){
- WXDomObject domObject = (WXDomObject) mDomObj;
- if (TextUtils.equals(visibility, Constants.Value.VISIBLE)) {
- domObject.setVisible(true);
- } else if (TextUtils.equals(visibility, Constants.Value.HIDDEN)) {
- domObject.setVisible(false);
- }
- }
}
/**
@@ -1819,16 +1811,17 @@ public abstract class WXComponent<T extends View> implements IWXObject, IWXActi
this.waste = waste;
WXDomObject domObject = (WXDomObject) getDomObject();
if(waste){
+ getDomObject().getStyles().put(Constants.Name.VISIBILITY, Constants.Value.HIDDEN);
if(domObject.getAttrs().getStatement() == null) {
- domObject.setVisible(false);
- if (getHostView() != null) {
+ domObject.setVisible(false);
+ if (getHostView() != null) {
getHostView().setVisibility(View.GONE);
- }
- return;
+ }
+ return;
}
if(Constants.Value.VISIBLE.equals(domObject.getAttrs().get(Constants.Name.VIF_FALSE))){
- domObject.setVisible(true);
- if(getHostView() != null){
+ domObject.setVisible(true);
+ if(getHostView() != null){
getHostView().setVisibility(View.VISIBLE);
}
}else{
@@ -1840,8 +1833,9 @@ public abstract class WXComponent<T extends View> implements IWXObject, IWXActi
}else{
domObject.setVisible(true);
if(getHostView() != null){
- getHostView().setVisibility(View.VISIBLE);
+ getHostView().setVisibility(View.VISIBLE);
}
+ getDomObject().getStyles().put(Constants.Name.VISIBILITY, Constants.Value.VISIBLE);
}
}
}
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/9c1f2983/android/sdk/src/main/java/com/taobao/weex/ui/component/binding/Layouts.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/binding/Layouts.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/binding/Layouts.java
index 1e48ea7..9dea0ff 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/binding/Layouts.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/binding/Layouts.java
@@ -75,7 +75,6 @@ public class Layouts {
asyncTask.executeOnExecutor(AsyncTask.SERIAL_EXECUTOR); //serial executor is better
}else{
doSafeLayout(component, templateViewHolder.getLayoutContext());
- Log.e("weex", "weex" + component.getLayoutHeight() + " " + component.getLayoutWidth());
setLayout(component, false);
}
@@ -140,6 +139,10 @@ public class Layouts {
* if force is true, always set layout
* */
public static final void setLayout(WXComponent component, boolean force){
+ if(component.isWaste()){
+ setLayoutWaste(component, force);
+ return;
+ }
WXDomObject domObject = (WXDomObject) component.getDomObject();
if(domObject.hasUpdate() || force){
domObject.markUpdateSeen();
@@ -162,4 +165,24 @@ public class Layouts {
}
}
}
+
+ private static final void setLayoutWaste(WXComponent component, boolean force){
+ WXDomObject domObject = (WXDomObject) component.getDomObject();
+ if(domObject.hasUpdate() || force){
+ domObject.markUpdateSeen();
+ if(domObject.hasUpdate()){
+ domObject.markLayoutStateUpdated();
+ }
+ }
+ if(component instanceof WXVContainer){
+ WXVContainer container = (WXVContainer) component;
+ int count = container.getChildCount();
+ for (int i = 0; i < count; ++i) {
+ WXComponent child = container.getChild(i);
+ if (child != null) {
+ setLayoutWaste(child, force);
+ }
+ }
+ }
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/9c1f2983/android/sdk/src/main/java/com/taobao/weex/ui/component/list/template/DomTreeBuilder.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/list/template/DomTreeBuilder.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/list/template/DomTreeBuilder.java
index c475195..0aa6cde 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/list/template/DomTreeBuilder.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/list/template/DomTreeBuilder.java
@@ -18,6 +18,7 @@
*/
package com.taobao.weex.ui.component.list.template;
+import com.taobao.weex.WXEnvironment;
import com.taobao.weex.WXSDKManager;
import com.taobao.weex.dom.DOMActionContext;
import com.taobao.weex.dom.WXDomObject;
@@ -25,6 +26,7 @@ import com.taobao.weex.dom.action.TraceableAction;
import com.taobao.weex.ui.component.WXComponent;
import com.taobao.weex.ui.component.WXComponentFactory;
import com.taobao.weex.ui.component.WXVContainer;
+import com.taobao.weex.utils.WXLogUtils;
/**
* Created by furture on 2017/10/2.
@@ -40,29 +42,41 @@ class DomTreeBuilder extends TraceableAction {
return null;
}
long startNanos = System.nanoTime();
+ dom.setCloneThis(true);
WXComponent component = WXComponentFactory.newInstance(context.getInstance(), dom, parent);
if (component != null) {
component.mTraceInfo.domThreadStart = dom.mDomThreadTimestamp;
component.mTraceInfo.rootEventId = mTracingEventId;
component.mTraceInfo.domQueueTime = mDomQueueTime;
}
- ((WXDomObject)component.getDomObject()).applyStyleToNode();
- context.registerDOMObject(dom.getRef(), dom);
context.registerComponent(dom.getRef(), component);
if (component instanceof WXVContainer) {
WXVContainer container = (WXVContainer) component;
WXDomObject parentDom = (WXDomObject) container.getDomObject();
- int count = dom.childCount();
- WXDomObject child = null;
- for (int i = 0; i < count; ++i) {
- child = dom.getChild(i);
+ for (int i = 0; i < dom.childCount(); ++i) {
+ WXDomObject child = dom.getChild(i);
if (child != null) {
WXComponent childComponent = generateComponentTree(context, child, container);
container.addChild(childComponent);
- parentDom.add((WXDomObject) childComponent.getDomObject(), -1);
+ WXDomObject childDomObject = (WXDomObject) childComponent.getDomObject();
+ if(childDomObject != child) {
+ int index = parentDom.index(child);
+ parentDom.add(childDomObject, index);
+ if(index >= 0) {
+ parentDom.remove(child);
+ i--;
+ }
+ RuntimeException exception = new IllegalArgumentException(childDomObject.getClass().getName()
+ + " not support clone this");
+ WXLogUtils.e("weex", exception);
+ if(WXEnvironment.isApkDebugable()){
+ throw exception;
+ }
+ }
}
}
}
+ dom.setCloneThis(false);
if (component != null) {
component.mTraceInfo.domThreadNanos = System.nanoTime() - startNanos;
}
@@ -74,8 +88,11 @@ class DomTreeBuilder extends TraceableAction {
if(domActionContext == null){
return null;
}
- domObject.getStyles().put("display", "flex");
DomTreeBuilder builder = new DomTreeBuilder();
+ domObject.traverseTree(
+ domActionContext.getAddDOMConsumer(),
+ domActionContext.getApplyStyleConsumer()
+ );
return builder.generateComponentTree(domActionContext, domObject, parent);
}
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/9c1f2983/android/sdk/src/main/java/com/taobao/weex/ui/component/list/template/WXRecyclerTemplateList.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/list/template/WXRecyclerTemplateList.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/list/template/WXRecyclerTemplateList.java
index d371ab2..7e0746b 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/list/template/WXRecyclerTemplateList.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/list/template/WXRecyclerTemplateList.java
@@ -197,12 +197,15 @@ public class WXRecyclerTemplateList extends WXVContainer<BounceRecyclerView> imp
listData = array;
}
}
-
+ long start = System.currentTimeMillis();
if(mDomObject != null && mDomObject.getCellList() != null){
for(int i=0; i<mDomObject.getCellList().size(); i++){
addChild(DomTreeBuilder.buildTree(mDomObject.getCellList().get(i), this));
}
}
+ if(WXEnvironment.isApkDebugable()){
+ WXLogUtils.d(TAG, "TemplateList BuildDomTree Used " + (System.currentTimeMillis() - start));
+ }
}
@Override
@@ -1003,18 +1006,10 @@ public class WXRecyclerTemplateList extends WXVContainer<BounceRecyclerView> imp
return;
}
long start = System.currentTimeMillis();
- boolean async = templateViewHolder.getHolderPosition() >= 0;
+ boolean resuse = templateViewHolder.getHolderPosition() >= 0;
templateViewHolder.setHolderPosition(position);
Object data = listData.get(position);
if(component.getRenderData() == data){
- if(!async){
- if(!component.isHasLayout()) {
- Layouts.doLayoutAsync(templateViewHolder, async);
- }
- if(WXEnvironment.isApkDebugable()){
- WXLogUtils.d(TAG, position + getTemplateKey(position) + " onBindViewHolder source layout used " + (System.currentTimeMillis() - start) + async);
- }
- }
component.setHasLayout(true);
}else{
List<WXComponent> updates = Statements.doRender(component, getStackContextForPosition(position, data));
@@ -1024,12 +1019,12 @@ public class WXRecyclerTemplateList extends WXVContainer<BounceRecyclerView> imp
WXLogUtils.d(TAG, position + getTemplateKey(position) + " onBindViewHolder render used " + (System.currentTimeMillis() - start));
}
if(component.isHasLayout()){
- async = true;
+ resuse = true;
}
- Layouts.doLayoutAsync(templateViewHolder, async);
+ Layouts.doLayoutAsync(templateViewHolder, true);
component.setHasLayout(true);
if(WXEnvironment.isApkDebugable()){
- WXLogUtils.d(TAG, position + getTemplateKey(position) + " onBindViewHolder layout used " + (System.currentTimeMillis() - start) + async);
+ WXLogUtils.d(TAG, position + getTemplateKey(position) + " onBindViewHolder layout used " + (System.currentTimeMillis() - start) + resuse);
}
}
}
@@ -1097,6 +1092,7 @@ public class WXRecyclerTemplateList extends WXVContainer<BounceRecyclerView> imp
WXCellDomObject domObject = (WXCellDomObject) component.getDomObject();
domObject.setRecyclerDomObject((WXRecyclerDomObject) getDomObject());
}
+ component.setRenderData(cell.getRenderData());
return component;
}
@@ -1109,8 +1105,8 @@ public class WXRecyclerTemplateList extends WXVContainer<BounceRecyclerView> imp
if(cell == getSourceTemplate(i)){
Object data = listData.get(i);
Statements.doRender(cell, getStackContextForPosition(i, data));
+ Layouts.doSafeLayout(cell, new CSSLayoutContext());
cell.setRenderData(data);
- //WXSDKManager.getInstance().getWXDomManager().postAction(getInstanceId(), new RenderSourceCellAction(cell, null, data), false);
break;
}
}
@@ -1560,7 +1556,7 @@ public class WXRecyclerTemplateList extends WXVContainer<BounceRecyclerView> imp
cellCache = new TemplateCache();
mTemplatesCache.put(template, cellCache);
}
- if(cellCache.cells.size() >= templateCacheSize){
+ if(cellCache.cells.size() > 0){
cellCache.isLoadIng = false;
return;
}
@@ -1571,11 +1567,6 @@ public class WXRecyclerTemplateList extends WXVContainer<BounceRecyclerView> imp
AsyncTask<Void,Void, Void> preloadTask = new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... params) {
- try {
- Thread.sleep(100);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
TemplateCache cellCache = mTemplatesCache.get(template);
if(cellCache == null || cellCache.cells == null){
return null;
@@ -1620,10 +1611,6 @@ public class WXRecyclerTemplateList extends WXVContainer<BounceRecyclerView> imp
doInitLazyCell(component, template, true);
return iterator.hasNext();
}
- if(!component.isHasLayout()){
- Layouts.doSafeLayout(component, new CSSLayoutContext());
- component.setHasLayout(true);
- }
}
return false;
}
@@ -1640,15 +1627,15 @@ public class WXRecyclerTemplateList extends WXVContainer<BounceRecyclerView> imp
component.lazy(false);
component.createView();
if(WXEnvironment.isApkDebugable()) {
- WXLogUtils.d(TAG, "doInitLazyCell " + inPreload + template + " createView used " + (System.currentTimeMillis() - start));
+ WXLogUtils.d(TAG, "doInitLazyCell idle" + inPreload + template + " createView used " + (System.currentTimeMillis() - start));
}
component.applyLayoutAndEvent(component);
if(WXEnvironment.isApkDebugable()) {
- WXLogUtils.d(TAG, "doInitLazyCell " + inPreload + template + " apply layout used " + (System.currentTimeMillis() - start));
+ WXLogUtils.d(TAG, "doInitLazyCell idle" + inPreload + template + " apply layout used " + (System.currentTimeMillis() - start));
}
component.bindData(component);
if(WXEnvironment.isApkDebugable()) {
- WXLogUtils.d(TAG, "doInitLazyCell " + inPreload + template + " bindData used " + (System.currentTimeMillis() - start));
+ WXLogUtils.d(TAG, "doInitLazyCell idle" + inPreload + template + " bindData used " + (System.currentTimeMillis() - start));
}
}
}
[37/50] [abbrv] incubator-weex git commit: * [android] add test case
Posted by gu...@apache.org.
* [android] add test case
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/c9b5c45f
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/c9b5c45f
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/c9b5c45f
Branch: refs/heads/master
Commit: c9b5c45fbaf6c9540f2501b2716aa68f2c5d8c16
Parents: b512647
Author: zshshr <zh...@gmail.com>
Authored: Tue Oct 17 11:50:08 2017 +0800
Committer: zshshr <zh...@gmail.com>
Committed: Tue Oct 17 11:50:08 2017 +0800
----------------------------------------------------------------------
.../java/com/taobao/weex/utils/WXLogUtilsTest.java | 16 +++++++++++++++-
1 file changed, 15 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/c9b5c45f/android/sdk/src/test/java/com/taobao/weex/utils/WXLogUtilsTest.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/test/java/com/taobao/weex/utils/WXLogUtilsTest.java b/android/sdk/src/test/java/com/taobao/weex/utils/WXLogUtilsTest.java
index 3fde10a..e249c1c 100644
--- a/android/sdk/src/test/java/com/taobao/weex/utils/WXLogUtilsTest.java
+++ b/android/sdk/src/test/java/com/taobao/weex/utils/WXLogUtilsTest.java
@@ -20,6 +20,7 @@ package com.taobao.weex.utils;
import com.taobao.weappplus_sdk.BuildConfig;
import com.taobao.weex.WXEnvironment;
+
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
@@ -91,4 +92,17 @@ public class WXLogUtilsTest {
Log.e("tag",new Throwable("test"));
}
-}
+ @Test
+ public void testLogLevel() throws Exception {
+ WXEnvironment.sLogLevel = LogLevel.DEBUG;
+ Log.d("LogLevel.DEBUG", "test debug");
+ Log.w("LogLevel.DEBUG", "test warning");
+ Log.e("LogLevel.DEBUG", "test error");
+
+ WXEnvironment.sLogLevel = LogLevel.WARN;
+
+ Log.d("LogLevel.WARN", "test debug");
+ Log.w("LogLevel.WARN", "test warning");
+ Log.e("LogLevel.WARN", "test error");
+ }
+ }
[48/50] [abbrv] incubator-weex git commit: * [android] fix code style
Posted by gu...@apache.org.
* [android] fix code style
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/59574260
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/59574260
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/59574260
Branch: refs/heads/master
Commit: 595742605889077a7f107e324813d1b71859c388
Parents: 7fcfd9f
Author: yuhun-alibaba <to...@gmail.com>
Authored: Tue Oct 17 21:09:54 2017 +0800
Committer: gurisxie <27...@qq.com>
Committed: Tue Oct 17 22:09:45 2017 +0800
----------------------------------------------------------------------
.../src/main/java/com/taobao/weex/bridge/WXBridgeManager.java | 4 ----
.../src/main/java/com/taobao/weex/utils/WXSoInstallMgrSdk.java | 3 ---
2 files changed, 7 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/59574260/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridgeManager.java
----------------------------------------------------------------------
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 96f47d9..3f0b6e3 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
@@ -1014,7 +1014,6 @@ public class WXBridgeManager implements Callback, BactchExecutor {
if ("".equals(s)) {
continue;
}
- // 寄存器内容裁剪
// if (("r0:").equals(s)) {
// break;
// }
@@ -1027,8 +1026,6 @@ public class WXBridgeManager implements Callback, BactchExecutor {
}
} else {
WXLogUtils.e("[WXBridgeManager] callReportCrash crash file is empty");
- // 没收集到crash堆栈不上传
- // commitJscCrashAlarmMonitor(IWXUserTrackAdapter.JS_BRIDGE, WXErrorCode.WX_ERR_JSC_CRASH, "crash info file empty", instanceId, url);
}
file.delete();
}
@@ -1370,7 +1367,6 @@ public class WXBridgeManager implements Callback, BactchExecutor {
return;
}
- // 如果首次启动没初始化尽快返回Exception,并且异步初始化
if (!isJSFrameworkInit() && reInitCount == 1) {
instance.onRenderError(WXRenderErrorCode.WX_CREATE_INSTANCE_ERROR, "createInstance fail!");
post(new Runnable() {
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/59574260/android/sdk/src/main/java/com/taobao/weex/utils/WXSoInstallMgrSdk.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/utils/WXSoInstallMgrSdk.java b/android/sdk/src/main/java/com/taobao/weex/utils/WXSoInstallMgrSdk.java
index d202954..827cc94 100644
--- a/android/sdk/src/main/java/com/taobao/weex/utils/WXSoInstallMgrSdk.java
+++ b/android/sdk/src/main/java/com/taobao/weex/utils/WXSoInstallMgrSdk.java
@@ -224,12 +224,9 @@ public class WXSoInstallMgrSdk {
File oldfile = new File(soName);
if (oldfile.exists()) {
- //获得原文件流
FileInputStream inputStream = new FileInputStream(oldfile);
byte[] data = new byte[1024];
- //输出流
FileOutputStream outputStream =new FileOutputStream(newfile);
- //开始处理流
while (inputStream.read(data) != -1) {
outputStream.write(data);
}
[24/50] [abbrv] incubator-weex git commit: * [ios] bugfix list view
can not scroll
Posted by gu...@apache.org.
* [ios] bugfix list view can not scroll
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/9833852c
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/9833852c
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/9833852c
Branch: refs/heads/master
Commit: 9833852c0758b37f85a33db7592464d21f8cddce
Parents: 3cf15bc
Author: acton393 <zh...@gmail.com>
Authored: Wed Oct 11 11:39:53 2017 +0800
Committer: acton393 <zh...@gmail.com>
Committed: Wed Oct 11 11:42:27 2017 +0800
----------------------------------------------------------------------
.../Sources/Component/WXScrollerComponent.m | 31 ++++++++++++--------
1 file changed, 19 insertions(+), 12 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/9833852c/ios/sdk/WeexSDK/Sources/Component/WXScrollerComponent.m
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Component/WXScrollerComponent.m b/ios/sdk/WeexSDK/Sources/Component/WXScrollerComponent.m
index a7d042e..b7a522a 100644
--- a/ios/sdk/WeexSDK/Sources/Component/WXScrollerComponent.m
+++ b/ios/sdk/WeexSDK/Sources/Component/WXScrollerComponent.m
@@ -69,8 +69,8 @@
CGPoint _lastContentOffset;
CGPoint _lastScrollEventFiredOffset;
BOOL _scrollable;
- BOOL _alwaysScrollableVertical;
- BOOL _alwaysScrollableHorizontal;
+ NSString * _alwaysScrollableVertical;
+ NSString * _alwaysScrollableHorizontal;
// vertical & horizontal
WXScrollDirection _scrollDirection;
@@ -119,10 +119,13 @@ WX_EXPORT_METHOD(@selector(resetLoadmore))
_lastScrollEventFiredOffset = CGPointMake(0, 0);
_scrollDirection = attributes[@"scrollDirection"] ? [WXConvert WXScrollDirection:attributes[@"scrollDirection"]] : WXScrollDirectionVertical;
_showScrollBar = attributes[@"showScrollbar"] ? [WXConvert BOOL:attributes[@"showScrollbar"]] : YES;
- // default value is NO;
- _alwaysScrollableVertical = attributes[@"alwaysScrollableVertical"]?[WXConvert BOOL:attributes[@"alwaysScrollableVertical"]] : NO;
- // default value is NO;
- _alwaysScrollableHorizontal = attributes[@"alwaysScrollableHorizontal"]?[WXConvert BOOL:attributes[@"alwaysScrollableHorizontal"]] : NO;
+
+ if (attributes[@"alwaysScrollableVertical"]) {
+ _alwaysScrollableVertical = [WXConvert NSString:attributes[@"alwaysScrollableVertical"]];
+ }
+ if (attributes[@"alwaysScrollableHorizontal"]) {
+ _alwaysScrollableHorizontal = [WXConvert NSString:attributes[@"alwaysScrollableHorizontal"]];
+ }
_pagingEnabled = attributes[@"pagingEnabled"] ? [WXConvert BOOL:attributes[@"pagingEnabled"]] : NO;
_loadMoreOffset = attributes[@"loadmoreoffset"] ? [WXConvert WXPixelType:attributes[@"loadmoreoffset"] scaleFactor:self.weexInstance.pixelScaleFactor] : 0;
_loadmoreretry = attributes[@"loadmoreretry"] ? [WXConvert NSUInteger:attributes[@"loadmoreretry"]] : 0;
@@ -162,8 +165,12 @@ WX_EXPORT_METHOD(@selector(resetLoadmore))
scrollView.showsHorizontalScrollIndicator = _showScrollBar;
scrollView.scrollEnabled = _scrollable;
scrollView.pagingEnabled = _pagingEnabled;
- scrollView.alwaysBounceHorizontal = _alwaysScrollableHorizontal;
- scrollView.alwaysBounceVertical = _alwaysScrollableVertical;
+ if (_alwaysScrollableHorizontal) {
+ scrollView.alwaysBounceHorizontal = [WXConvert BOOL:_alwaysScrollableHorizontal];
+ }
+ if (_alwaysScrollableVertical) {
+ scrollView.alwaysBounceVertical = [WXConvert BOOL:_alwaysScrollableVertical];
+ }
if (WX_SYS_VERSION_GREATER_THAN_OR_EQUAL_TO(@"11.0")) {
// now use the runtime to forbid the contentInset being Adjusted.
// here we add a category for scoller component view class compatible for new API,
@@ -232,13 +239,13 @@ WX_EXPORT_METHOD(@selector(resetLoadmore))
((UIScrollView *)self.view).scrollEnabled = _scrollable;
}
if (attributes[@"alwaysScrollableHorizontal"]) {
- _alwaysScrollableHorizontal = [WXConvert BOOL:attributes[@"alwaysScrollableHorizontal"]];
- ((UIScrollView*)self.view).alwaysBounceHorizontal = _alwaysScrollableHorizontal;
+ _alwaysScrollableHorizontal = [WXConvert NSString:attributes[@"alwaysScrollableHorizontal"]];
+ ((UIScrollView*)self.view).alwaysBounceHorizontal = [WXConvert BOOL:_alwaysScrollableHorizontal];
}
if (attributes[@"alwaysScrollableVertical"]) {
- _alwaysScrollableVertical = [WXConvert BOOL:attributes[@"alwaysScrollableVertical"]];
- ((UIScrollView*)self.view).alwaysBounceVertical = _alwaysScrollableVertical;
+ _alwaysScrollableVertical = [WXConvert NSString:attributes[@"alwaysScrollableVertical"]];
+ ((UIScrollView*)self.view).alwaysBounceVertical = [WXConvert BOOL:_alwaysScrollableVertical];
}
if (attributes[@"offsetAccuracy"]) {
_offsetAccuracy = [WXConvert WXPixelType:attributes[@"offsetAccuracy"] scaleFactor:self.weexInstance.pixelScaleFactor];
[36/50] [abbrv] incubator-weex git commit: * [android] fix unit
android test log mocked
Posted by gu...@apache.org.
* [android] fix unit android test log mocked
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/f4bfd225
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/f4bfd225
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/f4bfd225
Branch: refs/heads/master
Commit: f4bfd225672bf4169834393bf0ca675864a0c964
Parents: 8cebed4
Author: atomtong <to...@qq.com>
Authored: Tue Oct 17 11:22:25 2017 +0800
Committer: atomtong <to...@qq.com>
Committed: Tue Oct 17 11:28:58 2017 +0800
----------------------------------------------------------------------
android/sdk/build.gradle | 1 +
android/sdk/src/test/java/com/taobao/weex/utils/WXUtilsTest.java | 3 ++-
2 files changed, 3 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/f4bfd225/android/sdk/build.gradle
----------------------------------------------------------------------
diff --git a/android/sdk/build.gradle b/android/sdk/build.gradle
index 0be69fb..a49a05f 100755
--- a/android/sdk/build.gradle
+++ b/android/sdk/build.gradle
@@ -127,6 +127,7 @@ android {
targetCompatibility JavaVersion.VERSION_1_7
}
testOptions {
+ unitTests.returnDefaultValues = true
unitTests.all {
maxHeapSize = "1024m"
jvmArgs += ['-XX:-UseSplitVerifier', '-noverify','-Xverify:none']/* fix VerifyError */
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/f4bfd225/android/sdk/src/test/java/com/taobao/weex/utils/WXUtilsTest.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/test/java/com/taobao/weex/utils/WXUtilsTest.java b/android/sdk/src/test/java/com/taobao/weex/utils/WXUtilsTest.java
index e981c69..5b6d273 100644
--- a/android/sdk/src/test/java/com/taobao/weex/utils/WXUtilsTest.java
+++ b/android/sdk/src/test/java/com/taobao/weex/utils/WXUtilsTest.java
@@ -19,6 +19,7 @@
package com.taobao.weex.utils;
import android.text.TextUtils;
+import android.util.Log;
import com.taobao.weappplus_sdk.BuildConfig;
import com.taobao.weex.WXEnvironment;
@@ -49,7 +50,7 @@ import static org.mockito.Matchers.any;
@RunWith(PowerMockRunner.class)
@Config(constants = BuildConfig.class, sdk = 19)
@PowerMockIgnore( {"org.mockito.*", "org.robolectric.*", "android.*"})
-@PrepareForTest( {WXEnvironment.class, WXViewUtils.class, WXSDKInstance.class, TextUtils.class})
+@PrepareForTest( {WXEnvironment.class, WXViewUtils.class, WXSDKInstance.class, TextUtils.class, Log.class, WXUtils.class, WXLogUtils.class})
public class WXUtilsTest extends TestCase {
public static final float TEST_DENSITY = 3.0f;
[42/50] [abbrv] incubator-weex git commit: * [test] add log for
danger test
Posted by gu...@apache.org.
* [test] add log for danger test
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/1c2369b4
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/1c2369b4
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/1c2369b4
Branch: refs/heads/master
Commit: 1c2369b4f1e706751843a55927683d78b7191fa8
Parents: edbde50
Author: gurisxie <27...@qq.com>
Authored: Tue Oct 17 15:45:12 2017 +0800
Committer: gurisxie <27...@qq.com>
Committed: Tue Oct 17 15:45:12 2017 +0800
----------------------------------------------------------------------
dangerfile.js | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/1c2369b4/dangerfile.js
----------------------------------------------------------------------
diff --git a/dangerfile.js b/dangerfile.js
index bfa61fb..83a0ef1 100644
--- a/dangerfile.js
+++ b/dangerfile.js
@@ -315,8 +315,8 @@ function findReviewer(resolve, reject) {
number: danger.github.pr.number,
headers: {Accept: 'application/vnd.github.diff',"user-agent": "node.js"}
}, function (err, result) {
- console.log('parseDeleteAndNormalLines')
if ("undefined" === typeof result || "undefined" === typeof result.data || err) {
+ console.log('result:'+result+', error:'+err);
resolve()
return
}
@@ -374,6 +374,7 @@ function getContent(url) {
function parseDeleteAndNormalLines(diffData, fileToDeletedLinesMap, fileToNormalLinesMap) {
try {
+ console.log('diffData:'+diffData)
var diffs = parseDiff(diffData)
diffs.forEach(diff => {
fileToDeletedLinesMap[diff.from] = [];
[20/50] [abbrv] incubator-weex git commit: async layout and preload
cell and quick convert parameter
Posted by gu...@apache.org.
async layout and preload cell and quick convert parameter
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/7cc450d9
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/7cc450d9
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/7cc450d9
Branch: refs/heads/master
Commit: 7cc450d97bb4013f9ba03ed8a9cc66267879216f
Parents: e6061d6
Author: jianbai.gbj <ji...@alibaba-inc.com>
Authored: Thu Sep 28 16:32:50 2017 +0800
Committer: gurisxie <27...@qq.com>
Committed: Tue Oct 10 12:02:29 2017 +0800
----------------------------------------------------------------------
.../java/com/taobao/weex/dom/WXDomObject.java | 3 +
.../com/taobao/weex/dom/WXTextDomObject.java | 3 +-
.../weex/ui/component/binding/Layouts.java | 101 ++++++++++++------
.../weex/ui/component/binding/Statements.java | 26 ++++-
.../list/template/TemplateViewHolder.java | 4 +
.../list/template/WXRecyclerTemplateList.java | 103 +++++++++++++++++--
.../taobao/weex/utils/WXReflectionUtils.java | 6 ++
7 files changed, 197 insertions(+), 49 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/7cc450d9/android/sdk/src/main/java/com/taobao/weex/dom/WXDomObject.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/WXDomObject.java b/android/sdk/src/main/java/com/taobao/weex/dom/WXDomObject.java
index c766e35..001545d 100644
--- a/android/sdk/src/main/java/com/taobao/weex/dom/WXDomObject.java
+++ b/android/sdk/src/main/java/com/taobao/weex/dom/WXDomObject.java
@@ -438,6 +438,9 @@ public class WXDomObject extends CSSNode implements Cloneable,ImmutableDomObject
mAttributes = new WXAttr();
}
mAttributes.putAll(attrs);
+ if(hasNewLayout()){
+ markUpdateSeen();
+ }
super.dirty();
}
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/7cc450d9/android/sdk/src/main/java/com/taobao/weex/dom/WXTextDomObject.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/WXTextDomObject.java b/android/sdk/src/main/java/com/taobao/weex/dom/WXTextDomObject.java
index 06c4e8a..3456bde 100644
--- a/android/sdk/src/main/java/com/taobao/weex/dom/WXTextDomObject.java
+++ b/android/sdk/src/main/java/com/taobao/weex/dom/WXTextDomObject.java
@@ -41,6 +41,7 @@ import android.text.style.AlignmentSpan;
import android.text.style.ForegroundColorSpan;
import com.taobao.weex.WXEnvironment;
import com.taobao.weex.common.Constants;
+import com.taobao.weex.common.WXThread;
import com.taobao.weex.dom.flex.CSSConstants;
import com.taobao.weex.dom.flex.CSSNode;
import com.taobao.weex.dom.flex.FloatUtil;
@@ -185,7 +186,7 @@ public class WXTextDomObject extends WXDomObject {
hasBeenMeasured = false;
if (layout != null && !layout.equals(atomicReference.get()) &&
Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
- if(Looper.getMainLooper().getThread().getId() != Thread.currentThread().getId()){
+ if(Thread.currentThread() instanceof WXThread){
warmUpTextLayoutCache(layout);
}
}
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/7cc450d9/android/sdk/src/main/java/com/taobao/weex/ui/component/binding/Layouts.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/binding/Layouts.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/binding/Layouts.java
index f80bc1e..5b8d32c 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/binding/Layouts.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/binding/Layouts.java
@@ -21,60 +21,40 @@ package com.taobao.weex.ui.component.binding;
import android.os.AsyncTask;
-import android.speech.tts.Voice;
+import android.util.Log;
+import com.taobao.weex.WXEnvironment;
import com.taobao.weex.WXSDKInstance;
+import com.taobao.weex.common.Constants;
import com.taobao.weex.dom.WXDomObject;
import com.taobao.weex.dom.flex.CSSLayoutContext;
import com.taobao.weex.ui.component.WXComponent;
import com.taobao.weex.ui.component.WXVContainer;
import com.taobao.weex.ui.component.list.template.TemplateViewHolder;
+import com.taobao.weex.utils.WXLogUtils;
/**
* Created by furture on 2017/8/21.
*/
public class Layouts {
/**
- * do dom layout, and set layout to component
+ * do dom layout async or sync , and set layout to component on main.
+ * on first use do sync layout, when compontnet reuse do async layout
* */
- public static void doLayout(final TemplateViewHolder templateViewHolder){
- final CSSLayoutContext layoutContext = templateViewHolder.getLayoutContext();
+ public static void doLayoutAsync(final TemplateViewHolder templateViewHolder){
final WXComponent component = templateViewHolder.getComponent();
- final WXSDKInstance instance = component.getInstance();
final int position = templateViewHolder.getHolderPosition();
if(templateViewHolder.asyncTask != null){
templateViewHolder.asyncTask.cancel(true);
+ templateViewHolder.asyncTask = null;
}
AsyncTask<Void, Void, Void> asyncTask = new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... params) {
if(templateViewHolder.getHolderPosition() == position){
-
- WXDomObject domObject = (WXDomObject) component.getDomObject();
- domObject.traverseTree(new WXDomObject.Consumer() {
- @Override
- public void accept(WXDomObject dom) {
- if(instance == null || instance.isDestroy()){
- return;
- }
- if(!dom.hasUpdate()){
- return;
- }
- dom.layoutBefore();
- }
- });
- domObject.calculateLayout(layoutContext);
- domObject.traverseTree( new WXDomObject.Consumer() {
- @Override
- public void accept(WXDomObject dom) {
- if(instance == null || instance.isDestroy()){
- return;
- }
- if (dom.hasUpdate()) {
- dom.layoutAfter();
- }
- }
- });
+ if(component.getInstance() != null && !component.getInstance().isDestroy()) {
+ doSafeLayout(component, templateViewHolder.getLayoutContext());
+ }
}
return null;
}
@@ -82,14 +62,69 @@ public class Layouts {
@Override
protected void onPostExecute(Void aVoid) {
if(position == templateViewHolder.getHolderPosition()) {
- setLayout(component, false);
+ if(component.getInstance() != null && !component.getInstance().isDestroy()) {
+ setLayout(component, false);
+ }
}
}
};
templateViewHolder.asyncTask = asyncTask;
- asyncTask.executeOnExecutor(AsyncTask.SERIAL_EXECUTOR);
+ asyncTask.executeOnExecutor(AsyncTask.SERIAL_EXECUTOR); //serial executor is better
+
}
+ /**
+ * safe layout
+ * */
+ public static void doSafeLayout(WXComponent component, final CSSLayoutContext layoutContext){
+ try{
+ long start = System.currentTimeMillis();
+ doLayout(component, layoutContext);
+ if(WXEnvironment.isApkDebugable()){
+ WXLogUtils.d("WXTemplateList",
+ component.getDomObject().getAttrs().get(Constants.Name.Recycler.SLOT_TEMPLATE_TYPE) + Thread.currentThread().getName() + " doSafeLayout used " +
+ (System.currentTimeMillis() - start));
+ }
+ }catch (Exception e){
+ if(WXEnvironment.isApkDebugable()){
+ WXLogUtils.e("WXTemplateListdoSafeLayout", e);
+ }
+ }
+ }
+
+ private static void doLayout(WXComponent component, final CSSLayoutContext layoutContext){
+ WXDomObject domObject = (WXDomObject) component.getDomObject();
+ final WXSDKInstance instance = component.getInstance();
+ domObject.traverseTree(new WXDomObject.Consumer() {
+ @Override
+ public void accept(WXDomObject dom) {
+ if(instance == null || instance.isDestroy()){
+ return;
+ }
+ if(!dom.hasUpdate()){
+ return;
+ }
+ dom.layoutBefore();
+ }
+ });
+ if(instance != null && !instance.isDestroy()){
+ domObject.calculateLayout(layoutContext);
+ }
+ domObject.traverseTree( new WXDomObject.Consumer() {
+ @Override
+ public void accept(WXDomObject dom) {
+ if(instance == null || instance.isDestroy()){
+ return;
+ }
+ if (dom.hasUpdate()) {
+ dom.layoutAfter();
+ }
+ }
+ });
+ }
+
+
+
/**
* recursive set layout to component,
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/7cc450d9/android/sdk/src/main/java/com/taobao/weex/ui/component/binding/Statements.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/binding/Statements.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/binding/Statements.java
index 755bae2..6912335 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/binding/Statements.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/binding/Statements.java
@@ -18,21 +18,26 @@
*/
package com.taobao.weex.ui.component.binding;
+import android.os.Looper;
import android.support.v4.util.ArrayMap;
import android.text.TextUtils;
+import android.util.Log;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
+import com.taobao.weex.common.Constants;
import com.taobao.weex.dom.WXAttr;
import com.taobao.weex.dom.WXDomObject;
import com.taobao.weex.dom.WXEvent;
import com.taobao.weex.dom.binding.ELUtils;
import com.taobao.weex.dom.binding.WXStatement;
+import com.taobao.weex.dom.flex.CSSLayoutContext;
import com.taobao.weex.el.parse.ArrayStack;
import com.taobao.weex.el.parse.Operators;
import com.taobao.weex.el.parse.Token;
import com.taobao.weex.ui.component.WXComponent;
import com.taobao.weex.ui.component.WXComponentFactory;
+import com.taobao.weex.ui.component.WXImage;
import com.taobao.weex.ui.component.WXVContainer;
import com.taobao.weex.utils.WXLogUtils;
import com.taobao.weex.utils.WXUtils;
@@ -198,9 +203,11 @@ public class Statements {
renderNodeDomObject.getAttrs().setStatement(null); // clear node's statement
parentDomObject.add(renderNodeDomObject, renderIndex);
parent.addChild(renderNode, renderIndex);
- parent.createChildViewAt(renderIndex);
- renderNode.applyLayoutAndEvent(renderNode);
- renderNode.bindData(renderNode);
+ if(Thread.currentThread() == Looper.getMainLooper().getThread()) {
+ parent.createChildViewAt(renderIndex);
+ renderNode.applyLayoutAndEvent(renderNode);
+ renderNode.bindData(renderNode);
+ }
}
doBindingAttrsEventAndRenderChildNode(renderNode, domObject, context);
renderIndex++;
@@ -307,8 +314,17 @@ public class Statements {
}
if(dynamic.size() > 0) {
- domObject.updateAttr(dynamic);
- component.updateProperties(dynamic);
+ if(dynamic.size() == 1
+ && dynamic.get(Constants.Name.SRC) != null
+ && component instanceof WXImage){
+ //for image avoid dirty layout, only update src attrs
+ domObject.getAttrs().put(Constants.Name.SRC, dynamic.get(Constants.Name.SRC));
+ }else {
+ domObject.updateAttr(dynamic); //dirty layout
+ }
+ if(Thread.currentThread() == Looper.getMainLooper().getThread()) {
+ component.updateProperties(dynamic);
+ }
}
}
WXEvent event = domObject.getEvents();
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/7cc450d9/android/sdk/src/main/java/com/taobao/weex/ui/component/list/template/TemplateViewHolder.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/list/template/TemplateViewHolder.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/list/template/TemplateViewHolder.java
index 21930eb..a418e3e 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/list/template/TemplateViewHolder.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/list/template/TemplateViewHolder.java
@@ -67,6 +67,10 @@ public class TemplateViewHolder extends ListBaseViewHolder {
return layoutContext;
}
+ public void setLayoutContext(CSSLayoutContext layoutContext){
+ this.layoutContext = layoutContext;
+ }
+
public int getHolderPosition() {
return holderPosition;
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/7cc450d9/android/sdk/src/main/java/com/taobao/weex/ui/component/list/template/WXRecyclerTemplateList.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/list/template/WXRecyclerTemplateList.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/list/template/WXRecyclerTemplateList.java
index 0454aba..5d23bf6 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/list/template/WXRecyclerTemplateList.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/list/template/WXRecyclerTemplateList.java
@@ -22,6 +22,7 @@ import android.annotation.TargetApi;
import android.content.Context;
import android.graphics.Point;
import android.graphics.PointF;
+import android.os.AsyncTask;
import android.os.Build;
import android.os.Looper;
import android.support.annotation.NonNull;
@@ -53,6 +54,7 @@ import com.taobao.weex.dom.WXCellDomObject;
import com.taobao.weex.dom.WXDomObject;
import com.taobao.weex.dom.WXEvent;
import com.taobao.weex.dom.WXRecyclerDomObject;
+import com.taobao.weex.dom.flex.CSSLayoutContext;
import com.taobao.weex.dom.flex.Spacing;
import com.taobao.weex.el.parse.ArrayStack;
import com.taobao.weex.ui.component.AppearanceHelper;
@@ -82,6 +84,7 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
import static com.taobao.weex.common.Constants.Name.LOADMOREOFFSET;
@@ -135,7 +138,8 @@ public class WXRecyclerTemplateList extends WXVContainer<BounceRecyclerView> imp
private Map<String, WXCell> mTemplates;
private String listDataTemplateKey = Constants.Name.Recycler.SLOT_TEMPLATE_TYPE;
private Runnable listUpdateRunnable;
-
+ private ConcurrentHashMap<String, WXCell> mTemplatesCache;
+ private ConcurrentHashMap<String, Boolean> mTemplateRendered;
/**
* sticky helper
@@ -177,12 +181,20 @@ public class WXRecyclerTemplateList extends WXVContainer<BounceRecyclerView> imp
mTemplateViewTypes = new ArrayMap<>();
mTemplateViewTypes.put("", 0); //empty view, when template was not sended
mTemplates = new HashMap<>();
+ mTemplatesCache = new ConcurrentHashMap<>();
mStickyHelper = new TemplateStickyHelper(this);
cellLifecycleManager = new CellLifecycleManager(this);
orientation = mDomObject.getOrientation();
listDataTemplateKey = WXUtils.getString(getDomObject().getAttrs().get(Constants.Name.Recycler.LIST_DATA_TEMPLATE_KEY), Constants.Name.Recycler.SLOT_TEMPLATE_TYPE);
listDataItemKey = WXUtils.getString(getDomObject().getAttrs().get(Constants.Name.Recycler.LIST_DATA_ITEM), listDataItemKey);
listDataIndexKey = WXUtils.getString(getDomObject().getAttrs().get(Constants.Name.Recycler.LIST_DATA_ITEM_INDEX), listDataIndexKey);
+ if( getDomObject().getAttrs().get(Constants.Name.Recycler.LIST_DATA) instanceof JSONArray) {
+ JSONArray array = (JSONArray)getDomObject().getAttrs().get(Constants.Name.Recycler.LIST_DATA);
+ if(array.size() > 0) {
+ listData = array;
+ }
+ }
+ mTemplateRendered = new ConcurrentHashMap<>();
}
@Override
@@ -204,6 +216,7 @@ public class WXRecyclerTemplateList extends WXVContainer<BounceRecyclerView> imp
}
RecyclerViewBaseAdapter recyclerViewBaseAdapter = new RecyclerViewBaseAdapter<>(this);
recyclerViewBaseAdapter.setHasStableIds(true);
+ bounceRecyclerView.getInnerView().setItemAnimator(null);
bounceRecyclerView.getInnerView().setItemViewCacheSize(itemViewCacheSize);
bounceRecyclerView.getInnerView().setHasFixedSize(hasFixedSize);
bounceRecyclerView.setRecyclerViewBaseAdapter(recyclerViewBaseAdapter);
@@ -533,7 +546,13 @@ public class WXRecyclerTemplateList extends WXVContainer<BounceRecyclerView> imp
Object templateId = child.getDomObject().getAttrs().get(Constants.Name.Recycler.SLOT_TEMPLATE_TYPE);
String key = WXUtils.getString(templateId, null);
if(key != null){
+ //set visible false, skip layout in dom thread, set visible true in onCreateViewHolder
+ if(child.getDomObject() != null) {
+ WXDomObject domObject = (WXDomObject) child.getDomObject();
+ domObject.setVisible(false);
+ }
mTemplates.put(key, (WXCell) child);
+ asyncPreloadCellCopyCache(key);
if(mTemplateViewTypes.get(key) == null){
mTemplateViewTypes.put(key, mTemplateViewTypes.size());
}
@@ -1017,8 +1036,7 @@ public class WXRecyclerTemplateList extends WXVContainer<BounceRecyclerView> imp
if(WXEnvironment.isApkDebugable()){
WXLogUtils.d(TAG, position + getTemplateKey(position) + " onBindViewHolder render used " + (System.currentTimeMillis() - start));
}
-
- Layouts.doLayout(templateViewHolder);
+ Layouts.doLayoutAsync(templateViewHolder);
cellLifecycleManager.onAttach(position, component);
if(WXEnvironment.isApkDebugable()){
WXLogUtils.d(TAG, position + getTemplateKey(position) + " onBindViewHolder layout used " + (System.currentTimeMillis() - start));
@@ -1034,30 +1052,95 @@ public class WXRecyclerTemplateList extends WXVContainer<BounceRecyclerView> imp
view.setLayoutParams(new FrameLayout.LayoutParams(0, 0));
return new TemplateViewHolder(view, viewType);
}
- WXCell component = (WXCell) Statements.copyComponentTree(source);
- if(component.getDomObject() instanceof WXCellDomObject
- && getDomObject() instanceof WXRecyclerDomObject){
- WXCellDomObject domObject = (WXCellDomObject) component.getDomObject();
- domObject.setRecyclerDomObject((WXRecyclerDomObject) getDomObject());
+ long start = System.currentTimeMillis();
+ WXCell component = mTemplatesCache.remove(template);
+ boolean needLayout = false;
+ if(component == null) {
+ component = (WXCell) copyCell(source);
+ needLayout = true;
+ }
+ asyncPreloadCellCopyCache(template);
+ CSSLayoutContext layoutContext = null;
+ if(needLayout){
+ layoutContext = new CSSLayoutContext();
+ Layouts.doSafeLayout(component, layoutContext);
+ if(WXEnvironment.isApkDebugable()){
+ WXLogUtils.d(TAG, template + " onCreateViewHolder sync layout used " + (System.currentTimeMillis() - start));
+ }
}
+ Layouts.setLayout(component, false);
component.lazy(false);
- long start = System.currentTimeMillis();
component.createView();
if(WXEnvironment.isApkDebugable()){
WXLogUtils.d(TAG, template + " onCreateViewHolder view used " + (System.currentTimeMillis() - start));
}
component.applyLayoutAndEvent(component);
if(WXEnvironment.isApkDebugable()) {
- WXLogUtils.d(TAG, template + " onCreateViewHolder layout used " + (System.currentTimeMillis() - start));
+ WXLogUtils.d(TAG, template + " onCreateViewHolder apply layout used " + (System.currentTimeMillis() - start));
}
component.bindData(component);
if(WXEnvironment.isApkDebugable()) {
WXLogUtils.d(TAG, template + " onCreateViewHolder bindData used " + (System.currentTimeMillis() - start));
}
TemplateViewHolder templateViewHolder = new TemplateViewHolder(component, viewType);
+ templateViewHolder.setLayoutContext(layoutContext);
return templateViewHolder;
}
+ private void asyncPreloadCellCopyCache(final String template) {
+ final WXCell cell = mTemplates.get(template);
+ if(cell == null){
+ return;
+ }
+ if(mTemplatesCache.get(template) != null){
+ return;
+ }
+ AsyncTask.THREAD_POOL_EXECUTOR.execute(new Runnable() {
+ @Override
+ public void run() {
+ if(cell.getInstance() == null || cell.getInstance().isDestroy()){
+ return;
+ }
+ WXCell component = (WXCell) copyCell(cell);
+ if(cell.getInstance() == null || cell.getInstance().isDestroy()){
+ return;
+ }
+ Layouts.doSafeLayout(component, new CSSLayoutContext());
+ mTemplatesCache.put(template, component);
+ }
+ });
+ }
+
+ /**
+ * copy cell component from source, and return source
+ * */
+ private WXComponent copyCell(WXComponent cell){
+ /** pre render for cell */
+ Boolean rendered = mTemplateRendered.get(cell.getRef());
+ if(rendered == null || !rendered) {
+ if(listData != null){
+ for(int i=0; i<listData.size(); i++){
+ WXCell source = getSourceTemplate(i);
+ if(source == cell){
+ Statements.doRender(cell, getStackContextForPosition(i));
+ mTemplateRendered.put(source.getRef(), true);
+ break;
+ }
+ }
+ }
+ }
+ WXCell component = (WXCell) Statements.copyComponentTree(cell);
+ if(component.getDomObject() != null){
+ ((WXDomObject)component.getDomObject()).setVisible(true);
+ }
+ if(component.getDomObject() instanceof WXCellDomObject
+ && getDomObject() instanceof WXRecyclerDomObject){
+ WXCellDomObject domObject = (WXCellDomObject) component.getDomObject();
+ domObject.setRecyclerDomObject((WXRecyclerDomObject) getDomObject());
+ }
+ return component;
+ }
+
/**
* @param position
* when template not send, return an invalid id, use empty view holder.
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/7cc450d9/android/sdk/src/main/java/com/taobao/weex/utils/WXReflectionUtils.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/utils/WXReflectionUtils.java b/android/sdk/src/main/java/com/taobao/weex/utils/WXReflectionUtils.java
index 930c383..5bef6d3 100644
--- a/android/sdk/src/main/java/com/taobao/weex/utils/WXReflectionUtils.java
+++ b/android/sdk/src/main/java/com/taobao/weex/utils/WXReflectionUtils.java
@@ -20,6 +20,8 @@ package com.taobao.weex.utils;
import android.text.TextUtils;
import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
@@ -39,6 +41,10 @@ public class WXReflectionUtils {
return value.getClass().isAssignableFrom(double.class) ? value : WXUtils.getDouble(value);
} else if (paramClazz == float.class) {
return value.getClass().isAssignableFrom(float.class) ? value : WXUtils.getFloat(value);
+ } else if (paramClazz == JSONArray.class && value != null && value.getClass() == JSONArray.class) {
+ return value;
+ } else if (paramClazz == JSONObject.class && value != null && value.getClass() == JSONObject.class) {
+ return value;
} else {
return JSON.parseObject(value instanceof String ? (String) value : JSON.toJSONString(value), paramClazz);
}
[15/50] [abbrv] incubator-weex git commit: fix scroll to bug and add
md5 for template
Posted by gu...@apache.org.
fix scroll to bug and add md5 for template
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/e6061d61
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/e6061d61
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/e6061d61
Branch: refs/heads/master
Commit: e6061d61674a44968c3581b9ba47612d1976c726
Parents: 361f4b6
Author: jianbai.gbj <ji...@alibaba-inc.com>
Authored: Mon Oct 9 19:19:33 2017 +0800
Committer: gurisxie <27...@qq.com>
Committed: Tue Oct 10 12:02:28 2017 +0800
----------------------------------------------------------------------
.../weex/ui/component/binding/Layouts.java | 69 ++++++++++++++------
.../list/template/TemplateViewHolder.java | 3 +
.../list/template/WXRecyclerTemplateList.java | 3 +-
3 files changed, 53 insertions(+), 22 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/e6061d61/android/sdk/src/main/java/com/taobao/weex/ui/component/binding/Layouts.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/binding/Layouts.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/binding/Layouts.java
index bf0abfc..f80bc1e 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/binding/Layouts.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/binding/Layouts.java
@@ -20,11 +20,15 @@ package com.taobao.weex.ui.component.binding;
+import android.os.AsyncTask;
+import android.speech.tts.Voice;
+
import com.taobao.weex.WXSDKInstance;
import com.taobao.weex.dom.WXDomObject;
import com.taobao.weex.dom.flex.CSSLayoutContext;
import com.taobao.weex.ui.component.WXComponent;
import com.taobao.weex.ui.component.WXVContainer;
+import com.taobao.weex.ui.component.list.template.TemplateViewHolder;
/**
* Created by furture on 2017/8/21.
@@ -33,34 +37,57 @@ public class Layouts {
/**
* do dom layout, and set layout to component
* */
- public static void doLayout(WXComponent component, CSSLayoutContext layoutContext){
+ public static void doLayout(final TemplateViewHolder templateViewHolder){
+ final CSSLayoutContext layoutContext = templateViewHolder.getLayoutContext();
+ final WXComponent component = templateViewHolder.getComponent();
final WXSDKInstance instance = component.getInstance();
- WXDomObject domObject = (WXDomObject) component.getDomObject();
- domObject.traverseTree(new WXDomObject.Consumer() {
+ final int position = templateViewHolder.getHolderPosition();
+ if(templateViewHolder.asyncTask != null){
+ templateViewHolder.asyncTask.cancel(true);
+ }
+ AsyncTask<Void, Void, Void> asyncTask = new AsyncTask<Void, Void, Void>() {
@Override
- public void accept(WXDomObject dom) {
- if(instance == null || instance.isDestroy()){
- return;
- }
- if(!dom.hasUpdate()){
- return;
+ protected Void doInBackground(Void... params) {
+ if(templateViewHolder.getHolderPosition() == position){
+
+ WXDomObject domObject = (WXDomObject) component.getDomObject();
+ domObject.traverseTree(new WXDomObject.Consumer() {
+ @Override
+ public void accept(WXDomObject dom) {
+ if(instance == null || instance.isDestroy()){
+ return;
+ }
+ if(!dom.hasUpdate()){
+ return;
+ }
+ dom.layoutBefore();
+ }
+ });
+ domObject.calculateLayout(layoutContext);
+ domObject.traverseTree( new WXDomObject.Consumer() {
+ @Override
+ public void accept(WXDomObject dom) {
+ if(instance == null || instance.isDestroy()){
+ return;
+ }
+ if (dom.hasUpdate()) {
+ dom.layoutAfter();
+ }
+ }
+ });
}
- dom.layoutBefore();
+ return null;
}
- });
- domObject.calculateLayout(layoutContext);
- domObject.traverseTree( new WXDomObject.Consumer() {
+
@Override
- public void accept(WXDomObject dom) {
- if(instance == null || instance.isDestroy()){
- return;
- }
- if (dom.hasUpdate()) {
- dom.layoutAfter();
+ protected void onPostExecute(Void aVoid) {
+ if(position == templateViewHolder.getHolderPosition()) {
+ setLayout(component, false);
}
}
- });
- setLayout(component, false);
+ };
+ templateViewHolder.asyncTask = asyncTask;
+ asyncTask.executeOnExecutor(AsyncTask.SERIAL_EXECUTOR);
}
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/e6061d61/android/sdk/src/main/java/com/taobao/weex/ui/component/list/template/TemplateViewHolder.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/list/template/TemplateViewHolder.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/list/template/TemplateViewHolder.java
index 6a6c2b9..21930eb 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/list/template/TemplateViewHolder.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/list/template/TemplateViewHolder.java
@@ -17,6 +17,7 @@
* under the License.
*/
package com.taobao.weex.ui.component.list.template;
+import android.os.AsyncTask;
import android.view.View;
import com.taobao.weex.annotation.Component;
@@ -44,6 +45,8 @@ public class TemplateViewHolder extends ListBaseViewHolder {
private int holderPosition = -1;
+ public AsyncTask<Void, Void, Void> asyncTask;
+
/**
* header position
* */
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/e6061d61/android/sdk/src/main/java/com/taobao/weex/ui/component/list/template/WXRecyclerTemplateList.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/list/template/WXRecyclerTemplateList.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/list/template/WXRecyclerTemplateList.java
index 1ca589b..0454aba 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/list/template/WXRecyclerTemplateList.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/list/template/WXRecyclerTemplateList.java
@@ -1017,7 +1017,8 @@ public class WXRecyclerTemplateList extends WXVContainer<BounceRecyclerView> imp
if(WXEnvironment.isApkDebugable()){
WXLogUtils.d(TAG, position + getTemplateKey(position) + " onBindViewHolder render used " + (System.currentTimeMillis() - start));
}
- Layouts.doLayout(component, templateViewHolder.getLayoutContext());
+
+ Layouts.doLayout(templateViewHolder);
cellLifecycleManager.onAttach(position, component);
if(WXEnvironment.isApkDebugable()){
WXLogUtils.d(TAG, position + getTemplateKey(position) + " onBindViewHolder layout used " + (System.currentTimeMillis() - start));
[39/50] [abbrv] incubator-weex git commit: resolve conflicts
Posted by gu...@apache.org.
resolve conflicts
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/0ed86c7e
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/0ed86c7e
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/0ed86c7e
Branch: refs/heads/master
Commit: 0ed86c7e66a164ba26fac016b2d4e9632332fdbe
Parents: f2d8280
Author: jianbai.gbj <ji...@alibaba-inc.com>
Authored: Tue Oct 17 11:15:53 2017 +0800
Committer: gurisxie <27...@qq.com>
Committed: Tue Oct 17 15:25:12 2017 +0800
----------------------------------------------------------------------
.../taobao/weex/ui/component/list/WXCell.java | 32 ++++++++++++++++++++
1 file changed, 32 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/0ed86c7e/android/sdk/src/main/java/com/taobao/weex/ui/component/list/WXCell.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/list/WXCell.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/list/WXCell.java
index 4fe4bc2..c329e99 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/list/WXCell.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/list/WXCell.java
@@ -61,6 +61,13 @@ public class WXCell extends WidgetContainer<WXFrameLayout> {
private boolean hasLayout = false;
+ private Object renderData;
+
+ private boolean isSourceUsed = false;
+
+ private boolean hasLayout = false;
+
+
@Deprecated
public WXCell(WXSDKInstance instance, WXDomObject dom, WXVContainer parent, String instanceId, boolean isLazy) {
super(instance, dom, parent);
@@ -208,4 +215,29 @@ public class WXCell extends WidgetContainer<WXFrameLayout> {
public void setHasLayout(boolean hasLayout) {
this.hasLayout = hasLayout;
}
+
+ public Object getRenderData() {
+ return renderData;
+ }
+
+ public void setRenderData(Object renderData) {
+ this.renderData = renderData;
+ }
+
+ public boolean isSourceUsed() {
+ return isSourceUsed;
+ }
+
+ public void setSourceUsed(boolean sourceUsed) {
+ isSourceUsed = sourceUsed;
+ }
+
+ public boolean isHasLayout() {
+ return hasLayout;
+ }
+
+ public void setHasLayout(boolean hasLayout) {
+ this.hasLayout = hasLayout;
+ }
+
}
[29/50] [abbrv] incubator-weex git commit: * [android] update so
delete some debug log
Posted by gu...@apache.org.
* [android] update so
delete some debug log
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/05214a79
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/05214a79
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/05214a79
Branch: refs/heads/master
Commit: 05214a79dc115db0c7fc05debe0c6abae51f876e
Parents: 35a03a8
Author: yuhun-alibaba <to...@gmail.com>
Authored: Thu Oct 12 11:47:06 2017 +0800
Committer: yuhun-alibaba <to...@gmail.com>
Committed: Thu Oct 12 11:47:06 2017 +0800
----------------------------------------------------------------------
android/sdk/libs/armeabi/libweexjsb.so | Bin 22620 -> 22616 bytes
android/sdk/libs/armeabi/libweexjsc.so | Bin 342264 -> 341824 bytes
android/sdk/libs/armeabi/libweexjss.so | Bin 6754016 -> 6754016 bytes
3 files changed, 0 insertions(+), 0 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/05214a79/android/sdk/libs/armeabi/libweexjsb.so
----------------------------------------------------------------------
diff --git a/android/sdk/libs/armeabi/libweexjsb.so b/android/sdk/libs/armeabi/libweexjsb.so
index 2d3b7b4..1330933 100755
Binary files a/android/sdk/libs/armeabi/libweexjsb.so and b/android/sdk/libs/armeabi/libweexjsb.so differ
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/05214a79/android/sdk/libs/armeabi/libweexjsc.so
----------------------------------------------------------------------
diff --git a/android/sdk/libs/armeabi/libweexjsc.so b/android/sdk/libs/armeabi/libweexjsc.so
index d4009b8..4e76388 100755
Binary files a/android/sdk/libs/armeabi/libweexjsc.so and b/android/sdk/libs/armeabi/libweexjsc.so differ
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/05214a79/android/sdk/libs/armeabi/libweexjss.so
----------------------------------------------------------------------
diff --git a/android/sdk/libs/armeabi/libweexjss.so b/android/sdk/libs/armeabi/libweexjss.so
index f0bb8d4..544d41d 100755
Binary files a/android/sdk/libs/armeabi/libweexjss.so and b/android/sdk/libs/armeabi/libweexjss.so differ
[40/50] [abbrv] incubator-weex git commit: sticky offset supported,
keep position lost when insert data fix
Posted by gu...@apache.org.
sticky offset supported, keep position lost when insert data fix
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/37d62f99
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/37d62f99
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/37d62f99
Branch: refs/heads/master
Commit: 37d62f99882c1f6eec491ab6e2527923bf2c0b78
Parents: 0ed86c7
Author: jianbai.gbj <ji...@alibaba-inc.com>
Authored: Mon Oct 16 13:59:17 2017 +0800
Committer: gurisxie <27...@qq.com>
Committed: Tue Oct 17 15:37:02 2017 +0800
----------------------------------------------------------------------
.../java/com/taobao/weex/common/Constants.java | 3 +
.../ui/component/list/BasicListComponent.java | 114 ++++++++++++++-----
.../ui/component/list/StickyHeaderHelper.java | 43 ++++++-
.../taobao/weex/ui/component/list/WXCell.java | 92 +++++++--------
.../list/template/WXRecyclerTemplateList.java | 2 +-
5 files changed, 178 insertions(+), 76 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/37d62f99/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 e74e083..730ce84 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
@@ -182,6 +182,9 @@ public class Constants {
String ARIA_LABEL = "ariaLabel";
String ARIA_HIDDEN = "ariaHidden";
+ String STICKY_OFFSET = "stickyOffset";
+ String HAS_FIXED_SIZE = "hasFixedSize";
+ String KEEP_POSITION_LAYOUT_DELAY = "keepPositionLayoutDelay";
interface Recycler{
String LIST_DATA = "listData";
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/37d62f99/android/sdk/src/main/java/com/taobao/weex/ui/component/list/BasicListComponent.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/list/BasicListComponent.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/list/BasicListComponent.java
index 640a17e..5649832 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/list/BasicListComponent.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/list/BasicListComponent.java
@@ -150,6 +150,15 @@ public abstract class BasicListComponent<T extends ViewGroup & ListComponentView
private WXStickyHelper stickyHelper;
+
+ /**
+ * keep positon
+ * */
+ private WXComponent keepPositionCell = null;
+ private Runnable keepPositionCellRunnable = null;
+ private long keepPositionLayoutDelay = 150;
+
+
public BasicListComponent(WXSDKInstance instance, WXDomObject node, WXVContainer parent) {
super(instance, node, parent);
stickyHelper = new WXStickyHelper(this);
@@ -236,6 +245,9 @@ public abstract class BasicListComponent<T extends ViewGroup & ListComponentView
if (transforms != null) {
bounceRecyclerView.getInnerView().addItemDecoration(RecyclerTransform.parseTransforms(getOrientation(), transforms));
}
+ if(getDomObject().getAttrs().get(Constants.Name.KEEP_POSITION_LAYOUT_DELAY) != null){
+ keepPositionLayoutDelay = WXUtils.getNumberInt(getDomObject().getAttrs().get(Constants.Name.KEEP_POSITION_LAYOUT_DELAY), (int)keepPositionLayoutDelay);
+ }
mItemAnimator=bounceRecyclerView.getInnerView().getItemAnimator();
@@ -245,6 +257,10 @@ public abstract class BasicListComponent<T extends ViewGroup & ListComponentView
bounceRecyclerView.setOverScrollMode(View.OVER_SCROLL_NEVER);
bounceRecyclerView.getInnerView().clearOnScrollListeners();
bounceRecyclerView.getInnerView().addOnScrollListener(mViewOnScrollListener);
+ if(getDomObject().getAttrs().get(Constants.Name.HAS_FIXED_SIZE) != null){
+ boolean hasFixedSize = WXUtils.getBoolean(getDomObject().getAttrs().get(Constants.Name.HAS_FIXED_SIZE), false);
+ bounceRecyclerView.getInnerView().setHasFixedSize(hasFixedSize);
+ }
bounceRecyclerView.getInnerView().addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
@@ -485,53 +501,54 @@ public abstract class BasicListComponent<T extends ViewGroup & ListComponentView
if (stickyComponent != null && stickyComponent.getDomObject() != null
&& stickyComponent instanceof WXCell) {
- WXCell cell = (WXCell) stickyComponent;
- if (cell.getHostView() == null) {
- return;
- }
+ WXCell cell = (WXCell) stickyComponent;
+ if (cell.getHostView() == null) {
+ return;
+ }
+
+ int[] location = new int[2];
+ stickyComponent.getHostView().getLocationOnScreen(location);
+ int[] parentLocation = new int[2];
+ stickyComponent.getParentScroller().getView().getLocationOnScreen(parentLocation);
+ int top = location[1] - parentLocation[1];
+
RecyclerView.LayoutManager layoutManager;
boolean beforeFirstVisibleItem = false;
boolean removeOldSticky = false;
layoutManager = getHostView().getInnerView().getLayoutManager();
if (layoutManager instanceof LinearLayoutManager || layoutManager instanceof GridLayoutManager) {
- int fVisible = ((LinearLayoutManager) layoutManager).findFirstVisibleItemPosition();
+ int firstVisiblePosition = ((LinearLayoutManager) layoutManager).findFirstVisibleItemPosition();
+ int lastVisiblePosition = ((LinearLayoutManager) layoutManager).findLastVisibleItemPosition();
int pos = mChildren.indexOf(cell);
cell.setScrollPositon(pos);
-
- if (pos <= fVisible) {
+ if (pos <= firstVisiblePosition
+ || (cell.getStickyOffset() > 0 && firstVisiblePosition < pos && pos <= lastVisiblePosition &&
+ top <= cell.getStickyOffset())) {
beforeFirstVisibleItem = true;
if(pos > currentStickyPos) {
currentStickyPos = pos;
}
- }
-
- if(pos > fVisible){
+ }else{
removeOldSticky = true;
}
} else if(layoutManager instanceof StaggeredGridLayoutManager){
int [] firstItems= new int[3];
- int fVisible = ((StaggeredGridLayoutManager) layoutManager).findFirstVisibleItemPositions(firstItems)[0];
+ int firstVisiblePosition = ((StaggeredGridLayoutManager) layoutManager).findFirstVisibleItemPositions(firstItems)[0];
+ int lastVisiblePosition = ((StaggeredGridLayoutManager) layoutManager).findLastVisibleItemPositions(firstItems)[0];
int pos = mChildren.indexOf(cell);
- if (pos <= fVisible) {
+ if (pos <= firstVisiblePosition || (cell.getStickyOffset() > 0 && firstVisiblePosition < pos && pos <= lastVisiblePosition &&
+ top <= cell.getStickyOffset())) {
beforeFirstVisibleItem = true;
- }
-
- if(pos > fVisible){
+ }else{
removeOldSticky = true;
}
}
- int[] location = new int[2];
- stickyComponent.getHostView().getLocationOnScreen(location);
- int[] parentLocation = new int[2];
- stickyComponent.getParentScroller().getView().getLocationOnScreen(parentLocation);
-
- int top = location[1] - parentLocation[1];
- boolean showSticky = beforeFirstVisibleItem && cell.getLocationFromStart() >= 0 && top <= 0 && dy >= 0;
- boolean removeSticky = cell.getLocationFromStart() <= 0 && top > 0 && dy <= 0;
+ boolean showSticky = beforeFirstVisibleItem && cell.getLocationFromStart() >= 0 && top <= cell.getStickyOffset() && dy >= 0;
+ boolean removeSticky = cell.getLocationFromStart() <= cell.getStickyOffset() && top > cell.getStickyOffset() && dy <= 0;
if (showSticky) {
bounceRecyclerView.notifyStickyShow(cell);
} else if (removeSticky || removeOldSticky) {
@@ -584,7 +601,6 @@ public abstract class BasicListComponent<T extends ViewGroup & ListComponentView
@Override
public void addChild(WXComponent child, int index) {
super.addChild(child, index);
-
if (child == null || index < -1) {
return;
}
@@ -593,7 +609,7 @@ public abstract class BasicListComponent<T extends ViewGroup & ListComponentView
bindViewType(child);
int adapterPosition = index == -1 ? mChildren.size() - 1 : index;
- T view = getHostView();
+ final T view = getHostView();
if (view != null) {
boolean isAddAnimation = false;
ImmutableDomObject domObject = child.getDomObject();
@@ -616,9 +632,52 @@ public abstract class BasicListComponent<T extends ViewGroup & ListComponentView
}
}
if (isKeepScrollPosition) {
- int last=((LinearLayoutManager)view.getInnerView().getLayoutManager()).findLastVisibleItemPosition();
- view.getInnerView().getLayoutManager().scrollToPosition(last);
+ if(view.getInnerView().getLayoutManager() instanceof LinearLayoutManager){
+ if(!view.getInnerView().isLayoutFrozen()){ //frozen, prevent layout when scroll
+ view.getInnerView().setLayoutFrozen(true);
+ }
+ if(keepPositionCell == null){
+ int last=((LinearLayoutManager)view.getInnerView().getLayoutManager()).findLastCompletelyVisibleItemPosition();
+ ListBaseViewHolder holder = (ListBaseViewHolder) view.getInnerView().findViewHolderForAdapterPosition(last);
+ if(holder != null){
+ keepPositionCell = holder.getComponent();
+ }
+ if(keepPositionCell != null) {
+ if(keepPositionCellRunnable != null){
+ view.removeCallbacks(keepPositionCellRunnable);
+ }
+ keepPositionCellRunnable = new Runnable() {
+ @Override
+ public void run() {
+ if(keepPositionCell != null){
+ int keepPosition = indexOf(keepPositionCell);
+ int offset = 0;
+ if(keepPositionCell.getHostView() != null){
+ offset = keepPositionCell.getHostView().getTop();
+ }
+ if(offset > 0) {
+ ((LinearLayoutManager) view.getInnerView().getLayoutManager()).scrollToPositionWithOffset(keepPosition, offset);
+ }else{
+ view.getInnerView().getLayoutManager().scrollToPosition(keepPosition);
+
+ }
+ view.getInnerView().setLayoutFrozen(false);
+ keepPositionCell = null;
+ keepPositionCellRunnable = null;
+ }
+ }
+ };
+ }
+ }
+ if(keepPositionCellRunnable == null){
+ view.getInnerView().scrollToPosition(((LinearLayoutManager)view.getInnerView().getLayoutManager()).findLastVisibleItemPosition());
+ }
+ }
view.getRecyclerViewBaseAdapter().notifyItemInserted(adapterPosition);
+ if(keepPositionCellRunnable != null){
+ view.removeCallbacks(keepPositionCellRunnable);
+ view.postDelayed(keepPositionCellRunnable, keepPositionLayoutDelay);
+ }
} else {
view.getRecyclerViewBaseAdapter().notifyItemChanged(adapterPosition);
}
@@ -628,6 +687,7 @@ public abstract class BasicListComponent<T extends ViewGroup & ListComponentView
+
private void relocateAppearanceHelper() {
Iterator<Map.Entry<String, AppearanceHelper>> iterator = mAppearComponents.entrySet().iterator();
while (iterator.hasNext()) {
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/37d62f99/android/sdk/src/main/java/com/taobao/weex/ui/component/list/StickyHeaderHelper.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/list/StickyHeaderHelper.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/list/StickyHeaderHelper.java
index 1534013..cedd86c 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/list/StickyHeaderHelper.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/list/StickyHeaderHelper.java
@@ -21,6 +21,7 @@ package com.taobao.weex.ui.component.list;
import android.view.View;
import android.view.ViewGroup;
+import com.taobao.weex.WXEnvironment;
import com.taobao.weex.common.WXThread;
import com.taobao.weex.utils.WXLogUtils;
@@ -87,12 +88,20 @@ public class StickyHeaderHelper {
if ((existedParent = (ViewGroup) headerView.getParent()) != null) {
existedParent.removeView(headerView);
}
+ headerView.setTag(headComponent.getRef());
mParent.addView(headerView);
+ headerView.setTag(this);
+ if(headComponent.getStickyOffset() > 0) {
+ ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) headerView.getLayoutParams();
+ if(headComponent.getStickyOffset() != params.topMargin) {
+ params.topMargin = headComponent.getStickyOffset();
+ }
+ }
//recover translation, sometimes it will be changed on fling
headerView.setTranslationX(translationX);
headerView.setTranslationY(translationY);
-
}
+ changeFrontStickyVisible();
if (headComponent.getDomObject().getEvents().contains("sticky")) {
headComponent.fireEvent("sticky");
}
@@ -108,7 +117,8 @@ public class StickyHeaderHelper {
if(component == null || headerView == null){
- WXLogUtils.e(" sticky header to remove not found."+compToRemove.getRef());
+ if(WXEnvironment.isApkDebugable()) {
+ }
return;
}
if(mCurrentStickyRef != null && mCurrentStickyRef.equals(compToRemove.getRef())){
@@ -118,7 +128,12 @@ public class StickyHeaderHelper {
@Override
public void run() {
mParent.removeView(headerView);
+ if(headerView.getVisibility() != View.VISIBLE){
+ headerView.setVisibility(View.VISIBLE);
+ }
component.recoverySticky();
+ changeFrontStickyVisible();
+
}
}));
if (component.getDomObject().getEvents().contains("unsticky")) {
@@ -141,6 +156,7 @@ public class StickyHeaderHelper {
View view = mHeaderViews.get(cell.getRef());
if(view != null){
view.bringToFront();
+ changeFrontStickyVisible();
}
}
}
@@ -148,4 +164,27 @@ public class StickyHeaderHelper {
notifyStickyRemove(cell);
}
}
+
+
+ private void changeFrontStickyVisible(){
+ if(mHeaderViews.size() <= 0){
+ return;
+ }
+ boolean fontVisible = false;
+ for(int i=mParent.getChildCount()-1; i>=0; i--){
+ View view = mParent.getChildAt(i);
+ if(fontVisible && view.getTag() instanceof StickyHeaderHelper){
+ if(view.getVisibility() != View.GONE){
+ view.setVisibility(View.GONE);
+ }
+ }else{
+ if(view.getTag() instanceof StickyHeaderHelper){
+ fontVisible = true;
+ if(view != null && view.getVisibility() != View.VISIBLE){
+ view.setVisibility(View.VISIBLE);
+ }
+ }
+ }
+ }
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/37d62f99/android/sdk/src/main/java/com/taobao/weex/ui/component/list/WXCell.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/list/WXCell.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/list/WXCell.java
index c329e99..ebf81b4 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/list/WXCell.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/list/WXCell.java
@@ -37,6 +37,9 @@ import com.taobao.weex.ui.flat.WidgetContainer;
import com.taobao.weex.ui.view.WXFrameLayout;
import com.taobao.weex.utils.WXLogUtils;
import com.taobao.weex.utils.WXUtils;
+import com.taobao.weex.utils.WXViewUtils;
+
+import static com.taobao.weex.common.Constants.Name.STICKY_OFFSET;
/**
* Root component for components in {@link WXListComponent}
@@ -55,17 +58,14 @@ public class WXCell extends WidgetContainer<WXFrameLayout> {
private int mScrollPositon = -1;
private boolean mFlatUIEnabled = false;
+
private Object renderData;
private boolean isSourceUsed = false;
private boolean hasLayout = false;
- private Object renderData;
- private boolean isSourceUsed = false;
-
- private boolean hasLayout = false;
@Deprecated
@@ -149,28 +149,41 @@ public class WXCell extends WidgetContainer<WXFrameLayout> {
}
public void removeSticky() {
- mHeadView = getHostView().getChildAt(0);
- int[] location = new int[2];
- int[] parentLocation = new int[2];
- getHostView().getLocationOnScreen(location);
- getParentScroller().getView().getLocationOnScreen(parentLocation);
- int headerViewOffsetX = location[0] - parentLocation[0];
- int headerViewOffsetY = getParent().getHostView().getTop();
- getHostView().removeView(mHeadView);
- mRealView = (ViewGroup) mHeadView;
- mTempStickyView = new FrameLayout(getContext());
- FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams((int) getDomObject().getLayoutWidth(),
- (int) getDomObject().getLayoutHeight());
- getHostView().addView(mTempStickyView, lp);
- mHeadView.setTranslationX(headerViewOffsetX);
- mHeadView.setTranslationY(headerViewOffsetY);
+ if(getHostView().getChildCount() > 0) {
+ mHeadView = getHostView().getChildAt(0);
+ int[] location = new int[2];
+ int[] parentLocation = new int[2];
+ getHostView().getLocationOnScreen(location);
+ getParentScroller().getView().getLocationOnScreen(parentLocation);
+ int headerViewOffsetX = location[0] - parentLocation[0];
+ int headerViewOffsetY = getParent().getHostView().getTop();
+ getHostView().removeView(mHeadView);
+ mRealView = (ViewGroup) mHeadView;
+ mTempStickyView = new FrameLayout(getContext());
+ FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams((int) getDomObject().getLayoutWidth(),
+ (int) getDomObject().getLayoutHeight());
+ getHostView().addView(mTempStickyView, lp);
+ mHeadView.setTranslationX(headerViewOffsetX);
+ mHeadView.setTranslationY(headerViewOffsetY);
+ }
}
public void recoverySticky() {
- getHostView().removeView(mTempStickyView);
- getHostView().addView(mHeadView);
- mHeadView.setTranslationX(0);
- mHeadView.setTranslationY(0);
+ if(mHeadView != null){
+ if(mHeadView.getLayoutParams() != null){
+ ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) mHeadView.getLayoutParams();
+ if(params.topMargin > 0){
+ params.topMargin = 0;
+ }
+ }
+ if(mHeadView.getVisibility() != View.VISIBLE){
+ mHeadView.setVisibility(View.VISIBLE);
+ }
+ getHostView().removeView(mTempStickyView);
+ getHostView().addView(mHeadView);
+ mHeadView.setTranslationX(0);
+ mHeadView.setTranslationY(0);
+ }
}
@Override
@@ -192,28 +205,16 @@ public class WXCell extends WidgetContainer<WXFrameLayout> {
return getInstance().getFlatUIContext().isFlatUIEnabled(this) && WXCell.class.equals(getClass()) && !isSticky();
}
- public Object getRenderData() {
- return renderData;
- }
-
- public void setRenderData(Object renderData) {
- this.renderData = renderData;
- }
-
- public boolean isSourceUsed() {
- return isSourceUsed;
- }
-
- public void setSourceUsed(boolean sourceUsed) {
- isSourceUsed = sourceUsed;
- }
-
- public boolean isHasLayout() {
- return hasLayout;
- }
-
- public void setHasLayout(boolean hasLayout) {
- this.hasLayout = hasLayout;
+ public int getStickyOffset(){
+ if(getDomObject() == null){
+ return 0;
+ }
+ WXDomObject domObject = (WXDomObject) getDomObject();
+ if(domObject.getAttrs().get(STICKY_OFFSET) == null){
+ return 0;
+ }
+ float offset = WXUtils.getFloat(domObject.getAttrs().get(STICKY_OFFSET));
+ return (int)(WXViewUtils.getRealPxByWidth(offset,domObject.getViewPortWidth()));
}
public Object getRenderData() {
@@ -239,5 +240,4 @@ public class WXCell extends WidgetContainer<WXFrameLayout> {
public void setHasLayout(boolean hasLayout) {
this.hasLayout = hasLayout;
}
-
}
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/37d62f99/android/sdk/src/main/java/com/taobao/weex/ui/component/list/template/WXRecyclerTemplateList.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/list/template/WXRecyclerTemplateList.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/list/template/WXRecyclerTemplateList.java
index 7e0746b..1918517 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/list/template/WXRecyclerTemplateList.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/list/template/WXRecyclerTemplateList.java
@@ -1306,7 +1306,7 @@ public class WXRecyclerTemplateList extends WXVContainer<BounceRecyclerView> imp
continue;
}
TemplateViewHolder itemHolder = (TemplateViewHolder) recyclerView.findViewHolderForAdapterPosition(position);
- if(itemHolder == null){
+ if(itemHolder == null || itemHolder.getComponent() == null){
break;
}
List<WXComponent> childListeners = findChildListByRef(itemHolder.getComponent(), helper.getAwareChild().getRef());
[16/50] [abbrv] incubator-weex git commit: reduce unused code and
reuse hashmap
Posted by gu...@apache.org.
reduce unused code and reuse hashmap
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/d5c7253f
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/d5c7253f
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/d5c7253f
Branch: refs/heads/master
Commit: d5c7253f142df6520a4708202511924453921e64
Parents: 9c1f298
Author: jianbai.gbj <ji...@alibaba-inc.com>
Authored: Mon Oct 9 19:52:50 2017 +0800
Committer: gurisxie <27...@qq.com>
Committed: Tue Oct 10 12:02:29 2017 +0800
----------------------------------------------------------------------
android/sdk/src/main/java/com/taobao/weex/dom/WXDomObject.java | 6 +-----
.../sdk/src/main/java/com/taobao/weex/dom/WXTextDomObject.java | 2 +-
.../sdk/src/main/java/com/taobao/weex/dom/flex/CSSNode.java | 2 +-
.../main/java/com/taobao/weex/ui/component/WXComponent.java | 2 +-
.../java/com/taobao/weex/ui/component/binding/Statements.java | 1 +
5 files changed, 5 insertions(+), 8 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d5c7253f/android/sdk/src/main/java/com/taobao/weex/dom/WXDomObject.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/WXDomObject.java b/android/sdk/src/main/java/com/taobao/weex/dom/WXDomObject.java
index f990792..782b16c 100644
--- a/android/sdk/src/main/java/com/taobao/weex/dom/WXDomObject.java
+++ b/android/sdk/src/main/java/com/taobao/weex/dom/WXDomObject.java
@@ -138,9 +138,6 @@ public class WXDomObject extends CSSNode implements Cloneable,ImmutableDomObject
return mRef;
}
- public void setRef(String ref) {
- this.mRef = ref;
- }
public String getType(){
return mType;
@@ -169,7 +166,6 @@ public class WXDomObject extends CSSNode implements Cloneable,ImmutableDomObject
}
-
public @NonNull DomContext getDomContext() {
return mDomContext;
}
@@ -466,7 +462,7 @@ public class WXDomObject extends CSSNode implements Cloneable,ImmutableDomObject
super.dirty();
}
- /** package **/public void applyStyleToNode() {
+ /** package **/ void applyStyleToNode() {
WXStyle stylesMap = getStyles();
int vp = getViewPortWidth();
if (!stylesMap.isEmpty()) {
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d5c7253f/android/sdk/src/main/java/com/taobao/weex/dom/WXTextDomObject.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/WXTextDomObject.java b/android/sdk/src/main/java/com/taobao/weex/dom/WXTextDomObject.java
index 749afbd..e9a5c79 100644
--- a/android/sdk/src/main/java/com/taobao/weex/dom/WXTextDomObject.java
+++ b/android/sdk/src/main/java/com/taobao/weex/dom/WXTextDomObject.java
@@ -175,7 +175,7 @@ public class WXTextDomObject extends WXDomObject {
spanned = createSpanned(mText);
if(hasNewLayout()){
if(WXEnvironment.isApkDebugable()) {
- WXLogUtils.w("TextDom", new IllegalStateException("Previous csslayout was ignored! markLayoutSeen() never called"));
+ WXLogUtils.d("Previous csslayout was ignored! markLayoutSeen() never called");
}
markUpdateSeen();
}
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d5c7253f/android/sdk/src/main/java/com/taobao/weex/dom/flex/CSSNode.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/flex/CSSNode.java b/android/sdk/src/main/java/com/taobao/weex/dom/flex/CSSNode.java
index 79ba6e5..624c4c9 100755
--- a/android/sdk/src/main/java/com/taobao/weex/dom/flex/CSSNode.java
+++ b/android/sdk/src/main/java/com/taobao/weex/dom/flex/CSSNode.java
@@ -173,7 +173,7 @@ public class CSSNode {
return;
} else if (mLayoutState == LayoutState.HAS_NEW_LAYOUT) {
if(WXEnvironment.isApkDebugable()){
- WXLogUtils.w("weex", new IllegalStateException("Previous csslayout was ignored! markLayoutSeen() never called"));
+ WXLogUtils.d("Previous csslayout was ignored! markLayoutSeen() never called");
}
markLayoutSeen();
}
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d5c7253f/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 1d64d5d..d801290 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
@@ -337,7 +337,7 @@ public abstract class WXComponent<T extends View> implements IWXObject, IWXActi
long startNanos = System.nanoTime();
if(!isLazy()) {
if (component == null) {
- component = this;
+ component = this;
}
setLayout(component.getDomObject());
setPadding(component.getDomObject().getPadding(), component.getDomObject().getBorder());
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d5c7253f/android/sdk/src/main/java/com/taobao/weex/ui/component/binding/Statements.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/binding/Statements.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/binding/Statements.java
index 1af8934..548a1a0 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/binding/Statements.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/binding/Statements.java
@@ -392,6 +392,7 @@ public class Statements {
Map<String, Object> dynamic = dynamicLocal.get();
if(dynamic == null) {
dynamic = new HashMap<>();
+ dynamicLocal.set(dynamic);
}
if(dynamic.size() > 0){
dynamic.clear();
[44/50] [abbrv] incubator-weex git commit: * [all] merge master to
release-0.16, to fix conflict
Posted by gu...@apache.org.
* [all] merge master to release-0.16, to fix conflict
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/9a16f8ba
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/9a16f8ba
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/9a16f8ba
Branch: refs/heads/master
Commit: 9a16f8ba3d85c859126bf820acc8c251d0f7f517
Parents: e2a373f f5fbd4e
Author: gurisxie <27...@qq.com>
Authored: Tue Oct 17 16:25:06 2017 +0800
Committer: gurisxie <27...@qq.com>
Committed: Tue Oct 17 16:25:06 2017 +0800
----------------------------------------------------------------------
.github/PULL_REQUEST_TEMPLATE.md | 4 +--
CONTRIBUTING.md | 22 ++++++++--------
doc/source/cn/guide/contributing.md | 27 ++++++++++----------
doc/source/guide/contributing.md | 26 +++++++++----------
doc/source/references/platform-difference.md | 11 ++++++++
doc/source/references/platfrom-difference.md | 11 --------
.../references/vue/difference-with-web.md | 2 +-
doc/themes/weex/layout/_partial/article.ejs | 2 ++
doc/themes/weex/layout/index.ejs | 3 +++
doc/themes/weex/layout/layout.ejs | 2 --
doc/themes/weex/source/css/common.scss | 4 +--
doc/themes/weex/source/css/partial/header.scss | 2 +-
doc/themes/weex/source/css/post.scss | 7 ++---
doc/themes/weex/source/css/variable.scss | 2 +-
html5/runtime/vdom/Element.js | 2 +-
.../Sources/Component/WXCycleSliderComponent.m | 2 +-
.../Sources/Display/WXComponent+BoxShadow.m | 9 ++++++-
17 files changed, 75 insertions(+), 63 deletions(-)
----------------------------------------------------------------------
[32/50] [abbrv] incubator-weex git commit: * [android] format debug
log
Posted by gu...@apache.org.
* [android] format debug log
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/e5604834
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/e5604834
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/e5604834
Branch: refs/heads/master
Commit: e5604834adc1538a6a272f5d36d2db86bb323066
Parents: e803099
Author: yuhun-alibaba <to...@gmail.com>
Authored: Fri Oct 13 14:44:49 2017 +0800
Committer: gurisxie <27...@qq.com>
Committed: Mon Oct 16 14:08:05 2017 +0800
----------------------------------------------------------------------
android/sdk/libs/armeabi/libweexjsb.so | Bin 22616 -> 22556 bytes
android/sdk/libs/armeabi/libweexjsc.so | Bin 341824 -> 335100 bytes
android/sdk/libs/armeabi/libweexjss.so | Bin 6754016 -> 6754016 bytes
3 files changed, 0 insertions(+), 0 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/e5604834/android/sdk/libs/armeabi/libweexjsb.so
----------------------------------------------------------------------
diff --git a/android/sdk/libs/armeabi/libweexjsb.so b/android/sdk/libs/armeabi/libweexjsb.so
index 1330933..c46e857 100755
Binary files a/android/sdk/libs/armeabi/libweexjsb.so and b/android/sdk/libs/armeabi/libweexjsb.so differ
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/e5604834/android/sdk/libs/armeabi/libweexjsc.so
----------------------------------------------------------------------
diff --git a/android/sdk/libs/armeabi/libweexjsc.so b/android/sdk/libs/armeabi/libweexjsc.so
index 4e76388..ec98d07 100755
Binary files a/android/sdk/libs/armeabi/libweexjsc.so and b/android/sdk/libs/armeabi/libweexjsc.so differ
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/e5604834/android/sdk/libs/armeabi/libweexjss.so
----------------------------------------------------------------------
diff --git a/android/sdk/libs/armeabi/libweexjss.so b/android/sdk/libs/armeabi/libweexjss.so
index 544d41d..5a8809c 100755
Binary files a/android/sdk/libs/armeabi/libweexjss.so and b/android/sdk/libs/armeabi/libweexjss.so differ
[07/50] [abbrv] incubator-weex git commit: * [ios] bugfix scroll
event not valid
Posted by gu...@apache.org.
* [ios] bugfix scroll event not valid
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/767d4ece
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/767d4ece
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/767d4ece
Branch: refs/heads/master
Commit: 767d4eceb57f1145cff42726ee16234cfa1abbcb
Parents: cab09ce
Author: gurisxie <27...@qq.com>
Authored: Mon Oct 9 16:32:56 2017 +0800
Committer: gurisxie <27...@qq.com>
Committed: Mon Oct 9 16:32:56 2017 +0800
----------------------------------------------------------------------
ios/sdk/WeexSDK/Sources/Component/WXScrollerComponent.m | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/767d4ece/ios/sdk/WeexSDK/Sources/Component/WXScrollerComponent.m
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Component/WXScrollerComponent.m b/ios/sdk/WeexSDK/Sources/Component/WXScrollerComponent.m
index ae43cd6..88c934c 100644
--- a/ios/sdk/WeexSDK/Sources/Component/WXScrollerComponent.m
+++ b/ios/sdk/WeexSDK/Sources/Component/WXScrollerComponent.m
@@ -521,7 +521,7 @@ WX_EXPORT_METHOD(@selector(resetLoadmore))
distance = scrollView.contentOffset.y - _lastScrollEventFiredOffset.y;
}
if (fabs(distance) >= _offsetAccuracy) {
-// [self fireEvent:@"scroll" params:@{@"contentSize":contentSizeData,@"contentOffset":contentOffsetData} domChanges:nil];
+ [self fireEvent:@"scroll" params:@{@"contentSize":contentSizeData,@"contentOffset":contentOffsetData} domChanges:nil];
_lastScrollEventFiredOffset = scrollView.contentOffset;
}
}
[12/50] [abbrv] incubator-weex git commit: * [ios] add
WXScrollerComponentView and compatible iOS 11 new API
Posted by gu...@apache.org.
* [ios] add WXScrollerComponentView and compatible iOS 11 new API
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/35898590
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/35898590
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/35898590
Branch: refs/heads/master
Commit: 358985901ac778900b6eefbcf716e10244c0df22
Parents: 5e85cea
Author: acton393 <zh...@gmail.com>
Authored: Mon Oct 9 18:22:56 2017 +0800
Committer: gurisxie <27...@qq.com>
Committed: Mon Oct 9 19:53:06 2017 +0800
----------------------------------------------------------------------
.../WeexSDK/Sources/Component/WXScrollerComponent.m | 14 +++++++++++---
1 file changed, 11 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/35898590/ios/sdk/WeexSDK/Sources/Component/WXScrollerComponent.m
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Component/WXScrollerComponent.m b/ios/sdk/WeexSDK/Sources/Component/WXScrollerComponent.m
index 88c934c..bf8021f 100644
--- a/ios/sdk/WeexSDK/Sources/Component/WXScrollerComponent.m
+++ b/ios/sdk/WeexSDK/Sources/Component/WXScrollerComponent.m
@@ -26,7 +26,15 @@
#import "WXUtility.h"
#import "WXLoadingComponent.h"
#import "WXRefreshComponent.h"
-@interface UIScrollView(WeexUIScrollerView_ContentInsetAdjustmentBehavior)
+
+@interface WXScrollerComponnetView:UIScrollView
+@end
+
+@implementation WXScrollerComponnetView
+@end;
+
+// add a category compatible for new API
+@interface WXScrollerComponnetView(WXScrollerComponnetView_ContentInsetAdjustmentBehavior)
@property(nonatomic, assign)NSUInteger contentInsetAdjustmentBehavior;
@end
@@ -139,14 +147,14 @@ WX_EXPORT_METHOD(@selector(resetLoadmore))
- (UIView *)loadView
{
- return [[UIScrollView alloc] init];
+ return [[WXScrollerComponnetView alloc] init];
}
- (void)viewDidLoad
{
[super viewDidLoad];
[self setContentSize:_contentSize];
- UIScrollView* scrollView = (UIScrollView *)self.view;
+ WXScrollerComponnetView* scrollView = (WXScrollerComponnetView *)self.view;
scrollView.delegate = self;
scrollView.exclusiveTouch = YES;
scrollView.autoresizesSubviews = NO;
[45/50] [abbrv] incubator-weex git commit: * [android] fix WXLogUtils
Log Level
Posted by gu...@apache.org.
* [android] fix WXLogUtils Log Level
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/f3bfa02c
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/f3bfa02c
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/f3bfa02c
Branch: refs/heads/master
Commit: f3bfa02cdaf7043a6df031504cd324fc4d3cc7c8
Parents: 9a16f8b c9b5c45
Author: gurisxie <27...@qq.com>
Authored: Tue Oct 17 17:03:39 2017 +0800
Committer: gurisxie <27...@qq.com>
Committed: Tue Oct 17 17:03:39 2017 +0800
----------------------------------------------------------------------
.../main/java/com/taobao/weex/WXSDKEngine.java | 6 +
.../com/taobao/weex/bridge/WXBridgeManager.java | 993 +++++++++----------
.../java/com/taobao/weex/dom/WXDomObject.java | 4 +-
.../dom/action/AbstractAddElementAction.java | 4 +-
.../weex/ui/component/WXComponentFactory.java | 2 -
.../java/com/taobao/weex/utils/WXLogUtils.java | 24 +-
.../com/taobao/weex/utils/WXLogUtilsTest.java | 16 +-
7 files changed, 528 insertions(+), 521 deletions(-)
----------------------------------------------------------------------
[30/50] [abbrv] incubator-weex git commit: bug fix for list cell add
event has none affect when cell not init
Posted by gu...@apache.org.
bug fix for list cell add event has none affect when cell not init
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/e8030992
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/e8030992
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/e8030992
Branch: refs/heads/master
Commit: e80309921a4934ed43e50e4bdf4c5f68c7282e40
Parents: 05214a7
Author: jianbai.gbj <ji...@alibaba-inc.com>
Authored: Thu Oct 12 20:23:34 2017 +0800
Committer: gurisxie <27...@qq.com>
Committed: Mon Oct 16 14:04:13 2017 +0800
----------------------------------------------------------------------
.../src/main/java/com/taobao/weex/ui/component/WXComponent.java | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/e8030992/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 d801290..672f4aa 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
@@ -968,7 +968,9 @@ public abstract class WXComponent<T extends View> implements IWXObject, IWXActi
* @param type
*/
public void addEvent(String type) {
- if (TextUtils.isEmpty(type) || mAppendEvents.contains(type)) {
+ if (TextUtils.isEmpty(type)
+ || mAppendEvents.contains(type)
+ || getRealView() == null) {
return;
}
mAppendEvents.add(type);
[34/50] [abbrv] incubator-weex git commit: * [android] modify log
print
Posted by gu...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b5126471/android/sdk/src/main/java/com/taobao/weex/dom/WXDomObject.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/WXDomObject.java b/android/sdk/src/main/java/com/taobao/weex/dom/WXDomObject.java
index 782b16c..03f3057 100644
--- a/android/sdk/src/main/java/com/taobao/weex/dom/WXDomObject.java
+++ b/android/sdk/src/main/java/com/taobao/weex/dom/WXDomObject.java
@@ -335,9 +335,7 @@ public class WXDomObject extends CSSNode implements Cloneable,ImmutableDomObject
int index = mDomChildren.indexOf(child);
if (index == -1) {
- if (WXEnvironment.isApkDebugable()) {
WXLogUtils.e("[WXDomObject] remove function error");
- }
return;
}
mDomChildren.remove(index).parent = null;
@@ -685,7 +683,7 @@ public class WXDomObject extends CSSNode implements Cloneable,ImmutableDomObject
type = TextUtils.isEmpty(result.replacedComponent) ? WXBasicComponentType.DIV
: result.replacedComponent;
json.put(TYPE, type);
- if (WXEnvironment.isApkDebugable() && result.validateInfo != null) {
+ if (result.validateInfo != null) {
String tag = "[WXDomObject]onComponentValidate failure. >>> " + result.validateInfo.toJSONString();
WXLogUtils.e(tag);
}
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b5126471/android/sdk/src/main/java/com/taobao/weex/dom/action/AbstractAddElementAction.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/action/AbstractAddElementAction.java b/android/sdk/src/main/java/com/taobao/weex/dom/action/AbstractAddElementAction.java
index 9f35263..3fcedcb 100644
--- a/android/sdk/src/main/java/com/taobao/weex/dom/action/AbstractAddElementAction.java
+++ b/android/sdk/src/main/java/com/taobao/weex/dom/action/AbstractAddElementAction.java
@@ -96,9 +96,7 @@ public abstract class AbstractAddElementAction extends TraceableAction implement
Stopwatch.split("parseDomObject");
if (domObject == null || context.getDomByRef(domObject.getRef()) != null) {
- if (WXEnvironment.isApkDebugable()) {
- WXLogUtils.e("[DOMActionContextImpl] " + getStatementName() + " error,DOM object is null or already registered!!");
- }
+ WXLogUtils.e("[DOMActionContextImpl] " + getStatementName() + " error,DOM object is null or already registered!!");
instance.commitUTStab(IWXUserTrackAdapter.DOM_MODULE, errCode);
return;
}
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b5126471/android/sdk/src/main/java/com/taobao/weex/ui/component/WXComponentFactory.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXComponentFactory.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXComponentFactory.java
index 4323821..4f9712f 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXComponentFactory.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXComponentFactory.java
@@ -59,11 +59,9 @@ public class WXComponentFactory {
IFComponentHolder holder = WXComponentRegistry.getComponent(node.getType());
if (holder == null) {
- if (WXEnvironment.isApkDebugable()) {
String tag = "WXComponentFactory error type:[" +
node.getType() + "]" + " class not found";
WXLogUtils.e(tag);
- }
//For compatible reason of JS framework, unregistered type will be treated as container.
holder = WXComponentRegistry.getComponent(WXBasicComponentType.CONTAINER);
if(holder == null){
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b5126471/android/sdk/src/main/java/com/taobao/weex/utils/WXLogUtils.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/utils/WXLogUtils.java b/android/sdk/src/main/java/com/taobao/weex/utils/WXLogUtils.java
index 1f2b4b1..ae6e623 100644
--- a/android/sdk/src/main/java/com/taobao/weex/utils/WXLogUtils.java
+++ b/android/sdk/src/main/java/com/taobao/weex/utils/WXLogUtils.java
@@ -71,13 +71,17 @@ public class WXLogUtils {
}
private static void log(String tag, String msg, LogLevel level){
- if (WXEnvironment.isApkDebugable() && msg != null && WXEnvironment.sLogLevel.compare(level) >= 0) {
- Log.println(level.getPriority(),tag, msg);
- writeConsoleLog(level.getName(), msg);
- sendLog(level, msg);
- }
- if (sLogWatcher != null) {
- sLogWatcher.onLog(level.getName(), tag, msg);
+ if (msg != null && WXEnvironment.sLogLevel.compare(level) >= 0) {
+ if (sLogWatcher != null ) {
+ sLogWatcher.onLog(level.getName(), tag, msg);
+ }else{
+ Log.println(level.getPriority(),tag, msg);
+ }
+
+ if(WXEnvironment.isApkDebugable()){
+ writeConsoleLog(level.getName(), msg);
+ sendLog(level, msg);
+ }
}
}
@@ -214,15 +218,13 @@ public class WXLogUtils {
}
public static void w(String prefix, Throwable e) {
- if (WXEnvironment.isApkDebugable()) {
w(prefix + getStackTrace(e));
- }
+
}
public static void e(String prefix, Throwable e) {
- if (WXEnvironment.isApkDebugable()) {
e(prefix + getStackTrace(e));
- }
+
}
public static void wtf(String prefix, Throwable e){
[47/50] [abbrv] incubator-weex git commit: * [android] fix on android
4.0.* platform cannot startup multiprocess since on android 4.1 use
ANDROID_PIE to ensure safety on android api 15 or below use libweexjst.so to
startup new process
Posted by gu...@apache.org.
* [android] fix on android 4.0.* platform cannot startup multiprocess
since on android 4.1 use ANDROID_PIE to ensure safety
on android api 15 or below use libweexjst.so to startup new process
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/7fcfd9fd
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/7fcfd9fd
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/7fcfd9fd
Branch: refs/heads/master
Commit: 7fcfd9fdb5f07ec9510963d5426249fc6d06b769
Parents: 0ea259d
Author: yuhun-alibaba <to...@gmail.com>
Authored: Tue Oct 17 19:48:54 2017 +0800
Committer: gurisxie <27...@qq.com>
Committed: Tue Oct 17 22:09:45 2017 +0800
----------------------------------------------------------------------
android/sdk/libs/armeabi/libweexjsb.so | Bin 22556 -> 22620 bytes
android/sdk/libs/armeabi/libweexjsc.so | Bin 335100 -> 335324 bytes
android/sdk/libs/armeabi/libweexjss.so | Bin 6754016 -> 6754016 bytes
android/sdk/libs/armeabi/libweexjst.so | Bin 0 -> 22552 bytes
.../java/com/taobao/weex/bridge/WXBridge.java | 6 ++---
.../com/taobao/weex/bridge/WXBridgeManager.java | 16 +++++---------
.../java/com/taobao/weex/common/IWXBridge.java | 2 +-
.../taobao/weex/utils/WXSoInstallMgrSdk.java | 22 ++++++++++++++++---
.../taobao/weex/bridge/WXWebsocketBridge.java | 2 +-
9 files changed, 30 insertions(+), 18 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/7fcfd9fd/android/sdk/libs/armeabi/libweexjsb.so
----------------------------------------------------------------------
diff --git a/android/sdk/libs/armeabi/libweexjsb.so b/android/sdk/libs/armeabi/libweexjsb.so
index c46e857..cb739b4 100755
Binary files a/android/sdk/libs/armeabi/libweexjsb.so and b/android/sdk/libs/armeabi/libweexjsb.so differ
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/7fcfd9fd/android/sdk/libs/armeabi/libweexjsc.so
----------------------------------------------------------------------
diff --git a/android/sdk/libs/armeabi/libweexjsc.so b/android/sdk/libs/armeabi/libweexjsc.so
index ec98d07..7a9d85b 100755
Binary files a/android/sdk/libs/armeabi/libweexjsc.so and b/android/sdk/libs/armeabi/libweexjsc.so differ
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/7fcfd9fd/android/sdk/libs/armeabi/libweexjss.so
----------------------------------------------------------------------
diff --git a/android/sdk/libs/armeabi/libweexjss.so b/android/sdk/libs/armeabi/libweexjss.so
index 5a8809c..3efefa5 100755
Binary files a/android/sdk/libs/armeabi/libweexjss.so and b/android/sdk/libs/armeabi/libweexjss.so differ
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/7fcfd9fd/android/sdk/libs/armeabi/libweexjst.so
----------------------------------------------------------------------
diff --git a/android/sdk/libs/armeabi/libweexjst.so b/android/sdk/libs/armeabi/libweexjst.so
new file mode 100755
index 0000000..099256c
Binary files /dev/null and b/android/sdk/libs/armeabi/libweexjst.so differ
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/7fcfd9fd/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridge.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridge.java b/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridge.java
index b95c7a6..9586f2a 100644
--- a/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridge.java
+++ b/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridge.java
@@ -50,7 +50,7 @@ class WXBridge implements IWXBridge {
*
* @param framework assets/main.js
*/
- public native int initFramework(String framework, WXParams params, String cacheDir, boolean onSdcard);
+ public native int initFramework(String framework, WXParams params, String cacheDir, boolean pieSupport);
/**
@@ -78,9 +78,9 @@ class WXBridge implements IWXBridge {
public native void takeHeapSnapshot(String filename);
- public int initFrameworkEnv(String framework, WXParams params, String cacheDir, boolean onSdcard){
+ public int initFrameworkEnv(String framework, WXParams params, String cacheDir, boolean pieSupport){
if (MULTIPROCESS) {
- return initFramework(framework, params, cacheDir, onSdcard);
+ return initFramework(framework, params, cacheDir, pieSupport);
} else {
return initFramework(framework, params);
}
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/7fcfd9fd/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridgeManager.java
----------------------------------------------------------------------
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 c44d7af..96f47d9 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
@@ -21,6 +21,7 @@ package com.taobao.weex.bridge;
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
+import android.os.Build;
import android.os.Handler;
import android.os.Handler.Callback;
import android.os.Looper;
@@ -1571,27 +1572,22 @@ public class WXBridgeManager implements Callback, BactchExecutor {
long start = System.currentTimeMillis();
String crashFile = "";
- boolean installOnSdcard = false;
try {
crashFile = WXEnvironment.getApplication().getApplicationContext().getCacheDir().getPath();
} catch (Exception e) {
e.printStackTrace();
}
-
+ boolean pieSupport = true;
try {
- PackageManager pm = WXEnvironment.getApplication().getApplicationContext().getPackageManager();
- String pkgName = WXEnvironment.getApplication().getPackageName();
- ApplicationInfo appInfo = pm.getApplicationInfo(pkgName, 0);
- if ((appInfo.flags & ApplicationInfo.FLAG_EXTERNAL_STORAGE) != 0) {
- // App on sdcard
- installOnSdcard = true;
+ if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) {
+ pieSupport = false;
}
} catch (Exception e) {
e.printStackTrace();
}
-
+ WXLogUtils.d("[WXBridgeManager] initFrameworkEnv crashFile:" + crashFile + " pieSupport:" + pieSupport);
// extends initFramework
- if (mWXBridge.initFrameworkEnv(framework, assembleDefaultOptions(), crashFile, installOnSdcard) == INIT_FRAMEWORK_OK) {
+ if (mWXBridge.initFrameworkEnv(framework, assembleDefaultOptions(), crashFile, pieSupport) == INIT_FRAMEWORK_OK) {
WXEnvironment.sJSLibInitTime = System.currentTimeMillis() - start;
WXLogUtils.renderPerformanceLog("initFramework", WXEnvironment.sJSLibInitTime);
WXEnvironment.sSDKInitTime = System.currentTimeMillis() - WXEnvironment.sSDKInitStart;
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/7fcfd9fd/android/sdk/src/main/java/com/taobao/weex/common/IWXBridge.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/common/IWXBridge.java b/android/sdk/src/main/java/com/taobao/weex/common/IWXBridge.java
index 9e83dde..92b1585 100644
--- a/android/sdk/src/main/java/com/taobao/weex/common/IWXBridge.java
+++ b/android/sdk/src/main/java/com/taobao/weex/common/IWXBridge.java
@@ -45,7 +45,7 @@ public interface IWXBridge extends IWXObject {
* @param framework assets/main.js
* @return
*/
- int initFrameworkEnv(String framework, WXParams params, String cacheDir, boolean onSdcard);
+ int initFrameworkEnv(String framework, WXParams params, String cacheDir, boolean pieSupport);
/**
* execute javascript function
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/7fcfd9fd/android/sdk/src/main/java/com/taobao/weex/utils/WXSoInstallMgrSdk.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/utils/WXSoInstallMgrSdk.java b/android/sdk/src/main/java/com/taobao/weex/utils/WXSoInstallMgrSdk.java
index e402ee7..d202954 100644
--- a/android/sdk/src/main/java/com/taobao/weex/utils/WXSoInstallMgrSdk.java
+++ b/android/sdk/src/main/java/com/taobao/weex/utils/WXSoInstallMgrSdk.java
@@ -70,6 +70,7 @@ public class WXSoInstallMgrSdk {
private final static String X86 = "x86";
private final static String MIPS = "mips";
private final static String STARTUPSO = "/libweexjsb.so";
+ private final static String STARTUPSOANDROID15 = "/libweexjst.so";
private final static int ARMEABI_Size = 3583820;
private final static int X86_Size = 4340864;
@@ -192,20 +193,35 @@ public class WXSoInstallMgrSdk {
// }
// } catch (Throwable e) {
// }
+
if (installOnSdcard) {
String cacheFile = WXEnvironment.getApplication().getApplicationContext().getCacheDir().getPath();
- File newfile = new File(cacheFile + STARTUPSO);
+ // if android api < 16 copy libweexjst.so else copy libweexjsb.so
+ boolean pieSupport = true;
+ File newfile;
+ if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) {
+ pieSupport = false;
+ newfile = new File(cacheFile + STARTUPSOANDROID15);
+ } else {
+ newfile = new File(cacheFile + STARTUPSO);
+ }
if (newfile.exists()) {
return;
}
- String path = "/data/data/" + pkgName + "/lib";;
+ String path = "/data/data/" + pkgName + "/lib";
if (cacheFile != null && cacheFile.indexOf("/cache") > 0) {
path = cacheFile.replace("/cache", "/lib");
}
- String soName = path + STARTUPSO;
+ String soName;
+ if (pieSupport) {
+ soName = path + STARTUPSO;
+ } else {
+ soName = path + STARTUPSOANDROID15;
+ }
+
File oldfile = new File(soName);
if (oldfile.exists()) {
//获得原文件流
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/7fcfd9fd/android/weex_debug/src/main/java/com/taobao/weex/bridge/WXWebsocketBridge.java
----------------------------------------------------------------------
diff --git a/android/weex_debug/src/main/java/com/taobao/weex/bridge/WXWebsocketBridge.java b/android/weex_debug/src/main/java/com/taobao/weex/bridge/WXWebsocketBridge.java
index 5576de3..1343f60 100644
--- a/android/weex_debug/src/main/java/com/taobao/weex/bridge/WXWebsocketBridge.java
+++ b/android/weex_debug/src/main/java/com/taobao/weex/bridge/WXWebsocketBridge.java
@@ -204,7 +204,7 @@ public class WXWebsocketBridge implements IWXBridge,WXWebSocketManager.JSDebugge
}
@Override
- public int initFrameworkEnv(String scriptsFramework,WXParams params, String cacheDir, boolean onSdcard) {
+ public int initFrameworkEnv(String scriptsFramework,WXParams params, String cacheDir, boolean pieSupport) {
if (!mInit) {
return -1;
}
[10/50] [abbrv] incubator-weex git commit: fix scroll to bug and add
md5 for template
Posted by gu...@apache.org.
fix scroll to bug and add md5 for template
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/5e85cea9
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/5e85cea9
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/5e85cea9
Branch: refs/heads/master
Commit: 5e85cea995793180ff4cd0f3cd2d72f188ad75f7
Parents: b5b506f
Author: jianbai.gbj <ji...@alibaba-inc.com>
Authored: Mon Oct 9 19:19:33 2017 +0800
Committer: jianbai.gbj <ji...@alibaba-inc.com>
Committed: Mon Oct 9 19:19:33 2017 +0800
----------------------------------------------------------------------
.../com/taobao/weex/bridge/WXBridgeManager.java | 3 +-
.../ui/component/list/BasicListComponent.java | 29 +-------------------
.../java/com/taobao/weex/utils/WXFileUtils.java | 26 ++++++++++++++++++
.../com/taobao/weex/utils/WXFileUtilsTest.java | 8 ++++++
4 files changed, 37 insertions(+), 29 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5e85cea9/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridgeManager.java
----------------------------------------------------------------------
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 d1ea794..a949e3b 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
@@ -1431,7 +1431,8 @@ public class WXBridgeManager implements Callback,BactchExecutor {
} catch (Throwable e) {
instance.onRenderError(WXRenderErrorCode.WX_CREATE_INSTANCE_ERROR,
"createInstance failed!");
- String err = "[WXBridgeManager] invokeCreateInstance " + e.getCause();
+ String err = "[WXBridgeManager] invokeCreateInstance " + e.getCause()
+ + " template md5 " + WXFileUtils.md5(template) + " length " + (template == null ? 0 : template.length());
commitJSBridgeAlarmMonitor(instance.getInstanceId(), WXErrorCode.WX_ERR_INVOKE_NATIVE,err);
WXLogUtils.e(err);
}
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5e85cea9/android/sdk/src/main/java/com/taobao/weex/ui/component/list/BasicListComponent.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/list/BasicListComponent.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/list/BasicListComponent.java
index 296946a..9b8fe04 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/list/BasicListComponent.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/list/BasicListComponent.java
@@ -461,34 +461,7 @@ public abstract class BasicListComponent<T extends ViewGroup & ListComponentView
}
final WXRecyclerView view = bounceRecyclerView.getInnerView();
-
- if (!smooth) {
- RecyclerView.LayoutManager layoutManager = view.getLayoutManager();
- if (layoutManager instanceof LinearLayoutManager) {
- //GridLayoutManager is also instance of LinearLayoutManager
- ((LinearLayoutManager) layoutManager).scrollToPositionWithOffset(pos, -offset);
- } else if (layoutManager instanceof StaggeredGridLayoutManager) {
- ((StaggeredGridLayoutManager) layoutManager).scrollToPositionWithOffset(pos, -offset);
- }
- //Any else?
- } else {
- view.smoothScrollToPosition(pos);
- if (offset != 0) {
- view.addOnScrollListener(new RecyclerView.OnScrollListener() {
- @Override
- public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
- if (newState == RecyclerView.SCROLL_STATE_IDLE) {
- if (getOrientation() == Constants.Orientation.VERTICAL) {
- recyclerView.smoothScrollBy(0, offset);
- } else {
- recyclerView.smoothScrollBy(offset, 0);
- }
- recyclerView.removeOnScrollListener(this);
- }
- }
- });
- }
- }
+ view.scrollTo(smooth, pos, offset, getOrientation());
}
}
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5e85cea9/android/sdk/src/main/java/com/taobao/weex/utils/WXFileUtils.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/utils/WXFileUtils.java b/android/sdk/src/main/java/com/taobao/weex/utils/WXFileUtils.java
index 0083326..3921cfd 100644
--- a/android/sdk/src/main/java/com/taobao/weex/utils/WXFileUtils.java
+++ b/android/sdk/src/main/java/com/taobao/weex/utils/WXFileUtils.java
@@ -29,6 +29,10 @@ import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
+import java.io.UnsupportedEncodingException;
+import java.math.BigInteger;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
public class WXFileUtils {
@@ -130,4 +134,26 @@ public class WXFileUtils {
}
return false;
}
+
+ public static String md5(String template){
+ try {
+ if(template == null){
+ return "";
+ }
+ return md5(template.getBytes("UTF-8"));
+ } catch (UnsupportedEncodingException e) {
+ return "";
+ }
+ }
+
+ public static String md5(byte[] bts){
+ try {
+ MessageDigest digest = MessageDigest.getInstance("MD5");
+ digest.update(bts);
+ BigInteger bigInt = new BigInteger(1, digest.digest());
+ return bigInt.toString(16);
+ } catch (NoSuchAlgorithmException e) {;
+ return "";
+ }
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5e85cea9/android/sdk/src/test/java/com/taobao/weex/utils/WXFileUtilsTest.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/test/java/com/taobao/weex/utils/WXFileUtilsTest.java b/android/sdk/src/test/java/com/taobao/weex/utils/WXFileUtilsTest.java
index 64a0720..13d47a3 100644
--- a/android/sdk/src/test/java/com/taobao/weex/utils/WXFileUtilsTest.java
+++ b/android/sdk/src/test/java/com/taobao/weex/utils/WXFileUtilsTest.java
@@ -20,6 +20,8 @@ package com.taobao.weex.utils;
import com.taobao.weappplus_sdk.BuildConfig;
import java.io.File;
+
+import org.junit.Assert;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -62,4 +64,10 @@ public class WXFileUtilsTest {
public void testSaveFile() throws Exception {
WXFileUtils.saveFile("build/test","test".getBytes(),RuntimeEnvironment.application);
}
+
+
+ @Test
+ public void testMd5(){
+ Assert.assertEquals("77963b7a931377ad4ab5ad6a9cd718aa", WXFileUtils.md5("ddd"));
+ }
}
[49/50] [abbrv] incubator-weex git commit: fix clipPath not works on
android N 7.0
Posted by gu...@apache.org.
fix clipPath not works on android N 7.0
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/c2f1aac3
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/c2f1aac3
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/c2f1aac3
Branch: refs/heads/master
Commit: c2f1aac354c3640aa47942b8828883364eec14cd
Parents: 5957426
Author: 行久 <yi...@alibaba-inc.com>
Authored: Thu Oct 12 18:08:09 2017 +0800
Committer: gurisxie <27...@qq.com>
Committed: Wed Oct 18 12:07:46 2017 +0800
----------------------------------------------------------------------
.../java/com/taobao/weex/utils/WXViewUtils.java | 25 ++++++++++++++++----
1 file changed, 21 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/c2f1aac3/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 7d11d5a..4a1b304 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
@@ -378,7 +378,7 @@ public class WXViewUtils {
public static void clipCanvasWithinBorderBox(View targetView, Canvas canvas) {
Drawable drawable;
if (clipCanvasDueToAndroidVersion(canvas) &&
- clipCanvasIfAnimationExist() &&
+ clipCanvasIfAnimationExist(targetView) &&
((drawable = targetView.getBackground()) instanceof BorderDrawable)) {
BorderDrawable borderDrawable = (BorderDrawable) drawable;
if (borderDrawable.isRounded()) {
@@ -394,7 +394,7 @@ public class WXViewUtils {
public static void clipCanvasWithinBorderBox(Widget widget, Canvas canvas) {
BorderDrawable borderDrawable;
if (clipCanvasDueToAndroidVersion(canvas) &&
- clipCanvasIfAnimationExist() &&
+ clipCanvasIfAnimationExist(null) &&
(borderDrawable=widget.getBackgroundAndBorder())!=null ) {
if (borderDrawable.isRounded() && clipCanvasIfBackgroundImageExist(widget, borderDrawable)) {
Path path = borderDrawable.getContentPath(
@@ -424,8 +424,25 @@ public class WXViewUtils {
* As animation will not cause redraw if hardware-acceleration enabled, clipCanvas feature has
* to be disabled when API level is 24 without considering the animation property.
*/
- private static boolean clipCanvasIfAnimationExist() {
- return Build.VERSION.SDK_INT != VERSION_CODES.N;
+ private static boolean clipCanvasIfAnimationExist(View targetView) {
+ if (Build.VERSION.SDK_INT != VERSION_CODES.N) {
+ return true;
+ }
+ if(targetView != null &&
+ targetView.getScaleX() == 1 &&
+ targetView.getScaleY() == 1 &&
+ targetView.getTranslationX() == 0 &&
+ targetView.getTranslationY() == 0 &&
+ targetView.getRotation() == 0 &&
+ targetView.getRotationX() == 0 &&
+ targetView.getRotationY() == 0) {
+ if(Build.VERSION.SDK_INT >= VERSION_CODES.LOLLIPOP && targetView.getTranslationZ() != 0 ) {
+ return false;
+ } else {
+ return true;
+ }
+ }
+ return false;
}
/**
[25/50] [abbrv] incubator-weex git commit: * [ios] set default value
to nil when the configuration is empty
Posted by gu...@apache.org.
* [ios] set default value to nil when the configuration is empty
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/43762056
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/43762056
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/43762056
Branch: refs/heads/master
Commit: 4376205615fdcbd4fd9f118a02961e074eb057bf
Parents: 9833852
Author: acton393 <zh...@gmail.com>
Authored: Wed Oct 11 11:45:45 2017 +0800
Committer: acton393 <zh...@gmail.com>
Committed: Wed Oct 11 11:45:45 2017 +0800
----------------------------------------------------------------------
ios/sdk/WeexSDK/Sources/Component/WXScrollerComponent.m | 4 ++++
1 file changed, 4 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/43762056/ios/sdk/WeexSDK/Sources/Component/WXScrollerComponent.m
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Component/WXScrollerComponent.m b/ios/sdk/WeexSDK/Sources/Component/WXScrollerComponent.m
index b7a522a..fafc41d 100644
--- a/ios/sdk/WeexSDK/Sources/Component/WXScrollerComponent.m
+++ b/ios/sdk/WeexSDK/Sources/Component/WXScrollerComponent.m
@@ -122,9 +122,13 @@ WX_EXPORT_METHOD(@selector(resetLoadmore))
if (attributes[@"alwaysScrollableVertical"]) {
_alwaysScrollableVertical = [WXConvert NSString:attributes[@"alwaysScrollableVertical"]];
+ }else {
+ _alwaysScrollableVertical = nil;
}
if (attributes[@"alwaysScrollableHorizontal"]) {
_alwaysScrollableHorizontal = [WXConvert NSString:attributes[@"alwaysScrollableHorizontal"]];
+ } else {
+ _alwaysScrollableHorizontal = nil;
}
_pagingEnabled = attributes[@"pagingEnabled"] ? [WXConvert BOOL:attributes[@"pagingEnabled"]] : NO;
_loadMoreOffset = attributes[@"loadmoreoffset"] ? [WXConvert WXPixelType:attributes[@"loadmoreoffset"] scaleFactor:self.weexInstance.pixelScaleFactor] : 0;
[50/50] [abbrv] incubator-weex git commit: * [all] rebase commits
from release-0.16
Posted by gu...@apache.org.
* [all] rebase commits from release-0.16
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/556cc068
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/556cc068
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/556cc068
Branch: refs/heads/master
Commit: 556cc0683a5532d57b40277a9ea4048a408d92ef
Parents: b7383a4 c2f1aac
Author: gurisxie <27...@qq.com>
Authored: Wed Oct 18 12:11:41 2017 +0800
Committer: gurisxie <27...@qq.com>
Committed: Wed Oct 18 12:16:10 2017 +0800
----------------------------------------------------------------------
android/sdk/libs/armeabi/libweexjsb.so | Bin 22556 -> 22620 bytes
android/sdk/libs/armeabi/libweexjsc.so | Bin 335100 -> 335324 bytes
android/sdk/libs/armeabi/libweexjss.so | Bin 6754016 -> 6754016 bytes
android/sdk/libs/armeabi/libweexjst.so | Bin 0 -> 22552 bytes
.../main/java/com/taobao/weex/WXSDKEngine.java | 6 +
.../java/com/taobao/weex/bridge/WXBridge.java | 6 +-
.../com/taobao/weex/bridge/WXBridgeManager.java | 1005 +++++++++---------
.../java/com/taobao/weex/common/IWXBridge.java | 2 +-
.../java/com/taobao/weex/dom/WXDomObject.java | 4 +-
.../dom/action/AbstractAddElementAction.java | 4 +-
.../weex/ui/component/WXComponentFactory.java | 2 -
.../java/com/taobao/weex/utils/WXLogUtils.java | 24 +-
.../taobao/weex/utils/WXSoInstallMgrSdk.java | 25 +-
.../java/com/taobao/weex/utils/WXViewUtils.java | 25 +-
.../com/taobao/weex/utils/WXLogUtilsTest.java | 16 +-
.../taobao/weex/bridge/WXWebsocketBridge.java | 2 +-
dangerfile.js | 36 +-
test/screenshot/border-android.png | Bin 0 -> 164260 bytes
test/screenshot/border-ios.png | Bin 128088 -> 129071 bytes
19 files changed, 597 insertions(+), 560 deletions(-)
----------------------------------------------------------------------
[21/50] [abbrv] incubator-weex git commit: update so for app install
on sdcard
Posted by gu...@apache.org.
update so for app install on sdcard
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/dbc94f42
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/dbc94f42
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/dbc94f42
Branch: refs/heads/master
Commit: dbc94f421dfda8aeccea3791788a5079ff5bb923
Parents: 045e838
Author: yuhun-alibaba <to...@gmail.com>
Authored: Tue Oct 10 16:21:49 2017 +0800
Committer: yuhun-alibaba <to...@gmail.com>
Committed: Tue Oct 10 16:21:49 2017 +0800
----------------------------------------------------------------------
android/sdk/libs/armeabi/libweexjsb.so | Bin 22620 -> 22620 bytes
android/sdk/libs/armeabi/libweexjsc.so | Bin 338160 -> 342264 bytes
android/sdk/libs/armeabi/libweexjss.so | Bin 6754016 -> 6754016 bytes
3 files changed, 0 insertions(+), 0 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/dbc94f42/android/sdk/libs/armeabi/libweexjsb.so
----------------------------------------------------------------------
diff --git a/android/sdk/libs/armeabi/libweexjsb.so b/android/sdk/libs/armeabi/libweexjsb.so
index 4b13b06..cd36273 100755
Binary files a/android/sdk/libs/armeabi/libweexjsb.so and b/android/sdk/libs/armeabi/libweexjsb.so differ
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/dbc94f42/android/sdk/libs/armeabi/libweexjsc.so
----------------------------------------------------------------------
diff --git a/android/sdk/libs/armeabi/libweexjsc.so b/android/sdk/libs/armeabi/libweexjsc.so
index 12f6df2..36eae45 100755
Binary files a/android/sdk/libs/armeabi/libweexjsc.so and b/android/sdk/libs/armeabi/libweexjsc.so differ
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/dbc94f42/android/sdk/libs/armeabi/libweexjss.so
----------------------------------------------------------------------
diff --git a/android/sdk/libs/armeabi/libweexjss.so b/android/sdk/libs/armeabi/libweexjss.so
index 0187882..544d41d 100755
Binary files a/android/sdk/libs/armeabi/libweexjss.so and b/android/sdk/libs/armeabi/libweexjss.so differ
[43/50] [abbrv] incubator-weex git commit: * [test] valid protect for
danger file
Posted by gu...@apache.org.
* [test] valid protect for danger file
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/e2a373f7
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/e2a373f7
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/e2a373f7
Branch: refs/heads/master
Commit: e2a373f7ac9bdece27ba5b18072ecfc3b50e133a
Parents: 1c2369b
Author: gurisxie <27...@qq.com>
Authored: Tue Oct 17 16:05:43 2017 +0800
Committer: gurisxie <27...@qq.com>
Committed: Tue Oct 17 16:05:43 2017 +0800
----------------------------------------------------------------------
dangerfile.js | 36 ++++++++++++++++++++++--------------
1 file changed, 22 insertions(+), 14 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/e2a373f7/dangerfile.js
----------------------------------------------------------------------
diff --git a/dangerfile.js b/dangerfile.js
index 83a0ef1..23da68a 100644
--- a/dangerfile.js
+++ b/dangerfile.js
@@ -320,6 +320,7 @@ function findReviewer(resolve, reject) {
resolve()
return
}
+ console.log('result:'+result);
parseDeleteAndNormalLines(result.data, fileToDeletedLinesMap, fileToNormalLinesMap)
console.log('getContent')
var promises = danger.git.modified_files.map(function(file) {
@@ -374,22 +375,29 @@ function getContent(url) {
function parseDeleteAndNormalLines(diffData, fileToDeletedLinesMap, fileToNormalLinesMap) {
try {
- console.log('diffData:'+diffData)
+ console.log('parseDeleteAndNormalLines')
var diffs = parseDiff(diffData)
- diffs.forEach(diff => {
- fileToDeletedLinesMap[diff.from] = [];
- fileToNormalLinesMap[diff.from] = [];
- diff.chunks.forEach(chunk => {
- chunk.changes.forEach(change => {
- if (change.del) {
- fileToDeletedLinesMap[diff.from].push(change.ln)
- }
- if (change.normal) {
- fileToNormalLinesMap[diff.from].push(change.ln1)
- }
- })
+ console.log('diffs:'+diffs)
+ if(diffs&&diffs instanceof Array){
+ diffs.forEach(diff => {
+ fileToDeletedLinesMap[diff.from] = [];
+ fileToNormalLinesMap[diff.from] = [];
+ if(diff&&diff.chunks&&diff.chunks instanceof Array){
+ diff.chunks.forEach(chunk => {
+ if(chunk&&chunk.changes&&chunk.changes instanceof Array){
+ chunk.changes.forEach(change => {
+ if (change&&change.del) {
+ fileToDeletedLinesMap[diff.from].push(change.ln)
+ }
+ if (change&&change.normal) {
+ fileToNormalLinesMap[diff.from].push(change.ln1)
+ }
+ })
+ }
+ })
+ }
})
- })
+ }
} catch (error) {
console.log(error)
}
[23/50] [abbrv] incubator-weex git commit: update x86 so
Posted by gu...@apache.org.
update x86 so
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/3cf15bc0
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/3cf15bc0
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/3cf15bc0
Branch: refs/heads/master
Commit: 3cf15bc0d435d16d2647b66a29bf3088e90bf4db
Parents: 07bc5b0
Author: yuhun-alibaba <to...@gmail.com>
Authored: Tue Oct 10 18:17:43 2017 +0800
Committer: yuhun-alibaba <to...@gmail.com>
Committed: Tue Oct 10 18:17:43 2017 +0800
----------------------------------------------------------------------
android/sdk/libs/x86/libweexjsc.so | Bin 12121924 -> 12126020 bytes
1 file changed, 0 insertions(+), 0 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/3cf15bc0/android/sdk/libs/x86/libweexjsc.so
----------------------------------------------------------------------
diff --git a/android/sdk/libs/x86/libweexjsc.so b/android/sdk/libs/x86/libweexjsc.so
index ab27aa9..3698a49 100755
Binary files a/android/sdk/libs/x86/libweexjsc.so and b/android/sdk/libs/x86/libweexjsc.so differ
[14/50] [abbrv] incubator-weex git commit: * [test] bugfix for
unexpected error
Posted by gu...@apache.org.
* [test] bugfix for unexpected error
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/361f4b61
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/361f4b61
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/361f4b61
Branch: refs/heads/master
Commit: 361f4b6164824335300bd38c160a2fff9e3c854f
Parents: e9ea1b2
Author: gurisxie <27...@qq.com>
Authored: Tue Oct 10 10:13:59 2017 +0800
Committer: gurisxie <27...@qq.com>
Committed: Tue Oct 10 10:13:59 2017 +0800
----------------------------------------------------------------------
dangerfile.js | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/361f4b61/dangerfile.js
----------------------------------------------------------------------
diff --git a/dangerfile.js b/dangerfile.js
index 248276a..97c4146 100644
--- a/dangerfile.js
+++ b/dangerfile.js
@@ -418,7 +418,7 @@ function findBlameReviewers(fileToDeletedLinesMap, fileToNormalLinesMap, fileToB
}
deletedLines.forEach(lineNumber => {
var name = blames[lineNumber]
- if (!!reviewers) {
+ if (name && !!reviewers) {
reviewers[name] = (reviewers[name] || 0) + 3
}
})
@@ -433,7 +433,7 @@ function findBlameReviewers(fileToDeletedLinesMap, fileToNormalLinesMap, fileToB
}
normalLines.forEach(lineNumber => {
var name = blames[lineNumber]
- if (!!reviewers) {
+ if (name && !!reviewers) {
reviewers[name] = (reviewers[name] || 0) + 1
}
})
[05/50] [abbrv] incubator-weex git commit: Merge branch
'release-0.16' of https://git-wip-us.apache.org/repos/asf/incubator-weex into
release-0.16
Posted by gu...@apache.org.
Merge branch 'release-0.16' of https://git-wip-us.apache.org/repos/asf/incubator-weex into release-0.16
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/46226330
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/46226330
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/46226330
Branch: refs/heads/master
Commit: 46226330b3c644841e3bec923fbdabb597077121
Parents: 762f66b bb1dbef
Author: gurisxie <27...@qq.com>
Authored: Wed Oct 4 16:23:14 2017 +0800
Committer: gurisxie <27...@qq.com>
Committed: Wed Oct 4 16:23:14 2017 +0800
----------------------------------------------------------------------
----------------------------------------------------------------------
[06/50] [abbrv] incubator-weex git commit: Merge branch 'master' into
release-0.16
Posted by gu...@apache.org.
Merge branch 'master' into release-0.16
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/cab09cee
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/cab09cee
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/cab09cee
Branch: refs/heads/master
Commit: cab09ceef683df551d505f0442aadbe0591ee14b
Parents: 4622633 cbe3682
Author: gurisxie <27...@qq.com>
Authored: Wed Oct 4 16:59:51 2017 +0800
Committer: gurisxie <27...@qq.com>
Committed: Wed Oct 4 16:59:51 2017 +0800
----------------------------------------------------------------------
WeexSDK.podspec | 2 +-
.../Component/RecycleList/WXRecycleListComponent.m | 7 -------
.../Sources/Component/Recycler/WXRecyclerComponent.m | 7 -------
ios/sdk/WeexSDK/Sources/Component/WXListComponent.m | 7 -------
.../WeexSDK/Sources/Component/WXScrollerComponent.m | 15 +++++++--------
ios/sdk/WeexSDK/Sources/Utility/WXDefine.h | 2 +-
6 files changed, 9 insertions(+), 31 deletions(-)
----------------------------------------------------------------------
[33/50] [abbrv] incubator-weex git commit: * [test] check cn source
Posted by gu...@apache.org.
* [test] check cn source
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/8cebed47
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/8cebed47
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/8cebed47
Branch: refs/heads/master
Commit: 8cebed477f64148167770ebdd7bfd32aed24830c
Parents: 4330ad6
Author: gurisxie <27...@qq.com>
Authored: Mon Oct 16 15:02:26 2017 +0800
Committer: gurisxie <27...@qq.com>
Committed: Mon Oct 16 15:02:26 2017 +0800
----------------------------------------------------------------------
dangerfile.js | 8 ++++++++
1 file changed, 8 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/8cebed47/dangerfile.js
----------------------------------------------------------------------
diff --git a/dangerfile.js b/dangerfile.js
index 97c4146..bfa61fb 100644
--- a/dangerfile.js
+++ b/dangerfile.js
@@ -273,6 +273,14 @@ filesToVerifySrcHeader.forEach(filepath => {
return;
}
}
+
+ // check cn for source code
+ var reg = /[\u4e00-\u9FA5]+/;
+ var res = reg.test(content);
+ if(res){
+ fail("Code file "+ filepath +" has cn source code.");
+ return ;
+ }
});
[19/50] [abbrv] incubator-weex git commit: improve textdom and
refactor template cache and render function
Posted by gu...@apache.org.
improve textdom and refactor template cache and render function
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/6849d52f
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/6849d52f
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/6849d52f
Branch: refs/heads/master
Commit: 6849d52f5331ed9b16b94cd03c2bf927b28af213
Parents: 7cc450d
Author: jianbai.gbj <ji...@alibaba-inc.com>
Authored: Wed Sep 27 11:06:45 2017 +0800
Committer: gurisxie <27...@qq.com>
Committed: Tue Oct 10 12:02:29 2017 +0800
----------------------------------------------------------------------
.../taobao/weex/bridge/NativeInvokeHelper.java | 2 +-
.../main/java/com/taobao/weex/dom/WXAttr.java | 6 +
.../com/taobao/weex/dom/WXCellDomObject.java | 11 +
.../java/com/taobao/weex/dom/WXDomManager.java | 4 +
.../java/com/taobao/weex/dom/WXDomObject.java | 7 +-
.../taobao/weex/dom/WXRecyclerDomObject.java | 47 +-
.../com/taobao/weex/dom/WXTextDomObject.java | 31 +-
.../com/taobao/weex/dom/binding/ELUtils.java | 2 +
.../java/com/taobao/weex/dom/flex/CSSNode.java | 14 +-
.../taobao/weex/ui/component/WXComponent.java | 10 +-
.../weex/ui/component/binding/Layouts.java | 53 ++-
.../weex/ui/component/binding/Statements.java | 103 +++--
.../ui/component/list/BasicListComponent.java | 1 -
.../taobao/weex/ui/component/list/WXCell.java | 30 ++
.../list/template/CellLifecycleManager.java | 211 ---------
.../component/list/template/DomTreeBuilder.java | 83 ++++
.../component/list/template/TemplateCache.java | 30 ++
.../list/template/TemplateViewHolder.java | 2 +
.../list/template/WXRecyclerTemplateList.java | 443 ++++++++++++-------
.../ui/component/binding/StatementTest.java | 8 +-
20 files changed, 654 insertions(+), 444 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/6849d52f/android/sdk/src/main/java/com/taobao/weex/bridge/NativeInvokeHelper.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/bridge/NativeInvokeHelper.java b/android/sdk/src/main/java/com/taobao/weex/bridge/NativeInvokeHelper.java
index 98381b5..73255db 100644
--- a/android/sdk/src/main/java/com/taobao/weex/bridge/NativeInvokeHelper.java
+++ b/android/sdk/src/main/java/com/taobao/weex/bridge/NativeInvokeHelper.java
@@ -47,7 +47,7 @@ public final class NativeInvokeHelper {
try {
invoker.invoke(target, params);
} catch (Exception e) {
- throw new RuntimeException(e);
+ throw new RuntimeException(target + "Invoker " + invoker.toString() ,e);
}
}
}, 0);
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/6849d52f/android/sdk/src/main/java/com/taobao/weex/dom/WXAttr.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/WXAttr.java b/android/sdk/src/main/java/com/taobao/weex/dom/WXAttr.java
index c3b0399..b05d46d 100644
--- a/android/sdk/src/main/java/com/taobao/weex/dom/WXAttr.java
+++ b/android/sdk/src/main/java/com/taobao/weex/dom/WXAttr.java
@@ -19,6 +19,7 @@
package com.taobao.weex.dom;
import static com.taobao.weex.dom.binding.ELUtils.COMPONENT_PROPS;
+import static com.taobao.weex.dom.binding.ELUtils.EXCLUDES_BINDING;
import static java.lang.Boolean.parseBoolean;
import android.support.annotation.NonNull;
@@ -477,6 +478,11 @@ public class WXAttr implements Map<String, Object>,Cloneable {
ELUtils.bindingBlock(value);
return false;
}
+ for(String exclude : EXCLUDES_BINDING){
+ if(key.equals(exclude)){
+ return false;
+ }
+ }
if(ELUtils.isBinding(value)){
if(mBindingAttrs == null){
mBindingAttrs = new ArrayMap<String, Object>();
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/6849d52f/android/sdk/src/main/java/com/taobao/weex/dom/WXCellDomObject.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/WXCellDomObject.java b/android/sdk/src/main/java/com/taobao/weex/dom/WXCellDomObject.java
index 6d50ab6..649a09d 100644
--- a/android/sdk/src/main/java/com/taobao/weex/dom/WXCellDomObject.java
+++ b/android/sdk/src/main/java/com/taobao/weex/dom/WXCellDomObject.java
@@ -41,11 +41,22 @@ public class WXCellDomObject extends WXDomObject {
if (WXBasicComponentType.CELL.equals(domObject.getType())
|| WXBasicComponentType.CELL_SLOT.equals(domObject.getType())) {
float w = ((WXRecyclerDomObject) parent).getColumnWidth();
+ if(w <= 0 && parentDom.getColumnCount() <= 1){
+ w = parentDom.getAvailableWidth();
+ if(w <= 0){
+ w = parentDom.getLayoutWidth();
+ if(w <= 0){
+ w = parentDom.getViewPortWidth();
+ }
+ }
+ }
node.setLayoutWidth(w);
+ measureOutput.width = w;
} else if (WXBasicComponentType.HEADER.equals(domObject.getType())){
float w = parentDom.getAvailableWidth();
WXLogUtils.d("getAvailableWidth:"+w);
node.setLayoutWidth(w);
+ measureOutput.width = w;
}
}else if (node instanceof WXCellDomObject){
WXCellDomObject slotDomObject = (WXCellDomObject) node;
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/6849d52f/android/sdk/src/main/java/com/taobao/weex/dom/WXDomManager.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/WXDomManager.java b/android/sdk/src/main/java/com/taobao/weex/dom/WXDomManager.java
index 66fd56e..e1ed82f 100644
--- a/android/sdk/src/main/java/com/taobao/weex/dom/WXDomManager.java
+++ b/android/sdk/src/main/java/com/taobao/weex/dom/WXDomManager.java
@@ -178,6 +178,10 @@ public final class WXDomManager {
}
}
+ public DOMActionContext getDomContext(String instanceId){
+ return mDomRegistries.get(instanceId);
+ }
+
/**
* @param action
* @param createContext only true when create body
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/6849d52f/android/sdk/src/main/java/com/taobao/weex/dom/WXDomObject.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/WXDomObject.java b/android/sdk/src/main/java/com/taobao/weex/dom/WXDomObject.java
index 001545d..8398a2d 100644
--- a/android/sdk/src/main/java/com/taobao/weex/dom/WXDomObject.java
+++ b/android/sdk/src/main/java/com/taobao/weex/dom/WXDomObject.java
@@ -136,6 +136,10 @@ public class WXDomObject extends CSSNode implements Cloneable,ImmutableDomObject
return mRef;
}
+ public void setRef(String ref) {
+ this.mRef = ref;
+ }
+
public String getType(){
return mType;
}
@@ -301,6 +305,7 @@ public class WXDomObject extends CSSNode implements Cloneable,ImmutableDomObject
}
}
+
public boolean isFixed() {
return mStyles == null ? false : mStyles.isFixed();
}
@@ -459,7 +464,7 @@ public class WXDomObject extends CSSNode implements Cloneable,ImmutableDomObject
super.dirty();
}
- /** package **/ void applyStyleToNode() {
+ /** package **/public void applyStyleToNode() {
WXStyle stylesMap = getStyles();
int vp = getViewPortWidth();
if (!stylesMap.isEmpty()) {
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/6849d52f/android/sdk/src/main/java/com/taobao/weex/dom/WXRecyclerDomObject.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/WXRecyclerDomObject.java b/android/sdk/src/main/java/com/taobao/weex/dom/WXRecyclerDomObject.java
index 1ae3af2..11918e8 100644
--- a/android/sdk/src/main/java/com/taobao/weex/dom/WXRecyclerDomObject.java
+++ b/android/sdk/src/main/java/com/taobao/weex/dom/WXRecyclerDomObject.java
@@ -27,9 +27,11 @@ import com.taobao.weex.ui.component.WXBasicComponentType;
import com.taobao.weex.utils.WXLogUtils;
import com.taobao.weex.utils.WXViewUtils;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
import java.util.Map;
-import static com.taobao.weex.dom.flex.CSSLayout.DIMENSION_WIDTH;
/**
* Created by zhengshihan on 2017/2/21.
@@ -43,6 +45,10 @@ public class WXRecyclerDomObject extends WXDomObject{
private float mAvailableWidth = 0;
private boolean mIsPreCalculateCellWidth =false;
+ /**cell-slot not on the tree */
+ private List<WXCellDomObject> cellList;
+
+
public float getAvailableWidth() {
return WXViewUtils.getRealPxByWidth(mAvailableWidth,getViewPortWidth());
}
@@ -64,9 +70,18 @@ public class WXRecyclerDomObject extends WXDomObject{
}
@Override
public void add(WXDomObject child, int index) {
- super.add(child, index);
+ if(WXBasicComponentType.CELL_SLOT.equals(child.getType())
+ && child instanceof WXCellDomObject){
+ if(cellList == null){
+ cellList = Collections.synchronizedList(new ArrayList<WXCellDomObject>());
+ }
+ cellList.add((WXCellDomObject)child);
+ }else{
+ super.add(child, index);
+ }
- if (WXBasicComponentType.CELL.equals(child.getType())) {
+ if (WXBasicComponentType.CELL.equals(child.getType())
+ || WXBasicComponentType.CELL_SLOT.equals(child.getType())) {
if (!mIsPreCalculateCellWidth) {
preCalculateCellWidth();
}
@@ -77,6 +92,22 @@ public class WXRecyclerDomObject extends WXDomObject{
}
@Override
+ public void remove(WXDomObject child) {
+ if(cellList != null){
+ cellList.remove(child);
+ }
+ super.remove(child);
+ }
+
+ @Override
+ public void removeFromDom(WXDomObject child) {
+ if(cellList != null){
+ cellList.remove(child);
+ }
+ super.removeFromDom(child);
+ }
+
+ @Override
public float getStyleWidth() {
float width = getLayoutWidth();
if (Float.isNaN(width) || width <= 0){
@@ -192,4 +223,14 @@ public class WXRecyclerDomObject extends WXDomObject{
return Constants.Orientation.VERTICAL;
}
+ @Override
+ public WXDomObject clone() {
+ WXRecyclerDomObject domObject = (WXRecyclerDomObject) super.clone();
+ domObject.cellList = cellList;
+ return domObject;
+ }
+
+ public List<WXCellDomObject> getCellList() {
+ return cellList;
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/6849d52f/android/sdk/src/main/java/com/taobao/weex/dom/WXTextDomObject.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/WXTextDomObject.java b/android/sdk/src/main/java/com/taobao/weex/dom/WXTextDomObject.java
index 3456bde..bdcfd39 100644
--- a/android/sdk/src/main/java/com/taobao/weex/dom/WXTextDomObject.java
+++ b/android/sdk/src/main/java/com/taobao/weex/dom/WXTextDomObject.java
@@ -39,6 +39,8 @@ import android.text.TextUtils;
import android.text.style.AbsoluteSizeSpan;
import android.text.style.AlignmentSpan;
import android.text.style.ForegroundColorSpan;
+import android.util.Log;
+
import com.taobao.weex.WXEnvironment;
import com.taobao.weex.common.Constants;
import com.taobao.weex.common.WXThread;
@@ -98,9 +100,16 @@ public class WXTextDomObject extends WXDomObject {
if (CSSConstants.isUndefined(width)) {
width = node.cssstyle.maxWidth;
}
- if(textDomObject.getTextWidth(textDomObject.mTextPaint,width,false)>0) {
- textDomObject.layout = textDomObject.createLayout(width, false, null);
- textDomObject.hasBeenMeasured = true;
+ boolean forceWidth = false;
+ if(width > 0){
+ if(node.getParent() != null && textDomObject.mAlignment == Layout.Alignment.ALIGN_CENTER){
+ forceWidth = FloatUtil.floatsEqual(width, node.getParent().getLayoutWidth());
+ }
+ }
+ textDomObject.hasBeenMeasured = true;
+ width = textDomObject.getTextWidth(textDomObject.mTextPaint,width, forceWidth);
+ if(width > 0 && textDomObject.mText != null) {
+ textDomObject.layout = textDomObject.createLayout(width, true, null);
textDomObject.previousWidth = textDomObject.layout.getWidth();
measureOutput.height = textDomObject.layout.getHeight();
measureOutput.width = textDomObject.previousWidth;
@@ -186,7 +195,7 @@ public class WXTextDomObject extends WXDomObject {
hasBeenMeasured = false;
if (layout != null && !layout.equals(atomicReference.get()) &&
Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
- if(Thread.currentThread() instanceof WXThread){
+ if(Thread.currentThread() != Looper.getMainLooper().getThread()){
warmUpTextLayoutCache(layout);
}
}
@@ -241,8 +250,12 @@ public class WXTextDomObject extends WXDomObject {
float contentWidth = WXDomUtils.getContentWidth(this);
if (contentWidth > 0) {
spanned = createSpanned(mText);
- layout = createLayout(contentWidth, true, layout);
- previousWidth = layout.getWidth();
+ if(mText != null){
+ layout = createLayout(contentWidth, true, layout);
+ previousWidth = layout.getWidth();
+ }else{
+ previousWidth = 0;
+ }
}
}
@@ -394,6 +407,12 @@ public class WXTextDomObject extends WXDomObject {
* outerWidth in case of outerWidth is defined, in other case, it will be outer width.
*/
float getTextWidth(TextPaint textPaint,float outerWidth, boolean forceToDesired) {
+ if(mText == null){
+ if(forceToDesired){
+ return outerWidth;
+ }
+ return 0;
+ }
float textWidth;
if (forceToDesired) {
textWidth = outerWidth;
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/6849d52f/android/sdk/src/main/java/com/taobao/weex/dom/binding/ELUtils.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/binding/ELUtils.java b/android/sdk/src/main/java/com/taobao/weex/dom/binding/ELUtils.java
index c0924f0..8202a46 100644
--- a/android/sdk/src/main/java/com/taobao/weex/dom/binding/ELUtils.java
+++ b/android/sdk/src/main/java/com/taobao/weex/dom/binding/ELUtils.java
@@ -41,6 +41,8 @@ public class ELUtils {
public static final String COMPONENT_PROPS = "@componentProps";
+ public static final String[] EXCLUDES_BINDING = {"clickEventParams"};
+
/**
* @param value check object is binding expression
* */
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/6849d52f/android/sdk/src/main/java/com/taobao/weex/dom/flex/CSSNode.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/flex/CSSNode.java b/android/sdk/src/main/java/com/taobao/weex/dom/flex/CSSNode.java
index 3f55245..79ba6e5 100755
--- a/android/sdk/src/main/java/com/taobao/weex/dom/flex/CSSNode.java
+++ b/android/sdk/src/main/java/com/taobao/weex/dom/flex/CSSNode.java
@@ -9,6 +9,9 @@ package com.taobao.weex.dom.flex;
import android.support.annotation.NonNull;
+import com.taobao.weex.WXEnvironment;
+import com.taobao.weex.utils.WXLogUtils;
+
import java.util.ArrayList;
import static com.taobao.weex.dom.flex.CSSLayout.DIMENSION_HEIGHT;
@@ -54,6 +57,10 @@ public class CSSNode {
dirty();
}
+ public void markLayoutStateUpdated(){
+ this.mLayoutState = LayoutState.UP_TO_DATE;
+ }
+
/**
* whether layout changed when {@link #updateLastLayout(CSSLayout)} invoked last time.
* @return
@@ -165,12 +172,15 @@ public class CSSNode {
if (mLayoutState == LayoutState.DIRTY) {
return;
} else if (mLayoutState == LayoutState.HAS_NEW_LAYOUT) {
- throw new IllegalStateException("Previous csslayout was ignored! markLayoutSeen() never called");
+ if(WXEnvironment.isApkDebugable()){
+ WXLogUtils.w("weex", new IllegalStateException("Previous csslayout was ignored! markLayoutSeen() never called"));
+ }
+ markLayoutSeen();
}
mLayoutState = LayoutState.DIRTY;
- if (mParent != null) {
+ if (mParent != null && !mParent.isDirty()) {
mParent.dirty();
}
}
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/6849d52f/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 e9d7296..f735e4e 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
@@ -337,7 +337,7 @@ public abstract class WXComponent<T extends View> implements IWXObject, IWXActi
long startNanos = System.nanoTime();
if(!isLazy()) {
if (component == null) {
- component = this;
+ component = this;
}
setLayout(component.getDomObject());
setPadding(component.getDomObject().getPadding(), component.getDomObject().getBorder());
@@ -1408,6 +1408,14 @@ public abstract class WXComponent<T extends View> implements IWXObject, IWXActi
view.setVisibility(View.GONE);
}
}
+ if(mDomObj != null){
+ WXDomObject domObject = (WXDomObject) mDomObj;
+ if (TextUtils.equals(visibility, Constants.Value.VISIBLE)) {
+ domObject.setVisible(true);
+ } else if (TextUtils.equals(visibility, Constants.Value.HIDDEN)) {
+ domObject.setVisible(false);
+ }
+ }
}
/**
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/6849d52f/android/sdk/src/main/java/com/taobao/weex/ui/component/binding/Layouts.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/binding/Layouts.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/binding/Layouts.java
index 5b8d32c..1e48ea7 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/binding/Layouts.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/binding/Layouts.java
@@ -28,9 +28,11 @@ import com.taobao.weex.WXSDKInstance;
import com.taobao.weex.common.Constants;
import com.taobao.weex.dom.WXDomObject;
import com.taobao.weex.dom.flex.CSSLayoutContext;
+import com.taobao.weex.dom.flex.CSSNode;
import com.taobao.weex.ui.component.WXComponent;
import com.taobao.weex.ui.component.WXVContainer;
import com.taobao.weex.ui.component.list.template.TemplateViewHolder;
+import com.taobao.weex.ui.component.list.template.WXRecyclerTemplateList;
import com.taobao.weex.utils.WXLogUtils;
/**
@@ -41,35 +43,41 @@ public class Layouts {
* do dom layout async or sync , and set layout to component on main.
* on first use do sync layout, when compontnet reuse do async layout
* */
- public static void doLayoutAsync(final TemplateViewHolder templateViewHolder){
+ public static void doLayoutAsync(final TemplateViewHolder templateViewHolder, boolean async){
final WXComponent component = templateViewHolder.getComponent();
final int position = templateViewHolder.getHolderPosition();
if(templateViewHolder.asyncTask != null){
- templateViewHolder.asyncTask.cancel(true);
+ templateViewHolder.asyncTask.cancel(false);
templateViewHolder.asyncTask = null;
}
- AsyncTask<Void, Void, Void> asyncTask = new AsyncTask<Void, Void, Void>() {
- @Override
- protected Void doInBackground(Void... params) {
- if(templateViewHolder.getHolderPosition() == position){
- if(component.getInstance() != null && !component.getInstance().isDestroy()) {
- doSafeLayout(component, templateViewHolder.getLayoutContext());
+ if(async){
+ AsyncTask<Void, Void, Void> asyncTask = new AsyncTask<Void, Void, Void>() {
+ @Override
+ protected Void doInBackground(Void... params) {
+ if(templateViewHolder.getHolderPosition() == position){
+ if(component.getInstance() != null && !component.getInstance().isDestroy()) {
+ doSafeLayout(component, templateViewHolder.getLayoutContext());
+ }
}
+ return null;
}
- return null;
- }
- @Override
- protected void onPostExecute(Void aVoid) {
- if(position == templateViewHolder.getHolderPosition()) {
- if(component.getInstance() != null && !component.getInstance().isDestroy()) {
- setLayout(component, false);
+ @Override
+ protected void onPostExecute(Void aVoid) {
+ if(position == templateViewHolder.getHolderPosition()) {
+ if(component.getInstance() != null && !component.getInstance().isDestroy()) {
+ setLayout(component, false);
+ }
}
}
- }
- };
- templateViewHolder.asyncTask = asyncTask;
- asyncTask.executeOnExecutor(AsyncTask.SERIAL_EXECUTOR); //serial executor is better
+ };
+ templateViewHolder.asyncTask = asyncTask;
+ asyncTask.executeOnExecutor(AsyncTask.SERIAL_EXECUTOR); //serial executor is better
+ }else{
+ doSafeLayout(component, templateViewHolder.getLayoutContext());
+ Log.e("weex", "weex" + component.getLayoutHeight() + " " + component.getLayoutWidth());
+ setLayout(component, false);
+ }
}
@@ -81,13 +89,13 @@ public class Layouts {
long start = System.currentTimeMillis();
doLayout(component, layoutContext);
if(WXEnvironment.isApkDebugable()){
- WXLogUtils.d("WXTemplateList",
+ WXLogUtils.d(WXRecyclerTemplateList.TAG, "WXTemplateList doSafeLayout" +
component.getDomObject().getAttrs().get(Constants.Name.Recycler.SLOT_TEMPLATE_TYPE) + Thread.currentThread().getName() + " doSafeLayout used " +
(System.currentTimeMillis() - start));
}
}catch (Exception e){
if(WXEnvironment.isApkDebugable()){
- WXLogUtils.e("WXTemplateListdoSafeLayout", e);
+ WXLogUtils.e(WXRecyclerTemplateList.TAG, e);
}
}
}
@@ -135,6 +143,9 @@ public class Layouts {
WXDomObject domObject = (WXDomObject) component.getDomObject();
if(domObject.hasUpdate() || force){
domObject.markUpdateSeen();
+ if(domObject.hasUpdate()){
+ domObject.markLayoutStateUpdated();
+ }
component.setLayout(component.getDomObject());
if(component.getDomObject().getExtra() != null){
component.updateExtra(component.getDomObject().getExtra());
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/6849d52f/android/sdk/src/main/java/com/taobao/weex/ui/component/binding/Statements.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/binding/Statements.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/binding/Statements.java
index 6912335..1af8934 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/binding/Statements.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/binding/Statements.java
@@ -25,6 +25,8 @@ import android.util.Log;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
+import com.taobao.weex.WXEnvironment;
+import com.taobao.weex.annotation.Component;
import com.taobao.weex.common.Constants;
import com.taobao.weex.dom.WXAttr;
import com.taobao.weex.dom.WXDomObject;
@@ -39,6 +41,8 @@ import com.taobao.weex.ui.component.WXComponent;
import com.taobao.weex.ui.component.WXComponentFactory;
import com.taobao.weex.ui.component.WXImage;
import com.taobao.weex.ui.component.WXVContainer;
+import com.taobao.weex.ui.component.list.WXCell;
+import com.taobao.weex.ui.component.list.template.WXRecyclerTemplateList;
import com.taobao.weex.utils.WXLogUtils;
import com.taobao.weex.utils.WXUtils;
@@ -59,7 +63,11 @@ public class Statements {
* recursive copy component, none parent connect
* */
public static WXComponent copyComponentTree(WXComponent component){
+ long start = System.currentTimeMillis();
WXComponent copy = copyComponentTree(component, component.getParent());
+ if(WXEnvironment.isApkDebugable()){
+ WXLogUtils.d(WXRecyclerTemplateList.TAG, Thread.currentThread() + component.getRef() + "copyComponentTree " + "used " + (System.currentTimeMillis() - start));
+ }
return copy;
}
@@ -96,26 +104,47 @@ public class Statements {
* may be next render it can be used.
* after statement has executed, render component's binding attrs in context and bind it to component.
* */
- public static final void doRender(WXComponent component, ArrayStack stack){
+ public static final List<WXComponent> doRender(WXComponent component, ArrayStack stack){
+ List<WXComponent> updates = new ArrayList<>(4);
try{
- doRenderComponent(component, stack);
+ doRenderComponent(component, stack, updates);
}catch (Exception e){
WXLogUtils.e("WeexStatementRender", e);
}
+ return updates;
}
+ public static final void doInitCompontent(List<WXComponent> updates) {
+ if(updates == null || updates.size() == 0){
+ return;
+ }
+ for(WXComponent renderNode : updates){
+ if(renderNode.getParent() == null){
+ throw new IllegalArgumentException("render node parent cann't find");
+ }
+ WXVContainer parent = renderNode.getParent();
+ int renderIndex = parent.indexOf(renderNode);
+ if(renderIndex < 0){
+ throw new IllegalArgumentException("render node cann't find");
+ }
+ parent.createChildViewAt(renderIndex);
+ renderNode.applyLayoutAndEvent(renderNode);
+ renderNode.bindData(renderNode);
+ }
+ }
- /**
- * @param component component with v-for statement, v-if statement and bind attrs
- * @param context execute context
- * render component in context, the function do the following work.
- * execute component's v-for statement, v-if statement in context,
- * and rebuild component's tree with the statement, v-for reuse component execute by pre render.
- * if executed, component will be removed, don't remove, just mark it waste;
- * may be next render it can be used.
- * after statement has executed, render component's binding attrs in context and bind it to component.
- * */
- static final int doRenderComponent(WXComponent component, ArrayStack context){
+ /**
+ * @param component component with v-for statement, v-if statement and bind attrs
+ * @param context execute context
+ * render component in context, the function do the following work.
+ * execute component's v-for statement, v-if statement in context,
+ * and rebuild component's tree with the statement, v-for reuse component execute by pre render.
+ * if executed, component will be removed, don't remove, just mark it waste;
+ * may be next render it can be used.
+ * after statement has executed, render component's binding attrs in context and bind it to component.
+ * */
+ private static final int doRenderComponent(WXComponent component, ArrayStack context,
+ List<WXComponent> updates){
WXVContainer parent = component.getParent();
WXDomObject domObject = (WXDomObject) component.getDomObject();
WXAttr attrs = domObject.getAttrs();
@@ -198,18 +227,18 @@ public class Statements {
}
//none resuable render node, create node, add to parent, but clear node's statement
if(renderNode == null){
+ long start = System.currentTimeMillis();
renderNode = copyComponentTree(component, parent);
WXDomObject renderNodeDomObject = (WXDomObject) renderNode.getDomObject();
renderNodeDomObject.getAttrs().setStatement(null); // clear node's statement
parentDomObject.add(renderNodeDomObject, renderIndex);
parent.addChild(renderNode, renderIndex);
- if(Thread.currentThread() == Looper.getMainLooper().getThread()) {
- parent.createChildViewAt(renderIndex);
- renderNode.applyLayoutAndEvent(renderNode);
- renderNode.bindData(renderNode);
+ updates.add(renderNode);
+ if(WXEnvironment.isApkDebugable()){
+ WXLogUtils.d(WXRecyclerTemplateList.TAG, Thread.currentThread().getName() + renderNode.getRef() + renderNode.getDomObject().getType() + "statements copy component tree used " + (System.currentTimeMillis() - start));
}
}
- doBindingAttrsEventAndRenderChildNode(renderNode, domObject, context);
+ doBindingAttrsEventAndRenderChildNode(renderNode, domObject, context, updates);
renderIndex++;
if(loop.size() > 0){
context.push(loop);
@@ -220,7 +249,7 @@ public class Statements {
}
}
}else{
- WXLogUtils.e("StatementsVFor", vfor.toJSONString() + " not call vfor block, for pre compile");
+ WXLogUtils.e(WXRecyclerTemplateList.TAG, vfor.toJSONString() + " not call vfor block, for pre compile");
}
//after v-for execute, remove component created pre v-for.
for(;renderIndex<parent.getChildCount(); renderIndex++){
@@ -237,20 +266,23 @@ public class Statements {
if(vif != null){
if(!Operators.isTrue(vif.execute(context))){
component.setWaste(true);
- return 1;
+ if(Thread.currentThread() == Looper.getMainLooper().getThread()) {
+ return 1;
+ }
}else{
component.setWaste(false);
}
}
}
- doBindingAttrsEventAndRenderChildNode(component, domObject, context);
+ doBindingAttrsEventAndRenderChildNode(component, domObject, context, updates);
return 1;
}
/**
* bind attrs and doRender component child
* */
- private static void doBindingAttrsEventAndRenderChildNode(WXComponent component, WXDomObject domObject, ArrayStack context){
+ private static void doBindingAttrsEventAndRenderChildNode(WXComponent component, WXDomObject domObject, ArrayStack context,
+ List<WXComponent> updates){
WXAttr attr = component.getDomObject().getAttrs();
/**
* sub component supported, sub component new stack
@@ -266,10 +298,17 @@ public class Statements {
}
doRenderBindingAttrsAndEvent(component, domObject, context);
if(component instanceof WXVContainer){
+ if(!domObject.isShow()){
+ if(!(component instanceof WXCell)){
+ if(Thread.currentThread() == Looper.getMainLooper().getThread()){
+ return;
+ }
+ }
+ }
WXVContainer container = (WXVContainer) component;
for(int k=0; k<container.getChildCount();){
WXComponent next = container.getChild(k);
- k += doRenderComponent(next, context);
+ k += doRenderComponent(next, context, updates);
}
}
}
@@ -325,6 +364,7 @@ public class Statements {
if(Thread.currentThread() == Looper.getMainLooper().getThread()) {
component.updateProperties(dynamic);
}
+ dynamic.clear();
}
}
WXEvent event = domObject.getEvents();
@@ -346,9 +386,16 @@ public class Statements {
* @param context context
* return binding attrs rended value in context
* */
+ private static final ThreadLocal<Map<String, Object>> dynamicLocal = new ThreadLocal<>();
public static Map<String, Object> renderBindingAttrs(ArrayMap bindAttrs, ArrayStack context){
Set<Map.Entry<String, Object>> entrySet = bindAttrs.entrySet();
- Map<String, Object> dynamic = new HashMap<>();
+ Map<String, Object> dynamic = dynamicLocal.get();
+ if(dynamic == null) {
+ dynamic = new HashMap<>();
+ }
+ if(dynamic.size() > 0){
+ dynamic.clear();
+ }
for(Map.Entry<String, Object> entry : entrySet){
Object value = entry.getValue();
String key = entry.getKey();
@@ -378,7 +425,13 @@ public class Statements {
builder.append(blockValue);
}
}
- dynamic.put(key, builder.toString());
+ String builderString = builder.toString();
+ if(builderString.length() > 256){
+ if(WXEnvironment.isApkDebugable()){
+ WXLogUtils.w(WXRecyclerTemplateList.TAG, " warn too big string " + builderString);
+ }
+ }
+ dynamic.put(key, builderString);
}
}
return dynamic;
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/6849d52f/android/sdk/src/main/java/com/taobao/weex/ui/component/list/BasicListComponent.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/list/BasicListComponent.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/list/BasicListComponent.java
index 9b8fe04..640a17e 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/list/BasicListComponent.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/list/BasicListComponent.java
@@ -459,7 +459,6 @@ public abstract class BasicListComponent<T extends ViewGroup & ListComponentView
//Invalid position
return;
}
-
final WXRecyclerView view = bounceRecyclerView.getInnerView();
view.scrollTo(smooth, pos, offset, getOrientation());
}
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/6849d52f/android/sdk/src/main/java/com/taobao/weex/ui/component/list/WXCell.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/list/WXCell.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/list/WXCell.java
index 401b654..4fe4bc2 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/list/WXCell.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/list/WXCell.java
@@ -55,6 +55,12 @@ public class WXCell extends WidgetContainer<WXFrameLayout> {
private int mScrollPositon = -1;
private boolean mFlatUIEnabled = false;
+ private Object renderData;
+
+ private boolean isSourceUsed = false;
+
+ private boolean hasLayout = false;
+
@Deprecated
public WXCell(WXSDKInstance instance, WXDomObject dom, WXVContainer parent, String instanceId, boolean isLazy) {
super(instance, dom, parent);
@@ -178,4 +184,28 @@ public class WXCell extends WidgetContainer<WXFrameLayout> {
public boolean intendToBeFlatContainer() {
return getInstance().getFlatUIContext().isFlatUIEnabled(this) && WXCell.class.equals(getClass()) && !isSticky();
}
+
+ public Object getRenderData() {
+ return renderData;
+ }
+
+ public void setRenderData(Object renderData) {
+ this.renderData = renderData;
+ }
+
+ public boolean isSourceUsed() {
+ return isSourceUsed;
+ }
+
+ public void setSourceUsed(boolean sourceUsed) {
+ isSourceUsed = sourceUsed;
+ }
+
+ public boolean isHasLayout() {
+ return hasLayout;
+ }
+
+ public void setHasLayout(boolean hasLayout) {
+ this.hasLayout = hasLayout;
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/6849d52f/android/sdk/src/main/java/com/taobao/weex/ui/component/list/template/CellLifecycleManager.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/list/template/CellLifecycleManager.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/list/template/CellLifecycleManager.java
deleted file mode 100644
index d30963d..0000000
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/list/template/CellLifecycleManager.java
+++ /dev/null
@@ -1,211 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * 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
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package com.taobao.weex.ui.component.list.template;
-
-import com.taobao.weex.common.Constants;
-import com.taobao.weex.dom.WXEvent;
-import com.taobao.weex.ui.component.WXComponent;
-import com.taobao.weex.ui.component.WXVContainer;
-import com.taobao.weex.ui.component.list.WXCell;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * cell-slot lifecycle manager, onCreate onAttach onDetach destroy
- * Created by furture on 2017/9/19.
- */
-public class CellLifecycleManager {
-
- private static final String[] lifecycleEventNames = {
- Constants.Event.SLOT_LIFECYCLE.CREATE,
- Constants.Event.SLOT_LIFECYCLE.ATTACH,
- Constants.Event.SLOT_LIFECYCLE.DETACH,
- Constants.Event.SLOT_LIFECYCLE.DESTORY
- };
-
- private WXRecyclerTemplateList recyclerTemplateList;
- private Map<String,Map<String,List<String>>> eventSlotWatchRefs;
-
-
- private Map<Integer,Boolean> firedCreateEvent; // only call once
-
-
- public CellLifecycleManager(WXRecyclerTemplateList recyclerTemplateList) {
- this.recyclerTemplateList = recyclerTemplateList;
- this.eventSlotWatchRefs = new HashMap<>();
- this.firedCreateEvent = new HashMap<>();
- }
-
-
-
- public void filterLifecycleWatchEvent(WXCell cell, WXComponent component){
- WXEvent wxEvent = component.getDomObject().getEvents();
- for(String event : lifecycleEventNames){
- if(wxEvent.contains(event)){
- Map<String,List<String>> slotWatchRefs = eventSlotWatchRefs.get(event);
- if(slotWatchRefs == null){
- slotWatchRefs = new HashMap<>();
- eventSlotWatchRefs.put(event, slotWatchRefs);
- }
- List<String> refs = slotWatchRefs.get(cell.getRef());
- if(refs == null){
- refs = new ArrayList<>(8);
- slotWatchRefs.put(cell.getRef(), refs);
- }
- if(!refs.contains(component.getRef())){
- refs.add(component.getRef());
- }
- }
- }
- if(component instanceof WXVContainer){
- WXVContainer container = (WXVContainer) component;
- for(int i=0; i<container.getChildCount(); i++){
- WXComponent child = container.getChild(i);
- filterLifecycleWatchEvent(cell, child);
- }
- }
- }
-
- /**
- * onCreate event
- * */
- public void onCreate(int position){
- WXCell cell = recyclerTemplateList.getSourceTemplate(position);
- if(cell == null){
- return;
- }
- if(firedCreateEvent.get(position) != null){
- return;
- }
- firedCreateEvent.put(position, true);
- Map<String,List<String>> slotWatchCreateRefs = eventSlotWatchRefs.get(Constants.Event.SLOT_LIFECYCLE.CREATE);
- if(slotWatchCreateRefs == null
- || slotWatchCreateRefs.get(cell.getRef()) == null
- || slotWatchCreateRefs.get(cell.getRef()).size() == 0){
- return;
- }
- List<String> refs = slotWatchCreateRefs.get(cell.getRef());
- if(refs == null || refs.size() == 0){
- return;
- }
- fireChildEvent(Constants.Event.SLOT_LIFECYCLE.CREATE, cell, refs, position);
- }
-
- public void onInsert(int position){
- WXCell cell = recyclerTemplateList.getSourceTemplate(position);
- if(cell == null){
- return;
- }
- firedCreateEvent.put(position, true);
- firedCreateEvent.put(firedCreateEvent.size(), true);
- Map<String,List<String>> slotWatchCreateRefs = eventSlotWatchRefs.get(Constants.Event.SLOT_LIFECYCLE.CREATE);
- if(slotWatchCreateRefs == null
- || slotWatchCreateRefs.get(cell.getRef()) == null
- || slotWatchCreateRefs.get(cell.getRef()).size() == 0){
- return;
- }
- List<String> refs = slotWatchCreateRefs.get(cell.getRef());
- if(refs == null || refs.size() == 0){
- return;
- }
- fireChildEvent(Constants.Event.SLOT_LIFECYCLE.CREATE, cell, refs, position);
- }
-
- /**
- * onAttach event
- * */
- public void onAttach(int position, WXCell cell){
- if(cell == null || position < 0){
- return;
- }
- Map<String,List<String>> slotWatchAttachRefs = eventSlotWatchRefs.get(Constants.Event.SLOT_LIFECYCLE.ATTACH);
- if(slotWatchAttachRefs == null
- || slotWatchAttachRefs.get(cell.getRef()) == null
- || slotWatchAttachRefs.get(cell.getRef()).size() == 0){
- return;
- }
- List<String> refs = slotWatchAttachRefs.get(cell.getRef());
- fireChildEvent(Constants.Event.SLOT_LIFECYCLE.ATTACH, cell, refs, position);
- }
-
- /**
- * onDetach event
- * */
- public void onDetach(int position, WXCell cell){
- if(cell == null || position < 0){
- return;
- }
- Map<String,List<String>> slotWatchDetachRefs = eventSlotWatchRefs.get(Constants.Event.SLOT_LIFECYCLE.ATTACH);
- if(slotWatchDetachRefs == null
- || slotWatchDetachRefs.get(cell.getRef()) == null
- || slotWatchDetachRefs.get(cell.getRef()).size() == 0){
- return;
- }
- List<String> refs = slotWatchDetachRefs.get(cell.getRef());
- fireChildEvent(Constants.Event.SLOT_LIFECYCLE.DETACH, cell, refs, position);
- }
-
- /**
- * onDestory event
- * */
- public void onDestory(int position){
- Boolean hasCreated = firedCreateEvent.remove(position);
- if(hasCreated == null){
- return;
- }
- Map<String,List<String>> slotWatchDestroyRefs = eventSlotWatchRefs.get(Constants.Event.SLOT_LIFECYCLE.DESTORY);
- if(slotWatchDestroyRefs == null
- || slotWatchDestroyRefs.size() == 0){
- return;
- }
- WXCell cell = recyclerTemplateList.getSourceTemplate(position);
- if(cell == null){
- return;
- }
- List<String> refs = slotWatchDestroyRefs.get(cell.getRef());
- if(refs == null || refs.size() == 0){
- return;
- }
- fireChildEvent(Constants.Event.SLOT_LIFECYCLE.DESTORY, cell, refs, position);
- }
-
- public Map<Integer, Boolean> getFiredCreateEvent() {
- return firedCreateEvent;
- }
-
- private final void fireChildEvent(String event, WXCell cell, List<String> refs, int position){
- if(refs == null || refs.size() == 0){
- return;
- }
- for(String ref : refs){
- List<WXComponent> components = recyclerTemplateList.findChildListByRef(cell, ref);
- if(components == null || components.size() == 0){
- continue;
- }
- for(WXComponent component : components) {
- Map<String, Object> params = new HashMap<>(8);
- params.put("index", position);
- component.fireEvent(event, params);
- }
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/6849d52f/android/sdk/src/main/java/com/taobao/weex/ui/component/list/template/DomTreeBuilder.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/list/template/DomTreeBuilder.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/list/template/DomTreeBuilder.java
new file mode 100644
index 0000000..c475195
--- /dev/null
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/list/template/DomTreeBuilder.java
@@ -0,0 +1,83 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * 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
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package com.taobao.weex.ui.component.list.template;
+
+import com.taobao.weex.WXSDKManager;
+import com.taobao.weex.dom.DOMActionContext;
+import com.taobao.weex.dom.WXDomObject;
+import com.taobao.weex.dom.action.TraceableAction;
+import com.taobao.weex.ui.component.WXComponent;
+import com.taobao.weex.ui.component.WXComponentFactory;
+import com.taobao.weex.ui.component.WXVContainer;
+
+/**
+ * Created by furture on 2017/10/2.
+ */
+
+class DomTreeBuilder extends TraceableAction {
+
+
+
+
+ public WXComponent generateComponentTree(DOMActionContext context, WXDomObject dom, WXVContainer parent) {
+ if (dom == null) {
+ return null;
+ }
+ long startNanos = System.nanoTime();
+ WXComponent component = WXComponentFactory.newInstance(context.getInstance(), dom, parent);
+ if (component != null) {
+ component.mTraceInfo.domThreadStart = dom.mDomThreadTimestamp;
+ component.mTraceInfo.rootEventId = mTracingEventId;
+ component.mTraceInfo.domQueueTime = mDomQueueTime;
+ }
+ ((WXDomObject)component.getDomObject()).applyStyleToNode();
+ context.registerDOMObject(dom.getRef(), dom);
+ context.registerComponent(dom.getRef(), component);
+ if (component instanceof WXVContainer) {
+ WXVContainer container = (WXVContainer) component;
+ WXDomObject parentDom = (WXDomObject) container.getDomObject();
+ int count = dom.childCount();
+ WXDomObject child = null;
+ for (int i = 0; i < count; ++i) {
+ child = dom.getChild(i);
+ if (child != null) {
+ WXComponent childComponent = generateComponentTree(context, child, container);
+ container.addChild(childComponent);
+ parentDom.add((WXDomObject) childComponent.getDomObject(), -1);
+ }
+ }
+ }
+ if (component != null) {
+ component.mTraceInfo.domThreadNanos = System.nanoTime() - startNanos;
+ }
+ return component;
+ }
+
+ public static final WXComponent buildTree(WXDomObject domObject, WXVContainer parent){
+ DOMActionContext domActionContext = WXSDKManager.getInstance().getWXDomManager().getDomContext(parent.getInstanceId());
+ if(domActionContext == null){
+ return null;
+ }
+ domObject.getStyles().put("display", "flex");
+ DomTreeBuilder builder = new DomTreeBuilder();
+ return builder.generateComponentTree(domActionContext, domObject, parent);
+
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/6849d52f/android/sdk/src/main/java/com/taobao/weex/ui/component/list/template/TemplateCache.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/list/template/TemplateCache.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/list/template/TemplateCache.java
new file mode 100644
index 0000000..eab80bc
--- /dev/null
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/list/template/TemplateCache.java
@@ -0,0 +1,30 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * 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
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package com.taobao.weex.ui.component.list.template;
+import com.taobao.weex.ui.component.list.WXCell;
+import java.util.concurrent.ConcurrentLinkedQueue;
+
+/**
+ * preload cell cache
+ * Created by furture on 2017/9/29.
+ */
+class TemplateCache {
+ ConcurrentLinkedQueue<WXCell> cells = new ConcurrentLinkedQueue<>();
+ boolean isLoadIng = false;
+}
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/6849d52f/android/sdk/src/main/java/com/taobao/weex/ui/component/list/template/TemplateViewHolder.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/list/template/TemplateViewHolder.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/list/template/TemplateViewHolder.java
index a418e3e..d0b5dbf 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/list/template/TemplateViewHolder.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/list/template/TemplateViewHolder.java
@@ -47,6 +47,8 @@ public class TemplateViewHolder extends ListBaseViewHolder {
public AsyncTask<Void, Void, Void> asyncTask;
+ public Object data;
+
/**
* header position
* */
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/6849d52f/android/sdk/src/main/java/com/taobao/weex/ui/component/list/template/WXRecyclerTemplateList.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/list/template/WXRecyclerTemplateList.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/list/template/WXRecyclerTemplateList.java
index 5d23bf6..d371ab2 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/list/template/WXRecyclerTemplateList.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/list/template/WXRecyclerTemplateList.java
@@ -25,6 +25,7 @@ import android.graphics.PointF;
import android.os.AsyncTask;
import android.os.Build;
import android.os.Looper;
+import android.os.MessageQueue;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.util.ArrayMap;
@@ -43,14 +44,16 @@ import com.alibaba.fastjson.JSONArray;
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.Component;
import com.taobao.weex.annotation.JSMethod;
+import com.taobao.weex.bridge.WXBridgeManager;
import com.taobao.weex.common.Constants;
import com.taobao.weex.common.ICheckBindingScroller;
import com.taobao.weex.common.OnWXScrollListener;
-import com.taobao.weex.dom.ImmutableDomObject;
import com.taobao.weex.dom.WXAttr;
import com.taobao.weex.dom.WXCellDomObject;
+import com.taobao.weex.dom.WXDomHandler;
import com.taobao.weex.dom.WXDomObject;
import com.taobao.weex.dom.WXEvent;
import com.taobao.weex.dom.WXRecyclerDomObject;
@@ -81,10 +84,12 @@ import com.taobao.weex.utils.WXViewUtils;
import java.util.ArrayList;
import java.util.HashMap;
+import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentLinkedQueue;
import static com.taobao.weex.common.Constants.Name.LOADMOREOFFSET;
@@ -96,10 +101,11 @@ import static com.taobao.weex.common.Constants.Name.LOADMOREOFFSET;
@Component(lazyload = false)
public class WXRecyclerTemplateList extends WXVContainer<BounceRecyclerView> implements
IRecyclerAdapterListener<TemplateViewHolder>, IOnLoadMoreListener, Scrollable {
- private static final String TAG = "WXRecyclerTemplateList";
+ public static final String TAG = "WXRecyclerTemplateList";
private static final String NAME_HAS_FIXED_SIZE = "hasFixedSize";
private static final String NAME_ITEM_VIEW_CACHE_SIZE = "itemViewCacheSize";
+ private static final String NAME_TEMPLATE_CACHE_SIZE = "templateCacheSize";
private WXRecyclerDomObject mDomObject;
@@ -135,11 +141,12 @@ public class WXRecyclerTemplateList extends WXVContainer<BounceRecyclerView> imp
- private Map<String, WXCell> mTemplates;
+ private Map<String, WXCell> mTemplateSources;
private String listDataTemplateKey = Constants.Name.Recycler.SLOT_TEMPLATE_TYPE;
private Runnable listUpdateRunnable;
- private ConcurrentHashMap<String, WXCell> mTemplatesCache;
- private ConcurrentHashMap<String, Boolean> mTemplateRendered;
+ private ConcurrentHashMap<String, TemplateCache> mTemplatesCache;
+ private int templateCacheSize = 2;
+
/**
* sticky helper
@@ -148,12 +155,6 @@ public class WXRecyclerTemplateList extends WXVContainer<BounceRecyclerView> imp
/**
- * cell item lifecycle manager
- * */
- private CellLifecycleManager cellLifecycleManager;
-
-
- /**
* appear and disappear event managaer
* */
private ArrayMap<Integer, List<AppearanceHelper>> mAppearHelpers = new ArrayMap<>();
@@ -166,6 +167,9 @@ public class WXRecyclerTemplateList extends WXVContainer<BounceRecyclerView> imp
* */
private ArrayMap<Integer, Map<String,Map<Integer, List<Object>>>> mDisAppearWatchList = new ArrayMap<>();
+ private ArrayStack bindIngStackContext = new ArrayStack();
+ private Map bindIngMapContext = new HashMap();
+
public WXRecyclerTemplateList(WXSDKInstance instance, WXDomObject node, WXVContainer parent) {
super(instance, node, parent);
initRecyclerTemplateList(instance, node, parent);
@@ -180,10 +184,9 @@ public class WXRecyclerTemplateList extends WXVContainer<BounceRecyclerView> imp
}
mTemplateViewTypes = new ArrayMap<>();
mTemplateViewTypes.put("", 0); //empty view, when template was not sended
- mTemplates = new HashMap<>();
+ mTemplateSources = new HashMap<>();
mTemplatesCache = new ConcurrentHashMap<>();
mStickyHelper = new TemplateStickyHelper(this);
- cellLifecycleManager = new CellLifecycleManager(this);
orientation = mDomObject.getOrientation();
listDataTemplateKey = WXUtils.getString(getDomObject().getAttrs().get(Constants.Name.Recycler.LIST_DATA_TEMPLATE_KEY), Constants.Name.Recycler.SLOT_TEMPLATE_TYPE);
listDataItemKey = WXUtils.getString(getDomObject().getAttrs().get(Constants.Name.Recycler.LIST_DATA_ITEM), listDataItemKey);
@@ -194,7 +197,12 @@ public class WXRecyclerTemplateList extends WXVContainer<BounceRecyclerView> imp
listData = array;
}
}
- mTemplateRendered = new ConcurrentHashMap<>();
+
+ if(mDomObject != null && mDomObject.getCellList() != null){
+ for(int i=0; i<mDomObject.getCellList().size(); i++){
+ addChild(DomTreeBuilder.buildTree(mDomObject.getCellList().get(i), this));
+ }
+ }
}
@Override
@@ -206,8 +214,13 @@ public class WXRecyclerTemplateList extends WXVContainer<BounceRecyclerView> imp
bounceRecyclerView.getInnerView().addItemDecoration(RecyclerTransform.parseTransforms(getOrientation(), transforms));
}
mItemAnimator = bounceRecyclerView.getInnerView().getItemAnimator();
+
+ if(attrs.get(NAME_TEMPLATE_CACHE_SIZE) != null){
+ templateCacheSize = WXUtils.getInteger(attrs.get(NAME_TEMPLATE_CACHE_SIZE), templateCacheSize);
+ }
+
boolean hasFixedSize = false;
- int itemViewCacheSize = 4;
+ int itemViewCacheSize = 2;
if(attrs.get(NAME_ITEM_VIEW_CACHE_SIZE) != null){
itemViewCacheSize = WXUtils.getNumberInt(getDomObject().getAttrs().get(NAME_ITEM_VIEW_CACHE_SIZE), itemViewCacheSize);
}
@@ -217,7 +230,9 @@ public class WXRecyclerTemplateList extends WXVContainer<BounceRecyclerView> imp
RecyclerViewBaseAdapter recyclerViewBaseAdapter = new RecyclerViewBaseAdapter<>(this);
recyclerViewBaseAdapter.setHasStableIds(true);
bounceRecyclerView.getInnerView().setItemAnimator(null);
- bounceRecyclerView.getInnerView().setItemViewCacheSize(itemViewCacheSize);
+ if(itemViewCacheSize != 2) {
+ bounceRecyclerView.getInnerView().setItemViewCacheSize(itemViewCacheSize);
+ }
bounceRecyclerView.getInnerView().setHasFixedSize(hasFixedSize);
bounceRecyclerView.setRecyclerViewBaseAdapter(recyclerViewBaseAdapter);
bounceRecyclerView.setOverScrollMode(View.OVER_SCROLL_NEVER);
@@ -302,6 +317,9 @@ public class WXRecyclerTemplateList extends WXVContainer<BounceRecyclerView> imp
if(getHostView() != null && getHostView().getRecyclerViewBaseAdapter() != null){
getHostView().getRecyclerViewBaseAdapter().notifyDataSetChanged();
}
+ if(WXEnvironment.isApkDebugable()){
+ WXLogUtils.d(TAG, "WXTemplateList notifyDataSetChanged");
+ }
}
};
return bounceRecyclerView;
@@ -537,7 +555,9 @@ public class WXRecyclerTemplateList extends WXVContainer<BounceRecyclerView> imp
@Override
public void addChild(WXComponent child, int index) {
- super.addChild(child, index);
+ if(!(child instanceof WXCell)) {
+ super.addChild(child, index);
+ }
if(child instanceof WXBaseRefresh){
return;
}
@@ -546,19 +566,18 @@ public class WXRecyclerTemplateList extends WXVContainer<BounceRecyclerView> imp
Object templateId = child.getDomObject().getAttrs().get(Constants.Name.Recycler.SLOT_TEMPLATE_TYPE);
String key = WXUtils.getString(templateId, null);
if(key != null){
- //set visible false, skip layout in dom thread, set visible true in onCreateViewHolder
- if(child.getDomObject() != null) {
- WXDomObject domObject = (WXDomObject) child.getDomObject();
- domObject.setVisible(false);
+ if(child.getDomObject() instanceof WXCellDomObject
+ && getDomObject() instanceof WXRecyclerDomObject){
+ WXCellDomObject domObject = (WXCellDomObject) child.getDomObject();
+ domObject.setRecyclerDomObject((WXRecyclerDomObject) getDomObject());
}
- mTemplates.put(key, (WXCell) child);
- asyncPreloadCellCopyCache(key);
+ mTemplateSources.put(key, (WXCell) child);
+ ensureSourceCellRenderWithData((WXCell)child);
if(mTemplateViewTypes.get(key) == null){
mTemplateViewTypes.put(key, mTemplateViewTypes.size());
}
}
}
- cellLifecycleManager.filterLifecycleWatchEvent((WXCell)child, child);
notifyUpdateList();
}
}
@@ -602,21 +621,6 @@ public class WXRecyclerTemplateList extends WXVContainer<BounceRecyclerView> imp
}
- /**
- * To determine whether an animation is needed
- * @param child
- * @return
- */
- private boolean isRemoveAnimation(WXComponent child) {
- ImmutableDomObject domObject = child.getDomObject();
- if (domObject != null) {
- Object attr = domObject.getAttrs().get(Constants.Name.DELETE_CELL_ANIMATION);
- if (Constants.Value.DEFAULT.equals(attr)) {
- return true;
- }
- }
- return false;
- }
@Override
public void computeVisiblePointInViewCoordinate(PointF pointF) {
@@ -727,23 +731,13 @@ public class WXRecyclerTemplateList extends WXVContainer<BounceRecyclerView> imp
@JSMethod
public void setListData(Object param){
- if(listData != null){
- for(int i=0;i<listData.size(); i++){
- cellLifecycleManager.onDestory(i);
- }
- }
- boolean update = listData != null;
+ boolean update = listData != null && listData != param;
if(param instanceof JSONArray){
listData = (JSONArray) param;
}
if(update){
notifyUpdateList();
}
- if(listData != null){
- for(int i=0; i<listData.size(); i++){
- cellLifecycleManager.onCreate(i);
- }
- }
}
@JSMethod
@@ -751,14 +745,9 @@ public class WXRecyclerTemplateList extends WXVContainer<BounceRecyclerView> imp
if(listData == null){
listData = new JSONArray();
}
- int position = listData.size();
if(arrayObject instanceof JSONArray){
listData.addAll(arrayObject);
}
- int end = listData.size();
- for(int i=position; i<end; i++){
- cellLifecycleManager.onCreate(position);
- }
notifyUpdateList();
}
@@ -771,7 +760,6 @@ public class WXRecyclerTemplateList extends WXVContainer<BounceRecyclerView> imp
return;
}
listData.add(index, data);
- cellLifecycleManager.onInsert(index);
notifyUpdateList();
}
@@ -783,13 +771,7 @@ public class WXRecyclerTemplateList extends WXVContainer<BounceRecyclerView> imp
if(listData == null || index >= listData.size()){
return;
}
- int before = getItemViewType(index);
listData.set(index, data);
- int after = getItemViewType(index);
- if(before != after){
- cellLifecycleManager.onDestory(index);
- cellLifecycleManager.onCreate(index);
- }
notifyUpdateList();
}
@@ -806,15 +788,7 @@ public class WXRecyclerTemplateList extends WXVContainer<BounceRecyclerView> imp
}
index -= offset;
if(index < listData.size()){
- int markPostion = listData.size() - 1;
- cellLifecycleManager.onDestory(index);
listData.remove((int)index);
- if(index < listData.size()){
- cellLifecycleManager.getFiredCreateEvent().put(index, true);
- }
- if(markPostion >= 0){
- cellLifecycleManager.getFiredCreateEvent().remove(markPostion);
- }
offset++;
}
}
@@ -1002,8 +976,8 @@ public class WXRecyclerTemplateList extends WXVContainer<BounceRecyclerView> imp
if(mTemplateViewTypes != null){
mTemplateViewTypes.clear();
}
- if(mTemplates != null){
- mTemplates.clear();
+ if(mTemplateSources != null){
+ mTemplateSources.clear();
}
if(mAppearHelpers != null){
mAppearHelpers.clear();
@@ -1017,8 +991,7 @@ public class WXRecyclerTemplateList extends WXVContainer<BounceRecyclerView> imp
@Override
- public void onViewRecycled(TemplateViewHolder holder) {
- }
+ public void onViewRecycled(TemplateViewHolder holder) {}
@Override
public void onBindViewHolder(final TemplateViewHolder templateViewHolder, int position) {
@@ -1029,110 +1002,96 @@ public class WXRecyclerTemplateList extends WXVContainer<BounceRecyclerView> imp
if(component == null){
return;
}
- cellLifecycleManager.onDetach(templateViewHolder.getHolderPosition(), component);
long start = System.currentTimeMillis();
+ boolean async = templateViewHolder.getHolderPosition() >= 0;
templateViewHolder.setHolderPosition(position);
- Statements.doRender(component, getStackContextForPosition(position));
- if(WXEnvironment.isApkDebugable()){
- WXLogUtils.d(TAG, position + getTemplateKey(position) + " onBindViewHolder render used " + (System.currentTimeMillis() - start));
- }
- Layouts.doLayoutAsync(templateViewHolder);
- cellLifecycleManager.onAttach(position, component);
- if(WXEnvironment.isApkDebugable()){
- WXLogUtils.d(TAG, position + getTemplateKey(position) + " onBindViewHolder layout used " + (System.currentTimeMillis() - start));
+ Object data = listData.get(position);
+ if(component.getRenderData() == data){
+ if(!async){
+ if(!component.isHasLayout()) {
+ Layouts.doLayoutAsync(templateViewHolder, async);
+ }
+ if(WXEnvironment.isApkDebugable()){
+ WXLogUtils.d(TAG, position + getTemplateKey(position) + " onBindViewHolder source layout used " + (System.currentTimeMillis() - start) + async);
+ }
+ }
+ component.setHasLayout(true);
+ }else{
+ List<WXComponent> updates = Statements.doRender(component, getStackContextForPosition(position, data));
+ Statements.doInitCompontent(updates);
+ component.setRenderData(data);
+ if(WXEnvironment.isApkDebugable()){
+ WXLogUtils.d(TAG, position + getTemplateKey(position) + " onBindViewHolder render used " + (System.currentTimeMillis() - start));
+ }
+ if(component.isHasLayout()){
+ async = true;
+ }
+ Layouts.doLayoutAsync(templateViewHolder, async);
+ component.setHasLayout(true);
+ if(WXEnvironment.isApkDebugable()){
+ WXLogUtils.d(TAG, position + getTemplateKey(position) + " onBindViewHolder layout used " + (System.currentTimeMillis() - start) + async);
+ }
}
}
@Override
public TemplateViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
String template = mTemplateViewTypes.keyAt(viewType);
- WXCell source = mTemplates.get(template);
+ WXCell source = mTemplateSources.get(template);
if(source == null){
FrameLayout view = new FrameLayout(getContext());
view.setLayoutParams(new FrameLayout.LayoutParams(0, 0));
return new TemplateViewHolder(view, viewType);
}
- long start = System.currentTimeMillis();
- WXCell component = mTemplatesCache.remove(template);
- boolean needLayout = false;
- if(component == null) {
- component = (WXCell) copyCell(source);
- needLayout = true;
+ TemplateCache cache = mTemplatesCache.get(template);
+ WXCell component = null;
+ boolean cacheHit = true;
+ if(cache != null && cache.cells != null && cache.cells.size() > 0){
+ component = cache.cells.poll();
}
- asyncPreloadCellCopyCache(template);
- CSSLayoutContext layoutContext = null;
- if(needLayout){
- layoutContext = new CSSLayoutContext();
- Layouts.doSafeLayout(component, layoutContext);
- if(WXEnvironment.isApkDebugable()){
- WXLogUtils.d(TAG, template + " onCreateViewHolder sync layout used " + (System.currentTimeMillis() - start));
- }
+ if(cache == null || !cache.isLoadIng){
+ asyncLoadTemplateCache(template);
}
- Layouts.setLayout(component, false);
- component.lazy(false);
- component.createView();
- if(WXEnvironment.isApkDebugable()){
- WXLogUtils.d(TAG, template + " onCreateViewHolder view used " + (System.currentTimeMillis() - start));
+ if(component == null){
+ cacheHit = false;
+ if(!source.isSourceUsed()){
+ source.setSourceUsed(true);
+ ensureSourceCellRenderWithData(source);
+ component = source;
+ if(WXEnvironment.isApkDebugable()) {
+ WXLogUtils.d(TAG, template + " onCreateViewHolder source");
+ }
+ }
}
- component.applyLayoutAndEvent(component);
- if(WXEnvironment.isApkDebugable()) {
- WXLogUtils.d(TAG, template + " onCreateViewHolder apply layout used " + (System.currentTimeMillis() - start));
+ if(component == null) {
+ long start = System.currentTimeMillis();
+ component = (WXCell) copyCell(source);
+ if(WXEnvironment.isApkDebugable()) {
+ WXLogUtils.d(TAG, template + " onCreateViewHolder copy used " + (System.currentTimeMillis() - start));
+ }
}
- component.bindData(component);
- if(WXEnvironment.isApkDebugable()) {
- WXLogUtils.d(TAG, template + " onCreateViewHolder bindData used " + (System.currentTimeMillis() - start));
+ if(component.isLazy()) {
+ doInitLazyCell(component, template, false);
+ if(WXEnvironment.isApkDebugable()) {
+ WXLogUtils.d(TAG, template + " onCreateViewHolder cache hit " + cacheHit + " idle init false ");
+ }
+ }else{
+ if(WXEnvironment.isApkDebugable()) {
+ WXLogUtils.d(TAG, template + " onCreateViewHolder cache hit " + cacheHit + " idle init true");
+ }
}
TemplateViewHolder templateViewHolder = new TemplateViewHolder(component, viewType);
- templateViewHolder.setLayoutContext(layoutContext);
return templateViewHolder;
}
- private void asyncPreloadCellCopyCache(final String template) {
- final WXCell cell = mTemplates.get(template);
- if(cell == null){
- return;
- }
- if(mTemplatesCache.get(template) != null){
- return;
- }
- AsyncTask.THREAD_POOL_EXECUTOR.execute(new Runnable() {
- @Override
- public void run() {
- if(cell.getInstance() == null || cell.getInstance().isDestroy()){
- return;
- }
- WXCell component = (WXCell) copyCell(cell);
- if(cell.getInstance() == null || cell.getInstance().isDestroy()){
- return;
- }
- Layouts.doSafeLayout(component, new CSSLayoutContext());
- mTemplatesCache.put(template, component);
- }
- });
- }
/**
- * copy cell component from source, and return source
+ * copy cell component from source, init render data, and return source
+ * if none data, return null
* */
- private WXComponent copyCell(WXComponent cell){
- /** pre render for cell */
- Boolean rendered = mTemplateRendered.get(cell.getRef());
- if(rendered == null || !rendered) {
- if(listData != null){
- for(int i=0; i<listData.size(); i++){
- WXCell source = getSourceTemplate(i);
- if(source == cell){
- Statements.doRender(cell, getStackContextForPosition(i));
- mTemplateRendered.put(source.getRef(), true);
- break;
- }
- }
- }
- }
+ private WXComponent copyCell(WXCell cell){
+ ensureSourceCellRenderWithData(cell);
WXCell component = (WXCell) Statements.copyComponentTree(cell);
- if(component.getDomObject() != null){
- ((WXDomObject)component.getDomObject()).setVisible(true);
- }
if(component.getDomObject() instanceof WXCellDomObject
&& getDomObject() instanceof WXRecyclerDomObject){
WXCellDomObject domObject = (WXCellDomObject) component.getDomObject();
@@ -1141,6 +1100,26 @@ public class WXRecyclerTemplateList extends WXVContainer<BounceRecyclerView> imp
return component;
}
+ private void ensureSourceCellRenderWithData(WXCell cell){
+ if(cell.getRenderData() == null){
+ if(listData != null && listData.size() > 0){
+ synchronized (this){
+ if(cell.getRenderData() == null){
+ for(int i=0; i<listData.size(); i++){
+ if(cell == getSourceTemplate(i)){
+ Object data = listData.get(i);
+ Statements.doRender(cell, getStackContextForPosition(i, data));
+ cell.setRenderData(data);
+ //WXSDKManager.getInstance().getWXDomManager().postAction(getInstanceId(), new RenderSourceCellAction(cell, null, data), false);
+ break;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
/**
* @param position
* when template not send, return an invalid id, use empty view holder.
@@ -1164,14 +1143,19 @@ public class WXRecyclerTemplateList extends WXVContainer<BounceRecyclerView> imp
/**
* return code context for render component
* */
- private ArrayStack getStackContextForPosition(int position){
- ArrayStack stack = new ArrayStack();
- Map map = new HashMap();
+ private ArrayStack getStackContextForPosition(int position, Object item){
+ if(!bindIngStackContext.isEmpty()){
+ bindIngStackContext.getList().clear();
+ }
+ if(!bindIngMapContext.isEmpty()){
+ bindIngMapContext.clear();
+ }
+ ArrayStack stack = bindIngStackContext;
+ Map map = bindIngMapContext;
if(listData != null){
stack.push(listData);
stack.push(map);
map.put(listDataKey, listData);
- Object item = listData.get(position);
if(!TextUtils.isEmpty(listDataIndexKey)) {
map.put(listDataIndexKey, position);
}
@@ -1201,7 +1185,7 @@ public class WXRecyclerTemplateList extends WXVContainer<BounceRecyclerView> imp
* */
public WXCell getSourceTemplate(int position){
String template = getTemplateKey(position);
- return mTemplates.get(template);
+ return mTemplateSources.get(template);
}
@@ -1236,7 +1220,7 @@ public class WXRecyclerTemplateList extends WXVContainer<BounceRecyclerView> imp
if(mTemplateViewTypes == null || mTemplateViewTypes.size() <= 1){
return 0;
}
- if(mTemplates == null || mTemplates.size() == 0){
+ if(mTemplateSources == null || mTemplateSources.size() == 0){
return 0;
}
return listData.size();
@@ -1385,7 +1369,7 @@ public class WXRecyclerTemplateList extends WXVContainer<BounceRecyclerView> imp
if(map == null){
continue;
}
- WXCell template = mTemplates.get(getTemplateKey(position));
+ WXCell template = mTemplateSources.get(getTemplateKey(position));
if(template == null){
return;
}
@@ -1420,15 +1404,16 @@ public class WXRecyclerTemplateList extends WXVContainer<BounceRecyclerView> imp
}
private void notifyUpdateList(){
- if(getHostView() != null
- && listUpdateRunnable != null
- && getHostView().getInnerView() != null){
- if(Looper.getMainLooper().getThread().getId() != Thread.currentThread().getId()){
- getHostView().removeCallbacks(listUpdateRunnable);
- getHostView().post(listUpdateRunnable);
- }else{
- listUpdateRunnable.run();
- }
+ if(getHostView() == null
+ || getHostView().getInnerView() == null
+ || listUpdateRunnable == null){
+ return;
+ }
+ if(Looper.getMainLooper().getThread().getId() != Thread.currentThread().getId()){
+ getHostView().removeCallbacks(listUpdateRunnable);
+ getHostView().post(listUpdateRunnable);
+ }else{
+ listUpdateRunnable.run();
}
}
@@ -1545,4 +1530,126 @@ public class WXRecyclerTemplateList extends WXVContainer<BounceRecyclerView> imp
}
return componentList;
}
+
+
+ /**
+ * copy cell async and save to cache
+ * */
+ private void asyncLoadTemplateCache(final String template) {
+ if(Thread.currentThread() != Looper.getMainLooper().getThread()){
+ if(listData == null || listData.size() == 0){
+ return;
+ }
+ boolean firstScreenContains = false;
+ for(int i=0; i<listData.size(); i++){
+ if(template.equals(getTemplateKey(i))){
+ firstScreenContains = true;
+ break;
+ }
+ }
+ if(!firstScreenContains){
+ return;
+ }
+ }
+ final WXCell source = mTemplateSources.get(template);
+ if(source == null){
+ return;
+ }
+ TemplateCache cellCache = mTemplatesCache.get(template);
+ if(cellCache == null){
+ cellCache = new TemplateCache();
+ mTemplatesCache.put(template, cellCache);
+ }
+ if(cellCache.cells.size() >= templateCacheSize){
+ cellCache.isLoadIng = false;
+ return;
+ }
+ if(cellCache.isLoadIng){
+ return;
+ }
+ cellCache.isLoadIng = true;
+ AsyncTask<Void,Void, Void> preloadTask = new AsyncTask<Void, Void, Void>() {
+ @Override
+ protected Void doInBackground(Void... params) {
+ try {
+ Thread.sleep(100);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ TemplateCache cellCache = mTemplatesCache.get(template);
+ if(cellCache == null || cellCache.cells == null){
+ return null;
+ }
+ while (cellCache.cells.size() < templateCacheSize){
+ WXCell component = (WXCell) copyCell(source);
+ if(component == null){
+ return null;
+ }
+ if(source.getInstance() == null || source.getInstance().isDestroy()){
+ return null;
+ }
+ cellCache.cells.add(component);
+ }
+ return null;
+ }
+ @Override
+ protected void onPostExecute(Void aVoid) {
+ if(source.getInstance() == null || source.getInstance().isDestroy()){
+ return;
+ }
+ final TemplateCache cellCache = mTemplatesCache.get(template);
+ if(cellCache == null){
+ return;
+ }
+ if(cellCache.cells == null
+ || cellCache.cells.size() == 0){
+ cellCache.isLoadIng = false;
+ return;
+ }
+ Looper.myQueue().addIdleHandler(new MessageQueue.IdleHandler() {
+ @Override
+ public boolean queueIdle() {
+ if(source.getInstance() == null || source.getInstance().isDestroy()){
+ return false;
+ }
+ ConcurrentLinkedQueue<WXCell> queue = cellCache.cells;
+ Iterator<WXCell> iterator = queue.iterator();
+ while (iterator.hasNext()){
+ WXCell component = iterator.next();
+ if(component.isLazy()){
+ doInitLazyCell(component, template, true);
+ return iterator.hasNext();
+ }
+ if(!component.isHasLayout()){
+ Layouts.doSafeLayout(component, new CSSLayoutContext());
+ component.setHasLayout(true);
+ }
+ }
+ return false;
+ }
+ });
+ cellCache.isLoadIng = false;
+ }
+ };
+ preloadTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
+ }
+
+ private static void doInitLazyCell(WXCell component, String template, boolean inPreload){
+ if(component.isLazy()){
+ long start = System.currentTimeMillis();
+ component.lazy(false);
+ component.createView();
+ if(WXEnvironment.isApkDebugable()) {
+ WXLogUtils.d(TAG, "doInitLazyCell " + inPreload + template + " createView used " + (System.currentTimeMillis() - start));
+ }
+ component.applyLayoutAndEvent(component);
+ if(WXEnvironment.isApkDebugable()) {
+ WXLogUtils.d(TAG, "doInitLazyCell " + inPreload + template + " apply layout used " + (System.currentTimeMillis() - start));
+ }
+ component.bindData(component);
+ if(WXEnvironment.isApkDebugable()) {
+ WXLogUtils.d(TAG, "doInitLazyCell " + inPreload + template + " bindData used " + (System.currentTimeMillis() - start));
+ }
+ }
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/6849d52f/android/sdk/src/test/java/com/taobao/weex/ui/component/binding/StatementTest.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/test/java/com/taobao/weex/ui/component/binding/StatementTest.java b/android/sdk/src/test/java/com/taobao/weex/ui/component/binding/StatementTest.java
index 3566816..3924a3a 100644
--- a/android/sdk/src/test/java/com/taobao/weex/ui/component/binding/StatementTest.java
+++ b/android/sdk/src/test/java/com/taobao/weex/ui/component/binding/StatementTest.java
@@ -76,7 +76,7 @@ public class StatementTest {
public void testVFor() throws Exception {
WXCell cell = createVForNode();
int count = 3;
- Statements.doRenderComponent(cell, createContext(count));
+ Statements.doRender(cell, createContext(count));
Assert.assertTrue(cell.getChildCount() == 1);
WXDiv div = (WXDiv) cell.getChild(0);
Assert.assertEquals(div.getChildCount(), count);
@@ -88,7 +88,7 @@ public class StatementTest {
WXComponent childThree = div.getChild(2);
count = 4;
- Statements.doRenderComponent(cell, createContext(count));
+ Statements.doRender(cell, createContext(count));
Assert.assertTrue(cell.getChildCount() == 1);
div = (WXDiv) cell.getChild(0);
Assert.assertTrue(div.getChildCount() == count);
@@ -98,7 +98,7 @@ public class StatementTest {
WXComponent childFour = div.getChild(3);
count = 5;
- Statements.doRenderComponent(cell, createContext(count));
+ Statements.doRender(cell, createContext(count));
Assert.assertTrue(cell.getChildCount() == 1);
div = (WXDiv) cell.getChild(0);
Assert.assertTrue(div.getChildCount() == count);
@@ -109,7 +109,7 @@ public class StatementTest {
count = 3;
- Statements.doRenderComponent(cell, createContext(count));
+ Statements.doRender(cell, createContext(count));
Assert.assertTrue(cell.getChildCount() == 1);
div = (WXDiv) cell.getChild(0);
Assert.assertTrue(div.getChildCount() == 5);
[38/50] [abbrv] incubator-weex git commit: * [ios] web filter error
Posted by gu...@apache.org.
* [ios] web filter error
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/f2d82803
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/f2d82803
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/f2d82803
Branch: refs/heads/master
Commit: f2d828037d255c22f407d8ee8eba4f11c73ea363
Parents: f4bfd22
Author: gurisxie <27...@qq.com>
Authored: Tue Oct 17 14:02:01 2017 +0800
Committer: gurisxie <27...@qq.com>
Committed: Tue Oct 17 14:02:01 2017 +0800
----------------------------------------------------------------------
ios/sdk/WeexSDK/Sources/Component/WXWebComponent.m | 3 +++
1 file changed, 3 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/f2d82803/ios/sdk/WeexSDK/Sources/Component/WXWebComponent.m
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Component/WXWebComponent.m b/ios/sdk/WeexSDK/Sources/Component/WXWebComponent.m
index f66bd11..792d4c9 100644
--- a/ios/sdk/WeexSDK/Sources/Component/WXWebComponent.m
+++ b/ios/sdk/WeexSDK/Sources/Component/WXWebComponent.m
@@ -200,6 +200,9 @@ WX_EXPORT_METHOD(@selector(goForward))
NSMutableDictionary *data = [self baseInfo];
[data setObject:[error localizedDescription] forKey:@"errorMsg"];
[data setObject:[NSString stringWithFormat:@"%ld", (long)error.code] forKey:@"errorCode"];
+ if(error.userInfo && ![error.userInfo[NSURLErrorFailingURLStringErrorKey] hasPrefix:@"http"]){
+ return;
+ }
[self fireEvent:@"error" params:data];
}
}
[41/50] [abbrv] incubator-weex git commit: resolve conflicts
Posted by gu...@apache.org.
resolve conflicts
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/edbde500
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/edbde500
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/edbde500
Branch: refs/heads/master
Commit: edbde500e4163a155bc4b1572fe5f637f69bcf88
Parents: 37d62f9
Author: jianbai.gbj <ji...@alibaba-inc.com>
Authored: Tue Oct 17 11:15:53 2017 +0800
Committer: gurisxie <27...@qq.com>
Committed: Tue Oct 17 15:38:09 2017 +0800
----------------------------------------------------------------------
.../src/main/java/com/taobao/weex/ui/component/list/WXCell.java | 2 --
1 file changed, 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/edbde500/android/sdk/src/main/java/com/taobao/weex/ui/component/list/WXCell.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/list/WXCell.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/list/WXCell.java
index ebf81b4..925da65 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/list/WXCell.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/list/WXCell.java
@@ -66,8 +66,6 @@ public class WXCell extends WidgetContainer<WXFrameLayout> {
private boolean hasLayout = false;
-
-
@Deprecated
public WXCell(WXSDKInstance instance, WXDomObject dom, WXVContainer parent, String instanceId, boolean isLazy) {
super(instance, dom, parent);
[13/50] [abbrv] incubator-weex git commit: * [ios] update image load
performance
Posted by gu...@apache.org.
* [ios] update image load performance
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/e9ea1b27
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/e9ea1b27
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/e9ea1b27
Branch: refs/heads/master
Commit: e9ea1b27953be6b564b69ec825cb601cc634e0c2
Parents: 31eb130
Author: acton393 <zh...@gmail.com>
Authored: Mon Oct 9 21:39:16 2017 +0800
Committer: gurisxie <27...@qq.com>
Committed: Mon Oct 9 21:48:49 2017 +0800
----------------------------------------------------------------------
.../Sources/Component/WXImageComponent.m | 89 ++++++++++----------
1 file changed, 45 insertions(+), 44 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/e9ea1b27/ios/sdk/WeexSDK/Sources/Component/WXImageComponent.m
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Component/WXImageComponent.m b/ios/sdk/WeexSDK/Sources/Component/WXImageComponent.m
index 90c29a1..4cbe4da 100644
--- a/ios/sdk/WeexSDK/Sources/Component/WXImageComponent.m
+++ b/ios/sdk/WeexSDK/Sources/Component/WXImageComponent.m
@@ -336,14 +336,17 @@ WX_EXPORT_METHOD(@selector(save:))
- (void)setImageSrc:(NSString*)src
{
- pthread_mutex_lock(&(_imageSrcMutex));
- if (![src isEqualToString:_imageSrc]) {
- _imageSrc = src;
- _imageDownloadFinish = NO;
- ((UIImageView*)self.view).image = nil;
- [self updateImage];
+ if ([src isEqualToString:_imageSrc]) {
+ // if image src is equal to then ignore it.
+ return;
}
+ pthread_mutex_lock(&(_imageSrcMutex));
+ _imageSrc = src;
+ _imageDownloadFinish = NO;
+ ((UIImageView*)self.view).image = nil;
pthread_mutex_unlock(&(_imageSrcMutex));
+
+ [self updateImage];
}
- (void)updateImage
@@ -426,45 +429,43 @@ WX_EXPORT_METHOD(@selector(save:))
NSString * newURL = [imageSrc copy];
WX_REWRITE_URL(imageSrc, WXResourceTypeImage, self.weexInstance)
__weak typeof(self) weakSelf = self;
- dispatch_async(dispatch_get_main_queue(), ^{
- weakSelf.imageOperation = [[weakSelf imageLoader] downloadImageWithURL:newURL imageFrame:weakSelf.calculatedFrame userInfo:userInfo completed:^(UIImage *image, NSError *error, BOOL finished) {
- dispatch_async(dispatch_get_main_queue(), ^{
- __strong typeof(self) strongSelf = weakSelf;
-
- if (strongSelf.imageLoadEvent) {
- NSMutableDictionary *sizeDict = [NSMutableDictionary new];
- sizeDict[@"naturalWidth"] = @0;
- sizeDict[@"naturalHeight"] = @0;
- if (!error) {
- sizeDict[@"naturalWidth"] = @(image.size.width * image.scale);
- sizeDict[@"naturalHeight"] = @(image.size.height * image.scale);
- } else {
- [sizeDict setObject:[error description]?:@"" forKey:@"errorDesc"];
- }
- [strongSelf fireEvent:@"load" params:@{ @"success": error? @false : @true,@"size":sizeDict}];
- }
- if (error) {
- downloadFailedBlock(imageSrc, error);
- [strongSelf readyToRender];
- return ;
- }
-
- if (![imageSrc isEqualToString:strongSelf.imageSrc]) {
- return ;
- }
-
- if ([strongSelf isViewLoaded]) {
- strongSelf.imageDownloadFinish = YES;
- ((UIImageView *)strongSelf.view).image = image;
- [strongSelf readyToRender];
- } else if (strongSelf->_isCompositingChild) {
- strongSelf.imageDownloadFinish = YES;
- strongSelf->_image = image;
- [strongSelf setNeedsDisplay];
+ weakSelf.imageOperation = [[weakSelf imageLoader] downloadImageWithURL:newURL imageFrame:weakSelf.calculatedFrame userInfo:userInfo completed:^(UIImage *image, NSError *error, BOOL finished) {
+ dispatch_async(dispatch_get_main_queue(), ^{
+ __strong typeof(self) strongSelf = weakSelf;
+
+ if (strongSelf.imageLoadEvent) {
+ NSMutableDictionary *sizeDict = [NSMutableDictionary new];
+ sizeDict[@"naturalWidth"] = @0;
+ sizeDict[@"naturalHeight"] = @0;
+ if (!error) {
+ sizeDict[@"naturalWidth"] = @(image.size.width * image.scale);
+ sizeDict[@"naturalHeight"] = @(image.size.height * image.scale);
+ } else {
+ [sizeDict setObject:[error description]?:@"" forKey:@"errorDesc"];
}
- });
- }];
- });
+ [strongSelf fireEvent:@"load" params:@{ @"success": error? @false : @true,@"size":sizeDict}];
+ }
+ if (error) {
+ downloadFailedBlock(imageSrc, error);
+ [strongSelf readyToRender];
+ return ;
+ }
+
+ if (![imageSrc isEqualToString:strongSelf.imageSrc]) {
+ return ;
+ }
+
+ if ([strongSelf isViewLoaded]) {
+ strongSelf.imageDownloadFinish = YES;
+ ((UIImageView *)strongSelf.view).image = image;
+ [strongSelf readyToRender];
+ } else if (strongSelf->_isCompositingChild) {
+ strongSelf.imageDownloadFinish = YES;
+ strongSelf->_image = image;
+ [strongSelf setNeedsDisplay];
+ }
+ });
+ }];
}
- (void)readyToRender
[22/50] [abbrv] incubator-weex git commit: init framework and insert
cacheDir for debug
Posted by gu...@apache.org.
init framework and insert cacheDir for debug
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/07bc5b0d
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/07bc5b0d
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/07bc5b0d
Branch: refs/heads/master
Commit: 07bc5b0dc44762603f2465835a1b3530b76f238e
Parents: dbc94f4
Author: 御魂 <we...@alibaba-inc.com>
Authored: Mon Oct 9 16:40:02 2017 +0800
Committer: yuhun-alibaba <to...@gmail.com>
Committed: Tue Oct 10 17:23:17 2017 +0800
----------------------------------------------------------------------
.../java/com/taobao/weex/bridge/WXBridge.java | 17 ++++++
.../com/taobao/weex/bridge/WXBridgeManager.java | 25 ++++++++-
.../java/com/taobao/weex/common/IWXBridge.java | 9 ++++
.../taobao/weex/utils/WXSoInstallMgrSdk.java | 56 ++++++++++++++++++++
.../taobao/weex/bridge/WXWebsocketBridge.java | 15 ++++++
5 files changed, 121 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/07bc5b0d/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridge.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridge.java b/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridge.java
index 9d88fc2..b95c7a6 100644
--- a/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridge.java
+++ b/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridge.java
@@ -36,6 +36,8 @@ class WXBridge implements IWXBridge {
public static final String TAG = "WXBridge";
+ public static final boolean MULTIPROCESS = true;
+
/**
* Init JSFrameWork
*
@@ -43,6 +45,13 @@ class WXBridge implements IWXBridge {
*/
public native int initFramework(String framework, WXParams params);
+ /**
+ * Init JSFrameWork
+ *
+ * @param framework assets/main.js
+ */
+ public native int initFramework(String framework, WXParams params, String cacheDir, boolean onSdcard);
+
/**
* Execute JavaScript function
@@ -68,6 +77,14 @@ class WXBridge implements IWXBridge {
*/
public native void takeHeapSnapshot(String filename);
+
+ public int initFrameworkEnv(String framework, WXParams params, String cacheDir, boolean onSdcard){
+ if (MULTIPROCESS) {
+ return initFramework(framework, params, cacheDir, onSdcard);
+ } else {
+ return initFramework(framework, params);
+ }
+ }
/**
* JavaScript uses this methods to call Android code
*
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/07bc5b0d/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridgeManager.java
----------------------------------------------------------------------
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 a949e3b..07f2381 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
@@ -19,6 +19,8 @@
package com.taobao.weex.bridge;
import android.content.Context;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageManager;
import android.os.Handler;
import android.os.Handler.Callback;
import android.os.Looper;
@@ -1564,7 +1566,28 @@ public class WXBridgeManager implements Callback,BactchExecutor {
}
long start = System.currentTimeMillis();
- if(mWXBridge.initFramework(framework, assembleDefaultOptions())==INIT_FRAMEWORK_OK){
+ String crashFile="";
+ boolean installOnSdcard = false;
+ try {
+ crashFile = WXEnvironment.getApplication().getApplicationContext().getCacheDir().getPath();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ try {
+ PackageManager pm = WXEnvironment.getApplication().getApplicationContext().getPackageManager();
+ String pkgName = WXEnvironment.getApplication().getPackageName();
+ ApplicationInfo appInfo = pm.getApplicationInfo(pkgName, 0);
+ if ((appInfo.flags & ApplicationInfo.FLAG_EXTERNAL_STORAGE) != 0) {
+ // App on sdcard
+ installOnSdcard = true;
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ // extends initFramework
+ if(mWXBridge.initFrameworkEnv(framework, assembleDefaultOptions(), crashFile, installOnSdcard)==INIT_FRAMEWORK_OK){
WXEnvironment.sJSLibInitTime = System.currentTimeMillis() - start;
WXLogUtils.renderPerformanceLog("initFramework", WXEnvironment.sJSLibInitTime);
WXEnvironment.sSDKInitTime = System.currentTimeMillis() - WXEnvironment.sSDKInitStart;
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/07bc5b0d/android/sdk/src/main/java/com/taobao/weex/common/IWXBridge.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/common/IWXBridge.java b/android/sdk/src/main/java/com/taobao/weex/common/IWXBridge.java
index 9d4885c..9e83dde 100644
--- a/android/sdk/src/main/java/com/taobao/weex/common/IWXBridge.java
+++ b/android/sdk/src/main/java/com/taobao/weex/common/IWXBridge.java
@@ -38,6 +38,15 @@ public interface IWXBridge extends IWXObject {
*/
int initFramework(String framework, WXParams params);
+
+ /**
+ * init Weex
+ *
+ * @param framework assets/main.js
+ * @return
+ */
+ int initFrameworkEnv(String framework, WXParams params, String cacheDir, boolean onSdcard);
+
/**
* execute javascript function
*/
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/07bc5b0d/android/sdk/src/main/java/com/taobao/weex/utils/WXSoInstallMgrSdk.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/utils/WXSoInstallMgrSdk.java b/android/sdk/src/main/java/com/taobao/weex/utils/WXSoInstallMgrSdk.java
index a7fba8a..e402ee7 100644
--- a/android/sdk/src/main/java/com/taobao/weex/utils/WXSoInstallMgrSdk.java
+++ b/android/sdk/src/main/java/com/taobao/weex/utils/WXSoInstallMgrSdk.java
@@ -32,6 +32,7 @@ import com.taobao.weex.common.WXErrorCode;
import com.taobao.weex.common.WXPerformance;
import java.io.File;
+import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
@@ -68,6 +69,7 @@ public class WXSoInstallMgrSdk {
private final static String ARMEABI = "armeabi"; //default
private final static String X86 = "x86";
private final static String MIPS = "mips";
+ private final static String STARTUPSO = "/libweexjsb.so";
private final static int ARMEABI_Size = 3583820;
private final static int X86_Size = 4340864;
@@ -111,6 +113,9 @@ public class WXSoInstallMgrSdk {
return false;
}
+ // copy startup so
+ copyStartUpSo();
+
boolean InitSuc = false;
if (checkSoIsValid(libName, BuildConfig.ARMEABI_Size) ||checkSoIsValid(libName, BuildConfig.X86_Size)) {
@@ -170,6 +175,57 @@ public class WXSoInstallMgrSdk {
return InitSuc;
}
+ /**
+ * copyStartUpSo
+ */
+ public static void copyStartUpSo() {
+ try {
+ boolean installOnSdcard = true;
+ String pkgName = WXEnvironment.getApplication().getPackageName();
+ // cp weexjsb any way
+// try {
+// PackageManager pm = WXEnvironment.getApplication().getApplicationContext().getPackageManager();
+// ApplicationInfo appInfo = pm.getApplicationInfo(pkgName, 0);
+// if ((appInfo.flags & ApplicationInfo.FLAG_EXTERNAL_STORAGE) != 0) {
+// // App on sdcard
+// installOnSdcard = true;
+// }
+// } catch (Throwable e) {
+// }
+ if (installOnSdcard) {
+
+ String cacheFile = WXEnvironment.getApplication().getApplicationContext().getCacheDir().getPath();
+ File newfile = new File(cacheFile + STARTUPSO);
+ if (newfile.exists()) {
+ return;
+ }
+
+ String path = "/data/data/" + pkgName + "/lib";;
+ if (cacheFile != null && cacheFile.indexOf("/cache") > 0) {
+ path = cacheFile.replace("/cache", "/lib");
+ }
+
+ String soName = path + STARTUPSO;
+ File oldfile = new File(soName);
+ if (oldfile.exists()) {
+ //获得原文件流
+ FileInputStream inputStream = new FileInputStream(oldfile);
+ byte[] data = new byte[1024];
+ //输出流
+ FileOutputStream outputStream =new FileOutputStream(newfile);
+ //开始处理流
+ while (inputStream.read(data) != -1) {
+ outputStream.write(data);
+ }
+ inputStream.close();
+ outputStream.close();
+ }
+ }
+ } catch (Throwable e) {
+ e.printStackTrace();
+ }
+ }
+
private static String _getFieldReflectively(Build build, String fieldName) {
try {
final Field field = Build.class.getField(fieldName);
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/07bc5b0d/android/weex_debug/src/main/java/com/taobao/weex/bridge/WXWebsocketBridge.java
----------------------------------------------------------------------
diff --git a/android/weex_debug/src/main/java/com/taobao/weex/bridge/WXWebsocketBridge.java b/android/weex_debug/src/main/java/com/taobao/weex/bridge/WXWebsocketBridge.java
index b686f7c..5576de3 100644
--- a/android/weex_debug/src/main/java/com/taobao/weex/bridge/WXWebsocketBridge.java
+++ b/android/weex_debug/src/main/java/com/taobao/weex/bridge/WXWebsocketBridge.java
@@ -204,6 +204,21 @@ public class WXWebsocketBridge implements IWXBridge,WXWebSocketManager.JSDebugge
}
@Override
+ public int initFrameworkEnv(String scriptsFramework,WXParams params, String cacheDir, boolean onSdcard) {
+ if (!mInit) {
+ return -1;
+ }
+
+ Map<String, Object> map = new HashMap<>();
+ map.put("method", "evalFramework");
+ ArrayList<String> args = new ArrayList<>();
+ args.add(scriptsFramework);
+ map.put("arguments", args);
+ WXWebSocketManager.getInstance().sendMessage(JSON.toJSONString(map));
+ return 0;
+ }
+
+ @Override
public void takeHeapSnapshot(String filename) {}
@Override
[11/50] [abbrv] incubator-weex git commit: * [ios] add more comments
about category
Posted by gu...@apache.org.
* [ios] add more comments about category
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/31eb130d
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/31eb130d
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/31eb130d
Branch: refs/heads/master
Commit: 31eb130dc36d78a5f515be481b502c971b9fbeb8
Parents: 3589859
Author: acton393 <zh...@gmail.com>
Authored: Mon Oct 9 19:46:20 2017 +0800
Committer: gurisxie <27...@qq.com>
Committed: Mon Oct 9 19:53:06 2017 +0800
----------------------------------------------------------------------
ios/sdk/WeexSDK/Sources/Component/WXScrollerComponent.m | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/31eb130d/ios/sdk/WeexSDK/Sources/Component/WXScrollerComponent.m
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Component/WXScrollerComponent.m b/ios/sdk/WeexSDK/Sources/Component/WXScrollerComponent.m
index bf8021f..a7d042e 100644
--- a/ios/sdk/WeexSDK/Sources/Component/WXScrollerComponent.m
+++ b/ios/sdk/WeexSDK/Sources/Component/WXScrollerComponent.m
@@ -33,7 +33,6 @@
@implementation WXScrollerComponnetView
@end;
-// add a category compatible for new API
@interface WXScrollerComponnetView(WXScrollerComponnetView_ContentInsetAdjustmentBehavior)
@property(nonatomic, assign)NSUInteger contentInsetAdjustmentBehavior;
@end
@@ -166,7 +165,10 @@ WX_EXPORT_METHOD(@selector(resetLoadmore))
scrollView.alwaysBounceHorizontal = _alwaysScrollableHorizontal;
scrollView.alwaysBounceVertical = _alwaysScrollableVertical;
if (WX_SYS_VERSION_GREATER_THAN_OR_EQUAL_TO(@"11.0")) {
- // now use the runtime to forbid the contentInset being Adjusted
+ // now use the runtime to forbid the contentInset being Adjusted.
+ // here we add a category for scoller component view class compatible for new API,
+ // as we are concerning about weexSDK build as framework by Xcode8, using in Xcode9 project,
+ // so the the macro __IPHONE_11_0 will be useless in this case.
scrollView.contentInsetAdjustmentBehavior = 2;
}
[08/50] [abbrv] incubator-weex git commit: * [jsfm] upgrade
weex-js-framework to 0.22.5
Posted by gu...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b5b506f6/pre-build/native-bundle-main.js
----------------------------------------------------------------------
diff --git a/pre-build/native-bundle-main.js b/pre-build/native-bundle-main.js
index d43b6ec..c5d06cf 100644
--- a/pre-build/native-bundle-main.js
+++ b/pre-build/native-bundle-main.js
@@ -1,8 +1,8 @@
-(this.nativeLog||function(e){console.log(e)})("START JS FRAMEWORK 0.22.4, Build 2017-09-25 11:20."),this.getJSFMVersion=function(){return"0.22.4"};var global=this,process={env:{}},setTimeout=global.setTimeout;!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t():"function"==typeof define&&define.amd?define(t):t()}(0,function(){"use strict";function e(e){Hn.Document=e.Document,Hn.Element=e.Element,Hn.Comment=e.Comment,Hn.sendTasks=e.sendTasks}function t(e,t,n,r,o){void 0===n&&(n={}),void 0===r&&(r={}),void 0===o&&(o={});var i=new Hn.Document(e,n.bundleUrl),a={},s={id:e,data:r,document:i,callbacks:a},u=0;i.addCallback=function(e){return u++,a[u]=e,u},i.handleCallback=function(e,t,n){var r=a[e];return n&&delete a[e],r(t)},Gn[e]=s;var c=Object.assign({Document:Hn.Document,Element:Hn.Element,Comment:Hn.Comment,sendTasks:function(t){return Hn.sendTasks(e,t,-1)},options:n,document:i},o),l=[],f=[];for(var p in c)l.push(p),f.push(c[p]);return l.push(t),(new(Function.prototy
pe.bind.apply(Function,[null].concat(l)))).apply(void 0,f),Hn.sendTasks(e,[{module:"dom",method:"createFinish",args:[]}],-1),s}function n(e){delete Gn[e]}function r(e){return Gn[e].document.body.toJSON()}function o(e,t){var n={fireEvent:function(e,t,n,r,o){var i=Gn[e],a=i.document,s=a.getRef(t);return a.fireEvent(s,n,r,o)},callback:function(e,t,n,r){return Gn[e].document.handleCallback(t,n,r)}};if((Gn[e]||{}).document&&Array.isArray(t)){var r=[];return t.forEach(function(t){var o=n[t.method],i=[].concat(t.args);"function"==typeof o&&(i.unshift(e),r.push(o.apply(void 0,i)))}),r}}function i(e){return e&&e.__esModule?e.default:e}function a(e,t){return t={exports:{}},e(t,t.exports),t.exports}function s(e){console.warn("[JS Framework] Vm#$ is deprecated, please use Vm#$vm instead");var t=this._ids[e];if(t)return t.vm}function u(e){var t=this._ids[e];if(t)return t.el}function c(e){var t=this._ids[e];if(t)return t.vm}function l(e){return this._app.differ.then(function(){e()})}function f(e,
t){console.warn("[JS Framework] Vm#$scrollTo is deprecated, please use \"require('@weex-module/dom').scrollTo(el, options)\" instead");var n=this.$el(e);if(n){this._app.requireModule("dom").scrollToElement(n.ref,{offset:t})}}function p(e,t,n){var r=this,o=this.$el(e);if(o&&t&&t.styles){this._app.requireModule("animation").transition(o.ref,t,function(){for(var e=[],i=arguments.length;i--;)e[i]=arguments[i];r._setStyle(o,t.styles),n&&n.apply(void 0,e)})}}function d(e){var t=this._app.options;return"function"==typeof e&&(console.warn("[JS Framework] the callback of Vm#$getConfig(callback) is deprecated, this api now can directly RETURN config info."),e(t)),t}function h(e,t){console.warn("[JS Framework] Vm#$sendHttp is deprecated, please use \"require('@weex-module/stream').sendHttp(params, callback)\" instead"),this._app.requireModule("stream").sendHttp(e,t)}function v(e){console.warn("[JS Framework] Vm#$openURL is deprecated, please use \"require('@weex-module/event').openURL(url)\" i
nstead"),this._app.requireModule("event").openURL(e)}function y(e){console.warn("[JS Framework] Vm#$setTitle is deprecated, please use \"require('@weex-module/pageInfo').setTitle(title)\" instead"),this._app.requireModule("pageInfo").setTitle(e)}function m(e,t){for(var n=[],r=arguments.length-2;r-- >0;)n[r]=arguments[r+2];console.warn("[JS Framework] Vm#$call is deprecated, please use \"require('@weex-module/moduleName')\" instead");var o=this._app.requireModule(e);o&&o[t]&&o[t].apply(o,n)}function _(e){for(var t=[],n=arguments.length-1;n-- >0;)t[n]=arguments[n+1];if("function"==typeof Object.assign)Object.assign.apply(Object,[e].concat(t));else{var r=t.shift();for(var o in r)e[o]=r[o];t.length&&_.apply(void 0,[e].concat(t))}return e}function g(e,t,n,r){Object.defineProperty(e,t,{value:n,enumerable:!!r,writable:!0,configurable:!0})}function b(e,t){if(e.length){var n=e.indexOf(t);if(n>-1)return e.splice(n,1)}}function w(e,t){return hr.call(e,t)}function x(e,t){return function(n){var
r=arguments.length;return r?r>1?e.apply(t,arguments):e.call(t,n):e.call(t)}}function E(e){return null!==e&&"object"==typeof e}function O(e){return vr.call(e)===yr}function S(e){var t=(e+"").charCodeAt(0);return 36===t||95===t}function C(){return"object"==typeof nativeSet?nativeSet.create():new Jn}function k(e){var t=Object.prototype.toString.call(e);return t.substring(8,t.length-1).toLowerCase()}function j(e){return e.replace(_r,"").replace(gr,"")}function A(e){return e.replace(wr,"")}function I(){this.id=Cr++,this.subs=[]}function T(e){I.target&&kr.push(I.target),I.target=e}function N(){I.target=kr.pop()}function P(){I.target=null,kr=[]}function M(e,t,n,r){r&&_(this,r);var o="function"==typeof t;this.vm=e,e._watchers.push(this),this.expression=t,this.cb=n,this.id=++jr,this.active=!0,this.dirty=this.lazy,this.deps=[],this.newDeps=[],this.depIds=C(),this.newDepIds=C(),o&&(this.getter=t),this.value=this.lazy?void 0:this.get(),this.queued=this.shallow=!1}function $(e,t){var n,r,o,i;if(
t||(t=Ar,t.clear()),o=Array.isArray(e),i=E(e),o||i){if(e.__ob__){var a=e.__ob__.dep.id;if(t.has(a))return;t.add(a)}if(o)for(n=e.length;n--;)$(e[n],t);else if(i)for(r=Object.keys(e),n=r.length;n--;)$(e[r[n]],t)}}function R(e){if(this.value=e,this.dep=new I,g(e,"__ob__",this),Array.isArray(e)){(mr?D:F)(e,Tr,Nr),this.observeArray(e)}else this.walk(e)}function D(e,t){e.__proto__=t}function F(e,t,n){for(var r=0,o=n.length;r<o;r++){var i=n[r];g(e,i,t[i])}}function L(e,t){if(E(e)){var n;return w(e,"__ob__")&&e.__ob__ instanceof R?n=e.__ob__:(Array.isArray(e)||O(e))&&Object.isExtensible(e)&&!e._isVue&&(n=new R(e)),n&&t&&n.addVm(t),n}}function W(e,t,n){var r=new I,o=Object.getOwnPropertyDescriptor(e,t);if(!o||!1!==o.configurable){var i=o&&o.get,a=o&&o.set,s=L(n);Object.defineProperty(e,t,{enumerable:!0,configurable:!0,get:function(){var t=i?i.call(e):n;if(I.target&&(r.depend(),s&&s.dep.depend(),Array.isArray(t)))for(var o=void 0,a=0,u=t.length;a<u;a++)(o=t[a])&&o.__ob__&&o.__ob__.dep.depend(
);return t},set:function(t){t!==(i?i.call(e):n)&&(a?a.call(e,t):n=t,s=L(t),r.notify())}})}}function U(e,t,n){if(Array.isArray(e))return e.splice(t,1,n);if(w(e,t))return void(e[t]=n);if(e._isVue)return void U(e._data,t,n);var r=e.__ob__;if(!r)return void(e[t]=n);if(r.convert(t,n),r.dep.notify(),r.vms)for(var o=r.vms.length;o--;){var i=r.vms[o];B(i,t)}return n}function V(e,t){if(w(e,t)){delete e[t];var n=e.__ob__;if(!n)return void(e._isVue&&delete e._data[t]);if(n.dep.notify(),n.vms)for(var r=n.vms.length;r--;){var o=n.vms[r];q(o,t)}}}function B(e,t){(Pr.indexOf(t)>-1||!S(t))&&Object.defineProperty(e,t,{configurable:!0,enumerable:!0,get:function(){return e._data[t]},set:function(n){e._data[t]=n}})}function q(e,t){S(t)||delete e[t]}function z(e){e._watchers=[],J(e),G(e),K(e)}function J(e){var t=e._data;O(t)||(t={});for(var n=Object.keys(t),r=n.length;r--;)B(e,n[r]);L(t,e)}function H(){}function G(e){var t=e._computed;if(t)for(var n in t){var r=t[n],o={enumerable:!0,configurable:!0};"fu
nction"==typeof r?(o.get=X(r,e),o.set=H):(o.get=r.get?!1!==r.cache?X(r.get,e):x(r.get,e):H,o.set=r.set?x(r.set,e):H),Object.defineProperty(e,n,o)}}function X(e,t){var n=new M(t,e,null,{lazy:!0});return function(){return n.dirty&&n.evaluate(),I.target&&n.depend(),n.value}}function K(e){var t=e._methods;if(t)for(var n in t)e[n]=t[n]}function Z(e){var t=e.type,n=$r[t];if("object"==typeof n)for(var r in n)if(null==e[r])e[r]=n[r];else if("object"===k(e[r])&&"object"===k(n[r]))for(var o in n[r])null==e[r][o]&&(e[r][o]=n[r][o])}function Q(e,t,n){oe(e,t,n.id,e),ie(e,t,n.attr),se(e,t,n.classList),ue(e,t,n.style),le(e,t,n.events)}function Y(e,t,n,r){t=t||{},n=n||{};var o=t._options||{},i=o.props;Array.isArray(i)&&(i=i.reduce(function(e,t){return e[t]=!0,e},{})),te(r,i,e,t),te(n.attr,i,e,t)}function ee(e,t,n,r){void 0===r&&(r={}),re(n.classList,e,t),ne(n.style,e,t),r.children?r.children[r.children.length-1]._vm=t:r._vm=t}function te(e,t,n,r){if(e){for(var o in e)!function(o){if(!t||t[o]){var i
=e[o];if("function"==typeof i){var a=de(n,i,function(e){r[o]=e});r[o]=a}else r[o]=i}}(o)}}function ne(e,t,n){for(var r in e)!function(r){var o=e[r];if("function"==typeof o){var i=de(t,o,function(e){n._rootEl&&n._rootEl.setStyle(r,e)});n._rootEl.setStyle(r,i)}else n._rootEl&&n._rootEl.setStyle(r,o)}(r)}function re(e,t,n){function r(e,t){"array"===k(e)&&e.unshift(t)}var o=t._options&&t._options.style||{};if(n._rootEl){var i="@originalRootEl";if(o[i]=n._rootEl.classStyle,"function"==typeof e){var a=de(t,e,function(e){r(e,i),ae(n._rootEl,o,e)});r(a,i),ae(n._rootEl,o,a)}else null!=e&&(r(e,i),ae(n._rootEl,o,e))}}function oe(e,t,n,r){var o=Object.create(null);if(Object.defineProperties(o,{vm:{value:r,writable:!1,configurable:!1},el:{get:function(){return t||r._rootEl},configurable:!1}}),"function"==typeof n){var i=n;n=i.call(e),(n||0===n)&&(e._ids[n]=o),de(e,i,function(t){t&&(e._ids[t]=o)})}else n&&"string"==typeof n&&(e._ids[n]=o)}function ie(e,t,n){fe(e,t,"attr",n)}function ae(e,t,n){"st
ring"==typeof n&&(n=n.split(/\s+/)),n.forEach(function(e,t){n.splice.apply(n,[t,1].concat(e.split(/\s+/)))});for(var r={},o=n.length,i=0;i<o;i++)!function(e){var o=t[n[e]];o&&Object.keys(o).forEach(function(e){r[e]=o[e]})}(i);e.setClassStyle(r)}function se(e,t,n){if("function"==typeof n||Array.isArray(n)){if(Array.isArray(n)&&!n.length)return void t.setClassStyle({});var r=e._options&&e._options.style||{};if("function"==typeof n){var o=de(e,n,function(e){ae(t,r,e)});ae(t,r,o)}else ae(t,r,n)}}function ue(e,t,n){fe(e,t,"style",n)}function ce(e,t,n,r){t.addEvent(n,x(r,e))}function le(e,t,n){if(n)for(var r=Object.keys(n),o=r.length;o--;){var i=r[o],a=n[i];"string"==typeof a&&((a=e[a])||console.warn('[JS Framework] The event handler "'+a+'" is not defined.')),ce(e,t,i,a)}}function fe(e,t,n,r){if(r)for(var o=Object.keys(r),i=o.length;i--;){var a=o[i],s=r[a];"function"==typeof s?pe(e,t,n,a,s):t[Rr[n]](a,s)}}function pe(e,t,n,r,o){var i=Rr[n],a=de(e,o,function(n){function o(){t[i](r,n)}var
a=e&&e._app&&e._app.differ;a?a.append("element",t.depth||0,t.ref,o):o()});t[i](r,a)}function de(e,t,n){return e._static?t.call(e,e):new M(e,t,function(e,t){"object"!=typeof e&&e===t||n(e)}).value}function he(e,t){return e._app.doc.createBody(t)}function ve(e,t){return e._app.doc.createElement(t)}function ye(e,t){var n=me(e),r=_e(e),o=Dr++;if(t.element){var i=t.updateMark;i?(i.element&&(i=i.end),t.element.insertAfter(r,i),t.element.insertAfter(n,i),t.updateMark=r):(t.element.insertBefore(n,t.end),t.element.insertBefore(r,t.end)),t=t.element}else t.appendChild(n),t.appendChild(r);return{start:n,end:r,element:t,blockId:o}}function me(e){return e._app.doc.createComment("start")}function _e(e){return e._app.doc.createComment("end")}function ge(e,t,n){if(n.element){var r=n.end,o=n.updateMark;if(n.children&&n.children.push(t),o){var i=be(e,t,o);return n.updateMark=t.element?t.end:t,i}if(!t.element)return n.element.insertBefore(t,r);n.element.insertBefore(t.start,r),n.element.insertBefore(t
.end,r)}else{if(!t.element)return n.appendChild(t);n.appendChild(t.start),n.appendChild(t.end)}}function be(e,t,n){return t.element?xe(t,n):we(t,n)}function we(e,t){var n=t.parentNode;if(n)return n.insertAfter(e,t)}function xe(e,t){var n=t.parentNode;if(n){for(var r,o=e.start,i=[o];o&&o!==e.end;)o=o.nextSibling,i.push(o);var a=t;return i.every(function(e){return r=n.insertAfter(e,a),a=e,-1!==r}),r}}function Ee(e,t,n){void 0===n&&(n=!1),t.element?Se(t,n):Oe(t),t._vm&&t._vm.$emit("hook:destroyed")}function Oe(e){var t=e.parentNode;t&&t.removeChild(e)}function Se(e,t){void 0===t&&(t=!1);for(var n=[],r=e.start.nextSibling;r&&r!==e.end;)n.push(r),r=r.nextSibling;t||Oe(e.start),n.forEach(function(e){Oe(e)}),t||Oe(e.end)}function Ce(e){var t=e._options||{},n=t.template||{};t.replace?n.children&&1===n.children.length?ke(e,n.children[0],e._parentEl):ke(e,n.children,e._parentEl):ke(e,n,e._parentEl),console.debug('[JS Framework] "ready" lifecycle in Vm('+e._type+")"),e.$emit("hook:ready"),e._r
eady=!0}function ke(e,t,n,r){if(-1!==(e._app||{}).lastSignal){if(t.attr&&t.attr.hasOwnProperty("static")&&(e._static=!0),je(t))return void Me(e,t,n,r);if(r=r||{},Ae(t))return console.debug('[JS Framework] compile "content" block by',t),void(e._content=ye(e,n));if(Ie(t,r))return console.debug('[JS Framework] compile "repeat" logic by',t),void("document"===n.type?console.warn("[JS Framework] The root element does't support `repeat` directive!"):$e(e,t,n));if(Te(t,r))return console.debug('[JS Framework] compile "if" logic by',t),void("document"===n.type?console.warn("[JS Framework] The root element does't support `if` directive!"):Re(e,t,n,r));var o=r.type||t.type;if(Ne(o,r))return void De(e,t,n,o,r);var i=o,a=Pe(e,t,i);if(a)return console.debug("[JS Framework] compile composed component by",t),void Fe(e,a,t,n,i,r);console.debug("[JS Framework] compile native component by",t),Le(e,t,n,i)}}function je(e){return Array.isArray(e)}function Ae(e){return"content"===e.type||"slot"===e.type}fu
nction Ie(e,t){return!t.hasOwnProperty("repeat")&&e.repeat}function Te(e,t){return!t.hasOwnProperty("shown")&&e.shown}function Ne(e,t){return"function"==typeof e&&!t.hasOwnProperty("type")}function Pe(e,t,n){var r;return e._app&&e._app.customComponentMap&&(r=e._app.customComponentMap[n]),e._options&&e._options.components&&(r=e._options.components[n]),t.component&&(r=r||{}),r}function Me(e,t,n,r){var o=ye(e,n);t.forEach(function(t){ke(e,t,o,r)})}function $e(e,t,n){var r=t.repeat,o="function"==typeof r,i=r.getter||r.expression||r;"function"!=typeof i&&(i=function(){return[]});var a=r.key||"$index",s=r.value||"$value",u=r.trackBy||t.trackBy||t.attr&&t.attr.trackBy,c=ye(e,n);c.children=[],c.data=[],c.vms=[],Ue(e,t,c,{getter:i,key:a,value:s,trackBy:u,oldStyle:o})}function Re(e,t,n,r){var o={shown:!0},i=ye(e,n);n.element&&n.children&&n.children.push(i),r.repeat&&(o.repeat=r.repeat),Ve(e,t,i,o)}function De(e,t,n,r,o){var i=r.call(e),a=_({type:i},o),s=ye(e,n);n.element&&n.children&&n.childr
en.push(s),de(e,r,function(n){var r=_({type:n},o);Ee(e,s,!0),ke(e,t,s,r)}),ke(e,t,s,a)}function Fe(e,t,n,r,o,i){var a=e.constructor,s=new a(o,t,e,r,void 0,{"hook:init":function(){e._static&&(this._static=e._static),oe(e,null,n.id,this),this._externalBinding={parent:e,template:n}},"hook:created":function(){Y(e,this,n,i.repeat)},"hook:ready":function(){this._content&&We(e,n,this._content)}});ee(e,s,n,r)}function Le(e,t,n,r){Z(t);var o;if("_documentElement"===n.ref?(console.debug("[JS Framework] compile to create body for "+r),o=he(e,r)):(console.debug("[JS Framework] compile to create element for "+r),o=ve(e,r)),!e._rootEl){e._rootEl=o;var i=e._externalBinding||{},a=i.template,s=i.parent;if(a&&a.events&&s&&o)for(var u in a.events){var c=s[a.events[u]];c&&o.addEvent(u,x(c,s))}}Q(e,o,t),t.attr&&t.attr.append&&(t.append=t.attr.append),t.append&&(o.attr=o.attr||{},o.attr.append=t.append);var l="tree"===t.append,f=e._app||{};-1===f.lastSignal||l||(console.debug("[JS Framework] compile to a
ppend single node for",o),f.lastSignal=ge(e,o,n)),-1!==f.lastSignal&&We(e,t,o),-1!==f.lastSignal&&l&&(console.debug("[JS Framework] compile to append whole tree for",o),f.lastSignal=ge(e,o,n))}function We(e,t,n){var r=e._app||{},o=t.children;o&&o.length&&o.every(function(t){return ke(e,t,n),-1!==r.lastSignal})}function Ue(e,t,n,r){function o(e,r,o){var a;c?(a=e,E(e)?(a[l]=r,a.hasOwnProperty("INDEX")||Object.defineProperty(a,"INDEX",{value:function(){console.warn('[JS Framework] "INDEX" in repeat is deprecated, please use "$index" instead')}})):(console.warn("[JS Framework] Each list item must be an object in old-style repeat, please use `repeat={{v in list}}` instead."),a={},a[l]=r,a[f]=e)):(a={},a[l]=r,a[f]=e);var s=qe(o,a);i.push(s),ke(s,t,n,{repeat:e})}var i=n.vms,a=n.children,s=r.getter,u=r.trackBy,c=r.oldStyle,l=r.key,f=r.value,p=Be(e,n,s,"repeat",function(t){if(console.debug('[JS Framework] the "repeat" item has changed',t),n&&t){var r=a.slice(),s=i.slice(),p=n.data.slice(),d=
{},h={};t.forEach(function(e,t){var n=u?e[u]:c?e[l]:t;null!=n&&""!==n&&(d[n]=e)});var v=[];p.forEach(function(t,n){var o=u?t[u]:c?t[l]:n;d.hasOwnProperty(o)?(h[o]={item:t,index:n,key:o,target:r[n],vm:s[n]},v.push(t)):Ee(e,r[n])}),a.length=0,i.length=0,n.data=t.slice(),n.updateMark=n.start,t.forEach(function(t,r){var s=u?t[u]:c?t[l]:r,p=h[s];p?(p.item===v[0]?v.shift():(v.$remove(p.item),be(e,p.target,n.updateMark,!0)),a.push(p.target),i.push(p.vm),c?p.vm=t:p.vm[f]=t,p.vm[l]=r,n.updateMark=p.target):o(t,r,e)}),delete n.updateMark}});n.data=p.slice(0),p.forEach(function(t,n){o(t,n,e)})}function Ve(e,t,n,r){var o=Be(e,n,t.shown,"shown",function(o){console.debug('[JS Framework] the "if" item was changed',o),n&&!!n.display!=!!o&&(n.display=!!o,o?ke(e,t,n,r):Ee(e,n,!0))});n.display=!!o,o&&ke(e,t,n,r)}function Be(e,t,n,r,o){var i=e&&e._app&&e._app.differ,a={},s=(t.element.depth||0)+1;return de(e,n,function(e){a.latestValue=e,i&&!a.recorded&&i.append(r,s,t.blockId,function(){var e=a.latestVa
lue;o(e),a.recorded=!1,a.latestValue=void 0}),a.recorded=!0})}function qe(e,t){var n=Object.create(e);return n._data=t,J(n),G(n),n._realParent=e,e._static&&(n._static=e._static),n}function ze(e,t){if(t instanceof ze)return t;this.timestamp=Date.now(),this.detail=t,this.type=e;var n=!1;this.stop=function(){n=!0},this.hasStopped=function(){return n}}function Je(e,t){var n=this,r=this._vmEvents,o=r[e];if(o){var i=new ze(e,t);o.forEach(function(e){e.call(n,i)})}}function He(e,t){var n=new ze(e,t);this.$emit(e,n),!n.hasStopped()&&this._parent&&this._parent.$dispatch&&this._parent.$dispatch(e,n)}function Ge(e,t){var n=new ze(e,t);this.$emit(e,n),!n.hasStopped()&&this._childrenVms&&this._childrenVms.forEach(function(t){t.$broadcast(e,n)})}function Xe(e,t){if(e&&"function"==typeof t){var n=this._vmEvents,r=n[e]||[];r.push(t),n[e]=r,"hook:ready"===e&&this._ready&&this.$emit("hook:ready")}}function Ke(e,t){if(e){var n=this._vmEvents;if(!t)return void delete n[e];var r=n[e];r&&r.$remove(t)}}fu
nction Ze(e,t){var n=e._options||{},r=n.events||{};for(var o in r)e.$on(o,r[o]);for(var i in t)e.$on(i,t[i]);Fr.forEach(function(t){e.$on("hook:"+t,n[t])})}function Qe(e,t,n,r,o,i){n=n||{},this._parent=n._realParent?n._realParent:n,this._app=n._app||{},n._childrenVms&&n._childrenVms.push(this),!t&&this._app.customComponentMap&&(t=this._app.customComponentMap[e]),t=t||{};var a=t.data||{};this._options=t,this._methods=t.methods||{},this._computed=t.computed||{},this._css=t.style||{},this._ids={},this._vmEvents={},this._childrenVms=[],this._type=e,Ze(this,i),console.debug('[JS Framework] "init" lifecycle in Vm('+this._type+")"),this.$emit("hook:init"),this._inited=!0,this._data="function"==typeof a?a():a,o&&_(this._data,o),z(this),console.debug('[JS Framework] "created" lifecycle in Vm('+this._type+")"),this.$emit("hook:created"),this._created=!0,t.methods&&t.methods.ready&&(console.warn('"exports.methods.ready" is deprecated, please use "exports.created" instead'),t.methods.ready.call
(this)),this._app.doc&&(this._parentEl=r||this._app.doc.documentElement,Ce(this))}function Ye(e,t){for(var n in e)!function(n){var r=Lr[n];r||(r={},Lr[n]=r),e[n].forEach(function(e){"string"==typeof e&&(e={name:e}),r[e.name]&&!t||(r[e.name]=e)})}(n)}function et(e,t){var n=e.prototype;for(var r in t)n.hasOwnProperty(r)||(n[r]=t[r])}function tt(e,t){var n=Lr[t],r={};for(var o in n)!function(n){Object.defineProperty(r,n,{configurable:!0,enumerable:!0,get:function(){return function(){for(var r=[],o=arguments.length;o--;)r[o]=arguments[o];return e.callTasks({module:t,method:n,args:r})}},set:function(r){if("function"==typeof r)return e.callTasks({module:t,method:n,args:[r]})}})}(o);return r}function nt(e,t){return e.customComponentMap[t]}function rt(e,t,n){var r=e.customComponentMap;if(r[t])return void console.error("[JS Framework] define a component("+t+") that already exists");r[t]=n}function ot(e){if(Wr.valid(e))return e;e="string"==typeof e?e:"";for(var t=e.split("."),n=0,r=[];n<3;){v
ar o="string"==typeof t[n]&&t[n]?t[n]:"0";r.push(o),n++}return r.join(".")}function it(e,t,n){var r={isDowngrade:!0,errorType:1,code:1e3},o=e.toLowerCase();return r.errorMessage=function(e,t,n){return"Downgrade["+e+"] :: deviceInfo "+t+" matched criteria "+n}(e,t,n),o.indexOf("osversion")>=0?r.code=1001:o.indexOf("appversion")>=0?r.code=1002:o.indexOf("weexversion")>=0?r.code=1003:o.indexOf("devicemodel")>=0&&(r.code=1004),r}function at(e,t){t=t||global.WXEnvironment,t=O(t)?t:{};var n={isDowngrade:!1};if("function"===k(e)){var r=e.call(this,t,{semver:Wr,normalizeVersion:ot});r=!!r,n=r?it("custom","","custom params"):n}else{e=O(e)?e:{};var o=t.platform||"unknow",i=o.toLowerCase(),a=e[i]||{};for(var s in t){var u=s,c=u.toLowerCase(),l=t[s],f=c.indexOf("version")>=0,p=c.indexOf("devicemodel")>=0,d=a[s];if(d&&f){var h=ot(d),v=ot(t[s]);if(Wr.satisfies(v,h)){n=it(u,l,d);break}}else if(p){var y="array"===k(d)?d:[d];if(y.indexOf(l)>=0){n=it(u,l,d);break}}}}return n}function st(e,t){if(void
0===t&&(t={}),e&&e.callTasks)return e.callTasks([{module:"meta",method:"setViewport",args:[t]}])}function ut(e,t,n,r){console.debug("[JS Framework] bootstrap for "+t);var o;if(xr(t))o=j(t);else{if(!Sr(t))return new Error("Wrong component name: "+t);if(o=A(t),!nt(e,o))return new Error("It's not a component: "+t)}if(n=O(n)?n:{},"string"==typeof n.transformerVersion&&"string"==typeof global.transformerVersion&&!Wr.satisfies(n.transformerVersion,global.transformerVersion))return new Error("JS Bundle version: "+n.transformerVersion+" not compatible with "+global.transformerVersion);var i=at(n.downgrade);if(i.isDowngrade)return e.callTasks([{module:"instanceWrap",method:"error",args:[i.errorType,i.code,i.errorMessage]}]),new Error("Downgrade["+i.code+"]: "+i.errorMessage);n.viewport&&st(e,n.viewport),e.vm=new Qe(o,null,{_app:e},null,r)}function ct(e,t,n){console.warn("[JS Framework] Register is deprecated, please install lastest transformer."),rt(e,t,n)}function lt(e,t){console.debug("[JS
Framework] Refresh with",t,"in instance["+e.id+"]");var n=e.vm;return n&&t?("function"==typeof n.refreshData?n.refreshData(t):_(n,t),e.differ.flush(),void e.doc.taskCenter.send("dom",{action:"refreshFinish"},[])):new Error('invalid data "'+t+'"')}function ft(e){console.debug("[JS Framework] Destory an instance("+e.id+")"),e.vm&&pt(e.vm),e.id="",e.options=null,e.blocks=null,e.vm=null,e.doc.taskCenter.destroyCallback(),e.doc.destroy(),e.doc=null,e.customComponentMap=null,e.commonModules=null}function pt(e){if(delete e._app,delete e._computed,delete e._css,delete e._data,delete e._ids,delete e._methods,delete e._options,delete e._parent,delete e._parentEl,delete e._rootEl,e._watchers){for(var t=e._watchers.length;t--;)e._watchers[t].teardown();delete e._watchers}if(e._childrenVms){for(var n=e._childrenVms.length;n--;)pt(e._childrenVms[n]);delete e._childrenVms}console.debug('[JS Framework] "destroyed" lifecycle in Vm('+e._type+")"),e.$emit("hook:destroyed"),delete e._type,delete e._vm
Events}function dt(e){var t=e.doc||{},n=t.body||{};return n.toJSON?n.toJSON():{}}function ht(e,t,n,r,o){if(console.debug('[JS Framework] Fire a "'+n+'" event on an element('+t+") in instance("+e.id+")"),Array.isArray(t))return void t.some(function(t){return!1!==ht(e,t,n,r)});var i=e.doc.getRef(t);if(i){var a=e.doc.fireEvent(i,n,r,o);return e.differ.flush(),e.doc.taskCenter.send("dom",{action:"updateFinish"},[]),a}return new Error('invalid element reference "'+t+'"')}function vt(e,t,n,r){console.debug("[JS Framework] Invoke a callback("+t+") with",n,"in instance("+e.id+")");var o=e.doc.taskCenter.callback(t,n,r);return yt(e),e.doc.taskCenter.send("dom",{action:"updateFinish"},[]),o}function yt(e){e.differ.flush()}function mt(e,t){var n;return"array"!==k(t)&&(t=[t]),t.forEach(function(t){n=e.doc.taskCenter.send("module",{module:t.module,method:t.method},t.args)}),n}function _t(e,t,n,r){console.debug("[JS Framework] Intialize an instance with:\n",n);var o,i=function(){for(var t=[],n=ar
guments.length;n--;)t[n]=arguments[n];return Ur.apply(void 0,[e].concat(t))},a=function(t,r,i){o=ut(e,t,r,i||n),yt(e),e.doc.listener.createFinish(),console.debug("[JS Framework] After intialized an instance("+e.id+")")},s=Qe,u=function(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];return ct.apply(void 0,[e].concat(t))},c=function(t,n){o=ut(e,t,{},n)},l=function(t){return function(n){o=ut(e,t,{},n)}},f=e.doc,p=function(t){return e.requireModule(j(t))},d={config:e.options,define:i,bootstrap:a,requireModule:p,document:f,Vm:s};Object.freeze(d);var h;"function"==typeof t?h=t.toString().substr(12):t&&(h=t.toString()),h='(function(global){\n\n"use strict";\n\n '+h+" \n\n})(Object.create(this))";var v=global.WXEnvironment,y={};if(v&&"Web"!==v.platform){var m=e.requireModule("timer");Object.assign(y,{setTimeout:function(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];var r=function(){t[0].apply(t,t.slice(2))};return m.setTimeout(r,t[1]),e.doc.taskCenter.callbackManager.la
stCallbackId.toString()},setInterval:function(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];var r=function(){t[0].apply(t,t.slice(2))};return m.setInterval(r,t[1]),e.doc.taskCenter.callbackManager.lastCallbackId.toString()},clearTimeout:function(e){m.clearTimeout(e)},clearInterval:function(e){m.clearInterval(e)}})}var _=Object.assign({define:i,require:l,bootstrap:a,register:u,render:c,__weex_define__:i,__weex_bootstrap__:a,__weex_document__:f,__weex_require__:p,__weex_viewmodel__:s,weex:d},y,r);return bt(_,h)||gt(_,h),o}function gt(e,t){var n=[],r=[];for(var o in e)n.push(o),r.push(e[o]);return n.push(t),(new(Function.prototype.bind.apply(Function,[null].concat(n)))).apply(void 0,r)}function bt(e,t){if("function"!=typeof compileAndRunBundle)return!1;var n=void 0,r=!1,o="(function (",i=[],a=[];for(var s in e)i.push(s),a.push(e[s]);for(var u=0;u<i.length-1;++u)o+=i[u],o+=",";o+=i[i.length-1],o+=") {",o+=t,o+="} )";try{var c=e.weex||{},l=c.config||{};n=compileAndRunBundle(o,
l.bundleUrl,l.bundleDigest,l.codeCachePath),n&&"function"==typeof n&&(n.apply(void 0,a),r=!0)}catch(e){console.error(e)}return r}function wt(e,t){var n=e[t];for(var r in n)n[r]()}function xt(e,t){var n=e[t];for(var r in n){n[r].forEach(function(e){e()})}}function Et(e,t){this.id=e,this.options=t||{},this.vm=null,this.customComponentMap={},this.commonModules={},this.doc=new Mr.Document(e,this.options.bundleUrl,null,Mr.Listener),this.differ=new Vr(e)}function Ot(e,t,n,r,o){var i=o||{},a=i.services;P();var s=Br[e];n=n||{};var u;return s?u=new Error('invalid instance id "'+e+'"'):(s=new Et(e,n),Br[e]=s,u=_t(s,t,r,a)),u instanceof Error?u:s}function St(e){Mr.Document=e.Document,Mr.Element=e.Element,Mr.Comment=e.Comment,Mr.sendTasks=e.sendTasks,Mr.Listener=e.Listener}function Ct(e,t){var n=Br[e];return n?lt(n,t):new Error('invalid instance id "'+e+'"')}function kt(e){"function"==typeof markupState&&markupState(),P();var t=Br[e];if(!t)return new Error('invalid instance id "'+e+'"');ft(t),d
elete Br[e];var n=Math.round(e);if(n>0){n%18||"function"!=typeof notifyTrimMemory||notifyTrimMemory()}return Br}function jt(e){Array.isArray(e)&&e.forEach(function(e){e&&("string"==typeof e?qr[e]=!0:"object"==typeof e&&"string"==typeof e.type&&(qr[e.type]=e))})}function At(e){"object"==typeof e&&Ye(e)}function It(e){"object"==typeof e&&et(Qe,e)}function Tt(e,t){if(Br[e]&&Array.isArray(t)){var n=[];return t.forEach(function(t){var r=zr[t.method],o=[].concat(t.args);"function"==typeof r&&(o.unshift(e),n.push(r.apply(void 0,o)))}),n}return new Error('invalid instance id "'+e+'" or tasks')}function Nt(e){var t=Br[e];return t?dt(t):new Error('invalid instance id "'+e+'"')}function Pt(e){var t,n;this.promise=new e(function(e,r){if(void 0!==t||void 0!==n)throw TypeError("Bad Promise constructor");t=e,n=r}),this.resolve=Hs(t),this.reject=Hs(n)}function Mt(){if(Rt(),global.WXEnvironment&&"Web"!==global.WXEnvironment.platform)global.console={debug:function(){for(var e=[],t=arguments.length;t-
-;)e[t]=arguments[t];Dt("debug")&&global.nativeLog.apply(global,Ft(e).concat(["__DEBUG"]))},log:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];Dt("log")&&global.nativeLog.apply(global,Ft(e).concat(["__LOG"]))},info:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];Dt("info")&&global.nativeLog.apply(global,Ft(e).concat(["__INFO"]))},warn:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];Dt("warn")&&global.nativeLog.apply(global,Ft(e).concat(["__WARN"]))},error:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];Dt("error")&&global.nativeLog.apply(global,Ft(e).concat(["__ERROR"]))}};else{var e=console.debug,t=console.log,n=console.info,r=console.warn,o=console.error;console.__ori__={debug:e,log:t,info:n,warn:r,error:o},console.debug=function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];Dt("debug")&&console.__ori__.debug.apply(console,e)},console.log=function(){for(var e=[],t=arguments.length;t--;)e[t]=argumen
ts[t];Dt("log")&&console.__ori__.log.apply(console,e)},console.info=function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];Dt("info")&&console.__ori__.info.apply(console,e)},console.warn=function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];Dt("warn")&&console.__ori__.warn.apply(console,e)},console.error=function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];Dt("error")&&console.__ori__.error.apply(console,e)}}}function $t(){Vu={},global.console=Bu}function Rt(){Uu.forEach(function(e){var t=Uu.indexOf(e);Vu[e]={},Uu.forEach(function(n){Uu.indexOf(n)<=t&&(Vu[e][n]=!0)})})}function Dt(e){var t=global.WXEnvironment&&global.WXEnvironment.logLevel||"log";return Vu[t]&&Vu[t][e]}function Ft(e){return e.map(function(e){return e="[object object]"===Object.prototype.toString.call(e).toLowerCase()?JSON.stringify(e):String(e)})}function Lt(){if(void 0===setTimeout&&"function"==typeof zu){var e={},t=0;global.setTimeout=function(n,r){e[++t]=n,zu(t.toString(),r)},
global.setTimeoutCallback=function(t){"function"==typeof e[t]&&(e[t](),delete e[t])}}}function Wt(){global.setTimeout=qu,global.setTimeoutCallback=null}function Ut(){Object.freeze(Object),Object.freeze(Array),Vt(),Object.freeze(Array.prototype),Object.freeze(String.prototype),Object.freeze(Number.prototype),Object.freeze(Boolean.prototype),Bt(),Object.freeze(Date.prototype),Object.freeze(RegExp.prototype)}function Vt(){var e=Object.prototype,t="Object.prototype";qt(e,"__defineGetter__",t),qt(e,"__defineSetter__",t),qt(e,"__lookupGetter__",t),qt(e,"__lookupSetter__",t),qt(e,"constructor",t),qt(e,"hasOwnProperty",t),qt(e,"isPrototypeOf",t),qt(e,"propertyIsEnumerable",t),qt(e,"toLocaleString",t),qt(e,"toString",t),qt(e,"valueOf",t),Object.seal(e)}function Bt(){var e=Error.prototype,t="Error.prototype";qt(e,"name",t),qt(e,"message",t),qt(e,"toString",t),qt(e,"constructor",t),Object.seal(e)}function qt(e,t,n){if(e.hasOwnProperty(t)){var r=e[t];Object.defineProperty(e,t,{get:function(){re
turn r},set:function(r){if(this===e)throw Error("Cannot assign to read only property "+t+" of "+n);return Object.defineProperty(this,t,{value:r,writable:!0}),r}})}}function zt(){return(Ju++).toString()}function Jt(e){var t=Object.prototype.toString.call(e);return t.substring(8,t.length-1)}function Ht(e){if("function"!=typeof btoa)return"";var t=Array.prototype.map.call(new Uint8Array(e),function(e){return String.fromCharCode(e)}).join("");return btoa(t)}function Gt(e){if("function"!=typeof atob)return new ArrayBuffer(0);var t=atob(e),n=new Uint8Array(t.length);return Array.prototype.forEach.call(t,function(e,t){n[t]=e.charCodeAt(0)}),n.buffer}function Xt(e){var t=Jt(e);switch(t){case"Undefined":case"Null":return"";case"RegExp":return e.toString();case"Date":return e.toISOString();case"Number":case"String":case"Boolean":case"Array":case"Object":return e;case"ArrayBuffer":return{"@type":"binary",dataType:t,base64:Ht(e)};case"Int8Array":case"Uint8Array":case"Uint8ClampedArray":case"Int
16Array":case"Uint16Array":case"Int32Array":case"Uint32Array":case"Float32Array":
-case"Float64Array":return{"@type":"binary",dataType:t,base64:Ht(e.buffer)};default:return JSON.stringify(e)}}function Kt(e){if("Object"===Jt(e)){if(e["@type"]&&"binary"===e["@type"])return Gt(e.base64||"");var t={};for(var n in e)t[n]=Kt(e[n]);return t}return"Array"===Jt(e)?e.map(Kt):e}function Zt(e,t){e&&(Gu[e]=t)}function Qt(e){return Gu[e]}function Yt(e){delete Gu[e]}function en(e){var t=Gu[e];return t&&t.taskCenter?t.taskCenter:null}function tn(e,t,n){var r=e.documentElement;if(!(r.pureChildren.length>0||t.parentNode)){var o=r.children,i=o.indexOf(n);i<0?o.push(t):o.splice(i,0,t),1===t.nodeType?("body"===t.role?(t.docId=e.id,t.ownerDocument=e,t.parentNode=r,on(t,r)):(t.children.forEach(function(e){e.parentNode=t}),rn(e,t),t.docId=e.id,t.ownerDocument=e,on(t,r),delete e.nodeMap[t.nodeId]),r.pureChildren.push(t),nn(e,t)):(t.parentNode=r,e.nodeMap[t.ref]=t)}}function nn(e,t){var n=t.toJSON(),r=n.children;delete n.children;var o=e.taskCenter.send("dom",{action:"createBody"},[n]);ret
urn r&&r.forEach(function(t){o=e.taskCenter.send("dom",{action:"addElement"},[n.ref,t,-1])}),o}function rn(e,t){t.role="body",t.depth=1,delete e.nodeMap[t.nodeId],t.ref="_root",e.nodeMap._root=t,e.body=t}function on(e,t){e.parentNode=t,t.docId&&(e.docId=t.docId,e.ownerDocument=t.ownerDocument,e.ownerDocument.nodeMap[e.nodeId]=e,e.depth=t.depth+1),e.children.forEach(function(t){on(t,e)})}function an(e){for(;e;){if(1===e.nodeType)return e;e=e.nextSibling}}function sn(e){for(;e;){if(1===e.nodeType)return e;e=e.previousSibling}}function un(e,t,n,r){n<0&&(n=0);var o=t[n-1],i=t[n];return t.splice(n,0,e),r&&(o&&(o.nextSibling=e),e.previousSibling=o,e.nextSibling=i,i&&(i.previousSibling=e)),n}function cn(e,t,n,r){var o=t.indexOf(e);if(o<0)return-1;if(r){var i=t[o-1],a=t[o+1];i&&(i.nextSibling=a),a&&(a.previousSibling=i)}t.splice(o,1);var s=n;o<=n&&(s=n-1);var u=t[s-1],c=t[s];return t.splice(s,0,e),r&&(u&&(u.nextSibling=e),e.previousSibling=u,e.nextSibling=c,c&&(c.previousSibling=e)),o===s?-
1:n}function ln(e,t,n){var r=t.indexOf(e);if(!(r<0)){if(n){var o=t[r-1],i=t[r+1];o&&(o.nextSibling=i),i&&(i.previousSibling=o)}t.splice(r,1)}}function fn(e,t){if(t&&t.length){var n=function(e){function t(){e.apply(this,arguments)}return e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t,t}(Ku);t.forEach(function(t){n.prototype[t]=function(){for(var n=[],r=arguments.length;r--;)n[r]=arguments[r];var o=en(this.docId);if(o)return o.send("component",{ref:this.ref,component:e,method:t},n)}}),Zu[e]=n}}function pn(e){return Zu[e]}function dn(e){return"String"===Jt(e)?{"@binding":e}:e}function hn(e){for(var t,n,r=[],o=Qu.lastIndex=0;t=Qu.exec(e);){n=t.index,n>o&&r.push(e.slice(o,n));var i=dn(t[1].trim());r.push(i),o=n+t[0].length}return o<e.length&&r.push(e.slice(o)),1===r.length?r[0]:r}function vn(e){if("String"===Jt(e)&&Qu.test(e))return hn(e);if("Object"===Jt(e)){var t={};for(var n in e)t[n]=vn(e[n]);return t}return"Array"===Jt(e)?e.map(vn):e}function
yn(e,t){Qt(e).nodeMap[t.nodeId]=t}function mn(){var e={createFinish:global.callCreateFinish,updateFinish:global.callUpdateFinish,refreshFinish:global.callRefreshFinish,createBody:global.callCreateBody,addElement:global.callAddElement,removeElement:global.callRemoveElement,moveElement:global.callMoveElement,updateAttrs:global.callUpdateAttrs,updateStyle:global.callUpdateStyle,addEvent:global.callAddEvent,removeEvent:global.callRemoveEvent},t=rc.prototype;for(var n in e)!function(n){var r=e[n];t[n]=r?function(e,t){return r.apply(void 0,[e].concat(t))}:function(e,t){return nc(e,[{module:"dom",method:n,args:t}],"-1")}}(n);t.componentHandler=global.callNativeComponent||function(e,t,n,r,o){return nc(e,[{component:o.component,ref:t,method:n,args:r}])},t.moduleHandler=global.callNativeModule||function(e,t,n,r){return nc(e,[{module:t,method:n,args:r}])}}function _n(e,t){bn(e)?console.warn('Service "'+e+'" has been registered already!'):(t=Object.assign({},t),ac.push({name:e,options:t}))}func
tion gn(e){ac.some(function(t,n){if(t.name===e)return ac.splice(n,1),!0})}function bn(e){return wn(e)>=0}function wn(e){return ac.map(function(e){return e.name}).indexOf(e)}function xn(e){var t=sc.exec(e);if(t)try{return JSON.parse(t[1]).framework}catch(e){}return"Weex"}function En(e,t,n){var r=Object.create(null);return r.service=Object.create(null),ac.forEach(function(o){var i=(o.name,o.options),a=i.create;if(a){var s=a(e,t,n);Object.assign(r.service,s),Object.assign(r,s.instance)}}),delete r.service.instance,Object.freeze(r.service),r}function On(e){if(uc[e])return uc[e].framework}function Sn(e,t,n,r){if(uc[e])return new Error('invalid instance id "'+e+'"');var o=xn(t);n=JSON.parse(JSON.stringify(n||{})),n.env=JSON.parse(JSON.stringify(global.WXEnvironment||{}));var i={config:n,created:Date.now(),framework:o};i.services=En(e,i,ic),uc[e]=i;var a=oc[o];return a?a.createInstance(e,t,n,r,i):new Error('invalid bundle type "'+o+'".')}function Cn(e){cc[e]=function(){for(var t=[],n=argum
ents.length;n--;)t[n]=arguments[n];"registerComponents"===e&&kn(t[0]);for(var r in oc){var o=oc[r];o&&o[e]&&o[e].apply(o,t)}}}function kn(e){Array.isArray(e)&&e.forEach(function(e){e&&e.type&&e.methods&&fn(e.type,e.methods)})}function jn(e){cc[e]=function(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];var r=t[0],o=On(r);if(o&&oc[o]){var i=(s=oc[o])[e].apply(s,t),a={framework:o};return"refreshInstance"===e?ac.forEach(function(e){var t=e.options.refresh;t&&t(r,{info:a,runtime:ic})}):"destroyInstance"===e&&(ac.forEach(function(e){var t=e.options.destroy;t&&t(r,{info:a,runtime:ic})}),delete uc[r]),i}return new Error('invalid instance id "'+r+'"');var s}}function An(e,t){cc[t]=function(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];var r=t[0],o=On(r);return o&&oc[o]?(i=oc[o])[e].apply(i,t):new Error('invalid instance id "'+r+'"');var i}}function In(e){ic=e||{},oc=ic.frameworks||{},mn();for(var t in oc){oc[t].init(e)}return["registerComponents","registerModules","regis
terMethods"].forEach(Cn),["destroyInstance","refreshInstance","receiveTasks","getRoot"].forEach(jn),An("receiveTasks","callJS"),cc}function Tn(e,t){return void 0===t&&(t=[]),{module:"dom",method:e,args:t}}function Nn(e,t){var n=t||global.callNative;return"function"!=typeof n&&console.error("[JS Runtime] no default handler"),function(t){Array.isArray(t)||(t=[t]);for(var r=0;r<t.length;r++){var o=Mn(e,t[r],n);if(-1===o)return o}}}function Pn(e,t){return"dom"===e&&pc[t]&&"function"==typeof global[pc[t]]}function Mn(e,t,n){var r=t.module,o=t.method,i=t.args;return Pn(r,o)?global[pc[o]].apply(global,[e].concat(i,["-1"])):n(e,[t],"-1")}function $n(e,t){var n=t.attrs||{};for(var r in n)e.setAttr(r,n[r],!0);var o=t.style||{};for(var i in o)e.setStyle(i,o[i],!0)}function Rn(){Ut(),Object.freeze(hc.Comment),Object.freeze(hc.Listener),Object.freeze(hc.Document.prototype),Object.freeze(hc.Comment.prototype),Object.freeze(hc.Listener.prototype)}function Dn(e,t){void 0===t&&(t={}),this.type=e||"m
essage",this.data=t.data||null,this.origin=t.origin||"",this.source=t.source||null,this.ports=t.ports||[],this.target=null,this.timeStamp=Date.now()}function Fn(){}function Ln(e,t,n,r){console.warn("[Upgrade Warning] $userTrack will be removed in the next version!"),console.warn("[JS Framework] Vm#$userTrack is deprecated, please use \"require('@weex-module/userTrack').commit(type, name, comName, param)\" instead"),this._app.requireModule("userTrack").commit(e,t,n,r)}function Wn(e,t){if(console.warn("[Upgrade Warning] $sendMtop will be removed in the next version!"),console.warn("[JS Framework] Vm#$sendMtop is deprecated, please use \"require('@weex-module/stream').sendMtop(params, callback)\" instead"),"undefined"==typeof window){this._app.requireModule("windvane").call({class:"MtopWVPlugin",method:"send",data:e},t)}else{this._app.requireModule("stream").sendMtop(e,t)}}function Un(e,t){console.warn("[Upgrade Warning] $callWindvane will be removed in the next version!"),console.warn
("[JS Framework] Vm#$callWindvane is deprecated, please use \"require('@weex-module/windvane').call(params, callback)\" instead"),this._app.requireModule("windvane").call(e,t)}function Vn(e,t){console.warn("[Upgrade Warning] $setSpm will be removed in the next version!"),console.warn("[JS Framework] Vm#$setSpm is deprecated, please use \"require('@weex-module/pageInfo').setSpm(a, b)\" instead"),this._app.requireModule("pageInfo").setSpm(e,t)}function Bn(e){console.warn("[Upgrade Warning] $getUserInfo will be removed in the next version!"),console.warn("[JS Framework] Vm#$getUserInfo is deprecated, please use \"require('@weex-module/user').getUserInfo(callback)\" instead"),this._app.requireModule("user").getUserInfo(e)}function qn(e){console.warn("[Upgrade Warning] $login will be removed in the next version!"),console.warn("[JS Framework] Vm#$login is deprecated, please use \"require('@weex-module/user').login(callback)\" instead"),this._app.requireModule("user").login(e)}function zn
(e){console.warn("[Upgrade Warning] $logout will be removed in the next version!"),console.warn("[JS Framework] Vm#$logout is deprecated, please use \"require('@weex-module/user').logout(callback)\" instead"),this._app.requireModule("user").logout(e)}var Jn,Hn={},Gn={},Xn=Object.freeze({init:e,createInstance:t,destroyInstance:n,getRoot:r,receiveTasks:o}),Kn="undefined"!=typeof window?window:void 0!==global?global:"undefined"!=typeof self?self:{},Zn=a(function(e){e.exports=function(e,t){function n(e){return void 0===e||null===e}function r(e){return void 0!==e&&null!==e}function o(e){return!0===e}function i(e){return!1===e}function a(e){return"string"==typeof e||"number"==typeof e||"boolean"==typeof e}function s(e){return null!==e&&"object"==typeof e}function u(e){return"[object Object]"===kn.call(e)}function c(e){return"[object RegExp]"===kn.call(e)}function l(e){var t=parseFloat(e);return t>=0&&Math.floor(t)===t&&isFinite(e)}function f(e){return null==e?"":"object"==typeof e?JSON.st
ringify(e,null,2):String(e)}function p(e){var t=parseFloat(e);return isNaN(t)?e:t}function d(e,t){for(var n=Object.create(null),r=e.split(","),o=0;o<r.length;o++)n[r[o]]=!0;return t?function(e){return n[e.toLowerCase()]}:function(e){return n[e]}}function h(e,t){if(e.length){var n=e.indexOf(t);if(n>-1)return e.splice(n,1)}}function v(e,t){return An.call(e,t)}function y(e){var t=Object.create(null);return function(n){return t[n]||(t[n]=e(n))}}function m(e,t){function n(n){var r=arguments.length;return r?r>1?e.apply(t,arguments):e.call(t,n):e.call(t)}return n._length=e.length,n}function _(e,t){t=t||0;for(var n=e.length-t,r=new Array(n);n--;)r[n]=e[n+t];return r}function g(e,t){for(var n in t)e[n]=t[n];return e}function b(e){for(var t={},n=0;n<e.length;n++)e[n]&&g(t,e[n]);return t}function w(e,t,n){}function x(e,t){if(e===t)return!0;var n=s(e),r=s(t);if(!n||!r)return!n&&!r&&String(e)===String(t);try{var o=Array.isArray(e),i=Array.isArray(t);if(o&&i)return e.length===t.length&&e.every(fu
nction(e,n){return x(e,t[n])});if(o||i)return!1;var a=Object.keys(e),u=Object.keys(t);return a.length===u.length&&a.every(function(n){return x(e[n],t[n])})}catch(e){return!1}}function E(e,t){for(var n=0;n<e.length;n++)if(x(e[n],t))return n;return-1}function O(e){var t=!1;return function(){t||(t=!0,e.apply(this,arguments))}}function S(e){var t=(e+"").charCodeAt(0);return 36===t||95===t}function C(e,t,n,r){Object.defineProperty(e,t,{value:n,enumerable:!!r,writable:!0,configurable:!0})}function k(e){if(!Vn.test(e)){var t=e.split(".");return function(e){for(var n=0;n<t.length;n++){if(!e)return;e=e[t[n]]}return e}}}function j(e,t,n){if(Wn.errorHandler)Wn.errorHandler.call(null,e,t,n);else{if(!zn||"undefined"==typeof console)throw e;console.error(e)}}function A(e){return"function"==typeof e&&/native code/.test(e.toString())}function I(e){ar.target&&sr.push(ar.target),ar.target=e}function T(){ar.target=sr.pop()}function N(e,t,n){e.__proto__=t}function P(e,t,n){for(var r=0,o=n.length;r<o;r+
+){var i=n[r];C(e,i,t[i])}}function M(e,t){if(s(e)){var n;return v(e,"__ob__")&&e.__ob__ instanceof pr?n=e.__ob__:fr.shouldConvert&&!tr()&&(Array.isArray(e)||u(e))&&Object.isExtensible(e)&&!e._isVue&&(n=new pr(e)),t&&n&&n.vmCount++,n}}function $(e,t,n,r,o){var i=new ar,a=Object.getOwnPropertyDescriptor(e,t);if(!a||!1!==a.configurable){var s=a&&a.get,u=a&&a.set,c=!o&&M(n);Object.defineProperty(e,t,{enumerable:!0,configurable:!0,get:function(){var t=s?s.call(e):n;return ar.target&&(i.depend(),c&&c.dep.depend(),Array.isArray(t)&&F(t)),t},set:function(t){var r=s?s.call(e):n;t===r||t!==t&&r!==r||(u?u.call(e,t):n=t,c=!o&&M(t),i.notify())}})}}function R(e,t,n){if(Array.isArray(e)&&l(t))return e.length=Math.max(e.length,t),e.splice(t,1,n),n;if(v(e,t))return e[t]=n,n;var r=e.__ob__;return e._isVue||r&&r.vmCount?n:r?($(r.value,t,n),r.dep.notify(),n):(e[t]=n,n)}function D(e,t){if(Array.isArray(e)&&l(t))return void e.splice(t,1);var n=e.__ob__;e._isVue||n&&n.vmCount||v(e,t)&&(delete e[t],n&&n.d
ep.notify())}function F(e){for(var t=void 0,n=0,r=e.length;n<r;n++)t=e[n],t&&t.__ob__&&t.__ob__.dep.depend(),Array.isArray(t)&&F(t)}function L(e,t){if(!t)return e;for(var n,r,o,i=Object.keys(t),a=0;a<i.length;a++)n=i[a],r=e[n],o=t[n],v(e,n)?u(r)&&u(o)&&L(r,o):R(e,n,o);return e}function W(e,t,n){return n?e||t?function(){var r="function"==typeof t?t.call(n):t,o="function"==typeof e?e.call(n):e;return r?L(r,o):o}:void 0:t?e?function(){return L("function"==typeof t?t.call(this):t,"function"==typeof e?e.call(this):e)}:t:e}function U(e,t){return t?e?e.concat(t):Array.isArray(t)?t:[t]:e}function V(e,t){var n=Object.create(e||null);return t?g(n,t):n}function B(e){var t=e.props;if(t){var n,r,o,i={};if(Array.isArray(t))for(n=t.length;n--;)"string"==typeof(r=t[n])&&(o=Tn(r),i[o]={type:null});else if(u(t))for(var a in t)r=t[a],o=Tn(a),i[o]=u(r)?r:{type:r};e.props=i}}function q(e){var t=e.inject;if(Array.isArray(t))for(var n=e.inject={},r=0;r<t.length;r++)n[t[r]]=t[r]}function z(e){var t=e.direc
tives;if(t)for(var n in t){var r=t[n];"function"==typeof r&&(t[n]={bind:r,update:r})}}function J(e,t,n){function r(r){var o=dr[r]||hr;u[r]=o(e[r],t[r],n,r)}"function"==typeof t&&(t=t.options),B(t),q(t),z(t);var o=t.extends;if(o&&(e=J(e,o,n)),t.mixins)for(var i=0,a=t.mixins.length;i<a;i++)e=J(e,t.mixins[i],n);var s,u={};for(s in e)r(s);for(s in t)v(e,s)||r(s);return u}function H(e,t,n,r){if("string"==typeof n){var o=e[t];if(v(o,n))return o[n];var i=Tn(n);if(v(o,i))return o[i];var a=Nn(i);if(v(o,a))return o[a];var s=o[n]||o[i]||o[a];return s}}function G(e,t,n,r){var o=t[e],i=!v(n,e),a=n[e];if(Z(Boolean,o.type)&&(i&&!v(o,"default")?a=!1:Z(String,o.type)||""!==a&&a!==Mn(e)||(a=!0)),void 0===a){a=X(r,o,e);var s=fr.shouldConvert;fr.shouldConvert=!0,M(a),fr.shouldConvert=s}return a}function X(e,t,n){if(v(t,"default")){var r=t.default;return e&&e.$options.propsData&&void 0===e.$options.propsData[n]&&void 0!==e._props[n]?e._props[n]:"function"==typeof r&&"Function"!==K(t.type)?r.call(e):r}}f
unction K(e){var t=e&&e.toString().match(/^\s*function (\w+)/);return t?t[1]:""}function Z(e,t){if(!Array.isArray(t))return K(t)===K(e);for(var n=0,r=t.length;n<r;n++)if(K(t[n])===K(e))return!0;return!1}function Q(e){return new vr(void 0,void 0,void 0,String(e))}function Y(e,t){var n=new vr(e.tag,e.data,e.children,e.text,e.elm,e.context,e.componentOptions,e.asyncFactory);return n.ns=e.ns,n.isStatic=e.isStatic,n.key=e.key,n.isComment=e.isComment,n.isCloned=!0,t&&e.children&&(n.children=ee(e.children)),n}function ee(e,t){for(var n=e.length,r=new Array(n),o=0;o<n;o++)r[o]=Y(e[o],t);return r}function te(e){function t(){var e=arguments,n=t.fns;if(!Array.isArray(n))return n.apply(null,arguments);for(var r=n.slice(),o=0;o<r.length;o++)r[o].apply(null,e)}return t.fns=e,t}function ne(e,t,r,o,i){var a,s,c,l,f;for(a in e)s=c=e[a],l=t[a],f=gr(a),u(s)&&(c=s.handler,f.params=s.params),n(c)||(n(l)?(n(c.fns)&&(c=e[a]=te(c)),r(f.name,c,f.once,f.capture,f.passive,f.params)):c!==l&&(l.fns=c,e[a]=l));f
or(a in t)n(e[a])&&(f=gr(a),o(f.name,t[a],f.capture))}function re(e,t,i){function a(){i.apply(this,arguments),h(s.fns,a)}var s,u=e[t];n(u)?s=te([a]):r(u.fns)&&o(u.merged)?(s=u,s.fns.push(a)):s=te([u,a]),s.merged=!0,e[t]=s}function oe(e,t,o){var i=t.options.props;if(!n(i)){var a={},s=e.attrs,u=e.props;if(r(s)||r(u))for(var c in i){var l=Mn(c);ie(a,u,c,l,!0)||ie(a,s,c,l,!1)}return a}}function ie(e,t,n,o,i){if(r(t)){if(v(t,n))return e[n]=t[n],i||delete t[n],!0;if(v(t,o))return e[n]=t[o],i||delete t[o],!0}return!1}function ae(e){for(var t=0;t<e.length;t++)if(Array.isArray(e[t]))return Array.prototype.concat.apply([],e);return e}function se(e){return a(e)?[Q(e)]:Array.isArray(e)?ce(e):void 0}function ue(e){return r(e)&&r(e.text)&&i(e.isComment)}function ce(e,t){var i,s,u,c=[];for(i=0;i<e.length;i++)s=e[i],n(s)||"boolean"==typeof s||(u=c[c.length-1],Array.isArray(s)?c.push.apply(c,ce(s,(t||"")+"_"+i)):a(s)?ue(u)?u.text+=String(s):""!==s&&c.push(Q(s)):ue(s)&&ue(u)?c[c.length-1]=Q(u.text+s.
text):(o(e._isVList)&&r(s.tag)&&n(s.key)&&r(t)&&(s.key="__vlist"+t+"_"+i+"__"),c.push(s)));return c}function le(e,t){return e.__esModule&&e.default&&(e=e.default),s(e)?t.extend(e):e}function fe(e,t,n,r,o){var i=_r();return i.asyncFactory=e,i.asyncMeta={data:t,context:n,children:r,tag:o},i}function pe(e,t,i){if(o(e.error)&&r(e.errorComp))return e.errorComp;if(r(e.resolved))return e.resolved;if(o(e.loading)&&r(e.loadingComp))return e.loadingComp;if(!r(e.contexts)){var a=e.contexts=[i],u=!0,c=function(){for(var e=0,t=a.length;e<t;e++)a[e].$forceUpdate()},l=O(function(n){e.resolved=le(n,t),u||c()}),f=O(function(t){r(e.errorComp)&&(e.error=!0,c())}),p=e(l,f);return s(p)&&("function"==typeof p.then?n(e.resolved)&&p.then(l,f):r(p.component)&&"function"==typeof p.component.then&&(p.component.then(l,f),r(p.error)&&(e.errorComp=le(p.error,t)),r(p.loading)&&(e.loadingComp=le(p.loading,t),0===p.delay?e.loading=!0:setTimeout(function(){n(e.resolved)&&n(e.error)&&(e.loading=!0,c())},p.delay||200)
),r(p.timeout)&&setTimeout(function(){n(e.resolved)&&f(null)},p.timeout))),u=!1,e.loading?e.loadingComp:e.resolved}e.contexts.push(i)}function de(e){return e.isComment&&e.asyncFactory}function he(e){if(Array.isArray(e))for(var t=0;t<e.length;t++){var n=e[t];if(r(n)&&(r(n.componentOptions)||de(n)))return n}}function ve(e){e._events=Object.create(null),e._hasHookEvent=!1;var t=e.$options._parentListeners;t&&_e(e,t)}function ye(e,t,n){n?mr.$once(e,t):mr.$on(e,t)}function me(e,t){mr.$off(e,t)}function _e(e,t,n){mr=e,ne(t,n||{},ye,me,e)}function ge(e,t){var n={};if(!e)return n;for(var r=[],o=0,i=e.length;o<i;o++){var a=e[o];if(a.context!==t&&a.functionalContext!==t||!a.data||null==a.data.slot)r.push(a);else{var s=a.data.slot,u=n[s]||(n[s]=[]);"template"===a.tag?u.push.apply(u,a.children):u.push(a)}}return r.every(be)||(n.default=r),n}function be(e){return e.isComment||" "===e.text}function we(e,t){t=t||{};for(var n=0;n<e.length;n++)Array.isArray(e[n])?we(e[n],t):t[e[n].key]=e[n].fn;retur
n t}function xe(e){var t=e.$options,n=t.parent;if(n&&!t.abstract){for(;n.$options.abstract&&n.$parent;)n=n.$parent;n.$children.push(e)}e.$parent=n,e.$root=n?n.$root:e,e.$children=[],e.$refs={},e._watcher=null,e._inactive=null,e._directInactive=!1,e._isMounted=!1,e._isDestroyed=!1,e._isBeingDestroyed=!1}function Ee(e,t,n){e.$el=t,e.$options.render||(e.$options.render=_r),je(e,"beforeMount");var r;return r=function(){e._update(e._render(),n)},e._watcher=new jr(e,r,w),n=!1,null==e.$vnode&&(e._isMounted=!0,je(e,"mounted")),e}function Oe(e,t,n,r,o){var i=!!(o||e.$options._renderChildren||r.data.scopedSlots||e.$scopedSlots!==Un);if(e.$options._parentVnode=r,e.$vnode=r,e._vnode&&(e._vnode.parent=r),e.$options._renderChildren=o,e.$attrs=r.data&&r.data.attrs||Un,e.$listeners=n||Un,t&&e.$options.props){fr.shouldConvert=!1;for(var a=e._props,s=e.$options._propKeys||[],u=0;u<s.length;u++){var c=s[u];a[c]=G(c,e.$options.props,t,e)}fr.shouldConvert=!0,e.$options.propsData=t}if(n){var l=e.$options
._parentListeners;e.$options._parentListeners=n,_e(e,n,l)}i&&(e.$slots=ge(o,r.context),e.$forceUpdate())}function Se(e){for(;e&&(e=e.$parent);)if(e._inactive)return!0;return!1}function Ce(e,t){if(t){if(e._directInactive=!1,Se(e))return}else if(e._directInactive)return;if(e._inactive||null===e._inactive){e._inactive=!1;for(var n=0;n<e.$children.length;n++)Ce(e.$children[n]);je(e,"activated")}}function ke(e,t){if(!(t&&(e._directInactive=!0,Se(e))||e._inactive)){e._inactive=!0;for(var n=0;n<e.$children.length;n++)ke(e.$children[n]);je(e,"deactivated")}}function je(e,t){var n=e.$options[t];if(n)for(var r=0,o=n.length;r<o;r++)try{n[r].call(e)}catch(n){j(n,e,t+" hook")}e._hasHookEvent&&e.$emit("hook:"+t)}function Ae(){Cr=wr.length=xr.length=0,Er={},Or=Sr=!1}function Ie(){Sr=!0;var e,t;for(wr.sort(function(e,t){return e.id-t.id}),Cr=0;Cr<wr.length;Cr++)e=wr[Cr],t=e.id,Er[t]=null,e.run();var n=xr.slice(),r=wr.slice();Ae(),Pe(n),Te(r),nr&&Wn.devtools&&nr.emit("flush")}function Te(e){for(var
t=e.length;t--;){var n=e[t],r=n.vm;r._watcher===n&&r._isMounted&&je(r,"updated")}}function Ne(e){e._inactive=!1,xr.push(e)}function Pe(e){for(var t=0;t<e.length;t++)e[t]._inactive=!0,Ce(e[t],!0)}function Me(e){var t=e.id;if(null==Er[t]){if(Er[t]=!0,Sr){for(var n=wr.length-1;n>Cr&&wr[n].id>e.id;)n--;wr.splice(n+1,0,e)}else wr.push(e);Or||(Or=!0,or(Ie))}}function $e(e){Ar.clear(),Re(e,Ar)}function Re(e,t){var n,r,o=Array.isArray(e);if((o||s(e))&&Object.isExtensible(e)){if(e.__ob__){var i=e.__ob__.dep.id;if(t.has(i))return;t.add(i)}if(o)for(n=e.length;n--;)Re(e[n],t);else for(r=Object.keys(e),n=r.length;n--;)Re(e[r[n]],t)}}function De(e,t,n){Ir.get=function(){return this[t][n]},Ir.set=function(e){this[t][n]=e},Object.defineProperty(e,n,Ir)}function Fe(e){e._watchers=[];var t=e.$options;t.props&&Le(e,t.props),t.methods&&ze(e,t.methods),t.data?We(e):M(e._data={},!0),t.computed&&Ve(e,t.computed),t.watch&&t.watch!==Xn&&Je(e,t.watch)}function Le(e,t){var n=e.$options.propsData||{},r=e._prop
s={},o=e.$options._propKeys=[],i=!e.$parent;fr.shouldConvert=i;for(var a in t)!function(i){o.push(i);var a=G(i,t,n,e);$(r,i,a),i in e||De(e,"_props",i)}(a);fr.shouldConvert=!0}function We(e){var t=e.$options.data;t=e._data="function"==typeof t?Ue(t,e):t||{},u(t)||(t={});for(var n=Object.keys(t),r=e.$options.props,o=(e.$options.methods,n.length);o--;){var i=n[o];r&&v(r,i)||S(i)||De(e,"_data",i)}M(t,!0)}function Ue(e,t){try{return e.call(t)}catch(e){return j(e,t,"data()"),{}}}function Ve(e,t){var n=e._computedWatchers=Object.create(null),r=tr();for(var o in t){var i=t[o],a="function"==typeof i?i:i.get;r||(n[o]=new jr(e,a||w,w,Tr)),o in e||Be(e,o,i)}}function Be(e,t,n){var r=!tr();"function"==typeof n?(Ir.get=r?qe(t):n,Ir.set=w):(Ir.get=n.get?r&&!1!==n.cache?qe(t):n.get:w,Ir.set=n.set?n.set:w),Object.defineProperty(e,t,Ir)}function qe(e){return function(){var t=this._computedWatchers&&this._computedWatchers[e];if(t)return t.dirty&&t.evaluate(),ar.target&&t.depend(),t.value}}function ze
(e,t){e.$options.props;for(var n in t)e[n]=null==t[n]?w:m(t[n],e)}function Je(e,t){for(var n in t){var r=t[n];if(Array.isArray(r))for(var o=0;o<r.length;o++)He(e,n,r[o]);else He(e,n,r)}}function He(e,t,n,r){return u(n)&&(r=n,n=n.handler),"string"==typeof n&&(n=e[n]),e.$watch(t,n,r)}function Ge(e){var t=e.$options.provide;t&&(e._provided="function"==typeof t?t.call(e):t)}function Xe(e){var t=Ke(e.$options.inject,e);t&&(fr.shouldConvert=!1,Object.keys(t).forEach(function(n){$(e,n,t[n])}),fr.shouldConvert=!0)}function Ke(e,t){if(e){for(var n=Object.create(null),r=rr?Reflect.ownKeys(e):Object.keys(e),o=0;o<r.length;o++)for(var i=r[o],a=e[i],s=t;s;){if(s._provided&&a in s._provided){n[i]=s._provided[a];break}s=s.$parent}return n}}function Ze(e,t,n,o,i){var a={},s=e.options.props;if(r(s))for(var u in s)a[u]=G(u,s,t||Un);else r(n.attrs)&&Qe(a,n.attrs),r(n.props)&&Qe(a,n.props);var c=Object.create(o),l=function(e,t,n,r){return ot(c,e,t,n,r,!0)},f=e.options.render.call(null,l,{data:n,props:a
,children:i,parent:o,listeners:n.on||Un,injections:Ke(e.options.inject,o),slots:function(){return ge(i,o)}});return f instanceof vr&&(f.functionalContext=o,f.functionalOptions=e.options,n.slot&&((f.data||(f.data={})).slot=n.slot)),f}function Qe(e,t){for(var n in t)e[Tn(n)]=t[n]}function Ye(e,t,i,a,u){if(!n(e)){var c=i.$options._base;if(s(e)&&(e=c.extend(e)),"function"==typeof e){var l;if(n(e.cid)&&(l=e,void 0===(e=pe(l,c,i))))return fe(l,t,i,a,u);t=t||{},gt(e),r(t.model)&&rt(e.options,t);var f=oe(t,e,u);if(o(e.options.functional))return Ze(e,f,t,i,a);var p=t.on;if(t.on=t.nativeOn,o(e.options.abstract)){var d=t.slot;t={},d&&(t.slot=d)}tt(t);var h=e.options.name||u;return new vr("vue-component-"+e.cid+(h?"-"+h:""),t,void 0,void 0,void 0,i,{Ctor:e,propsData:f,listeners:p,tag:u,children:a},l)}}}function et(e,t,n,o){var i=e.componentOptions,a={_isComponent:!0,parent:t,propsData:i.propsData,_componentTag:i.tag,_parentVnode:e,_parentListeners:i.listeners,_renderChildren:i.children,_parentE
lm:n||null,_refElm:o||null},s=e.data.inlineTemplate;return r(s)&&(a.render=s.render,a.staticRenderFns=s.staticRenderFns),new i.Ctor(a)}function tt(e){e.hook||(e.hook={});for(var t=0;t<Pr.length;t++){var n=Pr[t],r=e.hook[n],o=Nr[n];e.hook[n]=r?nt(o,r):o}}function nt(e,t){return function(n,r,o,i){e(n,r,o,i),t(n,r,o,i)}}function rt(e,t){var n=e.model&&e.model.prop||"value",o=e.model&&e.model.event||"input";(t.props||(t.props={}))[n]=t.model.value;var i=t.on||(t.on={});r(i[o])?i[o]=[t.model.callback].concat(i[o]):i[o]=t.model.callback}function ot(e,t,n,r,i,s){return(Array.isArray(n)||a(n))&&(i=r,r=n,n=void 0),o(s)&&(i=$r),it(e,t,n,r,i)}function it(e,t,n,o,i){if(r(n)&&r(n.__ob__))return _r();if(r(n)&&r(n.is)&&(t=n.is),!t)return _r();Array.isArray(o)&&"function"==typeof o[0]&&(n=n||{},n.scopedSlots={default:o[0]},o.length=0),i===$r?o=se(o):i===Mr&&(o=ae(o));var a,s;if("string"==typeof t){var u;s=e.$vnode&&e.$vnode.ns||Wn.getTagNamespace(t),a=Wn.isReservedTag(t)?new vr(Wn.parsePlatformTagN
ame(t),n,o,void 0,void 0,e):r(u=H(e.$options,"components",t))?Ye(u,n,e,o,t):new vr(t,n,o,void 0,void 0,e)}else a=Ye(t,n,e,o);return r(a)?(s&&at(a,s),a):_r()}function at(e,t){if(e.ns=t,"foreignObject"!==e.tag&&r(e.children))for(var o=0,i=e.children.length;o<i;o++){var a=e.children[o];r(a.tag)&&n(a.ns)&&at(a,t)}}function st(e,t){var n,o,i,a,u;if(Array.isArray(e)||"string"==typeof e)for(n=new Array(e.length),o=0,i=e.length;o<i;o++)n[o]=t(e[o],o);else if("number"==typeof e)for(n=new Array(e),o=0;o<e;o++)n[o]=t(o+1,o);else if(s(e))for(a=Object.keys(e),n=new Array(a.length),o=0,i=a.length;o<i;o++)u=a[o],n[o]=t(e[u],u,o);return r(n)&&(n._isVList=!0),n}function ut(e,t,n,r){var o=this.$scopedSlots[e];if(o)return n=n||{},r&&(n=g(g({},r),n)),o(n)||t;var i=this.$slots[e];return i||t}function ct(e){return H(this.$options,"filters",e,!0)||Rn}function lt(e,t,n){var r=Wn.keyCodes[t]||n;return Array.isArray(r)?-1===r.indexOf(e):r!==e}function ft(e,t,n,r,o){if(n)if(s(n)){Array.isArray(n)&&(n=b(n));va
r i;for(var a in n)!function(a){if("class"===a||"style"===a||jn(a))i=e;else{var s=e.attrs&&e.attrs.type;i=r||Wn.mustUseProp(t,s,a)?e.domProps||(e.domProps={}):e.attrs||(e.attrs={})}if(!(a in i)&&(i[a]=n[a],o)){(e.on||(e.on={}))["update:"+a]=function(e){n[a]=e}}}(a)}else;return e}function pt(e,t){var n=this._staticTrees[e];return n&&!t?Array.isArray(n)?ee(n):Y(n):(n=this._staticTrees[e]=this.$options.staticRenderFns[e].call(this._renderProxy),ht(n,"__static__"+e,!1),n)}function dt(e,t,n){return ht(e,"__once__"+t+(n?"_"+n:""),!0),e}function ht(e,t,n){if(Array.isArray(e))for(var r=0;r<e.length;r++)e[r]&&"string"!=typeof e[r]&&vt(e[r],t+"_"+r,n);else vt(e,t,n)}function vt(e,t,n){e.isStatic=!0,e.key=t,e.isOnce=n}function yt(e,t){if(t)if(u(t)){var n=e.on=e.on?g({},e.on):{};for(var r in t){var o=n[r],i=t[r];n[r]=o?[].concat(i,o):i}}else;return e}function mt(e){e._vnode=null,e._staticTrees=null;var t=e.$vnode=e.$options._parentVnode,n=t&&t.context;e.$slots=ge(e.$options._renderChildren,n),e
.$scopedSlots=Un,e._c=function(t,n,r,o){return ot(e,t,n,r,o,!1)},e.$createElement=function(t,n,r,o){return ot(e,t,n,r,o,!0)};var r=t&&t.data;$(e,"$attrs",r&&r.attrs||Un,null,!0),$(e,"$listeners",e.$options._parentListeners||Un,null,!0)}function _t(e,t){var n=e.$options=Object.create(e.constructor.options);n.parent=t.parent,n.propsData=t.propsData,n._parentVnode=t._parentVnode,n._parentListeners=t._parentListeners,n._renderChildren=t._renderChildren,n._componentTag=t._componentTag,n._parentElm=t._parentElm,n._refElm=t._refElm,t.render&&(n.render=t.render,n.staticRenderFns=t.staticRenderFns)}function gt(e){var t=e.options;if(e.super){var n=gt(e.super);if(n!==e.superOptions){e.superOptions=n;var r=bt(e);r&&g(e.extendOptions,r),t=e.options=J(n,e.extendOptions),t.name&&(t.components[t.name]=e)}}return t}function bt(e){var t,n=e.options,r=e.extendOptions,o=e.sealedOptions;for(var i in n)n[i]!==o[i]&&(t||(t={}),t[i]=wt(n[i],r[i],o[i]));return t}function wt(e,t,n){if(Array.isArray(e)){var r
=[];n=Array.isArray(n)?n:[n],t=Array.isArray(t)?t:[t];for(var o=0;o<e.length;o++)(t.indexOf(e[o])>=0||n.indexOf(e[o])<0)&&r.push(e[o]);return r}return e}function xt(e){this._init(e)}function Et(e){e.use=function(e){var t=this._installedPlugins||(this._installedPlugins=[]);if(t.indexOf(e)>-1)return this;var n=_(arguments,1);return n.unshift(this),"function"==typeof e.install?e.install.apply(e,n):"function"==typeof e&&e.apply(null,n),t.push(e),this}}function Ot(e){e.mixin=function(e){return this.options=J(this.options,e),this}}function St(e){e.cid=0;var t=1;e.extend=function(e){e=e||{};var n=this,r=n.cid,o=e._Ctor||(e._Ctor={});if(o[r])return o[r];var i=e.name||n.options.name,a=function(e){this._init(e)};return a.prototype=Object.create(n.prototype),a.prototype.constructor=a,a.cid=t++,a.options=J(n.options,e),a.super=n,a.options.props&&Ct(a),a.options.computed&&kt(a),a.extend=n.extend,a.mixin=n.mixin,a.use=n.use,Fn.forEach(function(e){a[e]=n[e]}),i&&(a.options.components[i]=a),a.super
Options=n.options,a.extendOptions=e,a.sealedOptions=g({},a.options),o[r]=a,a}}function Ct(e){var t=e.options.props;for(var n in t)De(e.prototype,"_props",n)}function kt(e){var t=e.options.computed;for(var n in t)Be(e.prototype,n,t[n])}function jt(e){Fn.forEach(function(t){e[t]=function(e,n){return n?("component"===t&&u(n)&&(n.name=n.name||e,n=this.options._base.extend(n)),"directive"===t&&"function"==typeof n&&(n={bind:n,update:n}),this.options[t+"s"][e]=n,n):this.options[t+"s"][e]}})}function At(e){return e&&(e.Ctor.options.name||e.tag)}function It(e,t){return Array.isArray(e)?e.indexOf(t)>-1:"string"==typeof e?e.split(",").indexOf(t)>-1:!!c(e)&&e.test(t)}function Tt(e,t,n){for(var r in e){var o=e[r];if(o){var i=At(o.componentOptions);i&&!n(i)&&(o!==t&&Nt(o),e[r]=null)}}}function Nt(e){e&&e.componentInstance.$destroy()}function Pt(e){return new t.Element(e)}function Mt(e,n){return new t.Element(e+":"+n)}function $t(e){return new t.TextNode(e)}function Rt(e){return new t.Comment(e)}
function Dt(e,t,n){if(3!==t.nodeType)e.insertBefore(t,n);else if("text"===e.type)e.setAttr("value",t.text),t.parentNode=e;else{var r=Pt("text");r.setAttr("value",t.text),e.insertBefore(r,n)}}function Ft(e,t){if(3===t.nodeType)return void e.setAttr("value","");e.removeChild(t)}function Lt(e,t){if(3!==t.nodeType)e.appendChild(t);else if("text"===e.type)e.setAttr("value",t.text),t.parentNode=e;else{var n=Pt("text");n.setAttr("value",t.text),e.appendChild(n)}}function Wt(e){return e.parentNode}function Ut(e){return e.nextSibling}function Vt(e){return e.type}function Bt(e,t){e.parentNode.setAttr("value",t)}function qt(e,t,n){e.setAttr(t,n)}function zt(e,t){var n=e.data.ref;if(n){var r=e.context,o=e.componentInstance||e.elm,i=r.$refs;t?Array.isArray(i[n])?h(i[n],o):i[n]===o&&(i[n]=void 0):e.data.refInFor?Array.isArray(i[n])?i[n].indexOf(o)<0&&i[n].push(o):i[n]=[o]:i[n]=o}}function Jt(e,t){return e.key===t.key&&(e.tag===t.tag&&e.isComment===t.isComment&&r(e.data)===r(t.data)&&Ht(e,t)||o(e.
isAsyncPlaceholder)&&e.asyncFactory===t.asyncFactory&&n(t.asyncFactory.error))}function Ht(e,t){
-if("input"!==e.tag)return!0;var n,o=r(n=e.data)&&r(n=n.attrs)&&n.type,i=r(n=t.data)&&r(n=n.attrs)&&n.type;return o===i||qr(o)&&qr(i)}function Gt(e,t,n){var o,i,a={};for(o=t;o<=n;++o)i=e[o].key,r(i)&&(a[i]=o);return a}function Xt(e,t){(e.data.directives||t.data.directives)&&Kt(e,t)}function Kt(e,t){var n,r,o,i=e===zr,a=t===zr,s=Zt(e.data.directives,e.context),u=Zt(t.data.directives,t.context),c=[],l=[];for(n in u)r=s[n],o=u[n],r?(o.oldValue=r.value,Yt(o,"update",t,e),o.def&&o.def.componentUpdated&&l.push(o)):(Yt(o,"bind",t,e),o.def&&o.def.inserted&&c.push(o));if(c.length){var f=function(){for(var n=0;n<c.length;n++)Yt(c[n],"inserted",t,e)};i?re(t.data.hook||(t.data.hook={}),"insert",f):f()}if(l.length&&re(t.data.hook||(t.data.hook={}),"postpatch",function(){for(var n=0;n<l.length;n++)Yt(l[n],"componentUpdated",t,e)}),!i)for(n in s)u[n]||Yt(s[n],"unbind",e,e,a)}function Zt(e,t){var n=Object.create(null);if(!e)return n;var r,o;for(r=0;r<e.length;r++)o=e[r],o.modifiers||(o.modifiers=Gr)
,n[Qt(o)]=o,o.def=H(t.$options,"directives",o.name,!0);return n}function Qt(e){return e.rawName||e.name+"."+Object.keys(e.modifiers||{}).join(".")}function Yt(e,t,n,r,o){var i=e.def&&e.def[t];if(i)try{i(n.elm,e,n,r,o)}catch(r){j(r,n.context,"directive "+e.name+" "+t+" hook")}}function en(e,t){if(e.data.attrs||t.data.attrs){var n,r,o=t.elm,i=e.data.attrs||{},a=t.data.attrs||{};a.__ob__&&(a=t.data.attrs=g({},a));for(n in a)r=a[n],i[n]!==r&&o.setAttr(n,r);for(n in i)null==a[n]&&o.setAttr(n)}}function tn(e,t){var n=t.elm,r=t.context,o=t.data,i=e.data;if(o.staticClass||o.class||i&&(i.staticClass||i.class)){var a=[],s=i.staticClass;s&&a.push.apply(a,s),i.class&&a.push.apply(a,i.class);var u=[],c=o.staticClass;c&&u.push.apply(u,c),o.class&&u.push.apply(u,o.class);var l=nn(a,u,r);for(var f in l)n.setStyle(f,l[f])}}function nn(e,t,n){var r=n.$options.style||{},o={};return t.forEach(function(e){g(o,r[e])}),e.forEach(function(e){var t=r[e];for(var n in t)o.hasOwnProperty(n)||(o[n]="")}),o}func
tion rn(e,t,n,r,o,i){if(r)return void console.log("Weex do not support event in bubble phase.");if(n){var a=t,s=Wr;t=function(t){null!==(1===arguments.length?a(t):a.apply(null,arguments))&&on(e,null,null,s)}}Wr.addEvent(e,t,i)}function on(e,t,n,r){(r||Wr).removeEvent(e)}function an(e,t){if(e.data.on||t.data.on){var n=t.data.on||{},r=e.data.on||{};Wr=t.elm,ne(n,r,rn,on,t.context)}}function sn(e,t){if(!t.data.staticStyle)return void un(e,t);var n=t.elm,r=t.data.staticStyle;for(var o in r)r[o]&&n.setStyle(Yr(o),r[o]);un(e,t)}function un(e,t){if(e.data.style||t.data.style){var n,r,o=t.elm,i=e.data.style||{},a=t.data.style||{},s=a.__ob__;Array.isArray(a)&&(a=t.data.style=cn(a)),s&&(a=t.data.style=g({},a));for(r in i)a[r]||o.setStyle(Yr(r),"");for(r in a)n=a[r],o.setStyle(Yr(r),n)}}function cn(e){for(var t={},n=0;n<e.length;n++)e[n]&&g(t,e[n]);return t}function ln(e){if(e){if("object"==typeof e){var t={};return!1!==e.css&&g(t,to(e.name||"v")),g(t,e),t}return"string"==typeof e?to(e):void 0
}}function fn(e,t){var n=t.elm;n._leaveCb&&(n._leaveCb.cancelled=!0,n._leaveCb());var r=ln(t.data.transition);if(r&&!n._enterCb){for(var o=r.enterClass,i=r.enterToClass,a=r.enterActiveClass,s=r.appearClass,u=r.appearToClass,c=r.appearActiveClass,l=r.beforeEnter,f=r.enter,p=r.afterEnter,d=r.enterCancelled,h=r.beforeAppear,v=r.appear,y=r.afterAppear,m=r.appearCancelled,_=br,g=br.$vnode;g&&g.parent;)g=g.parent,_=g.context;var b=!_._isMounted||!t.isRootInsert;if(!b||v||""===v){var x=b?s:o,E=b?u:i,S=b?c:a,C=b?h||l:l,k=b&&"function"==typeof v?v:f,j=b?y||p:p,A=b?m||d:d,I=k&&(k._length||k.length)>1,T=t.context.$options.style||{},N=T[x],P=T["@TRANSITION"]&&T["@TRANSITION"][S]||{},M=dn(n,T,x,E,S,t.context),$=Object.keys(M).length>0,R=n._enterCb=O(function(){R.cancelled?A&&A(n):j&&j(n),n._enterCb=null});if(setTimeout(function(){var e=n.parentNode,r=e&&e._pending&&e._pending[t.key];if(r&&r.context===t.context&&r.tag===t.tag&&r.elm._leaveCb&&r.elm._leaveCb(),k&&k(n,R),$){t.context.$requireWeexMo
dule("animation").transition(n.ref,{styles:M,duration:P.duration||0,delay:P.delay||0,timingFunction:P.timingFunction||"linear"},I?w:R)}else I||R()},16),C&&C(n),N)for(var D in N)n.setStyle(D,N[D]);$||I||R()}}}function pn(e,t){function n(){function t(){n.transition(r.ref,{styles:y,duration:m.duration||0,delay:m.delay||0,timingFunction:m.timingFunction||"linear"},d?w:_)}var n=e.context.$requireWeexModule("animation");_.cancelled||(e.data.show||((r.parentNode._pending||(r.parentNode._pending={}))[e.key]=e),u&&u(r),v?n.transition(r.ref,{styles:v},t):t(),c&&c(r,_),y||d||_())}var r=e.elm;r._enterCb&&(r._enterCb.cancelled=!0,r._enterCb());var o=ln(e.data.transition);if(!o)return t();if(!r._leaveCb){var i=o.leaveClass,a=o.leaveToClass,s=o.leaveActiveClass,u=o.beforeLeave,c=o.leave,l=o.afterLeave,f=o.leaveCancelled,p=o.delayLeave,d=c&&(c._length||c.length)>1,h=e.context.$options.style||{},v=h[i],y=h[a]||h[s],m=h["@TRANSITION"]&&h["@TRANSITION"][s]||{},_=r._leaveCb=O(function(){r.parentNode&&r
.parentNode._pending&&(r.parentNode._pending[e.key]=null),_.cancelled?f&&f(r):(t(),l&&l(r)),r._leaveCb=null});p?p(n):n()}}function dn(e,t,n,r,o,i){var a={},s=t[n],u=t[r],c=t[o];if(s)for(var l in s)a[l]=e.style[l];if(c)for(var f in c)0!==f.indexOf("transition")&&(a[f]=c[f]);return u&&g(a,u),a}function hn(e){return e.tag?e.tag.replace(/vue\-component\-(\d+\-)?/,""):""}function vn(e){return e.children&&1===e.children.length&&!e.children[0].tag}function yn(e){var t=String(e).match(so);return t?Number(t[1]):e}function mn(e){if(e&&e.data){var t=e.data,n=t.staticStyle,r=t.staticClass;if(e.data.style||e.data.class||n||r){var o=Object.assign({},n,e.data.style),i=e.context.$options.style||{};[].concat(r,e.data.class).forEach(function(e){e&&i[e]&&Object.assign(o,i[e])});for(var a in o)o[a]=yn(o[a]);return o}}}function _n(e){if(e.length)return e.map(function(e){var t=hn(e),n={type:t};if(t){if(n.style=mn(e),e.data&&(n.attr=e.data.attrs,e.data.on&&(n.events=e.data.on)),"span"===t&&vn(e))return n.
attr=n.attr||{},n.attr.value=e.children[0].text.trim(),n}else n.type="span",n.attr={value:(e.text||"").trim()};return e.children&&e.children.length&&(n.children=_n(e.children)),n})}function gn(e){var t=e&&e.componentOptions;return t&&t.Ctor.options.abstract?gn(he(t.children)):e}function bn(e){var t={},n=e.$options;for(var r in n.propsData)t[r]=e[r];var o=n._parentListeners;for(var i in o)t[Tn(i)]=o[i];return t}function wn(e,t){if(/\d-keep-alive$/.test(t.tag))return e("keep-alive",{props:t.componentOptions.propsData})}function xn(e){for(;e=e.parent;)if(e.data.transition)return!0}function En(e,t){return t.key===e.key&&t.tag===e.tag}function On(){}function Sn(){}function Cn(e,n){var r=new t.Comment("root");return r.hasAttribute=r.removeAttribute=function(){},n.documentElement.appendChild(r),r}var kn=Object.prototype.toString,jn=(d("slot,component",!0),d("key,ref,slot,is")),An=Object.prototype.hasOwnProperty,In=/-(\w)/g,Tn=y(function(e){return e.replace(In,function(e,t){return t?t.toUpp
erCase():""})}),Nn=y(function(e){return e.charAt(0).toUpperCase()+e.slice(1)}),Pn=/\B([A-Z])/g,Mn=y(function(e){return e.replace(Pn,"-$1").toLowerCase()}),$n=function(e,t,n){return!1},Rn=function(e){return e},Dn="data-server-rendered",Fn=["component","directive","filter"],Ln=["beforeCreate","created","beforeMount","mounted","beforeUpdate","updated","beforeDestroy","destroyed","activated","deactivated"],Wn={optionMergeStrategies:Object.create(null),silent:!1,productionTip:!1,devtools:!1,performance:!1,errorHandler:null,warnHandler:null,ignoredElements:[],keyCodes:Object.create(null),isReservedTag:$n,isReservedAttr:$n,isUnknownElement:$n,getTagNamespace:w,parsePlatformTagName:Rn,mustUseProp:$n,_lifecycleHooks:Ln},Un=Object.freeze({}),Vn=/[^\w.$]/,Bn=w,qn="__proto__"in{},zn="undefined"!=typeof window,Jn=zn&&window.navigator.userAgent.toLowerCase(),Hn=(Jn&&/msie|trident/.test(Jn),Jn&&Jn.indexOf("msie 9.0"),Jn&&Jn.indexOf("edge/")>0),Gn=(Jn&&Jn.indexOf("android"),Jn&&/iphone|ipad|ipod|io
s/.test(Jn)),Xn=(Jn&&/chrome\/\d+/.test(Jn),{}.watch),Zn=!1;if(zn)try{var Qn={};Object.defineProperty(Qn,"passive",{get:function(){Zn=!0}}),window.addEventListener("test-passive",null,Qn)}catch(e){}var Yn,er,tr=function(){return void 0===Yn&&(Yn=!zn&&void 0!==Kn&&"server"===Kn.process.env.VUE_ENV),Yn},nr=zn&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__,rr="undefined"!=typeof Symbol&&A(Symbol)&&"undefined"!=typeof Reflect&&A(Reflect.ownKeys),or=function(){function e(){r=!1;var e=n.slice(0);n.length=0;for(var t=0;t<e.length;t++)e[t]()}var t,n=[],r=!1;if("undefined"!=typeof Promise&&A(Promise)){var o=Promise.resolve(),i=function(e){console.error(e)};t=function(){o.then(e).catch(i),Gn&&setTimeout(w)}}else if("undefined"==typeof MutationObserver||!A(MutationObserver)&&"[object MutationObserverConstructor]"!==MutationObserver.toString())t=function(){setTimeout(e,0)};else{var a=1,s=new MutationObserver(e),u=document.createTextNode(String(a));s.observe(u,{characterData:!0}),t=function(){a=(a+1)%2,u.
data=String(a)}}return function(e,o){var i;if(n.push(function(){if(e)try{e.call(o)}catch(e){j(e,o,"nextTick")}else i&&i(o)}),r||(r=!0,t()),!e&&"undefined"!=typeof Promise)return new Promise(function(e,t){i=e})}}();er="undefined"!=typeof Set&&A(Set)?Set:function(){function e(){this.set=Object.create(null)}return e.prototype.has=function(e){return!0===this.set[e]},e.prototype.add=function(e){this.set[e]=!0},e.prototype.clear=function(){this.set=Object.create(null)},e}();var ir=0,ar=function(){this.id=ir++,this.subs=[]};ar.prototype.addSub=function(e){this.subs.push(e)},ar.prototype.removeSub=function(e){h(this.subs,e)},ar.prototype.depend=function(){ar.target&&ar.target.addDep(this)},ar.prototype.notify=function(){for(var e=this.subs.slice(),t=0,n=e.length;t<n;t++)e[t].update()},ar.target=null;var sr=[],ur=Array.prototype,cr=Object.create(ur);["push","pop","shift","unshift","splice","sort","reverse"].forEach(function(e){var t=ur[e];C(cr,e,function(){for(var n=arguments,r=[],o=argument
s.length;o--;)r[o]=n[o];var i,a=t.apply(this,r),s=this.__ob__;switch(e){case"push":case"unshift":i=r;break;case"splice":i=r.slice(2)}return i&&s.observeArray(i),s.dep.notify(),a})});var lr=Object.getOwnPropertyNames(cr),fr={shouldConvert:!0},pr=function(e){if(this.value=e,this.dep=new ar,this.vmCount=0,C(e,"__ob__",this),Array.isArray(e)){(qn?N:P)(e,cr,lr),this.observeArray(e)}else this.walk(e)};pr.prototype.walk=function(e){for(var t=Object.keys(e),n=0;n<t.length;n++)$(e,t[n],e[t[n]])},pr.prototype.observeArray=function(e){for(var t=0,n=e.length;t<n;t++)M(e[t])};var dr=Wn.optionMergeStrategies;dr.data=function(e,t,n){return n?W(e,t,n):t&&"function"!=typeof t?e:W.call(this,e,t)},Ln.forEach(function(e){dr[e]=U}),Fn.forEach(function(e){dr[e+"s"]=V}),dr.watch=function(e,t){if(e===Xn&&(e=void 0),t===Xn&&(t=void 0),!t)return Object.create(e||null);if(!e)return t;var n={};g(n,e);for(var r in t){var o=n[r],i=t[r];o&&!Array.isArray(o)&&(o=[o]),n[r]=o?o.concat(i):Array.isArray(i)?i:[i]}retur
n n},dr.props=dr.methods=dr.inject=dr.computed=function(e,t){if(!e)return t;var n=Object.create(null);return g(n,e),t&&g(n,t),n},dr.provide=W;var hr=function(e,t){return void 0===t?e:t},vr=function(e,t,n,r,o,i,a,s){this.tag=e,this.data=t,this.children=n,this.text=r,this.elm=o,this.ns=void 0,this.context=i,this.functionalContext=void 0,this.key=t&&t.key,this.componentOptions=a,this.componentInstance=void 0,this.parent=void 0,this.raw=!1,this.isStatic=!1,this.isRootInsert=!0,this.isComment=!1,this.isCloned=!1,this.isOnce=!1,this.asyncFactory=s,this.asyncMeta=void 0,this.isAsyncPlaceholder=!1},yr={child:{}};yr.child.get=function(){return this.componentInstance},Object.defineProperties(vr.prototype,yr);var mr,_r=function(e){void 0===e&&(e="");var t=new vr;return t.text=e,t.isComment=!0,t},gr=y(function(e){var t="&"===e.charAt(0);e=t?e.slice(1):e;var n="~"===e.charAt(0);e=n?e.slice(1):e;var r="!"===e.charAt(0);return e=r?e.slice(1):e,{name:e,once:n,capture:r,passive:t}}),br=null,wr=[],xr
=[],Er={},Or=!1,Sr=!1,Cr=0,kr=0,jr=function(e,t,n,r){this.vm=e,e._watchers.push(this),r?(this.deep=!!r.deep,this.user=!!r.user,this.lazy=!!r.lazy,this.sync=!!r.sync):this.deep=this.user=this.lazy=this.sync=!1,this.cb=n,this.id=++kr,this.active=!0,this.dirty=this.lazy,this.deps=[],this.newDeps=[],this.depIds=new er,this.newDepIds=new er,this.expression="","function"==typeof t?this.getter=t:(this.getter=k(t),this.getter||(this.getter=function(){})),this.value=this.lazy?void 0:this.get()};jr.prototype.get=function(){I(this);var e,t=this.vm;try{e=this.getter.call(t,t)}catch(e){if(!this.user)throw e;j(e,t,'getter for watcher "'+this.expression+'"')}finally{this.deep&&$e(e),T(),this.cleanupDeps()}return e},jr.prototype.addDep=function(e){var t=e.id;this.newDepIds.has(t)||(this.newDepIds.add(t),this.newDeps.push(e),this.depIds.has(t)||e.addSub(this))},jr.prototype.cleanupDeps=function(){for(var e=this,t=this.deps.length;t--;){var n=e.deps[t];e.newDepIds.has(n.id)||n.removeSub(e)}var r=this
.depIds;this.depIds=this.newDepIds,this.newDepIds=r,this.newDepIds.clear(),r=this.deps,this.deps=this.newDeps,this.newDeps=r,this.newDeps.length=0},jr.prototype.update=function(){this.lazy?this.dirty=!0:this.sync?this.run():Me(this)},jr.prototype.run=function(){if(this.active){var e=this.get();if(e!==this.value||s(e)||this.deep){var t=this.value;if(this.value=e,this.user)try{this.cb.call(this.vm,e,t)}catch(e){j(e,this.vm,'callback for watcher "'+this.expression+'"')}else this.cb.call(this.vm,e,t)}}},jr.prototype.evaluate=function(){this.value=this.get(),this.dirty=!1},jr.prototype.depend=function(){for(var e=this,t=this.deps.length;t--;)e.deps[t].depend()},jr.prototype.teardown=function(){var e=this;if(this.active){this.vm._isBeingDestroyed||h(this.vm._watchers,this);for(var t=this.deps.length;t--;)e.deps[t].removeSub(e);this.active=!1}};var Ar=new er,Ir={enumerable:!0,configurable:!0,get:w,set:w},Tr={lazy:!0},Nr={init:function(e,t,n,r){if(!e.componentInstance||e.componentInstance._
isDestroyed){(e.componentInstance=et(e,br,n,r)).$mount(t?e.elm:void 0,t)}else if(e.data.keepAlive){var o=e;Nr.prepatch(o,o)}},prepatch:function(e,t){var n=t.componentOptions;Oe(t.componentInstance=e.componentInstance,n.propsData,n.listeners,t,n.children)},insert:function(e){var t=e.context,n=e.componentInstance;n._isMounted||(n._isMounted=!0,je(n,"mounted")),e.data.keepAlive&&(t._isMounted?Ne(n):Ce(n,!0))},destroy:function(e){var t=e.componentInstance;t._isDestroyed||(e.data.keepAlive?ke(t,!0):t.$destroy())}},Pr=Object.keys(Nr),Mr=1,$r=2,Rr=0;!function(e){e.prototype._init=function(e){var t=this;t._uid=Rr++,t._isVue=!0,e&&e._isComponent?_t(t,e):t.$options=J(gt(t.constructor),e||{},t),t._renderProxy=t,t._self=t,xe(t),ve(t),mt(t),je(t,"beforeCreate"),Xe(t),Fe(t),Ge(t),je(t,"created"),t.$options.el&&t.$mount(t.$options.el)}}(xt),function(e){var t={};t.get=function(){return this._data};var n={};n.get=function(){return this._props},Object.defineProperty(e.prototype,"$data",t),Object.defi
neProperty(e.prototype,"$props",n),e.prototype.$set=R,e.prototype.$delete=D,e.prototype.$watch=function(e,t,n){var r=this;if(u(t))return He(r,e,t,n);n=n||{},n.user=!0;var o=new jr(r,e,t,n);return n.immediate&&t.call(r,o.value),function(){o.teardown()}}}(xt),function(e){var t=/^hook:/;e.prototype.$on=function(e,n){var r=this,o=this;if(Array.isArray(e))for(var i=0,a=e.length;i<a;i++)r.$on(e[i],n);else(o._events[e]||(o._events[e]=[])).push(n),t.test(e)&&(o._hasHookEvent=!0);return o},e.prototype.$once=function(e,t){function n(){r.$off(e,n),t.apply(r,arguments)}var r=this;return n.fn=t,r.$on(e,n),r},e.prototype.$off=function(e,t){var n=this,r=this;if(!arguments.length)return r._events=Object.create(null),r;if(Array.isArray(e)){for(var o=0,i=e.length;o<i;o++)n.$off(e[o],t);return r}var a=r._events[e];if(!a)return r;if(1===arguments.length)return r._events[e]=null,r;for(var s,u=a.length;u--;)if((s=a[u])===t||s.fn===t){a.splice(u,1);break}return r},e.prototype.$emit=function(e){var t=this,
n=t._events[e];if(n){n=n.length>1?_(n):n;for(var r=_(arguments,1),o=0,i=n.length;o<i;o++)try{n[o].apply(t,r)}catch(n){j(n,t,'event handler for "'+e+'"')}}return t}}(xt),function(e){e.prototype._update=function(e,t){var n=this;n._isMounted&&je(n,"beforeUpdate");var r=n.$el,o=n._vnode,i=br;br=n,n._vnode=e,o?n.$el=n.__patch__(o,e):(n.$el=n.__patch__(n.$el,e,t,!1,n.$options._parentElm,n.$options._refElm),n.$options._parentElm=n.$options._refElm=null),br=i,r&&(r.__vue__=null),n.$el&&(n.$el.__vue__=n),n.$vnode&&n.$parent&&n.$vnode===n.$parent._vnode&&(n.$parent.$el=n.$el)},e.prototype.$forceUpdate=function(){var e=this;e._watcher&&e._watcher.update()},e.prototype.$destroy=function(){var e=this;if(!e._isBeingDestroyed){je(e,"beforeDestroy"),e._isBeingDestroyed=!0;var t=e.$parent;!t||t._isBeingDestroyed||e.$options.abstract||h(t.$children,e),e._watcher&&e._watcher.teardown();for(var n=e._watchers.length;n--;)e._watchers[n].teardown();e._data.__ob__&&e._data.__ob__.vmCount--,e._isDestroyed=!
0,e.__patch__(e._vnode,null),je(e,"destroyed"),e.$off(),e.$el&&(e.$el.__vue__=null)}}}(xt),function(e){e.prototype.$nextTick=function(e){return or(e,this)},e.prototype._render=function(){var e=this,t=e.$options,n=t.render,r=t.staticRenderFns,o=t._parentVnode;if(e._isMounted)for(var i in e.$slots){var a=e.$slots[i];a._rendered&&(e.$slots[i]=ee(a,!0))}e.$scopedSlots=o&&o.data.scopedSlots||Un,r&&!e._staticTrees&&(e._staticTrees=[]),e.$vnode=o;var s;try{s=n.call(e._renderProxy,e.$createElement)}catch(t){j(t,e,"render function"),s=e._vnode}return s instanceof vr||(s=_r()),s.parent=o,s},e.prototype._o=dt,e.prototype._n=p,e.prototype._s=f,e.prototype._l=st,e.prototype._t=ut,e.prototype._q=x,e.prototype._i=E,e.prototype._m=pt,e.prototype._f=ct,e.prototype._k=lt,e.prototype._b=ft,e.prototype._v=Q,e.prototype._e=_r,e.prototype._u=we,e.prototype._g=yt}(xt);var Dr=[String,RegExp,Array],Fr={name:"keep-alive",abstract:!0,props:{include:Dr,exclude:Dr},created:function(){this.cache=Object.create(nu
ll)},destroyed:function(){var e=this;for(var t in e.cache)Nt(e.cache[t])},watch:{include:function(e){Tt(this.cache,this._vnode,function(t){return It(e,t)})},exclude:function(e){Tt(this.cache,this._vnode,function(t){return!It(e,t)})}},render:function(){var e=he(this.$slots.default),t=e&&e.componentOptions;if(t){var n=At(t);if(n&&(this.include&&!It(this.include,n)||this.exclude&&It(this.exclude,n)))return e;var r=null==e.key?t.Ctor.cid+(t.tag?"::"+t.tag:""):e.key;this.cache[r]?e.componentInstance=this.cache[r].componentInstance:this.cache[r]=e,e.data.keepAlive=!0}return e}},Lr={KeepAlive:Fr};!function(e){var t={};t.get=function(){return Wn},Object.defineProperty(e,"config",t),e.util={warn:Bn,extend:g,mergeOptions:J,defineReactive:$},e.set=R,e.delete=D,e.nextTick=or,e.options=Object.create(null),Fn.forEach(function(t){e.options[t+"s"]=Object.create(null)}),e.options._base=e,g(e.options.components,Lr),Et(e),Ot(e),St(e),jt(e)}(xt),Object.defineProperty(xt.prototype,"$isServer",{get:tr}),
Object.defineProperty(xt.prototype,"$ssrContext",{get:function(){return this.$vnode&&this.$vnode.ssrContext}}),xt.version="2.4.2";var Wr,Ur={},Vr=Object.freeze({namespaceMap:Ur,createElement:Pt,createElementNS:Mt,createTextNode:$t,createComment:Rt,insertBefore:Dt,removeChild:Ft,appendChild:Lt,parentNode:Wt,nextSibling:Ut,tagName:Vt,setTextContent:Bt,setAttribute:qt}),Br={create:function(e,t){zt(t)},update:function(e,t){e.data.ref!==t.data.ref&&(zt(e,!0),zt(t))},destroy:function(e){zt(e,!0)}},qr=(d("html,body,base,head,link,meta,style,title,address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgrou
p,option,output,progress,select,textarea,details,dialog,menu,menuitem,summary,content,element,shadow,template,blockquote,iframe,tfoot"),d("svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,foreignObject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view",!0),d("text,number,password,search,email,tel,url")),zr=new vr("",{},[]),Jr=["create","activate","update","remove","destroy"],Hr={create:Xt,update:Xt,destroy:function(e){Xt(e,zr)}},Gr=Object.create(null),Xr=[Br,Hr],Kr={create:en,update:en},Zr={create:tn,update:tn},Qr={create:an,update:an},Yr=y(Tn),eo={create:sn,update:un},to=y(function(e){return{enterClass:e+"-enter",enterToClass:e+"-enter-to",enterActiveClass:e+"-enter-active",leaveClass:e+"-leave",leaveToClass:e+"-leave-to",leaveActiveClass:e+"-leave-active"}}),no=(zn&&window.requestAnimationFrame&&window.requestAnimationFrame.bind(window),{create:fn,activate:fn,remove:pn}),ro=[Kr,Zr,Qr,eo,n
o],oo=ro.concat(Xr),io=function(e){function t(e){return new vr(T.tagName(e).toLowerCase(),{},[],void 0,e)}function i(e,t){function n(){0==--n.listeners&&s(e)}return n.listeners=t,n}function s(e){var t=T.parentNode(e);r(t)&&T.removeChild(t,e)}function u(e,t,n,i,a){if(e.isRootInsert=!a,!c(e,t,n,i)){var s=e.data,u=e.children,l=e.tag;if(r(l)){e.elm=e.ns?T.createElementNS(e.ns,l):T.createElement(l,e),m(e);var f=r(s)&&o(s.appendAsTree);f||(r(s)&&y(e,t),p(n,e.elm,i)),h(e,u,t),f&&(r(s)&&y(e,t),p(n,e.elm,i))}else o(e.isComment)?(e.elm=T.createComment(e.text),p(n,e.elm,i)):(e.elm=T.createTextNode(e.text),p(n,e.elm,i))}}function c(e,t,n,i){var a=e.data;if(r(a)){var s=r(e.componentInstance)&&a.keepAlive;if(r(a=a.hook)&&r(a=a.init)&&a(e,!1,n,i),r(e.componentInstance))return l(e,t),o(s)&&f(e,t,n,i),!0}}function l(e,t){r(e.data.pendingInsert)&&(t.push.apply(t,e.data.pendingInsert),e.data.pendingInsert=null),e.elm=e.componentInstance.$el,v(e)?(y(e,t),m(e)):(zt(e),t.push(e))}function f(e,t,n,o){for(
var i,a=e;a.componentInstance;)if(a=a.componentInstance._vnode,r(i=a.data)&&r(i=i.transition)){for(i=0;i<A.activate.length;++i)A.activate[i](zr,a);t.push(a);break}p(n,e.elm,o)}function p(e,t,n){r(e)&&(r(n)?n.parentNode===e&&T.insertBefore(e,t,n):T.appendChild(e,t))}function h(e,t,n){if(Array.isArray(t))for(var r=0;r<t.length;++r)u(t[r],n,e.elm,null,!0);else a(e.text)&&T.appendChild(e.elm,T.createTextNode(e.text))}function v(e){for(;e.componentInstance;)e=e.componentInstance._vnode;return r(e.tag)}function y(e,t){for(var n=0;n<A.create.length;++n)A.create[n](zr,e);k=e.data.hook,r(k)&&(r(k.create)&&k.create(zr,e),r(k.insert)&&t.push(e))}function m(e){for(var t,n=e;n;)r(t=n.context)&&r(t=t.$options._scopeId)&&T.setAttribute(e.elm,t,""),n=n.parent;r(t=br)&&t!==e.context&&r(t=t.$options._scopeId)&&T.setAttribute(e.elm,t,"")}function _(e,t,n,r,o,i){for(;r<=o;++r)u(n[r],i,e,t)}function g(e){var t,n,o=e.data;if(r(o))for(r(t=o.hook)&&r(t=t.destroy)&&t(e),t=0;t<A.destroy.length;++t)A.destroy[
t](e);if(r(t=e.children))for(n=0;n<e.children.length;++n)g(e.children[n])}function b(e,t,n,o){for(;n<=o;++n){var i=t[n];r(i)&&(r(i.tag)?(w(i),g(i)):s(i.elm))}}function w(e,t){if(r(t)||r(e.data)){var n,o=A.remove.length+1;for(r(t)?t.listeners+=o:t=i(e.elm,o),r(n=e.componentInstance)&&r(n=n._vnode)&&r(n.data)&&w(n,t),n=0;n<A.remove.length;++n)A.remove[n](e,t);r(n=e.data.hook)&&r(n=n.remove)?n(e,t):t()}else s(e.elm)}function x(e,t,o,i,a){for(var s,c,l,f,p=0,d=0,h=t.length-1,v=t[0],y=t[h],m=o.length-1,g=o[0],w=o[m],x=!a;p<=h&&d<=m;)n(v)?v=t[++p]:n(y)?y=t[--h]:Jt(v,g)?(O(v,g,i),v=t[++p],g=o[++d]):Jt(y,w)?(O(y,w,i),y=t[--h],w=o[--m]):Jt(v,w)?(O(v,w,i),x&&T.insertBefore(e,v.elm,T.nextSibling(y.elm)),v=t[++p],w=o[--m]):Jt(y,g)?(O(y,g,i),x&&T.insertBefore(e,y.elm,v.elm),y=t[--h],g=o[++d]):(n(s)&&(s=Gt(t,p,h)),c=r(g.key)?s[g.key]:E(g,t,p,h),n(c)?u(g,i,e,v.elm):(l=t[c],Jt(l,g)?(O(l,g,i),t[c]=void 0,x&&T.insertBefore(e,l.elm,v.elm)):u(g,i,e,v.elm)),g=o[++d]);p>h?(f=n(o[m+1])?null:o[m+1].elm,_(e
,f,o,d,m,i)):d>m&&b(e,t,p,h)}function E(e,t,n,o){for(var i=n;i<o;i++){var a=t[i];if(r(a)&&Jt(e,a))return i}}function O(e,t,i,a){if(e!==t){var s=t.elm=e.elm;if(o(e.isAsyncPlaceholder))return void(r(t.asyncFactory.resolved)?C(e.elm,t,i):t.isAsyncPlaceholder=!0);if(o(t.isStatic)&&o(e.isStatic)&&t.key===e.key&&(o(t.isCloned)||o(t.isOnce)))return void(t.componentInstance=e.componentInstance);var u,c=t.data;r(c)&&r(u=c.hook)&&r(u=u.prepatch)&&u(e,t);var l=e.children,f=t.children;if(r(c)&&v(t)){for(u=0;u<A.update.length;++u)A.update[u](e,t);r(u=c.hook)&&r(u=u.update)&&u(e,t)}n(t.text)?r(l)&&r(f)?l!==f&&x(s,l,f,i,a):r(f)?(r(e.text)&&T.setTextContent(s,""),_(s,null,f,0,f.length-1,i)):r(l)?b(s,l,0,l.length-1):r(e.text)&&T.setTextContent(s,""):e.text!==t.text&&T.setTextContent(s,t.text),r(c)&&r(u=c.hook)&&r(u=u.postpatch)&&u(e,t)}}function S(e,t,n){if(o(n)&&r(e.parent))e.parent.data.pendingInsert=t;else for(var i=0;i<t.length;++i)t[i].data.hook.insert(t[i])}function C(e,t,n){if(o(t.isComment)&
&r(t.asyncFactory))return t.elm=e,t.isAsyncPlaceholder=!0,!0;t.elm=e;var i=t.tag,a=t.data,s=t.children;if(r(a)&&(r(k=a.hook)&&r(k=k.init)&&k(t,!0),r(k=t.componentInstance)))return l(t,n),!0;if(r(i)){if
<TRUNCATED>
[27/50] [abbrv] incubator-weex git commit: update so
Posted by gu...@apache.org.
update so
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/9ea8bbd3
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/9ea8bbd3
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/9ea8bbd3
Branch: refs/heads/master
Commit: 9ea8bbd3c15fd958a5a675571c45cc20951ec814
Parents: ccf0590
Author: yuhun-alibaba <to...@gmail.com>
Authored: Wed Oct 11 14:27:47 2017 +0800
Committer: yuhun-alibaba <to...@gmail.com>
Committed: Wed Oct 11 14:27:47 2017 +0800
----------------------------------------------------------------------
android/sdk/libs/armeabi/libweexjsb.so | Bin 22620 -> 22620 bytes
android/sdk/libs/armeabi/libweexjsc.so | Bin 342264 -> 342264 bytes
android/sdk/libs/armeabi/libweexjss.so | Bin 6754016 -> 6754016 bytes
3 files changed, 0 insertions(+), 0 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/9ea8bbd3/android/sdk/libs/armeabi/libweexjsb.so
----------------------------------------------------------------------
diff --git a/android/sdk/libs/armeabi/libweexjsb.so b/android/sdk/libs/armeabi/libweexjsb.so
index cd36273..2d3b7b4 100755
Binary files a/android/sdk/libs/armeabi/libweexjsb.so and b/android/sdk/libs/armeabi/libweexjsb.so differ
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/9ea8bbd3/android/sdk/libs/armeabi/libweexjsc.so
----------------------------------------------------------------------
diff --git a/android/sdk/libs/armeabi/libweexjsc.so b/android/sdk/libs/armeabi/libweexjsc.so
index 36eae45..d4009b8 100755
Binary files a/android/sdk/libs/armeabi/libweexjsc.so and b/android/sdk/libs/armeabi/libweexjsc.so differ
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/9ea8bbd3/android/sdk/libs/armeabi/libweexjss.so
----------------------------------------------------------------------
diff --git a/android/sdk/libs/armeabi/libweexjss.so b/android/sdk/libs/armeabi/libweexjss.so
index 544d41d..f0bb8d4 100755
Binary files a/android/sdk/libs/armeabi/libweexjss.so and b/android/sdk/libs/armeabi/libweexjss.so differ
[03/50] [abbrv] incubator-weex git commit: * [test] update travis ,
for message info
Posted by gu...@apache.org.
* [test] update travis , for message info
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/762f66b8
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/762f66b8
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/762f66b8
Branch: refs/heads/master
Commit: 762f66b84f3976270d6fda60301063bf42aa5224
Parents: f2d6a33
Author: gurisxie <27...@qq.com>
Authored: Wed Oct 4 14:34:13 2017 +0800
Committer: gurisxie <27...@qq.com>
Committed: Wed Oct 4 16:21:39 2017 +0800
----------------------------------------------------------------------
.travis.yml | 4 +---
dangerfile-android.js | 1 +
dangerfile-ios.js | 3 +++
dangerfile-jsfm.js | 1 +
dangerfile.js | 2 +-
5 files changed, 7 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/762f66b8/.travis.yml
----------------------------------------------------------------------
diff --git a/.travis.yml b/.travis.yml
index d0d6fd3..a7bca6f 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -60,9 +60,7 @@ before_script:
script:
- |
if [[ $TEST_SUITE = "android" ]]; then
- cd android
- ./gradlew clean assembleDebug :weex_sdk:testDebugUnitTest --info -PdisableCov=true -Dorg.gradle.daemon=true -Dorg.gradle.parallel=true -Dorg.gradle.jvmargs="-Xmx512m -XX:+HeapDumpOnOutOfMemoryError" -Dfile.encoding=UTF-8 &&
- cd $TRAVIS_BUILD_DIR
+ npm run danger -- run --dangerfile ./dangerfile-android.js
fi
- |
if [[ $TEST_SUITE = "jsfm" ]]; then
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/762f66b8/dangerfile-android.js
----------------------------------------------------------------------
diff --git a/dangerfile-android.js b/dangerfile-android.js
index 06986df..51ca400 100644
--- a/dangerfile-android.js
+++ b/dangerfile-android.js
@@ -107,3 +107,4 @@ if(hasAndroidFile){
message('has no android file changed.')
}
+message('android test finished.')
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/762f66b8/dangerfile-ios.js
----------------------------------------------------------------------
diff --git a/dangerfile-ios.js b/dangerfile-ios.js
index e0c61e1..93c5a1e 100644
--- a/dangerfile-ios.js
+++ b/dangerfile-ios.js
@@ -106,3 +106,6 @@ if(hasIosFile){
message('has no ios file changed.');
}
+message('ios test finished.')
+
+
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/762f66b8/dangerfile-jsfm.js
----------------------------------------------------------------------
diff --git a/dangerfile-jsfm.js b/dangerfile-jsfm.js
index 45a6a3c..2f663bd 100644
--- a/dangerfile-jsfm.js
+++ b/dangerfile-jsfm.js
@@ -104,3 +104,4 @@ if(hasJsfmFile){
message('has no jsfm file changed.');
}
+message('jsfm test finished.')
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/762f66b8/dangerfile.js
----------------------------------------------------------------------
diff --git a/dangerfile.js b/dangerfile.js
index 2a7829f..248276a 100644
--- a/dangerfile.js
+++ b/dangerfile.js
@@ -461,7 +461,7 @@ function findBlameReviewers(fileToDeletedLinesMap, fileToNormalLinesMap, fileToB
message("According to the blame info, we recommended " + names.join(' , ') + " to be the reviewers.")
}
}
-
+message('danger test finished.')
/*
* find reviewer end
*/
[35/50] [abbrv] incubator-weex git commit: * [android] modify log
print
Posted by gu...@apache.org.
* [android] modify log print
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/b5126471
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/b5126471
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/b5126471
Branch: refs/heads/master
Commit: b5126471d1b3d9ab04e1c1e39cc636079c47cf58
Parents: 8cebed4
Author: zshshr <zh...@gmail.com>
Authored: Tue Oct 10 12:06:33 2017 +0800
Committer: zshshr <zh...@gmail.com>
Committed: Tue Oct 17 10:56:05 2017 +0800
----------------------------------------------------------------------
.../main/java/com/taobao/weex/WXSDKEngine.java | 6 +
.../com/taobao/weex/bridge/WXBridgeManager.java | 993 +++++++++----------
.../java/com/taobao/weex/dom/WXDomObject.java | 4 +-
.../dom/action/AbstractAddElementAction.java | 4 +-
.../weex/ui/component/WXComponentFactory.java | 2 -
.../java/com/taobao/weex/utils/WXLogUtils.java | 24 +-
6 files changed, 513 insertions(+), 520 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b5126471/android/sdk/src/main/java/com/taobao/weex/WXSDKEngine.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/WXSDKEngine.java b/android/sdk/src/main/java/com/taobao/weex/WXSDKEngine.java
index 3a287cc..0296379 100644
--- a/android/sdk/src/main/java/com/taobao/weex/WXSDKEngine.java
+++ b/android/sdk/src/main/java/com/taobao/weex/WXSDKEngine.java
@@ -93,6 +93,7 @@ import com.taobao.weex.ui.module.WXMetaModule;
import com.taobao.weex.ui.module.WXModalUIModule;
import com.taobao.weex.ui.module.WXTimerModule;
import com.taobao.weex.ui.module.WXWebViewModule;
+import com.taobao.weex.utils.LogLevel;
import com.taobao.weex.utils.WXLogUtils;
import com.taobao.weex.utils.WXSoInstallMgrSdk;
import com.taobao.weex.utils.batch.BatchOperationHelper;
@@ -158,6 +159,11 @@ public class WXSDKEngine {
}
long start = System.currentTimeMillis();
WXEnvironment.sSDKInitStart = start;
+ if(WXEnvironment.isApkDebugable()){
+ WXEnvironment.sLogLevel = LogLevel.DEBUG;
+ }else{
+ WXEnvironment.sLogLevel = LogLevel.WARN;
+ }
doInitInternal(application,config);
WXEnvironment.sSDKInitInvokeTime = System.currentTimeMillis()-start;
WXLogUtils.renderPerformanceLog("SDKInitInvokeTime", WXEnvironment.sSDKInitInvokeTime);
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b5126471/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridgeManager.java
----------------------------------------------------------------------
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 713c4c2..c44d7af 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
@@ -84,26 +84,26 @@ import static com.taobao.weex.bridge.WXModuleManager.getDomModule;
/**
* Manager class for communication between JavaScript and Android.
* <ol>
- * <li>
- * Handle Android to JavaScript call, can be one of the following
- * <ul>
- * <li>{@link #createInstance(String, String, Map, String)}</li>
- * <li>{@link #destroyInstance(String)}</li>
- * <li>{@link #refreshInstance(String, WXRefreshData)}</li>
- * <li>{@link #registerModules(Map)}</li>
- * <li>{@link #registerComponents(List)}</li>
- * <li>{@link #invokeCallJSBatch(Message)}</li>
- * </ul>
- * </li>
- * <li>
- * Handle JavaScript to Android call
- * </li>
- * <li>
- * Handle next tick of message.
- * </li>
+ * <li>
+ * Handle Android to JavaScript call, can be one of the following
+ * <ul>
+ * <li>{@link #createInstance(String, String, Map, String)}</li>
+ * <li>{@link #destroyInstance(String)}</li>
+ * <li>{@link #refreshInstance(String, WXRefreshData)}</li>
+ * <li>{@link #registerModules(Map)}</li>
+ * <li>{@link #registerComponents(List)}</li>
+ * <li>{@link #invokeCallJSBatch(Message)}</li>
+ * </ul>
+ * </li>
+ * <li>
+ * Handle JavaScript to Android call
+ * </li>
+ * <li>
+ * Handle next tick of message.
+ * </li>
* </ol>
*/
-public class WXBridgeManager implements Callback,BactchExecutor {
+public class WXBridgeManager implements Callback, BactchExecutor {
public static final String METHOD_CREATE_INSTANCE = "createInstance";
public static final String METHOD_DESTROY_INSTANCE = "destroyInstance";
@@ -129,33 +129,28 @@ public class WXBridgeManager implements Callback,BactchExecutor {
public static final String KEY_PARAMS = "params";
public static final String ARGS = "args";
public static final String OPTIONS = "options";
+ public static final String INITLOGFILE = "/jsserver_start.log";
private static final String NON_CALLBACK = "-1";
private static final String UNDEFINED = "undefined";
-
private static final int INIT_FRAMEWORK_OK = 1;
-
- private static long LOW_MEM_VALUE = 120;
-
- static volatile WXBridgeManager mBridgeManager;
-
private static final int CRASHREINIT = 50;
+ static volatile WXBridgeManager mBridgeManager;
+ private static long LOW_MEM_VALUE = 120;
private static int reInitCount = 1;
-
private static String crashUrl = null;
private static long lastCrashTime = 0;
- public static final String INITLOGFILE = "/jsserver_start.log";
-
-
+ /**
+ * package
+ **/
+ Handler mJSHandler;
/**
* next tick tasks, can set priority
*/
private WXHashMap<String, ArrayList<WXHashMap<String, Object>>> mNextTickTasks = new WXHashMap<>();
-
/**
* JSThread
*/
private WXThread mJSThread;
- /** package **/ Handler mJSHandler;
private IWXBridge mWXBridge;
private IWXDebugProxy mWxDebugProxy;
@@ -163,22 +158,13 @@ public class WXBridgeManager implements Callback,BactchExecutor {
/**
* Whether JS Framework(main.js) has been initialized.
*/
- private boolean mInit =false;
-
- private boolean isJSFrameworkInit(){
- return mInit;
- }
-
+ private boolean mInit = false;
private List<Map<String, Object>> mRegisterComponentFailList = new ArrayList<>(8);
private List<Map<String, Object>> mRegisterModuleFailList = new ArrayList<>(8);
private List<String> mRegisterServiceFailList = new ArrayList<>(8);
-
private List<String> mDestroyedInstanceId = new ArrayList<>();
-
private StringBuilder mLodBuilder = new StringBuilder(50);
-
private Interceptor mInterceptor;
-
private WXParams mInitParams;
private WXBridgeManager() {
@@ -198,6 +184,10 @@ public class WXBridgeManager implements Callback,BactchExecutor {
return mBridgeManager;
}
+ private boolean isJSFrameworkInit() {
+ return mInit;
+ }
+
private void initWXBridge(boolean remoteDebug) {
if (remoteDebug && WXEnvironment.isApkDebugable()) {
WXEnvironment.sDebugServerConnectable = true;
@@ -214,7 +204,7 @@ public class WXBridgeManager implements Callback,BactchExecutor {
Constructor constructor = clazz.getConstructor(Context.class, WXBridgeManager.class);
if (constructor != null) {
mWxDebugProxy = (IWXDebugProxy) constructor.newInstance(
- WXEnvironment.getApplication(), WXBridgeManager.this);
+ WXEnvironment.getApplication(), WXBridgeManager.this);
if (mWxDebugProxy != null) {
mWxDebugProxy.start();
}
@@ -242,36 +232,36 @@ public class WXBridgeManager implements Callback,BactchExecutor {
}
}
- public Object callModuleMethod(String instanceId, String moduleStr, String methodStr, JSONArray args) {
- return callModuleMethod(instanceId, moduleStr, methodStr, args, null);
+ public Object callModuleMethod(String instanceId, String moduleStr, String methodStr, JSONArray args) {
+ return callModuleMethod(instanceId, moduleStr, methodStr, args, null);
}
- public Object callModuleMethod(String instanceId, String moduleStr, String methodStr, JSONArray args, JSONObject options) {
- WXSDKInstance wxsdkInstance = WXSDKManager.getInstance()
- .getSDKInstance(instanceId);
- if (wxsdkInstance == null) {
+ public Object callModuleMethod(String instanceId, String moduleStr, String methodStr, JSONArray args, JSONObject options) {
+ WXSDKInstance wxsdkInstance = WXSDKManager.getInstance()
+ .getSDKInstance(instanceId);
+ if (wxsdkInstance == null) {
+ return null;
+ }
+ if (wxsdkInstance.isNeedValidate()
+ && WXSDKManager.getInstance().getValidateProcessor() != null) {
+ WXValidateProcessor.WXModuleValidateResult validateResult = WXSDKManager
+ .getInstance().getValidateProcessor()
+ .onModuleValidate(wxsdkInstance, moduleStr, methodStr, args, options);
+ if (validateResult == null) {
return null;
}
- if (wxsdkInstance.isNeedValidate()
- && WXSDKManager.getInstance().getValidateProcessor() != null) {
- WXValidateProcessor.WXModuleValidateResult validateResult = WXSDKManager
- .getInstance().getValidateProcessor()
- .onModuleValidate(wxsdkInstance, moduleStr, methodStr, args, options);
- if (validateResult == null) {
- return null;
- }
- if (validateResult.isSuccess) {
- return WXModuleManager.callModuleMethod(instanceId, moduleStr, methodStr,
- args);
- } else {
- JSONObject validateInfo = validateResult.validateInfo;
- if (validateInfo != null) {
- WXLogUtils.e("[WXBridgeManager] module validate fail. >>> " + validateInfo.toJSONString());
- }
- return validateInfo;
- }
+ if (validateResult.isSuccess) {
+ return WXModuleManager.callModuleMethod(instanceId, moduleStr, methodStr,
+ args);
+ } else {
+ JSONObject validateInfo = validateResult.validateInfo;
+ if (validateInfo != null) {
+ WXLogUtils.e("[WXBridgeManager] module validate fail. >>> " + validateInfo.toJSONString());
+ }
+ return validateInfo;
}
- return WXModuleManager.callModuleMethod(instanceId, moduleStr, methodStr, args);
+ }
+ return WXModuleManager.callModuleMethod(instanceId, moduleStr, methodStr, args);
}
/**
@@ -284,6 +274,7 @@ public class WXBridgeManager implements Callback,BactchExecutor {
/**
* Set current Instance
+ *
* @param instanceId {@link WXSDKInstance#mInstanceId}
*/
public synchronized void setStackTopInstance(final String instanceId) {
@@ -297,12 +288,12 @@ public class WXBridgeManager implements Callback,BactchExecutor {
}
@Override
- public void post(Runnable r){
- if(mInterceptor != null && mInterceptor.take(r)){
+ public void post(Runnable r) {
+ if (mInterceptor != null && mInterceptor.take(r)) {
//task is token by the interceptor
return;
}
- if (mJSHandler == null){
+ if (mJSHandler == null) {
return;
}
@@ -335,15 +326,15 @@ public class WXBridgeManager implements Callback,BactchExecutor {
mJSHandler.sendMessageDelayed(message, timerInfo.time);
}
- public void sendMessageDelayed(Message message, long delayMillis){
+ public void sendMessageDelayed(Message message, long delayMillis) {
if (message == null || mJSHandler == null || mJSThread == null
|| !mJSThread.isWXThreadAlive() || mJSThread.getLooper() == null) {
return;
}
- mJSHandler.sendMessageDelayed(message,delayMillis);
+ mJSHandler.sendMessageDelayed(message, delayMillis);
}
- public void removeMessage(int what,Object obj){
+ public void removeMessage(int what, Object obj) {
if (mJSHandler == null || mJSThread == null
|| !mJSThread.isWXThreadAlive() || mJSThread.getLooper() == null) {
return;
@@ -351,98 +342,97 @@ public class WXBridgeManager implements Callback,BactchExecutor {
mJSHandler.removeMessages(what, obj);
}
- public Object callNativeModule(String instanceId, String module, String method, JSONArray arguments, Object options) {
+ public Object callNativeModule(String instanceId, String module, String method, JSONArray arguments, Object options) {
- if (WXEnvironment.isApkDebugable()) {
- mLodBuilder.append("[WXBridgeManager] callNativeModule >>>> instanceId:").append(instanceId)
- .append(", module:").append(module).append(", method:").append(method).append(", arguments:").append(arguments);
- WXLogUtils.d(mLodBuilder.substring(0));
- mLodBuilder.setLength(0);
- }
-
- try {
- if(WXDomModule.WXDOM.equals(module)){
- WXDomModule dom = getDomModule(instanceId);
- return dom.callDomMethod(method,arguments);
- }else {
- return callModuleMethod(instanceId, module,
- method, arguments);
- }
- } catch (Exception e) {
- WXLogUtils.e("[WXBridgeManager] callNative exception: ", e);
- commitJSBridgeAlarmMonitor(instanceId, WXErrorCode.WX_ERR_INVOKE_NATIVE, "[WXBridgeManager] callNativeModule exception " + e.getCause());
- }
+ if (WXEnvironment.isApkDebugable()) {
+ mLodBuilder.append("[WXBridgeManager] callNativeModule >>>> instanceId:").append(instanceId)
+ .append(", module:").append(module).append(", method:").append(method).append(", arguments:").append(arguments);
+ WXLogUtils.d(mLodBuilder.substring(0));
+ mLodBuilder.setLength(0);
+ }
- return null;
+ try {
+ if (WXDomModule.WXDOM.equals(module)) {
+ WXDomModule dom = getDomModule(instanceId);
+ return dom.callDomMethod(method, arguments);
+ } else {
+ return callModuleMethod(instanceId, module,
+ method, arguments);
+ }
+ } catch (Exception e) {
+ WXLogUtils.e("[WXBridgeManager] callNative exception: ", e);
+ commitJSBridgeAlarmMonitor(instanceId, WXErrorCode.WX_ERR_INVOKE_NATIVE, "[WXBridgeManager] callNativeModule exception " + e.getCause());
}
- public Object callNativeModule(String instanceId, String module,String method, JSONArray arguments, JSONObject options) {
- if (WXEnvironment.isApkDebugable()) {
- mLodBuilder.append("[WXBridgeManager] callNativeModule >>>> instanceId:").append(instanceId)
- .append(", module:").append(module).append(", method:").append(method).append(", arguments:").append(arguments);
- WXLogUtils.d(mLodBuilder.substring(0));
- mLodBuilder.setLength(0);
- }
+ return null;
+ }
- try {
- if(WXDomModule.WXDOM.equals(module)){
- WXDomModule dom = getDomModule(instanceId);
- return dom.callDomMethod(method,arguments);
- }else {
- return callModuleMethod(instanceId, module,
- method, arguments, options);
- }
- } catch (Exception e) {
- WXLogUtils.e("[WXBridgeManager] callNative exception: ", e);
- commitJSBridgeAlarmMonitor(instanceId, WXErrorCode.WX_ERR_INVOKE_NATIVE, "[WXBridgeManager] callNativeModule exception " + e.getCause());
- }
+ public Object callNativeModule(String instanceId, String module, String method, JSONArray arguments, JSONObject options) {
- return null;
+ if (WXEnvironment.isApkDebugable()) {
+ mLodBuilder.append("[WXBridgeManager] callNativeModule >>>> instanceId:").append(instanceId)
+ .append(", module:").append(module).append(", method:").append(method).append(", arguments:").append(arguments);
+ WXLogUtils.d(mLodBuilder.substring(0));
+ mLodBuilder.setLength(0);
}
- public Object callNativeComponent(String instanceId, String componentRef, String method, JSONArray arguments, Object options) {
- if (WXEnvironment.isApkDebugable()) {
- mLodBuilder.append("[WXBridgeManager] callNativeComponent >>>> instanceId:").append(instanceId)
- .append(", componentRef:").append(componentRef).append(", method:").append(method).append(", arguments:").append(arguments);
- WXLogUtils.d(mLodBuilder.substring(0));
- mLodBuilder.setLength(0);
- }
- try {
+ try {
+ if (WXDomModule.WXDOM.equals(module)) {
+ WXDomModule dom = getDomModule(instanceId);
+ return dom.callDomMethod(method, arguments);
+ } else {
+ return callModuleMethod(instanceId, module,
+ method, arguments, options);
+ }
+ } catch (Exception e) {
+ WXLogUtils.e("[WXBridgeManager] callNative exception: ", e);
+ commitJSBridgeAlarmMonitor(instanceId, WXErrorCode.WX_ERR_INVOKE_NATIVE, "[WXBridgeManager] callNativeModule exception " + e.getCause());
+ }
- WXDomModule dom = getDomModule(instanceId);
- dom.invokeMethod(componentRef, method, arguments);
+ return null;
+ }
- } catch (Exception e) {
- WXLogUtils.e("[WXBridgeManager] callNative exception: ", e);
- commitJSBridgeAlarmMonitor(instanceId, WXErrorCode.WX_ERR_INVOKE_NATIVE, "[WXBridgeManager] callNativeModule exception " + e.getCause());
- }
- return null;
+ public Object callNativeComponent(String instanceId, String componentRef, String method, JSONArray arguments, Object options) {
+ if (WXEnvironment.isApkDebugable()) {
+ mLodBuilder.append("[WXBridgeManager] callNativeComponent >>>> instanceId:").append(instanceId)
+ .append(", componentRef:").append(componentRef).append(", method:").append(method).append(", arguments:").append(arguments);
+ WXLogUtils.d(mLodBuilder.substring(0));
+ mLodBuilder.setLength(0);
}
+ try {
+
+ WXDomModule dom = getDomModule(instanceId);
+ dom.invokeMethod(componentRef, method, arguments);
+
+ } catch (Exception e) {
+ WXLogUtils.e("[WXBridgeManager] callNative exception: ", e);
+ commitJSBridgeAlarmMonitor(instanceId, WXErrorCode.WX_ERR_INVOKE_NATIVE, "[WXBridgeManager] callNativeModule exception " + e.getCause());
+ }
+ return null;
+ }
/**
* Dispatch the native task to be executed.
- *
+ *
* @param instanceId {@link WXSDKInstance#mInstanceId}
- * @param tasks tasks to be executed
- * @param callback next tick id
+ * @param tasks tasks to be executed
+ * @param callback next tick id
*/
public int callNative(String instanceId, String tasks, String callback) {
if (TextUtils.isEmpty(tasks)) {
- if (WXEnvironment.isApkDebugable()) {
- WXLogUtils.e("[WXBridgeManager] callNative: call Native tasks is null");
- }
- commitJSBridgeAlarmMonitor(instanceId, WXErrorCode.WX_ERR_INVOKE_NATIVE,"[WXBridgeManager] callNative: call Native tasks is null");
+ WXLogUtils.e("[WXBridgeManager] callNative: call Native tasks is null");
+ commitJSBridgeAlarmMonitor(instanceId, WXErrorCode.WX_ERR_INVOKE_NATIVE, "[WXBridgeManager] callNative: call Native tasks is null");
return IWXBridge.INSTANCE_RENDERING_ERROR;
}
// if (WXEnvironment.isApkDebugable()) {
- mLodBuilder.append("[WXBridgeManager] callNative >>>> instanceId:").append(instanceId)
- .append(", tasks:").append(tasks).append(", callback:").append(callback);
- WXLogUtils.d(mLodBuilder.substring(0));
- mLodBuilder.setLength(0);
+ mLodBuilder.append("[WXBridgeManager] callNative >>>> instanceId:").append(instanceId)
+ .append(", tasks:").append(tasks).append(", callback:").append(callback);
+ WXLogUtils.d(mLodBuilder.substring(0));
+ mLodBuilder.setLength(0);
// }
- if(mDestroyedInstanceId!=null &&mDestroyedInstanceId.contains(instanceId)){
+ if (mDestroyedInstanceId != null && mDestroyedInstanceId.contains(instanceId)) {
return IWXBridge.DESTROY_INSTANCE;
}
@@ -452,7 +442,7 @@ public class WXBridgeManager implements Callback,BactchExecutor {
JSONArray array = JSON.parseArray(tasks);
parseNanos = System.nanoTime() - parseNanos;
- if(WXSDKManager.getInstance().getSDKInstance(instanceId)!=null) {
+ if (WXSDKManager.getInstance().getSDKInstance(instanceId) != null) {
WXSDKManager.getInstance().getSDKInstance(instanceId).jsonParseTime(System.currentTimeMillis() - start);
}
@@ -464,27 +454,27 @@ public class WXBridgeManager implements Callback,BactchExecutor {
task = (JSONObject) array.get(i);
if (task != null && WXSDKManager.getInstance().getSDKInstance(instanceId) != null) {
Object target = task.get(MODULE);
- if(target != null){
- if(WXDomModule.WXDOM.equals(target)){
+ if (target != null) {
+ if (WXDomModule.WXDOM.equals(target)) {
WXDomModule dom = getDomModule(instanceId);
- dom.callDomMethod(task,parseNanos);
- }else {
+ dom.callDomMethod(task, parseNanos);
+ } else {
JSONObject optionObj = task.getJSONObject(OPTIONS);
callModuleMethod(instanceId, (String) target,
- (String) task.get(METHOD), (JSONArray) task.get(ARGS), optionObj);
+ (String) task.get(METHOD), (JSONArray) task.get(ARGS), optionObj);
}
- }else if(task.get(COMPONENT) != null){
+ } else if (task.get(COMPONENT) != null) {
//call component
WXDomModule dom = getDomModule(instanceId);
- dom.invokeMethod((String) task.get(REF),(String) task.get(METHOD),(JSONArray) task.get(ARGS));
- }else{
+ dom.invokeMethod((String) task.get(REF), (String) task.get(METHOD), (JSONArray) task.get(ARGS));
+ } else {
throw new IllegalArgumentException("unknown callNative");
}
}
}
} catch (Exception e) {
WXLogUtils.e("[WXBridgeManager] callNative exception: ", e);
- commitJSBridgeAlarmMonitor(instanceId, WXErrorCode.WX_ERR_INVOKE_NATIVE,"[WXBridgeManager] callNative exception "+e.getCause());
+ commitJSBridgeAlarmMonitor(instanceId, WXErrorCode.WX_ERR_INVOKE_NATIVE, "[WXBridgeManager] callNative exception " + e.getCause());
}
}
@@ -500,21 +490,21 @@ public class WXBridgeManager implements Callback,BactchExecutor {
public int callCreateBody(String instanceId, String tasks, String callback) {
if (TextUtils.isEmpty(tasks)) {
// if (WXEnvironment.isApkDebugable()) {
- WXLogUtils.d("[WXBridgeManager] callCreateBody: call CreateBody tasks is null");
+ WXLogUtils.d("[WXBridgeManager] callCreateBody: call CreateBody tasks is null");
// }
- commitJSBridgeAlarmMonitor(instanceId, WXErrorCode.WX_ERR_DOM_CREATEBODY,"[WXBridgeManager] callCreateBody: call CreateBody tasks is null");
+ commitJSBridgeAlarmMonitor(instanceId, WXErrorCode.WX_ERR_DOM_CREATEBODY, "[WXBridgeManager] callCreateBody: call CreateBody tasks is null");
return IWXBridge.INSTANCE_RENDERING_ERROR;
}
// if (WXEnvironment.isApkDebugable()) {
- mLodBuilder.append("[WXBridgeManager] callCreateBody >>>> instanceId:").append(instanceId)
- .append(", tasks:").append(tasks).append(", callback:").append(callback);
- WXLogUtils.d(mLodBuilder.substring(0));
- mLodBuilder.setLength(0);
+ mLodBuilder.append("[WXBridgeManager] callCreateBody >>>> instanceId:").append(instanceId)
+ .append(", tasks:").append(tasks).append(", callback:").append(callback);
+ WXLogUtils.d(mLodBuilder.substring(0));
+ mLodBuilder.setLength(0);
// }
- if(mDestroyedInstanceId != null && mDestroyedInstanceId.contains(instanceId)){
+ if (mDestroyedInstanceId != null && mDestroyedInstanceId.contains(instanceId)) {
return IWXBridge.DESTROY_INSTANCE;
}
@@ -527,7 +517,7 @@ public class WXBridgeManager implements Callback,BactchExecutor {
WXDomModule domModule = getDomModule(instanceId);
Action action = Actions.getCreateBody(domObject);
- domModule.postAction((DOMAction)action, true);
+ domModule.postAction((DOMAction) action, true);
if (WXTracing.isAvailable() && action instanceof TraceableAction) {
((TraceableAction) action).mParseJsonNanos = nanosTemp;
@@ -536,8 +526,8 @@ public class WXBridgeManager implements Callback,BactchExecutor {
}
}
} catch (Exception e) {
- WXLogUtils.e("[WXBridgeManager] callCreateBody exception: ", e);
- commitJSBridgeAlarmMonitor(instanceId, WXErrorCode.WX_ERR_DOM_CREATEBODY,"[WXBridgeManager] callCreateBody exception "+e.getCause());
+ WXLogUtils.e("[WXBridgeManager] callCreateBody exception: ", e);
+ commitJSBridgeAlarmMonitor(instanceId, WXErrorCode.WX_ERR_DOM_CREATEBODY, "[WXBridgeManager] callCreateBody exception " + e.getCause());
}
if (UNDEFINED.equals(callback) || NON_CALLBACK.equals(callback)) {
@@ -553,12 +543,12 @@ public class WXBridgeManager implements Callback,BactchExecutor {
public int callUpdateFinish(String instanceId, String callback) {
if (WXEnvironment.isApkDebugable()) {
mLodBuilder.append("[WXBridgeManager] callUpdateFinish >>>> instanceId:").append(instanceId)
- .append(", callback:").append(callback);
+ .append(", callback:").append(callback);
WXLogUtils.d(mLodBuilder.substring(0));
mLodBuilder.setLength(0);
}
- if(mDestroyedInstanceId != null && mDestroyedInstanceId.contains(instanceId)){
+ if (mDestroyedInstanceId != null && mDestroyedInstanceId.contains(instanceId)) {
return IWXBridge.DESTROY_INSTANCE;
}
@@ -566,11 +556,11 @@ public class WXBridgeManager implements Callback,BactchExecutor {
if (WXSDKManager.getInstance().getSDKInstance(instanceId) != null) {
WXDomModule domModule = getDomModule(instanceId);
Action action = Actions.getUpdateFinish();
- domModule.postAction((DOMAction)action, false);
+ domModule.postAction((DOMAction) action, false);
}
} catch (Exception e) {
WXLogUtils.e("[WXBridgeManager] callUpdateFinish exception: ", e);
- commitJSBridgeAlarmMonitor(instanceId, WXErrorCode.WX_ERR_INVOKE_NATIVE,"[WXBridgeManager] callUpdateFinish exception "+e.getCause());
+ commitJSBridgeAlarmMonitor(instanceId, WXErrorCode.WX_ERR_INVOKE_NATIVE, "[WXBridgeManager] callUpdateFinish exception " + e.getCause());
}
if (UNDEFINED.equals(callback) || NON_CALLBACK.equals(callback)) {
@@ -584,13 +574,13 @@ public class WXBridgeManager implements Callback,BactchExecutor {
// callCreateFinish
public int callCreateFinish(String instanceId, String callback) {
// if (WXEnvironment.isApkDebugable()) {
- mLodBuilder.append("[WXBridgeManager] callCreateFinish >>>> instanceId:").append(instanceId)
- .append(", callback:").append(callback);
- WXLogUtils.d(mLodBuilder.substring(0));
- mLodBuilder.setLength(0);
+ mLodBuilder.append("[WXBridgeManager] callCreateFinish >>>> instanceId:").append(instanceId)
+ .append(", callback:").append(callback);
+ WXLogUtils.d(mLodBuilder.substring(0));
+ mLodBuilder.setLength(0);
// }
- if(mDestroyedInstanceId != null && mDestroyedInstanceId.contains(instanceId)) {
+ if (mDestroyedInstanceId != null && mDestroyedInstanceId.contains(instanceId)) {
return IWXBridge.DESTROY_INSTANCE;
}
@@ -598,11 +588,11 @@ public class WXBridgeManager implements Callback,BactchExecutor {
if (WXSDKManager.getInstance().getSDKInstance(instanceId) != null) {
WXDomModule domModule = getDomModule(instanceId);
Action action = Actions.getCreateFinish();
- domModule.postAction((DOMAction)action, false);
+ domModule.postAction((DOMAction) action, false);
}
} catch (Exception e) {
WXLogUtils.e("[WXBridgeManager] callCreateFinish exception: ", e);
- commitJSBridgeAlarmMonitor(instanceId, WXErrorCode.WX_ERROR_DOM_CREATEFINISH,"[WXBridgeManager] callCreateFinish exception " + e.getCause());
+ commitJSBridgeAlarmMonitor(instanceId, WXErrorCode.WX_ERROR_DOM_CREATEFINISH, "[WXBridgeManager] callCreateFinish exception " + e.getCause());
}
if (UNDEFINED.equals(callback) || NON_CALLBACK.equals(callback)) {
@@ -618,12 +608,12 @@ public class WXBridgeManager implements Callback,BactchExecutor {
public int callRefreshFinish(String instanceId, String callback) {
if (WXEnvironment.isApkDebugable()) {
mLodBuilder.append("[WXBridgeManager] callRefreshFinish >>>> instanceId:").append(instanceId)
- .append(", callback:").append(callback);
+ .append(", callback:").append(callback);
WXLogUtils.d(mLodBuilder.substring(0));
mLodBuilder.setLength(0);
}
- if(mDestroyedInstanceId != null && mDestroyedInstanceId.contains(instanceId)) {
+ if (mDestroyedInstanceId != null && mDestroyedInstanceId.contains(instanceId)) {
return IWXBridge.DESTROY_INSTANCE;
}
@@ -631,11 +621,11 @@ public class WXBridgeManager implements Callback,BactchExecutor {
if (WXSDKManager.getInstance().getSDKInstance(instanceId) != null) {
WXDomModule domModule = getDomModule(instanceId);
Action action = Actions.getRefreshFinish();
- domModule.postAction((DOMAction)action, false);
+ domModule.postAction((DOMAction) action, false);
}
} catch (Exception e) {
WXLogUtils.e("[WXBridgeManager] callRefreshFinish exception: ", e);
- commitJSBridgeAlarmMonitor(instanceId, WXErrorCode.WX_ERROR_DOM_REFRESHFINISH,"[WXBridgeManager] callRefreshFinish exception " + e.getCause());
+ commitJSBridgeAlarmMonitor(instanceId, WXErrorCode.WX_ERROR_DOM_REFRESHFINISH, "[WXBridgeManager] callRefreshFinish exception " + e.getCause());
}
if (UNDEFINED.equals(callback) || NON_CALLBACK.equals(callback)) {
@@ -650,22 +640,20 @@ public class WXBridgeManager implements Callback,BactchExecutor {
// callUpdateAttrs
public int callUpdateAttrs(String instanceId, String ref, String task, String callback) {
if (TextUtils.isEmpty(task)) {
- if (WXEnvironment.isApkDebugable()) {
- WXLogUtils.e("[WXBridgeManager] callUpdateAttrs: call UpdateAttrs tasks is null");
- }
- commitJSBridgeAlarmMonitor(instanceId, WXErrorCode.WX_ERR_DOM_UPDATEATTRS,"[WXBridgeManager] callUpdateAttrs: call UpdateAttrs tasks is null");
+ WXLogUtils.e("[WXBridgeManager] callUpdateAttrs: call UpdateAttrs tasks is null");
+ commitJSBridgeAlarmMonitor(instanceId, WXErrorCode.WX_ERR_DOM_UPDATEATTRS, "[WXBridgeManager] callUpdateAttrs: call UpdateAttrs tasks is null");
return IWXBridge.INSTANCE_RENDERING_ERROR;
}
if (WXEnvironment.isApkDebugable()) {
mLodBuilder.append("[WXBridgeManager] callUpdateAttrs >>>> instanceId:").append(instanceId)
- .append(", ref:").append(ref)
- .append(", task:").append(task)
- .append(", callback:").append(callback);
+ .append(", ref:").append(ref)
+ .append(", task:").append(task)
+ .append(", callback:").append(callback);
WXLogUtils.d(mLodBuilder.substring(0));
mLodBuilder.setLength(0);
}
- if(mDestroyedInstanceId != null && mDestroyedInstanceId.contains(instanceId)) {
+ if (mDestroyedInstanceId != null && mDestroyedInstanceId.contains(instanceId)) {
return IWXBridge.DESTROY_INSTANCE;
}
@@ -678,7 +666,7 @@ public class WXBridgeManager implements Callback,BactchExecutor {
parseNanos = System.nanoTime() - parseNanos;
Action action = Actions.getUpdateAttrs(ref, domObject);
- domModule.postAction((DOMAction)action, false);
+ domModule.postAction((DOMAction) action, false);
if (WXTracing.isAvailable() && action instanceof TraceableAction) {
((TraceableAction) action).mStartMillis = start;
@@ -688,7 +676,7 @@ public class WXBridgeManager implements Callback,BactchExecutor {
}
} catch (Exception e) {
WXLogUtils.e("[WXBridgeManager] callUpdateAttrs exception: ", e);
- commitJSBridgeAlarmMonitor(instanceId, WXErrorCode.WX_ERR_DOM_UPDATEATTRS,"[WXBridgeManager] callUpdateAttrs exception " + e.getCause());
+ commitJSBridgeAlarmMonitor(instanceId, WXErrorCode.WX_ERR_DOM_UPDATEATTRS, "[WXBridgeManager] callUpdateAttrs exception " + e.getCause());
}
if (UNDEFINED.equals(callback) || NON_CALLBACK.equals(callback)) {
@@ -703,22 +691,20 @@ public class WXBridgeManager implements Callback,BactchExecutor {
// callUpdateStyle
public int callUpdateStyle(String instanceId, String ref, String task, String callback) {
if (TextUtils.isEmpty(task)) {
- if (WXEnvironment.isApkDebugable()) {
- WXLogUtils.e("[WXBridgeManager] callUpdateStyle: call UpdateStyle tasks is null");
- }
- commitJSBridgeAlarmMonitor(instanceId, WXErrorCode.WX_ERR_DOM_UPDATESTYLE,"[WXBridgeManager] callUpdateStyle: call UpdateStyle tasks is null");
+ WXLogUtils.e("[WXBridgeManager] callUpdateStyle: call UpdateStyle tasks is null");
+ commitJSBridgeAlarmMonitor(instanceId, WXErrorCode.WX_ERR_DOM_UPDATESTYLE, "[WXBridgeManager] callUpdateStyle: call UpdateStyle tasks is null");
return IWXBridge.INSTANCE_RENDERING_ERROR;
}
-// if (WXEnvironment.isApkDebugable()) {
- mLodBuilder.append("[WXBridgeManager] callUpdateStyle >>>> instanceId:").append(instanceId)
- .append(", ref:").append(ref)
- .append(", task:").append(task)
- .append(", callback:").append(callback);
- WXLogUtils.d(mLodBuilder.substring(0));
- mLodBuilder.setLength(0);
-// }
+ if (WXEnvironment.isApkDebugable()) {
+ mLodBuilder.append("[WXBridgeManager] callUpdateStyle >>>> instanceId:").append(instanceId)
+ .append(", ref:").append(ref)
+ .append(", task:").append(task)
+ .append(", callback:").append(callback);
+ WXLogUtils.d(mLodBuilder.substring(0));
+ mLodBuilder.setLength(0);
+ }
- if(mDestroyedInstanceId != null && mDestroyedInstanceId.contains(instanceId)) {
+ if (mDestroyedInstanceId != null && mDestroyedInstanceId.contains(instanceId)) {
return IWXBridge.DESTROY_INSTANCE;
}
@@ -731,7 +717,7 @@ public class WXBridgeManager implements Callback,BactchExecutor {
nanosTemp = System.nanoTime() - nanosTemp;
Action action = Actions.getUpdateStyle(ref, domObject, false);
- domModule.postAction((DOMAction)action, false);
+ domModule.postAction((DOMAction) action, false);
if (WXTracing.isAvailable() && action instanceof TraceableAction) {
((TraceableAction) action).mParseJsonNanos = nanosTemp;
@@ -741,7 +727,7 @@ public class WXBridgeManager implements Callback,BactchExecutor {
}
} catch (Exception e) {
WXLogUtils.e("[WXBridgeManager] callUpdateStyle exception: ", e);
- commitJSBridgeAlarmMonitor(instanceId, WXErrorCode.WX_ERR_DOM_UPDATESTYLE,"[WXBridgeManager] callUpdateStyle exception " + e.getCause());
+ commitJSBridgeAlarmMonitor(instanceId, WXErrorCode.WX_ERR_DOM_UPDATESTYLE, "[WXBridgeManager] callUpdateStyle exception " + e.getCause());
}
if (UNDEFINED.equals(callback) || NON_CALLBACK.equals(callback)) {
@@ -757,12 +743,12 @@ public class WXBridgeManager implements Callback,BactchExecutor {
if (WXEnvironment.isApkDebugable()) {
mLodBuilder.append("[WXBridgeManager] callRemoveElement >>>> instanceId:").append(instanceId)
- .append(", ref:").append(ref);
+ .append(", ref:").append(ref);
WXLogUtils.d(mLodBuilder.substring(0));
mLodBuilder.setLength(0);
}
- if(mDestroyedInstanceId != null && mDestroyedInstanceId.contains(instanceId)) {
+ if (mDestroyedInstanceId != null && mDestroyedInstanceId.contains(instanceId)) {
return IWXBridge.DESTROY_INSTANCE;
}
@@ -770,7 +756,7 @@ public class WXBridgeManager implements Callback,BactchExecutor {
if (WXSDKManager.getInstance().getSDKInstance(instanceId) != null) {
WXDomModule domModule = getDomModule(instanceId);
Action action = Actions.getRemoveElement(ref);
- domModule.postAction((DOMAction)action, false);
+ domModule.postAction((DOMAction) action, false);
if (WXTracing.isAvailable() && action instanceof TraceableAction) {
((TraceableAction) action).onStartDomExecute(instanceId, "removeElement", ref, null, ref);
@@ -778,7 +764,7 @@ public class WXBridgeManager implements Callback,BactchExecutor {
}
} catch (Exception e) {
WXLogUtils.e("[WXBridgeManager] callRemoveElement exception: ", e);
- commitJSBridgeAlarmMonitor(instanceId, WXErrorCode.WX_ERR_DOM_REMOVEELEMENT,"[WXBridgeManager] callRemoveElement exception " + e.getCause());
+ commitJSBridgeAlarmMonitor(instanceId, WXErrorCode.WX_ERR_DOM_REMOVEELEMENT, "[WXBridgeManager] callRemoveElement exception " + e.getCause());
}
if (UNDEFINED.equals(callback) || NON_CALLBACK.equals(callback)) {
@@ -794,14 +780,14 @@ public class WXBridgeManager implements Callback,BactchExecutor {
if (WXEnvironment.isApkDebugable()) {
mLodBuilder.append("[WXBridgeManager] callMoveElement >>>> instanceId:").append(instanceId)
- .append(", parentref:").append(parentref)
- .append(", index:").append(index)
- .append(", ref:").append(ref);
+ .append(", parentref:").append(parentref)
+ .append(", index:").append(index)
+ .append(", ref:").append(ref);
WXLogUtils.d(mLodBuilder.substring(0));
mLodBuilder.setLength(0);
}
- if(mDestroyedInstanceId != null && mDestroyedInstanceId.contains(instanceId)) {
+ if (mDestroyedInstanceId != null && mDestroyedInstanceId.contains(instanceId)) {
return IWXBridge.DESTROY_INSTANCE;
}
@@ -809,11 +795,11 @@ public class WXBridgeManager implements Callback,BactchExecutor {
if (WXSDKManager.getInstance().getSDKInstance(instanceId) != null) {
WXDomModule domModule = getDomModule(instanceId);
Action action = Actions.getMoveElement(ref, parentref, Integer.parseInt(index));
- domModule.postAction((DOMAction)action, false);
+ domModule.postAction((DOMAction) action, false);
}
} catch (Exception e) {
WXLogUtils.e("[WXBridgeManager] callMoveElement exception: ", e);
- commitJSBridgeAlarmMonitor(instanceId, WXErrorCode.WX_ERR_DOM_MOVEELEMENT,"[WXBridgeManager] callMoveElement exception " + e.getCause());
+ commitJSBridgeAlarmMonitor(instanceId, WXErrorCode.WX_ERR_DOM_MOVEELEMENT, "[WXBridgeManager] callMoveElement exception " + e.getCause());
}
if (UNDEFINED.equals(callback) || NON_CALLBACK.equals(callback)) {
@@ -827,14 +813,14 @@ public class WXBridgeManager implements Callback,BactchExecutor {
public int callAddEvent(String instanceId, String ref, String event, String callback) {
// if (WXEnvironment.isApkDebugable()) {
- mLodBuilder.append("[WXBridgeManager] callAddEvent >>>> instanceId:").append(instanceId)
- .append(", ref:").append(ref)
- .append(", event:").append(event);
- WXLogUtils.d(mLodBuilder.substring(0));
- mLodBuilder.setLength(0);
+ mLodBuilder.append("[WXBridgeManager] callAddEvent >>>> instanceId:").append(instanceId)
+ .append(", ref:").append(ref)
+ .append(", event:").append(event);
+ WXLogUtils.d(mLodBuilder.substring(0));
+ mLodBuilder.setLength(0);
// }
- if(mDestroyedInstanceId != null && mDestroyedInstanceId.contains(instanceId)) {
+ if (mDestroyedInstanceId != null && mDestroyedInstanceId.contains(instanceId)) {
return IWXBridge.DESTROY_INSTANCE;
}
@@ -842,7 +828,7 @@ public class WXBridgeManager implements Callback,BactchExecutor {
if (WXSDKManager.getInstance().getSDKInstance(instanceId) != null) {
WXDomModule domModule = getDomModule(instanceId);
Action action = Actions.getAddEvent(ref, event);
- domModule.postAction((DOMAction)action, false);
+ domModule.postAction((DOMAction) action, false);
if (WXTracing.isAvailable() && action instanceof TraceableAction) {
((TraceableAction) action).onStartDomExecute(instanceId, "addEvent", ref, null, event);
@@ -850,7 +836,7 @@ public class WXBridgeManager implements Callback,BactchExecutor {
}
} catch (Exception e) {
WXLogUtils.e("[WXBridgeManager] callAddEvent exception: ", e);
- commitJSBridgeAlarmMonitor(instanceId, WXErrorCode.WX_ERR_DOM_ADDEVENT,"[WXBridgeManager] callAddEvent exception " + e.getCause());
+ commitJSBridgeAlarmMonitor(instanceId, WXErrorCode.WX_ERR_DOM_ADDEVENT, "[WXBridgeManager] callAddEvent exception " + e.getCause());
}
if (UNDEFINED.equals(callback) || NON_CALLBACK.equals(callback)) {
@@ -865,21 +851,21 @@ public class WXBridgeManager implements Callback,BactchExecutor {
if (WXEnvironment.isApkDebugable()) {
mLodBuilder.append("[WXBridgeManager] callRemoveEvent >>>> instanceId:").append(instanceId)
- .append(", ref:").append(ref)
- .append(", event:").append(event);
+ .append(", ref:").append(ref)
+ .append(", event:").append(event);
WXLogUtils.d(mLodBuilder.substring(0));
mLodBuilder.setLength(0);
}
- if(mDestroyedInstanceId != null && mDestroyedInstanceId.contains(instanceId)) {
- return IWXBridge .DESTROY_INSTANCE;
+ if (mDestroyedInstanceId != null && mDestroyedInstanceId.contains(instanceId)) {
+ return IWXBridge.DESTROY_INSTANCE;
}
try {
if (WXSDKManager.getInstance().getSDKInstance(instanceId) != null) {
WXDomModule domModule = getDomModule(instanceId);
Action action = Actions.getRemoveEvent(ref, event);
- domModule.postAction((DOMAction)action, false);
+ domModule.postAction((DOMAction) action, false);
if (WXTracing.isAvailable() && action instanceof TraceableAction) {
((TraceableAction) action).onStartDomExecute(instanceId, "removeEvent", ref, null, event);
@@ -887,7 +873,7 @@ public class WXBridgeManager implements Callback,BactchExecutor {
}
} catch (Exception e) {
WXLogUtils.e("[WXBridgeManager] callRemoveEvent exception: ", e);
- commitJSBridgeAlarmMonitor(instanceId, WXErrorCode.WX_ERR_DOM_REMOVEEVENT,"[WXBridgeManager] callRemoveEvent exception " + e.getCause());
+ commitJSBridgeAlarmMonitor(instanceId, WXErrorCode.WX_ERR_DOM_REMOVEEVENT, "[WXBridgeManager] callRemoveEvent exception " + e.getCause());
}
if (UNDEFINED.equals(callback) || NON_CALLBACK.equals(callback)) {
@@ -898,16 +884,16 @@ public class WXBridgeManager implements Callback,BactchExecutor {
return IWXBridge.INSTANCE_RENDERING;
}
- public int callAddElement(String instanceId, String ref,String dom,String index, String callback){
+ public int callAddElement(String instanceId, String ref, String dom, String index, String callback) {
if (WXEnvironment.isApkDebugable()) {
mLodBuilder.append("[WXBridgeManager] callNative::callAddElement >>>> instanceId:").append(instanceId)
- .append(", ref:").append(ref).append(", dom:").append(dom).append(", callback:").append(callback);
+ .append(", ref:").append(ref).append(", dom:").append(dom).append(", callback:").append(callback);
WXLogUtils.d(mLodBuilder.substring(0));
mLodBuilder.setLength(0);
}
- if(mDestroyedInstanceId!=null && mDestroyedInstanceId.contains(instanceId)){
+ if (mDestroyedInstanceId != null && mDestroyedInstanceId.contains(instanceId)) {
return IWXBridge.DESTROY_INSTANCE;
}
@@ -922,7 +908,7 @@ public class WXBridgeManager implements Callback,BactchExecutor {
WXSDKManager.getInstance().getSDKInstance(instanceId).jsonParseTime(System.currentTimeMillis() - start);
}
WXDomModule domModule = getDomModule(instanceId);
- DOMAction addElementAction = Actions.getAddElement(domObject, ref,Integer.parseInt(index));
+ DOMAction addElementAction = Actions.getAddElement(domObject, ref, Integer.parseInt(index));
domModule.postAction(addElementAction, false);
if (WXTracing.isAvailable() && addElementAction instanceof TraceableAction) {
@@ -942,57 +928,57 @@ public class WXBridgeManager implements Callback,BactchExecutor {
}
public int callReportCrashReloadPage(String instanceId, String crashFile) {
+ try {
+ String url = null;
+ WXSDKInstance instance = WXSDKManager.getInstance().getSDKInstance(instanceId);
+ if (instance != null) {
+ url = instance.getBundleUrl();
+ }
try {
- String url = null;
- WXSDKInstance instance = WXSDKManager.getInstance().getSDKInstance(instanceId);
- if (instance != null) {
- url = instance.getBundleUrl();
- }
- try {
- if (WXEnvironment.getApplication() != null) {
- crashFile = WXEnvironment.getApplication().getApplicationContext().getCacheDir().getPath() + crashFile;
- // Log.e("jsengine", "callReportCrashReloadPage crashFile:" + crashFile);
- }
- } catch (Throwable e) {
- e.printStackTrace();
+ if (WXEnvironment.getApplication() != null) {
+ crashFile = WXEnvironment.getApplication().getApplicationContext().getCacheDir().getPath() + crashFile;
+ // Log.e("jsengine", "callReportCrashReloadPage crashFile:" + crashFile);
}
- callReportCrash(crashFile, instanceId, url);
- if (reInitCount > CRASHREINIT) {
- return IWXBridge.INSTANCE_RENDERING_ERROR;
- }
- reInitCount++;
- // reinit frame work
- mInit = false;
- initScriptsFramework("");
-
- if (mDestroyedInstanceId != null && mDestroyedInstanceId.contains(instanceId)) {
- return IWXBridge.DESTROY_INSTANCE;
- }
- } catch (Exception e) {
- WXLogUtils.e("[WXBridgeManager] callReportCrashReloadPage exception: ", e);
+ } catch (Throwable e) {
+ e.printStackTrace();
}
- try {
+ callReportCrash(crashFile, instanceId, url);
+ if (reInitCount > CRASHREINIT) {
+ return IWXBridge.INSTANCE_RENDERING_ERROR;
+ }
+ reInitCount++;
+ // reinit frame work
+ mInit = false;
+ initScriptsFramework("");
- if (WXSDKManager.getInstance().getSDKInstance(instanceId) != null) {
- boolean reloadThisInstance = shouReloadCurrentInstance(
- WXSDKManager.getInstance().getSDKInstance(instanceId).getBundleUrl());
- WXDomModule domModule = getDomModule(instanceId);
- Action action = Actions.getReloadPage(instanceId, reloadThisInstance);
- domModule.postAction((DOMAction) action, true);
- }
+ if (mDestroyedInstanceId != null && mDestroyedInstanceId.contains(instanceId)) {
+ return IWXBridge.DESTROY_INSTANCE;
+ }
+ } catch (Exception e) {
+ WXLogUtils.e("[WXBridgeManager] callReportCrashReloadPage exception: ", e);
+ }
+ try {
- } catch (Exception e) {
- WXLogUtils.e("[WXBridgeManager] callReloadPage exception: ", e);
- commitJSBridgeAlarmMonitor(instanceId, WXErrorCode.WX_ERR_RELOAD_PAGE,"[WXBridgeManager] callReloadPage exception "+e.getCause());
+ if (WXSDKManager.getInstance().getSDKInstance(instanceId) != null) {
+ boolean reloadThisInstance = shouReloadCurrentInstance(
+ WXSDKManager.getInstance().getSDKInstance(instanceId).getBundleUrl());
+ WXDomModule domModule = getDomModule(instanceId);
+ Action action = Actions.getReloadPage(instanceId, reloadThisInstance);
+ domModule.postAction((DOMAction) action, true);
}
- return IWXBridge.INSTANCE_RENDERING_ERROR;
+
+ } catch (Exception e) {
+ WXLogUtils.e("[WXBridgeManager] callReloadPage exception: ", e);
+ commitJSBridgeAlarmMonitor(instanceId, WXErrorCode.WX_ERR_RELOAD_PAGE, "[WXBridgeManager] callReloadPage exception " + e.getCause());
+ }
+ return IWXBridge.INSTANCE_RENDERING_ERROR;
}
public boolean shouReloadCurrentInstance(String aUrl) {
long time = System.currentTimeMillis();
if (crashUrl == null ||
- (crashUrl != null && !crashUrl.equals(aUrl)) ||
- ((time - lastCrashTime) > 15000)) {
+ (crashUrl != null && !crashUrl.equals(aUrl)) ||
+ ((time - lastCrashTime) > 15000)) {
crashUrl = aUrl;
lastCrashTime = time;
return true;
@@ -1002,49 +988,49 @@ public class WXBridgeManager implements Callback,BactchExecutor {
}
public void callReportCrash(String crashFile, final String instanceId, final String url) {
- // statistic weexjsc process crash
- Date date = new Date();
- DateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");
- String time = format.format(date);
- final String origin_filename = crashFile + "." + time;
- File oldfile = new File(crashFile);
- File newfile = new File(origin_filename);
- if (oldfile.exists()) {
- oldfile.renameTo(newfile);
- }
- Thread t = new Thread(new Runnable() {
- public void run() {
+ // statistic weexjsc process crash
+ Date date = new Date();
+ DateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");
+ String time = format.format(date);
+ final String origin_filename = crashFile + "." + time;
+ File oldfile = new File(crashFile);
+ File newfile = new File(origin_filename);
+ if (oldfile.exists()) {
+ oldfile.renameTo(newfile);
+ }
+ Thread t = new Thread(new Runnable() {
+ public void run() {
+ try {
+ File file = new File(origin_filename);
+ if (file.exists()) {
+ if (file.length() > 0) {
+ StringBuilder result = new StringBuilder();
try {
- File file = new File(origin_filename);
- if (file.exists()) {
- if (file.length() > 0) {
- StringBuilder result = new StringBuilder();
- try{
- BufferedReader br = new BufferedReader(new FileReader(origin_filename));
- String s = null;
- // boolean foundStart = false;
- while((s = br.readLine()) != null) {
- if ("".equals(s)) {
- continue;
- }
- // 寄存器内容裁剪
- // if (("r0:").equals(s)) {
- // break;
- // }
- result.append(s + "\n");
- }
- commitJscCrashAlarmMonitor(IWXUserTrackAdapter.JS_BRIDGE, WXErrorCode.WX_ERR_JSC_CRASH, result.toString(), instanceId, url);
- br.close();
- } catch(Exception e) {
- e.printStackTrace();
- }
- } else {
- WXLogUtils.e("[WXBridgeManager] callReportCrash crash file is empty");
- // 没收集到crash堆栈不上传
- // commitJscCrashAlarmMonitor(IWXUserTrackAdapter.JS_BRIDGE, WXErrorCode.WX_ERR_JSC_CRASH, "crash info file empty", instanceId, url);
+ BufferedReader br = new BufferedReader(new FileReader(origin_filename));
+ String s = null;
+ // boolean foundStart = false;
+ while ((s = br.readLine()) != null) {
+ if ("".equals(s)) {
+ continue;
}
- file.delete();
+ // 寄存器内容裁剪
+ // if (("r0:").equals(s)) {
+ // break;
+ // }
+ result.append(s + "\n");
}
+ commitJscCrashAlarmMonitor(IWXUserTrackAdapter.JS_BRIDGE, WXErrorCode.WX_ERR_JSC_CRASH, result.toString(), instanceId, url);
+ br.close();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ } else {
+ WXLogUtils.e("[WXBridgeManager] callReportCrash crash file is empty");
+ // 没收集到crash堆栈不上传
+ // commitJscCrashAlarmMonitor(IWXUserTrackAdapter.JS_BRIDGE, WXErrorCode.WX_ERR_JSC_CRASH, "crash info file empty", instanceId, url);
+ }
+ file.delete();
+ }
// Log.e("reportServerCrash", "WXBridge reportServerCrash crashFile:" + origin_filename);
// String filename = CRASHPATH;
// File oldfile = new File(origin_filename);
@@ -1071,17 +1057,17 @@ public class WXBridgeManager implements Callback,BactchExecutor {
// } else {
// Log.e("reportServerCrash", "WXBridge /data/data/com.taobao.taobao/app_tombstone/com.taobao.taobao/crashsdk/logs not exsist");
// }
- } catch (Throwable throwable) {
- WXLogUtils.e("[WXBridgeManager] callReportCrash exception: ", throwable);
- }
- }
- });
- t.start();
+ } catch (Throwable throwable) {
+ WXLogUtils.e("[WXBridgeManager] callReportCrash exception: ", throwable);
+ }
+ }
+ });
+ t.start();
}
private void getNextTick(final String instanceId, final String callback) {
- addJSTask(METHOD_CALLBACK,instanceId, callback, "{}");
+ addJSTask(METHOD_CALLBACK, instanceId, callback, "{}");
sendMessage(instanceId, WXJSBridgeMsgType.CALL_JS_BATCH);
}
@@ -1096,12 +1082,12 @@ public class WXBridgeManager implements Callback,BactchExecutor {
ArrayList<Object> argsList = new ArrayList<>();
for (Object arg : args) {
- argsList.add(arg);
+ argsList.add(arg);
}
- if(params != null){
- ArrayMap map = new ArrayMap(4);
- map.put(KEY_PARAMS, params);
- argsList.add(map);
+ if (params != null) {
+ ArrayMap map = new ArrayMap(4);
+ map.put(KEY_PARAMS, params);
+ argsList.add(map);
}
WXHashMap<String, Object> task = new WXHashMap<>();
@@ -1133,6 +1119,7 @@ public class WXBridgeManager implements Callback,BactchExecutor {
/**
* Initialize JavaScript framework
+ *
* @param framework String representation of the framework to be init.
*/
public synchronized void initScriptsFramework(String framework) {
@@ -1145,12 +1132,13 @@ public class WXBridgeManager implements Callback,BactchExecutor {
@Deprecated
public void fireEvent(final String instanceId, final String ref,
- final String type, final Map<String, Object> data){
+ final String type, final Map<String, Object> data) {
this.fireEvent(instanceId, ref, type, data, null);
}
/**
* Do not direct invoke this method in Components, use {@link WXSDKInstance#fireEvent(String, String, Map, Map)} instead.
+ *
* @param instanceId
* @param ref
* @param type
@@ -1159,16 +1147,16 @@ public class WXBridgeManager implements Callback,BactchExecutor {
*/
@Deprecated
public void fireEvent(final String instanceId, final String ref,
- final String type, final Map<String, Object> data,final Map<String, Object> domChanges) {
- fireEventOnNode(instanceId,ref,type,data,domChanges);
+ final String type, final Map<String, Object> data, final Map<String, Object> domChanges) {
+ fireEventOnNode(instanceId, ref, type, data, domChanges);
}
/**
* Notify the JavaScript about the event happened on Android
*/
public void fireEventOnNode(final String instanceId, final String ref,
- final String type, final Map<String, Object> data,final Map<String, Object> domChanges) {
- fireEventOnNode(instanceId, ref, type, data, domChanges, null);
+ final String type, final Map<String, Object> data, final Map<String, Object> domChanges) {
+ fireEventOnNode(instanceId, ref, type, data, domChanges, null);
}
/**
@@ -1178,12 +1166,12 @@ public class WXBridgeManager implements Callback,BactchExecutor {
final String type, final Map<String, Object> data,
final Map<String, Object> domChanges, List<Object> params) {
if (TextUtils.isEmpty(instanceId) || TextUtils.isEmpty(ref)
- || TextUtils.isEmpty(type) || mJSHandler == null) {
+ || TextUtils.isEmpty(type) || mJSHandler == null) {
return;
}
if (!checkMainThread()) {
throw new WXRuntimeException(
- "fireEvent must be called by main thread");
+ "fireEvent must be called by main thread");
}
addJSEventTask(METHOD_FIRE_EVENT, instanceId, params, ref, type, data, domChanges);
sendMessage(instanceId, WXJSBridgeMsgType.CALL_JS_BATCH);
@@ -1196,11 +1184,12 @@ public class WXBridgeManager implements Callback,BactchExecutor {
/**
* Invoke JavaScript callback. Use {@link JSCallback} instead.
+ *
* @see #callback(String, String, String)
*/
@Deprecated
- public void callback(String instanceId, String callback,String data) {
- callback(instanceId, callback,data,false);
+ public void callback(String instanceId, String callback, String data) {
+ callback(instanceId, callback, data, false);
}
/**
@@ -1208,29 +1197,31 @@ public class WXBridgeManager implements Callback,BactchExecutor {
*/
@Deprecated
public void callback(final String instanceId, final String callback,
- final Map<String, Object> data){
- callback(instanceId,callback,data,false);
+ final Map<String, Object> data) {
+ callback(instanceId, callback, data, false);
}
/**
* Use {@link JSCallback} instead.
+ *
* @param instanceId Weex Instance Id
- * @param callback callback referenece handle
- * @param data callback data
- * @param keepAlive if keep callback instance alive for later use
- */
+ * @param callback callback referenece handle
+ * @param data callback data
+ * @param keepAlive if keep callback instance alive for later use
+ */
@Deprecated
public void callback(final String instanceId, final String callback,
- final Object data,boolean keepAlive) {
- callbackJavascript(instanceId,callback,data,keepAlive);
+ final Object data, boolean keepAlive) {
+ callbackJavascript(instanceId, callback, data, keepAlive);
}
/**
* Callback to Javascript function.
+ *
* @param instanceId Weex Instance Id
- * @param callback callback referenece handle
- * @param data callback data
- * @param keepAlive if keep callback instance alive for later use
+ * @param callback callback referenece handle
+ * @param data callback data
+ * @param keepAlive if keep callback instance alive for later use
*/
void callbackJavascript(final String instanceId, final String callback,
final Object data, boolean keepAlive) {
@@ -1239,7 +1230,7 @@ public class WXBridgeManager implements Callback,BactchExecutor {
return;
}
- addJSTask(METHOD_CALLBACK, instanceId, callback, data,keepAlive);
+ addJSTask(METHOD_CALLBACK, instanceId, callback, data, keepAlive);
sendMessage(instanceId, WXJSBridgeMsgType.CALL_JS_BATCH);
}
@@ -1264,32 +1255,32 @@ public class WXBridgeManager implements Callback,BactchExecutor {
WXSDKInstance instance = WXSDKManager.getInstance().getSDKInstance(instanceId);
if (instance != null) {
instance.onRenderError(WXRenderErrorCode.WX_CREATE_INSTANCE_ERROR,
- "createInstance failed!");
+ "createInstance failed!");
}
String err = "[WXBridgeManager] invokeRefreshInstance: framework.js uninitialized.";
- commitJSBridgeAlarmMonitor(instanceId, WXErrorCode.WX_ERR_INVOKE_NATIVE,err);
+ commitJSBridgeAlarmMonitor(instanceId, WXErrorCode.WX_ERR_INVOKE_NATIVE, err);
WXLogUtils.d(err);
return;
}
long start = System.currentTimeMillis();
if (WXEnvironment.isApkDebugable()) {
WXLogUtils.d("refreshInstance >>>> instanceId:" + instanceId
- + ", data:" + refreshData.data + ", isDirty:" + refreshData.isDirty);
+ + ", data:" + refreshData.data + ", isDirty:" + refreshData.isDirty);
}
if (refreshData.isDirty) {
return;
}
WXJSObject instanceIdObj = new WXJSObject(WXJSObject.String,
- instanceId);
+ instanceId);
WXJSObject dataObj = new WXJSObject(WXJSObject.JSON,
- refreshData.data == null ? "{}" : refreshData.data);
+ refreshData.data == null ? "{}" : refreshData.data);
WXJSObject[] args = {instanceIdObj, dataObj};
invokeExecJS(instanceId, null, METHOD_REFRESH_INSTANCE, args);
WXLogUtils.renderPerformanceLog("invokeRefreshInstance", System.currentTimeMillis() - start);
} catch (Throwable e) {
String err = "[WXBridgeManager] invokeRefreshInstance " + e.getCause();
- commitJSBridgeAlarmMonitor(instanceId, WXErrorCode.WX_ERR_INVOKE_NATIVE,err);
+ commitJSBridgeAlarmMonitor(instanceId, WXErrorCode.WX_ERR_INVOKE_NATIVE, err);
WXLogUtils.e(err);
}
}
@@ -1309,11 +1300,11 @@ public class WXBridgeManager implements Callback,BactchExecutor {
return;
}
WXPerformance performance = new WXPerformance();
- performance.args=instance.getBundleUrl();
- performance.errCode=errCode.getErrorCode();
+ performance.args = instance.getBundleUrl();
+ performance.errCode = errCode.getErrorCode();
if (errCode != WXErrorCode.WX_SUCCESS) {
- performance.appendErrMsg(TextUtils.isEmpty(errMsg)?errCode.getErrorMsg():errMsg);
- WXLogUtils.e("wx_monitor",performance.toString());
+ performance.appendErrMsg(TextUtils.isEmpty(errMsg) ? errCode.getErrorMsg() : errMsg);
+ WXLogUtils.e("wx_monitor", performance.toString());
}
adapter.commit(WXEnvironment.getApplication(), null, IWXUserTrackAdapter.JS_BRIDGE, performance, instance.getUserTrackParams());
}
@@ -1335,8 +1326,8 @@ public class WXBridgeManager implements Callback,BactchExecutor {
WXPerformance performance = new WXPerformance();
performance.errCode = errorCode.getErrorCode();
if (errorCode != WXErrorCode.WX_SUCCESS) {
- performance.appendErrMsg(TextUtils.isEmpty(errMsg)?errorCode.getErrorMsg():errMsg);
- WXLogUtils.e("wx_monitor",performance.toString());
+ performance.appendErrMsg(TextUtils.isEmpty(errMsg) ? errorCode.getErrorMsg() : errMsg);
+ WXLogUtils.e("wx_monitor", performance.toString());
}
userTrackAdapter.commit(WXEnvironment.getApplication(), null, type, performance, null);
}
@@ -1350,15 +1341,15 @@ public class WXBridgeManager implements Callback,BactchExecutor {
String method = "callReportCrash";
String exception = "weexjsc process crash and restart exception";
- Map<String,String> extParams = new HashMap<String, String>();
+ Map<String, String> extParams = new HashMap<String, String>();
extParams.put("jscCrashStack", errMsg);
IWXJSExceptionAdapter adapter = WXSDKManager.getInstance().getIWXJSExceptionAdapter();
if (adapter != null) {
- WXJSExceptionInfo jsException = new WXJSExceptionInfo(instanceId, url, errorCode.getErrorCode(), method, exception, extParams);
- adapter.onJSException(jsException);
- // if (WXEnvironment.isApkDebugable()) {
- WXLogUtils.e(jsException.toString());
- // }
+ WXJSExceptionInfo jsException = new WXJSExceptionInfo(instanceId, url, errorCode.getErrorCode(), method, exception, extParams);
+ adapter.onJSException(jsException);
+ // if (WXEnvironment.isApkDebugable()) {
+ WXLogUtils.e(jsException.toString());
+ // }
}
}
@@ -1368,11 +1359,11 @@ public class WXBridgeManager implements Callback,BactchExecutor {
public void createInstance(final String instanceId, final String template,
final Map<String, Object> options, final String data) {
final WXSDKInstance instance = WXSDKManager.getInstance().getSDKInstance(instanceId);
- if(instance == null){
- WXLogUtils.e("WXBridgeManager","createInstance failed, SDKInstance is not exist");
+ if (instance == null) {
+ WXLogUtils.e("WXBridgeManager", "createInstance failed, SDKInstance is not exist");
return;
}
- if ( TextUtils.isEmpty(instanceId)
+ if (TextUtils.isEmpty(instanceId)
|| TextUtils.isEmpty(template) || mJSHandler == null) {
instance.onRenderError(WXRenderErrorCode.WX_CREATE_INSTANCE_ERROR, "createInstance fail!");
return;
@@ -1401,7 +1392,7 @@ public class WXBridgeManager implements Callback,BactchExecutor {
@Override
public void run() {
- instance.createInstanceFinished(totalTime);
+ instance.createInstanceFinished(totalTime);
}
}, 0);
}
@@ -1418,37 +1409,37 @@ public class WXBridgeManager implements Callback,BactchExecutor {
} else {
if (!isJSFrameworkInit()) {
instance.onRenderError(WXRenderErrorCode.WX_CREATE_INSTANCE_ERROR, "createInstance "
- + "fail!");
+ + "fail!");
String err = "[WXBridgeManager] invokeCreateInstance: framework.js uninitialized.";
- commitJSBridgeAlarmMonitor(instance.getInstanceId(), WXErrorCode.WX_ERR_INVOKE_NATIVE,err);
+ commitJSBridgeAlarmMonitor(instance.getInstanceId(), WXErrorCode.WX_ERR_INVOKE_NATIVE, err);
WXLogUtils.e(err);
return;
}
try {
if (WXEnvironment.isApkDebugable()) {
WXLogUtils.d("createInstance >>>> instanceId:" + instance.getInstanceId()
- + ", options:"
- + WXJsonUtils.fromObjectToJSONString(options)
- + ", data:" + data);
+ + ", options:"
+ + WXJsonUtils.fromObjectToJSONString(options)
+ + ", data:" + data);
}
WXJSObject instanceIdObj = new WXJSObject(WXJSObject.String,
- instance.getInstanceId());
+ instance.getInstanceId());
WXJSObject instanceObj = new WXJSObject(WXJSObject.String,
- template);
+ template);
WXJSObject optionsObj = new WXJSObject(WXJSObject.JSON,
- options == null ? "{}"
- : WXJsonUtils.fromObjectToJSONString(options));
+ options == null ? "{}"
+ : WXJsonUtils.fromObjectToJSONString(options));
WXJSObject dataObj = new WXJSObject(WXJSObject.JSON,
- data == null ? "{}" : data);
+ data == null ? "{}" : data);
WXJSObject[] args = {instanceIdObj, instanceObj, optionsObj,
- dataObj};
- invokeExecJS(instance.getInstanceId(), null, METHOD_CREATE_INSTANCE, args,false);
+ dataObj};
+ invokeExecJS(instance.getInstanceId(), null, METHOD_CREATE_INSTANCE, args, false);
} catch (Throwable e) {
instance.onRenderError(WXRenderErrorCode.WX_CREATE_INSTANCE_ERROR,
- "createInstance failed!");
+ "createInstance failed!");
String err = "[WXBridgeManager] invokeCreateInstance " + e.getCause()
- + " template md5 " + WXFileUtils.md5(template) + " length " + (template == null ? 0 : template.length());
- commitJSBridgeAlarmMonitor(instance.getInstanceId(), WXErrorCode.WX_ERR_INVOKE_NATIVE,err);
+ + " template md5 " + WXFileUtils.md5(template) + " length " + (template == null ? 0 : template.length());
+ commitJSBridgeAlarmMonitor(instance.getInstanceId(), WXErrorCode.WX_ERR_INVOKE_NATIVE, err);
WXLogUtils.e(err);
}
}
@@ -1459,11 +1450,11 @@ public class WXBridgeManager implements Callback,BactchExecutor {
}
public void destroyInstance(final String instanceId) {
- if ( mJSHandler == null
+ if (mJSHandler == null
|| TextUtils.isEmpty(instanceId)) {
return;
}
- if(mDestroyedInstanceId!=null) {
+ if (mDestroyedInstanceId != null) {
mDestroyedInstanceId.add(instanceId);
}
// clear message with instanceId
@@ -1487,12 +1478,12 @@ public class WXBridgeManager implements Callback,BactchExecutor {
WXLogUtils.d("destroyInstance >>>> instanceId:" + instanceId);
}
WXJSObject instanceIdObj = new WXJSObject(WXJSObject.String,
- instanceId);
+ instanceId);
WXJSObject[] args = {instanceIdObj};
invokeExecJS(instanceId, null, METHOD_DESTROY_INSTANCE, args);
} catch (Throwable e) {
String err = "[WXBridgeManager] invokeDestroyInstance " + e.getCause();
- commitJSBridgeAlarmMonitor(instanceId, WXErrorCode.WX_ERR_INVOKE_NATIVE,err);
+ commitJSBridgeAlarmMonitor(instanceId, WXErrorCode.WX_ERR_INVOKE_NATIVE, err);
WXLogUtils.e(err);
}
}
@@ -1513,7 +1504,7 @@ public class WXBridgeManager implements Callback,BactchExecutor {
break;
case WXJSBridgeMsgType.SET_TIMEOUT:
TimerInfo timerInfo = (TimerInfo) msg.obj;
- if(timerInfo == null){
+ if (timerInfo == null) {
break;
}
WXJSObject obj = new WXJSObject(WXJSObject.String, timerInfo.callbackId);
@@ -1537,14 +1528,14 @@ public class WXBridgeManager implements Callback,BactchExecutor {
}
public void invokeExecJS(String instanceId, String namespace, String function,
- WXJSObject[] args,boolean logTaskDetail){
+ WXJSObject[] args, boolean logTaskDetail) {
// if (WXEnvironment.isApkDebugable()) {
- mLodBuilder.append("callJS >>>> instanceId:").append(instanceId)
- .append("function:").append(function);
- if(logTaskDetail)
- mLodBuilder.append(" tasks:").append(WXJsonUtils.fromObjectToJSONString(args));
- WXLogUtils.d(mLodBuilder.substring(0));
- mLodBuilder.setLength(0);
+ mLodBuilder.append("callJS >>>> instanceId:").append(instanceId)
+ .append("function:").append(function);
+ if (logTaskDetail)
+ mLodBuilder.append(" tasks:").append(WXJsonUtils.fromObjectToJSONString(args));
+ WXLogUtils.d(mLodBuilder.substring(0));
+ mLodBuilder.setLength(0);
// }
mWXBridge.execJS(instanceId, namespace, function, args);
}
@@ -1555,16 +1546,16 @@ public class WXBridgeManager implements Callback,BactchExecutor {
framework = (String) msg.obj;
}
- if(WXUtils.getAvailMemory(WXEnvironment.getApplication()) > LOW_MEM_VALUE) {
+ if (WXUtils.getAvailMemory(WXEnvironment.getApplication()) > LOW_MEM_VALUE) {
initFramework(framework);
}
}
- private void initFramework(String framework){
+ private void initFramework(String framework) {
if (!isJSFrameworkInit()) {
if (TextUtils.isEmpty(framework)) {
// if (WXEnvironment.isApkDebugable()) {
- WXLogUtils.d("weex JS framework from assets");
+ WXLogUtils.d("weex JS framework from assets");
// }
framework = WXFileUtils.loadAsset("main.js", WXEnvironment.getApplication());
}
@@ -1579,7 +1570,7 @@ public class WXBridgeManager implements Callback,BactchExecutor {
}
long start = System.currentTimeMillis();
- String crashFile="";
+ String crashFile = "";
boolean installOnSdcard = false;
try {
crashFile = WXEnvironment.getApplication().getApplicationContext().getCacheDir().getPath();
@@ -1600,7 +1591,7 @@ public class WXBridgeManager implements Callback,BactchExecutor {
}
// extends initFramework
- if(mWXBridge.initFrameworkEnv(framework, assembleDefaultOptions(), crashFile, installOnSdcard)==INIT_FRAMEWORK_OK){
+ if (mWXBridge.initFrameworkEnv(framework, assembleDefaultOptions(), crashFile, installOnSdcard) == INIT_FRAMEWORK_OK) {
WXEnvironment.sJSLibInitTime = System.currentTimeMillis() - start;
WXLogUtils.renderPerformanceLog("initFramework", WXEnvironment.sJSLibInitTime);
WXEnvironment.sSDKInitTime = System.currentTimeMillis() - WXEnvironment.sSDKInitStart;
@@ -1619,25 +1610,25 @@ public class WXBridgeManager implements Callback,BactchExecutor {
reinitInfo = "reinit Framework:";
}
commitJSFrameworkAlarmMonitor(IWXUserTrackAdapter.JS_FRAMEWORK, WXErrorCode.WX_SUCCESS, reinitInfo + "success");
- }else{
+ } else {
if (reInitCount > 1) {
WXLogUtils.e("[WXBridgeManager] invokeReInitFramework ExecuteJavaScript fail");
- String err="[WXBridgeManager] invokeReInitFramework ExecuteJavaScript fail reinit FrameWork";
+ String err = "[WXBridgeManager] invokeReInitFramework ExecuteJavaScript fail reinit FrameWork";
commitJSFrameworkAlarmMonitor(IWXUserTrackAdapter.JS_FRAMEWORK, WXErrorCode.WX_ERR_JS_REINIT_FRAMEWORK, err);
} else {
WXLogUtils.e("[WXBridgeManager] invokeInitFramework ExecuteJavaScript fail");
- String err="[WXBridgeManager] invokeInitFramework ExecuteJavaScript fail";
+ String err = "[WXBridgeManager] invokeInitFramework ExecuteJavaScript fail";
commitJSFrameworkAlarmMonitor(IWXUserTrackAdapter.JS_FRAMEWORK, WXErrorCode.WX_ERR_JS_FRAMEWORK, err);
}
}
} catch (Throwable e) {
if (reInitCount > 1) {
WXLogUtils.e("[WXBridgeManager] invokeInitFramework ", e);
- String err="[WXBridgeManager] invokeInitFramework reinit FrameWork exception!#"+e.toString();
+ String err = "[WXBridgeManager] invokeInitFramework reinit FrameWork exception!#" + e.toString();
commitJSFrameworkAlarmMonitor(IWXUserTrackAdapter.JS_FRAMEWORK, WXErrorCode.WX_ERR_JS_REINIT_FRAMEWORK, err);
} else {
WXLogUtils.e("[WXBridgeManager] invokeInitFramework ", e);
- String err="[WXBridgeManager] invokeInitFramework exception!#"+e.toString();
+ String err = "[WXBridgeManager] invokeInitFramework exception!#" + e.toString();
commitJSFrameworkAlarmMonitor(IWXUserTrackAdapter.JS_FRAMEWORK, WXErrorCode.WX_ERR_JS_FRAMEWORK, err);
}
}
@@ -1649,7 +1640,7 @@ public class WXBridgeManager implements Callback,BactchExecutor {
private void invokeCallJSBatch(Message message) {
if (mNextTickTasks.isEmpty() || !isJSFrameworkInit()) {
if (!isJSFrameworkInit()) {
- WXLogUtils.e("[WXBridgeManager] invokeCallJSBatch: framework.js uninitialized!! message:"+message.toString());
+ WXLogUtils.e("[WXBridgeManager] invokeCallJSBatch: framework.js uninitialized!! message:" + message.toString());
}
return;
}
@@ -1670,16 +1661,16 @@ public class WXBridgeManager implements Callback,BactchExecutor {
task = ((ArrayList) task).toArray();
WXJSObject[] args = {
- new WXJSObject(WXJSObject.String, instanceId),
- new WXJSObject(WXJSObject.JSON,
- WXJsonUtils.fromObjectToJSONString(task))};
+ new WXJSObject(WXJSObject.String, instanceId),
+ new WXJSObject(WXJSObject.JSON,
+ WXJsonUtils.fromObjectToJSONString(task))};
invokeExecJS(String.valueOf(instanceId), null, METHOD_CALL_JS, args);
} catch (Throwable e) {
WXLogUtils.e("WXBridgeManager", e);
- String err="invokeCallJSBatch#"+e.toString();
- commitJSBridgeAlarmMonitor(message.obj.toString(), WXErrorCode.WX_ERR_JS_EXECUTE,err);
+ String err = "invokeCallJSBatch#" + e.toString();
+ commitJSBridgeAlarmMonitor(message.obj.toString(), WXErrorCode.WX_ERR_JS_EXECUTE, err);
}
// If task is not empty, loop until it is empty
@@ -1751,16 +1742,16 @@ public class WXBridgeManager implements Callback,BactchExecutor {
/**
* Register Android module
+ *
* @param modules the format is like
* {'dom':['updateAttrs','updateStyle'],'event':['openUrl']}
*/
public void registerModules(final Map<String, Object> modules) {
if (modules != null && modules.size() != 0) {
- if(isJSThread()){
+ if (isJSThread()) {
invokeRegisterModules(modules, mRegisterModuleFailList);
- }
- else{
+ } else {
post(new Runnable() {
@Override
public void run() {
@@ -1775,7 +1766,7 @@ public class WXBridgeManager implements Callback,BactchExecutor {
* Registered component
*/
public void registerComponents(final List<Map<String, Object>> components) {
- if ( mJSHandler == null || components == null
+ if (mJSHandler == null || components == null
|| components.size() == 0) {
return;
}
@@ -1806,7 +1797,7 @@ public class WXBridgeManager implements Callback,BactchExecutor {
mWXBridge.execJSService(service);
} catch (Throwable e) {
WXLogUtils.e("[WXBridgeManager] invokeRegisterService:", e);
- commitJSFrameworkAlarmMonitor(IWXUserTrackAdapter.JS_FRAMEWORK,WXErrorCode.WX_ERR_JS_EXECUTE,"invokeRegisterService");
+ commitJSFrameworkAlarmMonitor(IWXUserTrackAdapter.JS_FRAMEWORK, WXErrorCode.WX_ERR_JS_EXECUTE, "invokeRegisterService");
}
}
@@ -1824,38 +1815,38 @@ public class WXBridgeManager implements Callback,BactchExecutor {
}
WXJSObject[] args = {new WXJSObject(WXJSObject.JSON,
- WXJsonUtils.fromObjectToJSONString(modules))};
+ WXJsonUtils.fromObjectToJSONString(modules))};
try {
mWXBridge.execJS("", null, METHOD_REGISTER_MODULES, args);
} catch (Throwable e) {
WXLogUtils.e("[WXBridgeManager] invokeRegisterModules:", e);
- commitJSFrameworkAlarmMonitor(IWXUserTrackAdapter.JS_FRAMEWORK,WXErrorCode.WX_ERR_JS_EXECUTE,"invokeRegisterModules");
+ commitJSFrameworkAlarmMonitor(IWXUserTrackAdapter.JS_FRAMEWORK, WXErrorCode.WX_ERR_JS_EXECUTE, "invokeRegisterModules");
}
}
private void invokeRegisterComponents(List<Map<String, Object>> components, List<Map<String, Object>> failReceiver) {
- if(components == failReceiver){
+ if (components == failReceiver) {
throw new RuntimeException("Fail receiver should not use source.");
}
if (!isJSFrameworkInit()) {
WXLogUtils.e("[WXBridgeManager] invokeRegisterComponents: framework.js uninitialized.");
- for (Map<String,Object> comp:components){
+ for (Map<String, Object> comp : components) {
failReceiver.add(comp);
}
return;
}
- if(components == null){
+ if (components == null) {
return;
}
WXJSObject[] args = {new WXJSObject(WXJSObject.JSON,
- WXJsonUtils.fromObjectToJSONString(components))};
+ WXJsonUtils.fromObjectToJSONString(components))};
try {
mWXBridge.execJS("", null, METHOD_REGISTER_COMPONENTS, args);
} catch (Throwable e) {
WXLogUtils.e("[WXBridgeManager] invokeRegisterComponents ", e);
- commitJSFrameworkAlarmMonitor(IWXUserTrackAdapter.JS_FRAMEWORK,WXErrorCode.WX_ERR_JS_EXECUTE,"invokeRegisterComponents");
+ commitJSFrameworkAlarmMonitor(IWXUserTrackAdapter.JS_FRAMEWORK, WXErrorCode.WX_ERR_JS_EXECUTE, "invokeRegisterComponents");
}
}
@@ -1864,7 +1855,7 @@ public class WXBridgeManager implements Callback,BactchExecutor {
mJSThread.quit();
}
mBridgeManager = null;
- if(mDestroyedInstanceId!=null){
+ if (mDestroyedInstanceId != null) {
mDestroyedInstanceId.clear();
}
@@ -1875,105 +1866,98 @@ public class WXBridgeManager implements Callback,BactchExecutor {
*/
public void reportJSException(String instanceId, String function,
String exception) {
- WXLogUtils.e("reportJSException >>>> instanceId:" + instanceId
- + ", exception function:" + function + ", exception:"
- + exception);
- WXSDKInstance instance = null;
- if (instanceId != null && (instance = WXSDKManager.getInstance().getSDKInstance(instanceId)) != null) {
- instance.onJSException(WXErrorCode.WX_ERR_JS_EXECUTE.getErrorCode(), function, exception);
-
- if (METHOD_CREATE_INSTANCE.equals(function)) {
- try {
- if (reInitCount > 1 && !instance.isNeedReLoad()) {
- // JSONObject domObject = JSON.parseObject(tasks);
- WXDomModule domModule = getDomModule(instanceId);
- Action action = Actions.getReloadPage(instanceId, true);
- domModule.postAction((DOMAction) action, true);
- instance.setNeedLoad(true);
- return;
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
+ WXLogUtils.e("reportJSException >>>> instanceId:" + instanceId
+ + ", exception function:" + function + ", exception:"
+ + exception);
+ WXSDKInstance instance = null;
+ if (instanceId != null && (instance = WXSDKManager.getInstance().getSDKInstance(instanceId)) != null) {
+ instance.onJSException(WXErrorCode.WX_ERR_JS_EXECUTE.getErrorCode(), function, exception);
+
+ if (METHOD_CREATE_INSTANCE.equals(function)) {
+ try {
+ if (reInitCount > 1 && !instance.isNeedReLoad()) {
+ // JSONObject domObject = JSON.parseObject(tasks);
+ WXDomModule domModule = getDomModule(instanceId);
+ Action action = Actions.getReloadPage(instanceId, true);
+ domModule.postAction((DOMAction) action, true);
+ instance.setNeedLoad(true);
+ return;
}
- String err = "function:" + function + "#exception:" + exception;
- commitJSBridgeAlarmMonitor(instanceId, WXErrorCode.WX_ERR_JS_EXECUTE, err);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
}
+ String err = "function:" + function + "#exception:" + exception;
+ commitJSBridgeAlarmMonitor(instanceId, WXErrorCode.WX_ERR_JS_EXECUTE, err);
+ }
- IWXJSExceptionAdapter adapter = WXSDKManager.getInstance().getIWXJSExceptionAdapter();
- if (adapter != null) {
- String bundleUrl;
- String exceptionId = instanceId;
+ IWXJSExceptionAdapter adapter = WXSDKManager.getInstance().getIWXJSExceptionAdapter();
+ if (adapter != null) {
+ String bundleUrl;
+ String exceptionId = instanceId;
- if (instanceId == "" || instanceId == null) {
- exceptionId = "instanceIdisNull";
- }
+ if (instanceId == "" || instanceId == null) {
+ exceptionId = "instanceIdisNull";
+ }
- if (instance == null) {
- if (("initFramework").equals(function)) {
- bundleUrl = "jsExceptionBeforeRenderInstanceNull";
- String exceptionExt = null;
- try {
- if (WXEnvironment.getApplication() != null) {
- final String fileName = WXEnvironment.getApplication().getApplicationContext().getCacheDir().getPath() + INITLOGFILE;
- try {
- File file = new File(fileName);
- if (file.exists()) {
- if (file.length() > 0) {
- StringBuilder result = new StringBuilder();
- try {
- InputStreamReader read = new InputStreamReader(new FileInputStream(file), "UTF-8");
- BufferedReader br = new BufferedReader(read);
- String s = null;
- while ((s = br.readLine()) != null) {
- result.append(s + "\n");
- }
- exceptionExt = result.toString();
- br.close();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- file.delete();
- }
- } catch (Throwable throwable) {
-
- }
+ if (instance == null) {
+ if (("initFramework").equals(function)) {
+ bundleUrl = "jsExceptionBeforeRenderInstanceNull";
+ String exceptionExt = null;
+ try {
+ if (WXEnvironment.getApplication() != null) {
+ final String fileName = WXEnvironment.getApplication().getApplicationContext().getCacheDir().getPath() + INITLOGFILE;
+ try {
+ File file = new File(fileName);
+ if (file.exists()) {
+ if (file.length() > 0) {
+ StringBuilder result = new StringBuilder();
+ try {
+ InputStreamReader read = new InputStreamReader(new FileInputStream(file), "UTF-8");
+ BufferedReader br = new BufferedReader(read);
+ String s = null;
+ while ((s = br.readLine()) != null) {
+ result.append(s + "\n");
}
- } catch (Throwable e) {
+ exceptionExt = result.toString();
+ br.close();
+ } catch (Exception e) {
e.printStackTrace();
+ }
}
- exception += "\n" + exceptionExt;
- WXLogUtils.e("reportJSException:" + exception);
+ file.delete();
+ }
+ } catch (Throwable throwable) {
- } else if (function == null) {
- bundleUrl = "jsExceptionInstanceAndFunctionNull";
- } else {
- bundleUrl = "jsExceptionInstanceNull" + function;
}
- } else {
- bundleUrl = instance.getBundleUrl();
+ }
+ } catch (Throwable e) {
+ e.printStackTrace();
}
+ exception += "\n" + exceptionExt;
+ WXLogUtils.e("reportJSException:" + exception);
- WXJSExceptionInfo jsException = new WXJSExceptionInfo(exceptionId, bundleUrl, WXErrorCode.WX_ERR_JS_EXECUTE.getErrorCode(), function, exception, null);
- adapter.onJSException(jsException);
- if (WXEnvironment.isApkDebugable()) {
- WXLogUtils.d(jsException.toString());
- }
+ } else if (function == null) {
+ bundleUrl = "jsExceptionInstanceAndFunctionNull";
+ } else {
+ bundleUrl = "jsExceptionInstanceNull" + function;
+ }
+ } else {
+ bundleUrl = instance.getBundleUrl();
}
- }
- public static class TimerInfo {
-
- public String callbackId;
- public long time;
- public String instanceId;
+ WXJSExceptionInfo jsException = new WXJSExceptionInfo(exceptionId, bundleUrl, WXErrorCode.WX_ERR_JS_EXECUTE.getErrorCode(), function, exception, null);
+ adapter.onJSException(jsException);
+ if (WXEnvironment.isApkDebugable()) {
+ WXLogUtils.d(jsException.toString());
+ }
+ }
}
private void registerDomModule() throws WXException {
/** Tell Javascript Framework what methods you have. This is Required.**/
- Map<String,Object> domMap=new HashMap<>();
- domMap.put(WXDomModule.WXDOM,WXDomModule.METHODS);
+ Map<String, Object> domMap = new HashMap<>();
+ domMap.put(WXDomModule.WXDOM, WXDomModule.METHODS);
registerModules(domMap);
}
@@ -1999,7 +1983,7 @@ public class WXBridgeManager implements Callback,BactchExecutor {
public void run() {
if (!isJSFrameworkInit())
return;
-
+
invokeExecJS("", null, METHOD_NOTIFY_SERIALIZE_CODE_CACHE, new WXJSObject[0]);
}
});
@@ -2013,4 +1997,11 @@ public class WXBridgeManager implements Callback,BactchExecutor {
msg.sendToTarget();
}
+ public static class TimerInfo {
+
+ public String callbackId;
+ public long time;
+ public String instanceId;
+ }
+
}