diff --git a/waylau/README.md b/waylau/README.md new file mode 100644 index 0000000000000000000000000000000000000000..bbfa3188b13c0148482a934a0b9e5bd3d6f6a7b3 --- /dev/null +++ b/waylau/README.md @@ -0,0 +1,54 @@ +# HarmonyOS Tutorial.《跟老卫学HarmonyOS开发》精选 + +![](images/harmonyOS_logo.png) + +*HarmonyOS Tutorial*, is a book about how to develop HarmonyOS applications. + + +本页示例精选自[《跟老卫学HarmonyOS开发》](https://github.com/waylau/harmonyos-tutorial)。这是一本 HarmonyOS 应用开发的开源学习教程,主要介绍如何从0开始开发 HarmonyOS 应用。本书包括最新版本 HarmonyOS 3.0 中的新特性。图文并茂,并通过大量实例带你走近 HarmonyOS 的世界! + +要体验完整的HarmonyOS学习教程,请访问原[链接](https://github.com/waylau/harmonyos-tutorial)。 + + +## Summary 目录 + + +* [HarmonyOS之Ability01——AbilitySlice间导航](https://developer.huawei.com/consumer/cn/forum/topic/0202443001580950502?fid=0101303901040230869) +* [HarmonyOS之线程01——ParallelTaskDispatcher派发任务](https://developer.huawei.com/consumer/cn/forum/topic/0204460939630370009?fid=0101303901040230869) +* [HarmonyOS之线程02——EventHandler处理线程间通信](https://developer.huawei.com/consumer/cn/forum/topic/0204461048552100015?fid=0101303901040230869) +* [一个HarmonyOS Service Ability生命周期的例子](https://developer.huawei.com/consumer/cn/forum/topic/0201578738626200065?fid=0101303901040230869) +* [HarmonyOS DataAbilityHelper访问文件的例子](https://developer.huawei.com/consumer/cn/forum/topic/0202578740019440052?fid=0101303901040230869) +* [HarmonyOS DataAbilityHelper访问数据库的例子](https://developer.huawei.com/consumer/cn/forum/topic/0202578740728040053?fid=0101303901040230869) +* [使用Java轻松实现一个HarmonyOS服务卡片](https://developer.huawei.com/consumer/cn/forum/topic/0201592758640690342?fid=0101303901040230869) +* [HarmonyOS实现跨设备迁移与回迁](https://developer.huawei.com/consumer/cn/forum/topic/0201628139884080274?fid=0101303901040230869) +* [HarmonyOS实现多设备协同](https://developer.huawei.com/consumer/cn/forum/topic/0201628168180890276?fid=0101303901040230869) +* [HarmonyOS跳转到系统应用拨号盘](https://developer.huawei.com/consumer/cn/forum/topic/0201659093603710707?fid=0101303901040230869) +* [HarmonyOS跳转到应用管理](https://developer.huawei.com/consumer/cn/forum/topic/0202660722259570963?fid=0101591351254000314) +* [HarmonyOS跳转到搜索](https://developer.huawei.com/consumer/cn/forum/topic/0202663401260600008?fid=0101591351254000314) +* [HarmonyOS跳转到指定URI进行访问](https://developer.huawei.com/consumer/cn/forum/topic/0201673625843820338?fid=0101591351254000314) +* [HarmonyOS JS UI之Chart、 Switch组件的组合使用](https://developer.huawei.com/consumer/cn/forum/topic/0202678203858060455?fid=0101591351254000314) +* [HarmonyOS获取系统内存大小、可用内存](https://developer.huawei.com/consumer/cn/forum/topic/0202700471997530007?fid=0101591351254000314) +* [#HarmonyOS挑战赛第二期#仿抖音短视频应用]( +https://developer.huawei.com/consumer/cn/forum/topic/0201692989697260758?fid=0101303901040230869) +* [#HarmonyOS挑战赛第三期#“心目中的1024程序员节”爱“HarmonyOS”](https://developer.huawei.com/consumer/cn/forum/topic/0201697127022460928?fid=0101587866109860105) +* [#HarmonyOS技术训练营第三期#探探老婆在干嘛——通过HarmonyOS分布式文件获取对方手机内容](https://developer.huawei.com/consumer/cn/forum/topic/0203702299511520008?fid=0101591351254000314) +* [#HarmonyOS挑战赛第四期#使用ArkUI开发一个图片滑动播放功能HarmonyOS应用](https://developer.huawei.com/consumer/cn/forum/topic/0204705003425460081?fid=0101591351254000314) +* [#HarmonyOS征文#基于HarmonyOS ArkUI 3.0 框架,我成功开发了图片自动播放功能](https://developer.huawei.com/consumer/cn/forum/topic/0204705883233030129?fid=0101591351254000314) +* [基于HarmonyOS ArkUI 3.0 框架,开发了菜谱自动展播的应用](https://www.bilibili.com/video/BV1T34y1Z7X3/)(视频) + +## Issue 意见、建议 + +如有勘误、意见或建议欢迎拍砖 + +## Contact 联系作者 + +* Blog: [waylau.com](http://waylau.com) +* Gmail: [waylau521(at)gmail.com](mailto:waylau521@gmail.com) +* Weibo: [waylau521](http://weibo.com/waylau521) +* Twitter: [waylau521](https://twitter.com/waylau521) +* Github : [waylau](https://github.com/waylau) + + +## Support Me 请老卫喝一杯 + +![开源捐赠](https://waylau.com/images/showmethemoney-sm.jpg) diff --git "a/\346\237\263\344\274\237\345\215\253/\344\275\234\345\223\201\346\274\224\347\244\272\350\247\206\351\242\221/#HarmonyOS\346\214\221\346\210\230\350\265\233\347\254\254\344\272\214\346\234\237#\344\273\277\346\212\226\351\237\263\347\237\255\350\247\206\351\242\221\345\272\224\347\224\250\345\261\225\347\244\272.mp4" "b/waylau/case-show/#HarmonyOS\346\214\221\346\210\230\350\265\233\347\254\254\344\272\214\346\234\237#\344\273\277\346\212\226\351\237\263\347\237\255\350\247\206\351\242\221\345\272\224\347\224\250\345\261\225\347\244\272.mp4" similarity index 100% rename from "\346\237\263\344\274\237\345\215\253/\344\275\234\345\223\201\346\274\224\347\244\272\350\247\206\351\242\221/#HarmonyOS\346\214\221\346\210\230\350\265\233\347\254\254\344\272\214\346\234\237#\344\273\277\346\212\226\351\237\263\347\237\255\350\247\206\351\242\221\345\272\224\347\224\250\345\261\225\347\244\272.mp4" rename to "waylau/case-show/#HarmonyOS\346\214\221\346\210\230\350\265\233\347\254\254\344\272\214\346\234\237#\344\273\277\346\212\226\351\237\263\347\237\255\350\247\206\351\242\221\345\272\224\347\224\250\345\261\225\347\244\272.mp4" diff --git a/waylau/images/AbilityServiceWidget.png b/waylau/images/AbilityServiceWidget.png new file mode 100644 index 0000000000000000000000000000000000000000..0083e3b9502d6fde4eb8e5f1cf7a37e8ab0afe55 Binary files /dev/null and b/waylau/images/AbilityServiceWidget.png differ diff --git a/waylau/images/Tetris.png b/waylau/images/Tetris.png new file mode 100644 index 0000000000000000000000000000000000000000..392842c20c37ed458c0ac62c5ee70327986aea77 Binary files /dev/null and b/waylau/images/Tetris.png differ diff --git a/waylau/images/VedioPlayer.png b/waylau/images/VedioPlayer.png new file mode 100644 index 0000000000000000000000000000000000000000..e26467768c859f4937a7d332df81ae1ad092f710 Binary files /dev/null and b/waylau/images/VedioPlayer.png differ diff --git a/waylau/images/harmonyOS_logo.png b/waylau/images/harmonyOS_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..c65bfe7cdcf5065a36caba63171c7241b8a7d8f4 Binary files /dev/null and b/waylau/images/harmonyOS_logo.png differ diff --git a/waylau/images/logo.jpg b/waylau/images/logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8517938003e468260e0214a69f5a9c9645b36720 Binary files /dev/null and b/waylau/images/logo.jpg differ diff --git a/waylau/samples/AbilityServiceWidget/.gitignore b/waylau/samples/AbilityServiceWidget/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..0f1d13704cb812d9e0568bea7559b7fd9c032d51 --- /dev/null +++ b/waylau/samples/AbilityServiceWidget/.gitignore @@ -0,0 +1,9 @@ +*.iml +.gradle +/local.properties +/.idea +.DS_Store +/build +/captures +.externalNativeBuild +.cxx diff --git a/waylau/samples/AbilityServiceWidget/build.gradle b/waylau/samples/AbilityServiceWidget/build.gradle new file mode 100644 index 0000000000000000000000000000000000000000..d3863b1202b6b36070a55b5f84ec2efcff54eb0c --- /dev/null +++ b/waylau/samples/AbilityServiceWidget/build.gradle @@ -0,0 +1,38 @@ +// Top-level build file where you can add configuration options common to all sub-projects/modules. +apply plugin: 'com.huawei.ohos.app' + +//For instructions on signature configuration, see https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ide_debug_device-0000001053822404#ZH-CN_TOPIC_0000001154985555__section1112183053510 +ohos { + compileSdkVersion 5 + defaultConfig { + compatibleSdkVersion 5 + } +} + +buildscript { + repositories { + maven { + url 'https://repo.huaweicloud.com/repository/maven/' + } + maven { + url 'https://developer.huawei.com/repo/' + } + jcenter() + } + dependencies { + classpath 'com.huawei.ohos:hap:3.0.3.4' + classpath 'com.huawei.ohos:decctest:1.2.6.0' + } +} + +allprojects { + repositories { + maven { + url 'https://repo.huaweicloud.com/repository/maven/' + } + maven { + url 'https://developer.huawei.com/repo/' + } + jcenter() + } +} diff --git "a/\346\237\263\344\274\237\345\215\253/app\346\272\220\347\240\201/Douyin/entrytv/.gitignore" b/waylau/samples/AbilityServiceWidget/entry/.gitignore similarity index 100% rename from "\346\237\263\344\274\237\345\215\253/app\346\272\220\347\240\201/Douyin/entrytv/.gitignore" rename to waylau/samples/AbilityServiceWidget/entry/.gitignore diff --git a/waylau/samples/AbilityServiceWidget/entry/build.gradle b/waylau/samples/AbilityServiceWidget/entry/build.gradle new file mode 100644 index 0000000000000000000000000000000000000000..f6c8444fa737c652033ba6fc09ca05ed8852baaa --- /dev/null +++ b/waylau/samples/AbilityServiceWidget/entry/build.gradle @@ -0,0 +1,27 @@ +apply plugin: 'com.huawei.ohos.hap' +apply plugin: 'com.huawei.ohos.decctest' +//For instructions on signature configuration, see https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ide_debug_device-0000001053822404#ZH-CN_TOPIC_0000001154985555__section1112183053510 +ohos { + compileSdkVersion 5 + defaultConfig { + compatibleSdkVersion 5 + } + buildTypes { + release { + proguardOpt { + proguardEnabled false + rulesFiles 'proguard-rules.pro' + } + } + } + +} + +dependencies { + implementation fileTree(dir: 'libs', include: ['*.jar', '*.har']) + testImplementation 'junit:junit:4.13' + ohosTestImplementation 'com.huawei.ohos.testkit:runner:1.0.0.100' +} +decc { + supportType = ['html','xml'] +} diff --git "a/\346\237\263\344\274\237\345\215\253/app\346\272\220\347\240\201/Douyin/entrytv/proguard-rules.pro" b/waylau/samples/AbilityServiceWidget/entry/proguard-rules.pro similarity index 100% rename from "\346\237\263\344\274\237\345\215\253/app\346\272\220\347\240\201/Douyin/entrytv/proguard-rules.pro" rename to waylau/samples/AbilityServiceWidget/entry/proguard-rules.pro diff --git a/waylau/samples/AbilityServiceWidget/entry/src/main/config.json b/waylau/samples/AbilityServiceWidget/entry/src/main/config.json new file mode 100644 index 0000000000000000000000000000000000000000..aebbe2c37bae9f04ade361ba853c3950b9aeb45a --- /dev/null +++ b/waylau/samples/AbilityServiceWidget/entry/src/main/config.json @@ -0,0 +1,69 @@ +{ + "app": { + "bundleName": "com.waylau.hmos.abilityservicewidget", + "vendor": "waylau", + "version": { + "code": 1000000, + "name": "1.0.0" + } + }, + "deviceConfig": {}, + "module": { + "package": "com.waylau.hmos.abilityservicewidget", + "name": ".MyApplication", + "mainAbility": "com.waylau.hmos.abilityservicewidget.MainAbility", + "deviceType": [ + "phone" + ], + "distro": { + "deliveryWithInstall": true, + "moduleName": "entry", + "moduleType": "entry", + "installationFree": false + }, + "abilities": [ + { + "skills": [ + { + "entities": [ + "entity.system.home" + ], + "actions": [ + "action.system.home" + ] + } + ], + "orientation": "unspecified", + "name": "com.waylau.hmos.abilityservicewidget.MainAbility", + "icon": "$media:icon", + "description": "$string:mainability_description", + "label": "$string:entry_MainAbility", + "type": "page", + "launchType": "standard", + "formsEnabled": true, + "forms": [ + { + "landscapeLayouts": [ + "$layout:form_image_with_information_photowidget_2_2" + ], + "isDefault": true, + "scheduledUpdateTime": "10:30", + "defaultDimension": "2*2", + "name": "PhotoWidget", + "description": "This is a photo service widget", + "colorMode": "auto", + "type": "Java", + "supportDimensions": [ + "2*2" + ], + "portraitLayouts": [ + "$layout:form_image_with_information_photowidget_2_2" + ], + "updateEnabled": true, + "updateDuration": 1 + } + ] + } + ] + } +} \ No newline at end of file diff --git a/waylau/samples/AbilityServiceWidget/entry/src/main/java/com/waylau/hmos/abilityservicewidget/MainAbility.java b/waylau/samples/AbilityServiceWidget/entry/src/main/java/com/waylau/hmos/abilityservicewidget/MainAbility.java new file mode 100644 index 0000000000000000000000000000000000000000..3676b3031bd144590ef1294fb0f8e81146d8c9c4 --- /dev/null +++ b/waylau/samples/AbilityServiceWidget/entry/src/main/java/com/waylau/hmos/abilityservicewidget/MainAbility.java @@ -0,0 +1,110 @@ +package com.waylau.hmos.abilityservicewidget; + +import com.waylau.hmos.abilityservicewidget.slice.MainAbilitySlice; +import com.waylau.hmos.abilityservicewidget.widget.controller.*; +import ohos.aafwk.ability.Ability; +import ohos.aafwk.ability.AbilitySlice; +import ohos.aafwk.ability.ProviderFormInfo; +import ohos.aafwk.content.Intent; +import ohos.hiviewdfx.HiLog; +import ohos.hiviewdfx.HiLogLabel; + +public class MainAbility extends Ability { + public static final int DEFAULT_DIMENSION_2X2 = 2; + public static final int DIMENSION_1X2 = 1; + public static final int DIMENSION_2X4 = 3; + public static final int DIMENSION_4X4 = 4; + private static final int INVALID_FORM_ID = -1; + private static final HiLogLabel TAG = new HiLogLabel(HiLog.DEBUG, 0x0, MainAbility.class.getName()); + private String topWidgetSlice; + + @Override + public void onStart(Intent intent) { + super.onStart(intent); + super.setMainRoute(MainAbilitySlice.class.getName()); + if (intentFromWidget(intent)) { + topWidgetSlice = getRoutePageSlice(intent); + if (topWidgetSlice != null) { + setMainRoute(topWidgetSlice); + } + } + stopAbility(intent); + } + + @Override + protected ProviderFormInfo onCreateForm(Intent intent) { + HiLog.info(TAG, "onCreateForm"); + long formId = intent.getLongParam(AbilitySlice.PARAM_FORM_IDENTITY_KEY, INVALID_FORM_ID); + String formName = intent.getStringParam(AbilitySlice.PARAM_FORM_NAME_KEY); + int dimension = intent.getIntParam(AbilitySlice.PARAM_FORM_DIMENSION_KEY, DEFAULT_DIMENSION_2X2); + HiLog.info(TAG, "onCreateForm: formId=" + formId + ",formName=" + formName); + FormControllerManager formControllerManager = FormControllerManager.getInstance(this); + FormController formController = formControllerManager.getController(formId); + formController = (formController == null) ? formControllerManager.createFormController(formId, + formName, dimension) : formController; + if (formController == null) { + HiLog.error(TAG, "Get null controller. formId: " + formId + ", formName: " + formName); + return null; + } + return formController.bindFormData(); + } + + @Override + protected void onUpdateForm(long formId) { + HiLog.info(TAG, "onUpdateForm"); + super.onUpdateForm(formId); + FormControllerManager formControllerManager = FormControllerManager.getInstance(this); + FormController formController = formControllerManager.getController(formId); + formController.updateFormData(formId); + } + + @Override + protected void onDeleteForm(long formId) { + HiLog.info(TAG, "onDeleteForm: formId=" + formId); + super.onDeleteForm(formId); + FormControllerManager formControllerManager = FormControllerManager.getInstance(this); + formControllerManager.deleteFormController(formId); + } + + @Override + protected void onTriggerFormEvent(long formId, String message) { + HiLog.info(TAG, "onTriggerFormEvent: " + message); + super.onTriggerFormEvent(formId, message); + FormControllerManager formControllerManager = FormControllerManager.getInstance(this); + FormController formController = formControllerManager.getController(formId); + formController.onTriggerFormEvent(formId, message); + } + + @Override + public void onNewIntent(Intent intent) { + if (intentFromWidget(intent)) { // Only response to it when starting from a service widget. + String newWidgetSlice = getRoutePageSlice(intent); + if (topWidgetSlice == null || !topWidgetSlice.equals(newWidgetSlice)) { + topWidgetSlice = newWidgetSlice; + restart(); + } + } + } + + private boolean intentFromWidget(Intent intent) { + long formId = intent.getLongParam(AbilitySlice.PARAM_FORM_IDENTITY_KEY, INVALID_FORM_ID); + return formId != INVALID_FORM_ID; + } + + private String getRoutePageSlice(Intent intent) { + long formId = intent.getLongParam(AbilitySlice.PARAM_FORM_IDENTITY_KEY, INVALID_FORM_ID); + if (formId == INVALID_FORM_ID) { + return null; + } + FormControllerManager formControllerManager = FormControllerManager.getInstance(this); + FormController formController = formControllerManager.getController(formId); + if (formController == null) { + return null; + } + Class clazz = formController.getRoutePageSlice(intent); + if (clazz == null) { + return null; + } + return clazz.getName(); + } +} diff --git a/waylau/samples/AbilityServiceWidget/entry/src/main/java/com/waylau/hmos/abilityservicewidget/MyApplication.java b/waylau/samples/AbilityServiceWidget/entry/src/main/java/com/waylau/hmos/abilityservicewidget/MyApplication.java new file mode 100644 index 0000000000000000000000000000000000000000..07915fc393f4d9dba6bc613864f454ac175dc118 --- /dev/null +++ b/waylau/samples/AbilityServiceWidget/entry/src/main/java/com/waylau/hmos/abilityservicewidget/MyApplication.java @@ -0,0 +1,10 @@ +package com.waylau.hmos.abilityservicewidget; + +import ohos.aafwk.ability.AbilityPackage; + +public class MyApplication extends AbilityPackage { + @Override + public void onInitialize() { + super.onInitialize(); + } +} diff --git a/waylau/samples/AbilityServiceWidget/entry/src/main/java/com/waylau/hmos/abilityservicewidget/slice/MainAbilitySlice.java b/waylau/samples/AbilityServiceWidget/entry/src/main/java/com/waylau/hmos/abilityservicewidget/slice/MainAbilitySlice.java new file mode 100644 index 0000000000000000000000000000000000000000..564b81ed514336c8778a2e3ae95b646fea9f329f --- /dev/null +++ b/waylau/samples/AbilityServiceWidget/entry/src/main/java/com/waylau/hmos/abilityservicewidget/slice/MainAbilitySlice.java @@ -0,0 +1,23 @@ +package com.waylau.hmos.abilityservicewidget.slice; + +import com.waylau.hmos.abilityservicewidget.ResourceTable; +import ohos.aafwk.ability.AbilitySlice; +import ohos.aafwk.content.Intent; + +public class MainAbilitySlice extends AbilitySlice { + @Override + public void onStart(Intent intent) { + super.onStart(intent); + super.setUIContent(ResourceTable.Layout_ability_main); + } + + @Override + public void onActive() { + super.onActive(); + } + + @Override + public void onForeground(Intent intent) { + super.onForeground(intent); + } +} diff --git a/waylau/samples/AbilityServiceWidget/entry/src/main/java/com/waylau/hmos/abilityservicewidget/widget/controller/FormController.java b/waylau/samples/AbilityServiceWidget/entry/src/main/java/com/waylau/hmos/abilityservicewidget/widget/controller/FormController.java new file mode 100644 index 0000000000000000000000000000000000000000..139fe2cf5fc0ade1f07b43ea5e9801ae54a8871f --- /dev/null +++ b/waylau/samples/AbilityServiceWidget/entry/src/main/java/com/waylau/hmos/abilityservicewidget/widget/controller/FormController.java @@ -0,0 +1,63 @@ +package com.waylau.hmos.abilityservicewidget.widget.controller; + +import ohos.aafwk.ability.AbilitySlice; +import ohos.aafwk.ability.ProviderFormInfo; +import ohos.aafwk.content.Intent; +import ohos.app.Context; + +/** + * The api set for form controller. + */ +public abstract class FormController { + /** + * Context of ability + */ + protected final Context context; + + /** + * The name of current form service widget + */ + protected final String formName; + + /** + * The dimension of current form service widget + */ + protected final int dimension; + + public FormController(Context context, String formName, Integer dimension) { + this.context = context; + this.formName = formName; + this.dimension = dimension; + } + + /** + * Bind data for a form + * + * @return ProviderFormInfo + */ + public abstract ProviderFormInfo bindFormData(); + + /** + * Update form data + * + * @param formId the id of service widget to be updated + * @param vars the data to update for service widget, this parameter is optional + */ + public abstract void updateFormData(long formId, Object... vars); + + /** + * Called when receive service widget message event + * + * @param formId form id + * @param message the message context sent by service widget message event + */ + public abstract void onTriggerFormEvent(long formId, String message); + + /** + * Get the destination ability slice to route + * + * @param intent intent of current page slice + * @return the destination ability slice name to route + */ + public abstract Class getRoutePageSlice(Intent intent); +} diff --git a/waylau/samples/AbilityServiceWidget/entry/src/main/java/com/waylau/hmos/abilityservicewidget/widget/controller/FormControllerManager.java b/waylau/samples/AbilityServiceWidget/entry/src/main/java/com/waylau/hmos/abilityservicewidget/widget/controller/FormControllerManager.java new file mode 100644 index 0000000000000000000000000000000000000000..e8735ff5282f92b34784abfd91ba2b5a5dfbb1bd --- /dev/null +++ b/waylau/samples/AbilityServiceWidget/entry/src/main/java/com/waylau/hmos/abilityservicewidget/widget/controller/FormControllerManager.java @@ -0,0 +1,183 @@ +package com.waylau.hmos.abilityservicewidget.widget.controller; + +import ohos.app.Context; +import ohos.data.DatabaseHelper; +import ohos.data.preferences.Preferences; +import ohos.hiviewdfx.HiLog; +import ohos.hiviewdfx.HiLogLabel; +import ohos.utils.zson.ZSONObject; + +import java.lang.reflect.InvocationTargetException; +import java.util.HashMap; +import java.util.Locale; +import java.util.Map; +import java.util.List; +import java.util.ArrayList; + +/** + * Form controller manager. + */ +public class FormControllerManager { + private static final HiLogLabel TAG = new HiLogLabel(HiLog.DEBUG, 0x0, FormControllerManager.class.getName()); + private static final String PACKAGE_PATH = "com.waylau.hmos.abilityservicewidget.widget"; + private static final String SHARED_SP_NAME = "form_info_sp.xml"; + private static final String FORM_NAME = "formName"; + private static final String DIMENSION = "dimension"; + private static FormControllerManager managerInstance = null; + private final HashMap controllerHashMap = new HashMap<>(); + + private final Context context; + + private final Preferences preferences; + + /** + * Constructor with context. + * + * @param context instance of Context. + */ + private FormControllerManager(Context context) { + this.context = context; + DatabaseHelper databaseHelper = new DatabaseHelper(this.context.getApplicationContext()); + preferences = databaseHelper.getPreferences(SHARED_SP_NAME); + } + + /** + * Singleton mode. + * + * @param context instance of Context. + * @return FormControllerManager instance. + */ + public static FormControllerManager getInstance(Context context) { + if (managerInstance == null) { + synchronized (FormControllerManager.class) { + if (managerInstance == null) { + managerInstance = new FormControllerManager(context); + } + } + } + return managerInstance; + } + + /** + * Save the form id and form name. + * + * @param formId form id. + * @param formName form name. + * @param dimension form dimension + * @return FormController form controller + */ + public FormController createFormController(long formId, String formName, int dimension) { + synchronized (controllerHashMap) { + if (formId < 0 || formName.isEmpty()) { + return null; + } + HiLog.info(TAG, + "saveFormId() formId: " + formId + ", formName: " + formName + ", preferences: " + preferences); + if (preferences != null) { + ZSONObject formObj = new ZSONObject(); + formObj.put(FORM_NAME, formName); + formObj.put(DIMENSION, dimension); + preferences.putString(Long.toString(formId), ZSONObject.toZSONString(formObj)); + preferences.flushSync(); + } + + // Create controller instance. + FormController controller = newInstance(formName, dimension, context); + + // Cache the controller. + if (controller != null) { + if (!controllerHashMap.containsKey(formId)) { + controllerHashMap.put(formId, controller); + } + } + + return controller; + } + } + + /** + * Get the form controller instance. + * + * @param formId form id. + * @return the instance of form controller. + */ + public FormController getController(long formId) { + synchronized (controllerHashMap) { + if (controllerHashMap.containsKey(formId)) { + return controllerHashMap.get(formId); + } + Map forms = preferences.getAll(); + String formIdString = Long.toString(formId); + if (forms.containsKey(formIdString)) { + ZSONObject formObj = ZSONObject.stringToZSON((String) forms.get(formIdString)); + String formName = formObj.getString(FORM_NAME); + int dimension = formObj.getIntValue(DIMENSION); + FormController controller = newInstance(formName, dimension, context); + controllerHashMap.put(formId, controller); + } + return controllerHashMap.get(formId); + } + } + + private FormController newInstance(String formName, int dimension, Context context) { + FormController ctrInstance = null; + if (formName == null || formName.isEmpty()) { + HiLog.error(TAG, "newInstance() get empty form name"); + return ctrInstance; + } + try { + String className = PACKAGE_PATH + "." + formName.toLowerCase(Locale.ROOT) + "." + + getClassNameByFormName(formName); + Class clazz = Class.forName(className); + if (clazz != null) { + Object controllerInstance = clazz.getConstructor(Context.class, String.class, Integer.class) + .newInstance(context, formName, dimension); + if (controllerInstance instanceof FormController) { + ctrInstance = (FormController) controllerInstance; + } + } + } catch (NoSuchMethodException | InstantiationException | IllegalArgumentException | InvocationTargetException + | IllegalAccessException | ClassNotFoundException | SecurityException exception) { + HiLog.error(TAG, "newInstance() get exception: " + exception.getMessage()); + } + return ctrInstance; + } + + /** + * Get all form id from the share preference + * + * @return form id list + */ + public List getAllFormIdFromSharePreference() { + List result = new ArrayList<>(); + Map forms = preferences.getAll(); + for (String formId : forms.keySet()) { + result.add(Long.parseLong(formId)); + } + return result; + } + + /** + * Delete a form controller + * + * @param formId form id + */ + public void deleteFormController(long formId) { + synchronized (controllerHashMap) { + preferences.delete(Long.toString(formId)); + preferences.flushSync(); + controllerHashMap.remove(formId); + } + } + + private String getClassNameByFormName(String formName) { + String[] strings = formName.split("_"); + StringBuilder result = new StringBuilder(); + for (String string : strings) { + result.append(string); + } + char[] charResult = result.toString().toCharArray(); + charResult[0] = (charResult[0] >= 'a' && charResult[0] <= 'z') ? (char) (charResult[0] - 32) : charResult[0]; + return String.copyValueOf(charResult) + "Impl"; + } +} diff --git a/waylau/samples/AbilityServiceWidget/entry/src/main/java/com/waylau/hmos/abilityservicewidget/widget/photowidget/PhotoWidgetImpl.java b/waylau/samples/AbilityServiceWidget/entry/src/main/java/com/waylau/hmos/abilityservicewidget/widget/photowidget/PhotoWidgetImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..f96a288caf5ba37e7fe1478ebea44a9e05b7b2ab --- /dev/null +++ b/waylau/samples/AbilityServiceWidget/entry/src/main/java/com/waylau/hmos/abilityservicewidget/widget/photowidget/PhotoWidgetImpl.java @@ -0,0 +1,50 @@ +package com.waylau.hmos.abilityservicewidget.widget.photowidget; + +import com.waylau.hmos.abilityservicewidget.ResourceTable; +import com.waylau.hmos.abilityservicewidget.widget.controller.FormController; + +import ohos.aafwk.ability.AbilitySlice; +import ohos.aafwk.ability.ProviderFormInfo; +import ohos.aafwk.content.Intent; +import ohos.app.Context; +import ohos.hiviewdfx.HiLog; +import ohos.hiviewdfx.HiLogLabel; + +import java.util.HashMap; +import java.util.Map; + +public class PhotoWidgetImpl extends FormController { + private static final HiLogLabel TAG = new HiLogLabel(HiLog.DEBUG, 0x0, PhotoWidgetImpl.class.getName()); + private static final int DEFAULT_DIMENSION_2X2 = 2; + private static final Map RESOURCE_ID_MAP = new HashMap<>(); + + static { + RESOURCE_ID_MAP.put(DEFAULT_DIMENSION_2X2, ResourceTable.Layout_form_image_with_information_photowidget_2_2); + } + + public PhotoWidgetImpl(Context context, String formName, Integer dimension) { + super(context, formName, dimension); + } + + @Override + public ProviderFormInfo bindFormData() { + HiLog.info(TAG, "bind form data when create form"); + return new ProviderFormInfo(RESOURCE_ID_MAP.get(dimension), context); + } + + @Override + public void updateFormData(long formId, Object... vars) { + HiLog.info(TAG, "update form data timing, default 30 minutes"); + } + + @Override + public void onTriggerFormEvent(long formId, String message) { + HiLog.info(TAG, "handle card click event."); + } + + @Override + public Class getRoutePageSlice(Intent intent) { + HiLog.info(TAG, "get the default page to route when you click card."); + return null; + } +} \ No newline at end of file diff --git a/waylau/samples/AbilityServiceWidget/entry/src/main/resources/base/element/string.json b/waylau/samples/AbilityServiceWidget/entry/src/main/resources/base/element/string.json new file mode 100644 index 0000000000000000000000000000000000000000..d12cf0efbe319a7bd861ee735827ddaa879b0952 --- /dev/null +++ b/waylau/samples/AbilityServiceWidget/entry/src/main/resources/base/element/string.json @@ -0,0 +1,24 @@ +{ + "string": [ + { + "name": "entry_MainAbility", + "value": "entry_MainAbility" + }, + { + "name": "mainability_description", + "value": "Java_Empty Ability" + }, + { + "name": "mainability_HelloWorld", + "value": "Hello World" + }, + { + "name": "photowidget_title", + "value": "我的狗狗" + }, + { + "name": "photowidget_introduction", + "value": "狗狗撒娇!" + } + ] +} \ No newline at end of file diff --git "a/\346\237\263\344\274\237\345\215\253/app\346\272\220\347\240\201/Douyin/commonlib/src/main/resources/base/graphic/background_element.xml" b/waylau/samples/AbilityServiceWidget/entry/src/main/resources/base/graphic/background_ability_main.xml similarity index 100% rename from "\346\237\263\344\274\237\345\215\253/app\346\272\220\347\240\201/Douyin/commonlib/src/main/resources/base/graphic/background_element.xml" rename to waylau/samples/AbilityServiceWidget/entry/src/main/resources/base/graphic/background_ability_main.xml diff --git a/waylau/samples/AbilityServiceWidget/entry/src/main/resources/base/layout/ability_main.xml b/waylau/samples/AbilityServiceWidget/entry/src/main/resources/base/layout/ability_main.xml new file mode 100644 index 0000000000000000000000000000000000000000..fd19d6d82966e8bd9d3bf43cdd98ba5b9c985437 --- /dev/null +++ b/waylau/samples/AbilityServiceWidget/entry/src/main/resources/base/layout/ability_main.xml @@ -0,0 +1,19 @@ + + + + + + \ No newline at end of file diff --git a/waylau/samples/AbilityServiceWidget/entry/src/main/resources/base/layout/form_image_with_information_photowidget_2_2.xml b/waylau/samples/AbilityServiceWidget/entry/src/main/resources/base/layout/form_image_with_information_photowidget_2_2.xml new file mode 100644 index 0000000000000000000000000000000000000000..a72f2f5b0f8e1408093487db42d0b2a0c800ee2f --- /dev/null +++ b/waylau/samples/AbilityServiceWidget/entry/src/main/resources/base/layout/form_image_with_information_photowidget_2_2.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/waylau/samples/AbilityServiceWidget/entry/src/main/resources/base/media/dog.jpg b/waylau/samples/AbilityServiceWidget/entry/src/main/resources/base/media/dog.jpg new file mode 100644 index 0000000000000000000000000000000000000000..563d14c65957e1d35a13f5988ea6427160632a08 Binary files /dev/null and b/waylau/samples/AbilityServiceWidget/entry/src/main/resources/base/media/dog.jpg differ diff --git a/waylau/samples/AbilityServiceWidget/entry/src/main/resources/base/media/form_image_with_information_photowidget_default_image_2.png b/waylau/samples/AbilityServiceWidget/entry/src/main/resources/base/media/form_image_with_information_photowidget_default_image_2.png new file mode 100644 index 0000000000000000000000000000000000000000..64d3f425041c3dc993e82b45f1f5e7c56804db70 Binary files /dev/null and b/waylau/samples/AbilityServiceWidget/entry/src/main/resources/base/media/form_image_with_information_photowidget_default_image_2.png differ diff --git "a/\346\237\263\344\274\237\345\215\253/app\346\272\220\347\240\201/Douyin/entrytv/src/main/resources/base/media/icon.png" b/waylau/samples/AbilityServiceWidget/entry/src/main/resources/base/media/icon.png similarity index 100% rename from "\346\237\263\344\274\237\345\215\253/app\346\272\220\347\240\201/Douyin/entrytv/src/main/resources/base/media/icon.png" rename to waylau/samples/AbilityServiceWidget/entry/src/main/resources/base/media/icon.png diff --git a/waylau/samples/AbilityServiceWidget/entry/src/main/resources/en/element/string.json b/waylau/samples/AbilityServiceWidget/entry/src/main/resources/en/element/string.json new file mode 100644 index 0000000000000000000000000000000000000000..bcf9f99db439d496a88899a967191af5e7407e15 --- /dev/null +++ b/waylau/samples/AbilityServiceWidget/entry/src/main/resources/en/element/string.json @@ -0,0 +1,16 @@ +{ + "string": [ + { + "name": "entry_MainAbility", + "value": "entry_MainAbility" + }, + { + "name": "mainability_description", + "value": "Java_Empty Ability" + }, + { + "name": "mainability_HelloWorld", + "value": "Hello World" + } + ] +} diff --git a/waylau/samples/AbilityServiceWidget/entry/src/main/resources/zh/element/string.json b/waylau/samples/AbilityServiceWidget/entry/src/main/resources/zh/element/string.json new file mode 100644 index 0000000000000000000000000000000000000000..fdc4bd140b689dfcb287ba35be2d478105f47f72 --- /dev/null +++ b/waylau/samples/AbilityServiceWidget/entry/src/main/resources/zh/element/string.json @@ -0,0 +1,16 @@ +{ + "string": [ + { + "name": "entry_MainAbility", + "value": "entry_MainAbility" + }, + { + "name": "mainability_description", + "value": "Java_Empty Ability" + }, + { + "name": "mainability_HelloWorld", + "value": "你好,世界" + } + ] +} \ No newline at end of file diff --git a/waylau/samples/AbilityServiceWidget/entry/src/ohosTest/java/com/waylau/hmos/abilityservicewidget/ExampleOhosTest.java b/waylau/samples/AbilityServiceWidget/entry/src/ohosTest/java/com/waylau/hmos/abilityservicewidget/ExampleOhosTest.java new file mode 100644 index 0000000000000000000000000000000000000000..9edf78441c7c9a3a7f636552d136f8f0437922b2 --- /dev/null +++ b/waylau/samples/AbilityServiceWidget/entry/src/ohosTest/java/com/waylau/hmos/abilityservicewidget/ExampleOhosTest.java @@ -0,0 +1,14 @@ +package com.waylau.hmos.abilityservicewidget; + +import ohos.aafwk.ability.delegation.AbilityDelegatorRegistry; +import org.junit.Test; + +import static org.junit.Assert.assertEquals; + +public class ExampleOhosTest { + @Test + public void testBundleName() { + final String actualBundleName = AbilityDelegatorRegistry.getArguments().getTestBundleName(); + assertEquals("com.waylau.hmos.abilityservicewidget", actualBundleName); + } +} \ No newline at end of file diff --git a/waylau/samples/AbilityServiceWidget/entry/src/test/java/com/waylau/hmos/abilityservicewidget/ExampleTest.java b/waylau/samples/AbilityServiceWidget/entry/src/test/java/com/waylau/hmos/abilityservicewidget/ExampleTest.java new file mode 100644 index 0000000000000000000000000000000000000000..2e9bb2a04b58d025970ed4a66811c8b83f70011c --- /dev/null +++ b/waylau/samples/AbilityServiceWidget/entry/src/test/java/com/waylau/hmos/abilityservicewidget/ExampleTest.java @@ -0,0 +1,9 @@ +package com.waylau.hmos.abilityservicewidget; + +import org.junit.Test; + +public class ExampleTest { + @Test + public void onStart() { + } +} diff --git "a/\346\237\263\344\274\237\345\215\253/app\346\272\220\347\240\201/Douyin/gradle.properties" b/waylau/samples/AbilityServiceWidget/gradle.properties similarity index 100% rename from "\346\237\263\344\274\237\345\215\253/app\346\272\220\347\240\201/Douyin/gradle.properties" rename to waylau/samples/AbilityServiceWidget/gradle.properties diff --git "a/\346\237\263\344\274\237\345\215\253/app\346\272\220\347\240\201/Douyin/gradle/wrapper/gradle-wrapper.jar" b/waylau/samples/AbilityServiceWidget/gradle/wrapper/gradle-wrapper.jar similarity index 100% rename from "\346\237\263\344\274\237\345\215\253/app\346\272\220\347\240\201/Douyin/gradle/wrapper/gradle-wrapper.jar" rename to waylau/samples/AbilityServiceWidget/gradle/wrapper/gradle-wrapper.jar diff --git "a/\346\237\263\344\274\237\345\215\253/app\346\272\220\347\240\201/Douyin/gradle/wrapper/gradle-wrapper.properties" b/waylau/samples/AbilityServiceWidget/gradle/wrapper/gradle-wrapper.properties similarity index 100% rename from "\346\237\263\344\274\237\345\215\253/app\346\272\220\347\240\201/Douyin/gradle/wrapper/gradle-wrapper.properties" rename to waylau/samples/AbilityServiceWidget/gradle/wrapper/gradle-wrapper.properties diff --git "a/\346\237\263\344\274\237\345\215\253/app\346\272\220\347\240\201/Douyin/gradlew" b/waylau/samples/AbilityServiceWidget/gradlew similarity index 100% rename from "\346\237\263\344\274\237\345\215\253/app\346\272\220\347\240\201/Douyin/gradlew" rename to waylau/samples/AbilityServiceWidget/gradlew diff --git "a/\346\237\263\344\274\237\345\215\253/app\346\272\220\347\240\201/Douyin/gradlew.bat" b/waylau/samples/AbilityServiceWidget/gradlew.bat similarity index 100% rename from "\346\237\263\344\274\237\345\215\253/app\346\272\220\347\240\201/Douyin/gradlew.bat" rename to waylau/samples/AbilityServiceWidget/gradlew.bat diff --git a/waylau/samples/AbilityServiceWidget/settings.gradle b/waylau/samples/AbilityServiceWidget/settings.gradle new file mode 100644 index 0000000000000000000000000000000000000000..4773db73233a570c2d0c01a22e75321acfbf7a07 --- /dev/null +++ b/waylau/samples/AbilityServiceWidget/settings.gradle @@ -0,0 +1 @@ +include ':entry' diff --git "a/\346\237\263\344\274\237\345\215\253/app\346\272\220\347\240\201/Douyin/.gitignore" b/waylau/samples/AbilitySliceNavigation/.gitignore similarity index 100% rename from "\346\237\263\344\274\237\345\215\253/app\346\272\220\347\240\201/Douyin/.gitignore" rename to waylau/samples/AbilitySliceNavigation/.gitignore diff --git "a/\346\237\263\344\274\237\345\215\253/app\346\272\220\347\240\201/Douyin/build.gradle" b/waylau/samples/AbilitySliceNavigation/build.gradle similarity index 100% rename from "\346\237\263\344\274\237\345\215\253/app\346\272\220\347\240\201/Douyin/build.gradle" rename to waylau/samples/AbilitySliceNavigation/build.gradle diff --git "a/\346\237\263\344\274\237\345\215\253/app\346\272\220\347\240\201/Douyin/entry/.gitignore" b/waylau/samples/AbilitySliceNavigation/entry/.gitignore similarity index 100% rename from "\346\237\263\344\274\237\345\215\253/app\346\272\220\347\240\201/Douyin/entry/.gitignore" rename to waylau/samples/AbilitySliceNavigation/entry/.gitignore diff --git a/waylau/samples/AbilitySliceNavigation/entry/build.gradle b/waylau/samples/AbilitySliceNavigation/entry/build.gradle new file mode 100644 index 0000000000000000000000000000000000000000..8b7ec8312514680f078c1c7e1c74263431effc4b --- /dev/null +++ b/waylau/samples/AbilitySliceNavigation/entry/build.gradle @@ -0,0 +1,27 @@ +apply plugin: 'com.huawei.ohos.hap' +apply plugin: 'com.huawei.ohos.decctest' +//For instructions on signature configuration, see https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ide_debug_device-0000001053822404#section1112183053510 +ohos { + compileSdkVersion 5 + defaultConfig { + compatibleSdkVersion 5 + } + buildTypes { + release { + proguardOpt { + proguardEnabled false + rulesFiles 'proguard-rules.pro' + } + } + } + +} + +dependencies { + implementation fileTree(dir: 'libs', include: ['*.jar', '*.har']) + testImplementation 'junit:junit:4.13' + ohosTestImplementation 'com.huawei.ohos.testkit:runner:1.0.0.200' +} +decc { + supportType = ['html','xml'] +} diff --git "a/\346\237\263\344\274\237\345\215\253/app\346\272\220\347\240\201/Douyin/entry/proguard-rules.pro" b/waylau/samples/AbilitySliceNavigation/entry/proguard-rules.pro similarity index 100% rename from "\346\237\263\344\274\237\345\215\253/app\346\272\220\347\240\201/Douyin/entry/proguard-rules.pro" rename to waylau/samples/AbilitySliceNavigation/entry/proguard-rules.pro diff --git a/waylau/samples/AbilitySliceNavigation/entry/src/main/config.json b/waylau/samples/AbilitySliceNavigation/entry/src/main/config.json new file mode 100644 index 0000000000000000000000000000000000000000..2dfa6366a69095509cba7bd3a58d3c19db64c3a5 --- /dev/null +++ b/waylau/samples/AbilitySliceNavigation/entry/src/main/config.json @@ -0,0 +1,57 @@ +{ + "app": { + "bundleName": "com.waylau.hmos.abilityslicenavigation", + "vendor": "waylau", + "version": { + "code": 1000000, + "name": "1.0.0" + } + }, + "deviceConfig": {}, + "module": { + "package": "com.waylau.hmos.abilityslicenavigation", + "name": ".MyApplication", + "mainAbility": "com.waylau.hmos.abilityslicenavigation.MainAbility", + "deviceType": [ + "phone", + "car" + ], + "distro": { + "deliveryWithInstall": true, + "moduleName": "entry", + "moduleType": "entry", + "installationFree": false + }, + "abilities": [ + { + "skills": [ + { + "entities": [ + "entity.system.home" + ], + "actions": [ + "action.system.home", + "action.pay" + ] + } + ], + "orientation": "unspecified", + "name": "com.waylau.hmos.abilityslicenavigation.MainAbility", + "icon": "$media:icon", + "description": "$string:mainability_description", + "label": "$string:entry_MainAbility", + "type": "page", + "launchType": "standard" + }, + { + "orientation": "unspecified", + "name": "com.waylau.hmos.abilityslicenavigation.PayAbility", + "icon": "$media:icon", + "description": "$string:payability_description", + "label": "$string:entry_PayAbility", + "type": "page", + "launchType": "standard" + } + ] + } +} \ No newline at end of file diff --git a/waylau/samples/AbilitySliceNavigation/entry/src/main/java/com/waylau/hmos/abilityslicenavigation/MainAbility.java b/waylau/samples/AbilitySliceNavigation/entry/src/main/java/com/waylau/hmos/abilityslicenavigation/MainAbility.java new file mode 100644 index 0000000000000000000000000000000000000000..90a89997767393b6f63e6d4a0d8c071836c9497c --- /dev/null +++ b/waylau/samples/AbilitySliceNavigation/entry/src/main/java/com/waylau/hmos/abilityslicenavigation/MainAbility.java @@ -0,0 +1,19 @@ +package com.waylau.hmos.abilityslicenavigation; + +import com.waylau.hmos.abilityslicenavigation.slice.MainAbilitySlice; +import com.waylau.hmos.abilityslicenavigation.slice.PayAbilitySlice; +import ohos.aafwk.ability.Ability; +import ohos.aafwk.content.Intent; + +public class MainAbility extends Ability { + @Override + public void onStart(Intent intent) { + super.onStart(intent); + + // 指定默认显示的AbilitySlice + super.setMainRoute(MainAbilitySlice.class.getName()); + + // 使用addActionRounte方法添加路由 + addActionRoute("action.pay", PayAbilitySlice.class.getName()); + } +} diff --git a/waylau/samples/AbilitySliceNavigation/entry/src/main/java/com/waylau/hmos/abilityslicenavigation/MyApplication.java b/waylau/samples/AbilitySliceNavigation/entry/src/main/java/com/waylau/hmos/abilityslicenavigation/MyApplication.java new file mode 100644 index 0000000000000000000000000000000000000000..5a4d230643831f0cc6b61b7d6558020ca019cc5a --- /dev/null +++ b/waylau/samples/AbilitySliceNavigation/entry/src/main/java/com/waylau/hmos/abilityslicenavigation/MyApplication.java @@ -0,0 +1,10 @@ +package com.waylau.hmos.abilityslicenavigation; + +import ohos.aafwk.ability.AbilityPackage; + +public class MyApplication extends AbilityPackage { + @Override + public void onInitialize() { + super.onInitialize(); + } +} diff --git a/waylau/samples/AbilitySliceNavigation/entry/src/main/java/com/waylau/hmos/abilityslicenavigation/PayAbility.java b/waylau/samples/AbilitySliceNavigation/entry/src/main/java/com/waylau/hmos/abilityslicenavigation/PayAbility.java new file mode 100644 index 0000000000000000000000000000000000000000..8d01ee288c4b63c7b519578694598e057f5310a4 --- /dev/null +++ b/waylau/samples/AbilitySliceNavigation/entry/src/main/java/com/waylau/hmos/abilityslicenavigation/PayAbility.java @@ -0,0 +1,13 @@ +package com.waylau.hmos.abilityslicenavigation; + +import com.waylau.hmos.abilityslicenavigation.slice.PayAbilitySlice; +import ohos.aafwk.ability.Ability; +import ohos.aafwk.content.Intent; + +public class PayAbility extends Ability { + @Override + public void onStart(Intent intent) { + super.onStart(intent); + super.setMainRoute(PayAbilitySlice.class.getName()); + } +} diff --git a/waylau/samples/AbilitySliceNavigation/entry/src/main/java/com/waylau/hmos/abilityslicenavigation/slice/MainAbilitySlice.java b/waylau/samples/AbilitySliceNavigation/entry/src/main/java/com/waylau/hmos/abilityslicenavigation/slice/MainAbilitySlice.java new file mode 100644 index 0000000000000000000000000000000000000000..aba3ecdafcb9b777d5d4eb10275fb33a8664728f --- /dev/null +++ b/waylau/samples/AbilitySliceNavigation/entry/src/main/java/com/waylau/hmos/abilityslicenavigation/slice/MainAbilitySlice.java @@ -0,0 +1,31 @@ +package com.waylau.hmos.abilityslicenavigation.slice; + +import com.waylau.hmos.abilityslicenavigation.ResourceTable; +import ohos.aafwk.ability.AbilitySlice; +import ohos.aafwk.content.Intent; +import ohos.agp.components.Text; + +public class MainAbilitySlice extends AbilitySlice { + @Override + public void onStart(Intent intent) { + super.onStart(intent); + + // UI界面内容引用了布局文件ability_main.xml + super.setUIContent(ResourceTable.Layout_ability_main); + + // 添加点击事件来触发导航到PayAbilitySlice + Text text = (Text) findComponentById(ResourceTable.Id_text_helloworld); + text.setClickedListener(listener -> + present(new PayAbilitySlice(), new Intent())); + } + + @Override + public void onActive() { + super.onActive(); + } + + @Override + public void onForeground(Intent intent) { + super.onForeground(intent); + } +} diff --git a/waylau/samples/AbilitySliceNavigation/entry/src/main/java/com/waylau/hmos/abilityslicenavigation/slice/PayAbilitySlice.java b/waylau/samples/AbilitySliceNavigation/entry/src/main/java/com/waylau/hmos/abilityslicenavigation/slice/PayAbilitySlice.java new file mode 100644 index 0000000000000000000000000000000000000000..1473410713f0655931c492491c0d90651164d3c4 --- /dev/null +++ b/waylau/samples/AbilitySliceNavigation/entry/src/main/java/com/waylau/hmos/abilityslicenavigation/slice/PayAbilitySlice.java @@ -0,0 +1,31 @@ +package com.waylau.hmos.abilityslicenavigation.slice; + +import com.waylau.hmos.abilityslicenavigation.ResourceTable; +import ohos.aafwk.ability.AbilitySlice; +import ohos.aafwk.content.Intent; +import ohos.agp.components.Text; + +public class PayAbilitySlice extends AbilitySlice { + @Override + public void onStart(Intent intent) { + super.onStart(intent); + + // UI界面内容引用了布局文件ability_pay.xml + super.setUIContent(ResourceTable.Layout_ability_pay); + + // 添加点击事件来触发导航到MainAbilitySlice + Text text = (Text) findComponentById(ResourceTable.Id_text_pay); + text.setClickedListener(listener -> + present(new MainAbilitySlice(), new Intent())); + } + + @Override + public void onActive() { + super.onActive(); + } + + @Override + public void onForeground(Intent intent) { + super.onForeground(intent); + } +} diff --git a/waylau/samples/AbilitySliceNavigation/entry/src/main/resources/base/element/string.json b/waylau/samples/AbilitySliceNavigation/entry/src/main/resources/base/element/string.json new file mode 100644 index 0000000000000000000000000000000000000000..3895333710615559be1c7fa6ac4f71847e5d359e --- /dev/null +++ b/waylau/samples/AbilitySliceNavigation/entry/src/main/resources/base/element/string.json @@ -0,0 +1,28 @@ +{ + "string": [ + { + "name": "entry_MainAbility", + "value": "entry_MainAbility" + }, + { + "name": "mainability_description", + "value": "Java_Empty Ability" + }, + { + "name": "mainability_HelloWorld", + "value": "Hello World" + }, + { + "name": "payability_description", + "value": "Java_Empty Ability" + }, + { + "name": "payability_HelloWorld", + "value": "Hello World" + }, + { + "name": "entry_PayAbility", + "value": "entry_PayAbility" + } + ] +} \ No newline at end of file diff --git a/waylau/samples/AbilitySliceNavigation/entry/src/main/resources/base/graphic/background_ability_main.xml b/waylau/samples/AbilitySliceNavigation/entry/src/main/resources/base/graphic/background_ability_main.xml new file mode 100644 index 0000000000000000000000000000000000000000..c0c0a3df480fa387a452b9c40ca191cc918a3fc0 --- /dev/null +++ b/waylau/samples/AbilitySliceNavigation/entry/src/main/resources/base/graphic/background_ability_main.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/waylau/samples/AbilitySliceNavigation/entry/src/main/resources/base/graphic/background_ability_pay.xml b/waylau/samples/AbilitySliceNavigation/entry/src/main/resources/base/graphic/background_ability_pay.xml new file mode 100644 index 0000000000000000000000000000000000000000..a002c2353e78af3a15235e00738328ff566bc085 --- /dev/null +++ b/waylau/samples/AbilitySliceNavigation/entry/src/main/resources/base/graphic/background_ability_pay.xml @@ -0,0 +1,8 @@ + + + + + \ No newline at end of file diff --git a/waylau/samples/AbilitySliceNavigation/entry/src/main/resources/base/layout/ability_main.xml b/waylau/samples/AbilitySliceNavigation/entry/src/main/resources/base/layout/ability_main.xml new file mode 100644 index 0000000000000000000000000000000000000000..fd19d6d82966e8bd9d3bf43cdd98ba5b9c985437 --- /dev/null +++ b/waylau/samples/AbilitySliceNavigation/entry/src/main/resources/base/layout/ability_main.xml @@ -0,0 +1,19 @@ + + + + + + \ No newline at end of file diff --git a/waylau/samples/AbilitySliceNavigation/entry/src/main/resources/base/layout/ability_pay.xml b/waylau/samples/AbilitySliceNavigation/entry/src/main/resources/base/layout/ability_pay.xml new file mode 100644 index 0000000000000000000000000000000000000000..d6feba3a682be4d97565b70040003462bd683b20 --- /dev/null +++ b/waylau/samples/AbilitySliceNavigation/entry/src/main/resources/base/layout/ability_pay.xml @@ -0,0 +1,19 @@ + + + + + + \ No newline at end of file diff --git "a/\346\237\263\344\274\237\345\215\253/app\346\272\220\347\240\201/Douyin/entry/src/main/resources/base/media/icon.png" b/waylau/samples/AbilitySliceNavigation/entry/src/main/resources/base/media/icon.png similarity index 100% rename from "\346\237\263\344\274\237\345\215\253/app\346\272\220\347\240\201/Douyin/entry/src/main/resources/base/media/icon.png" rename to waylau/samples/AbilitySliceNavigation/entry/src/main/resources/base/media/icon.png diff --git a/waylau/samples/AbilitySliceNavigation/entry/src/main/resources/en/element/string.json b/waylau/samples/AbilitySliceNavigation/entry/src/main/resources/en/element/string.json new file mode 100644 index 0000000000000000000000000000000000000000..8e683c97484b24684cef97661681520eab93b394 --- /dev/null +++ b/waylau/samples/AbilitySliceNavigation/entry/src/main/resources/en/element/string.json @@ -0,0 +1,28 @@ +{ + "string": [ + { + "name": "entry_MainAbility", + "value": "entry_MainAbility" + }, + { + "name": "mainability_description", + "value": "Java_Empty Ability" + }, + { + "name": "mainability_HelloWorld", + "value": "Hello World" + }, + { + "name": "entry_PayAbility", + "value": "entry_PayAbility" + }, + { + "name": "payability_description", + "value": "Java_Empty Ability" + }, + { + "name": "payability_money", + "value": "Pay me the money" + } + ] +} \ No newline at end of file diff --git a/waylau/samples/AbilitySliceNavigation/entry/src/main/resources/zh/element/string.json b/waylau/samples/AbilitySliceNavigation/entry/src/main/resources/zh/element/string.json new file mode 100644 index 0000000000000000000000000000000000000000..6fe31a35a5ed28936e7ce50434209ed9f4c4b5c5 --- /dev/null +++ b/waylau/samples/AbilitySliceNavigation/entry/src/main/resources/zh/element/string.json @@ -0,0 +1,28 @@ +{ + "string": [ + { + "name": "entry_MainAbility", + "value": "entry_MainAbility" + }, + { + "name": "mainability_description", + "value": "Java_Empty Ability" + }, + { + "name": "mainability_HelloWorld", + "value": "你好,世界" + }, + { + "name": "entry_PayAbility", + "value": "entry_PayAbility" + }, + { + "name": "payability_description", + "value": "Java_Empty Ability" + }, + { + "name": "payability_money", + "value": "你好,支付" + } + ] +} \ No newline at end of file diff --git a/waylau/samples/AbilitySliceNavigation/entry/src/ohosTest/java/com/waylau/hmos/abilityslicenavigation/ExampleOhosTest.java b/waylau/samples/AbilitySliceNavigation/entry/src/ohosTest/java/com/waylau/hmos/abilityslicenavigation/ExampleOhosTest.java new file mode 100644 index 0000000000000000000000000000000000000000..1088ab9941dddc790c418bfa6cd279a6565f6a3a --- /dev/null +++ b/waylau/samples/AbilitySliceNavigation/entry/src/ohosTest/java/com/waylau/hmos/abilityslicenavigation/ExampleOhosTest.java @@ -0,0 +1,14 @@ +package com.waylau.hmos.abilityslicenavigation; + +import ohos.aafwk.ability.delegation.AbilityDelegatorRegistry; +import org.junit.Test; + +import static org.junit.Assert.assertEquals; + +public class ExampleOhosTest { + @Test + public void testBundleName() { + final String actualBundleName = AbilityDelegatorRegistry.getArguments().getTestBundleName(); + assertEquals("com.waylau.hmos.abilityslicenavigation", actualBundleName); + } +} \ No newline at end of file diff --git a/waylau/samples/AbilitySliceNavigation/entry/src/test/java/com/waylau/hmos/abilityslicenavigation/ExampleTest.java b/waylau/samples/AbilitySliceNavigation/entry/src/test/java/com/waylau/hmos/abilityslicenavigation/ExampleTest.java new file mode 100644 index 0000000000000000000000000000000000000000..c429c86b81ec32b88e57333d46bc1093adbf954c --- /dev/null +++ b/waylau/samples/AbilitySliceNavigation/entry/src/test/java/com/waylau/hmos/abilityslicenavigation/ExampleTest.java @@ -0,0 +1,9 @@ +package com.waylau.hmos.abilityslicenavigation; + +import org.junit.Test; + +public class ExampleTest { + @Test + public void onStart() { + } +} diff --git a/waylau/samples/AbilitySliceNavigation/gradle.properties b/waylau/samples/AbilitySliceNavigation/gradle.properties new file mode 100644 index 0000000000000000000000000000000000000000..be492496f9a20ac2d980ef4fc30061f4184c1c40 --- /dev/null +++ b/waylau/samples/AbilitySliceNavigation/gradle.properties @@ -0,0 +1,13 @@ +# Project-wide Gradle settings. +# IDE (e.g. DevEco Studio) users: +# Gradle settings configured through the IDE *will override* +# any settings specified in this file. +# For more details on how to configure your build environment visit +# http://www.gradle.org/docs/current/userguide/build_environment.html +# Specifies the JVM arguments used for the daemon process. +# The setting is particularly useful for tweaking memory settings. +# If the Chinese output is garbled, please configure the following parameter. +# This function is enabled by default when the DevEco Studio builds the hap/app,if you need disable gradle parallel,you should set org.gradle.parallel false. +# more information see https://docs.gradle.org/current/userguide/performance.html +# org.gradle.parallel=false +# org.gradle.jvmargs=-Dfile.encoding=GBK \ No newline at end of file diff --git a/waylau/samples/AbilitySliceNavigation/gradle/wrapper/gradle-wrapper.jar b/waylau/samples/AbilitySliceNavigation/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..490fda8577df6c95960ba7077c43220e5bb2c0d9 Binary files /dev/null and b/waylau/samples/AbilitySliceNavigation/gradle/wrapper/gradle-wrapper.jar differ diff --git a/waylau/samples/AbilitySliceNavigation/gradle/wrapper/gradle-wrapper.properties b/waylau/samples/AbilitySliceNavigation/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000000000000000000000000000000000000..f59159e865d4b59feb1b8c44b001f62fc5d58df4 --- /dev/null +++ b/waylau/samples/AbilitySliceNavigation/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://repo.huaweicloud.com/gradle/gradle-6.3-bin.zip +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/waylau/samples/AbilitySliceNavigation/gradlew b/waylau/samples/AbilitySliceNavigation/gradlew new file mode 100644 index 0000000000000000000000000000000000000000..2fe81a7d95e4f9ad2c9b2a046707d36ceb3980b3 --- /dev/null +++ b/waylau/samples/AbilitySliceNavigation/gradlew @@ -0,0 +1,183 @@ +#!/usr/bin/env sh + +# +# Copyright 2015 the original author or authors. +# +# 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 +# +# https://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. +# + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + 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/waylau/samples/AbilitySliceNavigation/gradlew.bat b/waylau/samples/AbilitySliceNavigation/gradlew.bat new file mode 100644 index 0000000000000000000000000000000000000000..62bd9b9ccefea2b65ae41e5d9a545e2021b90a1d --- /dev/null +++ b/waylau/samples/AbilitySliceNavigation/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/waylau/samples/AbilitySliceNavigation/settings.gradle b/waylau/samples/AbilitySliceNavigation/settings.gradle new file mode 100644 index 0000000000000000000000000000000000000000..4773db73233a570c2d0c01a22e75321acfbf7a07 --- /dev/null +++ b/waylau/samples/AbilitySliceNavigation/settings.gradle @@ -0,0 +1 @@ +include ':entry' diff --git a/waylau/samples/ContinueRemoteFA/.gitignore b/waylau/samples/ContinueRemoteFA/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..13e3ccdbf526f02a38cfce5d763c3cb09e33b001 --- /dev/null +++ b/waylau/samples/ContinueRemoteFA/.gitignore @@ -0,0 +1,10 @@ +*.iml +.gradle +/local.properties +/.idea +.DS_Store +/build +/captures +.externalNativeBuild +/entry/.preview +.cxx diff --git a/waylau/samples/ContinueRemoteFA/build.gradle b/waylau/samples/ContinueRemoteFA/build.gradle new file mode 100644 index 0000000000000000000000000000000000000000..ffb7d0b2406a4957aad77fd38996e79c00dccab6 --- /dev/null +++ b/waylau/samples/ContinueRemoteFA/build.gradle @@ -0,0 +1,36 @@ +// Top-level build file where you can add configuration options common to all sub-projects/modules. +apply plugin: 'com.huawei.ohos.app' + +//For instructions on signature configuration, see https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ide_debug_device-0000001053822404#section1112183053510 +ohos { + compileSdkVersion 5 + defaultConfig { + compatibleSdkVersion 5 + } +} + +buildscript { + repositories { + maven { + url 'https://repo.huaweicloud.com/repository/maven/' + } + maven { + url 'https://developer.huawei.com/repo/' + } + } + dependencies { + classpath 'com.huawei.ohos:hap:2.4.5.0' + classpath 'com.huawei.ohos:decctest:1.2.4.1' + } +} + +allprojects { + repositories { + maven { + url 'https://repo.huaweicloud.com/repository/maven/' + } + maven { + url 'https://developer.huawei.com/repo/' + } + } +} diff --git "a/\346\237\263\344\274\237\345\215\253/app\346\272\220\347\240\201/Douyin/commonlib/.gitignore" b/waylau/samples/ContinueRemoteFA/entry/.gitignore similarity index 100% rename from "\346\237\263\344\274\237\345\215\253/app\346\272\220\347\240\201/Douyin/commonlib/.gitignore" rename to waylau/samples/ContinueRemoteFA/entry/.gitignore diff --git a/waylau/samples/ContinueRemoteFA/entry/build.gradle b/waylau/samples/ContinueRemoteFA/entry/build.gradle new file mode 100644 index 0000000000000000000000000000000000000000..8b7ec8312514680f078c1c7e1c74263431effc4b --- /dev/null +++ b/waylau/samples/ContinueRemoteFA/entry/build.gradle @@ -0,0 +1,27 @@ +apply plugin: 'com.huawei.ohos.hap' +apply plugin: 'com.huawei.ohos.decctest' +//For instructions on signature configuration, see https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ide_debug_device-0000001053822404#section1112183053510 +ohos { + compileSdkVersion 5 + defaultConfig { + compatibleSdkVersion 5 + } + buildTypes { + release { + proguardOpt { + proguardEnabled false + rulesFiles 'proguard-rules.pro' + } + } + } + +} + +dependencies { + implementation fileTree(dir: 'libs', include: ['*.jar', '*.har']) + testImplementation 'junit:junit:4.13' + ohosTestImplementation 'com.huawei.ohos.testkit:runner:1.0.0.200' +} +decc { + supportType = ['html','xml'] +} diff --git "a/\346\237\263\344\274\237\345\215\253/app\346\272\220\347\240\201/Douyin/commonlib/proguard-rules.pro" b/waylau/samples/ContinueRemoteFA/entry/proguard-rules.pro similarity index 100% rename from "\346\237\263\344\274\237\345\215\253/app\346\272\220\347\240\201/Douyin/commonlib/proguard-rules.pro" rename to waylau/samples/ContinueRemoteFA/entry/proguard-rules.pro diff --git a/waylau/samples/ContinueRemoteFA/entry/src/main/config.json b/waylau/samples/ContinueRemoteFA/entry/src/main/config.json new file mode 100644 index 0000000000000000000000000000000000000000..6462024be755aa9281db76f1d35e38d1a661cc84 --- /dev/null +++ b/waylau/samples/ContinueRemoteFA/entry/src/main/config.json @@ -0,0 +1,64 @@ +{ + "app": { + "bundleName": "com.waylau.hmos.continueremotefa", + "vendor": "waylau", + "version": { + "code": 1000000, + "name": "1.0.0" + } + }, + "deviceConfig": {}, + "module": { + "package": "com.waylau.hmos.continueremotefa", + "name": ".MyApplication", + "mainAbility": "com.waylau.hmos.continueremotefa.MainAbility", + "deviceType": [ + "phone", + "tablet", + "tv", + "wearable", + "car" + ], + "distro": { + "deliveryWithInstall": true, + "moduleName": "entry", + "moduleType": "entry", + "installationFree": false + }, + "abilities": [ + { + "skills": [ + { + "entities": [ + "entity.system.home" + ], + "actions": [ + "action.system.home" + ] + } + ], + "orientation": "unspecified", + "name": "com.waylau.hmos.continueremotefa.MainAbility", + "icon": "$media:icon", + "description": "$string:mainability_description", + "label": "$string:entry_MainAbility", + "type": "page", + "launchType": "standard" + } + ], + "reqPermissions": [ + { + "name": "ohos.permission.DISTRIBUTED_DATASYNC" + }, + { + "name": "ohos.permission.DISTRIBUTED_DEVICE_STATE_CHANGE" + }, + { + "name": "ohos.permission.GET_DISTRIBUTED_DEVICE_INFO" + }, + { + "name": "ohos.permission.GET_BUNDLE_INFO" + } + ] + } +} \ No newline at end of file diff --git a/waylau/samples/ContinueRemoteFA/entry/src/main/java/com/waylau/hmos/continueremotefa/DeviceUtils.java b/waylau/samples/ContinueRemoteFA/entry/src/main/java/com/waylau/hmos/continueremotefa/DeviceUtils.java new file mode 100644 index 0000000000000000000000000000000000000000..5fa063222e108d22c4898b1101ddd41e816748a6 --- /dev/null +++ b/waylau/samples/ContinueRemoteFA/entry/src/main/java/com/waylau/hmos/continueremotefa/DeviceUtils.java @@ -0,0 +1,63 @@ +package com.waylau.hmos.continueremotefa; + +import ohos.distributedschedule.interwork.DeviceInfo; +import ohos.distributedschedule.interwork.DeviceManager; +import ohos.hiviewdfx.HiLog; +import ohos.hiviewdfx.HiLogLabel; + +import java.util.ArrayList; +import java.util.List; + +/** + * 获取当前组网下可迁移的设备id列表 + * + * @author Way Lau + */ +public class DeviceUtils { + private static final String TAG = DeviceUtils.class.getSimpleName(); + private static final HiLogLabel LABEL_LOG = + new HiLogLabel(HiLog.LOG_APP, 0x00001, TAG); + + private DeviceUtils() { + } + + // 获取当前组网下可迁移的设备id列表 + public static List getAvailableDeviceId() { + List deviceIds = new ArrayList<>(); + + List deviceInfoList = + DeviceManager.getDeviceList(DeviceInfo.FLAG_GET_ALL_DEVICE); + if (deviceInfoList == null) { + return deviceIds; + } + + if (deviceInfoList.size() == 0) { + HiLog.warn(LABEL_LOG, "did not find other device"); + return deviceIds; + } + + for (DeviceInfo deviceInfo : deviceInfoList) { + deviceIds.add(deviceInfo.getDeviceId()); + } + + return deviceIds; + } + + // 获取当前组网下可迁移的设备id + // 如果有多个则取第一个 + public static String getDeviceId() { + String deviceId = ""; + List outerDevices = DeviceUtils.getAvailableDeviceId(); + + if (outerDevices == null || outerDevices.size() == 0) { + HiLog.warn(LABEL_LOG, "did not find other device"); + } else { + for (String item : outerDevices) { + HiLog.info(LABEL_LOG, "outerDevices:%{public}s", item); + } + deviceId = outerDevices.get(0); + } + HiLog.info(LABEL_LOG, "getDeviceId:%{public}s", deviceId); + return deviceId; + } +} diff --git a/waylau/samples/ContinueRemoteFA/entry/src/main/java/com/waylau/hmos/continueremotefa/MainAbility.java b/waylau/samples/ContinueRemoteFA/entry/src/main/java/com/waylau/hmos/continueremotefa/MainAbility.java new file mode 100644 index 0000000000000000000000000000000000000000..8a4fa0971a5199705e25a9e3ba8fd03e77557c0b --- /dev/null +++ b/waylau/samples/ContinueRemoteFA/entry/src/main/java/com/waylau/hmos/continueremotefa/MainAbility.java @@ -0,0 +1,67 @@ +package com.waylau.hmos.continueremotefa; + +import com.waylau.hmos.continueremotefa.slice.MainAbilitySlice; +import ohos.aafwk.ability.Ability; +import ohos.aafwk.ability.IAbilityContinuation; +import ohos.aafwk.content.Intent; +import ohos.aafwk.content.IntentParams; +import ohos.bundle.IBundleManager; +import ohos.security.SystemPermission; + +import java.util.ArrayList; +import java.util.List; + +/** + * 设备迁移与回迁 + * + * @author Way Lau + */ +public class MainAbility extends Ability implements IAbilityContinuation { + @Override + public void onStart(Intent intent) { + super.onStart(intent); + super.setMainRoute(MainAbilitySlice.class.getName()); + requestPermission(); + } + + //获取权限 + private void requestPermission() { + String[] permission = { + SystemPermission.DISTRIBUTED_DATASYNC + }; + List applyPermissions = new ArrayList<>(); + for (String element : permission) { + if (verifySelfPermission(element) != 0) { + if (canRequestPermission(element)) { + applyPermissions.add(element); + } + } + } + requestPermissionsFromUser(applyPermissions.toArray(new String[0]), 0); + } + + + @Override + public boolean onStartContinuation() { + // 重写 + return true; + } + + @Override + public boolean onSaveData(IntentParams intentParams) { + // 重写 + return true; + } + + @Override + public boolean onRestoreData(IntentParams intentParams) { + // 重写 + return true; + } + + @Override + public void onCompleteContinuation(int i) { + + } + +} diff --git a/waylau/samples/ContinueRemoteFA/entry/src/main/java/com/waylau/hmos/continueremotefa/MyApplication.java b/waylau/samples/ContinueRemoteFA/entry/src/main/java/com/waylau/hmos/continueremotefa/MyApplication.java new file mode 100644 index 0000000000000000000000000000000000000000..a114ecddb3eac57f7f4a0cee541c3a07b74405c3 --- /dev/null +++ b/waylau/samples/ContinueRemoteFA/entry/src/main/java/com/waylau/hmos/continueremotefa/MyApplication.java @@ -0,0 +1,10 @@ +package com.waylau.hmos.continueremotefa; + +import ohos.aafwk.ability.AbilityPackage; + +public class MyApplication extends AbilityPackage { + @Override + public void onInitialize() { + super.onInitialize(); + } +} diff --git a/waylau/samples/ContinueRemoteFA/entry/src/main/java/com/waylau/hmos/continueremotefa/slice/MainAbilitySlice.java b/waylau/samples/ContinueRemoteFA/entry/src/main/java/com/waylau/hmos/continueremotefa/slice/MainAbilitySlice.java new file mode 100644 index 0000000000000000000000000000000000000000..36c09c1bad3692fce8c06bf6657956fb4d853fc3 --- /dev/null +++ b/waylau/samples/ContinueRemoteFA/entry/src/main/java/com/waylau/hmos/continueremotefa/slice/MainAbilitySlice.java @@ -0,0 +1,95 @@ +package com.waylau.hmos.continueremotefa.slice; + +import com.waylau.hmos.continueremotefa.DeviceUtils; +import com.waylau.hmos.continueremotefa.ResourceTable; +import ohos.aafwk.ability.AbilitySlice; +import ohos.aafwk.ability.IAbilityContinuation; +import ohos.aafwk.content.Intent; +import ohos.aafwk.content.IntentParams; +import ohos.agp.components.Button; +import ohos.agp.components.TextField; +import ohos.hiviewdfx.HiLog; +import ohos.hiviewdfx.HiLogLabel; + +/** + * 设备迁移与回迁 + * + * @author Way Lau + */ +public class MainAbilitySlice extends AbilitySlice implements IAbilityContinuation { + private static final String TAG = MainAbilitySlice.class.getSimpleName(); + private static final HiLogLabel LABEL_LOG = + new HiLogLabel(HiLog.LOG_APP, 0x00001, TAG); + + private static final String MESSAGE_KEY = "com.waylau.hmos.continueremotefa.slice.MESSAGE_KEY"; + + @Override + public void onStart(Intent intent) { + super.onStart(intent); + super.setUIContent(ResourceTable.Layout_ability_main); + + // 监听跨端迁移FA的事件 + Button buttonContinueRemoteFA = ( + Button) findComponentById(ResourceTable.Id_button_continue_remote_fa); + buttonContinueRemoteFA.setClickedListener(listener -> continueRemoteFA()); + + // 监听拉回迁移FA的事件 + Button buttonContinueEversibly = + (Button) findComponentById(ResourceTable.Id_button_continue_eversibly); + buttonContinueEversibly.setClickedListener(listener -> continueEversibly()); + } + + private void continueRemoteFA() { + HiLog.info(LABEL_LOG, "before startRemoteFA"); + + String deviceId = DeviceUtils.getDeviceId(); + + HiLog.info(LABEL_LOG, "get deviceId: %{public}s", deviceId); + + if (deviceId != null) { + // 发起迁移流程 + // continueAbility()是不可回迁的 + // continueAbilityReversibly() 是可以回迁的 + continueAbilityReversibly(deviceId); + } + } + + private void continueEversibly() { + // 发起回迁流程 + reverseContinueAbility(); + } + + @Override + public void onActive() { + super.onActive(); + } + + @Override + public void onForeground(Intent intent) { + super.onForeground(intent); + } + + @Override + public boolean onStartContinuation() { + // 重写 + return true; + } + + @Override + public boolean onSaveData(IntentParams intentParams) { + // 重写 + return true; + } + + @Override + public boolean onRestoreData(IntentParams intentParams) { + // 重写 + return true; + } + + @Override + public void onCompleteContinuation(int i) { + + } + +} diff --git a/waylau/samples/ContinueRemoteFA/entry/src/main/resources/base/element/string.json b/waylau/samples/ContinueRemoteFA/entry/src/main/resources/base/element/string.json new file mode 100644 index 0000000000000000000000000000000000000000..c2a6b66cf9bbe3634a9332007717dfd5f2db38bf --- /dev/null +++ b/waylau/samples/ContinueRemoteFA/entry/src/main/resources/base/element/string.json @@ -0,0 +1,16 @@ +{ + "string": [ + { + "name": "entry_MainAbility", + "value": "entry_MainAbility" + }, + { + "name": "mainability_description", + "value": "Java_Empty Ability" + }, + { + "name": "mainability_HelloWorld", + "value": "Hello World" + } + ] +} \ No newline at end of file diff --git a/waylau/samples/ContinueRemoteFA/entry/src/main/resources/base/graphic/background_ability_main.xml b/waylau/samples/ContinueRemoteFA/entry/src/main/resources/base/graphic/background_ability_main.xml new file mode 100644 index 0000000000000000000000000000000000000000..f9971a222d4bf74f709ceec25f1577f0a406f743 --- /dev/null +++ b/waylau/samples/ContinueRemoteFA/entry/src/main/resources/base/graphic/background_ability_main.xml @@ -0,0 +1,8 @@ + + + + + \ No newline at end of file diff --git a/waylau/samples/ContinueRemoteFA/entry/src/main/resources/base/layout/ability_main.xml b/waylau/samples/ContinueRemoteFA/entry/src/main/resources/base/layout/ability_main.xml new file mode 100644 index 0000000000000000000000000000000000000000..3f0d3b13eb9f5c6142ec17d93afd5f8d5c6cc444 --- /dev/null +++ b/waylau/samples/ContinueRemoteFA/entry/src/main/resources/base/layout/ability_main.xml @@ -0,0 +1,31 @@ + + + +