From d98c18fe9cb7dc9f81512d58ea0c5e5f6227e50e Mon Sep 17 00:00:00 2001 From: mamingshuai Date: Wed, 2 Jun 2021 00:03:15 +0800 Subject: [PATCH] update OpenHarmony 2.0 Canary --- .gitattributes | 0 LICENSE | 176 +++++++++++++++++ README.en.md | 36 ---- README.md | 56 +++--- README_zh.md | 43 ++++ build.gradle | 42 ++++ entry/.gitignore | 1 + entry/build.gradle | 11 ++ entry/package.json | 1 + entry/src/main/config.json | 60 ++++++ entry/src/main/js/default/app.js | 24 +++ .../default/center/battery/batteryStatus.js | 109 +++++++++++ .../center/statuscenter/StatusCenter.js | 58 ++++++ .../statuscenter/manager/IconManager.js | 26 +++ .../statuscenter/manager/StatusImage.js | 25 +++ .../common/image_hdpi/ic_status_battery.png | Bin 0 -> 300 bytes .../common/image_hdpi/ic_status_bluetooth.png | Bin 0 -> 358 bytes .../common/image_hdpi/ic_status_signal.png | Bin 0 -> 333 bytes .../common/image_hdpi/ic_status_wifi.png | Bin 0 -> 577 bytes .../common/image_mdpi/ic_status_battery.png | Bin 0 -> 233 bytes .../common/image_mdpi/ic_status_bluetooth.png | Bin 0 -> 249 bytes .../common/image_mdpi/ic_status_signal.png | Bin 0 -> 243 bytes .../common/image_mdpi/ic_status_wifi.png | Bin 0 -> 353 bytes .../common/image_xhdpi/ic_status_battery.png | Bin 0 -> 337 bytes .../image_xhdpi/ic_status_bluetooth.png | Bin 0 -> 443 bytes .../common/image_xhdpi/ic_status_signal.png | Bin 0 -> 299 bytes .../common/image_xhdpi/ic_status_wifi.png | Bin 0 -> 756 bytes .../common/image_xxhdpi/ic_status_battery.png | Bin 0 -> 579 bytes .../image_xxhdpi/ic_status_bluetooth.png | Bin 0 -> 617 bytes .../common/image_xxhdpi/ic_status_signal.png | Bin 0 -> 569 bytes .../common/image_xxhdpi/ic_status_wifi.png | Bin 0 -> 1135 bytes .../image_xxxhdpi/ic_status_battery.png | Bin 0 -> 687 bytes .../image_xxxhdpi/ic_status_bluetooth.png | Bin 0 -> 753 bytes .../common/image_xxxhdpi/ic_status_signal.png | Bin 0 -> 470 bytes .../common/image_xxxhdpi/ic_status_wifi.png | Bin 0 -> 1483 bytes entry/src/main/js/default/i18n/en-US.json | 4 + entry/src/main/js/default/i18n/zh-CN.json | 4 + .../src/main/js/default/pages/index/index.css | 20 ++ .../src/main/js/default/pages/index/index.hml | 23 +++ .../src/main/js/default/pages/index/index.js | 33 ++++ .../default/pages/statusbar/clock/clock.css | 24 +++ .../default/pages/statusbar/clock/clock.hml | 20 ++ .../js/default/pages/statusbar/clock/clock.js | 35 ++++ .../js/default/pages/statusbar/statusBar.css | 67 +++++++ .../js/default/pages/statusbar/statusBar.hml | 32 +++ .../js/default/pages/statusbar/statusBar.js | 43 ++++ .../statusbar/statusIcon/statusIconList.css | 23 +++ .../statusbar/statusIcon/statusIconList.hml | 20 ++ .../statusbar/statusIcon/statusIconList.js | 31 +++ .../main/resources/base/element/string.json | 12 ++ entry/src/main/resources/base/media/icon.png | Bin 0 -> 6790 bytes figures/en-us_image_0000001103686480.png | Bin 0 -> 17775 bytes figures/zh-cn_image_0000001103686480.png | Bin 0 -> 15540 bytes gradle.properties | 10 + gradlew | 183 ++++++++++++++++++ gradlew.bat | 103 ++++++++++ navigationBar/.gitignore | 1 + navigationBar/build.gradle | 13 ++ navigationBar/package.json | 1 + navigationBar/src/main/config.json | 51 +++++ navigationBar/src/main/js/default/app.js | 23 +++ .../common/image_hdpi/ic_navigation_back.png | Bin 0 -> 599 bytes .../common/image_hdpi/ic_navigation_home.png | Bin 0 -> 640 bytes .../image_hdpi/ic_navigation_recent.png | Bin 0 -> 345 bytes .../common/image_mdpi/ic_navigation_back.png | Bin 0 -> 409 bytes .../common/image_mdpi/ic_navigation_home.png | Bin 0 -> 420 bytes .../image_mdpi/ic_navigation_recent.png | Bin 0 -> 221 bytes .../common/image_xhdpi/ic_navigation_back.png | Bin 0 -> 818 bytes .../common/image_xhdpi/ic_navigation_home.png | Bin 0 -> 955 bytes .../image_xhdpi/ic_navigation_recent.png | Bin 0 -> 411 bytes .../image_xxhdpi/ic_navigation_back.png | Bin 0 -> 1292 bytes .../image_xxhdpi/ic_navigation_home.png | Bin 0 -> 1438 bytes .../image_xxhdpi/ic_navigation_recent.png | Bin 0 -> 599 bytes .../image_xxxhdpi/ic_navigation_back.png | Bin 0 -> 1743 bytes .../image_xxxhdpi/ic_navigation_home.png | Bin 0 -> 2022 bytes .../image_xxxhdpi/ic_navigation_recent.png | Bin 0 -> 733 bytes .../src/main/js/default/i18n/en-US.json | 4 + .../src/main/js/default/i18n/zh-CN.json | 4 + .../main/js/default/pages/backKey/backKey.css | 26 +++ .../main/js/default/pages/backKey/backKey.hml | 18 ++ .../main/js/default/pages/backKey/backKey.js | 42 ++++ .../main/js/default/pages/homeKey/homeKey.css | 26 +++ .../main/js/default/pages/homeKey/homeKey.hml | 18 ++ .../main/js/default/pages/homeKey/homeKey.js | 52 +++++ .../src/main/js/default/pages/index/index.css | 27 +++ .../src/main/js/default/pages/index/index.hml | 26 +++ .../src/main/js/default/pages/index/index.js | 26 +++ .../js/default/pages/recentKey/recentKey.css | 26 +++ .../js/default/pages/recentKey/recentKey.hml | 18 ++ .../js/default/pages/recentKey/recentKey.js | 53 +++++ .../main/resources/base/element/string.json | 12 ++ .../src/main/resources/base/media/icon.png | Bin 0 -> 6790 bytes settings.gradle | 15 ++ signature/systemui.p7b | Bin 0 -> 3421 bytes 94 files changed, 1776 insertions(+), 61 deletions(-) create mode 100644 .gitattributes create mode 100755 LICENSE delete mode 100644 README.en.md mode change 100644 => 100755 README.md create mode 100755 README_zh.md create mode 100755 build.gradle create mode 100755 entry/.gitignore create mode 100755 entry/build.gradle create mode 100755 entry/package.json create mode 100755 entry/src/main/config.json create mode 100644 entry/src/main/js/default/app.js create mode 100755 entry/src/main/js/default/center/battery/batteryStatus.js create mode 100755 entry/src/main/js/default/center/statuscenter/StatusCenter.js create mode 100755 entry/src/main/js/default/center/statuscenter/manager/IconManager.js create mode 100755 entry/src/main/js/default/center/statuscenter/manager/StatusImage.js create mode 100644 entry/src/main/js/default/common/image_hdpi/ic_status_battery.png create mode 100644 entry/src/main/js/default/common/image_hdpi/ic_status_bluetooth.png create mode 100644 entry/src/main/js/default/common/image_hdpi/ic_status_signal.png create mode 100644 entry/src/main/js/default/common/image_hdpi/ic_status_wifi.png create mode 100644 entry/src/main/js/default/common/image_mdpi/ic_status_battery.png create mode 100644 entry/src/main/js/default/common/image_mdpi/ic_status_bluetooth.png create mode 100644 entry/src/main/js/default/common/image_mdpi/ic_status_signal.png create mode 100644 entry/src/main/js/default/common/image_mdpi/ic_status_wifi.png create mode 100644 entry/src/main/js/default/common/image_xhdpi/ic_status_battery.png create mode 100644 entry/src/main/js/default/common/image_xhdpi/ic_status_bluetooth.png create mode 100644 entry/src/main/js/default/common/image_xhdpi/ic_status_signal.png create mode 100644 entry/src/main/js/default/common/image_xhdpi/ic_status_wifi.png create mode 100644 entry/src/main/js/default/common/image_xxhdpi/ic_status_battery.png create mode 100644 entry/src/main/js/default/common/image_xxhdpi/ic_status_bluetooth.png create mode 100644 entry/src/main/js/default/common/image_xxhdpi/ic_status_signal.png create mode 100644 entry/src/main/js/default/common/image_xxhdpi/ic_status_wifi.png create mode 100644 entry/src/main/js/default/common/image_xxxhdpi/ic_status_battery.png create mode 100644 entry/src/main/js/default/common/image_xxxhdpi/ic_status_bluetooth.png create mode 100644 entry/src/main/js/default/common/image_xxxhdpi/ic_status_signal.png create mode 100644 entry/src/main/js/default/common/image_xxxhdpi/ic_status_wifi.png create mode 100755 entry/src/main/js/default/i18n/en-US.json create mode 100755 entry/src/main/js/default/i18n/zh-CN.json create mode 100755 entry/src/main/js/default/pages/index/index.css create mode 100755 entry/src/main/js/default/pages/index/index.hml create mode 100755 entry/src/main/js/default/pages/index/index.js create mode 100644 entry/src/main/js/default/pages/statusbar/clock/clock.css create mode 100755 entry/src/main/js/default/pages/statusbar/clock/clock.hml create mode 100755 entry/src/main/js/default/pages/statusbar/clock/clock.js create mode 100755 entry/src/main/js/default/pages/statusbar/statusBar.css create mode 100755 entry/src/main/js/default/pages/statusbar/statusBar.hml create mode 100755 entry/src/main/js/default/pages/statusbar/statusBar.js create mode 100644 entry/src/main/js/default/pages/statusbar/statusIcon/statusIconList.css create mode 100644 entry/src/main/js/default/pages/statusbar/statusIcon/statusIconList.hml create mode 100755 entry/src/main/js/default/pages/statusbar/statusIcon/statusIconList.js create mode 100644 entry/src/main/resources/base/element/string.json create mode 100644 entry/src/main/resources/base/media/icon.png create mode 100755 figures/en-us_image_0000001103686480.png create mode 100755 figures/zh-cn_image_0000001103686480.png create mode 100755 gradle.properties create mode 100755 gradlew create mode 100755 gradlew.bat create mode 100755 navigationBar/.gitignore create mode 100755 navigationBar/build.gradle create mode 100755 navigationBar/package.json create mode 100755 navigationBar/src/main/config.json create mode 100644 navigationBar/src/main/js/default/app.js create mode 100644 navigationBar/src/main/js/default/common/image_hdpi/ic_navigation_back.png create mode 100644 navigationBar/src/main/js/default/common/image_hdpi/ic_navigation_home.png create mode 100644 navigationBar/src/main/js/default/common/image_hdpi/ic_navigation_recent.png create mode 100644 navigationBar/src/main/js/default/common/image_mdpi/ic_navigation_back.png create mode 100644 navigationBar/src/main/js/default/common/image_mdpi/ic_navigation_home.png create mode 100644 navigationBar/src/main/js/default/common/image_mdpi/ic_navigation_recent.png create mode 100644 navigationBar/src/main/js/default/common/image_xhdpi/ic_navigation_back.png create mode 100644 navigationBar/src/main/js/default/common/image_xhdpi/ic_navigation_home.png create mode 100644 navigationBar/src/main/js/default/common/image_xhdpi/ic_navigation_recent.png create mode 100644 navigationBar/src/main/js/default/common/image_xxhdpi/ic_navigation_back.png create mode 100644 navigationBar/src/main/js/default/common/image_xxhdpi/ic_navigation_home.png create mode 100644 navigationBar/src/main/js/default/common/image_xxhdpi/ic_navigation_recent.png create mode 100644 navigationBar/src/main/js/default/common/image_xxxhdpi/ic_navigation_back.png create mode 100644 navigationBar/src/main/js/default/common/image_xxxhdpi/ic_navigation_home.png create mode 100644 navigationBar/src/main/js/default/common/image_xxxhdpi/ic_navigation_recent.png create mode 100755 navigationBar/src/main/js/default/i18n/en-US.json create mode 100755 navigationBar/src/main/js/default/i18n/zh-CN.json create mode 100755 navigationBar/src/main/js/default/pages/backKey/backKey.css create mode 100644 navigationBar/src/main/js/default/pages/backKey/backKey.hml create mode 100755 navigationBar/src/main/js/default/pages/backKey/backKey.js create mode 100755 navigationBar/src/main/js/default/pages/homeKey/homeKey.css create mode 100644 navigationBar/src/main/js/default/pages/homeKey/homeKey.hml create mode 100755 navigationBar/src/main/js/default/pages/homeKey/homeKey.js create mode 100644 navigationBar/src/main/js/default/pages/index/index.css create mode 100755 navigationBar/src/main/js/default/pages/index/index.hml create mode 100755 navigationBar/src/main/js/default/pages/index/index.js create mode 100755 navigationBar/src/main/js/default/pages/recentKey/recentKey.css create mode 100644 navigationBar/src/main/js/default/pages/recentKey/recentKey.hml create mode 100755 navigationBar/src/main/js/default/pages/recentKey/recentKey.js create mode 100644 navigationBar/src/main/resources/base/element/string.json create mode 100644 navigationBar/src/main/resources/base/media/icon.png create mode 100755 settings.gradle create mode 100644 signature/systemui.p7b diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 00000000..e69de29b diff --git a/LICENSE b/LICENSE new file mode 100755 index 00000000..d0381d6d --- /dev/null +++ b/LICENSE @@ -0,0 +1,176 @@ +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 diff --git a/README.en.md b/README.en.md deleted file mode 100644 index fda4e3cf..00000000 --- a/README.en.md +++ /dev/null @@ -1,36 +0,0 @@ -# applications_systemui - -#### Description -SystemUI system app | 系统界面应用 - -#### Software Architecture -Software architecture description - -#### Installation - -1. xxxx -2. xxxx -3. xxxx - -#### Instructions - -1. xxxx -2. xxxx -3. xxxx - -#### Contribution - -1. Fork the repository -2. Create Feat_xxx branch -3. Commit your code -4. Create Pull Request - - -#### Gitee Feature - -1. You can use Readme\_XXX.md to support different languages, such as Readme\_en.md, Readme\_zh.md -2. Gitee blog [blog.gitee.com](https://blog.gitee.com) -3. Explore open source project [https://gitee.com/explore](https://gitee.com/explore) -4. The most valuable open source project [GVP](https://gitee.com/gvp) -5. The manual of Gitee [https://gitee.com/help](https://gitee.com/help) -6. The most popular members [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/) diff --git a/README.md b/README.md old mode 100644 new mode 100755 index 65fd6c6a..a9e5294c --- a/README.md +++ b/README.md @@ -1,37 +1,43 @@ -# applications_systemui +# SystemUI -#### 介绍 -SystemUI system app | 系统界面应用 +- [Introduction](#section11660541593) + - [Architecture](#section125101832114213) -#### 软件架构 -软件架构说明 +- [Directory Structure](#section161941989596) +- [Repositories Involved](#section1371113476307) +## Introduction -#### 安装教程 +SystemUI is a system app preinstalled in OpenHarmony. It provides users with interactive UIs that display system-related information, including the system status, prompts, and notifications \(such as the system time and battery level\). -1. xxxx -2. xxxx -3. xxxx +### Architecture -#### 使用说明 +![](figures/en-us_image_0000001103686480.png) -1. xxxx -2. xxxx -3. xxxx +## Directory Structure -#### 参与贡献 +``` +/applications/standard/systemui +├── figures # Architecture figures +├── entry # Main entry module code +│ └── src +│ ├── main +│ ├── js # JavaScript code +│ ├── resources # Resource configuration files +│ └── config.json # Global configuration files +├── navigationBar # System navigation module code +│ └── src +│ ├── main +│ ├── js # JavaScript code +│ ├── resources # Resource configuration files +│ └── config.json # Global configuration files +├── signature # Certificate files +├── LICENSE # License files +``` -1. Fork 本仓库 -2. 新建 Feat_xxx 分支 -3. 提交代码 -4. 新建 Pull Request +## Repositories Involved +System apps -#### 特技 +**applications\_standard\_systemui** -1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md -2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com) -3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解 Gitee 上的优秀开源项目 -4. [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目 -5. Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help) -6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/) diff --git a/README_zh.md b/README_zh.md new file mode 100755 index 00000000..47bbef8c --- /dev/null +++ b/README_zh.md @@ -0,0 +1,43 @@ +# SystemUI + +- [简介](#section11660541593) + - [架构图](#section125101832114213) + +- [目录](#section161941989596) +- [相关仓](#section1371113476307) + +## 简介 + +SystemUI应用是OpenHarmony中预置的系统应用,为用户提供系统相关信息展示及交互界面,包括系统状态、系统提示、系统提醒等,例如系统时间、电量信息。 + +### 架构图 + +![](figures/zh-cn_image_0000001103686480.png) + +## 目录 + +``` +/applications/standard/systemui +├── figures # 架构图目录 +├── entry # 主entry模块目录 +│ └── src +│ ├── main +│ ├── js # js代码目录 +│ ├── resources # 资源配置文件存放目录 +│ └── config.json # 全局配置文件 +├── navigationBar # 系统导航模块目录 +│ └── src +│ ├── main +│ ├── js # js代码目录 +│ ├── resources # 资源配置文件存放目录 +│ └── config.json # 全局配置文件 +├── signature # 证书文件目录 +├── LICENSE # 许可文件 +``` + +## 相关仓 + +系统应用 + +**applications\_standard\_systemui** + diff --git a/build.gradle b/build.gradle new file mode 100755 index 00000000..45ddcb88 --- /dev/null +++ b/build.gradle @@ -0,0 +1,42 @@ +// Top-level build file where you can add configuration options common to all sub-projects/modules. +apply plugin: 'com.huawei.ohos.app' + +ohos { + compileSdkVersion 6 + defaultConfig { + compatibleSdkVersion 6 + } +} + +buildscript { + repositories { + maven { + url 'http://repo.ark.tools.huawei.com/artifactory/maven-public/' + } + maven { + url 'https://mirrors.huaweicloud.com/repository/maven/' + } + maven { + url 'https://developer.huawei.com/repo/' + } + jcenter() + } + dependencies { + classpath 'com.huawei.ohos:hap:2.4.4.3-RC' + } +} + +allprojects { + repositories { + maven { + url 'http://repo.ark.tools.huawei.com/artifactory/maven-public/' + } + maven { + url 'https://mirrors.huaweicloud.com/repository/maven/' + } + maven { + url 'https://developer.huawei.com/repo/' + } + jcenter() + } +} diff --git a/entry/.gitignore b/entry/.gitignore new file mode 100755 index 00000000..3543521e --- /dev/null +++ b/entry/.gitignore @@ -0,0 +1 @@ +/build diff --git a/entry/build.gradle b/entry/build.gradle new file mode 100755 index 00000000..c847e028 --- /dev/null +++ b/entry/build.gradle @@ -0,0 +1,11 @@ +apply plugin: 'com.huawei.ohos.hap' +ohos { + compileSdkVersion 6 + defaultConfig { + compatibleSdkVersion 6 + } + supportSystem "standard" +} + +dependencies { +} diff --git a/entry/package.json b/entry/package.json new file mode 100755 index 00000000..69a88e3b --- /dev/null +++ b/entry/package.json @@ -0,0 +1 @@ +{} diff --git a/entry/src/main/config.json b/entry/src/main/config.json new file mode 100755 index 00000000..e622202a --- /dev/null +++ b/entry/src/main/config.json @@ -0,0 +1,60 @@ +{ + "app": { + "bundleName": "com.ohos.systemui", + "vendor": "ohos", + "version": { + "code": 1, + "name": "1.0" + }, + "apiVersion": { + "compatible": 4, + "target": 5, + "releaseType": "Beta1" + } + }, + "deviceConfig": {}, + "module": { + "package": "com.ohos.systemui.statusbar", + "name": ".MyApplication", + "deviceType": [ + "phone" + ], + "distro": { + "deliveryWithInstall": true, + "moduleName": "entry", + "moduleType": "entry" + }, + "abilities": [ + { + "skills": [ + { + "entities": [ + "entity.system.home" + ], + "actions": [ + "action.system.home" + ] + } + ], + "name": "com.ohos.systemui.statusbar.MainAbility", + "icon": "$media:icon", + "description": "$string:mainability_description", + "label": "$string:app_name", + "type": "page", + "launchType": "singleton" + } + ], + "js": [ + { + "pages": [ + "pages/index/index" + ], + "name": "default", + "window": { + "designWidth": 720, + "autoDesignWidth": false + } + } + ] + } +} \ No newline at end of file diff --git a/entry/src/main/js/default/app.js b/entry/src/main/js/default/app.js new file mode 100644 index 00000000..c2306778 --- /dev/null +++ b/entry/src/main/js/default/app.js @@ -0,0 +1,24 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * 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. + */ + +export default { + onCreate() { + console.info('AceApplication onCreate'); + }, + + onDestroy() { + console.info('AceApplication onDestroy'); + } +}; diff --git a/entry/src/main/js/default/center/battery/batteryStatus.js b/entry/src/main/js/default/center/battery/batteryStatus.js new file mode 100755 index 00000000..10d931e6 --- /dev/null +++ b/entry/src/main/js/default/center/battery/batteryStatus.js @@ -0,0 +1,109 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * 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. + */ + +import batteryInfo from '@ohos.batteryInfo'; +import statusImage from '../statuscenter/manager/StatusImage.js'; + +const NONE = 0; +const ENABLE = 1; +const DISABLE = 2; +const FULL = 3; +const loopTime = 1000; +const percentNum = 100; + +var mBackgroundColor = '#00ff21'; +var mBatteryChargingColor = '#00ff21'; +var mBatteryHighColor = '#ffffff'; +var mBatteryMediumColor = '#ffd800'; +var mBatteryLowColor = '#ff0000'; +var mHighBatteryLevel = 50; +var mLowBatteryLevel = 10; +var mProgressWidth = 51; +var mProgress = 100; + +export default class batteryStatus extends statusImage { + constructor() { + super(); + } + + getStatusImage() { + let BatteryValue = {}; + BatteryValue.mBackgroundColor = mBackgroundColor; + BatteryValue.mProgressWidth = mProgressWidth; + console.info('color = ' + BatteryValue.mBackgroundColor + ' width = ' + BatteryValue.mProgressWidth); + return JSON.stringify(BatteryValue); + } + + startGettingStatus() { + this.setOnBatteryListener(); + } + + // Method of getting the battery status + setOnBatteryListener() { + let that = this; + let batterySOC; + let batteryCharging; + setInterval(function () { + batterySOC = batteryInfo.batterySOC; + console.info('batterySOC = ' + batterySOC); + batteryCharging = batteryInfo.chargingStatus; + console.info('batteryCharging = ' + batteryCharging); + if (null == batterySOC) { + // Set the battery SOC as full when there is no battery hardware + batterySOC = 1; + } + if (batterySOC <= 0) { + // If the result is a negative number, set it as positive number. + batterySOC = Math.abs(batterySOC); + } + // Set the battery status as charging when there is no battery hardware + let batteryStatus = that.checkBatteryStatus(batteryCharging); + that.updateBattery(batterySOC * percentNum, batteryStatus); + }, loopTime); + } + + updateBattery(val, charging) { + console.info('Battery updateBattery:' + val + ' charging:' + charging); + mProgress = val; + if (charging) { + mBackgroundColor = mBatteryChargingColor; + } else if (val <= mLowBatteryLevel) { + mBackgroundColor = mBatteryLowColor; + } else if (val > mLowBatteryLevel && val <= mHighBatteryLevel) { + mBackgroundColor = mBatteryMediumColor; + } else if (val > mHighBatteryLevel) { + mBackgroundColor = mBatteryHighColor; + } + mProgressWidth = mProgressWidth * mProgress / percentNum; + console.info('Battery updateBattery mBackgroundColor:' + mBackgroundColor); + } + + checkBatteryStatus(charging) { + console.info('Battery updateBattery checkBatteryStatus:' + charging); + let batteryStatus; + switch (charging) { + case DISABLE: + batteryStatus = false; + break; + case NONE: + case ENABLE: + case FULL: + default: + batteryStatus = true; + break; + } + return batteryStatus; + } +} diff --git a/entry/src/main/js/default/center/statuscenter/StatusCenter.js b/entry/src/main/js/default/center/statuscenter/StatusCenter.js new file mode 100755 index 00000000..439f8873 --- /dev/null +++ b/entry/src/main/js/default/center/statuscenter/StatusCenter.js @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * 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. + */ + +import StatusManager from '../statuscenter/manager/IconManager.js'; +import BatteryStatus from '../../center/battery/batteryStatus.js'; + +var mStatusManager = new StatusManager; +var mBatteryStatus = new BatteryStatus; + +var time; +var mStatusList = []; +var mResultStatusList = []; + +const LOOP_TIME = 1000; + +export default class StatusCenter { + constructor() { + } + + // Method of getting the battery status + setOnBatteryListener() { + let batteryStatus = mBatteryStatus.getStatusImage(); + console.info('battery status = ' + batteryStatus); + return batteryStatus; + } + + // Method of setting the time to current + setOnTimeListener(callback) { + time = setInterval(function () { + let date = new Date(); + // Get the hours and minutes by substring. + callback(date.toTimeString().substring(0,5)); + }, LOOP_TIME); + } + + stopUpdateTime() { + clearInterval(time); + } + + // Status Icon + setOnStatusListener(callback) { + mStatusManager.setStatusList(mStatusList); + mResultStatusList = mStatusManager.getStatusList(); + callback(mResultStatusList); + } +} \ No newline at end of file diff --git a/entry/src/main/js/default/center/statuscenter/manager/IconManager.js b/entry/src/main/js/default/center/statuscenter/manager/IconManager.js new file mode 100755 index 00000000..ad965eb0 --- /dev/null +++ b/entry/src/main/js/default/center/statuscenter/manager/IconManager.js @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * 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. + */ + +var mStatusList = []; + +export default class IconManager { + setStatusList(list) { + mStatusList = list; + } + + getStatusList() { + return mStatusList; + } +} \ No newline at end of file diff --git a/entry/src/main/js/default/center/statuscenter/manager/StatusImage.js b/entry/src/main/js/default/center/statuscenter/manager/StatusImage.js new file mode 100755 index 00000000..b275c298 --- /dev/null +++ b/entry/src/main/js/default/center/statuscenter/manager/StatusImage.js @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * 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. + */ + +export default class StatusImage { + constructor() { + } + + getStatusImage() { + } + + init() { + } +} \ No newline at end of file diff --git a/entry/src/main/js/default/common/image_hdpi/ic_status_battery.png b/entry/src/main/js/default/common/image_hdpi/ic_status_battery.png new file mode 100644 index 0000000000000000000000000000000000000000..94b1137d20414b9e12f37c543da98d0bfc99fe2b GIT binary patch literal 300 zcmV+{0n`48P)Px#=1D|BR7eeDU>F6XAwXFOFrsV!|Np-MP)r7hG33zIlEMEE)boUqk?{g9y(pFf z9TN&v_#23?~=#Z}zn>K2|Xb2325C8zrWIJ?BMmIPx$AW1|)R5%gUlQ9kfVGxCPH?on?NE8|h6^(1C6kKB~7jOlY))5@RHK=J65`{>F z#QNT5XYK!sXqn`ho!R&Png4AB!GA=Wrgbm@HGkvCZ{&5CJOoo;^hsdnw0%*;2@Nm< zePfZs{CP!gfnt&-T)+b)B~ePP*n$NxQ5=O~c%v}~2T&GKX0hY<2qdaycR-{mg@|Wc zPcBVC6D;7JY**?aU?n5yvWhdP0+BarI07|1(VbR7*86X^isOVM@J<);3LGN}L5VCk z)?yP&;JB9wJhFVxE=V@_WUD4M^rd48S*Meo3sNgOK(=bqrNWP_)TA=m-0RUF0g>nW z$o7Kz6-*saC3$C07Fp|kwbdc#2fQaH=npgoTKCuE3D04D7p%=e$N&HU07*qoM6N<$ Ef)Bxu3;+NC literal 0 HcmV?d00001 diff --git a/entry/src/main/js/default/common/image_hdpi/ic_status_signal.png b/entry/src/main/js/default/common/image_hdpi/ic_status_signal.png new file mode 100644 index 0000000000000000000000000000000000000000..2d97e04dce024f3c823ff06ba0b4e8741a3145bc GIT binary patch literal 333 zcmV-T0kZyyP)Px$2T4RhR7ef&lsyiDKoCX=Xd;OX7KUhLJb^JDArDvgEIiX zH97!USiIBEbpUF5l?yp_0ELF;$I1X!F+zJZH%-dw$^cAeXo6N{hUVQj0QEL7P0DK3 zRQQH9!QfulgtCKA_ zPh~Ck-$r6tLdSE`ph{(VWy6$)1gF0`hSRX fu2=Q6`Qrv&4+CT~KSGmj00000NkvXXu0mjf=$wb* literal 0 HcmV?d00001 diff --git a/entry/src/main/js/default/common/image_hdpi/ic_status_wifi.png b/entry/src/main/js/default/common/image_hdpi/ic_status_wifi.png new file mode 100644 index 0000000000000000000000000000000000000000..486c8b02331bf414ec3924901f1247419f31d9ab GIT binary patch literal 577 zcmV-H0>1r;P)Px$`$DqQ+r2wEjoN zNtl8esNFOhMI74!8l}*k3>G$lGbi}~gDF@A)rK8-$f8@+1L9jT>O}^j+V=rhh>xKT zas>z;!!iN2^(fpTPzxO3SBq+)cJPYt%W=q%J);qZ%AvRo{A*~aLJtES*g0Irc_|wU z>k#d#3r3(83u$~8=n>o{{soOZ@um&lCN;Cv@7P>*gGkkz*UlS~c!aLNC zHz}mu{eWMAS)$ZiAr7_WD`&=o7f|vxI1GEB5GQ6KJIp`bEy`Q7x8xebDvQqC4vn$t zoK$d;V%w6_54(c#{}7=?5-0})t&KFdQvhEVh7!eadGMkNIp#0%sY# zb{ibv@2TWVu=>X+tkBB#l6BQ{_E-OzmOMZ3MJe4RaKQpj0p)0}V0Ru~uV?8EVtdrw gKCY0e;9y|ba#-_1xSHe|pmP~KUHx3vIVCg!03Fs%BLDyZ literal 0 HcmV?d00001 diff --git a/entry/src/main/js/default/common/image_mdpi/ic_status_bluetooth.png b/entry/src/main/js/default/common/image_mdpi/ic_status_bluetooth.png new file mode 100644 index 0000000000000000000000000000000000000000..214f063c56d6861574c83393a0a1460d5942ef92 GIT binary patch literal 249 zcmVPx#vq?ljR45g#(6I`_Fc8M^q#%Mg2u=>-?&hF$_9Yw?bnfEYC~h4bd>02F!tM%! zi_rN0iWeOUA{h8J$>nlK|Pmx(t!eW9YEV&@zW=RU3(7_7Y zm)N6^vFGEst)3ZLXyO7@$*Z#7`v;p1?&zU9BwkuyV)f&Di;w;)dw|+)F+{2sBV3U~ zf1ua`XB_b!R2yK2HR5Z=41#*Px#tw}^dR5%gUl0gc>Fcd_qh`1IJTzdu)H-gu2>p}F&UcmUK=EuS`t**om!~dPk zp9v*R^LLd}+JR+Ud>X?S{et!o`i~5hsN}pfp_jcfgkz;EQOQ<=2BfaQj4kPuY&B?r z`U+0A)gi_V=4clky^UtTmG|Ig$_ily=+Px$8%ab#R5%gckUvX8VHAh&mF|=h1R)|Q(h}Grgl>V8xTK5p0h*nqPtn-aH*jc8 zXskhSlbXUn#X%4%$VI$9=k?sneaTz}4?LXnJOAEuujB06+)W4gzJEgg6ppn1h5v9} zcd9yc;R1#vE|;E6?DyfL$Y;X~97b4 ztzKX?kjp>|uA&9&f}lWClDGzEu!J{wlcf+pn{ylCGge$Ik>)!Q8x$gqQt z3mTi;_Q^<WS literal 0 HcmV?d00001 diff --git a/entry/src/main/js/default/common/image_xhdpi/ic_status_battery.png b/entry/src/main/js/default/common/image_xhdpi/ic_status_battery.png new file mode 100644 index 0000000000000000000000000000000000000000..9efbc47a89143213cac1d45906688aa59f85c7ae GIT binary patch literal 337 zcmV-X0j~auP)Px$3rR#lR9Fe^S4#@QFc3||eNpf#f`@R?y&Es!L3$kzq4X+((!E&UNGg+1DuFUu zd4Zvmrpfyxg^6=)bbt=ffp0qCQ}DKJ=Xke8Y!F2{Zq#ppb3z=w_xCJJ2q+N;#4>B* zh#w1f;812Si-{Ftkv(zb2|+~lX<0cgX)Ca8xAdiT9~`a_@jAkI&VauT9BPa`IzD{@ zy0Kq+3i-VvbnbFdHifoQBz5klB0%wvQwoUvu^+YWxdX8u_C4-^k>?kMqjNWv zQleG@blxkVkxEdCDK*JF6%GKEdw~nZ+q?eJWcvOAxk&870{UCCJYeqtC|m~H|J}$2 j<#Lb?&;dF?2NDOKcDzvY5n|Pk00000NkvXXu0mjf=!%Kn literal 0 HcmV?d00001 diff --git a/entry/src/main/js/default/common/image_xhdpi/ic_status_bluetooth.png b/entry/src/main/js/default/common/image_xhdpi/ic_status_bluetooth.png new file mode 100644 index 0000000000000000000000000000000000000000..2dd0dec771dc4b8c12d46c8d1cbcfb393c5e3303 GIT binary patch literal 443 zcmV;s0Yv_ZP)Px$bxA})R7ef&l&w-jF%X4w8GaN4!yu3dcmfzKyaoaX0#Q}LQ&d&dpx_C34ITgk z0*L?&3e4p@X||KzY;GBJcjnxryL(PH$)+JJt@i}lwp{~fV7r#MQVS&i5#u?yL1fp< zT_mucNIQ%}Ph^omzNjk_1yH^KS70M&Wb;Sn&!7;o3ib&egF!{)o7fl>A|@~)_z4by zE7CNLiM)`bO0GeO0tDZgk3g>o@l7DIOu175O*|3Yb_;>6=^BSX0@}(g2#r3ubrOGw zN#qIa0V9vomP!GVx~s`$rj=)8Ig1J`vr~!O1zAqJ1rIe$9N49%bQf6PwV+S(EjPV z>Hr)7iRk@=Rei8m@CNQGD;rslP2^E({iy&y?s4|nNea%9<+CmHku6q`{~}YD)#?BM002ovPDHLkV1nh{wTJ)! literal 0 HcmV?d00001 diff --git a/entry/src/main/js/default/common/image_xhdpi/ic_status_signal.png b/entry/src/main/js/default/common/image_xhdpi/ic_status_signal.png new file mode 100644 index 0000000000000000000000000000000000000000..f256c609daa3edd52795bbafb51813c8de0d5585 GIT binary patch literal 299 zcmV+`0o4A9P)Px#3#!Xl?pHC0#@hvN2eKCo8z6hZumQY!*?GMYuojG$qz8bDlm$}*Kv^&~0Pl49 xr9{{%hz%_yD{7OW)$0S*!p6002ovPDHLkV1h8pdKdrz literal 0 HcmV?d00001 diff --git a/entry/src/main/js/default/common/image_xhdpi/ic_status_wifi.png b/entry/src/main/js/default/common/image_xhdpi/ic_status_wifi.png new file mode 100644 index 0000000000000000000000000000000000000000..3f49ec5b9e05271894e99c2e4606d7b4208617f1 GIT binary patch literal 756 zcmVPx%u1Q2eR9Fe^mb+^dQ51)FeM{6v6p8o<2)-&Uw6KXrMG!n6@XbRu1-#6Z!%w%U~Gt=1Y55B#xbI(2Z+7kicW&kWaACm)tWi#ec?F*li;I6GVz-+95^`TA?OS@YzOdx;a-cV@?fW_VE zY3NB9o6h_21Sc+@Ddy_08@59)cvMY|Q@Os}H`ntm4ZOQ?Re}#5b;CLaGjbNrsy+>f0y?`$>?7c_F zU>~SyY|i|vwgzyRfo(8|k+(TgNUdqz3tM18G|>9-gRZA=m-%DKVSG6M2#hjjRwJb{ z(Ckc>Ok79%1Xz~Q1jhX=_NHi3VE`6(i>-@1LJRW$&=q>|6fx_zZpDF9OKKcRkb mQSnE|zK%K>=wzUD2L1x@_{1S?sgf7~0000)wB literal 0 HcmV?d00001 diff --git a/entry/src/main/js/default/common/image_xxhdpi/ic_status_battery.png b/entry/src/main/js/default/common/image_xxhdpi/ic_status_battery.png new file mode 100644 index 0000000000000000000000000000000000000000..b209209a65ae4f61446d52b960153b8e8ae3a342 GIT binary patch literal 579 zcmeAS@N?(olHy`uVBq!ia0vp^9zbls!3HEZ&9Qk6q!^2X+?^QKos)S9WdHSaaSX{| zeLK_M>xhHIQS*PASDdW5S-C|8OQd!8G~~Qx-P80f?$EVs(l<2Y4jl7~aB+0eeIvr6 zd*$n1)t0;4PacTSIrFUcgU7uyDMt7EYlJ@ES+&6Y5IcF7h+cb_*G)eB^a(W z`7M}x@ZOfF8P4;(wacFBEL?TN&0YG)`c-U8F3o#>K}wBJNn&N zv$tsNP+Y$4dC1d4WzT~4qy!Y%Jm=0}-POLMvpD#Dx4?pZjmjAu>H6ohjqT@U&s!*T zdE??|Kg-_ne!aWTih0(XrOm}(x3a6$oXVX$e?gJbr7Q;~m$i(Vf*;vb9Ii-B5E9JC zDNxGxMNQ{Q`R>;|FPK>DiacyC@w?>O&v^Lyq3}K}xyBPVU%398I^lw`iB#QMlxMZ( zV2ttgb217*U5k{sdyhSlesRA&&H1s=i{#9?izopr04!Sb-2eap literal 0 HcmV?d00001 diff --git a/entry/src/main/js/default/common/image_xxhdpi/ic_status_bluetooth.png b/entry/src/main/js/default/common/image_xxhdpi/ic_status_bluetooth.png new file mode 100644 index 0000000000000000000000000000000000000000..53c6d464ce820db2a66907d80df8fded23c68e09 GIT binary patch literal 617 zcmV-v0+#)WP)Px%BS}O-R9Fe^mODa_)LYqN1zk4S1sJ``}f8B%@H6)-*G#TZCeKsCK22}0%pWQOL2(0nw5|~}#>8*(zXWhID@1d~3wMNuF-CL4{|bNyT_Hw%sIFv< zAwHJQJ2%sBCikT|IzB0Y{Rq2|zsTFfnf%{?93ZSbv0+@lE7kBwDX91_=4`5btMAVlf z_K^R^n0!vj0-ykh-d&O4HZ$TQwdE(6u82=GDi%dK0!|3jDT=u&}i+M5u3u1xBa00000NkvXXu0mjf D)Qk_= literal 0 HcmV?d00001 diff --git a/entry/src/main/js/default/common/image_xxhdpi/ic_status_signal.png b/entry/src/main/js/default/common/image_xxhdpi/ic_status_signal.png new file mode 100644 index 0000000000000000000000000000000000000000..65c057e136618d28c22e3d8059832c7cc68919bc GIT binary patch literal 569 zcmV-90>=G`P)Px$^GQTORA>e5S+Pn3K@iQUphYl{6}UtH_wk_5Sj?4L%0S9M%0SA%=rZsD06c9>Cq|`Y00000NkvXX Hu0mjflIs9A literal 0 HcmV?d00001 diff --git a/entry/src/main/js/default/common/image_xxhdpi/ic_status_wifi.png b/entry/src/main/js/default/common/image_xxhdpi/ic_status_wifi.png new file mode 100644 index 0000000000000000000000000000000000000000..c8d92cf4f9625d95cea6aea3e3e5861a49be0215 GIT binary patch literal 1135 zcmV-#1d#iQP)Px(DM>^@RA>e5n8|NVQ5?r#OIkBUm7*!BDM3Xw#1KuiVkc@^7&bOGmLmQFJ6kIu z!iExTG$ch+jc7_t9k6JsBw}c2rDEvw`O1CmednEb-@U!B>B9Xb-<)%Q=Xbup;hy2X z7mGy_RUoQBRDq}hAu5m)Vs6sZcs!nqVg{J%!ZiAE&}X1GCnrbx&=M*Ef-WM0Fn@!*Z2zoL^RbVri39=!dAh{13N#;ioLf;7xcmc%KU<=3( z;v|6W0Jch`fkeLgnU^sE0?&hJH&Ec?JV?JY_6qcZZ!XYH+82d9F9lx9?Kk5M;0B4P zpH@5*Aovny9szUHFuXzk610JCoDHV2OH#wD4Zi?r|CEC=V3Qt{XW@Ns8b)6oqpdRA4w4numrI2g~Yk?V)-as9`?$V}+X&i%WJXS}+sub&3tQnmG|6myl zt-|+gNOpmB7P2Sk^frFE$7~5~!r-vmh`!eJc_wSQWE29?Cf9v1#WB|WKGV4~meMf4 z0_6dq6VEN@;CSd(sM@BO7tAvZE-+D-kyUUwj{)5U+MI&v7!@~KJf7I-?L4-@X+8hZ zw_^Jm8x_*M60~=c#P$ZX=J$a`pc%4zv?+oEk*x;RU`dLBKZSz4g%9hS#fRdn0+m4f z?J~B1Xon;vfuRwP4#c{34}v)!W;qbrK9wn0Kx0K=NKro5Ndxkf)}8R00u2K|5Wf4(^(0sz${=& zH;OZGd@%=X&p{G60l{K}L{+W_O*s5%jCnqiNG=9CZFFp!iFCqu+LOQ;w4Flf=IK+} zEsuG)h$AhTz`{Jer4|x-PP-p$bdlKJvTJy_8{`daV460rDt(mz9t_ij?~%xQSat&K z6%{7wyie!BcLE~7iH_K~Q@s>U#&wfc0^J3=8?~{whDglBo zgY3AQ(AC$n(NUNObm3|FnWBw+iX?P&j!1%>LN*5rEy_pe^u_uvF{X7*e?Hg&DiV5H z9i=*&N1Q;|H&B4{lVCdN0+%vXlVnPC+ zp_Y(W>8P&mgL22_Da)kA%YLL|qmlr@?;)TXBd9whQD^8vKL%R2e!LNUA$Df)np)$G z`JwS`ll27fY&%*L0eOujYy!2Tk-%q<2=o_XR%J92=q5saw3#BEeyL?uMr#vKBuf4C z96E*QUt<%8{&>r3_7PcBfv5se1)>T>6&ULZ`~|;fE*wedUwi-n002ovPDHLkV1k@6 B0KxzO literal 0 HcmV?d00001 diff --git a/entry/src/main/js/default/common/image_xxxhdpi/ic_status_battery.png b/entry/src/main/js/default/common/image_xxxhdpi/ic_status_battery.png new file mode 100644 index 0000000000000000000000000000000000000000..4f95a3506a972ba2dd3d81db50c3239ed9b3714c GIT binary patch literal 687 zcmeAS@N?(olHy`uVBq!ia0vp^2|(c(_pG#7ASU3 z-@iPQXL8}~%ZpUbYp+bps;b)c;`{Mj?+|}A2^IwgMh*uCCV>V91oJ=yhmW`Vt_Ynq z?^piusZ+T>z5nFDj7|NYq<_9Gv5LJiqh=yQ)Bn(u`%dq_>amMC`A#<9e$_*tFYH_+ zs<8KGxL3-D`A>|0HcyJSkrHlq_Wc%7r@8%x%a6#{lNW5<<=c7w$^IwyPvUn~_b$IG zp(1wd$h60f-&Q_&IVVMJYdrU__a)Ph90+6Fd}i6sTaO}?8fqWTvNcif(-oU}_F8}! zOT@ohlDB8wci(a}>4W~k^R=Bjwo5YBs=s;J$^Fx_>XYB|oh-j+ue(22;DPKUM_#u7 zdrY1B)<@@RC!Q4A@`*uwFUzOd_upN)`s};lfxr+>J}bAES)cPb9%v*nv2;9q7YP(S z!oneN`0i$Px%t4TybRA>e5n6XaWKoExSl87o2MG_qnC{^kR-XUFxkW$fJk%E$fiaup{0E$%9 z2yrA$Bp!i01V}U~kf@NN)oCI^VnXmZ!qYs&p@AnJ_FC3 zfngK<>2&%Q^T+Ua@ZZDX@X{Oag?B3qJtJ zMij`>yvCp-xEVqNyip3TQQuz#0*jFgLIYeV09Ka*5dc8`2cnZDL3|RO0Kfx)I7iV1 z#DfSH^HPyyzeuT7hftoWj z0B0H@v`A8%16=@|;DE@AF9cwOFo`b=kby9ZGfwR~z|Liu`yL>a;XW{D!3|&#m&BPM zTmTMnGlcmbFp6^_(w5!Sm;h?Tnc_RGhWan~Bs!La$O0t9x%rF%+;7n&KuWxBZRgp0 zUgfm_i;7G7GZ5=Ct`eZBxCBo?jAhImKwIJ>fbt3+Z%V^ANC}{Aam3@-)jmAll!kAR z0D!^Vt5@x0YBv)YUu#O7kD;~+E)BmyW)=X@3VZdU&$N^lV@pLwoZlY7G(gy^qjxFd zq<9rj27_bNzZUINr0G`mS*yI}j8T>L(wR#@*ULyINr_Y+qW)gmD7j01soJdanpcXm zQ(pqMo0?0UVr>KH6G)!94D1TPB;Hj9%;IeT#7~M#oB;YUWZP?Jn7}`(NAL^1!g&Mr j>{)W#9@n{# z9hp=dU?@PnQSJMt-Rq*gdDA1=BjY3aBXcjC$p8E*r@j8rz6VO0a_pJ&etmweU{<+n z#-2&%Tjx%C71z0Pp%6pPlvCThe0ZlaIOy{53Nd)C3W@zHn@}drbNBwmK2vT7E{8 z8?!TfnY*k6C=imEVZ_ofNh>tGmc63ZVI3R$+X#Jz%7AHX?5qtv4%67w)f#ko{d^c+ zY~FN5QF%gYV#XzohUuR+Y!}+RE;y)+kMYC*PenC0#~FX-$1Y#;MrIT5w!d@#_w!HR u^lnpLZO)J6So1SepCdxif$6I74@T=#Ubi>fzgiEBCPx)g-Jv~RCodHnCpvGRT##dsWiKpSz1XsW22RnK^G&seb6Ebg~9rekVp}9fuIk4 z>o2HJMNmXiSOg*oMi<0VD#DsbL%U*=jcFxmSF^Il>GzxVfx~8>eb(7$@14V57)rU;ECfetNZgKuHS`kB801@D|96Q1D{XyMey9NvMAQsRq!!fj}V^~ zb5U@4GH?ex2>Xi$F1g>Q_*;h%Uv%oXqZPowrxIWpbml|xJ%%Rs6|}IqY=4Fpw%?(! zAj&DwB6%7-2hN4Z!cYuhxEdi2gmwrLfPrgwHCzhYB{YhSOL8mRPBK66ECk|ORQuq0 z2?ux{1@qwG*AVxeJflWiTLDPIBkOk9Zq^TCvk`9UWCpMg2DzM!@j~cim{%Swl+Te% z?h%?R00Ga$$=z^zPNbh`+W_ApSYt`&n0MbqUarEcpkkbo<8cpdkCT^MFB2^VAV@zw z?uYKpEV$Ix!OaBtGs~drcjV}HxE2n=#-%D9)|L4vIqpn1_&ra62WdYms}t`$exAXp zv;VIHA!d-o3g{&)3&Z64P*%gySuc}!UR%@nix+F*MjQs;#z@d*YDJ#|r@|AU7bc(L z7wF00Q&ETEC&cj5(-zq6CC0-TUJn<;^tjy0naEoKchF-&Q?IZ2{1n05S8YK;&c>C{ zJA=ns5qv`@SKAiiejeh0xL&{Sfz1;*ME{jp{qqE{(A)(3py&8YILY1X1b0tf3>U(F zSSDN*uad*|c23E|mE}rM4EO%a^vf*JEd`)cMbhsJ1#H)lW(8<_RMv$%rVBqfM zWzdKV;otkm1pyEh_D0aE1-3v8HM5&-2%Nt zz71Xhy&JgCJ(|2JRt`ik{vhkuR-3kdnuyK&cF?<*e35@OW*v^A)pMGe? z_w*QrUV$x=!_Z%McHmQCbAeA!iQW*~R*t$7pq10+_ax~(+?l!@Dp&{BfxId@_10Mqz-wFLCSSa3_e?I;P{xX0Wa5nU;E(H2cf^(t2`9(wpDo~)3 z8qh9Jmh?<)mcahRb|=pl+2ebX@3lQ@7l6Tgrr!nAwZW6(2}JPHQyWUZ2<2tY;3w0* z9Hs|vH{UH!Z2VpeY88MH&4K>**9x|2Qyc0QAmlg;u_;ZUx&_!9ka>trfSWLrx&`p( ztgNeYBU{_FsSULXK!x}J`&H12pN8*NB{u1{%D&fr3_6k{=^jv-ve9u=ASw_Qhzdjn lq5@HYs6bR8DsV(A@HZt!f&fd# + + + +
+ + +
\ No newline at end of file diff --git a/entry/src/main/js/default/pages/index/index.js b/entry/src/main/js/default/pages/index/index.js new file mode 100755 index 00000000..063f92da --- /dev/null +++ b/entry/src/main/js/default/pages/index/index.js @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * 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. + */ + +import batteryStatus from '../../center/battery/batteryStatus.js'; + +var mBatteryStatus = new batteryStatus; + +export default { + data: { + isShow: false, + showMask: '', + }, + + onInit() { + mBatteryStatus.startGettingStatus(); + }, + + clickFunc() { + console.info('statusBarClicked'); + } +} \ No newline at end of file diff --git a/entry/src/main/js/default/pages/statusbar/clock/clock.css b/entry/src/main/js/default/pages/statusbar/clock/clock.css new file mode 100644 index 00000000..ac1cdbf1 --- /dev/null +++ b/entry/src/main/js/default/pages/statusbar/clock/clock.css @@ -0,0 +1,24 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * 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. + */ + +.clock_text { + margin-left: -10px; + width: 14%; + height: 30px; +} + +text { + color: white; +} \ No newline at end of file diff --git a/entry/src/main/js/default/pages/statusbar/clock/clock.hml b/entry/src/main/js/default/pages/statusbar/clock/clock.hml new file mode 100755 index 00000000..93e8490b --- /dev/null +++ b/entry/src/main/js/default/pages/statusbar/clock/clock.hml @@ -0,0 +1,20 @@ + + +
+ {{ mTime }} +
\ No newline at end of file diff --git a/entry/src/main/js/default/pages/statusbar/clock/clock.js b/entry/src/main/js/default/pages/statusbar/clock/clock.js new file mode 100755 index 00000000..99f5dd87 --- /dev/null +++ b/entry/src/main/js/default/pages/statusbar/clock/clock.js @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * 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. + */ + +import StatusCenter from '../../../center/statuscenter/StatusCenter.js'; + +var mStatusCenter = new StatusCenter(); + +export default { + data: { + mTime: '' + }, + + onInit() { + mStatusCenter.setOnTimeListener((time) => { + console.info('ClockModel mStatusManager time:' + time); + this.mTime = time; + }); + }, + + onDestroy() { + mStatusCenter.stopUpdateTime(); + } +} diff --git a/entry/src/main/js/default/pages/statusbar/statusBar.css b/entry/src/main/js/default/pages/statusbar/statusBar.css new file mode 100755 index 00000000..03cdb5aa --- /dev/null +++ b/entry/src/main/js/default/pages/statusbar/statusBar.css @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * 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. + */ + +.status_bar_page { + background-color: #66000000; + flex-direction: row; + display: flex; + flex-wrap: nowrap; + justify-content: flex-end; + align-items: center; + height: 100%; +} + +text { + color: white; +} + +.main_body { + display: flex; + width: 100%; +} + +.icon_list { + margin-left: 6px; + width: 100%; + height: 30px; + display: flex; + flex-direction: row; +} + +.battery { + flex-direction: row; + align-items: center; +} + +.battery_body { + position: relative; + margin-top: 16px; + align-items: center; + width: 80px; + height: 40px; + background-image: url("common/image_xxhdpi/ic_status_battery.png"); + background-repeat: no-repeat; + padding: 1px; + display: flex; +} + +.battery_progress { + margin-top: -7px; + margin-left: 6px; + height: 32px; + stroke-width: 32px; + stroke-linecap: "round"; +} + diff --git a/entry/src/main/js/default/pages/statusbar/statusBar.hml b/entry/src/main/js/default/pages/statusbar/statusBar.hml new file mode 100755 index 00000000..dc57d75b --- /dev/null +++ b/entry/src/main/js/default/pages/statusbar/statusBar.hml @@ -0,0 +1,32 @@ + + + +
+
+
+
+
+
+
+
+
+
+ +
+
diff --git a/entry/src/main/js/default/pages/statusbar/statusBar.js b/entry/src/main/js/default/pages/statusbar/statusBar.js new file mode 100755 index 00000000..3e6af816 --- /dev/null +++ b/entry/src/main/js/default/pages/statusbar/statusBar.js @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * 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. + */ + +import StatusCenter from '../../center/statuscenter/StatusCenter.js'; + +var mStatusCenter = new StatusCenter(); +const LOOP_TIME = 1500; + +export default { + data: { + mBackgroundColor: '', + mProgressWidth: '', + }, + + onInit() { + console.info('onInit'); + let that = this; + setInterval(function () { + that.getBatteryValue(); + }, LOOP_TIME); + + console.info('mOneSignalImg====>>' + this.mSignalOneImg); + }, + + getBatteryValue() { + let batteryValue = mStatusCenter.setOnBatteryListener(); + console.info('batteryValue = ' + batteryValue); + this.mBackgroundColor = JSON.parse(batteryValue).mBackgroundColor; + this.mProgressWidth = JSON.parse(batteryValue).mProgressWidth; + } +} diff --git a/entry/src/main/js/default/pages/statusbar/statusIcon/statusIconList.css b/entry/src/main/js/default/pages/statusbar/statusIcon/statusIconList.css new file mode 100644 index 00000000..911e33d4 --- /dev/null +++ b/entry/src/main/js/default/pages/statusbar/statusIcon/statusIconList.css @@ -0,0 +1,23 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * 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. + */ + +.status_list { + display: flex; + flex-shrink: 0; + flex-direction: row; +} +.status_icon { + margin-right: 8px; +} \ No newline at end of file diff --git a/entry/src/main/js/default/pages/statusbar/statusIcon/statusIconList.hml b/entry/src/main/js/default/pages/statusbar/statusIcon/statusIconList.hml new file mode 100644 index 00000000..f0a374ab --- /dev/null +++ b/entry/src/main/js/default/pages/statusbar/statusIcon/statusIconList.hml @@ -0,0 +1,20 @@ + + + + + \ No newline at end of file diff --git a/entry/src/main/js/default/pages/statusbar/statusIcon/statusIconList.js b/entry/src/main/js/default/pages/statusbar/statusIcon/statusIconList.js new file mode 100755 index 00000000..f39081a0 --- /dev/null +++ b/entry/src/main/js/default/pages/statusbar/statusIcon/statusIconList.js @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * 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. + */ + +import StatusCenter from '../../../center/statuscenter/StatusCenter.js'; + +var mStatusCenter = new StatusCenter(); + +export default { + data: { + statusListData:[] + }, + + onInit(){ + console.info('Status onInit'); + mStatusCenter.setOnStatusListener((data)=>{ + this.statusListData = data; + }) + } +} \ No newline at end of file diff --git a/entry/src/main/resources/base/element/string.json b/entry/src/main/resources/base/element/string.json new file mode 100644 index 00000000..24fea82b --- /dev/null +++ b/entry/src/main/resources/base/element/string.json @@ -0,0 +1,12 @@ +{ + "string": [ + { + "name": "app_name", + "value": "SystemUI" + }, + { + "name": "mainability_description", + "value": "JS_Phone_Empty Feature Ability" + } + ] +} \ No newline at end of file diff --git a/entry/src/main/resources/base/media/icon.png b/entry/src/main/resources/base/media/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..ce307a8827bd75456441ceb57d530e4c8d45d36c GIT binary patch literal 6790 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
  • i4F@(&vJgN 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 QQkI-Ob@3$8{K~!m58To>djJ3c literal 0 HcmV?d00001 diff --git a/figures/zh-cn_image_0000001103686480.png b/figures/zh-cn_image_0000001103686480.png new file mode 100755 index 0000000000000000000000000000000000000000..751bd05d1759a6d1e4f56e4dc85e27e1c97d22ac GIT binary patch literal 15540 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 XsU9?+x9kdGp#M~q9xIl}n+E \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn () { + echo "$*" +} + +die () { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; + NONSTOP* ) + nonstop=true + ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin or MSYS, switch paths to Windows format before running java +if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=`expr $i + 1` + done + case $i in + 0) set -- ;; + 1) set -- "$args0" ;; + 2) set -- "$args0" "$args1" ;; + 3) set -- "$args0" "$args1" "$args2" ;; + 4) set -- "$args0" "$args1" "$args2" "$args3" ;; + 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " +} +APP_ARGS=`save "$@"` + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat new file mode 100755 index 00000000..62bd9b9c --- /dev/null +++ b/gradlew.bat @@ -0,0 +1,103 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windows variants + +if not "%OS%" == "Windows_NT" goto win9xME_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/navigationBar/.gitignore b/navigationBar/.gitignore new file mode 100755 index 00000000..3543521e --- /dev/null +++ b/navigationBar/.gitignore @@ -0,0 +1 @@ +/build diff --git a/navigationBar/build.gradle b/navigationBar/build.gradle new file mode 100755 index 00000000..c2ac0f33 --- /dev/null +++ b/navigationBar/build.gradle @@ -0,0 +1,13 @@ +apply plugin: 'com.huawei.ohos.hap' +ohos { + compileSdkVersion 6 + defaultConfig { + compatibleSdkVersion 6 + } + entryModules "entry" + supportSystem "standard" +} + +dependencies { + entryImplementation project(':entry') +} diff --git a/navigationBar/package.json b/navigationBar/package.json new file mode 100755 index 00000000..69a88e3b --- /dev/null +++ b/navigationBar/package.json @@ -0,0 +1 @@ +{} diff --git a/navigationBar/src/main/config.json b/navigationBar/src/main/config.json new file mode 100755 index 00000000..768821a9 --- /dev/null +++ b/navigationBar/src/main/config.json @@ -0,0 +1,51 @@ +{ + "app": { + "bundleName": "com.ohos.systemui", + "vendor": "ohos", + "version": { + "code": 1, + "name": "1.0" + }, + "apiVersion": { + "compatible": 4, + "target": 5, + "releaseType": "Beta1" + } + }, + "deviceConfig": {}, + "module": { + "package": "com.ohos.systemui.navigationbar", + "name": ".MyApplication", + "deviceType": [ + "phone" + ], + "distro": { + "deliveryWithInstall": true, + "moduleName": "navigationBar", + "moduleType": "feature" + }, + "abilities": [ + { + "visible": true, + "name": "com.ohos.systemui.navigationbar.MainAbility", + "icon": "$media:icon", + "description": "$string:mainability_description", + "label": "$string:app_name", + "type": "page", + "launchType": "singleton" + } + ], + "js": [ + { + "pages": [ + "pages/index/index" + ], + "name": "default", + "window": { + "designWidth": 720, + "autoDesignWidth": false + } + } + ] + } +} \ No newline at end of file diff --git a/navigationBar/src/main/js/default/app.js b/navigationBar/src/main/js/default/app.js new file mode 100644 index 00000000..8e47afff --- /dev/null +++ b/navigationBar/src/main/js/default/app.js @@ -0,0 +1,23 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * 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. + */ + +export default { + onCreate() { + console.info('AceApplication onCreate'); + }, + onDestroy() { + console.info('AceApplication onDestroy'); + } +}; diff --git a/navigationBar/src/main/js/default/common/image_hdpi/ic_navigation_back.png b/navigationBar/src/main/js/default/common/image_hdpi/ic_navigation_back.png new file mode 100644 index 0000000000000000000000000000000000000000..b9bd0b2d52709ddf685eab52d8e76e102c2bfb9a GIT binary patch literal 599 zcmV-d0;v6oP)Px%5lKWrR9Fe^)=!8{aTLJudB&dPro@BX?y zJ$2L_s5`JsJJ4#ida(m*irhk@$mGHXe*>@hy<0dmBsET zZ>P@okJXD^pz7m!Lb1_(#E8c?jI~t@%)ee+A?xL@6Yk&{4&WN8J#yEgtx!}Y^#@ai zPx%I!Q!9R9Fe^mc2?tK@f$FKWz+(3R;9Tu@N-Ah&C~mg^Fn56Zkw9K0*Qt+8D4g zPY^9E?6lBAA*ij$^*dp6LBgHg+-T(;IBb%cIeT`pyR#!BnPnBoD)7%LkW0JXD2nFE zT?QHpj^~~68QkP@IgJC`z=9A`W|nPG0ugux5+a)fGeEo#;0$5+jKLNx2qB}e?tu-^ z0Zq_m!VkvSh|BY(0%~9iT!RL2UyNQ066C}j!L|ghz&R6qTI}RZ;NJpOa0iYfbbR`}y+C$bq1 z$MHhQP!-Ze*SqwL>4IHvM2a)fd=*Me{40k~kg8*@Xh31=d1l3Zg47^qI2mdOLz&~4 zh2+U1@(I$(P<( zO}W$H)JI@eNXe{7@0n{*Wu>c(1DVU&B&p@N%zTwH#2N(Y;dRIabBq^|`<@@-R%Ikc z&yPCrTF`q)EC?B6&;xB9bbxx3o~l1?apLm)t_`d`qra&I>csut0}aC1m{3m$b?qWh zpHn+{1F{0p(bhsA!D-0fL|kma6^b+52ZX67sZna|U7ou1bc${fVxA^qGRrEERUoT? aD)0?K__MBNK$80a0000Px$6G=otR9Fe^R=W|xFbuW%6;J~u%#s-xA#2bu2aLc39J{0@H7S53JRNqEvn50B zXd>SUCDzlkcyaNJ(WMHg0s~XPrvBfyZRfy_Qt=&JW38<^d%;(6APllWXO36}8PYdz zfSxc|!L_6ebO6B&aYej1GNv{`Eu(%6v}bUJfYIeX(;9#?h%QlJLIGTa+95B%b&s`3 zcf!}7F@i7l9}YX_di;SL=C3s!NRnF>QiUW1q`KZARY+1ms_PxZ>iv4$mwOsWN3c1AyeW&l$;kr-K03iEpRzviRiORG#@cg!I6jq`DSu@ rcxKI&#|CmODHG_?Emc4j7={9GW6?QCLH8B200000NkvXXu0mjfu_B4n literal 0 HcmV?d00001 diff --git a/navigationBar/src/main/js/default/common/image_mdpi/ic_navigation_back.png b/navigationBar/src/main/js/default/common/image_mdpi/ic_navigation_back.png new file mode 100644 index 0000000000000000000000000000000000000000..4da0066ca60ba5ca5d62c9c697b105b69f930d46 GIT binary patch literal 409 zcmV;K0cQS*P)Px$Q%OWYR7ef&l%Y>TQ51)H!b}tg6bo3WCP*Y85DX@Rn@uufY;H=R5C}kHGx&cn z2)Y?;M#v@uHk$!1-(l}&pp52<=i_Wkz*We2aGXsC_>urN1XU2 zwH%^(axJ)k8sAl&m?mOdN9c_8TS&mbahxyKy3FJ73;!aN0U{2S1-OPcct(8AC}BYI z)(A8}JVoUloI(%bZ>y5Bs2U(FeJw!+hVY8`f^nm;8n~yvN9hkb2>)!Py0+PBK)wo} z2#?nGZZ%b(7iwYKp;($?84$ zzJOJ^Px$UP(kjR7ef&l)F&_F%X7*_6(sPlwbmr;{+<800>MD6;KC_KmqOnlbgUU!4E=` zk&z0f9#Zx&~)p zYe9RA3os?oyXk&55V#E{;0as-?O-RGn@%=yI?h%+n&Ts*s*MV^E)ZuDC8U%%jDV_3 z26w)2ltkQfr}M|QzwqYj`3wDZJ@-ueQ#c=Jo`HM<2@+6=daWNi3)pGJ8>XT8?y-Ud zSalS)rN>awjJsias><HVpD|pByG21=789wtMdQO3J2iyT&qD#Jklsj-o_AbP4p>Wh+0JK+z<&19#3>u^;-)JbwRM2fhFUOs&a?d*rzQ O0000p|QSiQtDM(hZq=s)&H#V@1^KJ+#` z@^Ro6TXcH!0&a(&3e(>+X6@*5mUESOkvt(eCXi*Jj9O096%pyJ4G9^2Y!^8=lwvF; zL$*mc7Hb?#V9+vPd&GZ3A5}T6vSM2oI~~?#Vc07m=d#LW S!BLPx%>`6pHRA>e5m`z9(Q5c4uex-#$lob^eNKmV+m9)qRX;ET9NG&wpG zQmDh97=KQ6CNBXnzYK@!dPCXiOKLCXN6OpI ziqilXpN+E?XaybnC-h+aHPwrp1;G3&93BK!=^5O@{IBUPPcOLxV0fNs z#@|uBD^~!_H{einU2{H#$Iyp)Et7?)ssI?T#oaDw2CX(<;3~#HQVW%J0L*JWSJ$<^ zPr*aDhxy;s!etcz^LucpRYv**>iW?1R-l*60WiM>k1{_Aci|D{|4@S}a{yd!Dm&Gk z zVg)s*G6#@LLfoKSgdeaPItkGVHrEonxsz1@ot6-9C?$9bx_R3PU4&ReEnL!^h&R{%LA#3bBdcov3WF&rbr z0nqcWSLF_1+!5k4<1^3)x-Z%cB|>bVdXuvNa!80NxX-W~KEOgaLWmBiW9(c`0~mLN z_{vxpcrWPLK(`?$3DHD#DlY-#kPs>8$FBtXSBkEOLxeaAx)paKZvl)uLJY$Nwl9O8 zkM%sEYhx>Diq(UpA4h8?)_dgG0mHfu_JX;yHAfpDq^6v;3JqY~5kxCf8!UzQaD@O> w{RP-JoCp%6f#DLzGsh0Z4#W<`4!G{XUm+9MjiItTMgRZ+07*qoM6N<$g0A9ZCjbBd literal 0 HcmV?d00001 diff --git a/navigationBar/src/main/js/default/common/image_xhdpi/ic_navigation_home.png b/navigationBar/src/main/js/default/common/image_xhdpi/ic_navigation_home.png new file mode 100644 index 0000000000000000000000000000000000000000..7b6fde4f366d85a1cef4e143380349cc2eaa6f90 GIT binary patch literal 955 zcmV;s14R6ZP)Px&bxA})RA>e5n9picK@`Rl6+uzd_y^sk3q`?};uAF0U3De;3Q`xY^$B$C!atAD zg5B9oi=+==TVfaLM!Hg3Ezyb#QRDAR&d>()=S=R6BFusB&b`x_@0|19$=o?D6p|$c zk^)JAq(D;OKUScackGQuV-K7s!4YuO`0KQv!Dg{o{AGQ)G`S@};1`ML5*P!AyF|B5 ze+?{?$Xb^%QQesnAn>zzybeZodEVmw6Oi&Uy@}(XqzAKiv~wi#HgpWq4xE53l^Zyn zG{;&ZRj@)(@2#(`Va^#k#z6&WiOH&9mN`H55NiV^Kp+QjbPHSnKfpX#Ac*g@eU171 z8FU3qfqmdLc*^{5v{4qFfGK|mFADw(c!XmuhiHRqgh|stZ$n8ujC~W@F=9>2CIo+f z(BS3N=04z7%kMn638E}20Tj~@R%>3%M#}5Qn#qjgF(l%gz{j~5!l(ow)@~!4&!T*b zV&`gH&#fo;*cs5{&Yb|tXrI@b)$3m9!8z!k7LB`%uTd|FI{^swk&;zW%(dIJhWoC@ z`NBpAUwtRL5T>la&}I6+@Af7Tly|9; zF|Dw4g3q3G-UPyH)scAEcETJ4pFRC~6WD}h88>fEm%nTnCT?J|Vg zB-VkuUUny7(au>rgH z;p0sVVN?P}JWH$cPfO`;mN#L_-!m=+J_Dkx7&Y1ka`( z2~2`(K*}rlC(IvyQIDgh5yW0@RKrd*J6eT~&hx7TqEqD`#vJYQ+A6i%=m#rX0yE6{ zd;eBxy0r^IsfJYj`lj#fl3cLhs1n=H$I+3X_w*-O%64Az>VnnKkWm4x}Z)1a?^;J)n6i5mr1(E_u dfuw*G_zgI<-ZRoj=41c>002ovPDHLkV1ik+zZL)h literal 0 HcmV?d00001 diff --git a/navigationBar/src/main/js/default/common/image_xhdpi/ic_navigation_recent.png b/navigationBar/src/main/js/default/common/image_xhdpi/ic_navigation_recent.png new file mode 100644 index 0000000000000000000000000000000000000000..70544ed52097a4737d285e6286059b153f637922 GIT binary patch literal 411 zcmV;M0c8G(P)Px$RY^oaRA>e5m@#ewK@3G%M5@q0ns9;?OAm*E8=xG9E0DXu1&G)^0HjH(K$A$z zw=_s5&DheetVn;P(HO1$Z9h}F*W)1p5+DH*AORAHBT#r#H%&7}%nRWJb;@Vynkhy7uVHTpfnuf$y-S8bhy zxd8~v-$uy4Lwt?5^@GA+Au3HsuB|0O-{O>fhUq;yV!W=$Ke@8;o(8gF5e{r1g1XMh z31}J-HYX54UFYNkG>r(G6NsR$b8-TjMug1?L{Qf`IRQ;0!sY}bsOy}b34EtO*&cLt zCQ0~~E1So&m8hZigIi*Iu)^ELT4f4d*$q{=rsG{~&7ms0Ay4C`LXwjd|Aw`VX{91D zt_CCk^q=s^-lpx<;su%q6#t2rhXhD~1W14cNZ?-(xB|QwHB#EMI*9-P002ovPDHLk FV1m`7t^oi5 literal 0 HcmV?d00001 diff --git a/navigationBar/src/main/js/default/common/image_xxhdpi/ic_navigation_back.png b/navigationBar/src/main/js/default/common/image_xxhdpi/ic_navigation_back.png new file mode 100644 index 0000000000000000000000000000000000000000..423faea5ed269c070423f59cfe1efcc98eb8e766 GIT binary patch literal 1292 zcmV+n1@roeP)Px(#z{m$RCodHnp=ofRT#%-RPvH#YND2qj*y@smZ&%+!Vp0U4AxyI{QOFCCiZh@vJ_ueC3vU=w~}F zW zj`xhl4Mk6&VdxU_Wzj;0r)QK{zllYa-Cznyw+Vc~!P)01xBKr@hH zvtJ1|1LhYi6yXa61e}pHt#6GMerEp=>_guJr^|{(`9c5zM)ONEdJVbr#szZCHNWA5 zu-pLwM^`3Yp>(A((;8+MY6s2(D~8~60|XeYWm?d*RO4sJw*ux`svbm|3n1WV6}$jF z<8-Z6@D9KnacaSZH3bA1E!^g!$*In@P1pvUTd8_*Y0UruM^FUEUETgc{xx8Z1xKRF zfV=|&OtsBrCu7(SoI6#<5@gvMAi(HytqE8YaUZ8!Z7wwlpLS}c3B3RUPPNTtJ0x}i z$K70(295@r84z&Ba-1bdw?ECU5NN@t+o7elOn`thi0&67gQG>>4`>f?3fWxp*TdXcoTncK%r2!mNNUIwP6O zoHWA8yG584PzMz3DS{^K6+mi6S?9K3;AR5EoTDB1=Sa6JWV$0b6MXT1=MGyZ}$#g2nB$$Ady`JTSM+KweXj@hbueIPOVWxaq>g!#Tu)9WCUu>b%K&SWeNxWmf(K;n z0ZJg|qo=Hv^7fdK&k0000Px)SV=@dRCodHnoVz2RTPF><44p%i;0LyLn=A|2DT0VpiT@Ezz_Za#+h^d1v)j3 zG{!jvlE%a^1Ac+rk^mZ`poAD8q3uA3pY?g|SVIZC)28ynN)--}M6@?|CK zjjmzuO-@d(s&EuCbb=sdhKkOkbLjq-mA=J!E9d~Sz5&F zkQt}d<-HRGF)xDTHT0z&5dB8kO;lYe6nCr3?ZKZ#A4Rvzw-lU%DB0emH-aGM5m3K@ zzOoJdLyoVYY5`ZN;LqFs|JxyPo}l0`I*+OqK8dr#b&sbP@Gdb)Dl+i2DFrREiTsC7uQ0JLq$URITMS6}WF@$u2pb z;o_6%f(5yY{}DN4i%C&}nwIk(=$xF-0sTcW#1@ErM>#xZMIz?|@+GxUi?ihxBM7h> zbJTJUH_?B=eg@df&2cY=yc(NMp^rBSzQTS;-Xdd?Dpg7}AO|^$**iH(0uk!IpUQ9K zAok5T$hAcX;x1|`_t{F_s@Im|6(^S#k;_)L2&SEu6?RHHw+KO`(mE$ZtKDA4oJg>f zCFgm{zqJ2eH$U0UCWt$wwMpD9P35PP(d1vaLGA z#nvAYw5tV!R?|K~IL5BwCUObV_!BY+XAG=nwGhV`Wvy*8K{VZIvPARMz<9NF*8Wet zMv7mXG&5k;qe+q^6GXPXmhmP{`(K~R?cCm7uxJ&3!xA}GE8gABAxJGKWG$RAvYOFC z9BY)dvN;4zS%z^WXx;ERRx94!tpx4DQ4T@7g#Lg0okLKOCfp;9-mM&Krvf2mZm2wEf_U^UIZi~1WpeGS&jZU_0)t<-X&9$MYMPrhQC2N9UKWdzV7 zM;|dbNg6Dd0It<{wva=!l?G%Vb3~3lf4P&LzycH}NU@uiqz|YLS}wiV*EppQs2*5( zYnQmO*3wiSvz4w_xB9qb%TZ8CF9aztmC^X7yS%7l6K(2UM)jC-jY{bS`#%bC^h|XK z)u1npMIi29a*1EH&fhl=%l`I8P{5>u+PBw-1P7wbthQ#f`=GA3-slE)8l7tF3)pz@ z#N85Ir;j*`%vM`bw>iBN6!{=(0bc{^z9>ty8e=r@XD0lES)-?zD-)Hy>Z$bmzap4&9rMVC^y5~ej&T~78cq}<0=sSH#GDg%{)%0OkH sGEf<)3{(ax1C@cwKxLpZ(1L+K0XsN7RY0kk2LJ#707*qoM6N<$f>zO=p#T5? literal 0 HcmV?d00001 diff --git a/navigationBar/src/main/js/default/common/image_xxhdpi/ic_navigation_recent.png b/navigationBar/src/main/js/default/common/image_xxhdpi/ic_navigation_recent.png new file mode 100644 index 0000000000000000000000000000000000000000..591e6ee74ba4d06e4e4b15a758f65c976db233f6 GIT binary patch literal 599 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY1|&n@ZgvM!jKx9jP7LeL$-HD>U=s9naSW+o zd^^k9kJ(V5Epowwg&(Y(T#iaEa0ubZu;h6DKtqH>Nkc&OdV}f3&ZjIcuoEz{ugiz$DPXzyfC;*sl~Y^`GhChXu~FyqA_rzp4!j z{d%h)e{rrW1LvuxO|qHqveucOx^r)txu<=`Hl{i<77VHVkx_Z*|WWl|Q9|b*SiY8PQ zuHjcV^(}k#Y^jIs!_BJ_x>S8{*7Ww7(cVlIcM|fGLH+ M)78&qol`;+0G%T7@&Et; literal 0 HcmV?d00001 diff --git a/navigationBar/src/main/js/default/common/image_xxxhdpi/ic_navigation_back.png b/navigationBar/src/main/js/default/common/image_xxxhdpi/ic_navigation_back.png new file mode 100644 index 0000000000000000000000000000000000000000..c25181eeb2de433b34a77cac139303040302be98 GIT binary patch literal 1743 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 literal 0 HcmV?d00001 diff --git a/navigationBar/src/main/js/default/common/image_xxxhdpi/ic_navigation_recent.png b/navigationBar/src/main/js/default/common/image_xxxhdpi/ic_navigation_recent.png new file mode 100644 index 0000000000000000000000000000000000000000..a2f0f100da7ffcebf3bc965a0df16b1a1a48d05e GIT binary patch literal 733 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-HD>V4Cjf;uuoF z_;$`lKhZ#ewnzh}wQetZSvxmwQuk2*Az=PpRwr{!CHogqogTBcIImm|Q&F!@!wFC2 zcg~(OXVRRV|6~998SUI{p7?D3`};TVv_(cea$sN*XkcJbU|{6H&z#`2!24vB%G=*{ zq1&yyo_D!-i5^v&FWtF2pF>8tW=U%)%%nFZ5AmCrUv z{@E_HZ;oo6UuE@G%QHrbtbGscr@ZJ?Qr-XQ+~*_CRx`g|+4HXXndEz+yw}N_PssXT zR6p9O^mT63l|ApD&ieOZX_CL8jl)N-+ND1hWmIkAsR&&8XN};$h}!KZwm+|Wv^-jO#XELe$cnrjiDMfYwvPz`CIU;W^EbnqfwJ|a>CB*}F9 bJrLX49dOg>=7wfqdS&o*^>bP0l+XkKXxK4{ literal 0 HcmV?d00001 diff --git a/navigationBar/src/main/js/default/i18n/en-US.json b/navigationBar/src/main/js/default/i18n/en-US.json new file mode 100755 index 00000000..9e520910 --- /dev/null +++ b/navigationBar/src/main/js/default/i18n/en-US.json @@ -0,0 +1,4 @@ +{ + "strings": { + } +} \ No newline at end of file diff --git a/navigationBar/src/main/js/default/i18n/zh-CN.json b/navigationBar/src/main/js/default/i18n/zh-CN.json new file mode 100755 index 00000000..9e520910 --- /dev/null +++ b/navigationBar/src/main/js/default/i18n/zh-CN.json @@ -0,0 +1,4 @@ +{ + "strings": { + } +} \ No newline at end of file diff --git a/navigationBar/src/main/js/default/pages/backKey/backKey.css b/navigationBar/src/main/js/default/pages/backKey/backKey.css new file mode 100755 index 00000000..5144f837 --- /dev/null +++ b/navigationBar/src/main/js/default/pages/backKey/backKey.css @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * 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. + */ + +.back { + icon-width: 42px; + icon-height: 42px; + width: 100%; + height: 100%; + background-color: transparent; +} + +.back:active { + background-color: #DCDCDC; +} \ No newline at end of file diff --git a/navigationBar/src/main/js/default/pages/backKey/backKey.hml b/navigationBar/src/main/js/default/pages/backKey/backKey.hml new file mode 100644 index 00000000..f7324ac8 --- /dev/null +++ b/navigationBar/src/main/js/default/pages/backKey/backKey.hml @@ -0,0 +1,18 @@ + + + \ No newline at end of file diff --git a/navigationBar/src/main/js/default/pages/backKey/backKey.js b/navigationBar/src/main/js/default/pages/backKey/backKey.js new file mode 100755 index 00000000..7ea80acf --- /dev/null +++ b/navigationBar/src/main/js/default/pages/backKey/backKey.js @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * 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. + */ + +import input from '@ohos.injectEventHandler'; + +var mDelayTime = 100; + +const KEYCODE = 2; +const KEY_DOWN_DURATION = 1; + +export default { + backClick() { + console.info('=====================test_inject_event back'); + var res; + res = input.injectEventSync({ + isPressed: true, + keyCode: KEYCODE, + keyDownDuration: KEY_DOWN_DURATION + }); + console.info('=====================test_inject_event down res = ' + res); + setTimeout(function () { + res = input.injectEventSync({ + isPressed: false, + keyCode: KEYCODE, + keyDownDuration: KEY_DOWN_DURATION + }); + console.info('=====================test_inject_event up res = ' + res); + }, mDelayTime); + }, +} \ No newline at end of file diff --git a/navigationBar/src/main/js/default/pages/homeKey/homeKey.css b/navigationBar/src/main/js/default/pages/homeKey/homeKey.css new file mode 100755 index 00000000..49304723 --- /dev/null +++ b/navigationBar/src/main/js/default/pages/homeKey/homeKey.css @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * 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. + */ + +.home { + icon-width: 42px; + icon-height: 42px; + width: 100%; + height: 100%; + background-color: transparent; +} + +.home:active { + background-color: #DCDCDC; +} \ No newline at end of file diff --git a/navigationBar/src/main/js/default/pages/homeKey/homeKey.hml b/navigationBar/src/main/js/default/pages/homeKey/homeKey.hml new file mode 100644 index 00000000..b12133b2 --- /dev/null +++ b/navigationBar/src/main/js/default/pages/homeKey/homeKey.hml @@ -0,0 +1,18 @@ + + + \ No newline at end of file diff --git a/navigationBar/src/main/js/default/pages/homeKey/homeKey.js b/navigationBar/src/main/js/default/pages/homeKey/homeKey.js new file mode 100755 index 00000000..fd72000d --- /dev/null +++ b/navigationBar/src/main/js/default/pages/homeKey/homeKey.js @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * 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. + */ + +import feature_ability from '@ohos.feature_ability'; + +const BUNDLE_NAME = "com.ohos.launcher"; +const ABILITY_NAME = "com.ohos.launcher.MainAbility"; +const REQUEST_CODE = 1; +const ABILITY_TYPE = "PageAbility"; +const ACTION = "action1"; +const ENTITIES = ["entity1"]; +const FLAGS = 2; +const DEVICE_ID = "deviceId"; +const SYNC_OPTION = 1; + +export default { + homeClick() { + console.info('homeChange'); + var result = feature_ability.startAbility({ + bundleName: BUNDLE_NAME, + abilityName: ABILITY_NAME, + requestCode: REQUEST_CODE, + abilityType: ABILITY_TYPE, + want: { + action: ACTION, + entities: ENTITIES, + type: ABILITY_TYPE, + flags: FLAGS, + elementName: { + deviceId: DEVICE_ID, + bundleName: BUNDLE_NAME, + abilityName: ABILITY_NAME, + }, + }, + syncOption: SYNC_OPTION, + }).then(data => + console.log('promise::then : ' + data)).catch(error => + console.log('promise::catch : ' + error)); + }, +} \ No newline at end of file diff --git a/navigationBar/src/main/js/default/pages/index/index.css b/navigationBar/src/main/js/default/pages/index/index.css new file mode 100644 index 00000000..c0057f71 --- /dev/null +++ b/navigationBar/src/main/js/default/pages/index/index.css @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * 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. + */ + +.navigation { + justify-content: center; + align-items: center; + justify-content: space-around; + height: 100px; + background-color: #66000000; + padding-left: 130px; + padding-right: 130px; + width: 100%; + position: absolute; + bottom: 0px; +} \ No newline at end of file diff --git a/navigationBar/src/main/js/default/pages/index/index.hml b/navigationBar/src/main/js/default/pages/index/index.hml new file mode 100755 index 00000000..92647163 --- /dev/null +++ b/navigationBar/src/main/js/default/pages/index/index.hml @@ -0,0 +1,26 @@ + + + + + + + \ No newline at end of file diff --git a/navigationBar/src/main/js/default/pages/index/index.js b/navigationBar/src/main/js/default/pages/index/index.js new file mode 100755 index 00000000..1cc169c0 --- /dev/null +++ b/navigationBar/src/main/js/default/pages/index/index.js @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * 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. + */ + +import device from '@system.device'; + +export default { + onInit() { + device.getInfo({ + success: (data) => { + console.log(`Resolution: ${this.width}*${this.height}`); + } + }); + }, +} diff --git a/navigationBar/src/main/js/default/pages/recentKey/recentKey.css b/navigationBar/src/main/js/default/pages/recentKey/recentKey.css new file mode 100755 index 00000000..a159e2e1 --- /dev/null +++ b/navigationBar/src/main/js/default/pages/recentKey/recentKey.css @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * 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. + */ + +.recent { + icon-width: 42px; + icon-height: 42px; + width: 100%; + height: 100%; + background-color: transparent; +} + +.recent:active { + background-color: #DCDCDC; +} \ No newline at end of file diff --git a/navigationBar/src/main/js/default/pages/recentKey/recentKey.hml b/navigationBar/src/main/js/default/pages/recentKey/recentKey.hml new file mode 100644 index 00000000..2856c9a4 --- /dev/null +++ b/navigationBar/src/main/js/default/pages/recentKey/recentKey.hml @@ -0,0 +1,18 @@ + + + \ No newline at end of file diff --git a/navigationBar/src/main/js/default/pages/recentKey/recentKey.js b/navigationBar/src/main/js/default/pages/recentKey/recentKey.js new file mode 100755 index 00000000..70944b1c --- /dev/null +++ b/navigationBar/src/main/js/default/pages/recentKey/recentKey.js @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * 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. + */ + +import feature_ability from '@ohos.feature_ability'; + +const BUNDLE_NAME = "com.ohos.launcher"; +const ABILITY_NAME = "com.ohos.launcher.recents.MainAbility"; +const REQUEST_CODE = 1; +const ABILITY_TYPE = "PageAbility"; +const ACTION = "action1"; +const ENTITIES = ["entity1"]; +const FLAGS = 2; +const DEVICE_ID = "deviceId"; +const SYNC_OPTION =1; + +export default { + recentClick() { + // launcher support + console.log('onRecentClick:'); + var result = feature_ability.startAbility({ + bundleName: BUNDLE_NAME, + abilityName: ABILITY_NAME, + requestCode: REQUEST_CODE, + abilityType: ABILITY_TYPE, + want: { + action: ACTION, + entities: ENTITIES, + type: ABILITY_TYPE, + flags: FLAGS, + elementName: { + deviceId: DEVICE_ID, + bundleName: BUNDLE_NAME, + abilityName: ABILITY_NAME, + }, + }, + syncOption: SYNC_OPTION, + }).then(data => + console.log('promise::then : ' + data)).catch(error => + console.log('promise::catch : ' + error)); + }, +} \ No newline at end of file diff --git a/navigationBar/src/main/resources/base/element/string.json b/navigationBar/src/main/resources/base/element/string.json new file mode 100644 index 00000000..d405647b --- /dev/null +++ b/navigationBar/src/main/resources/base/element/string.json @@ -0,0 +1,12 @@ +{ + "string": [ + { + "name": "app_name", + "value": "MyApplication" + }, + { + "name": "mainability_description", + "value": "JS_Phone_Empty Feature Ability" + } + ] +} \ No newline at end of file diff --git a/navigationBar/src/main/resources/base/media/icon.png b/navigationBar/src/main/resources/base/media/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..ce307a8827bd75456441ceb57d530e4c8d45d36c GIT binary patch literal 6790 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 DOf61= literal 0 HcmV?d00001