From 058a9c9dd40edbe10e32fce62ca0ccb304163350 Mon Sep 17 00:00:00 2001 From: a1nc Date: Wed, 9 Mar 2022 12:34:04 +0800 Subject: [PATCH] support change wallpaper Signed-off-by: yangpeng85 --- AppScope/resources/app.json5 | 0 AppScope/resources/base/element/string.json | 0 AppScope/resources/base/media/app_icon.png | 0 LICENSE | 176 ++++++++++++++++++ OAT.xml | 64 +++++++ README.en.md | 55 +++--- README.md | 57 +++--- build-profile.json5 | 26 +++ entry/build-profile.json5 | 26 +++ entry/hvigorfile.js | 2 + entry/package.json | 13 ++ entry/src/main/ets/MainAbility/MainAbility.ts | 55 ++++++ .../WallpaperExtAbility.ts | 49 +++++ .../ets/WallpaperExtAbility/WallpaperProxy.ts | 49 +++++ entry/src/main/ets/pages/index.ets | 60 ++++++ entry/src/main/module.json5 | 49 +++++ .../main/resources/base/element/string.json | 0 entry/src/main/resources/base/media/icon.png | 0 .../resources/base/profile/main_pages.json | 0 figures/en-us_image_0000001153225717.png | Bin 0 -> 18844 bytes figures/zh-cn_image_0000001153225717.png | Bin 0 -> 18844 bytes hvigorfile.js | 2 + local.properties | 16 ++ package.json | 13 ++ 24 files changed, 658 insertions(+), 54 deletions(-) create mode 100644 AppScope/resources/app.json5 create mode 100644 AppScope/resources/base/element/string.json create mode 100644 AppScope/resources/base/media/app_icon.png create mode 100644 LICENSE create mode 100644 OAT.xml create mode 100644 build-profile.json5 create mode 100644 entry/build-profile.json5 create mode 100644 entry/hvigorfile.js create mode 100644 entry/package.json create mode 100644 entry/src/main/ets/MainAbility/MainAbility.ts create mode 100644 entry/src/main/ets/WallpaperExtAbility/WallpaperExtAbility.ts create mode 100644 entry/src/main/ets/WallpaperExtAbility/WallpaperProxy.ts create mode 100644 entry/src/main/ets/pages/index.ets create mode 100644 entry/src/main/module.json5 create mode 100644 entry/src/main/resources/base/element/string.json create mode 100644 entry/src/main/resources/base/media/icon.png create mode 100644 entry/src/main/resources/base/profile/main_pages.json create mode 100644 figures/en-us_image_0000001153225717.png create mode 100644 figures/zh-cn_image_0000001153225717.png create mode 100644 hvigorfile.js create mode 100644 local.properties create mode 100644 package.json diff --git a/AppScope/resources/app.json5 b/AppScope/resources/app.json5 new file mode 100644 index 0000000..e69de29 diff --git a/AppScope/resources/base/element/string.json b/AppScope/resources/base/element/string.json new file mode 100644 index 0000000..e69de29 diff --git a/AppScope/resources/base/media/app_icon.png b/AppScope/resources/base/media/app_icon.png new file mode 100644 index 0000000..e69de29 diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..d0381d6 --- /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/OAT.xml b/OAT.xml new file mode 100644 index 0000000..bde5765 --- /dev/null +++ b/OAT.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/README.en.md b/README.en.md index e736021..fe9c508 100644 --- a/README.en.md +++ b/README.en.md @@ -1,36 +1,39 @@ -# applications_theme +# Settings -#### Description -{**When you're done, you can delete the content in this README and update the file with details for others getting started with your repository**} +- [Introduction](#section11660541593) + - [Architecture](#section48896451454) -#### Software Architecture -Software architecture description +- [Directory Structure](#section161941989596) +- [Repositories Involved](#section1371113476307) -#### Installation +## Introduction +The Wallpaper is a system application prebuilt in OpenHarmony. It provides a basic ability for users to set system wallpaper, and support change wallpaer by other applications. -1. xxxx -2. xxxx -3. xxxx +### Architecture -#### Instructions +![](figures/en-us_image_0000001153225717.png) -1. xxxx -2. xxxx -3. xxxx +## Directory Structure -#### Contribution +``` +/applications/standard/settings +├── entry # main entry module +│ └── src +│ ├── main +│ ├── ets # ets module +│ └────── ├── pages # pages folder +│ ├── resources # other common resources +│ ├── resources # default resources +│ | └── base # basic language picutre and etc resources +| | ├── element +| | ├── media +| | └── profile +│ └── module.json5 # global config +└── LICENSE # copyright license file +``` -1. Fork the repository -2. Create Feat_xxx branch -3. Commit your code -4. Create Pull Request +## Repositories Involved +System apps -#### 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/) +**applications\_settings** diff --git a/README.md b/README.md index 38d9b0f..060b0a5 100644 --- a/README.md +++ b/README.md @@ -1,39 +1,40 @@ -# applications_theme +# Settings -#### 介绍 -{**以下是 Gitee 平台说明,您可以替换此简介** -Gitee 是 OSCHINA 推出的基于 Git 的代码托管平台(同时支持 SVN)。专为开发者提供稳定、高效、安全的云端软件开发协作平台 -无论是个人、团队、或是企业,都能够用 Gitee 实现代码托管、项目管理、协作开发。企业项目请看 [https://gitee.com/enterprises](https://gitee.com/enterprises)} +- [简介](#section11660541593) + - [架构图](#section48896451454) -#### 软件架构 -软件架构说明 +- [目录](#section161941989596) +- [相关仓](#section1371113476307) +## 简介 -#### 安装教程 +壁纸应用是 OpenHarmony 系统中预置的系统应用,为用户提供设置系统壁纸的基础能力,支持通过其他第三方应用设置用户自定义壁纸。 -1. xxxx -2. xxxx -3. xxxx +### 架构图 -#### 使用说明 +![](figures/zh-cn_image_0000001153225717.png) -1. xxxx -2. xxxx -3. xxxx +## 目录 -#### 参与贡献 +``` +/applications/standard/settings +├── entry # 主entry模块目录 +│ └── src +│ ├── main +│ ├── ets # ets模块目录 +│ └────── ├── pages # 组件页面存放目录 +│ ├── resources # 其它共用资源 +│ ├── resources # 资源配置文件存放目录 +│ | └── base # 默认语言场景,图片资源,字体大小,颜色资源内 +| | ├── element +| | ├── media +| | └── profile +│ └── module.json5 # 全局配置文件 +└── LICENSE # 许可文件 +``` -1. Fork 本仓库 -2. 新建 Feat_xxx 分支 -3. 提交代码 -4. 新建 Pull Request +## 相关仓 +系统应用 -#### 特技 - -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/) +**applications\_themes** diff --git a/build-profile.json5 b/build-profile.json5 new file mode 100644 index 0000000..2c88d3e --- /dev/null +++ b/build-profile.json5 @@ -0,0 +1,26 @@ +{ + "app": { + "signingConfigs": [], + "compileSdkVersion": 9, + "compatibleSdkVersion": 9, + "products": [ + { + "name": "default", + }, + ], + }, + "modules": [ + { + "name": "entry", + "srcPath": "./entry", + "targets": [ + { + "name": "default", + "applyToProducts": [ + "default", + ], + }, + ], + }, + ], +} diff --git a/entry/build-profile.json5 b/entry/build-profile.json5 new file mode 100644 index 0000000..2c88d3e --- /dev/null +++ b/entry/build-profile.json5 @@ -0,0 +1,26 @@ +{ + "app": { + "signingConfigs": [], + "compileSdkVersion": 9, + "compatibleSdkVersion": 9, + "products": [ + { + "name": "default", + }, + ], + }, + "modules": [ + { + "name": "entry", + "srcPath": "./entry", + "targets": [ + { + "name": "default", + "applyToProducts": [ + "default", + ], + }, + ], + }, + ], +} diff --git a/entry/hvigorfile.js b/entry/hvigorfile.js new file mode 100644 index 0000000..5f2735e --- /dev/null +++ b/entry/hvigorfile.js @@ -0,0 +1,2 @@ +// Script for compiling build behavior. It is built in the build plug-in and cannot be modified currently. +module.exports = require('@ohos/hvigor-ohos-plugin').appTasks \ No newline at end of file diff --git a/entry/package.json b/entry/package.json new file mode 100644 index 0000000..4b5112f --- /dev/null +++ b/entry/package.json @@ -0,0 +1,13 @@ +{ + "name": "ohosproject", + "version": "1.0.0", + "ohos": { + "org": "huawei", + "buildTool": "hvigor", + "directoryLevel": "project" + }, + "dependencies": { + "@ohos/hvigor": "0.0.1", + "@ohos/hvigor-ohos-plugin": "0.0.1" + } +} diff --git a/entry/src/main/ets/MainAbility/MainAbility.ts b/entry/src/main/ets/MainAbility/MainAbility.ts new file mode 100644 index 0000000..a846362 --- /dev/null +++ b/entry/src/main/ets/MainAbility/MainAbility.ts @@ -0,0 +1,55 @@ +/** + * Copyright (c) 2022 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 Ability from '@ohos.application.Ability' + +const MODULE_TAG = 'ExtWallpaper : '; + +export default class MainAbility extends Ability { + onCreate(want, launchParam) { + console.info(MODULE_TAG + "onCreate"); + } + + onDestroy() { + console.info(MODULE_TAG + "onDestroy"); + } + + onWindowStageCreate(windowStage) { + console.info(MODULE_TAG + "onWindowStageCreate"); + console.info(MODULE_TAG + "startWallpaperExtAbility begin"); + var want = { + "bundleName": "com.test.testApp", + "abilityName": "com.test.testApp.WallpaperExtAbility", + } + this.context.startAbility(want).then((data) => { + console.info(MODULE_TAG + "startAbility success:" + JSON.stringify(data)); + }).catch((error) => { + console.error(MODULE_TAG + "startAbility failed:" + JSON.stringify(error)); + }) + console.info(MODULE_TAG + "startWallpaperExtAbility end"); + } + + onWindowStageDestroy() { + console.info(MODULE_TAG + "onWindowStageDestroy"); + } + + onForeground() { + console.info(MODULE_TAG + "onForeground"); + } + + onBackground() { + console.info(MODULE_TAG + "onBackground"); + } +} diff --git a/entry/src/main/ets/WallpaperExtAbility/WallpaperExtAbility.ts b/entry/src/main/ets/WallpaperExtAbility/WallpaperExtAbility.ts new file mode 100644 index 0000000..b6c2c0f --- /dev/null +++ b/entry/src/main/ets/WallpaperExtAbility/WallpaperExtAbility.ts @@ -0,0 +1,49 @@ +/** + * Copyright (c) 2022 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. + */ + +const MODULE_TAG = 'ExtWallpaper : '; + +export class WallpaperProxy { + private static instance: WallpaperProxy; + pixelMapCallBack = null; + + private constructor() { + console.info(MODULE_TAG + "proxy initialized"); + }; + + public static getInstance() { + if (!this.instance) { + console.info(MODULE_TAG + "proxy get fresh new"); + this.instance = new WallpaperProxy(); + } + console.info(MODULE_TAG + "proxy get old one"); + return this.instance; + } + + public registerCallback(callback) { + console.info(MODULE_TAG + "proxy register callback type is : " + typeof callback); + this.pixelMapCallBack = callback; + } + + public executeCallback(data) { + console.info(MODULE_TAG + "proxy execute callback start, data is : " + JSON.stringify(data)); + console.info(MODULE_TAG + "proxy execute callback type is : " + typeof this.pixelMapCallBack); + this.pixelMapCallBack(data); + console.info(MODULE_TAG + "proxy execute callback end"); + } +} + +let wallpaperProxyInstance = WallpaperProxy.getInstance(); +export default wallpaperProxyInstance; diff --git a/entry/src/main/ets/WallpaperExtAbility/WallpaperProxy.ts b/entry/src/main/ets/WallpaperExtAbility/WallpaperProxy.ts new file mode 100644 index 0000000..b6c2c0f --- /dev/null +++ b/entry/src/main/ets/WallpaperExtAbility/WallpaperProxy.ts @@ -0,0 +1,49 @@ +/** + * Copyright (c) 2022 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. + */ + +const MODULE_TAG = 'ExtWallpaper : '; + +export class WallpaperProxy { + private static instance: WallpaperProxy; + pixelMapCallBack = null; + + private constructor() { + console.info(MODULE_TAG + "proxy initialized"); + }; + + public static getInstance() { + if (!this.instance) { + console.info(MODULE_TAG + "proxy get fresh new"); + this.instance = new WallpaperProxy(); + } + console.info(MODULE_TAG + "proxy get old one"); + return this.instance; + } + + public registerCallback(callback) { + console.info(MODULE_TAG + "proxy register callback type is : " + typeof callback); + this.pixelMapCallBack = callback; + } + + public executeCallback(data) { + console.info(MODULE_TAG + "proxy execute callback start, data is : " + JSON.stringify(data)); + console.info(MODULE_TAG + "proxy execute callback type is : " + typeof this.pixelMapCallBack); + this.pixelMapCallBack(data); + console.info(MODULE_TAG + "proxy execute callback end"); + } +} + +let wallpaperProxyInstance = WallpaperProxy.getInstance(); +export default wallpaperProxyInstance; diff --git a/entry/src/main/ets/pages/index.ets b/entry/src/main/ets/pages/index.ets new file mode 100644 index 0000000..fd9d93d --- /dev/null +++ b/entry/src/main/ets/pages/index.ets @@ -0,0 +1,60 @@ +/** + * Copyright (c) 2022 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 wallPaper from '@ohos.app.wallpaperability' +import wallpaperProxyInstance from '../WallpaperExtAbility/WallpaperProxy' + +const MODULE_TAG = 'ExtWallpaper : '; +let changeCount = 0; + +@Entry +@Component +struct Index { + @StorageLink('slPixelData') pixelDataByStorage: any = []; + @State pixelDataByCode: PixelMap = undefined; + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Image(this.pixelDataByCode !== undefined ? this.pixelDataByCode : this.pixelDataByStorage) + } + .width('100%') + .height('100%') + } + + aboutToAppear() { + console.info(MODULE_TAG + "index page about to appear"); + this.registerWallpaperChangeCallback(); + console.info(MODULE_TAG + "index page about to appear end"); + } + + onPageShow() { + console.info(MODULE_TAG + "index page show"); + } + + registerWallpaperChangeCallback() { + console.info(MODULE_TAG + 'index start to register callback'); + wallpaperProxyInstance.registerCallback((data) => { + if (data === null || typeof data === 'undefined') { + console.info(MODULE_TAG + 'index page get pixel map data in register callback is null'); + return; + } + console.info(MODULE_TAG + 'index page send pixel map data in register callback : ' + data); + this.pixelDataByCode = data; + console.info(MODULE_TAG + 'index page get pixel map data in register callback end'); + }); + AppStorage.SetOrCreate('slWallpaperProxy', wallpaperProxyInstance); + console.info(MODULE_TAG + 'end to register callback'); + } +} \ No newline at end of file diff --git a/entry/src/main/module.json5 b/entry/src/main/module.json5 new file mode 100644 index 0000000..5f99162 --- /dev/null +++ b/entry/src/main/module.json5 @@ -0,0 +1,49 @@ +{ + "module": { + "name": "entry", + "type": "entry", + "description": "$string:entry_desc", + "mainElement": "MainAbility", + "deviceTypes": [ + "phone", + "tablet", + "wearable", + "car", + "tv", + ], + "deliveryWithInstall": true, + "installationFree": false, + "pages": "$profile:main_pages", + "uiSyntax": "ets", + "abilities": [ + { + "name": "MainAbility", + "srcEntrance": "./ets/MainAbility/MainAbility.ts", + "description": "$string:MainAbility_desc", + "icon": "$media:icon", + "label": "$string:MainAbility_label", + "visible": true, + "skills": [ + { + "entities": [ + "entity.system.home", + ], + "actions": [ + "action.system.home", + ], + }, + ], + }, + ], + "extensionAbilities": [ + { + "srcEntrance": "./ets/WallpaperExtAbility/WallpaperExtAbility.ts", + "name":"WallpaperExtAbility", + "icon": "$media:icon", + "description": "WallpaperExtAbility", + "type": "wallpaper", + "visible": true + } + ] + }, +} \ 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 0000000..e69de29 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 0000000..e69de29 diff --git a/entry/src/main/resources/base/profile/main_pages.json b/entry/src/main/resources/base/profile/main_pages.json new file mode 100644 index 0000000..e69de29 diff --git a/figures/en-us_image_0000001153225717.png b/figures/en-us_image_0000001153225717.png new file mode 100644 index 0000000000000000000000000000000000000000..845afa6cda33486e2a878499bd6412c745d6e63f GIT binary patch literal 18844 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