* [android] new dom statement pential break changes: WXRenderStatement#getComponentSize,DomModule#getComponentSize. It's low risk since it's a internal method, users should not dirct use it.
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/f3390e3c Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/f3390e3c Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/f3390e3c Branch: refs/heads/0.12-dev Commit: f3390e3c0a8b9f013ac9e306a361b1d9a875777a Parents: de623be Author: sospartan <[email protected]> Authored: Thu Feb 23 16:31:50 2017 +0800 Committer: sospartan <[email protected]> Committed: Wed Mar 15 15:44:00 2017 +0800 ---------------------------------------------------------------------- CHANGELOG.md | 4 + .../main/java/com/taobao/weex/WXSDKManager.java | 10 + .../com/taobao/weex/bridge/WXBridgeManager.java | 3 +- .../com/taobao/weex/dom/ApplyStyleConsumer.java | 245 ++++ .../java/com/taobao/weex/dom/DOMAction.java | 214 +++ .../com/taobao/weex/dom/DOMActionContext.java | 255 ++++ .../taobao/weex/dom/DOMActionContextImpl.java | 676 ++++++++++ .../java/com/taobao/weex/dom/RenderAction.java | 213 +++ .../taobao/weex/dom/RenderActionContext.java | 218 +++ .../java/com/taobao/weex/dom/RenderTask.java | 227 ++++ .../java/com/taobao/weex/dom/WXDomHandler.java | 73 +- .../java/com/taobao/weex/dom/WXDomManager.java | 284 +--- .../java/com/taobao/weex/dom/WXDomModule.java | 431 +----- .../java/com/taobao/weex/dom/WXDomObject.java | 4 +- .../com/taobao/weex/dom/WXDomStatement.java | 1272 ------------------ .../dom/action/AbstractAddElementAction.java | 313 +++++ .../dom/action/AbstractLayoutFinishAction.java | 240 ++++ .../com/taobao/weex/dom/action/Actions.java | 314 +++++ .../weex/dom/action/AddElementAction.java | 295 ++++ .../taobao/weex/dom/action/AddEventAction.java | 262 ++++ .../taobao/weex/dom/action/AddRuleAction.java | 254 ++++ .../weex/dom/action/CreateBodyAction.java | 302 +++++ .../weex/dom/action/CreateFinishAction.java | 224 +++ .../weex/dom/action/GetComponentRectAction.java | 314 +++++ .../weex/dom/action/InvokeMethodAction.java | 236 ++++ .../weex/dom/action/MoveElementAction.java | 281 ++++ .../weex/dom/action/RefreshFinishAction.java | 221 +++ .../weex/dom/action/RemoveElementAction.java | 286 ++++ .../weex/dom/action/RemoveEventAction.java | 264 ++++ .../weex/dom/action/ScrollToElementAction.java | 257 ++++ .../weex/dom/action/UpdateAttributeAction.java | 263 ++++ .../weex/dom/action/UpdateFinishAction.java | 237 ++++ .../weex/dom/action/UpdateStyleAction.java | 298 ++++ .../taobao/weex/ui/RenderActionContextImpl.java | 303 +++++ .../com/taobao/weex/ui/WXRenderManager.java | 170 +-- .../com/taobao/weex/ui/WXRenderStatement.java | 556 -------- .../weex/ui/animation/WXAnimationModule.java | 2 +- .../taobao/weex/ui/component/WXComponent.java | 12 +- .../java/com/taobao/weex/WXSDKManagerTest.java | 2 +- .../com/taobao/weex/dom/WXDomStatementTest.java | 110 +- .../com/taobao/weex/dom/action/TestActions.java | 59 + .../taobao/weex/ui/WXRenderStatementTest.java | 4 +- test/pages/dom-operation.we | 5 +- test/scripts/dom.test.js | 9 + 44 files changed, 7486 insertions(+), 2736 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/f3390e3c/CHANGELOG.md ---------------------------------------------------------------------- diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..e44157a --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,4 @@ +## [Unreleased] + +### Changed +- [android]Move DOM and render to seperate Action Object \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/f3390e3c/android/sdk/src/main/java/com/taobao/weex/WXSDKManager.java ---------------------------------------------------------------------- diff --git a/android/sdk/src/main/java/com/taobao/weex/WXSDKManager.java b/android/sdk/src/main/java/com/taobao/weex/WXSDKManager.java index 7f9f6dc..461faf0 100755 --- a/android/sdk/src/main/java/com/taobao/weex/WXSDKManager.java +++ b/android/sdk/src/main/java/com/taobao/weex/WXSDKManager.java @@ -196,6 +196,16 @@ public class WXSDKManager { mBridgeManager = WXBridgeManager.getInstance(); } + private WXSDKManager(WXRenderManager renderManager) { + mWXRenderManager = renderManager; + mWXDomManager = new WXDomManager(renderManager); + mBridgeManager = WXBridgeManager.getInstance(); + } + + static void initInstance(WXRenderManager renderManager){ + sManager = new WXSDKManager(renderManager); + } + public static WXSDKManager getInstance() { if (sManager == null) { synchronized (WXSDKManager.class) { http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/f3390e3c/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 de296ff..1db3a3b 100755 --- a/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridgeManager.java +++ b/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridgeManager.java @@ -234,6 +234,7 @@ import com.taobao.weex.common.WXRefreshData; import com.taobao.weex.common.WXRuntimeException; import com.taobao.weex.common.WXThread; import com.taobao.weex.dom.WXDomModule; +import com.taobao.weex.dom.action.Actions; import com.taobao.weex.utils.WXFileUtils; import com.taobao.weex.utils.WXJsonUtils; import com.taobao.weex.utils.WXLogUtils; @@ -638,7 +639,7 @@ public class WXBridgeManager implements Callback,BactchExecutor { WXSDKManager.getInstance().getSDKInstance(instanceId).jsonParseTime(System.currentTimeMillis() - start); } WXDomModule domModule = getDomModule(instanceId); - domModule.addElement(ref, domObject, Integer.parseInt(index)); + domModule.postAction(Actions.getAddElement(domObject, ref,Integer.parseInt(index)),false); } if (UNDEFINED.equals(callback) || NON_CALLBACK.equals(callback)) { http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/f3390e3c/android/sdk/src/main/java/com/taobao/weex/dom/ApplyStyleConsumer.java ---------------------------------------------------------------------- diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/ApplyStyleConsumer.java b/android/sdk/src/main/java/com/taobao/weex/dom/ApplyStyleConsumer.java new file mode 100644 index 0000000..6d3f15e --- /dev/null +++ b/android/sdk/src/main/java/com/taobao/weex/dom/ApplyStyleConsumer.java @@ -0,0 +1,245 @@ +/** + * + * Apache License + * Version 2.0, January 2004 + * http://www.apache.org/licenses/ + * + * TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + * + * 1. Definitions. + * + * "License" shall mean the terms and conditions for use, reproduction, + * and distribution as defined by Sections 1 through 9 of this document. + * + * "Licensor" shall mean the copyright owner or entity authorized by + * the copyright owner that is granting the License. + * + * "Legal Entity" shall mean the union of the acting entity and all + * other entities that control, are controlled by, or are under common + * control with that entity. For the purposes of this definition, + * "control" means (i) the power, direct or indirect, to cause the + * direction or management of such entity, whether by contract or + * otherwise, or (ii) ownership of fifty percent (50%) or more of the + * outstanding shares, or (iii) beneficial ownership of such entity. + * + * "You" (or "Your") shall mean an individual or Legal Entity + * exercising permissions granted by this License. + * + * "Source" form shall mean the preferred form for making modifications, + * including but not limited to software source code, documentation + * source, and configuration files. + * + * "Object" form shall mean any form resulting from mechanical + * transformation or translation of a Source form, including but + * not limited to compiled object code, generated documentation, + * and conversions to other media types. + * + * "Work" shall mean the work of authorship, whether in Source or + * Object form, made available under the License, as indicated by a + * copyright notice that is included in or attached to the work + * (an example is provided in the Appendix below). + * + * "Derivative Works" shall mean any work, whether in Source or Object + * form, that is based on (or derived from) the Work and for which the + * editorial revisions, annotations, elaborations, or other modifications + * represent, as a whole, an original work of authorship. For the purposes + * of this License, Derivative Works shall not include works that remain + * separable from, or merely link (or bind by name) to the interfaces of, + * the Work and Derivative Works thereof. + * + * "Contribution" shall mean any work of authorship, including + * the original version of the Work and any modifications or additions + * to that Work or Derivative Works thereof, that is intentionally + * submitted to Licensor for inclusion in the Work by the copyright owner + * or by an individual or Legal Entity authorized to submit on behalf of + * the copyright owner. For the purposes of this definition, "submitted" + * means any form of electronic, verbal, or written communication sent + * to the Licensor or its representatives, including but not limited to + * communication on electronic mailing lists, source code control systems, + * and issue tracking systems that are managed by, or on behalf of, the + * Licensor for the purpose of discussing and improving the Work, but + * excluding communication that is conspicuously marked or otherwise + * designated in writing by the copyright owner as "Not a Contribution." + * + * "Contributor" shall mean Licensor and any individual or Legal Entity + * on behalf of whom a Contribution has been received by Licensor and + * subsequently incorporated within the Work. + * + * 2. Grant of Copyright License. Subject to the terms and conditions of + * this License, each Contributor hereby grants to You a perpetual, + * worldwide, non-exclusive, no-charge, royalty-free, irrevocable + * copyright license to reproduce, prepare Derivative Works of, + * publicly display, publicly perform, sublicense, and distribute the + * Work and such Derivative Works in Source or Object form. + * + * 3. Grant of Patent License. Subject to the terms and conditions of + * this License, each Contributor hereby grants to You a perpetual, + * worldwide, non-exclusive, no-charge, royalty-free, irrevocable + * (except as stated in this section) patent license to make, have made, + * use, offer to sell, sell, import, and otherwise transfer the Work, + * where such license applies only to those patent claims licensable + * by such Contributor that are necessarily infringed by their + * Contribution(s) alone or by combination of their Contribution(s) + * with the Work to which such Contribution(s) was submitted. If You + * institute patent litigation against any entity (including a + * cross-claim or counterclaim in a lawsuit) alleging that the Work + * or a Contribution incorporated within the Work constitutes direct + * or contributory patent infringement, then any patent licenses + * granted to You under this License for that Work shall terminate + * as of the date such litigation is filed. + * + * 4. Redistribution. You may reproduce and distribute copies of the + * Work or Derivative Works thereof in any medium, with or without + * modifications, and in Source or Object form, provided that You + * meet the following conditions: + * + * (a) You must give any other recipients of the Work or + * Derivative Works a copy of this License; and + * + * (b) You must cause any modified files to carry prominent notices + * stating that You changed the files; and + * + * (c) You must retain, in the Source form of any Derivative Works + * that You distribute, all copyright, patent, trademark, and + * attribution notices from the Source form of the Work, + * excluding those notices that do not pertain to any part of + * the Derivative Works; and + * + * (d) If the Work includes a "NOTICE" text file as part of its + * distribution, then any Derivative Works that You distribute must + * include a readable copy of the attribution notices contained + * within such NOTICE file, excluding those notices that do not + * pertain to any part of the Derivative Works, in at least one + * of the following places: within a NOTICE text file distributed + * as part of the Derivative Works; within the Source form or + * documentation, if provided along with the Derivative Works; or, + * within a display generated by the Derivative Works, if and + * wherever such third-party notices normally appear. The contents + * of the NOTICE file are for informational purposes only and + * do not modify the License. You may add Your own attribution + * notices within Derivative Works that You distribute, alongside + * or as an addendum to the NOTICE text from the Work, provided + * that such additional attribution notices cannot be construed + * as modifying the License. + * + * You may add Your own copyright statement to Your modifications and + * may provide additional or different license terms and conditions + * for use, reproduction, or distribution of Your modifications, or + * for any such Derivative Works as a whole, provided Your use, + * reproduction, and distribution of the Work otherwise complies with + * the conditions stated in this License. + * + * 5. Submission of Contributions. Unless You explicitly state otherwise, + * any Contribution intentionally submitted for inclusion in the Work + * by You to the Licensor shall be under the terms and conditions of + * this License, without any additional terms or conditions. + * Notwithstanding the above, nothing herein shall supersede or modify + * the terms of any separate license agreement you may have executed + * with Licensor regarding such Contributions. + * + * 6. Trademarks. This License does not grant permission to use the trade + * names, trademarks, service marks, or product names of the Licensor, + * except as required for reasonable and customary use in describing the + * origin of the Work and reproducing the content of the NOTICE file. + * + * 7. Disclaimer of Warranty. Unless required by applicable law or + * agreed to in writing, Licensor provides the Work (and each + * Contributor provides its Contributions) on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + * implied, including, without limitation, any warranties or conditions + * of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + * PARTICULAR PURPOSE. You are solely responsible for determining the + * appropriateness of using or redistributing the Work and assume any + * risks associated with Your exercise of permissions under this License. + * + * 8. Limitation of Liability. In no event and under no legal theory, + * whether in tort (including negligence), contract, or otherwise, + * unless required by applicable law (such as deliberate and grossly + * negligent acts) or agreed to in writing, shall any Contributor be + * liable to You for damages, including any direct, indirect, special, + * incidental, or consequential damages of any character arising as a + * result of this License or out of the use or inability to use the + * Work (including but not limited to damages for loss of goodwill, + * work stoppage, computer failure or malfunction, or any and all + * other commercial damages or losses), even if such Contributor + * has been advised of the possibility of such damages. + * + * 9. Accepting Warranty or Additional Liability. While redistributing + * the Work or Derivative Works thereof, You may choose to offer, + * and charge a fee for, acceptance of support, warranty, indemnity, + * or other liability obligations and/or rights consistent with this + * License. However, in accepting such obligations, You may act only + * on Your own behalf and on Your sole responsibility, not on behalf + * of any other Contributor, and only if You agree to indemnify, + * defend, and hold each Contributor harmless for any liability + * incurred by, or claims asserted against, such Contributor by reason + * of your accepting any such warranty or additional liability. + * + * END OF TERMS AND CONDITIONS + * + * APPENDIX: How to apply the Apache License to your work. + * + * To apply the Apache License to your work, attach the following + * boilerplate notice, with the fields enclosed by brackets "[]" + * replaced with your own identifying information. (Don't include + * the brackets!) The text should be enclosed in the appropriate + * comment syntax for the file format. We also recommend that a + * file or class name and description of purpose be included on the + * same "printed page" as the copyright notice for easier + * identification within third-party archives. + * + * Copyright 2016 Alibaba Group + * + * Licensed 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.dom; + +import java.util.Map; + +/** + * Created by sospartan on 22/02/2017. + */ +class ApplyStyleConsumer implements WXDomObject.Consumer { + static ApplyStyleConsumer sInstance; + + public static ApplyStyleConsumer getInstance() { + if (sInstance == null) { + sInstance = new ApplyStyleConsumer(); + } + return sInstance; + } + + private ApplyStyleConsumer() { + } + + ; + + @Override + public void accept(WXDomObject dom) { + WXStyle style = dom.getStyles(); + + /** merge default styles **/ + Map<String, String> defaults = dom.getDefaultStyle(); + if (defaults != null) { + for (Map.Entry<String, String> entry : defaults.entrySet()) { + if (!style.containsKey(entry.getKey())) { + style.put(entry.getKey(), entry.getValue()); + } + } + } + + if (dom.getStyles().size() > 0) { + dom.applyStyleToNode(); + } + } +} http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/f3390e3c/android/sdk/src/main/java/com/taobao/weex/dom/DOMAction.java ---------------------------------------------------------------------- diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/DOMAction.java b/android/sdk/src/main/java/com/taobao/weex/dom/DOMAction.java new file mode 100644 index 0000000..b51b9b8 --- /dev/null +++ b/android/sdk/src/main/java/com/taobao/weex/dom/DOMAction.java @@ -0,0 +1,214 @@ +/** + * + * Apache License + * Version 2.0, January 2004 + * http://www.apache.org/licenses/ + * + * TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + * + * 1. Definitions. + * + * "License" shall mean the terms and conditions for use, reproduction, + * and distribution as defined by Sections 1 through 9 of this document. + * + * "Licensor" shall mean the copyright owner or entity authorized by + * the copyright owner that is granting the License. + * + * "Legal Entity" shall mean the union of the acting entity and all + * other entities that control, are controlled by, or are under common + * control with that entity. For the purposes of this definition, + * "control" means (i) the power, direct or indirect, to cause the + * direction or management of such entity, whether by contract or + * otherwise, or (ii) ownership of fifty percent (50%) or more of the + * outstanding shares, or (iii) beneficial ownership of such entity. + * + * "You" (or "Your") shall mean an individual or Legal Entity + * exercising permissions granted by this License. + * + * "Source" form shall mean the preferred form for making modifications, + * including but not limited to software source code, documentation + * source, and configuration files. + * + * "Object" form shall mean any form resulting from mechanical + * transformation or translation of a Source form, including but + * not limited to compiled object code, generated documentation, + * and conversions to other media types. + * + * "Work" shall mean the work of authorship, whether in Source or + * Object form, made available under the License, as indicated by a + * copyright notice that is included in or attached to the work + * (an example is provided in the Appendix below). + * + * "Derivative Works" shall mean any work, whether in Source or Object + * form, that is based on (or derived from) the Work and for which the + * editorial revisions, annotations, elaborations, or other modifications + * represent, as a whole, an original work of authorship. For the purposes + * of this License, Derivative Works shall not include works that remain + * separable from, or merely link (or bind by name) to the interfaces of, + * the Work and Derivative Works thereof. + * + * "Contribution" shall mean any work of authorship, including + * the original version of the Work and any modifications or additions + * to that Work or Derivative Works thereof, that is intentionally + * submitted to Licensor for inclusion in the Work by the copyright owner + * or by an individual or Legal Entity authorized to submit on behalf of + * the copyright owner. For the purposes of this definition, "submitted" + * means any form of electronic, verbal, or written communication sent + * to the Licensor or its representatives, including but not limited to + * communication on electronic mailing lists, source code control systems, + * and issue tracking systems that are managed by, or on behalf of, the + * Licensor for the purpose of discussing and improving the Work, but + * excluding communication that is conspicuously marked or otherwise + * designated in writing by the copyright owner as "Not a Contribution." + * + * "Contributor" shall mean Licensor and any individual or Legal Entity + * on behalf of whom a Contribution has been received by Licensor and + * subsequently incorporated within the Work. + * + * 2. Grant of Copyright License. Subject to the terms and conditions of + * this License, each Contributor hereby grants to You a perpetual, + * worldwide, non-exclusive, no-charge, royalty-free, irrevocable + * copyright license to reproduce, prepare Derivative Works of, + * publicly display, publicly perform, sublicense, and distribute the + * Work and such Derivative Works in Source or Object form. + * + * 3. Grant of Patent License. Subject to the terms and conditions of + * this License, each Contributor hereby grants to You a perpetual, + * worldwide, non-exclusive, no-charge, royalty-free, irrevocable + * (except as stated in this section) patent license to make, have made, + * use, offer to sell, sell, import, and otherwise transfer the Work, + * where such license applies only to those patent claims licensable + * by such Contributor that are necessarily infringed by their + * Contribution(s) alone or by combination of their Contribution(s) + * with the Work to which such Contribution(s) was submitted. If You + * institute patent litigation against any entity (including a + * cross-claim or counterclaim in a lawsuit) alleging that the Work + * or a Contribution incorporated within the Work constitutes direct + * or contributory patent infringement, then any patent licenses + * granted to You under this License for that Work shall terminate + * as of the date such litigation is filed. + * + * 4. Redistribution. You may reproduce and distribute copies of the + * Work or Derivative Works thereof in any medium, with or without + * modifications, and in Source or Object form, provided that You + * meet the following conditions: + * + * (a) You must give any other recipients of the Work or + * Derivative Works a copy of this License; and + * + * (b) You must cause any modified files to carry prominent notices + * stating that You changed the files; and + * + * (c) You must retain, in the Source form of any Derivative Works + * that You distribute, all copyright, patent, trademark, and + * attribution notices from the Source form of the Work, + * excluding those notices that do not pertain to any part of + * the Derivative Works; and + * + * (d) If the Work includes a "NOTICE" text file as part of its + * distribution, then any Derivative Works that You distribute must + * include a readable copy of the attribution notices contained + * within such NOTICE file, excluding those notices that do not + * pertain to any part of the Derivative Works, in at least one + * of the following places: within a NOTICE text file distributed + * as part of the Derivative Works; within the Source form or + * documentation, if provided along with the Derivative Works; or, + * within a display generated by the Derivative Works, if and + * wherever such third-party notices normally appear. The contents + * of the NOTICE file are for informational purposes only and + * do not modify the License. You may add Your own attribution + * notices within Derivative Works that You distribute, alongside + * or as an addendum to the NOTICE text from the Work, provided + * that such additional attribution notices cannot be construed + * as modifying the License. + * + * You may add Your own copyright statement to Your modifications and + * may provide additional or different license terms and conditions + * for use, reproduction, or distribution of Your modifications, or + * for any such Derivative Works as a whole, provided Your use, + * reproduction, and distribution of the Work otherwise complies with + * the conditions stated in this License. + * + * 5. Submission of Contributions. Unless You explicitly state otherwise, + * any Contribution intentionally submitted for inclusion in the Work + * by You to the Licensor shall be under the terms and conditions of + * this License, without any additional terms or conditions. + * Notwithstanding the above, nothing herein shall supersede or modify + * the terms of any separate license agreement you may have executed + * with Licensor regarding such Contributions. + * + * 6. Trademarks. This License does not grant permission to use the trade + * names, trademarks, service marks, or product names of the Licensor, + * except as required for reasonable and customary use in describing the + * origin of the Work and reproducing the content of the NOTICE file. + * + * 7. Disclaimer of Warranty. Unless required by applicable law or + * agreed to in writing, Licensor provides the Work (and each + * Contributor provides its Contributions) on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + * implied, including, without limitation, any warranties or conditions + * of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + * PARTICULAR PURPOSE. You are solely responsible for determining the + * appropriateness of using or redistributing the Work and assume any + * risks associated with Your exercise of permissions under this License. + * + * 8. Limitation of Liability. In no event and under no legal theory, + * whether in tort (including negligence), contract, or otherwise, + * unless required by applicable law (such as deliberate and grossly + * negligent acts) or agreed to in writing, shall any Contributor be + * liable to You for damages, including any direct, indirect, special, + * incidental, or consequential damages of any character arising as a + * result of this License or out of the use or inability to use the + * Work (including but not limited to damages for loss of goodwill, + * work stoppage, computer failure or malfunction, or any and all + * other commercial damages or losses), even if such Contributor + * has been advised of the possibility of such damages. + * + * 9. Accepting Warranty or Additional Liability. While redistributing + * the Work or Derivative Works thereof, You may choose to offer, + * and charge a fee for, acceptance of support, warranty, indemnity, + * or other liability obligations and/or rights consistent with this + * License. However, in accepting such obligations, You may act only + * on Your own behalf and on Your sole responsibility, not on behalf + * of any other Contributor, and only if You agree to indemnify, + * defend, and hold each Contributor harmless for any liability + * incurred by, or claims asserted against, such Contributor by reason + * of your accepting any such warranty or additional liability. + * + * END OF TERMS AND CONDITIONS + * + * APPENDIX: How to apply the Apache License to your work. + * + * To apply the Apache License to your work, attach the following + * boilerplate notice, with the fields enclosed by brackets "[]" + * replaced with your own identifying information. (Don't include + * the brackets!) The text should be enclosed in the appropriate + * comment syntax for the file format. We also recommend that a + * file or class name and description of purpose be included on the + * same "printed page" as the copyright notice for easier + * identification within third-party archives. + * + * Copyright 2016 Alibaba Group + * + * Licensed 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.dom; + + +/** + * Created by sospartan on 23/02/2017. + */ + +public interface DOMAction { + void executeDom(DOMActionContext context); +} http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/f3390e3c/android/sdk/src/main/java/com/taobao/weex/dom/DOMActionContext.java ---------------------------------------------------------------------- diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/DOMActionContext.java b/android/sdk/src/main/java/com/taobao/weex/dom/DOMActionContext.java new file mode 100644 index 0000000..f23c681 --- /dev/null +++ b/android/sdk/src/main/java/com/taobao/weex/dom/DOMActionContext.java @@ -0,0 +1,255 @@ +/** + * + * Apache License + * Version 2.0, January 2004 + * http://www.apache.org/licenses/ + * + * TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + * + * 1. Definitions. + * + * "License" shall mean the terms and conditions for use, reproduction, + * and distribution as defined by Sections 1 through 9 of this document. + * + * "Licensor" shall mean the copyright owner or entity authorized by + * the copyright owner that is granting the License. + * + * "Legal Entity" shall mean the union of the acting entity and all + * other entities that control, are controlled by, or are under common + * control with that entity. For the purposes of this definition, + * "control" means (i) the power, direct or indirect, to cause the + * direction or management of such entity, whether by contract or + * otherwise, or (ii) ownership of fifty percent (50%) or more of the + * outstanding shares, or (iii) beneficial ownership of such entity. + * + * "You" (or "Your") shall mean an individual or Legal Entity + * exercising permissions granted by this License. + * + * "Source" form shall mean the preferred form for making modifications, + * including but not limited to software source code, documentation + * source, and configuration files. + * + * "Object" form shall mean any form resulting from mechanical + * transformation or translation of a Source form, including but + * not limited to compiled object code, generated documentation, + * and conversions to other media types. + * + * "Work" shall mean the work of authorship, whether in Source or + * Object form, made available under the License, as indicated by a + * copyright notice that is included in or attached to the work + * (an example is provided in the Appendix below). + * + * "Derivative Works" shall mean any work, whether in Source or Object + * form, that is based on (or derived from) the Work and for which the + * editorial revisions, annotations, elaborations, or other modifications + * represent, as a whole, an original work of authorship. For the purposes + * of this License, Derivative Works shall not include works that remain + * separable from, or merely link (or bind by name) to the interfaces of, + * the Work and Derivative Works thereof. + * + * "Contribution" shall mean any work of authorship, including + * the original version of the Work and any modifications or additions + * to that Work or Derivative Works thereof, that is intentionally + * submitted to Licensor for inclusion in the Work by the copyright owner + * or by an individual or Legal Entity authorized to submit on behalf of + * the copyright owner. For the purposes of this definition, "submitted" + * means any form of electronic, verbal, or written communication sent + * to the Licensor or its representatives, including but not limited to + * communication on electronic mailing lists, source code control systems, + * and issue tracking systems that are managed by, or on behalf of, the + * Licensor for the purpose of discussing and improving the Work, but + * excluding communication that is conspicuously marked or otherwise + * designated in writing by the copyright owner as "Not a Contribution." + * + * "Contributor" shall mean Licensor and any individual or Legal Entity + * on behalf of whom a Contribution has been received by Licensor and + * subsequently incorporated within the Work. + * + * 2. Grant of Copyright License. Subject to the terms and conditions of + * this License, each Contributor hereby grants to You a perpetual, + * worldwide, non-exclusive, no-charge, royalty-free, irrevocable + * copyright license to reproduce, prepare Derivative Works of, + * publicly display, publicly perform, sublicense, and distribute the + * Work and such Derivative Works in Source or Object form. + * + * 3. Grant of Patent License. Subject to the terms and conditions of + * this License, each Contributor hereby grants to You a perpetual, + * worldwide, non-exclusive, no-charge, royalty-free, irrevocable + * (except as stated in this section) patent license to make, have made, + * use, offer to sell, sell, import, and otherwise transfer the Work, + * where such license applies only to those patent claims licensable + * by such Contributor that are necessarily infringed by their + * Contribution(s) alone or by combination of their Contribution(s) + * with the Work to which such Contribution(s) was submitted. If You + * institute patent litigation against any entity (including a + * cross-claim or counterclaim in a lawsuit) alleging that the Work + * or a Contribution incorporated within the Work constitutes direct + * or contributory patent infringement, then any patent licenses + * granted to You under this License for that Work shall terminate + * as of the date such litigation is filed. + * + * 4. Redistribution. You may reproduce and distribute copies of the + * Work or Derivative Works thereof in any medium, with or without + * modifications, and in Source or Object form, provided that You + * meet the following conditions: + * + * (a) You must give any other recipients of the Work or + * Derivative Works a copy of this License; and + * + * (b) You must cause any modified files to carry prominent notices + * stating that You changed the files; and + * + * (c) You must retain, in the Source form of any Derivative Works + * that You distribute, all copyright, patent, trademark, and + * attribution notices from the Source form of the Work, + * excluding those notices that do not pertain to any part of + * the Derivative Works; and + * + * (d) If the Work includes a "NOTICE" text file as part of its + * distribution, then any Derivative Works that You distribute must + * include a readable copy of the attribution notices contained + * within such NOTICE file, excluding those notices that do not + * pertain to any part of the Derivative Works, in at least one + * of the following places: within a NOTICE text file distributed + * as part of the Derivative Works; within the Source form or + * documentation, if provided along with the Derivative Works; or, + * within a display generated by the Derivative Works, if and + * wherever such third-party notices normally appear. The contents + * of the NOTICE file are for informational purposes only and + * do not modify the License. You may add Your own attribution + * notices within Derivative Works that You distribute, alongside + * or as an addendum to the NOTICE text from the Work, provided + * that such additional attribution notices cannot be construed + * as modifying the License. + * + * You may add Your own copyright statement to Your modifications and + * may provide additional or different license terms and conditions + * for use, reproduction, or distribution of Your modifications, or + * for any such Derivative Works as a whole, provided Your use, + * reproduction, and distribution of the Work otherwise complies with + * the conditions stated in this License. + * + * 5. Submission of Contributions. Unless You explicitly state otherwise, + * any Contribution intentionally submitted for inclusion in the Work + * by You to the Licensor shall be under the terms and conditions of + * this License, without any additional terms or conditions. + * Notwithstanding the above, nothing herein shall supersede or modify + * the terms of any separate license agreement you may have executed + * with Licensor regarding such Contributions. + * + * 6. Trademarks. This License does not grant permission to use the trade + * names, trademarks, service marks, or product names of the Licensor, + * except as required for reasonable and customary use in describing the + * origin of the Work and reproducing the content of the NOTICE file. + * + * 7. Disclaimer of Warranty. Unless required by applicable law or + * agreed to in writing, Licensor provides the Work (and each + * Contributor provides its Contributions) on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + * implied, including, without limitation, any warranties or conditions + * of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + * PARTICULAR PURPOSE. You are solely responsible for determining the + * appropriateness of using or redistributing the Work and assume any + * risks associated with Your exercise of permissions under this License. + * + * 8. Limitation of Liability. In no event and under no legal theory, + * whether in tort (including negligence), contract, or otherwise, + * unless required by applicable law (such as deliberate and grossly + * negligent acts) or agreed to in writing, shall any Contributor be + * liable to You for damages, including any direct, indirect, special, + * incidental, or consequential damages of any character arising as a + * result of this License or out of the use or inability to use the + * Work (including but not limited to damages for loss of goodwill, + * work stoppage, computer failure or malfunction, or any and all + * other commercial damages or losses), even if such Contributor + * has been advised of the possibility of such damages. + * + * 9. Accepting Warranty or Additional Liability. While redistributing + * the Work or Derivative Works thereof, You may choose to offer, + * and charge a fee for, acceptance of support, warranty, indemnity, + * or other liability obligations and/or rights consistent with this + * License. However, in accepting such obligations, You may act only + * on Your own behalf and on Your sole responsibility, not on behalf + * of any other Contributor, and only if You agree to indemnify, + * defend, and hold each Contributor harmless for any liability + * incurred by, or claims asserted against, such Contributor by reason + * of your accepting any such warranty or additional liability. + * + * END OF TERMS AND CONDITIONS + * + * APPENDIX: How to apply the Apache License to your work. + * + * To apply the Apache License to your work, attach the following + * boilerplate notice, with the fields enclosed by brackets "[]" + * replaced with your own identifying information. (Don't include + * the brackets!) The text should be enclosed in the appropriate + * comment syntax for the file format. We also recommend that a + * file or class name and description of purpose be included on the + * same "printed page" as the copyright notice for easier + * identification within third-party archives. + * + * Copyright 2016 Alibaba Group + * + * Licensed 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.dom; + +import com.taobao.weex.WXSDKInstance; +import com.taobao.weex.ui.component.WXComponent; + +import java.util.Map; + +/** + * DOM operation context, use as compatible helper temporary. + * Created by sospartan on 14/02/2017. + */ + +public interface DOMActionContext { + String getInstanceId(); + + /** + * For compatible, remove soon. + **/ + WXDomObject.Consumer getAddDOMConsumer(); + + WXDomObject.Consumer getApplyStyleConsumer(); + + @Deprecated + void addDomInfo(String ref, WXComponent component); + + void addAnimationForElement(String ref, Map<String, Object> animMap); + + /** + * Post a Render task + * + * @param statement + */ + void postRenderTask(RenderAction statement); + + void registerDOMObject(String ref, WXDomObject ojb); + + void unregisterDOMObject(String ref); + + void registerComponent(String ref, WXComponent comp); + + WXComponent getCompByRef(String ref); + + boolean isDestory(); + + WXSDKInstance getInstance(); + + WXDomObject getDomByRef(String ref); + + @Deprecated + WXDomObject.Consumer getRemoveElementConsumer(); +} http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/f3390e3c/android/sdk/src/main/java/com/taobao/weex/dom/DOMActionContextImpl.java ---------------------------------------------------------------------- diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/DOMActionContextImpl.java b/android/sdk/src/main/java/com/taobao/weex/dom/DOMActionContextImpl.java new file mode 100755 index 0000000..ee86493 --- /dev/null +++ b/android/sdk/src/main/java/com/taobao/weex/dom/DOMActionContextImpl.java @@ -0,0 +1,676 @@ +/** + * + * Apache License + * Version 2.0, January 2004 + * http://www.apache.org/licenses/ + * + * TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + * + * 1. Definitions. + * + * "License" shall mean the terms and conditions for use, reproduction, + * and distribution as defined by Sections 1 through 9 of this document. + * + * "Licensor" shall mean the copyright owner or entity authorized by + * the copyright owner that is granting the License. + * + * "Legal Entity" shall mean the union of the acting entity and all + * other entities that control, are controlled by, or are under common + * control with that entity. For the purposes of this definition, + * "control" means (i) the power, direct or indirect, to cause the + * direction or management of such entity, whether by contract or + * otherwise, or (ii) ownership of fifty percent (50%) or more of the + * outstanding shares, or (iii) beneficial ownership of such entity. + * + * "You" (or "Your") shall mean an individual or Legal Entity + * exercising permissions granted by this License. + * + * "Source" form shall mean the preferred form for making modifications, + * including but not limited to software source code, documentation + * source, and configuration files. + * + * "Object" form shall mean any form resulting from mechanical + * transformation or translation of a Source form, including but + * not limited to compiled object code, generated documentation, + * and conversions to other media types. + * + * "Work" shall mean the work of authorship, whether in Source or + * Object form, made available under the License, as indicated by a + * copyright notice that is included in or attached to the work + * (an example is provided in the Appendix below). + * + * "Derivative Works" shall mean any work, whether in Source or Object + * form, that is based on (or derived from) the Work and for which the + * editorial revisions, annotations, elaborations, or other modifications + * represent, as a whole, an original work of authorship. For the purposes + * of this License, Derivative Works shall not include works that remain + * separable from, or merely link (or bind by name) to the interfaces of, + * the Work and Derivative Works thereof. + * + * "Contribution" shall mean any work of authorship, including + * the original version of the Work and any modifications or additions + * to that Work or Derivative Works thereof, that is intentionally + * submitted to Licensor for inclusion in the Work by the copyright owner + * or by an individual or Legal Entity authorized to submit on behalf of + * the copyright owner. For the purposes of this definition, "submitted" + * means any form of electronic, verbal, or written communication sent + * to the Licensor or its representatives, including but not limited to + * communication on electronic mailing lists, source code control systems, + * and issue tracking systems that are managed by, or on behalf of, the + * Licensor for the purpose of discussing and improving the Work, but + * excluding communication that is conspicuously marked or otherwise + * designated in writing by the copyright owner as "Not a Contribution." + * + * "Contributor" shall mean Licensor and any individual or Legal Entity + * on behalf of whom a Contribution has been received by Licensor and + * subsequently incorporated within the Work. + * + * 2. Grant of Copyright License. Subject to the terms and conditions of + * this License, each Contributor hereby grants to You a perpetual, + * worldwide, non-exclusive, no-charge, royalty-free, irrevocable + * copyright license to reproduce, prepare Derivative Works of, + * publicly display, publicly perform, sublicense, and distribute the + * Work and such Derivative Works in Source or Object form. + * + * 3. Grant of Patent License. Subject to the terms and conditions of + * this License, each Contributor hereby grants to You a perpetual, + * worldwide, non-exclusive, no-charge, royalty-free, irrevocable + * (except as stated in this section) patent license to make, have made, + * use, offer to sell, sell, import, and otherwise transfer the Work, + * where such license applies only to those patent claims licensable + * by such Contributor that are necessarily infringed by their + * Contribution(s) alone or by combination of their Contribution(s) + * with the Work to which such Contribution(s) was submitted. If You + * institute patent litigation against any entity (including a + * cross-claim or counterclaim in a lawsuit) alleging that the Work + * or a Contribution incorporated within the Work constitutes direct + * or contributory patent infringement, then any patent licenses + * granted to You under this License for that Work shall terminate + * as of the date such litigation is filed. + * + * 4. Redistribution. You may reproduce and distribute copies of the + * Work or Derivative Works thereof in any medium, with or without + * modifications, and in Source or Object form, provided that You + * meet the following conditions: + * + * (a) You must give any other recipients of the Work or + * Derivative Works a copy of this License; and + * + * (b) You must cause any modified files to carry prominent notices + * stating that You changed the files; and + * + * (c) You must retain, in the Source form of any Derivative Works + * that You distribute, all copyright, patent, trademark, and + * attribution notices from the Source form of the Work, + * excluding those notices that do not pertain to any part of + * the Derivative Works; and + * + * (d) If the Work includes a "NOTICE" text file as part of its + * distribution, then any Derivative Works that You distribute must + * include a readable copy of the attribution notices contained + * within such NOTICE file, excluding those notices that do not + * pertain to any part of the Derivative Works, in at least one + * of the following places: within a NOTICE text file distributed + * as part of the Derivative Works; within the Source form or + * documentation, if provided along with the Derivative Works; or, + * within a display generated by the Derivative Works, if and + * wherever such third-party notices normally appear. The contents + * of the NOTICE file are for informational purposes only and + * do not modify the License. You may add Your own attribution + * notices within Derivative Works that You distribute, alongside + * or as an addendum to the NOTICE text from the Work, provided + * that such additional attribution notices cannot be construed + * as modifying the License. + * + * You may add Your own copyright statement to Your modifications and + * may provide additional or different license terms and conditions + * for use, reproduction, or distribution of Your modifications, or + * for any such Derivative Works as a whole, provided Your use, + * reproduction, and distribution of the Work otherwise complies with + * the conditions stated in this License. + * + * 5. Submission of Contributions. Unless You explicitly state otherwise, + * any Contribution intentionally submitted for inclusion in the Work + * by You to the Licensor shall be under the terms and conditions of + * this License, without any additional terms or conditions. + * Notwithstanding the above, nothing herein shall supersede or modify + * the terms of any separate license agreement you may have executed + * with Licensor regarding such Contributions. + * + * 6. Trademarks. This License does not grant permission to use the trade + * names, trademarks, service marks, or product names of the Licensor, + * except as required for reasonable and customary use in describing the + * origin of the Work and reproducing the content of the NOTICE file. + * + * 7. Disclaimer of Warranty. Unless required by applicable law or + * agreed to in writing, Licensor provides the Work (and each + * Contributor provides its Contributions) on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + * implied, including, without limitation, any warranties or conditions + * of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + * PARTICULAR PURPOSE. You are solely responsible for determining the + * appropriateness of using or redistributing the Work and assume any + * risks associated with Your exercise of permissions under this License. + * + * 8. Limitation of Liability. In no event and under no legal theory, + * whether in tort (including negligence), contract, or otherwise, + * unless required by applicable law (such as deliberate and grossly + * negligent acts) or agreed to in writing, shall any Contributor be + * liable to You for damages, including any direct, indirect, special, + * incidental, or consequential damages of any character arising as a + * result of this License or out of the use or inability to use the + * Work (including but not limited to damages for loss of goodwill, + * work stoppage, computer failure or malfunction, or any and all + * other commercial damages or losses), even if such Contributor + * has been advised of the possibility of such damages. + * + * 9. Accepting Warranty or Additional Liability. While redistributing + * the Work or Derivative Works thereof, You may choose to offer, + * and charge a fee for, acceptance of support, warranty, indemnity, + * or other liability obligations and/or rights consistent with this + * License. However, in accepting such obligations, You may act only + * on Your own behalf and on Your sole responsibility, not on behalf + * of any other Contributor, and only if You agree to indemnify, + * defend, and hold each Contributor harmless for any liability + * incurred by, or claims asserted against, such Contributor by reason + * of your accepting any such warranty or additional liability. + * + * END OF TERMS AND CONDITIONS + * + * APPENDIX: How to apply the Apache License to your work. + * + * To apply the Apache License to your work, attach the following + * boilerplate notice, with the fields enclosed by brackets "[]" + * replaced with your own identifying information. (Don't include + * the brackets!) The text should be enclosed in the appropriate + * comment syntax for the file format. We also recommend that a + * file or class name and description of purpose be included on the + * same "printed page" as the copyright notice for easier + * identification within third-party archives. + * + * Copyright 2016 Alibaba Group + * + * Licensed 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.dom; + +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; +import android.text.TextUtils; +import android.util.Pair; + +import com.alibaba.fastjson.JSONObject; +import com.taobao.weex.WXEnvironment; +import com.taobao.weex.WXSDKInstance; +import com.taobao.weex.WXSDKManager; +import com.taobao.weex.dom.flex.CSSLayoutContext; +import com.taobao.weex.ui.IWXRenderTask; +import com.taobao.weex.ui.WXRenderManager; +import com.taobao.weex.ui.animation.WXAnimationBean; +import com.taobao.weex.ui.component.WXComponent; +import com.taobao.weex.ui.component.WXVContainer; +import com.taobao.weex.utils.WXLogUtils; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.LinkedHashSet; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; + +/** + * <p> + * This class is responsible for creating command object of DOM operation and + * invoking command of corresponding object. + * </p> + * <p> + * In the command design pattern, + * this class acts as the <strong>invoker </strong>in the command pattern + * despite that it is also responsible for creating <strong>Command</strong> object. + * And,{@link IWXRenderTask} works as the <strong>Command</strong> + * {@link WXDomManager} works as the <strong>Client</strong> + * {@link WXRenderManager} works as the <strong>Receiver</strong>. + * </p> + * <p> + * There exists one to one correspondence between DOMActionContextImpl and WXInstance, + * and {@link WXDomManager} is responsible for manage the relation of correspondence. + * </p> + */ +class DOMActionContextImpl implements DOMActionContext { + /** package **/ final ConcurrentHashMap<String, WXDomObject> mRegistry; + private WXDomObject.Consumer mAddDOMConsumer; + private WXDomObject.Consumer mUnregisterDomConsumer; + private String mInstanceId; + private WXRenderManager mWXRenderManager; + private ArrayList<IWXRenderTask> mNormalTasks; + private Set <Pair<String, Map<String, Object>>> animations; + private CSSLayoutContext mLayoutContext; + private volatile boolean mDirty; + private boolean mDestroy; + private Map<String, AddDomInfo> mAddDom = new HashMap<>(); + + /** + * Create an instance of {@link DOMActionContextImpl}, + * One {@link WXSDKInstance} corresponding to one and only one {@link DOMActionContextImpl}. + * And all the instance of {@link WXDomManager} share the same {@link WXRenderManager}. + * @param instanceId the id of the {@link WXSDKInstance}. + * One {@link WXSDKInstance} corresponding to one {@link DOMActionContextImpl}, + * and vice versa. + * @param renderManager This acts as the Receiver of the command pattern + */ + public DOMActionContextImpl(String instanceId, WXRenderManager renderManager) { + mDestroy = false; + mInstanceId = instanceId; + mLayoutContext = new CSSLayoutContext(); + mRegistry = new ConcurrentHashMap<>(); + mNormalTasks = new ArrayList<>(); + animations = new LinkedHashSet<>(); + mWXRenderManager = renderManager; + mAddDOMConsumer = new AddDOMConsumer(mRegistry); + mUnregisterDomConsumer = new RemoveElementConsumer(mRegistry); + } + + @Override + public String getInstanceId() { + return mInstanceId; + } + + @Override + public WXDomObject.Consumer getAddDOMConsumer(){ + return mAddDOMConsumer; + } + + @Override + public WXDomObject.Consumer getRemoveElementConsumer() { + return mUnregisterDomConsumer; + } + + @Override + public WXDomObject.Consumer getApplyStyleConsumer() { + return ApplyStyleConsumer.getInstance(); + } + + @Override + public void addDomInfo(String ref, WXComponent component) { + AddDomInfo addDomInfo = new AddDomInfo(); + addDomInfo.component = component; + mAddDom.put(ref, addDomInfo); + } + + /** + * Destroy current instance, which occurred when {@link WXSDKInstance#destroy()} is called. + */ + public void destroy() { + mDestroy = true; + mRegistry.clear(); + mAddDOMConsumer = null; + mNormalTasks.clear(); + mAddDom.clear(); + mLayoutContext = null; + mWXRenderManager = null; + animations.clear(); + } + + /** + * Rebuild the component tree. + * The purpose of this method is moving fixed components to the root component. + * This method will be called when {@link #batch()} is executed. + * @param root root dom + */ + void rebuildingFixedDomTree(WXDomObject root) { + if (root != null && root.getFixedStyleRefs() != null) { + int size = root.getFixedStyleRefs().size(); + for (int i = 0; i < size; i++) { + String fixedRef = root.getFixedStyleRefs().get(i); + WXDomObject wxDomObject = mRegistry.get(fixedRef); + if (wxDomObject!=null && wxDomObject.parent != null) { + wxDomObject.parent.remove(wxDomObject); + root.add(wxDomObject, -1); + } + } + } + + } + + /** + * Batch the execution of command objects and execute all the command objects created other + * places, e.g. call {@link IWXRenderTask#execute()}. + * First, it will rebuild the dom tree and do pre layout staff. + * Then call {@link com.taobao.weex.dom.flex.CSSNode#calculateLayout(CSSLayoutContext)} to + * start calculate layout. + * Next, call {@link ApplyUpdateConsumer} to get changed dom and creating + * corresponding command object. + * Finally, walk through the queue, e.g. call {@link IWXRenderTask#execute()} for every task + * in the queue. + */ + void batch() { + + if (!mDirty || mDestroy) { + return; + } + + WXDomObject rootDom = mRegistry.get(WXDomObject.ROOT); + layout(rootDom); + } + + void layout(WXDomObject rootDom) { + if (rootDom == null) { + return; + } + long start0 = System.currentTimeMillis(); + + rebuildingFixedDomTree(rootDom); + + rootDom.traverseTree( new WXDomObject.Consumer() { + @Override + public void accept(WXDomObject dom) { + if (!dom.hasUpdate() || mDestroy) { + return; + } + dom.layoutBefore(); + } + }); + long start = System.currentTimeMillis(); + + + rootDom.calculateLayout(mLayoutContext); + + WXSDKInstance instance = WXSDKManager.getInstance().getSDKInstance(mInstanceId); + if (instance != null) { + instance.cssLayoutTime(System.currentTimeMillis() - start); + } + + rootDom.traverseTree( new WXDomObject.Consumer() { + @Override + public void accept(WXDomObject dom) { + if (!dom.hasUpdate() || mDestroy) { + return; + } + dom.layoutAfter(); + } + }); + + start = System.currentTimeMillis(); + rootDom.traverseTree(new ApplyUpdateConsumer()); + + if (instance != null) { + instance.applyUpdateTime(System.currentTimeMillis() - start); + } + + start = System.currentTimeMillis(); + updateDomObj(); + if (instance != null) { + instance.updateDomObjTime(System.currentTimeMillis() - start); + } + parseAnimation(); + + int count = mNormalTasks.size(); + for (int i = 0; i < count && !mDestroy; ++i) { + mWXRenderManager.runOnThread(mInstanceId, mNormalTasks.get(i)); + } + mNormalTasks.clear(); + mAddDom.clear(); + animations.clear(); + mDirty = false; + if (instance != null) { + instance.batchTime(System.currentTimeMillis() - start0); + } + } + + private class ApplyUpdateConsumer implements WXDomObject.Consumer{ + + @Override + public void accept(WXDomObject dom) { + if (dom.hasUpdate()) { + dom.markUpdateSeen(); + if (!dom.isYoung()) { + final WXDomObject copy = dom.clone(); + if (copy == null) { + return; + } + mNormalTasks.add(new IWXRenderTask() { + + @Override + public void execute() { + mWXRenderManager.setLayout(mInstanceId, copy.getRef(), copy); + if(copy.getExtra() != null) { + mWXRenderManager.setExtra(mInstanceId, copy.getRef(), copy.getExtra()); + } + } + + @Override + public String toString() { + return "setLayout & setExtra"; + } + }); + } + } + } + } + + private void parseAnimation() { + for(final Pair<String, Map<String, Object>> pair:animations) { + if (!TextUtils.isEmpty(pair.first)) { + final WXAnimationBean animationBean = createAnimationBean(pair.first, pair.second); + if (animationBean != null) { + mNormalTasks.add(new IWXRenderTask() { + @Override + public void execute() { + mWXRenderManager.startAnimation(mInstanceId, pair.first, animationBean, null); + } + + @Override + public String toString() { + return "startAnimationByStyle"; + } + }); + } + } + } + } + + /** + * Update all components' dom info stored in {@link #mAddDom} + */ + private void updateDomObj() { + long start = System.currentTimeMillis(); + Iterator<Map.Entry<String, AddDomInfo>> iterator = mAddDom.entrySet().iterator(); + Map.Entry<String, AddDomInfo> entry; + AddDomInfo value; + while (iterator.hasNext()) { + entry = iterator.next(); + value = entry.getValue(); + updateDomObj(value.component); + } + if (WXEnvironment.isApkDebugable()) { + WXLogUtils.d("updateDomObj", "time:" + (System.currentTimeMillis() - start)); + } + } + + /** + * Update the specified component's dom and mark it as old. + * @param component the component to be updated + */ + private void updateDomObj(WXComponent component) { + if (component == null) { + return; + } + WXDomObject domObject = mRegistry.get(component.getRef()); + if (domObject == null) { + return; + } + domObject.old(); + component.updateDom(domObject); + if (component instanceof WXVContainer) { + WXVContainer container = (WXVContainer) component; + int count = container.childCount(); + for (int i = 0; i < count; ++i) { + updateDomObj(container.getChild(i)); + } + } + } + + void startAnimation(@NonNull final String ref, @NonNull String animation, + @Nullable final String callBack){ + if (mDestroy) { + return; + } + WXDomObject domObject = mRegistry.get(ref); + if (domObject == null) { + return; + } + final WXAnimationBean animationBean=createAnimationBean(ref, animation); + if(animationBean!=null) { + mNormalTasks.add(new IWXRenderTask() { + @Override + public void execute() { + mWXRenderManager.startAnimation(mInstanceId, ref, animationBean, callBack); + } + + @Override + public String toString() { + return "startAnimationByCall"; + } + }); + mDirty=true; + } + } + + @Override + public void addAnimationForElement(String ref, Map<String, Object> animMap) { + animations.add(new Pair<>(ref,animMap)); + mDirty = true; + } + + @Override + public void postRenderTask(RenderAction statement) { + mNormalTasks.add(new RenderTask(statement, mWXRenderManager.getWXRenderStatement(mInstanceId))); + mDirty = true; + } + + @Override + public void registerDOMObject(String ref, WXDomObject obj) { + mRegistry.put(ref,obj); + } + + @Override + public void unregisterDOMObject(String ref) { + mRegistry.remove(ref); + } + + @Override + public void registerComponent(String ref, WXComponent comp) { + mWXRenderManager.registerComponent(mInstanceId,ref,comp); + } + + @Override + public WXComponent getCompByRef(String ref) { + return mWXRenderManager.getWXComponent(mInstanceId,ref); + } + + @Override + public boolean isDestory() { + return false; + } + + @Override + public WXSDKInstance getInstance() { + return mWXRenderManager.getWXSDKInstance(mInstanceId); + } + + @Override + public WXDomObject getDomByRef(String ref) { + return mRegistry.get(ref); + } + + private WXAnimationBean createAnimationBean(String ref, String animation){ + try { + WXAnimationBean animationBean = + JSONObject.parseObject(animation, WXAnimationBean.class); + if (animationBean != null && animationBean.styles != null) { + WXDomObject domObject=mRegistry.get(ref); + int width=(int)domObject.getLayoutWidth(); + int height=(int)domObject.getLayoutHeight(); + animationBean.styles.init(animationBean.styles.transformOrigin, + animationBean.styles.transform,width,height,WXSDKManager.getInstance().getSDKInstance(mInstanceId).getInstanceViewPortWidth()); + } + return animationBean; + } catch (RuntimeException e) { + WXLogUtils.e("", e); + return null; + } + } + + private WXAnimationBean createAnimationBean(String ref,Map<String, Object> style){ + if (style != null) { + try { + Object transform = style.get(WXDomObject.TRANSFORM); + if (transform instanceof String && !TextUtils.isEmpty((String) transform)) { + String transformOrigin = (String) style.get(WXDomObject.TRANSFORM_ORIGIN); + WXAnimationBean animationBean = new WXAnimationBean(); + WXDomObject domObject = mRegistry.get(ref); + int width = (int) domObject.getLayoutWidth(); + int height = (int) domObject.getLayoutHeight(); + animationBean.styles = new WXAnimationBean.Style(); + animationBean.styles.init(transformOrigin, (String) transform, width, height,WXSDKManager.getInstance().getSDKInstance(mInstanceId).getInstanceViewPortWidth()); + return animationBean; + } + }catch (RuntimeException e){ + WXLogUtils.e("", e); + return null; + } + } + return null; + } + + private static class RemoveElementConsumer implements WXDomObject.Consumer { + final ConcurrentHashMap<String, WXDomObject> mRegistry; + + RemoveElementConsumer(ConcurrentHashMap<String, WXDomObject> r) { + mRegistry = r; + } + + + @Override + public void accept(WXDomObject dom) { + mRegistry.remove(dom.getRef()); + } + } + + + private static class AddDOMConsumer implements WXDomObject.Consumer { + final ConcurrentHashMap<String, WXDomObject> mRegistry; + AddDOMConsumer(ConcurrentHashMap<String, WXDomObject> r){ + mRegistry = r; + } + + @Override + public void accept(WXDomObject dom) { + //register dom + dom.young(); + mRegistry.put(dom.getRef(), dom); + + //find fixed node + WXDomObject rootDom = mRegistry.get(WXDomObject.ROOT); + if (rootDom != null && dom.isFixed()) { + rootDom.add2FixedDomList(dom.getRef()); + } + } + } + + static class AddDomInfo { + + public WXComponent component; + } +} http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/f3390e3c/android/sdk/src/main/java/com/taobao/weex/dom/RenderAction.java ---------------------------------------------------------------------- diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/RenderAction.java b/android/sdk/src/main/java/com/taobao/weex/dom/RenderAction.java new file mode 100644 index 0000000..2d3a9e0 --- /dev/null +++ b/android/sdk/src/main/java/com/taobao/weex/dom/RenderAction.java @@ -0,0 +1,213 @@ +/** + * + * Apache License + * Version 2.0, January 2004 + * http://www.apache.org/licenses/ + * + * TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + * + * 1. Definitions. + * + * "License" shall mean the terms and conditions for use, reproduction, + * and distribution as defined by Sections 1 through 9 of this document. + * + * "Licensor" shall mean the copyright owner or entity authorized by + * the copyright owner that is granting the License. + * + * "Legal Entity" shall mean the union of the acting entity and all + * other entities that control, are controlled by, or are under common + * control with that entity. For the purposes of this definition, + * "control" means (i) the power, direct or indirect, to cause the + * direction or management of such entity, whether by contract or + * otherwise, or (ii) ownership of fifty percent (50%) or more of the + * outstanding shares, or (iii) beneficial ownership of such entity. + * + * "You" (or "Your") shall mean an individual or Legal Entity + * exercising permissions granted by this License. + * + * "Source" form shall mean the preferred form for making modifications, + * including but not limited to software source code, documentation + * source, and configuration files. + * + * "Object" form shall mean any form resulting from mechanical + * transformation or translation of a Source form, including but + * not limited to compiled object code, generated documentation, + * and conversions to other media types. + * + * "Work" shall mean the work of authorship, whether in Source or + * Object form, made available under the License, as indicated by a + * copyright notice that is included in or attached to the work + * (an example is provided in the Appendix below). + * + * "Derivative Works" shall mean any work, whether in Source or Object + * form, that is based on (or derived from) the Work and for which the + * editorial revisions, annotations, elaborations, or other modifications + * represent, as a whole, an original work of authorship. For the purposes + * of this License, Derivative Works shall not include works that remain + * separable from, or merely link (or bind by name) to the interfaces of, + * the Work and Derivative Works thereof. + * + * "Contribution" shall mean any work of authorship, including + * the original version of the Work and any modifications or additions + * to that Work or Derivative Works thereof, that is intentionally + * submitted to Licensor for inclusion in the Work by the copyright owner + * or by an individual or Legal Entity authorized to submit on behalf of + * the copyright owner. For the purposes of this definition, "submitted" + * means any form of electronic, verbal, or written communication sent + * to the Licensor or its representatives, including but not limited to + * communication on electronic mailing lists, source code control systems, + * and issue tracking systems that are managed by, or on behalf of, the + * Licensor for the purpose of discussing and improving the Work, but + * excluding communication that is conspicuously marked or otherwise + * designated in writing by the copyright owner as "Not a Contribution." + * + * "Contributor" shall mean Licensor and any individual or Legal Entity + * on behalf of whom a Contribution has been received by Licensor and + * subsequently incorporated within the Work. + * + * 2. Grant of Copyright License. Subject to the terms and conditions of + * this License, each Contributor hereby grants to You a perpetual, + * worldwide, non-exclusive, no-charge, royalty-free, irrevocable + * copyright license to reproduce, prepare Derivative Works of, + * publicly display, publicly perform, sublicense, and distribute the + * Work and such Derivative Works in Source or Object form. + * + * 3. Grant of Patent License. Subject to the terms and conditions of + * this License, each Contributor hereby grants to You a perpetual, + * worldwide, non-exclusive, no-charge, royalty-free, irrevocable + * (except as stated in this section) patent license to make, have made, + * use, offer to sell, sell, import, and otherwise transfer the Work, + * where such license applies only to those patent claims licensable + * by such Contributor that are necessarily infringed by their + * Contribution(s) alone or by combination of their Contribution(s) + * with the Work to which such Contribution(s) was submitted. If You + * institute patent litigation against any entity (including a + * cross-claim or counterclaim in a lawsuit) alleging that the Work + * or a Contribution incorporated within the Work constitutes direct + * or contributory patent infringement, then any patent licenses + * granted to You under this License for that Work shall terminate + * as of the date such litigation is filed. + * + * 4. Redistribution. You may reproduce and distribute copies of the + * Work or Derivative Works thereof in any medium, with or without + * modifications, and in Source or Object form, provided that You + * meet the following conditions: + * + * (a) You must give any other recipients of the Work or + * Derivative Works a copy of this License; and + * + * (b) You must cause any modified files to carry prominent notices + * stating that You changed the files; and + * + * (c) You must retain, in the Source form of any Derivative Works + * that You distribute, all copyright, patent, trademark, and + * attribution notices from the Source form of the Work, + * excluding those notices that do not pertain to any part of + * the Derivative Works; and + * + * (d) If the Work includes a "NOTICE" text file as part of its + * distribution, then any Derivative Works that You distribute must + * include a readable copy of the attribution notices contained + * within such NOTICE file, excluding those notices that do not + * pertain to any part of the Derivative Works, in at least one + * of the following places: within a NOTICE text file distributed + * as part of the Derivative Works; within the Source form or + * documentation, if provided along with the Derivative Works; or, + * within a display generated by the Derivative Works, if and + * wherever such third-party notices normally appear. The contents + * of the NOTICE file are for informational purposes only and + * do not modify the License. You may add Your own attribution + * notices within Derivative Works that You distribute, alongside + * or as an addendum to the NOTICE text from the Work, provided + * that such additional attribution notices cannot be construed + * as modifying the License. + * + * You may add Your own copyright statement to Your modifications and + * may provide additional or different license terms and conditions + * for use, reproduction, or distribution of Your modifications, or + * for any such Derivative Works as a whole, provided Your use, + * reproduction, and distribution of the Work otherwise complies with + * the conditions stated in this License. + * + * 5. Submission of Contributions. Unless You explicitly state otherwise, + * any Contribution intentionally submitted for inclusion in the Work + * by You to the Licensor shall be under the terms and conditions of + * this License, without any additional terms or conditions. + * Notwithstanding the above, nothing herein shall supersede or modify + * the terms of any separate license agreement you may have executed + * with Licensor regarding such Contributions. + * + * 6. Trademarks. This License does not grant permission to use the trade + * names, trademarks, service marks, or product names of the Licensor, + * except as required for reasonable and customary use in describing the + * origin of the Work and reproducing the content of the NOTICE file. + * + * 7. Disclaimer of Warranty. Unless required by applicable law or + * agreed to in writing, Licensor provides the Work (and each + * Contributor provides its Contributions) on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + * implied, including, without limitation, any warranties or conditions + * of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + * PARTICULAR PURPOSE. You are solely responsible for determining the + * appropriateness of using or redistributing the Work and assume any + * risks associated with Your exercise of permissions under this License. + * + * 8. Limitation of Liability. In no event and under no legal theory, + * whether in tort (including negligence), contract, or otherwise, + * unless required by applicable law (such as deliberate and grossly + * negligent acts) or agreed to in writing, shall any Contributor be + * liable to You for damages, including any direct, indirect, special, + * incidental, or consequential damages of any character arising as a + * result of this License or out of the use or inability to use the + * Work (including but not limited to damages for loss of goodwill, + * work stoppage, computer failure or malfunction, or any and all + * other commercial damages or losses), even if such Contributor + * has been advised of the possibility of such damages. + * + * 9. Accepting Warranty or Additional Liability. While redistributing + * the Work or Derivative Works thereof, You may choose to offer, + * and charge a fee for, acceptance of support, warranty, indemnity, + * or other liability obligations and/or rights consistent with this + * License. However, in accepting such obligations, You may act only + * on Your own behalf and on Your sole responsibility, not on behalf + * of any other Contributor, and only if You agree to indemnify, + * defend, and hold each Contributor harmless for any liability + * incurred by, or claims asserted against, such Contributor by reason + * of your accepting any such warranty or additional liability. + * + * END OF TERMS AND CONDITIONS + * + * APPENDIX: How to apply the Apache License to your work. + * + * To apply the Apache License to your work, attach the following + * boilerplate notice, with the fields enclosed by brackets "[]" + * replaced with your own identifying information. (Don't include + * the brackets!) The text should be enclosed in the appropriate + * comment syntax for the file format. We also recommend that a + * file or class name and description of purpose be included on the + * same "printed page" as the copyright notice for easier + * identification within third-party archives. + * + * Copyright 2016 Alibaba Group + * + * Licensed 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.dom; + +/** + * Created by sospartan on 23/02/2017. + */ + +public interface RenderAction { + void executeRender(RenderActionContext context); +}
