From bf391c6d9f4511b359d02b6de7f5d2768dc3cb10 Mon Sep 17 00:00:00 2001 From: misakuo Date: Fri, 12 Jan 2018 15:32:40 +0800 Subject: [PATCH 1/6] * [android] new visual sense for playground --- .../java/com/alibaba/weex/WXApplication.java | 4 +- .../alibaba/weex/extend/component/WXMask.java | 224 ++++++++++++++-- .../extend/component/dom/WXMaskDomObject.java | 251 ++++++++++++++++-- .../weex/extend/module/WXEventModule.java | 7 + .../weex/extend/module/WXTitleBar.java | 109 ++++++++ .../app/src/main/res/values-v21/styles.xml | 4 + .../app/src/main/res/values/colors.xml | 4 +- .../app/src/main/res/values/styles.xml | 4 +- .../java/com/taobao/weex/WXSDKEngine.java | 4 +- ...WXLocalModule.java => WXLocaleModule.java} | 2 +- .../taobao/weex/ui/module/WXScriptModule.java | 38 +++ 11 files changed, 604 insertions(+), 47 deletions(-) create mode 100644 android/playground/app/src/main/java/com/alibaba/weex/extend/module/WXTitleBar.java rename android/sdk/src/main/java/com/taobao/weex/ui/module/{WXLocalModule.java => WXLocaleModule.java} (98%) create mode 100644 android/sdk/src/main/java/com/taobao/weex/ui/module/WXScriptModule.java diff --git a/android/playground/app/src/main/java/com/alibaba/weex/WXApplication.java b/android/playground/app/src/main/java/com/alibaba/weex/WXApplication.java index d9c6b644f3..adfc9d4d61 100644 --- a/android/playground/app/src/main/java/com/alibaba/weex/WXApplication.java +++ b/android/playground/app/src/main/java/com/alibaba/weex/WXApplication.java @@ -20,7 +20,6 @@ import android.app.Activity; import android.app.Application; -import android.graphics.Typeface; import android.os.Bundle; import com.alibaba.weex.commons.adapter.DefaultWebSocketAdapterFactory; @@ -38,6 +37,7 @@ import com.alibaba.weex.extend.module.RenderModule; import com.alibaba.weex.extend.module.SyncTestModule; import com.alibaba.weex.extend.module.WXEventModule; +import com.alibaba.weex.extend.module.WXTitleBar; import com.facebook.drawee.backends.pipeline.Fresco; import com.taobao.weex.InitConfig; import com.taobao.weex.WXEnvironment; @@ -90,6 +90,8 @@ public void onCreate() { WXSDKEngine.registerModule("myModule", MyModule.class); WXSDKEngine.registerModule("geolocation", GeolocationModule.class); + + WXSDKEngine.registerModule("titleBar", WXTitleBar.class); /** * override default image tag * WXSDKEngine.registerComponent("image", FrescoImageComponent.class); diff --git a/android/playground/app/src/main/java/com/alibaba/weex/extend/component/WXMask.java b/android/playground/app/src/main/java/com/alibaba/weex/extend/component/WXMask.java index 1021041b0e..62bb750923 100644 --- a/android/playground/app/src/main/java/com/alibaba/weex/extend/component/WXMask.java +++ b/android/playground/app/src/main/java/com/alibaba/weex/extend/component/WXMask.java @@ -1,20 +1,112 @@ -/* - * 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. +/** + * 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.alibaba.weex.extend.component; @@ -22,17 +114,26 @@ import android.content.Context; import android.graphics.Color; import android.graphics.drawable.ColorDrawable; +import android.os.Build; import android.support.annotation.NonNull; import android.view.Gravity; import android.view.View; +import android.view.ViewGroup; import android.view.WindowManager; +import android.widget.FrameLayout; import android.widget.PopupWindow; import com.alibaba.weex.extend.view.WXMaskView; import com.taobao.weex.WXSDKInstance; +import com.taobao.weex.dom.ImmutableDomObject; import com.taobao.weex.dom.WXDomObject; +import com.taobao.weex.dom.WXStyle; +import com.taobao.weex.dom.flex.Spacing; import com.taobao.weex.ui.component.WXVContainer; +import java.util.HashMap; +import java.util.Map; + /** * Created by lixinke on 2016/12/26. */ @@ -52,11 +153,41 @@ protected View initComponentHostView(@NonNull Context context) { mContainerView = new WXMaskView(context); mPopupWindow = new PopupWindow(context); mPopupWindow.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); - mPopupWindow.setClippingEnabled(false); + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1) { + mPopupWindow.setAttachedInDecor(true); + } + + //setClippingEnabled(false) will cause INPUT_ADJUST_PAN invalid. + //mPopupWindow.setClippingEnabled(false); + mPopupWindow.setContentView(mContainerView); mPopupWindow.setWidth(WindowManager.LayoutParams.WRAP_CONTENT); mPopupWindow.setHeight(WindowManager.LayoutParams.WRAP_CONTENT); - mPopupWindow.showAtLocation(((Activity) context).getWindow().getDecorView(), Gravity.TOP, (int) getDomObject().getLayoutX(), (int) getDomObject().getLayoutY()); + mPopupWindow.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN | + WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); + mPopupWindow.setFocusable(true); + + mPopupWindow.setOnDismissListener(new PopupWindow.OnDismissListener() { + @Override + public void onDismiss() { + fireVisibleChangedEvent(false); + } + }); + + int y = 0; + int statusBarHeight = 0; + int resourceId = context.getResources().getIdentifier("status_bar_height", "dimen", "android"); + if (resourceId > 0) { + statusBarHeight = context.getResources().getDimensionPixelSize(resourceId); + y = statusBarHeight; + } + + mPopupWindow.showAtLocation(((Activity) context).getWindow().getDecorView(), + Gravity.TOP | Gravity.START, + 0, + y); + fireVisibleChangedEvent(true); return mContainerView; } @@ -72,4 +203,59 @@ public void removeVirtualComponent() { mPopupWindow.dismiss(); } } + + private void fireVisibleChangedEvent(boolean visible) { + Map event = new HashMap<>(1); + event.put("visible", visible); + fireEvent("visiblechanged", event); + } + + @Override + protected void setHostLayoutParams(View host, int width, int height, int left, int right, int top, int bottom) { + ImmutableDomObject domObject = getDomObject(); + left = get(LEFT, domObject); + right = get(RIGHT, domObject); + top = get(TOP, domObject); + bottom = get(BOTTOM, domObject); + FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); + params.setMargins(left, top, right, bottom); + getHostView().setLayoutParams(params); + } + + private static final int LEFT = 0; + private static final int RIGHT = 1; + private static final int TOP = 2; + private static final int BOTTOM = 3; + + private int get(int type, ImmutableDomObject domObject) { + try { + Spacing margin = domObject.getMargin(); + WXStyle style = domObject.getStyles(); + switch (type) { + case LEFT: + return add(style.getLeft(), margin.get(Spacing.LEFT)); + case RIGHT: + return add(style.getRight(), margin.get(Spacing.RIGHT)); + case TOP: + return add(style.getTop(), margin.get(Spacing.TOP)); + case BOTTOM: + return add(style.getBottom(), margin.get(Spacing.BOTTOM)); + } + } catch (Throwable t) { + //ignore + } + return 0; + } + + private int add(float a, float b) { + if (Float.isNaN(a)) { + a = 0f; + } + + if (Float.isNaN(b)) { + b = 0f; + } + + return (int) (a + b); + } } diff --git a/android/playground/app/src/main/java/com/alibaba/weex/extend/component/dom/WXMaskDomObject.java b/android/playground/app/src/main/java/com/alibaba/weex/extend/component/dom/WXMaskDomObject.java index d476302c8c..1de289b02d 100644 --- a/android/playground/app/src/main/java/com/alibaba/weex/extend/component/dom/WXMaskDomObject.java +++ b/android/playground/app/src/main/java/com/alibaba/weex/extend/component/dom/WXMaskDomObject.java @@ -1,23 +1,212 @@ -/* - * 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. +/** + * 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.alibaba.weex.extend.component.dom; +import android.app.Application; +import android.content.res.Resources; + +import com.taobao.weex.WXEnvironment; import com.taobao.weex.common.Constants; import com.taobao.weex.dom.WXDomObject; import com.taobao.weex.utils.WXViewUtils; @@ -33,12 +222,32 @@ public class WXMaskDomObject extends WXDomObject { @Override protected Map getDefaultStyle() { - Map styles=new HashMap<>(); + if (getDomContext() == null || getDomContext().getUIContext() == null) { + return super.getDefaultStyle(); + } + + int height = WXViewUtils.getScreenHeight(getDomContext().getUIContext()); + int width = WXViewUtils.getScreenWidth(getDomContext().getUIContext()); + Resources resources = getDomContext().getUIContext().getResources(); + if (resources != null) { + width = resources.getDisplayMetrics().widthPixels; + height = resources.getDisplayMetrics().heightPixels; + } + + if (WXEnvironment.getApplication() != null) { + Application context = WXEnvironment.getApplication(); + int statusBarHeight = 0; + int resourceId = context.getResources().getIdentifier("status_bar_height", "dimen", "android"); + if (resourceId > 0) { + statusBarHeight = context.getResources().getDimensionPixelSize(resourceId); + height -= statusBarHeight; + } + } + + Map styles = new HashMap<>(); styles.put(Constants.Name.POSITION, "absolute"); - int width=WXViewUtils.getScreenWidth(getDomContext().getUIContext()); styles.put(Constants.Name.WIDTH, String.valueOf(WXViewUtils.getWebPxByWidth(width, getViewPortWidth()))); - int height=WXViewUtils.getScreenHeight(getDomContext().getUIContext()); - styles.put(Constants.Name.HEIGHT, String.valueOf(WXViewUtils.getWebPxByWidth(height,getViewPortWidth()))); + styles.put(Constants.Name.HEIGHT, String.valueOf(WXViewUtils.getWebPxByWidth(height, getViewPortWidth()))); styles.put(Constants.Name.TOP, "0"); return styles; } diff --git a/android/playground/app/src/main/java/com/alibaba/weex/extend/module/WXEventModule.java b/android/playground/app/src/main/java/com/alibaba/weex/extend/module/WXEventModule.java index e417f0f191..189b09330c 100644 --- a/android/playground/app/src/main/java/com/alibaba/weex/extend/module/WXEventModule.java +++ b/android/playground/app/src/main/java/com/alibaba/weex/extend/module/WXEventModule.java @@ -23,6 +23,7 @@ import android.text.TextUtils; import com.alibaba.weex.WXPageActivity; +import com.google.zxing.client.android.CaptureActivity; import com.taobao.weex.annotation.JSMethod; import com.taobao.weex.bridge.JSCallback; import com.taobao.weex.common.WXModule; @@ -44,6 +45,12 @@ public void openURL(String url) { } String scheme = Uri.parse(url).getScheme(); StringBuilder builder = new StringBuilder(); + + if ("weex://go/scan".equals(url)) { + mWXSDKInstance.getContext().startActivity(new Intent(mWXSDKInstance.getContext(), CaptureActivity.class)); + return; + } + if (TextUtils.equals("http", scheme) || TextUtils.equals("https", scheme) || TextUtils.equals("file", scheme)) { builder.append(url); } else { diff --git a/android/playground/app/src/main/java/com/alibaba/weex/extend/module/WXTitleBar.java b/android/playground/app/src/main/java/com/alibaba/weex/extend/module/WXTitleBar.java new file mode 100644 index 0000000000..733020c10c --- /dev/null +++ b/android/playground/app/src/main/java/com/alibaba/weex/extend/module/WXTitleBar.java @@ -0,0 +1,109 @@ +package com.alibaba.weex.extend.module; + +import android.app.Activity; +import android.graphics.drawable.ColorDrawable; +import android.graphics.drawable.Drawable; +import android.support.v4.graphics.drawable.DrawableCompat; +import android.support.v7.app.ActionBar; +import android.support.v7.app.AppCompatActivity; +import android.support.v7.widget.Toolbar; +import android.view.Menu; +import android.view.MenuItem; + +import com.alibaba.fastjson.JSONObject; +import com.alibaba.weex.R; +import com.taobao.weex.annotation.JSMethod; +import com.taobao.weex.common.WXModule; +import com.taobao.weex.utils.WXResourceUtils; + + +/** + * Created by moxun on 12/01/2018. + */ + +public class WXTitleBar extends WXModule { + @JSMethod + public void setTitle(String title) { + ActionBar actionBar = getActionBar(); + if (actionBar != null) { + actionBar.setTitle(String.valueOf(title)); + } + } + + @JSMethod + public void setStyle(JSONObject object) { + String bgColor = object.getString("backgroundColor"); + String color = object.getString("foregroundColor"); + ActionBar actionBar = getActionBar(); + if (actionBar != null) { + if (bgColor != null) { + int c = WXResourceUtils.getColor(bgColor); + actionBar.setBackgroundDrawable(new ColorDrawable(c)); + } + + if (color != null) { + int c = WXResourceUtils.getColor(color); + + Toolbar toolbar = (Toolbar) ((Activity) mWXSDKInstance.getContext()).findViewById(R.id.toolbar); + if (toolbar != null) { + toolbar.setTitleTextColor(c); + toolbar.setSubtitleTextColor(c); + + Drawable upNavigation = toolbar.getNavigationIcon(); + if (null != upNavigation) { + upNavigation = DrawableCompat.wrap(upNavigation); + upNavigation = upNavigation.mutate(); + DrawableCompat.setTint(upNavigation, c); + toolbar.setNavigationIcon(upNavigation); + } + + Drawable overflowIcon = toolbar.getOverflowIcon(); + if (null != overflowIcon) { + overflowIcon = DrawableCompat.wrap(overflowIcon); + overflowIcon = overflowIcon.mutate(); + DrawableCompat.setTint(overflowIcon, c); + toolbar.setOverflowIcon(overflowIcon); + } + + Menu menu = toolbar.getMenu(); + if (menu != null && menu.size() > 0) { + for (int i = 0; i < menu.size(); i++) { + MenuItem item = menu.getItem(i); + if (item != null && item.getIcon() != null) { + Drawable drawable = item.getIcon(); + if (null != drawable) { + drawable = DrawableCompat.wrap(drawable); + drawable = drawable.mutate(); + DrawableCompat.setTint(drawable, c); + item.setIcon(drawable); + } + } + } + ((Activity) mWXSDKInstance.getContext()).invalidateOptionsMenu(); + } + } + } + } + } + + @JSMethod + public void showTitleBar(String isShow) { + ActionBar actionBar = getActionBar(); + if (actionBar != null) { + if ("true".equals(isShow) && !actionBar.isShowing()) { + actionBar.show(); + } + + if ("false".equals(isShow) && actionBar.isShowing()) { + actionBar.hide(); + } + } + } + + private ActionBar getActionBar() { + if (mWXSDKInstance.getContext() instanceof AppCompatActivity) { + return ((AppCompatActivity) mWXSDKInstance.getContext()).getSupportActionBar(); + } + return null; + } +} diff --git a/android/playground/app/src/main/res/values-v21/styles.xml b/android/playground/app/src/main/res/values-v21/styles.xml index f98bd6514f..9bd9d5933e 100755 --- a/android/playground/app/src/main/res/values-v21/styles.xml +++ b/android/playground/app/src/main/res/values-v21/styles.xml @@ -24,4 +24,8 @@ under the License. true @android:color/transparent + + diff --git a/android/playground/app/src/main/res/values/colors.xml b/android/playground/app/src/main/res/values/colors.xml index ad29c2231d..c115dc1bd4 100755 --- a/android/playground/app/src/main/res/values/colors.xml +++ b/android/playground/app/src/main/res/values/colors.xml @@ -18,8 +18,8 @@ specific language governing permissions and limitations under the License. --> - #3F51B5 - #303F9F + #00B4FF + #00B4FF #FF4081 #66000000 diff --git a/android/playground/app/src/main/res/values/styles.xml b/android/playground/app/src/main/res/values/styles.xml index f0407f1a30..52fd8ac943 100755 --- a/android/playground/app/src/main/res/values/styles.xml +++ b/android/playground/app/src/main/res/values/styles.xml @@ -31,7 +31,9 @@ under the License. true -