From 32ac4b2b70812476696a5ab9731989f62e457970 Mon Sep 17 00:00:00 2001 From: wangweiyuan Date: Thu, 31 Jul 2025 20:04:28 +0800 Subject: [PATCH] add ArkUISample Signed-off-by: wangweiyuan --- ArkUISample/DialogProject/.gitignore | 12 + ArkUISample/DialogProject/AppScope/app.json5 | 25 ++ .../resources/base/element/string.json | 8 + .../resources/base/media/app_icon.png | Bin 0 -> 2777 bytes ArkUISample/DialogProject/README_zh.md | 106 +++++ ArkUISample/DialogProject/build-profile.json5 | 57 +++ ArkUISample/DialogProject/code-linter.json5 | 35 ++ ArkUISample/DialogProject/entry/.gitignore | 6 + .../DialogProject/entry/build-profile.json5 | 43 ++ ArkUISample/DialogProject/entry/hvigorfile.ts | 6 + .../DialogProject/entry/obfuscation-rules.txt | 23 + .../DialogProject/entry/oh-package.json5 | 25 ++ .../entry/src/main/ets/common/Card.ets | 102 +++++ .../src/main/ets/common/PromptActionClass.ts | 87 ++++ .../entry/src/main/ets/common/Route.ets | 21 + .../entry/src/main/ets/common/resource.ets | 25 ++ .../main/ets/entryability/EntryAbility.ets | 57 +++ .../entrybackupability/EntryBackupAbility.ets | 27 ++ .../entry/src/main/ets/pages/Index.ets | 124 ++++++ .../entry/src/main/ets/pages/Index2.ets | 36 ++ .../src/main/ets/pages/Menu/CreateMenu.ets | 121 +++++ .../entry/src/main/ets/pages/Menu/Index.ets | 69 +++ .../src/main/ets/pages/Toast/CreateToast.ets | 54 +++ .../ets/pages/Toast/DefaultAndTopToast.ets | 68 +++ .../entry/src/main/ets/pages/Toast/Index.ets | 84 ++++ .../main/ets/pages/Toast/OpenCloseToast.ets | 69 +++ .../pages/customdialog/CreateCustomDialog.ets | 72 +++ .../pages/customdialog/DialogAnimation.ets | 79 ++++ .../pages/customdialog/DialogInteraction.ets | 111 +++++ .../pages/customdialog/DialogInteraction1.ets | 152 +++++++ .../ets/pages/customdialog/DialogStyle.ets | 87 ++++ .../src/main/ets/pages/customdialog/Index.ets | 108 +++++ .../ets/pages/customdialog/NestDialog.ets | 172 +++++++ .../pages/fixedstyledialog/ActionSheet.ets | 85 ++++ .../pages/fixedstyledialog/AlertDialog.ets | 75 ++++ .../fixedstyledialog/CalendarPickerDialog.ets | 64 +++ .../fixedstyledialog/DatePickerDialog.ets | 55 +++ .../main/ets/pages/fixedstyledialog/Index.ets | 125 ++++++ .../pages/fixedstyledialog/ShowActionMenu.ets | 64 +++ .../ets/pages/fixedstyledialog/ShowDialog.ets | 63 +++ .../fixedstyledialog/TextPickerDialog.ets | 68 +++ .../fixedstyledialog/TimePickerDialog.ets | 61 +++ .../main/ets/pages/opencustomdialog/Index.ets | 68 +++ .../opencustomdialog/openCustomDialog.ets | 133 ++++++ .../src/main/ets/pages/popup/ButtonPopup.ets | 63 +++ .../src/main/ets/pages/popup/CustomPopup.ets | 63 +++ .../entry/src/main/ets/pages/popup/Index.ets | 109 +++++ .../main/ets/pages/popup/PopupAnimation.ets | 86 ++++ .../main/ets/pages/popup/PopupStateChange.ets | 51 +++ .../src/main/ets/pages/popup/PopupStyle.ets | 63 +++ .../src/main/ets/pages/popup/TextPrompts.ets | 46 ++ .../DialogProject/entry/src/main/module.json5 | 66 +++ .../main/resources/base/element/color.json | 8 + .../main/resources/base/element/string.json | 380 ++++++++++++++++ .../main/resources/base/media/background.png | Bin 0 -> 57364 bytes .../main/resources/base/media/foreground.png | Bin 0 -> 12430 bytes .../resources/base/media/layered_image.json | 7 + .../main/resources/base/media/startIcon.png | Bin 0 -> 20093 bytes .../resources/base/profile/backup_config.json | 3 + .../resources/base/profile/main_pages.json | 6 + .../main/resources/dark/element/color.json | 8 + .../src/ohosTest/ets/test/Ability.test.ets | 50 +++ .../src/ohosTest/ets/test/Index.test.ets | 148 ++++++ .../entry/src/ohosTest/ets/test/List.test.ets | 23 + .../entry/src/ohosTest/module.json5 | 28 ++ .../DialogProject/hvigor/hvigor-config.json5 | 37 ++ ArkUISample/DialogProject/hvigorfile.ts | 6 + ArkUISample/DialogProject/oh-package.json5 | 25 ++ .../screenshots/device/image1.png | Bin 0 -> 48233 bytes .../screenshots/device/image2.png | Bin 0 -> 71521 bytes .../screenshots/device/image3.png | Bin 0 -> 27139 bytes ArkUISample/EventProject/.gitignore | 12 + ArkUISample/EventProject/AppScope/app.json5 | 25 ++ .../resources/base/element/string.json | 8 + .../resources/base/media/app_icon.png | Bin 0 -> 2777 bytes ArkUISample/EventProject/README_zh.md | 111 +++++ ArkUISample/EventProject/build-profile.json5 | 58 +++ ArkUISample/EventProject/code-linter.json5 | 35 ++ ArkUISample/EventProject/entry/.gitignore | 6 + .../EventProject/entry/build-profile.json5 | 43 ++ ArkUISample/EventProject/entry/hvigorfile.ts | 6 + .../EventProject/entry/obfuscation-rules.txt | 23 + .../EventProject/entry/oh-package.json5 | 25 ++ .../entry/src/main/ets/common/Card.ets | 102 +++++ .../entry/src/main/ets/common/Route.ets | 21 + .../entry/src/main/ets/common/resource.ets | 25 ++ .../main/ets/entryability/EntryAbility.ets | 57 +++ .../entrybackupability/EntryBackupAbility.ets | 27 ++ .../entry/src/main/ets/pages/Index.ets | 132 ++++++ .../src/main/ets/pages/Touch/ClickEvent.ets | 53 +++ .../entry/src/main/ets/pages/Touch/Index.ets | 76 ++++ .../src/main/ets/pages/Touch/TouchEvent.ets | 75 ++++ .../src/main/ets/pages/device/HoverEffect.ets | 52 +++ .../entry/src/main/ets/pages/device/Index.ets | 103 +++++ .../src/main/ets/pages/device/OnHover.ets | 51 +++ .../entry/src/main/ets/pages/device/OnKey.ets | 78 ++++ .../src/main/ets/pages/device/OnKeyPreIme.ets | 55 +++ .../src/main/ets/pages/device/OnMouse.ets | 81 ++++ .../src/main/ets/pages/drag/DefaultDrag.ets | 207 +++++++++ .../entry/src/main/ets/pages/drag/Index.ets | 76 ++++ .../src/main/ets/pages/drag/MoreDrag.ets | 132 ++++++ .../src/main/ets/pages/focus/DefaultFocus.ets | 86 ++++ .../main/ets/pages/focus/FocusAndClick.ets | 54 +++ .../main/ets/pages/focus/FocusController.ets | 100 +++++ .../main/ets/pages/focus/FocusPriority.ets | 48 ++ .../ets/pages/focus/FocusScopePriority.ets | 150 +++++++ .../src/main/ets/pages/focus/FocusStyle.ets | 53 +++ .../src/main/ets/pages/focus/Focusable.ets | 113 +++++ .../entry/src/main/ets/pages/focus/Index.ets | 125 ++++++ .../src/main/ets/pages/focus/onFocusBlur.ets | 84 ++++ .../ets/pages/gesturejudge/GestureJudge.ets | 171 +++++++ .../src/main/ets/pages/gesturejudge/Index.ets | 69 +++ .../main/ets/pages/groupgesture/Exclusive.ets | 57 +++ .../src/main/ets/pages/groupgesture/Index.ets | 84 ++++ .../main/ets/pages/groupgesture/Parallel.ets | 57 +++ .../main/ets/pages/groupgesture/Sequence.ets | 93 ++++ .../main/ets/pages/singlegesture/Index.ets | 108 +++++ .../pages/singlegesture/LongPressGesture.ets | 56 +++ .../ets/pages/singlegesture/PanGesture.ets | 67 +++ .../ets/pages/singlegesture/PinchGesture.ets | 67 +++ .../pages/singlegesture/RotationGesture.ets | 66 +++ .../ets/pages/singlegesture/SwipeGesture.ets | 58 +++ .../ets/pages/singlegesture/TapGesture.ets | 51 +++ .../EventProject/entry/src/main/module.json5 | 66 +++ .../main/resources/base/element/color.json | 8 + .../main/resources/base/element/string.json | 420 ++++++++++++++++++ .../main/resources/base/media/background.png | Bin 0 -> 57364 bytes .../main/resources/base/media/foreground.png | Bin 0 -> 12430 bytes .../resources/base/media/layered_image.json | 7 + .../main/resources/base/media/startIcon.png | Bin 0 -> 20093 bytes .../resources/base/profile/backup_config.json | 3 + .../resources/base/profile/main_pages.json | 5 + .../main/resources/dark/element/color.json | 8 + .../entry/src/mock/mock-config.json5 | 17 + .../src/ohosTest/ets/test/Ability.test.ets | 50 +++ .../src/ohosTest/ets/test/Index.test.ets | 134 ++++++ .../entry/src/ohosTest/ets/test/List.test.ets | 22 + .../entry/src/ohosTest/module.json5 | 27 ++ .../EventProject/entry/src/test/List.test.ets | 20 + .../entry/src/test/LocalUnit.test.ets | 48 ++ .../EventProject/hvigor/hvigor-config.json5 | 37 ++ ArkUISample/EventProject/hvigorfile.ts | 6 + ArkUISample/EventProject/oh-package.json5 | 25 ++ .../screenshots/device/image1.png | Bin 0 -> 50489 bytes .../screenshots/device/image2.png | Bin 0 -> 88462 bytes .../screenshots/device/image3.png | Bin 0 -> 39756 bytes 146 files changed, 8683 insertions(+) create mode 100644 ArkUISample/DialogProject/.gitignore create mode 100644 ArkUISample/DialogProject/AppScope/app.json5 create mode 100644 ArkUISample/DialogProject/AppScope/resources/base/element/string.json create mode 100644 ArkUISample/DialogProject/AppScope/resources/base/media/app_icon.png create mode 100644 ArkUISample/DialogProject/README_zh.md create mode 100644 ArkUISample/DialogProject/build-profile.json5 create mode 100644 ArkUISample/DialogProject/code-linter.json5 create mode 100644 ArkUISample/DialogProject/entry/.gitignore create mode 100644 ArkUISample/DialogProject/entry/build-profile.json5 create mode 100644 ArkUISample/DialogProject/entry/hvigorfile.ts create mode 100644 ArkUISample/DialogProject/entry/obfuscation-rules.txt create mode 100644 ArkUISample/DialogProject/entry/oh-package.json5 create mode 100644 ArkUISample/DialogProject/entry/src/main/ets/common/Card.ets create mode 100644 ArkUISample/DialogProject/entry/src/main/ets/common/PromptActionClass.ts create mode 100644 ArkUISample/DialogProject/entry/src/main/ets/common/Route.ets create mode 100644 ArkUISample/DialogProject/entry/src/main/ets/common/resource.ets create mode 100644 ArkUISample/DialogProject/entry/src/main/ets/entryability/EntryAbility.ets create mode 100644 ArkUISample/DialogProject/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets create mode 100644 ArkUISample/DialogProject/entry/src/main/ets/pages/Index.ets create mode 100644 ArkUISample/DialogProject/entry/src/main/ets/pages/Index2.ets create mode 100644 ArkUISample/DialogProject/entry/src/main/ets/pages/Menu/CreateMenu.ets create mode 100644 ArkUISample/DialogProject/entry/src/main/ets/pages/Menu/Index.ets create mode 100644 ArkUISample/DialogProject/entry/src/main/ets/pages/Toast/CreateToast.ets create mode 100644 ArkUISample/DialogProject/entry/src/main/ets/pages/Toast/DefaultAndTopToast.ets create mode 100644 ArkUISample/DialogProject/entry/src/main/ets/pages/Toast/Index.ets create mode 100644 ArkUISample/DialogProject/entry/src/main/ets/pages/Toast/OpenCloseToast.ets create mode 100644 ArkUISample/DialogProject/entry/src/main/ets/pages/customdialog/CreateCustomDialog.ets create mode 100644 ArkUISample/DialogProject/entry/src/main/ets/pages/customdialog/DialogAnimation.ets create mode 100644 ArkUISample/DialogProject/entry/src/main/ets/pages/customdialog/DialogInteraction.ets create mode 100644 ArkUISample/DialogProject/entry/src/main/ets/pages/customdialog/DialogInteraction1.ets create mode 100644 ArkUISample/DialogProject/entry/src/main/ets/pages/customdialog/DialogStyle.ets create mode 100644 ArkUISample/DialogProject/entry/src/main/ets/pages/customdialog/Index.ets create mode 100644 ArkUISample/DialogProject/entry/src/main/ets/pages/customdialog/NestDialog.ets create mode 100644 ArkUISample/DialogProject/entry/src/main/ets/pages/fixedstyledialog/ActionSheet.ets create mode 100644 ArkUISample/DialogProject/entry/src/main/ets/pages/fixedstyledialog/AlertDialog.ets create mode 100644 ArkUISample/DialogProject/entry/src/main/ets/pages/fixedstyledialog/CalendarPickerDialog.ets create mode 100644 ArkUISample/DialogProject/entry/src/main/ets/pages/fixedstyledialog/DatePickerDialog.ets create mode 100644 ArkUISample/DialogProject/entry/src/main/ets/pages/fixedstyledialog/Index.ets create mode 100644 ArkUISample/DialogProject/entry/src/main/ets/pages/fixedstyledialog/ShowActionMenu.ets create mode 100644 ArkUISample/DialogProject/entry/src/main/ets/pages/fixedstyledialog/ShowDialog.ets create mode 100644 ArkUISample/DialogProject/entry/src/main/ets/pages/fixedstyledialog/TextPickerDialog.ets create mode 100644 ArkUISample/DialogProject/entry/src/main/ets/pages/fixedstyledialog/TimePickerDialog.ets create mode 100644 ArkUISample/DialogProject/entry/src/main/ets/pages/opencustomdialog/Index.ets create mode 100644 ArkUISample/DialogProject/entry/src/main/ets/pages/opencustomdialog/openCustomDialog.ets create mode 100644 ArkUISample/DialogProject/entry/src/main/ets/pages/popup/ButtonPopup.ets create mode 100644 ArkUISample/DialogProject/entry/src/main/ets/pages/popup/CustomPopup.ets create mode 100644 ArkUISample/DialogProject/entry/src/main/ets/pages/popup/Index.ets create mode 100644 ArkUISample/DialogProject/entry/src/main/ets/pages/popup/PopupAnimation.ets create mode 100644 ArkUISample/DialogProject/entry/src/main/ets/pages/popup/PopupStateChange.ets create mode 100644 ArkUISample/DialogProject/entry/src/main/ets/pages/popup/PopupStyle.ets create mode 100644 ArkUISample/DialogProject/entry/src/main/ets/pages/popup/TextPrompts.ets create mode 100644 ArkUISample/DialogProject/entry/src/main/module.json5 create mode 100644 ArkUISample/DialogProject/entry/src/main/resources/base/element/color.json create mode 100644 ArkUISample/DialogProject/entry/src/main/resources/base/element/string.json create mode 100644 ArkUISample/DialogProject/entry/src/main/resources/base/media/background.png create mode 100644 ArkUISample/DialogProject/entry/src/main/resources/base/media/foreground.png create mode 100644 ArkUISample/DialogProject/entry/src/main/resources/base/media/layered_image.json create mode 100644 ArkUISample/DialogProject/entry/src/main/resources/base/media/startIcon.png create mode 100644 ArkUISample/DialogProject/entry/src/main/resources/base/profile/backup_config.json create mode 100644 ArkUISample/DialogProject/entry/src/main/resources/base/profile/main_pages.json create mode 100644 ArkUISample/DialogProject/entry/src/main/resources/dark/element/color.json create mode 100644 ArkUISample/DialogProject/entry/src/ohosTest/ets/test/Ability.test.ets create mode 100644 ArkUISample/DialogProject/entry/src/ohosTest/ets/test/Index.test.ets create mode 100644 ArkUISample/DialogProject/entry/src/ohosTest/ets/test/List.test.ets create mode 100644 ArkUISample/DialogProject/entry/src/ohosTest/module.json5 create mode 100644 ArkUISample/DialogProject/hvigor/hvigor-config.json5 create mode 100644 ArkUISample/DialogProject/hvigorfile.ts create mode 100644 ArkUISample/DialogProject/oh-package.json5 create mode 100644 ArkUISample/DialogProject/screenshots/device/image1.png create mode 100644 ArkUISample/DialogProject/screenshots/device/image2.png create mode 100644 ArkUISample/DialogProject/screenshots/device/image3.png create mode 100644 ArkUISample/EventProject/.gitignore create mode 100644 ArkUISample/EventProject/AppScope/app.json5 create mode 100644 ArkUISample/EventProject/AppScope/resources/base/element/string.json create mode 100644 ArkUISample/EventProject/AppScope/resources/base/media/app_icon.png create mode 100644 ArkUISample/EventProject/README_zh.md create mode 100644 ArkUISample/EventProject/build-profile.json5 create mode 100644 ArkUISample/EventProject/code-linter.json5 create mode 100644 ArkUISample/EventProject/entry/.gitignore create mode 100644 ArkUISample/EventProject/entry/build-profile.json5 create mode 100644 ArkUISample/EventProject/entry/hvigorfile.ts create mode 100644 ArkUISample/EventProject/entry/obfuscation-rules.txt create mode 100644 ArkUISample/EventProject/entry/oh-package.json5 create mode 100644 ArkUISample/EventProject/entry/src/main/ets/common/Card.ets create mode 100644 ArkUISample/EventProject/entry/src/main/ets/common/Route.ets create mode 100644 ArkUISample/EventProject/entry/src/main/ets/common/resource.ets create mode 100644 ArkUISample/EventProject/entry/src/main/ets/entryability/EntryAbility.ets create mode 100644 ArkUISample/EventProject/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets create mode 100644 ArkUISample/EventProject/entry/src/main/ets/pages/Index.ets create mode 100644 ArkUISample/EventProject/entry/src/main/ets/pages/Touch/ClickEvent.ets create mode 100644 ArkUISample/EventProject/entry/src/main/ets/pages/Touch/Index.ets create mode 100644 ArkUISample/EventProject/entry/src/main/ets/pages/Touch/TouchEvent.ets create mode 100644 ArkUISample/EventProject/entry/src/main/ets/pages/device/HoverEffect.ets create mode 100644 ArkUISample/EventProject/entry/src/main/ets/pages/device/Index.ets create mode 100644 ArkUISample/EventProject/entry/src/main/ets/pages/device/OnHover.ets create mode 100644 ArkUISample/EventProject/entry/src/main/ets/pages/device/OnKey.ets create mode 100644 ArkUISample/EventProject/entry/src/main/ets/pages/device/OnKeyPreIme.ets create mode 100644 ArkUISample/EventProject/entry/src/main/ets/pages/device/OnMouse.ets create mode 100644 ArkUISample/EventProject/entry/src/main/ets/pages/drag/DefaultDrag.ets create mode 100644 ArkUISample/EventProject/entry/src/main/ets/pages/drag/Index.ets create mode 100644 ArkUISample/EventProject/entry/src/main/ets/pages/drag/MoreDrag.ets create mode 100644 ArkUISample/EventProject/entry/src/main/ets/pages/focus/DefaultFocus.ets create mode 100644 ArkUISample/EventProject/entry/src/main/ets/pages/focus/FocusAndClick.ets create mode 100644 ArkUISample/EventProject/entry/src/main/ets/pages/focus/FocusController.ets create mode 100644 ArkUISample/EventProject/entry/src/main/ets/pages/focus/FocusPriority.ets create mode 100644 ArkUISample/EventProject/entry/src/main/ets/pages/focus/FocusScopePriority.ets create mode 100644 ArkUISample/EventProject/entry/src/main/ets/pages/focus/FocusStyle.ets create mode 100644 ArkUISample/EventProject/entry/src/main/ets/pages/focus/Focusable.ets create mode 100644 ArkUISample/EventProject/entry/src/main/ets/pages/focus/Index.ets create mode 100644 ArkUISample/EventProject/entry/src/main/ets/pages/focus/onFocusBlur.ets create mode 100644 ArkUISample/EventProject/entry/src/main/ets/pages/gesturejudge/GestureJudge.ets create mode 100644 ArkUISample/EventProject/entry/src/main/ets/pages/gesturejudge/Index.ets create mode 100644 ArkUISample/EventProject/entry/src/main/ets/pages/groupgesture/Exclusive.ets create mode 100644 ArkUISample/EventProject/entry/src/main/ets/pages/groupgesture/Index.ets create mode 100644 ArkUISample/EventProject/entry/src/main/ets/pages/groupgesture/Parallel.ets create mode 100644 ArkUISample/EventProject/entry/src/main/ets/pages/groupgesture/Sequence.ets create mode 100644 ArkUISample/EventProject/entry/src/main/ets/pages/singlegesture/Index.ets create mode 100644 ArkUISample/EventProject/entry/src/main/ets/pages/singlegesture/LongPressGesture.ets create mode 100644 ArkUISample/EventProject/entry/src/main/ets/pages/singlegesture/PanGesture.ets create mode 100644 ArkUISample/EventProject/entry/src/main/ets/pages/singlegesture/PinchGesture.ets create mode 100644 ArkUISample/EventProject/entry/src/main/ets/pages/singlegesture/RotationGesture.ets create mode 100644 ArkUISample/EventProject/entry/src/main/ets/pages/singlegesture/SwipeGesture.ets create mode 100644 ArkUISample/EventProject/entry/src/main/ets/pages/singlegesture/TapGesture.ets create mode 100644 ArkUISample/EventProject/entry/src/main/module.json5 create mode 100644 ArkUISample/EventProject/entry/src/main/resources/base/element/color.json create mode 100644 ArkUISample/EventProject/entry/src/main/resources/base/element/string.json create mode 100644 ArkUISample/EventProject/entry/src/main/resources/base/media/background.png create mode 100644 ArkUISample/EventProject/entry/src/main/resources/base/media/foreground.png create mode 100644 ArkUISample/EventProject/entry/src/main/resources/base/media/layered_image.json create mode 100644 ArkUISample/EventProject/entry/src/main/resources/base/media/startIcon.png create mode 100644 ArkUISample/EventProject/entry/src/main/resources/base/profile/backup_config.json create mode 100644 ArkUISample/EventProject/entry/src/main/resources/base/profile/main_pages.json create mode 100644 ArkUISample/EventProject/entry/src/main/resources/dark/element/color.json create mode 100644 ArkUISample/EventProject/entry/src/mock/mock-config.json5 create mode 100644 ArkUISample/EventProject/entry/src/ohosTest/ets/test/Ability.test.ets create mode 100644 ArkUISample/EventProject/entry/src/ohosTest/ets/test/Index.test.ets create mode 100644 ArkUISample/EventProject/entry/src/ohosTest/ets/test/List.test.ets create mode 100644 ArkUISample/EventProject/entry/src/ohosTest/module.json5 create mode 100644 ArkUISample/EventProject/entry/src/test/List.test.ets create mode 100644 ArkUISample/EventProject/entry/src/test/LocalUnit.test.ets create mode 100644 ArkUISample/EventProject/hvigor/hvigor-config.json5 create mode 100644 ArkUISample/EventProject/hvigorfile.ts create mode 100644 ArkUISample/EventProject/oh-package.json5 create mode 100644 ArkUISample/EventProject/screenshots/device/image1.png create mode 100644 ArkUISample/EventProject/screenshots/device/image2.png create mode 100644 ArkUISample/EventProject/screenshots/device/image3.png diff --git a/ArkUISample/DialogProject/.gitignore b/ArkUISample/DialogProject/.gitignore new file mode 100644 index 000000000..d2ff20141 --- /dev/null +++ b/ArkUISample/DialogProject/.gitignore @@ -0,0 +1,12 @@ +/node_modules +/oh_modules +/local.properties +/.idea +**/build +/.hvigor +.cxx +/.clangd +/.clang-format +/.clang-tidy +**/.test +/.appanalyzer \ No newline at end of file diff --git a/ArkUISample/DialogProject/AppScope/app.json5 b/ArkUISample/DialogProject/AppScope/app.json5 new file mode 100644 index 000000000..4110d077e --- /dev/null +++ b/ArkUISample/DialogProject/AppScope/app.json5 @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2025 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. + */ + +{ + "app": { + "bundleName": "com.samples.dialogproject", + "vendor": "example", + "versionCode": 1000000, + "versionName": "1.0.0", + "icon": "$media:app_icon", + "label": "$string:app_name" + } +} diff --git a/ArkUISample/DialogProject/AppScope/resources/base/element/string.json b/ArkUISample/DialogProject/AppScope/resources/base/element/string.json new file mode 100644 index 000000000..7aa13a433 --- /dev/null +++ b/ArkUISample/DialogProject/AppScope/resources/base/element/string.json @@ -0,0 +1,8 @@ +{ + "string": [ + { + "name": "app_name", + "value": "DialogProject" + } + ] +} diff --git a/ArkUISample/DialogProject/AppScope/resources/base/media/app_icon.png b/ArkUISample/DialogProject/AppScope/resources/base/media/app_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..a39445dc87828b76fed6d2ec470dd455c45319e3 GIT binary patch literal 2777 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 literal 0 HcmV?d00001 diff --git a/ArkUISample/DialogProject/README_zh.md b/ArkUISample/DialogProject/README_zh.md new file mode 100644 index 000000000..23df86757 --- /dev/null +++ b/ArkUISample/DialogProject/README_zh.md @@ -0,0 +1,106 @@ +# ArkUI使用弹窗指南文档示例 + +### 介绍 + +本示例通过使用[ArkUI指南文档](https://gitee.com/openharmony/docs/tree/master/zh-cn/application-dev/ui)中各场景的开发示例,展示在工程中,帮助开发者更好地理解ArkUI提供的组件及组件属性并合理使用。该工程中展示的代码详细描述可查如下链接: + +1. [不依赖UI组件的全局自定义弹出框 (openCustomDialog)](https://gitee.com/openharmony/docs/blob/OpenHarmony-5.0.1-Release/zh-cn/application-dev/ui/arkts-uicontext-custom-dialog.md)。 +2. [基础自定义弹出框 (CustomDialog)](https://gitee.com/openharmony/docs/blob/OpenHarmony-5.0.1-Release/zh-cn/application-dev/ui/arkts-common-components-custom-dialog.md)。 +3. [固定样式弹出框](https://gitee.com/openharmony/docs/blob/OpenHarmony-5.0.1-Release/zh-cn/application-dev/ui/arkts-fixes-style-dialog.md)。 +4. [菜单控制(Menu)](https://gitee.com/openharmony/docs/blob/OpenHarmony-5.0.1-Release/zh-cn/application-dev/ui/arkts-popup-and-menu-components-menu.md) +5. [气泡提示 (Popup)](https://gitee.com/openharmony/docs/blob/OpenHarmony-5.0.1-Release/zh-cn/application-dev/ui/arkts-popup-and-menu-components-popup.md) +6. [即时反馈 (Toast)](https://gitee.com/openharmony/docs/blob/OpenHarmony-5.0.1-Release/zh-cn/application-dev/ui/arkts-create-toast.md) +### 效果预览 + +| 首页 | 弹窗类组件目录 | 自定义弹窗示例 | +|------------------------------------|------------------------------------|------------------------------------| +| ![](screenshots/device/image1.png) | ![](screenshots/device/image2.png) | ![](screenshots/device/image3.png) | + +### 使用说明 + +1. 在主界面,可以点击对应卡片,选择需要参考的组件示例。 + +2. 在组件目录选择详细的示例参考。 + +3. 进入示例界面,查看参考示例。 + +4. 通过自动测试框架可进行测试及维护。 + +### 工程目录 +``` +entry/src/main/ets/ +|---entryability +|---pages +| |---customdialog //自定义弹出框 +| | |---CreateCustomDialog.ets +| | |---DialogAnimation.ets +| | |---DialogInteraction.ets +| | |---DialogInteraction1.ets +| | |---DialogStyle.ets +| | |---Index.ets +| | |---NestDialog.ets +| |---fixedstyledialog //固定样式弹出框 +| | |---ActionSheet.ets +| | |---AlertDialog.ets +| | |---CalendarPickerDialog.ets +| | |---DatePickerDialog.ets +| | |---Index.ets +| | |---ShowActionMenu.ets +| | |---ShowDialog.ets +| | |---TextPickerDialog.ets +| | |---TimePickerDialog.ets +| |---Menu //菜单 +| | |---CreateMenu.ets +| | |---Index.ets +| |---opencustomdialog //不依赖UI组件的全局自定义弹出框 +| | |---Index.ets +| | |---openCustomDialog.ets +| |---popup //气泡提示 +| | |---ButtonPopup.ets +| | |---CustomPopup.ets +| | |---Index.ets +| | |---PopupAnimation.ets +| | |---PopupStateChange.ets +| | |---PopupStyle.ets +| | |---TextPrompts.ets +| |---Toast //即使反馈 +| | |---CreateToast.ets +| | |---Index.ets +| | |---OpenCloseToast.ets +|---pages +| |---Index.ets // 应用主页面 +| |---Index2.ets // 弹窗跳转页面 +entry/src/ohosTest/ +|---ets +| |---index.test.ets // 示例代码测试代码 +``` + +### 相关权限 + +不涉及。 + +### 依赖 + +不涉及。 + +### 约束与限制 + +1. 本示例仅支持标准系统上运行,支持设备:华为手机。 + +2. HarmonyOS系统:HarmonyOS 5.1.0 Release及以上。 + +3. DevEco Studio版本:DevEco Studio 5.1.0 Release及以上。 + +4. HarmonyOS SDK版本:HarmonyOS 5.1.0 Release及以上。 + +### 下载 + +如需单独下载本工程,执行如下命令: + +```` +git init +git config core.sparsecheckout true +echo ArkUISample/DialogProject > .git/info/sparse-checkout +git remote add origin https://gitee.com/harmonyos_samples/guide-snippets.git +git pull origin master +```` \ No newline at end of file diff --git a/ArkUISample/DialogProject/build-profile.json5 b/ArkUISample/DialogProject/build-profile.json5 new file mode 100644 index 000000000..407b1cd9c --- /dev/null +++ b/ArkUISample/DialogProject/build-profile.json5 @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2025 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. + */ + +{ + "app": { + "signingConfigs": [], + "products": [ + { + "name": "default", + "signingConfig": "default", + "compatibleSdkVersion": "5.1.0(18)", + "targetSdkVersion": "5.1.0(18)", + "runtimeOS": "HarmonyOS", + "buildOption": { + "strictMode": { + "caseSensitiveCheck": true, + "useNormalizedOHMUrl": true + } + } + } + ], + "buildModeSet": [ + { + "name": "debug", + }, + { + "name": "release" + } + ] + }, + "modules": [ + { + "name": "entry", + "srcPath": "./entry", + "targets": [ + { + "name": "default", + "applyToProducts": [ + "default" + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/ArkUISample/DialogProject/code-linter.json5 b/ArkUISample/DialogProject/code-linter.json5 new file mode 100644 index 000000000..28586467e --- /dev/null +++ b/ArkUISample/DialogProject/code-linter.json5 @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2025 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. + */ + +{ + "files": [ + "**/*.ets" + ], + "ignore": [ + "**/src/ohosTest/**/*", + "**/src/test/**/*", + "**/src/mock/**/*", + "**/node_modules/**/*", + "**/oh_modules/**/*", + "**/build/**/*", + "**/.preview/**/*" + ], + "ruleSet": [ + "plugin:@performance/recommended", + "plugin:@typescript-eslint/recommended" + ], + "rules": { + } +} \ No newline at end of file diff --git a/ArkUISample/DialogProject/entry/.gitignore b/ArkUISample/DialogProject/entry/.gitignore new file mode 100644 index 000000000..e2713a277 --- /dev/null +++ b/ArkUISample/DialogProject/entry/.gitignore @@ -0,0 +1,6 @@ +/node_modules +/oh_modules +/.preview +/build +/.cxx +/.test \ No newline at end of file diff --git a/ArkUISample/DialogProject/entry/build-profile.json5 b/ArkUISample/DialogProject/entry/build-profile.json5 new file mode 100644 index 000000000..e7569e305 --- /dev/null +++ b/ArkUISample/DialogProject/entry/build-profile.json5 @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2025 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. + */ + +{ + "apiType": "stageMode", + "buildOption": { + }, + "buildOptionSet": [ + { + "name": "release", + "arkOptions": { + "obfuscation": { + "ruleOptions": { + "enable": false, + "files": [ + "./obfuscation-rules.txt" + ] + } + } + } + }, + ], + "targets": [ + { + "name": "default" + }, + { + "name": "ohosTest", + } + ] +} \ No newline at end of file diff --git a/ArkUISample/DialogProject/entry/hvigorfile.ts b/ArkUISample/DialogProject/entry/hvigorfile.ts new file mode 100644 index 000000000..c6edcd904 --- /dev/null +++ b/ArkUISample/DialogProject/entry/hvigorfile.ts @@ -0,0 +1,6 @@ +import { hapTasks } from '@ohos/hvigor-ohos-plugin'; + +export default { + system: hapTasks, /* Built-in plugin of Hvigor. It cannot be modified. */ + plugins:[] /* Custom plugin to extend the functionality of Hvigor. */ +} diff --git a/ArkUISample/DialogProject/entry/obfuscation-rules.txt b/ArkUISample/DialogProject/entry/obfuscation-rules.txt new file mode 100644 index 000000000..272efb6ca --- /dev/null +++ b/ArkUISample/DialogProject/entry/obfuscation-rules.txt @@ -0,0 +1,23 @@ +# Define project specific obfuscation rules here. +# You can include the obfuscation configuration files in the current module's build-profile.json5. +# +# For more details, see +# https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/source-obfuscation-V5 + +# Obfuscation options: +# -disable-obfuscation: disable all obfuscations +# -enable-property-obfuscation: obfuscate the property names +# -enable-toplevel-obfuscation: obfuscate the names in the global scope +# -compact: remove unnecessary blank spaces and all line feeds +# -remove-log: remove all console.* statements +# -print-namecache: print the name cache that contains the mapping from the old names to new names +# -apply-namecache: reuse the given cache file + +# Keep options: +# -keep-property-name: specifies property names that you want to keep +# -keep-global-name: specifies names that you want to keep in the global scope + +-enable-property-obfuscation +-enable-toplevel-obfuscation +-enable-filename-obfuscation +-enable-export-obfuscation \ No newline at end of file diff --git a/ArkUISample/DialogProject/entry/oh-package.json5 b/ArkUISample/DialogProject/entry/oh-package.json5 new file mode 100644 index 000000000..c9cb6c817 --- /dev/null +++ b/ArkUISample/DialogProject/entry/oh-package.json5 @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2025 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. + */ + +{ + "name": "entry", + "version": "1.0.0", + "description": "Please describe the basic information.", + "main": "", + "author": "", + "license": "", + "dependencies": {} +} + diff --git a/ArkUISample/DialogProject/entry/src/main/ets/common/Card.ets b/ArkUISample/DialogProject/entry/src/main/ets/common/Card.ets new file mode 100644 index 000000000..61df5e455 --- /dev/null +++ b/ArkUISample/DialogProject/entry/src/main/ets/common/Card.ets @@ -0,0 +1,102 @@ +/* + * Copyright (c) 2025 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. + */ + +@Component +export struct CompletedRoutableCard { + @Prop + symbol: Resource = $r('sys.symbol.label'); + @Prop + @Require + title: ResourceStr; + @Prop + @Require + description: ResourceStr; + + build() { + Card({ verticalAlign: VerticalAlign.Top }) { + Button({ type: ButtonType.Circle }) { + SymbolGlyph(this.symbol) + .fontColor(['#fff']) + .fontSize(16) + } + .borderRadius(14) + + Column({ space: 8 }) { + Text(this.title) + .fontColor($r('sys.color.font_primary')) + + Text(this.description) + .fontColor($r('sys.color.font_secondary')) + .fontSize($r('sys.float.Body_S')) + } + .alignItems(HorizontalAlign.Start) + .layoutWeight(1) + } + } +} + +@Component +export struct Card { + @Prop + verticalAlign: VerticalAlign = VerticalAlign.Center; + @BuilderParam + content: () => void; + + build() { + Row({ space: 12 }) { + this.content() + } + .alignItems(this.verticalAlign) + .backgroundColor('#fff') + .borderRadius(12) + .padding(12) + .width('100%') + } +} + +@Component +export struct RoutableCard { + @Prop + icon: Resource = $r('sys.symbol.label'); + @Prop + @Require + title: ResourceStr; + + build() { + Card() { + Button({ type: ButtonType.Circle }) { + SymbolGlyph(this.icon) + .fontColor(['#fff']) + .fontSize(16) + } + .borderRadius(14) + + Text(this.title) + .fontColor($r('sys.color.font_primary')) + .minFontSize(12) + .maxFontSize(16) + .maxLines(1) + .textOverflow({ overflow: TextOverflow.Ellipsis }) + + Blank() + + Button({ type: ButtonType.Normal, buttonStyle: ButtonStyleMode.TEXTUAL }) { + SymbolGlyph($r('sys.symbol.chevron_right')) + .fontSize(18) + .fontColor([$r('sys.color.font_secondary')]) + } + } + } +} \ No newline at end of file diff --git a/ArkUISample/DialogProject/entry/src/main/ets/common/PromptActionClass.ts b/ArkUISample/DialogProject/entry/src/main/ets/common/PromptActionClass.ts new file mode 100644 index 000000000..b76828c66 --- /dev/null +++ b/ArkUISample/DialogProject/entry/src/main/ets/common/PromptActionClass.ts @@ -0,0 +1,87 @@ +/* + * Copyright (c) 2025 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. + */ + +// PromptActionClass.ts +// [Start open_close_update_custom_dialog] +import { BusinessError } from '@kit.BasicServicesKit'; +import { ComponentContent, window } from '@kit.ArkUI'; +import { UIContext } from '@ohos.arkui.UIContext'; + +export class PromptActionClass { + static ctx: UIContext; + static contentNode: ComponentContent; + static options: Object; + + static setContext(context: UIContext) { + this.ctx = context; + } + + static setContentNode(node: ComponentContent) { + this.contentNode = node; + } + + static setOptions(options: Object) { + this.options = options; + } + + // [Start call_open_custom_dialog] + static openDialog() { + if (this.contentNode !== null) { + this.ctx.getPromptAction().openCustomDialog(this.contentNode, this.options) + .then(() => { + console.info('OpenCustomDialog complete.'); + }) + .catch((error: BusinessError) => { + let message = (error as BusinessError).message; + let code = (error as BusinessError).code; + console.error(`OpenCustomDialog args error code is ${code}, message is ${message}`); + }) + } + } + // [End call_open_custom_dialog] + + // [Start call_close_custom_dialog] + static closeDialog() { + if (this.contentNode !== null) { + this.ctx.getPromptAction().closeCustomDialog(this.contentNode) + .then(() => { + console.info('CloseCustomDialog complete.'); + }) + .catch((error: BusinessError) => { + let message = (error as BusinessError).message; + let code = (error as BusinessError).code; + console.error(`CloseCustomDialog args error code is ${code}, message is ${message}`); + }) + } + } + // [End call_close_custom_dialog] + + // [Start update_custom_dialog_property] + static updateDialog(options: Object) { + if (this.contentNode !== null) { + this.ctx.getPromptAction().updateCustomDialog(this.contentNode, options) + .then(() => { + console.info('UpdateCustomDialog complete.'); + }) + .catch((error: BusinessError) => { + let message = (error as BusinessError).message; + let code = (error as BusinessError).code; + console.error(`UpdateCustomDialog args error code is ${code}, message is ${message}`); + }) + } + } + // [End update_custom_dialog_property] +} +// [End open_close_update_custom_dialog] \ No newline at end of file diff --git a/ArkUISample/DialogProject/entry/src/main/ets/common/Route.ets b/ArkUISample/DialogProject/entry/src/main/ets/common/Route.ets new file mode 100644 index 000000000..859fec8c9 --- /dev/null +++ b/ArkUISample/DialogProject/entry/src/main/ets/common/Route.ets @@ -0,0 +1,21 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export interface Route { + title: string; + name: string; + items?: Route[]; + description?: ResourceStr; +} \ No newline at end of file diff --git a/ArkUISample/DialogProject/entry/src/main/ets/common/resource.ets b/ArkUISample/DialogProject/entry/src/main/ets/common/resource.ets new file mode 100644 index 000000000..723a39426 --- /dev/null +++ b/ArkUISample/DialogProject/entry/src/main/ets/common/resource.ets @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export class P2PManager { + public resourceToString(resource: Resource): string { + return getContext(this).resourceManager.getStringSync(resource); + } +} + +// 默认导出let +let p2pManager = new P2PManager(); + +export default p2pManager as P2PManager; \ No newline at end of file diff --git a/ArkUISample/DialogProject/entry/src/main/ets/entryability/EntryAbility.ets b/ArkUISample/DialogProject/entry/src/main/ets/entryability/EntryAbility.ets new file mode 100644 index 000000000..edc2839f2 --- /dev/null +++ b/ArkUISample/DialogProject/entry/src/main/ets/entryability/EntryAbility.ets @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2025 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 { AbilityConstant, ConfigurationConstant, UIAbility, Want } from '@kit.AbilityKit'; +import { hilog } from '@kit.PerformanceAnalysisKit'; +import { window } from '@kit.ArkUI'; + +export default class EntryAbility extends UIAbility { + onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void { + this.context.getApplicationContext().setColorMode(ConfigurationConstant.ColorMode.COLOR_MODE_NOT_SET); + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate'); + } + + onDestroy(): void { + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onDestroy'); + } + + onWindowStageCreate(windowStage: window.WindowStage): void { + // Main window is created, set main page for this ability + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageCreate'); + + windowStage.loadContent('pages/Index', (err) => { + if (err.code) { + hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? ''); + return; + } + hilog.info(0x0000, 'testTag', 'Succeeded in loading the content.'); + }); + } + + onWindowStageDestroy(): void { + // Main window is destroyed, release UI related resources + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageDestroy'); + } + + onForeground(): void { + // Ability has brought to foreground + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onForeground'); + } + + onBackground(): void { + // Ability has back to background + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onBackground'); + } +} \ No newline at end of file diff --git a/ArkUISample/DialogProject/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets b/ArkUISample/DialogProject/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets new file mode 100644 index 000000000..b1e212947 --- /dev/null +++ b/ArkUISample/DialogProject/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2025 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 { hilog } from '@kit.PerformanceAnalysisKit'; +import { BackupExtensionAbility, BundleVersion } from '@kit.CoreFileKit'; + +export default class EntryBackupAbility extends BackupExtensionAbility { + async onBackup() { + hilog.info(0x0000, 'testTag', 'onBackup ok'); + } + + async onRestore(bundleVersion: BundleVersion) { + hilog.info(0x0000, 'testTag', 'onRestore ok %{public}s', JSON.stringify(bundleVersion)); + } +} \ No newline at end of file diff --git a/ArkUISample/DialogProject/entry/src/main/ets/pages/Index.ets b/ArkUISample/DialogProject/entry/src/main/ets/pages/Index.ets new file mode 100644 index 000000000..fe681e201 --- /dev/null +++ b/ArkUISample/DialogProject/entry/src/main/ets/pages/Index.ets @@ -0,0 +1,124 @@ +/* + * Copyright (c) 2025 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 { LengthMetrics } from '@kit.ArkUI'; +import { RoutableCard } from '../common/Card'; +import resource from '../common/resource'; +import { Route } from '../common/Route'; +import { CustomDestination, Custom_ROUTE_PREFIX } from './customdialog/Index'; +import { FixedDialogDestination, Fixed_ROUTE_PREFIX } from './fixedstyledialog/Index'; +import { MenuDestination, Menu_ROUTE_PREFIX } from './Menu/Index'; +import { CustomDialogDestination, CustomDialog_ROUTE_PREFIX } from './opencustomdialog/Index'; +import { PopupDestination, Popup_ROUTE_PREFIX } from './popup/Index'; +import { ToastDestination, Toast_ROUTE_PREFIX } from './Toast/Index'; + +const routes: Route[] = [ + { + title: resource.resourceToString($r('app.string.openCustomDialog')), + name: CustomDialog_ROUTE_PREFIX + }, + { + title: resource.resourceToString($r('app.string.CustomDialog1')), + name: Custom_ROUTE_PREFIX + }, + { + title: resource.resourceToString($r('app.string.FixedStyleDialog1')), + name: Fixed_ROUTE_PREFIX + }, + { + title: resource.resourceToString($r('app.string.Menu1')), + name: Menu_ROUTE_PREFIX + }, + { + title: resource.resourceToString($r('app.string.Toast1')), + name: Toast_ROUTE_PREFIX + }, + { + title: resource.resourceToString($r('app.string.Popup1')), + name: Popup_ROUTE_PREFIX + } +]; + +@Builder +function Destination(name: string) { + if (name.startsWith(CustomDialog_ROUTE_PREFIX)) { + CustomDialogDestination(name); + } else if (name.startsWith(Custom_ROUTE_PREFIX)) { + CustomDestination(name); + } else if (name.startsWith(Fixed_ROUTE_PREFIX)) { + FixedDialogDestination(name); + } else if (name.startsWith(Menu_ROUTE_PREFIX)) { + MenuDestination(name); + } else if (name.startsWith(Toast_ROUTE_PREFIX)) { + ToastDestination(name); + } else if (name.startsWith(Popup_ROUTE_PREFIX)) { + PopupDestination(name); + } +} + +@Entry +@Component +struct Index { + @State condition: string = ''; + @Provide pathStack: NavPathStack = new NavPathStack(); + + getFilteredRoutes(): Route[] { + if (!this.condition) { + return routes; + } + return routes.filter((route: Route) => { + return route.title.includes(this.condition); + }) + } + + @LocalBuilder + Title() { + Column() { + Search({ value: this.condition }) + .onChange(value => { + this.condition = value; + }) + .margin({ start: LengthMetrics.vp(16), end: LengthMetrics.vp(16) }) + } + .justifyContent(FlexAlign.Center) + .height('100%') + } + + build() { + Navigation(this.pathStack) { + List({ space: 12 }) { + ForEach(this.getFilteredRoutes(), (route: Route) => { + ListItem() { + RoutableCard({ title: route.title }) + } + .width('100%') + .onClick(() => { + this.pathStack.pushPath({ name: route.name }); + }) + }) + } + .padding({ start: LengthMetrics.vp(16), end: LengthMetrics.vp(16) }) + .contentStartOffset(56) + .height('100%') + .width('100%') + } + .backgroundColor('#f1f3f5') + .title({ builder: this.Title, height: 56 }, { + backgroundBlurStyle: BlurStyle.COMPONENT_THICK, + barStyle: BarStyle.STACK + }) + .navDestination(Destination) + } +} \ No newline at end of file diff --git a/ArkUISample/DialogProject/entry/src/main/ets/pages/Index2.ets b/ArkUISample/DialogProject/entry/src/main/ets/pages/Index2.ets new file mode 100644 index 000000000..0573f0b09 --- /dev/null +++ b/ArkUISample/DialogProject/entry/src/main/ets/pages/Index2.ets @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2025 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. + */ + +// [Start dialog_route_jump_back] +@Entry +@Component +struct Index2 { + @State message: ResourceStr = $r('app.string.back'); + build() { + Column() { + Button(this.message) + .fontSize(50) + .fontWeight(FontWeight.Bold).onClick(() => { + this.getUIContext().getRouter().back({ + url: '', + params: { + info: 'Hello World' + } + }); + }) + }.width('100%').height('100%').margin({ top: 20 }) + } +} +// [End dialog_route_jump_back] diff --git a/ArkUISample/DialogProject/entry/src/main/ets/pages/Menu/CreateMenu.ets b/ArkUISample/DialogProject/entry/src/main/ets/pages/Menu/CreateMenu.ets new file mode 100644 index 000000000..e6c8f9d31 --- /dev/null +++ b/ArkUISample/DialogProject/entry/src/main/ets/pages/Menu/CreateMenu.ets @@ -0,0 +1,121 @@ +/* + * Copyright (c) 2025 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 { PromptAction } from '@kit.ArkUI'; + +// [Start builder_menu_content] +class Tmp { + private iconStr2: ResourceStr = $r('app.media.app_icon') + + set(val: Resource) { + this.iconStr2 = val; + } +} + +@Entry +@Component +export struct menuExample { + @State select: boolean = true; + private iconStr: ResourceStr = $r('app.media.app_icon'); + private iconStr2: ResourceStr = $r('app.media.app_icon'); + + @Builder + SubMenu() { + Menu() { + MenuItem({ content: 'copy', labelInfo: 'Ctrl+C' }) + MenuItem({ content: 'paste', labelInfo: 'Ctrl+V' }) + } + } + + @Builder + MyMenu() { + Menu() { + MenuItem({ startIcon: $r('app.media.app_icon'), content: $r('app.string.menu_single') }) + MenuItem({ startIcon: $r('app.media.app_icon'), content: $r('app.string.menu_forbid') }).enabled(false) + MenuItem({ + startIcon: this.iconStr, + content: $r('app.string.menu_more'), + endIcon: $r('app.media.app_icon'), + // 当builder参数进行配置时,表示与menuItem项绑定了子菜单。鼠标hover在该菜单项时,会显示子菜单。 + builder: this.SubMenu + }) + MenuItemGroup({ header: $r('app.string.menu_subtitle') }) { + MenuItem({ content: $r('app.string.menu_selection') }) + .selectIcon(true) + .selected(this.select) + .onChange((selected) => { + console.info('menuItem select' + selected); + let str: Tmp = new Tmp(); + str.set($r('app.media.app_icon')); + }) + MenuItem({ + startIcon: $r('app.media.app_icon'), + content: $r('app.string.menu_more'), + endIcon: $r('app.media.foreground'), + builder: this.SubMenu + }) + } + + MenuItem({ + startIcon: this.iconStr2, + content: $r('app.string.menu_single'), + endIcon: $r('app.media.app_icon') + }) + } + } + build() { + // [StartExclude builder_menu_content] + NavDestination() { + Column({ space: 12 }) { + + // [Start call_bind_menu] + Button($r('app.string.menu_default')) + .bindMenu([ + { + value: 'Menu1', + action: () => { + console.info('handle Menu1 select'); + } + } + ]) + // [End call_bind_menu] + .width(160) + .height(50) + + // [Start bind_menu_property] + Button($r('app.string.menu_bind')) + .bindMenu(this.MyMenu) + // [End bind_menu_property] + .width(160) + .height(50) + + // [Start create_right_click_menu] + Button($r('app.string.menu_rightClick')) + .bindContextMenu(this.MyMenu, ResponseType.RightClick) + // [End create_right_click_menu] + .width(160) + .height(50) + + } + .width('100%') + .height('100%') + .padding({ left: 12, right: 12 }) + } + .backgroundColor('#f1f2f3') + .title($r('app.string.create_menu')) + } + // [EndExclude builder_menu_content] +} +// [End builder_menu_content] \ No newline at end of file diff --git a/ArkUISample/DialogProject/entry/src/main/ets/pages/Menu/Index.ets b/ArkUISample/DialogProject/entry/src/main/ets/pages/Menu/Index.ets new file mode 100644 index 000000000..55b4a25cc --- /dev/null +++ b/ArkUISample/DialogProject/entry/src/main/ets/pages/Menu/Index.ets @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2025 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 { CompletedRoutableCard } from '../../common/Card'; +import resource from '../../common/resource'; +import { Route } from '../../common/Route'; +import { menuExample } from './CreateMenu'; + + +export const Menu_ROUTE_PREFIX: string = 'Menu_ROUTE_PREFIX'; + +const routes: Route[] = [ + { + name: `${Menu_ROUTE_PREFIX}/CreateMenu`, + title: resource.resourceToString($r('app.string.CreateMenu_title')), + description: $r('app.string.CreateMenu_des'), + } +] + +@Builder +export function MenuDestination(name: string) { + if (name === Menu_ROUTE_PREFIX) { + MenuExample(); + } else if (name === routes[0].name) { + menuExample(); + } +} + +@Entry +@Component +struct MenuExample { + @Consume pathStack: NavPathStack; + + build() { + NavDestination() { + List({ space: 12 }) { + ForEach(routes, (route: Route) => { + ListItem() { + CompletedRoutableCard({ title: route.title, description: route.description }) + } + .width('100%') + .onClick(() => { + this.pathStack.pushPath({ name: route.name }); + }) + }) + } + .contentStartOffset(20) + .padding({ left: 16, right: 16 }) + } + .backgroundColor('#f1f3f5') + .title('', { + backgroundBlurStyle: BlurStyle.COMPONENT_THICK, + barStyle: BarStyle.STACK + }) + .title($r('app.string.menu')) + } +} \ No newline at end of file diff --git a/ArkUISample/DialogProject/entry/src/main/ets/pages/Toast/CreateToast.ets b/ArkUISample/DialogProject/entry/src/main/ets/pages/Toast/CreateToast.ets new file mode 100644 index 000000000..878844d16 --- /dev/null +++ b/ArkUISample/DialogProject/entry/src/main/ets/pages/Toast/CreateToast.ets @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2025 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. + */ + +// [Start create_toast] +import { PromptAction } from '@kit.ArkUI'; +import { BusinessError } from '@kit.BasicServicesKit'; + +@Entry +@Component +export struct CreateToastExample { + private uiContext: UIContext = this.getUIContext(); + private promptAction: PromptAction = this.uiContext.getPromptAction(); + build() { + NavDestination() { + Column({ space: 12 }) { + + Column() { + Button('Show toast').fontSize(20) + .onClick(() => { + try { + this.promptAction.showToast({ + message: 'Hello World', + duration: 2000 + }); + } catch (error) { + let message = (error as BusinessError).message; + let code = (error as BusinessError).code; + console.error(`showToast args error code is ${code}, message is ${message}`); + }; + }) + }.height('100%').width('100%').justifyContent(FlexAlign.Center) + + } + .width('100%') + .height('100%') + .padding({ left: 12, right: 12 }) + } + .backgroundColor('#f1f2f3') + .title($r('app.string.CreateToast_title')) + } +} +// [End create_toast] \ No newline at end of file diff --git a/ArkUISample/DialogProject/entry/src/main/ets/pages/Toast/DefaultAndTopToast.ets b/ArkUISample/DialogProject/entry/src/main/ets/pages/Toast/DefaultAndTopToast.ets new file mode 100644 index 000000000..e9d631fbe --- /dev/null +++ b/ArkUISample/DialogProject/entry/src/main/ets/pages/Toast/DefaultAndTopToast.ets @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2025 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 {promptAction} from '@kit.ArkUI'; + +@Entry +@Component +export struct DefaultAndTopToastExample { + private uiContext: UIContext = this.getUIContext(); + + build() { + NavDestination() { + Column({ space: 10 }) { + TextInput() + Column() { + Button() { + Text('DEFAULT Toast') + .fontSize(20) + .fontWeight(FontWeight.Bold) + + } + .height(100) + .width('100%') + .onClick(() => { + promptAction.showToast({ + message: 'ok,I am DEFAULT toast', + duration: 2000, + showMode: promptAction.ToastShowMode.DEFAULT, + bottom: 80 + }) + }) + Blank().height(200); + Button() { + Text('TOPMOST Toast') + .fontSize(20) + .fontWeight(FontWeight.Bold) + + } + .height(100) + .width('100%') + .onClick(() => { + promptAction.showToast({ + message: 'ok,I am TOP_MOST toast', + duration: 2000, + showMode: promptAction.ToastShowMode.TOP_MOST, + bottom: 85 + }) + }) + }.height('100%').width('100%').justifyContent(FlexAlign.Center) + } + .width('100%') + .height('100%') + .padding({ left: 12, right: 12 }) + } + } +} diff --git a/ArkUISample/DialogProject/entry/src/main/ets/pages/Toast/Index.ets b/ArkUISample/DialogProject/entry/src/main/ets/pages/Toast/Index.ets new file mode 100644 index 000000000..3015f8beb --- /dev/null +++ b/ArkUISample/DialogProject/entry/src/main/ets/pages/Toast/Index.ets @@ -0,0 +1,84 @@ +/* + * Copyright (c) 2025 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 { CompletedRoutableCard } from '../../common/Card'; +import resource from '../../common/resource'; +import { Route } from '../../common/Route'; +import { CreateToastExample } from './CreateToast'; +import { OpenCloseToastExample } from './OpenCloseToast'; +import { DefaultAndTopToastExample } from './DefaultAndTopToast'; + +export const Toast_ROUTE_PREFIX: string = 'Toast_ROUTE_PREFIX'; + +const routes: Route[] = [ + { + name: `${Toast_ROUTE_PREFIX}/CreateToast`, + title: resource.resourceToString($r('app.string.CreateToast_title')), + description: $r('app.string.CreateToast_des'), + }, + { + name: `${Toast_ROUTE_PREFIX}/OpenCloseToast`, + title: resource.resourceToString($r('app.string.OpenCloseToast_title')), + description: $r('app.string.OpenCloseToast_des'), + }, + { + name: `${Toast_ROUTE_PREFIX}/DefaultAndTopToast`, + title: resource.resourceToString($r('app.string.DefaultAndTopToast_title')), + description: $r('app.string.DefaultAndTopToast_des'), + } +] + +@Builder +export function ToastDestination(name: string) { + if (name === Toast_ROUTE_PREFIX) { + ToastExample(); + } else if (name === routes[0].name) { + CreateToastExample(); + } else if (name === routes[1].name) { + OpenCloseToastExample(); + }else if (name === routes[2].name) { + DefaultAndTopToastExample(); + } +} + +@Entry +@Component +struct ToastExample { + @Consume pathStack: NavPathStack; + + build() { + NavDestination() { + List({ space: 12 }) { + ForEach(routes, (route: Route) => { + ListItem() { + CompletedRoutableCard({ title: route.title, description: route.description }) + } + .width('100%') + .onClick(() => { + this.pathStack.pushPath({ name: route.name }); + }) + }) + } + .contentStartOffset(20) + .padding({ left: 16, right: 16 }) + } + .backgroundColor('#f1f3f5') + .title('', { + backgroundBlurStyle: BlurStyle.COMPONENT_THICK, + barStyle: BarStyle.STACK + }) + .title($r('app.string.toast')) + } +} \ No newline at end of file diff --git a/ArkUISample/DialogProject/entry/src/main/ets/pages/Toast/OpenCloseToast.ets b/ArkUISample/DialogProject/entry/src/main/ets/pages/Toast/OpenCloseToast.ets new file mode 100644 index 000000000..9633db895 --- /dev/null +++ b/ArkUISample/DialogProject/entry/src/main/ets/pages/Toast/OpenCloseToast.ets @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2025 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 { PromptAction } from '@kit.ArkUI'; +import { BusinessError } from '@kit.BasicServicesKit'; + +@Entry +@Component +export struct OpenCloseToastExample { + @State toastId: number = 0; + private uiContext: UIContext = this.getUIContext(); + private promptAction: PromptAction = this.uiContext.getPromptAction(); + + build() { + NavDestination() { + Column({ space: 12 }) { + + Column() { + Button('Open Toast') + .height(100) + .onClick(() => { + try { + this.promptAction.openToast({ + message: 'Toast Massage', + duration: 10000, + }).then((toastId: number) => { + this.toastId = toastId; + }); + } catch (error) { + let message = (error as BusinessError).message; + let code = (error as BusinessError).code; + console.error(`OpenToast error code is ${code}, message is ${message}`); + }; + }) + Blank().height(50); + Button('Close Toast') + .height(100) + .onClick(() => { + try { + this.promptAction.closeToast(this.toastId); + } catch (error) { + let message = (error as BusinessError).message; + let code = (error as BusinessError).code; + console.error(`CloseToast error code is ${code}, message is ${message}`); + }; + }) + }.height('100%').width('100%').justifyContent(FlexAlign.Center) + + } + .width('100%') + .height('100%') + .padding({ left: 12, right: 12 }) + } + .backgroundColor('#f1f2f3') + .title($r('app.string.OpenCloseToast_title')) + } +} \ No newline at end of file diff --git a/ArkUISample/DialogProject/entry/src/main/ets/pages/customdialog/CreateCustomDialog.ets b/ArkUISample/DialogProject/entry/src/main/ets/pages/customdialog/CreateCustomDialog.ets new file mode 100644 index 000000000..55f609efe --- /dev/null +++ b/ArkUISample/DialogProject/entry/src/main/ets/pages/customdialog/CreateCustomDialog.ets @@ -0,0 +1,72 @@ +/* + * Copyright (c) 2025 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 { PromptActionClass } from '../../common/PromptActionClass'; +import { ComponentContent } from '@kit.ArkUI'; + +// [Start create_custom_dialog_example] +@CustomDialog +struct CustomDialogExample { + controller: CustomDialogController = new CustomDialogController({ + builder: CustomDialogExample({}), + }) + + build() { + Column() { + Text($r('app.string.CustomDialog_dialog')) + } + .padding({ + top: 24, + left: 24, + bottom: 24, + right: 24 + }) + } +} +// [End create_custom_dialog_example] + +// [Start click_event_pop_dialog] +// [Start create_custom_dialog_controller] +@Entry +@Component +export struct CreateDialog { + dialogController: CustomDialogController = new CustomDialogController({ + builder: CustomDialogExample(), + }) + + // [StartExclude create_custom_dialog_controller] + build() { + NavDestination() { + Column({ space: 12 }) { + + Column() { + Button('click me') + .onClick(() => { + this.dialogController.open(); + }) + }.width('100%').margin({ top: 5 }) + + } + .width('100%') + .height('100%') + .padding({ left: 12, right: 12 }) + } + .backgroundColor('#f1f2f3') + .title($r('app.string.CustomDialog_create')) + } + // [EndExclude create_custom_dialog_controller] + // [End create_custom_dialog_controller] + // [End click_event_pop_dialog] +} \ No newline at end of file diff --git a/ArkUISample/DialogProject/entry/src/main/ets/pages/customdialog/DialogAnimation.ets b/ArkUISample/DialogProject/entry/src/main/ets/pages/customdialog/DialogAnimation.ets new file mode 100644 index 000000000..e8a2125d3 --- /dev/null +++ b/ArkUISample/DialogProject/entry/src/main/ets/pages/customdialog/DialogAnimation.ets @@ -0,0 +1,79 @@ +/* + * Copyright (c) 2025 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. + */ + +// [Start set_dialog_animation] +@CustomDialog +struct CustomDialogExample { + controller?: CustomDialogController; + + build() { + Column() { + Text($r('app.string.CustomDialog_Animation')) + } + .padding({ + top: 24, + left: 24, + bottom: 24, + right: 24 + }) + } +} + +@Entry +@Component +export struct DialogAnimation { + @State textValue: string = ''; + @State inputValue: string = 'click me'; + dialogController: CustomDialogController | null = new CustomDialogController({ + builder: CustomDialogExample(), + openAnimation: { + duration: 1200, + curve: Curve.Friction, + delay: 500, + playMode: PlayMode.Alternate, + onFinish: () => { + console.info('play end'); + } + } + }) + + // 在自定义组件即将析构销毁时将dialogController置空 + aboutToDisappear() { + this.dialogController = null; // 将dialogController置空 + } + + build() { + NavDestination() { + Column({ space: 12 }) { + + Column() { + Button(this.inputValue) + .onClick(() => { + if (this.dialogController != null) { + this.dialogController.open(); + } + }).backgroundColor(0x317aff) + }.width('100%').margin({ top: 5 }) + + } + .width('100%') + .height('100%') + .padding({ left: 12, right: 12 }) + } + .backgroundColor('#f1f2f3') + .title($r('app.string.CustomDialog_Animation1')) + } +} +// [End set_dialog_animation] diff --git a/ArkUISample/DialogProject/entry/src/main/ets/pages/customdialog/DialogInteraction.ets b/ArkUISample/DialogProject/entry/src/main/ets/pages/customdialog/DialogInteraction.ets new file mode 100644 index 000000000..a9982e613 --- /dev/null +++ b/ArkUISample/DialogProject/entry/src/main/ets/pages/customdialog/DialogInteraction.ets @@ -0,0 +1,111 @@ +/* + * Copyright (c) 2025 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 { PromptActionClass } from '../../common/PromptActionClass'; +import { ComponentContent } from '@kit.ArkUI'; + +// [Start custom_dialog_build_button] +@CustomDialog +struct CustomDialogExample { + cancel?: () => void; + confirm?: () => void; + controller: CustomDialogController; + + build() { + Column() { + Text('Please confirm your choice') + .padding({ top: 24, right: 24, left: 24 }) + Row({ space: 8 }) { + Button() { + Text('refuse') + .fontFamily('HarmonyHeiTi') + .fontWeight(FontWeight.Medium) + .fontSize($r('sys.float.Body_L')) + .fontColor($r('sys.color.font_emphasize')) + .lineHeight(21) + } + .onClick(() => { + this.controller.close(); + }) + .layoutWeight(1) + .backgroundColor(Color.Transparent) + .width(180) + .height(40) + + Button() { + Text('confirm') + .fontFamily('HarmonyHeiIi') + .fontWeight(FontWeight.Medium) + .fontSize($r('sys.float.Body_L')) + .fontColor($r('sys.color.font_emphasize')) + } + .onClick(() => { + this.controller.close(); + }) + .layoutWeight(1) + .backgroundColor(Color.Transparent) + .width(180) + .height(40) + }.padding({ top: 8, bottom: 16 }) + }.width(400) + + } +} +// [End custom_dialog_build_button] + +// [Start dialog_constructor_accept] +@Entry +@Component +export struct DialogInteraction { + dialogController: CustomDialogController = new CustomDialogController({ + builder: CustomDialogExample({ + cancel: () => { + this.onCancel(); + }, + confirm: () => { + this.onAccept(); + }, + }), + }) + + onCancel() { + console.info('Callback when the first button is clicked') + } + + onAccept() { + console.info('Callback when the second button is clicked') + } + + build() { + NavDestination() { + Column({ space: 12 }) { + + Column() { + Button('click me') + .onClick(() => { + this.dialogController.open(); + }) + }.width('100%').margin({ top: 5 }) + + } + .width('100%') + .height('100%') + .padding({ left: 12, right: 12 }) + } + .backgroundColor('#f1f2f3') + .title($r('app.string.CustomDialog_interaction')) + } + // [End dialog_constructor_accept] +} diff --git a/ArkUISample/DialogProject/entry/src/main/ets/pages/customdialog/DialogInteraction1.ets b/ArkUISample/DialogProject/entry/src/main/ets/pages/customdialog/DialogInteraction1.ets new file mode 100644 index 000000000..f2d21b0f9 --- /dev/null +++ b/ArkUISample/DialogProject/entry/src/main/ets/pages/customdialog/DialogInteraction1.ets @@ -0,0 +1,152 @@ +/* + * Copyright (c) 2025 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. + */ + +// [Start dialog_route_jump] +@CustomDialog +struct CustomDialogExample { + @Link textValue: string; + controller?: CustomDialogController; + cancel: () => void = () => { + }; + confirm: () => void = () => { + }; + + build() { + Column() { + if (this.textValue != '') { + Text(`The next content is:${this.textValue}`) + .padding({ top: 24, right: 24, left: 24 }) + } else { + Text('Whether to get the content of the second page') + .padding({ top: 24, right: 24, left: 24 }) + } + Row({ space: 8 }) { + Button() { + Text('refuse') + .fontFamily('HarmonyHeiTi') + .fontWeight(FontWeight.Medium) + .fontSize($r('sys.float.Body_L')) + .fontColor($r('sys.color.font_emphasize')) + .lineHeight(21) + } + .onClick(() => { + if (this.controller != undefined) { + this.controller.close(); + this.cancel(); + }; + }) + .layoutWeight(1) + .backgroundColor(Color.Transparent) + .width(180) + .height(40) + + Button() { + Text('confirm') + .fontFamily('HarmonyHeiIi') + .fontWeight(FontWeight.Medium) + .fontSize($r('sys.float.Body_L')) + .fontColor($r('sys.color.font_emphasize')) + } + .onClick(() => { + if (this.controller != undefined && this.textValue != '') { + this.controller.close(); + } else if (this.controller != undefined) { + this.getUIContext().getRouter().pushUrl({ + url: 'pages/Index2' + }); + this.controller.close(); + } + }) + .layoutWeight(1) + .backgroundColor(Color.Transparent) + .width(180) + .height(40) + } + .padding({ + top: 8, + bottom: 16, + left: 16, + right: 16 + }) + }.width(400) + + } +} + + +@Entry +@Component +export struct DialogInteraction1 { + @State textValue: string = '' + dialogController: CustomDialogController | null = new CustomDialogController({ + builder: CustomDialogExample({ + cancel: () => { + this.onCancel(); + }, + confirm: () => { + this.onAccept(); + }, + textValue: $textValue + }) + }) + + // 在自定义组件即将析构销毁时将dialogController置空 + aboutToDisappear() { + this.dialogController = null; // 将dialogController置空 + } + + onPageShow() { + const params = this.getUIContext().getRouter().getParams() as Record; // 获取传递过来的参数对象 + if (params) { + this.dialogController?.open(); + this.textValue = params.info as string; // 获取info属性的值 + } + } + + onCancel() { + console.info('Callback when the first button is clicked'); + } + + onAccept() { + console.info('Callback when the second button is clicked'); + } + + exitApp() { + console.info('Click the callback in the blank area'); + } + + build() { + NavDestination() { + Column({ space: 12 }) { + + Column() { + Button('click me') + .onClick(() => { + if (this.dialogController != null) { + this.dialogController.open(); + } + }).backgroundColor(0x317aff) + }.width('100%').margin({ top: 5 }) + + } + .width('100%') + .height('100%') + .padding({ left: 12, right: 12 }) + } + .backgroundColor('#f1f2f3') + .title($r('app.string.CustomDialog_interaction1')) + } +} +// [End dialog_route_jump] diff --git a/ArkUISample/DialogProject/entry/src/main/ets/pages/customdialog/DialogStyle.ets b/ArkUISample/DialogProject/entry/src/main/ets/pages/customdialog/DialogStyle.ets new file mode 100644 index 000000000..fe3cc8850 --- /dev/null +++ b/ArkUISample/DialogProject/entry/src/main/ets/pages/customdialog/DialogStyle.ets @@ -0,0 +1,87 @@ +/* + * Copyright (c) 2025 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. + */ + +// [Start set_dialog_style] +@CustomDialog +struct CustomDialogExample { + controller?: CustomDialogController; + + build() { + Column() { + Text($r('app.string.CustomDialog_shadow')) + } + .padding({ + top: 24, + left: 24, + bottom: 24, + right: 24 + }) + } +} + +@Entry +@Component +export struct DialogStyle { + @State textValue: string = ''; + @State inputValue: string = 'click me'; + dialogController: CustomDialogController | null = new CustomDialogController({ + builder: CustomDialogExample(), + autoCancel: true, + alignment: DialogAlignment.Center, + offset: { dx: 0, dy: -20 }, + gridCount: 4, + customStyle: false, + backgroundColor: 0xd9ffffff, + cornerRadius: 20, + width: '80%', + height: '100px', + borderWidth: 2, + borderStyle: BorderStyle.Solid, //使用borderStyle属性,需要和borderWidth属性一起使用 + shadow: ({ + radius: 20, + color: Color.Grey, + offsetX: 50, + offsetY: 0 + }), + }) + + // 在自定义组件即将析构销毁时将dialogController置空 + aboutToDisappear() { + this.dialogController = null; // 将dialogController置空 + } + + build() { + NavDestination() { + Column({ space: 12 }) { + + Column() { + Button(this.inputValue) + .onClick(() => { + if (this.dialogController != null) { + this.dialogController.open(); + } + }).backgroundColor(0x317aff) + }.width('100%').margin({ top: 5 }) + + } + .width('100%') + .height('100%') + .padding({ left: 12, right: 12 }) + } + .backgroundColor('#f1f2f3') + .title($r('app.string.CustomDialog_style')) + } +} +// [End set_dialog_style] diff --git a/ArkUISample/DialogProject/entry/src/main/ets/pages/customdialog/Index.ets b/ArkUISample/DialogProject/entry/src/main/ets/pages/customdialog/Index.ets new file mode 100644 index 000000000..c4df523d6 --- /dev/null +++ b/ArkUISample/DialogProject/entry/src/main/ets/pages/customdialog/Index.ets @@ -0,0 +1,108 @@ +/* + * Copyright (c) 2025 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 { CompletedRoutableCard } from '../../common/Card'; +import resource from '../../common/resource'; +import { Route } from '../../common/Route'; +import { CreateDialog } from './CreateCustomDialog'; +import { DialogAnimation } from './DialogAnimation'; +import { DialogInteraction } from './DialogInteraction'; +import { DialogInteraction1 } from './DialogInteraction1'; +import { DialogStyle } from './DialogStyle'; +import { NestDialog } from './NestDialog'; + +export const Custom_ROUTE_PREFIX: string = 'Custom_ROUTE_PREFIX'; + +const routes: Route[] = [ + { + name: `${Custom_ROUTE_PREFIX}/dialog`, + title: resource.resourceToString($r('app.string.CustomDialog_create_title')), + description: $r('app.string.CustomDialog_create_des'), + }, + { + name: `${Custom_ROUTE_PREFIX}/dialoginteraction`, + title: resource.resourceToString($r('app.string.CustomDialog_interaction_title')), + description: $r('app.string.CustomDialog_interaction_des'), + }, + { + name: `${Custom_ROUTE_PREFIX}/dialoginteraction1`, + title: resource.resourceToString($r('app.string.CustomDialog_interaction1_title')), + description: $r('app.string.CustomDialog_interaction1_des'), + }, + { + name: `${Custom_ROUTE_PREFIX}/DialogAnimation`, + title: resource.resourceToString($r('app.string.CustomDialog_animation_title')), + description: $r('app.string.CustomDialog_animation_des'), + }, + { + name: `${Custom_ROUTE_PREFIX}/DialogStyle`, + title: resource.resourceToString($r('app.string.CustomDialog_Style_title')), + description: $r('app.string.CustomDialog_Style_des'), + }, + { + name: `${Custom_ROUTE_PREFIX}/NestDialog`, + title: resource.resourceToString($r('app.string.CustomDialog_nest')), + description: $r('app.string.CustomDialog_nest_des'), + } +] + +@Builder +export function CustomDestination(name: string) { + if (name === Custom_ROUTE_PREFIX) { + CustomExample(); + } else if (name === routes[0].name) { + CreateDialog(); + } else if (name === routes[1].name) { + DialogInteraction(); + } else if (name === routes[2].name) { + DialogInteraction1(); + } else if (name === routes[3].name) { + DialogAnimation(); + } else if (name === routes[4].name) { + DialogStyle(); + } else if (name === routes[5].name) { + NestDialog(); + } +} + +@Entry +@Component +struct CustomExample { + @Consume pathStack: NavPathStack; + + build() { + NavDestination() { + List({ space: 12 }) { + ForEach(routes, (route: Route) => { + ListItem() { + CompletedRoutableCard({ title: route.title, description: route.description }) + } + .width('100%') + .onClick(() => { + this.pathStack.pushPath({ name: route.name }); + }) + }) + } + .contentStartOffset(20) + .padding({ left: 16, right: 16 }) + } + .backgroundColor('#f1f3f5') + .title('', { + backgroundBlurStyle: BlurStyle.COMPONENT_THICK, + barStyle: BarStyle.STACK + }) + .title($r('app.string.CustomDialog_dialog')) + } +} \ No newline at end of file diff --git a/ArkUISample/DialogProject/entry/src/main/ets/pages/customdialog/NestDialog.ets b/ArkUISample/DialogProject/entry/src/main/ets/pages/customdialog/NestDialog.ets new file mode 100644 index 000000000..5ce2b1ffb --- /dev/null +++ b/ArkUISample/DialogProject/entry/src/main/ets/pages/customdialog/NestDialog.ets @@ -0,0 +1,172 @@ +/* + * Copyright (c) 2025 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. + */ + +// [Start set_dialog_nest] +@CustomDialog +struct CustomDialogExampleTwo { + controllerTwo?: CustomDialogController; + @State message: string = 'I am the second dialog box.'; + @State showIf: boolean = false; + + build() { + Column() { + Text('this is the second dialog') + .padding({ top: 24, right: 24, left: 24 }) + Row({ space: 8 }) { + Button() { + Text('close dialog') + .fontFamily('HarmonyHeiTi') + .fontWeight(FontWeight.Medium) + .fontSize($r('sys.float.Body_L')) + .fontColor($r('sys.color.font_emphasize')) + .lineHeight(21) + } + .onClick(() => { + this.controllerTwo?.close(); + }) + .layoutWeight(1) + .backgroundColor(Color.Transparent) + .width(360) + .height(40) + } + .padding({ + top: 8, + bottom: 16, + left: 16, + right: 16 + }) + }.width(400) + + } +} + +@CustomDialog +struct CustomDialogExample { + openSecondBox?: () => void; + controller?: CustomDialogController; + + build() { + Column() { + Text('Click Confirm to open the second dialog') + .padding({ top: 24, right: 24, left: 24 }) + Row({ space: 8 }) { + Button() { + Text('refuse') + .fontFamily('HarmonyHeiTi') + .fontWeight(FontWeight.Medium) + .fontSize($r('sys.float.Body_L')) + .fontColor($r('sys.color.font_emphasize')) + .lineHeight(21) + } + .onClick(() => { + this.controller?.close(); + }) + .layoutWeight(1) + .backgroundColor(Color.Transparent) + .width(180) + .height(40) + + Button() { + Text('confirm') + .fontFamily('HarmonyHeiIi') + .fontWeight(FontWeight.Medium) + .fontSize($r('sys.float.Body_L')) + .fontColor($r('sys.color.font_emphasize')) + } + .onClick(() => { + this.controller!.close(); + this.openSecondBox!(); + }) + .layoutWeight(1) + .backgroundColor(Color.Transparent) + .width(180) + .height(40) + } + .padding({ + top: 8, + bottom: 16, + left: 16, + right: 16 + }) + }.width(400) + + } +} + +@Entry +@Component +export struct NestDialog { + @State inputValue: string = 'Click Me'; + dialogController: CustomDialogController | null = new CustomDialogController({ + builder: CustomDialogExample({ + openSecondBox: () => { + if (this.dialogControllerTwo != null) { + this.dialogControllerTwo.open() + } + } + }), + cancel: this.exitApp, + autoCancel: true, + alignment: DialogAlignment.Center, + offset: { dx: 0, dy: -20 }, + gridCount: 4, + customStyle: false + }) + dialogControllerTwo: CustomDialogController | null = new CustomDialogController({ + builder: CustomDialogExampleTwo(), + alignment: DialogAlignment.Center, + offset: { dx: 0, dy: -25 } + }) + + aboutToDisappear() { + this.dialogController = null; + this.dialogControllerTwo = null; + } + + onCancel() { + console.info('Callback when the first button is clicked'); + } + + onAccept() { + console.info('Callback when the second button is clicked'); + } + + exitApp() { + console.info('Click the callback in the blank area'); + } + + build() { + NavDestination() { + Column({ space: 12 }) { + + Column() { + Button(this.inputValue) + .onClick(() => { + if (this.dialogController != null) { + this.dialogController.open(); + } + }).backgroundColor(0x317aff) + }.width('100%').margin({ top: 5 }) + + } + .width('100%') + .height('100%') + .padding({ left: 12, right: 12 }) + } + .backgroundColor('#f1f2f3') + .title($r('app.string.CustomDialog_nest')) + } +} +// [End set_dialog_nest] \ No newline at end of file diff --git a/ArkUISample/DialogProject/entry/src/main/ets/pages/fixedstyledialog/ActionSheet.ets b/ArkUISample/DialogProject/entry/src/main/ets/pages/fixedstyledialog/ActionSheet.ets new file mode 100644 index 000000000..edc3baea8 --- /dev/null +++ b/ArkUISample/DialogProject/entry/src/main/ets/pages/fixedstyledialog/ActionSheet.ets @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2025 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. + */ + +// [Start action_sheet_dialog] +@Entry +@Component +export struct showActionSheetExample { + + build() { + NavDestination() { + Column({ space: 12 }) { + + Column() { + Button('showActionSheet') + .margin(30) + .onClick(() => { + this.getUIContext().showActionSheet({ + title: 'ActionSheet title', + message: 'message', + autoCancel: false, + width: 300, + height: 300, + cornerRadius: 20, + borderWidth: 1, + borderStyle: BorderStyle.Solid, + borderColor: Color.Blue, + backgroundColor: Color.White, + transition: TransitionEffect.asymmetric(TransitionEffect.OPACITY + .animation({ duration: 3000, curve: Curve.Sharp }) + .combine(TransitionEffect.scale({ x: 1.5, y: 1.5 }) + .animation({ duration: 3000, curve: Curve.Sharp })), + TransitionEffect.OPACITY.animation({ duration: 100, curve: Curve.Smooth }) + .combine(TransitionEffect.scale({ x: 0.5, y: 0.5 }) + .animation({ duration: 100, curve: Curve.Smooth }))), + confirm: { + value: 'Confirm button', + action: () => { + console.info('Get Alert Dialog handled'); + } + }, + alignment: DialogAlignment.Center, + sheets: [ + { + title: 'apples', + action: () => { + } + }, + { + title: 'bananas', + action: () => { + } + }, + { + title: 'pears', + action: () => { + console.log('pears'); + } + } + ] + }) + }) + }.width('100%').margin({ top: 5 }) + + } + .width('100%') + .height('100%') + .padding({ left: 12, right: 12 }) + } + .backgroundColor('#f1f2f3') + .title($r('app.string.CustomDialog_ActionSheet')) + } +} +// [End action_sheet_dialog] \ No newline at end of file diff --git a/ArkUISample/DialogProject/entry/src/main/ets/pages/fixedstyledialog/AlertDialog.ets b/ArkUISample/DialogProject/entry/src/main/ets/pages/fixedstyledialog/AlertDialog.ets new file mode 100644 index 000000000..825c1f7ed --- /dev/null +++ b/ArkUISample/DialogProject/entry/src/main/ets/pages/fixedstyledialog/AlertDialog.ets @@ -0,0 +1,75 @@ +/* + * Copyright (c) 2025 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. + */ + +// [Start alert_dialog] +import { PromptAction } from '@kit.ArkUI'; + +@Entry +@Component +export struct showAlertDialogExample { + + build() { + NavDestination() { + Column({ space: 12 }) { + + Column() { + Button('showAlertDialog') + .margin(30) + .onClick(() => { + this.getUIContext().showAlertDialog( + { + title: 'title', + message: 'text', + autoCancel: true, + alignment: DialogAlignment.Center, + offset: { dx: 0, dy: -20 }, + gridCount: 3, + transition: TransitionEffect.asymmetric(TransitionEffect.OPACITY + .animation({ duration: 3000, curve: Curve.Sharp }) + .combine(TransitionEffect.scale({ x: 1.5, y: 1.5 }) + .animation({ duration: 3000, curve: Curve.Sharp })), + TransitionEffect.OPACITY.animation({ duration: 100, curve: Curve.Smooth }) + .combine(TransitionEffect.scale({ x: 0.5, y: 0.5 }) + .animation({ duration: 100, curve: Curve.Smooth }))), + buttons: [{ + value: 'cancel', + action: () => { + console.info('Callback when the first button is clicked'); + } + }, + { + enabled: true, + defaultFocus: true, + style: DialogButtonStyle.HIGHLIGHT, + value: 'ok', + action: () => { + console.info('Callback when the second button is clicked'); + } + }], + } + ) + }) + }.width('100%').margin({ top: 5 }) + + } + .width('100%') + .height('100%') + .padding({ left: 12, right: 12 }) + } + .backgroundColor('#f1f2f3') + .title($r('app.string.CustomDialog_AlertDialog')) + } +} +// [End alert_dialog] \ No newline at end of file diff --git a/ArkUISample/DialogProject/entry/src/main/ets/pages/fixedstyledialog/CalendarPickerDialog.ets b/ArkUISample/DialogProject/entry/src/main/ets/pages/fixedstyledialog/CalendarPickerDialog.ets new file mode 100644 index 000000000..c12418f2f --- /dev/null +++ b/ArkUISample/DialogProject/entry/src/main/ets/pages/fixedstyledialog/CalendarPickerDialog.ets @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2025 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. + */ + +// [Start calender_picker_dialog] +import { PromptAction } from '@kit.ArkUI'; + +@Entry +@Component +export struct CalendarDialog { + private selectedDate: Date = new Date('2024-04-23'); + + build() { + NavDestination() { + Column({ space: 12 }) { + + Column() { + Button('Show CalendarPicker Dialog') + .margin(20) + .onClick(() => { + console.info('CalendarDialog.show'); + CalendarPickerDialog.show({ + selected: this.selectedDate, + acceptButtonStyle: { + fontColor: '#2787d9', + fontSize: '16fp', + backgroundColor: '#f7f7f7', + borderRadius: 10 + }, + cancelButtonStyle: { + fontColor: Color.Red, + fontSize: '16fp', + backgroundColor: '#f7f7f7', + borderRadius: 10 + }, + onAccept: (date: Date)=>{ + // 当弹出框再次弹出时显示选中的是上一次确定的日期 + this.selectedDate = date; + } + }) + }) + }.width('100%') + + } + .width('100%') + .height('100%') + .padding({ left: 12, right: 12 }) + } + .backgroundColor('#f1f2f3') + .title($r('app.string.CustomDialog_calender')) + } +} +// [End calender_picker_dialog] \ No newline at end of file diff --git a/ArkUISample/DialogProject/entry/src/main/ets/pages/fixedstyledialog/DatePickerDialog.ets b/ArkUISample/DialogProject/entry/src/main/ets/pages/fixedstyledialog/DatePickerDialog.ets new file mode 100644 index 000000000..28caa25d6 --- /dev/null +++ b/ArkUISample/DialogProject/entry/src/main/ets/pages/fixedstyledialog/DatePickerDialog.ets @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2025 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. + */ + +// [Start date_picker_dialog] +import { PromptAction } from '@kit.ArkUI'; + +@Entry +@Component +export struct DatePickerDialogExample { + @State selectTime: Date = new Date('2023-12-25T08:30:00'); + + build() { + NavDestination() { + Column({ space: 12 }) { + + Column() { + Button('showDatePickerDialog') + .margin(30) + .onClick(() => { + this.getUIContext().showDatePickerDialog({ + start: new Date('2000-1-1'), + end: new Date('2100-12-31'), + selected: this.selectTime, + lunarSwitch: true, + showTime: true, + onDateAccept: (value: Date) => { + this.selectTime = value; + console.info('DatePickerDialog:onAccept()' + JSON.stringify(value)); + }, + }) + }) + }.width('100%').margin({ top: 5 }) + + } + .width('100%') + .height('100%') + .padding({ left: 12, right: 12 }) + } + .backgroundColor('#f1f2f3') + .title($r('app.string.CustomDialog_date')) + } +} +// [End date_picker_dialog] \ No newline at end of file diff --git a/ArkUISample/DialogProject/entry/src/main/ets/pages/fixedstyledialog/Index.ets b/ArkUISample/DialogProject/entry/src/main/ets/pages/fixedstyledialog/Index.ets new file mode 100644 index 000000000..b8e1c0703 --- /dev/null +++ b/ArkUISample/DialogProject/entry/src/main/ets/pages/fixedstyledialog/Index.ets @@ -0,0 +1,125 @@ +/* + * Copyright (c) 2025 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 { CompletedRoutableCard } from '../../common/Card'; +import { Route } from '../../common/Route'; +import { showActionSheetExample } from './ActionSheet'; +import { CalendarDialog } from './CalendarPickerDialog'; +import { DatePickerDialogExample } from './DatePickerDialog'; +import { TextPickerDialogExample } from './TextPickerDialog'; +import { TimePickerDialogExample } from './TimePickerDialog'; +import { showAlertDialogExample } from './AlertDialog'; +import { ShowActionMenuExample } from './ShowActionMenu'; +import { ShowDialogExample } from './ShowDialog'; +import resource from '../../common/resource'; + + +export const Fixed_ROUTE_PREFIX: string = 'Fixed_ROUTE_PREFIX'; + +const routes: Route[] = [ + { + name: `${Fixed_ROUTE_PREFIX}/CalendarPickerDialog`, + title: resource.resourceToString($r('app.string.CalendarPickerDialog_title')), + description: $r('app.string.CalendarPickerDialog_des'), + }, + { + name: `${Fixed_ROUTE_PREFIX}/DatePickerDialogExample`, + title: resource.resourceToString($r('app.string.DatePicker_title')), + description: $r('app.string.DatePicker_des'), + }, + { + name: `${Fixed_ROUTE_PREFIX}/TimePickerDialog`, + title: resource.resourceToString($r('app.string.TimePicker_title')), + description: $r('app.string.TimePicker_des'), + }, + { + name: `${Fixed_ROUTE_PREFIX}/TextPickerDialog`, + title: resource.resourceToString($r('app.string.TextPicker_title')), + description: $r('app.string.TextPicker_des'), + }, + { + name: `${Fixed_ROUTE_PREFIX}/ActionSheet`, + title: resource.resourceToString($r('app.string.ActionSheet_title')), + description: $r('app.string.ActionSheet_des'), + }, + { + name: `${Fixed_ROUTE_PREFIX}/AlertDialog`, + title: resource.resourceToString($r('app.string.AlertDialog_title')), + description: $r('app.string.AlertDialog_des'), + }, + { + name: `${Fixed_ROUTE_PREFIX}/ShowActionMenu`, + title: resource.resourceToString($r('app.string.ShowActionMenu_title')), + description: $r('app.string.ShowActionMenu_des'), + }, + { + name: `${Fixed_ROUTE_PREFIX}/ShowDialog`, + title: resource.resourceToString($r('app.string.ShowDialog_title')), + description: $r('app.string.ShowDialog_des'), + } +] + +@Builder +export function FixedDialogDestination(name: string) { + if (name === Fixed_ROUTE_PREFIX) { + FixedDialogExample(); + } else if (name === routes[0].name) { + CalendarDialog(); + } else if (name === routes[1].name) { + DatePickerDialogExample(); + } else if (name === routes[2].name) { + TimePickerDialogExample(); + } else if (name === routes[3].name) { + TextPickerDialogExample(); + } else if (name === routes[4].name) { + showActionSheetExample(); + } else if (name === routes[5].name) { + showAlertDialogExample(); + } else if (name === routes[6].name) { + ShowActionMenuExample(); + } else if (name === routes[7].name) { + ShowDialogExample(); + } +} + +@Entry +@Component +struct FixedDialogExample { + @Consume pathStack: NavPathStack; + + build() { + NavDestination() { + List({ space: 12 }) { + ForEach(routes, (route: Route) => { + ListItem() { + CompletedRoutableCard({ title: route.title, description: route.description }) + } + .width('100%') + .onClick(() => { + this.pathStack.pushPath({ name: route.name }); + }) + }) + } + .contentStartOffset(20) + .padding({ left: 16, right: 16 }) + } + .backgroundColor('#f1f3f5') + .title('', { + backgroundBlurStyle: BlurStyle.COMPONENT_THICK, + barStyle: BarStyle.STACK + }) + .title($r('app.string.fixed_dialog')) + } +} \ No newline at end of file diff --git a/ArkUISample/DialogProject/entry/src/main/ets/pages/fixedstyledialog/ShowActionMenu.ets b/ArkUISample/DialogProject/entry/src/main/ets/pages/fixedstyledialog/ShowActionMenu.ets new file mode 100644 index 000000000..40845cae2 --- /dev/null +++ b/ArkUISample/DialogProject/entry/src/main/ets/pages/fixedstyledialog/ShowActionMenu.ets @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2025 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 { PromptAction } from '@kit.ArkUI'; + +@Entry +@Component +export struct ShowActionMenuExample { + build() { + NavDestination() { + Column({ space: 12 }) { + + Column() { + Button('ShowActionMenu') + .margin(30) + .onClick(() => { + let uiContext = this.getUIContext(); + let promptAction: PromptAction = uiContext.getPromptAction(); + try { + promptAction.showActionMenu({ + title: 'showActionMenu Title Info', + buttons: [ + { + text: 'item1', + color: '#666666' + }, + { + text: 'item2', + color: '#000000' + }, + ] + }) + .then(data => { + console.info('showActionMenu success, click button: ' + data.index); + }) + .catch((err: Error) => { + console.error('showActionMenu error: ' + err); + }) + } catch (error) { + } + }) + }.width('100%') + } + .width('100%') + .height('100%') + .padding({ left: 12, right: 12 }) + } + .backgroundColor('#f1f2f3') + .title($r('app.string.ShowActionMenu_title')) + } +} + diff --git a/ArkUISample/DialogProject/entry/src/main/ets/pages/fixedstyledialog/ShowDialog.ets b/ArkUISample/DialogProject/entry/src/main/ets/pages/fixedstyledialog/ShowDialog.ets new file mode 100644 index 000000000..73da39ba0 --- /dev/null +++ b/ArkUISample/DialogProject/entry/src/main/ets/pages/fixedstyledialog/ShowDialog.ets @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2025 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 { PromptAction } from '@kit.ArkUI'; + +@Entry +@Component +export struct ShowDialogExample { + build() { + NavDestination() { + Column({ space: 12 }) { + Column() { + Button('ShowDialog') + .margin(30) + .onClick(() => { + let uiContext = this.getUIContext(); + let promptAction: PromptAction = uiContext.getPromptAction(); + try { + promptAction.showDialog({ + title: 'showDialog Title Info', + message: 'Message Info', + buttons: [ + { + text: 'button1', + color: '#000000' + }, + { + text: 'button2', + color: '#000000' + } + ] + }, (err, data) => { + if (err) { + console.error('showDialog err: ' + err); + return; + } + console.info('showDialog success callback, click button: ' + data.index); + }); + } catch (error) { + } + }) + }.width('100%') + } + .width('100%') + .height('100%') + .padding({ left: 12, right: 12 }) + } + .backgroundColor('#f1f2f3') + .title($r('app.string.ShowDialog_title')) + } +} \ No newline at end of file diff --git a/ArkUISample/DialogProject/entry/src/main/ets/pages/fixedstyledialog/TextPickerDialog.ets b/ArkUISample/DialogProject/entry/src/main/ets/pages/fixedstyledialog/TextPickerDialog.ets new file mode 100644 index 000000000..165285fbc --- /dev/null +++ b/ArkUISample/DialogProject/entry/src/main/ets/pages/fixedstyledialog/TextPickerDialog.ets @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2025 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. + */ + +// [Start text_picker_dialog] +import { PromptAction } from '@kit.ArkUI'; + +@Entry +@Component +export struct TextPickerDialogExample { + private fruits: TextCascadePickerRangeContent[] = [ + { + text: 'United States', + children: [{ text: 'California', children: [{ text: 'Los Angeles' }, { text: 'San Francisco' }, { text: 'San Diego' }] }, + { text: 'Texas', children: [{ text: 'Houston' }, { text: 'Dallas' }, { text: 'Austin' }] }] + }, + { + text: 'Canada', + children: [{ text: 'Ontario', children: [{ text: 'Toronto' }, { text: 'Ottawa' }, { text: 'Hamilton' }] }, + { text: 'British Columbia', children: [{ text: 'Vancouver' }, { text: 'Victoria' }, { text: 'Kelowna' }] }] + }, + { + text: 'Australia', + children: [{ text: 'New South Wales', children: [{ text: 'Sydney' }, { text: 'Canberra' }, { text: 'Newcastle' }] }, + { text: 'Victoria', children: [{ text: 'Melbourne' }, { text: 'Geelong' }, { text: 'Ballarat' }] }] + } + ] + private select : number = 0; + + build() { + NavDestination() { + Column({ space: 12 }) { + + Column() { + Button('showTextPickerDialog') + .margin(30) + .onClick(() => { + this.getUIContext().showTextPickerDialog({ + range: this.fruits, + selected: this.select, + onAccept: (value: TextPickerResult) => { + this.select = value.index as number; + } + }) + }) + }.width('100%').margin({ top: 5 }) + + } + .width('100%') + .height('100%') + .padding({ left: 12, right: 12 }) + } + .backgroundColor('#f1f2f3') + .title($r('app.string.CustomDialog_text')) + } +} +// [End text_picker_dialog] \ No newline at end of file diff --git a/ArkUISample/DialogProject/entry/src/main/ets/pages/fixedstyledialog/TimePickerDialog.ets b/ArkUISample/DialogProject/entry/src/main/ets/pages/fixedstyledialog/TimePickerDialog.ets new file mode 100644 index 000000000..7f0393367 --- /dev/null +++ b/ArkUISample/DialogProject/entry/src/main/ets/pages/fixedstyledialog/TimePickerDialog.ets @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2025 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. + */ + +// [Start time_picker_dialog] +import { PromptAction } from '@kit.ArkUI'; + +@Entry +@Component +export struct TimePickerDialogExample { + @State selectTime: Date = new Date('2023-12-25T08:30:00'); + + build() { + NavDestination() { + Column({ space: 12 }) { + + Column() { + Button('showTimePickerDialog') + .margin(30) + .onClick(() => { + this.getUIContext().showTimePickerDialog({ + selected: this.selectTime, + textStyle: { color: '#2787d9', font: { size: '14fp', weight: FontWeight.Normal } }, + selectedTextStyle: { color: '#004aaf', font: { size: '18fp', weight: FontWeight.Regular } }, + acceptButtonStyle: { + fontColor: '#2787d9', + fontSize: '16fp', + backgroundColor: '#f7f7f7', + borderRadius: 10 + }, + cancelButtonStyle: { + fontColor: Color.Red, + fontSize: '16fp', + backgroundColor: '#f7f7f7', + borderRadius: 10 + } + }) + }) + }.width('100%').margin({ top: 5 }) + + } + .width('100%') + .height('100%') + .padding({ left: 12, right: 12 }) + } + .backgroundColor('#f1f2f3') + .title($r('app.string.CustomDialog_time')) + } +} +// [End time_picker_dialog] \ No newline at end of file diff --git a/ArkUISample/DialogProject/entry/src/main/ets/pages/opencustomdialog/Index.ets b/ArkUISample/DialogProject/entry/src/main/ets/pages/opencustomdialog/Index.ets new file mode 100644 index 000000000..3d1b31b01 --- /dev/null +++ b/ArkUISample/DialogProject/entry/src/main/ets/pages/opencustomdialog/Index.ets @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2025 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 { CompletedRoutableCard } from '../../common/Card'; +import resource from '../../common/resource'; +import { Route } from '../../common/Route'; +import { openCustomDialog } from './openCustomDialog'; + +export const CustomDialog_ROUTE_PREFIX: string = 'CustomDialog_ROUTE_PREFIX'; + +const routes: Route[] = [ + { + name: `${CustomDialog_ROUTE_PREFIX}/Customdialog`, + title: resource.resourceToString($r('app.string.Customdialog_title')), + description: $r('app.string.Customdialog_des'), + } +] + +@Builder +export function CustomDialogDestination(name: string) { + if (name === CustomDialog_ROUTE_PREFIX) { + CustomDialogExample(); + } else if (name === routes[0].name) { + openCustomDialog(); + } +} + +@Entry +@Component +struct CustomDialogExample { + @Consume pathStack: NavPathStack; + + build() { + NavDestination() { + List({ space: 12 }) { + ForEach(routes, (route: Route) => { + ListItem() { + CompletedRoutableCard({ title: route.title, description: route.description }) + } + .width('100%') + .onClick(() => { + this.pathStack.pushPath({ name: route.name }) + }) + }) + } + .contentStartOffset(20) + .padding({ left: 16, right: 16 }) + } + .backgroundColor('#f1f3f5') + .title('', { + backgroundBlurStyle: BlurStyle.COMPONENT_THICK, + barStyle: BarStyle.STACK + }) + .title('CustomDialog') + } +} \ No newline at end of file diff --git a/ArkUISample/DialogProject/entry/src/main/ets/pages/opencustomdialog/openCustomDialog.ets b/ArkUISample/DialogProject/entry/src/main/ets/pages/opencustomdialog/openCustomDialog.ets new file mode 100644 index 000000000..4c65b64e1 --- /dev/null +++ b/ArkUISample/DialogProject/entry/src/main/ets/pages/opencustomdialog/openCustomDialog.ets @@ -0,0 +1,133 @@ +/* + * Copyright (c) 2025 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. + */ + +// [Start open_close_component_content] +import { PromptActionClass } from '../../common/PromptActionClass'; +import { ComponentContent } from '@kit.ArkUI'; + +class Params { + private text: string = ''; + + constructor(text: string) { + this.text = text; + } +} + +@Builder +function buildText(params: Params) { + Column() { + Text($r('app.string.CustomDialog_dialog')) + .padding({ top: 24, right: 24, left: 24 }) + Row({ space: 8 }) { + Button() { + Text($r('app.string.close_dialog')) + .fontFamily('HarmonyHeiTi') + .fontWeight(FontWeight.Medium) + .fontSize($r('sys.float.Body_L')) + .fontColor($r('sys.color.font_emphasize')) + .lineHeight(21) + } + .onClick(() => { + setTimeout(() => { + PromptActionClass.updateDialog({ + alignment: DialogAlignment.Bottom, + offset: { dx: 0, dy: -50 } + }) + }, 1500); + PromptActionClass.closeDialog(); + }) + .layoutWeight(1) + .backgroundColor(Color.Transparent) + .width(180) + .height(40) + + Button() { + Text($r('app.string.change_dialog')) + .fontFamily('HarmonyHeiIi') + .fontWeight(FontWeight.Medium) + .fontSize($r('sys.float.Body_L')) + .fontColor($r('sys.color.font_emphasize')) + } + .onClick(() => { + setTimeout(() => { + PromptActionClass.updateDialog({ + alignment: DialogAlignment.Bottom, + offset: { dx: 0, dy: -50 } + }) + }, 150); + }) + .layoutWeight(1) + .backgroundColor(Color.Transparent) + .width(180) + .height(40) + } + .padding({ + top: 8, + bottom: 16, + left: 16, + right: 16 + }) + } + .width(400) + .backgroundColor('#FFF0F0F0') + .borderRadius(32) +} + +@Entry +@Component +export struct openCustomDialog { + @State message: string = 'hello' + private ctx: UIContext = this.getUIContext(); + // [Start create_component_content] + private contentNode: ComponentContent = + new ComponentContent(this.ctx, wrapBuilder(buildText), new Params(this.message)); + // [End create_component_content] + + aboutToAppear(): void { + PromptActionClass.setContext(this.ctx); + PromptActionClass.setContentNode(this.contentNode); + PromptActionClass.setOptions({ alignment: DialogAlignment.Top, offset: { dx: 0, dy: 50 } }); + } + + build() { + NavDestination() { + Column({ space: 12 }) { + + Row() { + Column() { + Text($r('app.string.change_text')) + .fontSize(14) + .fontColor('#666') + Button('open dialog and update options') + .id('open') + .margin({ top: 10, bottom: 50 }) + .onClick(() => { + PromptActionClass.openDialog(); + }) + } + .width('100%') + .height('100%') + } + .height('100%') + } + .width('100%') + .height('100%') + .padding({ left: 12, right: 12 }) + } + .backgroundColor('#f1f2f3') + .title($r('app.string.open_customDialog')) + } +} +// [End open_close_component_content] \ No newline at end of file diff --git a/ArkUISample/DialogProject/entry/src/main/ets/pages/popup/ButtonPopup.ets b/ArkUISample/DialogProject/entry/src/main/ets/pages/popup/ButtonPopup.ets new file mode 100644 index 000000000..114fc049e --- /dev/null +++ b/ArkUISample/DialogProject/entry/src/main/ets/pages/popup/ButtonPopup.ets @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2025 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. + */ + +// [Start button_popup] +@Entry +@Component +export struct ButtonPopupExample { + @State handlePopup: boolean = false; + + build() { + NavDestination() { + Column({ space: 12 }) { + + Column() { + Button('PopupOptions').margin({ top: 300 }) + .onClick(() => { + this.handlePopup = !this.handlePopup; + }) + .bindPopup(this.handlePopup, { + message: 'This is a popup with PopupOptions', + primaryButton: { + value: 'Confirm', + action: () => { + this.handlePopup = !this.handlePopup; + console.info('confirm Button click'); + } + }, + secondaryButton: { + value: 'Cancel', + action: () => { + this.handlePopup = !this.handlePopup; + } + }, + onStateChange: (e) => { + if (!e.isVisible) { + this.handlePopup = false; + } + } + }) + }.width('100%').padding({ top: 5 }) + + } + .width('100%') + .height('100%') + .padding({ left: 12, right: 12 }) + } + .backgroundColor('#f1f2f3') + .title($r('app.string.button_popup')) + } +} +// [End button_popup] \ No newline at end of file diff --git a/ArkUISample/DialogProject/entry/src/main/ets/pages/popup/CustomPopup.ets b/ArkUISample/DialogProject/entry/src/main/ets/pages/popup/CustomPopup.ets new file mode 100644 index 000000000..c533a4f49 --- /dev/null +++ b/ArkUISample/DialogProject/entry/src/main/ets/pages/popup/CustomPopup.ets @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2025 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. + */ + +// [Start custom_popup] +@Entry +@Component +export struct CustomPopupExample { + @State customPopup: boolean = false; + + // popup构造器定义弹框内容 + @Builder + popupBuilder() { + Row({ space: 2 }) { + Image($r('app.media.app_icon')).width(24).height(24).margin({ left: 5 }) + Text('This is Custom Popup').fontSize(15) + }.width(200).height(50).padding(5) + } + + build() { + NavDestination() { + Column({ space: 12 }) { + + Column() { + Button('CustomPopupOptions') + .margin({ top: 300 }) + .onClick(() => { + this.customPopup = !this.customPopup; + }) + .bindPopup(this.customPopup, { + builder: this.popupBuilder, // 气泡的内容 + placement: Placement.Bottom, // 气泡的弹出位置 + popupColor: Color.Pink, // 气泡的背景色 + onStateChange: (e) => { + if (!e.isVisible) { + this.customPopup = false + } + } + }) + } + .height('100%') + + } + .width('100%') + .height('100%') + .padding({ left: 12, right: 12 }) + } + .backgroundColor('#f1f2f3') + .title($r('app.string.custom_popup')) + } +} +// [End custom_popup] \ No newline at end of file diff --git a/ArkUISample/DialogProject/entry/src/main/ets/pages/popup/Index.ets b/ArkUISample/DialogProject/entry/src/main/ets/pages/popup/Index.ets new file mode 100644 index 000000000..dacaf1fb9 --- /dev/null +++ b/ArkUISample/DialogProject/entry/src/main/ets/pages/popup/Index.ets @@ -0,0 +1,109 @@ +/* + * Copyright (c) 2025 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 { CompletedRoutableCard } from '../../common/Card'; +import resource from '../../common/resource'; +import { Route } from '../../common/Route'; +import { ButtonPopupExample } from './ButtonPopup'; +import { CustomPopupExample } from './CustomPopup'; +import { AnimationPopupExample } from './PopupAnimation'; +import { StatePopupExample } from './PopupStateChange'; +import { StylePopupExample } from './PopupStyle'; +import { TextPopupExample } from './TextPrompts'; + + +export const Popup_ROUTE_PREFIX: string = 'Popup_ROUTE_PREFIX'; + +const routes: Route[] = [ + { + name: `${Popup_ROUTE_PREFIX}/TextPopupExample`, + title: resource.resourceToString($r('app.string.TextPopup_title')), + description: $r('app.string.TextPopup_des'), + }, + { + name: `${Popup_ROUTE_PREFIX}/onStateChange`, + title: resource.resourceToString($r('app.string.onStateChange_title')), + description: $r('app.string.onStateChange_des'), + }, + { + name: `${Popup_ROUTE_PREFIX}/ButtonPopupExample`, + title: resource.resourceToString($r('app.string.ButtonPopup_title')), + description: $r('app.string.ButtonPopup_des'), + }, + { + name: `${Popup_ROUTE_PREFIX}/AnimationPopupExample`, + title: resource.resourceToString($r('app.string.AnimationPopup_title')), + description: $r('app.string.AnimationPopup_des'), + }, + { + name: `${Popup_ROUTE_PREFIX}/CustomPopupExample`, + title: resource.resourceToString($r('app.string.CustomPopup_title')), + description: $r('app.string.CustomPopup_des'), + }, + { + name: `${Popup_ROUTE_PREFIX}/StylePopupExample`, + title: resource.resourceToString($r('app.string.StylePopup_title')), + description: $r('app.string.StylePopup_des'), + } +] + +@Builder +export function PopupDestination(name: string) { + if (name === Popup_ROUTE_PREFIX) { + PopupExample(); + } else if (name === routes[0].name) { + TextPopupExample(); + } else if (name === routes[1].name) { + StatePopupExample(); + } else if (name === routes[2].name) { + ButtonPopupExample(); + } else if (name === routes[3].name) { + AnimationPopupExample(); + } else if (name === routes[4].name) { + CustomPopupExample(); + } else if (name === routes[5].name) { + StylePopupExample(); + } +} + +@Entry +@Component +struct PopupExample { + @Consume pathStack: NavPathStack; + + build() { + NavDestination() { + List({ space: 12 }) { + ForEach(routes, (route: Route) => { + ListItem() { + CompletedRoutableCard({ title: route.title, description: route.description }) + } + .width('100%') + .onClick(() => { + this.pathStack.pushPath({ name: route.name }); + }) + }) + } + .contentStartOffset(20) + .padding({ left: 16, right: 16 }) + } + .backgroundColor('#f1f3f5') + .title('', { + backgroundBlurStyle: BlurStyle.COMPONENT_THICK, + barStyle: BarStyle.STACK + }) + .title($r('app.string.popup')) + } +} \ No newline at end of file diff --git a/ArkUISample/DialogProject/entry/src/main/ets/pages/popup/PopupAnimation.ets b/ArkUISample/DialogProject/entry/src/main/ets/pages/popup/PopupAnimation.ets new file mode 100644 index 000000000..2ef0e99f8 --- /dev/null +++ b/ArkUISample/DialogProject/entry/src/main/ets/pages/popup/PopupAnimation.ets @@ -0,0 +1,86 @@ +/* + * Copyright (c) 2025 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. + */ + +// [Start animation_popup] +@Entry +@Component +export struct AnimationPopupExample { + @State handlePopup: boolean = false; + @State customPopup: boolean = false; + + @Builder popupBuilder() { + Row() { + Text('Custom Popup with transitionEffect').fontSize(10) + }.height(50).padding(5) + } + + build() { + NavDestination() { + Column({ space: 12 }) { + + + // PopupOptions 类型设置弹框内容 + Button('PopupOptions') + .margin({ top: 250 }) + .onClick(() => { + this.handlePopup = !this.handlePopup; + }) + .bindPopup(this.handlePopup, { + message: 'This is a popup with transitionEffect', + placementOnTop: true, + showInSubWindow: false, + onStateChange: (e) => { + if (!e.isVisible) { + this.handlePopup = false; + } + }, + // 设置弹窗显示动效为透明度动效与平移动效的组合效果,无退出动效 + transition:TransitionEffect.asymmetric( + TransitionEffect.OPACITY.animation({ duration: 1000, curve: Curve.Ease }).combine( + TransitionEffect.translate({ x: 50, y: 50 })), + TransitionEffect.IDENTITY) + }) + + + // CustomPopupOptions 类型设置弹框内容 + Button('CustomPopupOptions') + .margin({ top: 60 }) + .onClick(() => { + this.customPopup = !this.customPopup; + }) + .bindPopup(this.customPopup, { + builder: this.popupBuilder, + placement: Placement.Top, + showInSubWindow: false, + onStateChange: (e) => { + if (!e.isVisible) { + this.customPopup = false; + } + }, + // 设置弹窗显示动效与退出动效为缩放动效 + transition:TransitionEffect.scale({ x: 1, y: 0 }).animation({ duration: 500, curve: Curve.Ease }) + }) + + + } + .width('100%') + .height('100%') + .padding({ left: 12, right: 12 }) + } + .backgroundColor('#f1f2f3') + .title($r('app.string.AnimationPopup_title')) + } +} +// [End animation_popup] \ No newline at end of file diff --git a/ArkUISample/DialogProject/entry/src/main/ets/pages/popup/PopupStateChange.ets b/ArkUISample/DialogProject/entry/src/main/ets/pages/popup/PopupStateChange.ets new file mode 100644 index 000000000..a9fc84f98 --- /dev/null +++ b/ArkUISample/DialogProject/entry/src/main/ets/pages/popup/PopupStateChange.ets @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2025 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. + */ + +// [Start state_popup] +@Entry +@Component +export struct StatePopupExample { + @State handlePopup: boolean = false; + + build() { + NavDestination() { + Column({ space: 12 }) { + + Column() { + Button('PopupOptions') + .margin({ top: 300 }) + .onClick(() => { + this.handlePopup = !this.handlePopup; + }) + .bindPopup(this.handlePopup, { + message: 'This is a popup with PopupOptions', + onStateChange: (e)=> { // 返回当前的气泡状态 + if (!e.isVisible) { + this.handlePopup = false; + } + } + }) + }.width('100%').padding({ top: 5 }) + + } + .width('100%') + .height('100%') + .padding({ left: 12, right: 12 }) + } + .backgroundColor('#f1f2f3') + .title($r('app.string.onStateChange_title')) + } +} +// [End state_popup] \ No newline at end of file diff --git a/ArkUISample/DialogProject/entry/src/main/ets/pages/popup/PopupStyle.ets b/ArkUISample/DialogProject/entry/src/main/ets/pages/popup/PopupStyle.ets new file mode 100644 index 000000000..32426e332 --- /dev/null +++ b/ArkUISample/DialogProject/entry/src/main/ets/pages/popup/PopupStyle.ets @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2025 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. + */ + +// [Start style_popup] +@Entry +@Component +export struct StylePopupExample { + @State handlePopup: boolean = false; + + // popup构造器定义弹框内容 + @Builder + popupBuilder() { + Row({ space: 2 }) { + Image($r('app.media.app_icon')).width(24).height(24).margin({ left: 5 }) + Text('This is Custom Popup').fontSize(15) + }.width(200).height(50).padding(5) + } + + build() { + NavDestination() { + Column({ space: 12 }) { + + Column({ space: 100 }) { + Button('PopupOptions') + .margin({ top: 300 }) + .onClick(() => { + this.handlePopup = !this.handlePopup; + }) + .bindPopup(this.handlePopup, { + width: 200, + message: 'This is a popup.', + popupColor: Color.Pink, // 设置气泡的背景色 + mask: { + color: '#33d9d9d9' + }, + placement: Placement.Top, + backgroundBlurStyle: BlurStyle.NONE // 去除背景模糊效果需要关闭气泡的模糊背景 + }) + } + .width('100%') + + } + .width('100%') + .height('100%') + .padding({ left: 12, right: 12 }) + } + .backgroundColor('#f1f2f3') + .title($r('app.string.StylePopup_title')) + } +} +// [End style_popup] \ No newline at end of file diff --git a/ArkUISample/DialogProject/entry/src/main/ets/pages/popup/TextPrompts.ets b/ArkUISample/DialogProject/entry/src/main/ets/pages/popup/TextPrompts.ets new file mode 100644 index 000000000..4ff872db5 --- /dev/null +++ b/ArkUISample/DialogProject/entry/src/main/ets/pages/popup/TextPrompts.ets @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2025 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. + */ + +// [Start text_popup] +@Entry +@Component +export struct TextPopupExample { + @State handlePopup: boolean = false; + + build() { + NavDestination() { + Column({ space: 12 }) { + + Column() { + Button('PopupOptions') + .margin({ top: 300 }) + .onClick(() => { + this.handlePopup = !this.handlePopup; + }) + .bindPopup(this.handlePopup, { + message: 'This is a popup with PopupOptions', + }) + }.width('100%').padding({ top: 5 }) + + } + .width('100%') + .height('100%') + .padding({ left: 12, right: 12 }) + } + .backgroundColor('#f1f2f3') + .title($r('app.string.TextPopup_title')) + } +} +// [End text_popup] \ No newline at end of file diff --git a/ArkUISample/DialogProject/entry/src/main/module.json5 b/ArkUISample/DialogProject/entry/src/main/module.json5 new file mode 100644 index 000000000..4144486d1 --- /dev/null +++ b/ArkUISample/DialogProject/entry/src/main/module.json5 @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2025 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. + */ + +{ + "module": { + "name": "entry", + "type": "entry", + "description": "$string:module_desc", + "mainElement": "EntryAbility", + "deviceTypes": [ + "default", + "tablet" + ], + "deliveryWithInstall": true, + "installationFree": false, + "pages": "$profile:main_pages", + "abilities": [ + { + "name": "EntryAbility", + "srcEntry": "./ets/entryability/EntryAbility.ets", + "description": "$string:EntryAbility_desc", + "icon": "$media:layered_image", + "label": "$string:EntryAbility_label", + "startWindowIcon": "$media:startIcon", + "startWindowBackground": "$color:start_window_background", + "exported": true, + "skills": [ + { + "entities": [ + "entity.system.home" + ], + "actions": [ + "action.system.home" + ] + } + ] + } + ], + "extensionAbilities": [ + { + "name": "EntryBackupAbility", + "srcEntry": "./ets/entrybackupability/EntryBackupAbility.ets", + "type": "backup", + "exported": false, + "metadata": [ + { + "name": "ohos.extension.backup", + "resource": "$profile:backup_config" + } + ] + } + ] + } +} \ No newline at end of file diff --git a/ArkUISample/DialogProject/entry/src/main/resources/base/element/color.json b/ArkUISample/DialogProject/entry/src/main/resources/base/element/color.json new file mode 100644 index 000000000..3c712962d --- /dev/null +++ b/ArkUISample/DialogProject/entry/src/main/resources/base/element/color.json @@ -0,0 +1,8 @@ +{ + "color": [ + { + "name": "start_window_background", + "value": "#FFFFFF" + } + ] +} \ No newline at end of file diff --git a/ArkUISample/DialogProject/entry/src/main/resources/base/element/string.json b/ArkUISample/DialogProject/entry/src/main/resources/base/element/string.json new file mode 100644 index 000000000..e8029f5d1 --- /dev/null +++ b/ArkUISample/DialogProject/entry/src/main/resources/base/element/string.json @@ -0,0 +1,380 @@ +{ + "string": [ + { + "name": "module_desc", + "value": "module description" + }, + { + "name": "EntryAbility_desc", + "value": "description" + }, + { + "name": "EntryAbility_label", + "value": "DialogProject" + }, + { + "name": "CustomDialog_dialog", + "value": "自定义弹窗" + }, + { + "name": "CustomDialog_create", + "value": "创建自定义弹框" + }, + { + "name": "CustomDialog_Animation", + "value": "弹窗渐出动画预览" + }, + { + "name": "CustomDialog_Animation1", + "value": "弹出框动画" + }, + { + "name": "CustomDialog_interaction", + "value": "弹出框交互" + }, + { + "name": "CustomDialog_interaction1", + "value": "弹出框交互页面跳转" + }, + { + "name": "CustomDialog_shadow", + "value": "弹窗设置边框阴影预览" + }, + { + "name": "CustomDialog_style", + "value": "弹出框的样式" + }, + { + "name": "CustomDialog_nest", + "value": "嵌套自定义弹出框" + }, + { + "name": "CustomDialog_create_des", + "value": "使用@CustomDialog装饰器装饰自定义弹出框,可在此装饰器内自定义弹出框内容。CustomDialogController需在@Component内定义。" + }, + { + "name": "CustomDialog_create_title", + "value": "创建自定义弹出框" + }, + { + "name": "CustomDialog_interaction_des", + "value": "弹出框可用于数据交互,完成用户一系列响应操作。" + }, + { + "name": "CustomDialog_interaction_title", + "value": "弹出框的交互" + }, + { + "name": "CustomDialog_interaction1_des", + "value": "可通过弹出框中的按钮实现路由跳转,同时获取跳转页面向当前页传入的参数。" + }, + { + "name": "CustomDialog_interaction1_title", + "value": "弹出框的交互页面跳转" + }, + { + "name": "CustomDialog_animation_des", + "value": "弹出框通过定义openAnimation控制弹出框出现动画的持续时间,速度等参数。" + }, + { + "name": "CustomDialog_animation_title", + "value": "弹出框的动画" + }, + { + "name": "CustomDialog_Style_des", + "value": "弹出框通过定义宽度、高度、背景色、阴影等参数来控制样式。" + }, + { + "name": "CustomDialog_Style_title", + "value": "弹出框的样式" + }, + { + "name": "CustomDialog_nest_des", + "value": "弹出框通过定义宽度、高度、背景色、阴影等参数来控制样式。" + }, + { + "name": "CustomDialog_nest_title", + "value": "弹出框的样式" + }, + { + "name": "CustomDialog_ActionSheet", + "value": "列表选择弹窗" + }, + { + "name": "CustomDialog_AlertDialog", + "value": "警告弹窗" + }, + { + "name": "CustomDialog_calender", + "value": "日历选择器弹窗" + }, + { + "name": "CustomDialog_date", + "value": "日期滑动选择器弹窗" + }, + { + "name": "CustomDialog_text", + "value": "文本滑动选择器弹窗" + }, + { + "name": "CustomDialog_time", + "value": "时间滑动选择器弹窗" + }, + { + "name": "CalendarPickerDialog_title", + "value": "日历选择器弹窗" + }, + { + "name": "CalendarPickerDialog_des", + "value": "日历选择器弹窗提供日历视图,包含年、月和星期信息,通过CalendarPickerDialog接口实现。开发者可调用show函数,定义并弹出日历选择器弹窗。" + }, + { + "name": "DatePicker_title", + "value": "日期滑动选择器弹窗" + }, + { + "name": "DatePicker_des", + "value": "开发者可以利用指定的日期范围,创建日期滑动选择器弹窗,将日期信息清晰地展示在弹出的窗口上。" + }, + { + "name": "TimePicker_title", + "value": "时间滑动选择器弹窗" + }, + { + "name": "TimePicker_des", + "value": "开发者可根据24小时的时间区间,创建时间滑动选择器弹窗,将时间信息清晰地展示在弹出的窗口上。" + }, + { + "name": "TextPicker_title", + "value": "文本滑动选择器弹窗" + }, + { + "name": "TextPicker_des", + "value": "开发者可根据指定的选择范围,创建文本滑动选择器弹窗,将文本信息清晰地展示在弹出的窗口上。" + }, + { + "name": "ActionSheet_title", + "value": "列表选择弹窗" + }, + { + "name": "ActionSheet_des", + "value": "列表选择器弹窗适用于呈现多个操作选项,尤其当界面中仅需展示操作列表而无其他内容时。" + }, + { + "name": "AlertDialog_title", + "value": "警告弹窗" + }, + { + "name": "AlertDialog_des", + "value": "需要向用户提问或得到用户的许可时,可使用警告弹窗。" + }, + { + "name": "fixed_dialog", + "value": "固定样式弹出框" + }, + { + "name": "menu_single", + "value": "菜单选项单级" + }, + { + "name": "menu_forbid", + "value": "菜单不可选择" + }, + { + "name": "menu_more", + "value": "菜单选项多级" + }, + { + "name": "menu_subtitle", + "value": "小标题" + }, + { + "name": "menu_selection", + "value": "菜单选项" + }, + { + "name": "menu_default", + "value": "默认样式" + }, + { + "name": "menu_bind", + "value": "属性绑定" + }, + { + "name": "menu_rightClick", + "value": "支持鼠标右键的菜单" + }, + { + "name": "create_menu", + "value": "创建菜单" + }, + { + "name": "menu", + "value": "菜单" + }, + { + "name": "CreateMenu_title", + "value": "创建自定义样式的菜单" + }, + { + "name": "CreateMenu_des", + "value": "菜单需要调用bindMenu接口来实现。bindMenu响应绑定组件的点击事件,绑定组件后手势点击对应组件后即可弹出。" + }, + { + "name": "Customdialog_title", + "value": "不依赖UI组件的全局自定义弹出框" + }, + { + "name": "Customdialog_des", + "value": "由于CustomDialogController在使用上存在诸多限制,不支持动态创建也不支持动态刷新,在相对较复杂的应用场景中推荐使用UIContext中获取到的PromptAction对象提供的openCustomDialog接口来实现自定义弹出框。" + }, + { + "name": "close_dialog", + "value": "关闭弹窗" + }, + { + "name": "change_dialog", + "value": "改变弹窗位置" + }, + { + "name": "change_text", + "value": "该按钮呼出的弹窗,点击“改变弹窗位置”弹窗由上对齐更新为底部对齐" + }, + { + "name": "open_customDialog", + "value": "不依赖UI组件的全局自定义弹出框" + }, + { + "name": "button_popup", + "value": "带按钮的提示气泡" + }, + { + "name": "custom_popup", + "value": "自定义气泡" + }, + { + "name": "popup", + "value": "气泡提示" + }, + { + "name": "TextPopup_title", + "value": "文本提示气泡" + }, + { + "name": "TextPopup_des", + "value": "文本提示气泡常用于只展示带有文本的信息提示,不带有任何交互的场景。Popup属性需绑定组件,当bindPopup属性中参数show为true时会弹出气泡提示。" + }, + { + "name": "onStateChange_title", + "value": "添加气泡状态变化的事件" + }, + { + "name": "onStateChange_des", + "value": "通过onStateChange参数为气泡添加状态变化的事件回调,可以判断当前气泡的显示状态。" + }, + { + "name": "ButtonPopup_title", + "value": "带按钮的提示气泡" + }, + { + "name": "ButtonPopup_des", + "value": "通过primaryButton、secondaryButton属性为气泡最多设置两个Button按钮,通过此按钮进行简单的交互,开发者可以通过配置action参数来设置想要触发的操作。" + }, + { + "name": "AnimationPopup_title", + "value": "气泡的动画" + }, + { + "name": "AnimationPopup_des", + "value": "气泡通过定义transition控制气泡的进场和出场动画效果。" + }, + { + "name": "CustomPopup_title", + "value": "自定义气泡" + }, + { + "name": "CustomPopup_des", + "value": "开发者可以使用CustomPopupOptions的builder创建自定义气泡,@Builder中可以放自定义的内容。除此之外,还可以通过popupColor等参数控制气泡样式。" + }, + { + "name": "StylePopup_title", + "value": "气泡样式" + }, + { + "name": "StylePopup_des", + "value": "气泡除了可以通过builder实现自定义气泡,还可以通过接口设置气泡的样式和显示效果。" + }, + { + "name": "toast", + "value": "即时反馈" + }, + { + "name": "CreateToast_title", + "value": "创建即时反馈" + }, + { + "name": "CreateToast_des", + "value": "适用于短时间内提示框自动消失的场景。" + }, + { + "name": "OpenCloseToast_title", + "value": "显示关闭即时反馈" + }, + { + "name": "OpenCloseToast_des", + "value": "适用于提示框提留时间较长,用户操作可以提前关闭提示框的场景。" + }, + { + "name": "openCustomDialog", + "value": "自定义弹出框/openCustomDialog" + }, + { + "name": "CustomDialog1", + "value": "基础自定义弹出框/CustomDialog" + }, + { + "name": "FixedStyleDialog1", + "value": "固定样式弹出框/FixedStyleDialog" + }, + { + "name": "Menu1", + "value": "菜单控制/Menu" + }, + { + "name": "Toast1", + "value": "即时反馈/Toast" + }, + { + "name": "Popup1", + "value": "气泡提示/Popup" + }, + { + "name": "back", + "value": "点击返回" + }, + { + "name": "ShowActionMenu_title", + "value": "操作菜单" + }, + { + "name": "ShowActionMenu_des", + "value": "操作菜单通过UIContext中的getPromptAction方法获取到PromptAction对象,再通过该对象调用showActionMenu接口实现,支持在回调或开发者自定义类中使用。" + }, + { + "name": "ShowDialog_title", + "value": "对话框" + }, + { + "name": "ShowDialog_des", + "value": "对话框通过UIContext中的getPromptAction方法获取到PromptAction对象,再通过该对象调用showDialog接口实现,支持在回调或开发者自定义类中使用。" + }, + { + "name": "DefaultAndTopToast_title", + "value": "即时反馈模式对比" + }, + { + "name": "DefaultAndTopToast_des", + "value": "即时反馈提供了两种显示模式,分别为DEFAULT(显示在应用内)、TOP_MOST(显示在应用之上)。" + } + ] +} \ No newline at end of file diff --git a/ArkUISample/DialogProject/entry/src/main/resources/base/media/background.png b/ArkUISample/DialogProject/entry/src/main/resources/base/media/background.png new file mode 100644 index 0000000000000000000000000000000000000000..f939c9fa8cc8914832e602198745f592a0dfa34d GIT binary patch literal 57364 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 A4*&oF literal 0 HcmV?d00001 diff --git a/ArkUISample/DialogProject/entry/src/main/resources/base/media/foreground.png b/ArkUISample/DialogProject/entry/src/main/resources/base/media/foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..4483ddad1f079e1089d685bd204ee1cfe1d01902 GIT binary patch literal 12430 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 cSLciz6AsI{U0tD9;7S&f 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

c)ijgxDm}8EsRXFt3h@+Ufr7@DN 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 literal 0 HcmV?d00001 diff --git a/ArkUISample/DialogProject/entry/src/main/resources/base/profile/backup_config.json b/ArkUISample/DialogProject/entry/src/main/resources/base/profile/backup_config.json new file mode 100644 index 000000000..78f40ae7c --- /dev/null +++ b/ArkUISample/DialogProject/entry/src/main/resources/base/profile/backup_config.json @@ -0,0 +1,3 @@ +{ + "allowToBackupRestore": true +} \ No newline at end of file diff --git a/ArkUISample/DialogProject/entry/src/main/resources/base/profile/main_pages.json b/ArkUISample/DialogProject/entry/src/main/resources/base/profile/main_pages.json new file mode 100644 index 000000000..f9a642325 --- /dev/null +++ b/ArkUISample/DialogProject/entry/src/main/resources/base/profile/main_pages.json @@ -0,0 +1,6 @@ +{ + "src": [ + "pages/Index", + "pages/Index2" + ] +} diff --git a/ArkUISample/DialogProject/entry/src/main/resources/dark/element/color.json b/ArkUISample/DialogProject/entry/src/main/resources/dark/element/color.json new file mode 100644 index 000000000..79b11c274 --- /dev/null +++ b/ArkUISample/DialogProject/entry/src/main/resources/dark/element/color.json @@ -0,0 +1,8 @@ +{ + "color": [ + { + "name": "start_window_background", + "value": "#000000" + } + ] +} \ No newline at end of file diff --git a/ArkUISample/DialogProject/entry/src/ohosTest/ets/test/Ability.test.ets b/ArkUISample/DialogProject/entry/src/ohosTest/ets/test/Ability.test.ets new file mode 100644 index 000000000..0f8ce9a2c --- /dev/null +++ b/ArkUISample/DialogProject/entry/src/ohosTest/ets/test/Ability.test.ets @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2025 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 { hilog } from '@kit.PerformanceAnalysisKit'; +import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from '@ohos/hypium'; + +export default function abilityTest() { + describe('ActsAbilityTest', () => { + // Defines a test suite. Two parameters are supported: test suite name and test suite function. + beforeAll(() => { + // Presets an action, which is performed only once before all test cases of the test suite start. + // This API supports only one parameter: preset action function. + }) + beforeEach(() => { + // Presets an action, which is performed before each unit test case starts. + // The number of execution times is the same as the number of test cases defined by **it**. + // This API supports only one parameter: preset action function. + }) + afterEach(() => { + // Presets a clear action, which is performed after each unit test case ends. + // The number of execution times is the same as the number of test cases defined by **it**. + // This API supports only one parameter: clear action function. + }) + afterAll(() => { + // Presets a clear action, which is performed after all test cases of the test suite end. + // This API supports only one parameter: clear action function. + }) + it('assertContain', 0, () => { + // Defines a test case. This API supports three parameters: test case name, filter parameter, and test case function. + hilog.info(0x0000, 'testTag', '%{public}s', 'it begin'); + let a = 'abc'; + let b = 'b'; + // Defines a variety of assertion methods, which are used to declare expected boolean conditions. + expect(a).assertContain(b); + expect(a).assertEqual(a); + }) + }) +} \ No newline at end of file diff --git a/ArkUISample/DialogProject/entry/src/ohosTest/ets/test/Index.test.ets b/ArkUISample/DialogProject/entry/src/ohosTest/ets/test/Index.test.ets new file mode 100644 index 000000000..ed9b96762 --- /dev/null +++ b/ArkUISample/DialogProject/entry/src/ohosTest/ets/test/Index.test.ets @@ -0,0 +1,148 @@ +/* + * Copyright (c) 2025 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 { describe, it, expect, beforeAll } from '@ohos/hypium'; +// 导入测试依赖kit +import { abilityDelegatorRegistry, Driver, ON, MouseButton, Component, MatchPattern } from '@kit.TestKit'; +import { UIAbility, Want } from '@kit.AbilityKit'; +import resource from '../../../main/ets/common/resource'; + + +const delegator: abilityDelegatorRegistry.AbilityDelegator = abilityDelegatorRegistry.getAbilityDelegator() +const bundleName = abilityDelegatorRegistry.getArguments().bundleName; +let want: Want; + +function sleep(time: number) { + return new Promise((resolve: Function) => setTimeout(resolve, time)); +} + + +export default function IndexTest() { + + describe('IndexTest', () => { + + beforeAll(async () => { + want = { + bundleName: bundleName, + abilityName: 'EntryAbility' + }; + await delegator.startAbility(want); + await sleep(1000); + const ability: UIAbility = await delegator.getCurrentTopAbility(); + console.info("get top ability"); + expect(ability.context.abilityInfo.name).assertEqual('EntryAbility'); + }) + + it('testOpenCustomDialog', 0, async (done: Function) => { + console.info("uitest: testOpenCustomDialog begin"); + let driver = Driver.create(); + let button_list = await driver.findComponent(ON.text('openCustomDialog', MatchPattern.CONTAINS)); + expect(button_list === null).assertFalse(); + await button_list.click(); + let button_list1 = await driver.findComponent(ON.text('UI', MatchPattern.CONTAINS)); + await button_list1.click(); + let button1 = await driver.findComponent(ON.id('open')); + await button1.click(); + + let button2 = await driver.findComponent(ON.text(resource.resourceToString($r('app.string.change_dialog')), MatchPattern.CONTAINS)); + await button2.click(); + await sleep(1000); + await driver.pressBack(); + await driver.pressBack(); + await driver.pressBack(); + done(); + }) + + it('testCustomDialog', 0, async (done: Function) => { + console.info("uitest: testCustomDialog begin"); + let driver = Driver.create(); + let button_list = await driver.findComponent(ON.text(resource.resourceToString($r('app.string.CustomDialog1')), MatchPattern.CONTAINS)); + expect(button_list === null).assertFalse(); + await button_list.click(); + let button_list1 = await driver.findComponent(ON.text(resource.resourceToString($r('app.string.CustomDialog_nest')), MatchPattern.CONTAINS)); + await button_list1.click(); + + let button_list2 = await driver.findComponent(ON.text('Click', MatchPattern.CONTAINS)); + await button_list2.click(); + let button_list3 = await driver.findComponent(ON.text('confirm', MatchPattern.CONTAINS)); + await button_list3.click(); + let button_list4 = await driver.findComponent(ON.text('close', MatchPattern.CONTAINS)); + await button_list4.click(); + await driver.pressBack(); + await driver.pressBack(); + await sleep(1000); + done(); + }) + + it('testFixedCustomDialog', 0, async (done: Function) => { + console.info("uitest: testFixedCustomDialog begin"); + let driver = Driver.create(); + let button_list = await driver.findComponent(ON.text(resource.resourceToString($r('app.string.FixedStyleDialog1')), MatchPattern.CONTAINS)); + expect(button_list === null).assertFalse(); + await button_list.click(); + let button_list1 = await driver.findComponent(ON.text(resource.resourceToString($r('app.string.DatePicker_title')), MatchPattern.CONTAINS)); + await button_list1.click(); + + let button_list2 = await driver.findComponent(ON.text('showDate', MatchPattern.CONTAINS)); + await button_list2.click(); + await driver.pressBack(); + await driver.pressBack(); + await driver.pressBack(); + await sleep(1000); + done(); + }) + + it('testMenu', 0, async (done: Function) => { + console.info("uitest: testMenu begin"); + let driver = Driver.create(); + let button_list = await driver.findComponent(ON.text(resource.resourceToString($r('app.string.Menu1')), MatchPattern.CONTAINS)); + expect(button_list === null).assertFalse(); + await button_list.click(); + let button_list1 = await driver.findComponent(ON.text(resource.resourceToString($r('app.string.CreateMenu_title')), MatchPattern.CONTAINS)); + await button_list1.click(); + + let button_list2 = await driver.findComponent(ON.text(resource.resourceToString($r('app.string.menu_bind')), MatchPattern.CONTAINS)); + await button_list2.click(); + await driver.pressBack(); + await driver.pressBack(); + await driver.pressBack(); + await driver.pressBack(); + await sleep(1000); + done(); + }) + + it('testToast', 0, async (done: Function) => { + console.info("uitest: testToast begin"); + let driver = Driver.create(); + let button_list = await driver.findComponent(ON.text(resource.resourceToString($r('app.string.Toast1')), MatchPattern.CONTAINS)); + expect(button_list === null).assertFalse(); + await button_list.click(); + let button_list1 = await driver.findComponent(ON.text(resource.resourceToString($r('app.string.OpenCloseToast_title')), MatchPattern.CONTAINS)); + await button_list1.click(); + + let button1 = await driver.findComponent(ON.text('Open', MatchPattern.CONTAINS)); + await button1.click(); + let button2 = await driver.findComponent(ON.text('Close', MatchPattern.CONTAINS)); + await button2.click(); + await driver.pressBack(); + await driver.pressBack(); + await driver.pressBack(); + await sleep(1000); + done(); + }) + + + }) +} \ No newline at end of file diff --git a/ArkUISample/DialogProject/entry/src/ohosTest/ets/test/List.test.ets b/ArkUISample/DialogProject/entry/src/ohosTest/ets/test/List.test.ets new file mode 100644 index 000000000..3d739bce6 --- /dev/null +++ b/ArkUISample/DialogProject/entry/src/ohosTest/ets/test/List.test.ets @@ -0,0 +1,23 @@ +/* + * Copyright (c) 2025 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 IndexTest from './Index.test' +import abilityTest from './Ability.test'; + +export default function testsuite() { + abilityTest(); + IndexTest() +} \ No newline at end of file diff --git a/ArkUISample/DialogProject/entry/src/ohosTest/module.json5 b/ArkUISample/DialogProject/entry/src/ohosTest/module.json5 new file mode 100644 index 000000000..4c262abdf --- /dev/null +++ b/ArkUISample/DialogProject/entry/src/ohosTest/module.json5 @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2025 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. + */ + + +{ + "module": { + "name": "entry_test", + "type": "feature", + "deviceTypes": [ + "default", + "tablet" + ], + "deliveryWithInstall": true, + "installationFree": false + } +} diff --git a/ArkUISample/DialogProject/hvigor/hvigor-config.json5 b/ArkUISample/DialogProject/hvigor/hvigor-config.json5 new file mode 100644 index 000000000..d584c19c2 --- /dev/null +++ b/ArkUISample/DialogProject/hvigor/hvigor-config.json5 @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2025 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. + */ + +{ + "modelVersion": "5.0.1", + "dependencies": { + }, + "execution": { + // "analyze": "normal", /* Define the build analyze mode. Value: [ "normal" | "advanced" | false ]. Default: "normal" */ + // "daemon": true, /* Enable daemon compilation. Value: [ true | false ]. Default: true */ + // "incremental": true, /* Enable incremental compilation. Value: [ true | false ]. Default: true */ + // "parallel": true, /* Enable parallel compilation. Value: [ true | false ]. Default: true */ + // "typeCheck": false, /* Enable typeCheck. Value: [ true | false ]. Default: false */ + }, + "logging": { + // "level": "info" /* Define the log level. Value: [ "debug" | "info" | "warn" | "error" ]. Default: "info" */ + }, + "debugging": { + // "stacktrace": false /* Disable stacktrace compilation. Value: [ true | false ]. Default: false */ + }, + "nodeOptions": { + // "maxOldSpaceSize": 8192 /* Enable nodeOptions maxOldSpaceSize compilation. Unit M. Used for the daemon process. Default: 8192*/ + // "exposeGC": true /* Enable to trigger garbage collection explicitly. Default: true*/ + } +} diff --git a/ArkUISample/DialogProject/hvigorfile.ts b/ArkUISample/DialogProject/hvigorfile.ts new file mode 100644 index 000000000..f3cb9f1a8 --- /dev/null +++ b/ArkUISample/DialogProject/hvigorfile.ts @@ -0,0 +1,6 @@ +import { appTasks } from '@ohos/hvigor-ohos-plugin'; + +export default { + system: appTasks, /* Built-in plugin of Hvigor. It cannot be modified. */ + plugins:[] /* Custom plugin to extend the functionality of Hvigor. */ +} diff --git a/ArkUISample/DialogProject/oh-package.json5 b/ArkUISample/DialogProject/oh-package.json5 new file mode 100644 index 000000000..e41bae026 --- /dev/null +++ b/ArkUISample/DialogProject/oh-package.json5 @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2025 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. + */ + +{ + "modelVersion": "5.0.1", + "description": "Please describe the basic information.", + "dependencies": { + }, + "devDependencies": { + "@ohos/hypium": "1.0.19", + "@ohos/hamock": "1.0.0" + } +} diff --git a/ArkUISample/DialogProject/screenshots/device/image1.png b/ArkUISample/DialogProject/screenshots/device/image1.png new file mode 100644 index 0000000000000000000000000000000000000000..ed562c1aa1a2832b992c851eb175c2f109d117aa GIT binary patch literal 48233 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 literal 0 HcmV?d00001 diff --git a/ArkUISample/DialogProject/screenshots/device/image2.png b/ArkUISample/DialogProject/screenshots/device/image2.png new file mode 100644 index 0000000000000000000000000000000000000000..26fce1fb323a91ccd6d51a552bda47287b450c73 GIT binary patch literal 71521 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

YOklD|IDWu%)t!n!ENht|JN9HgUh*364CF zg|(4>nziQ@u9ivo^z-vR6j&|C~VbA8plcVoOU-dz@Oh=zkouWVx1AoDrQ2luO~8Y$6Sl+c=&J4@2>Y6J0FAU4)K_`QQK}K zCwFgFcu+$>#+I7$#SZTa)~VH+DPLMQUlG~qv=0?lOv8$Jj=GMw0R95}2;k^REIV(f z7QN4_eadxzTYCz5Mc*knI5f+b$mf4%U>(}0lc9w%MWJDbidJsF0yb>e>y8~Tx&o?> zg+gTKL?^#XhDLl4gdoYjGS@8K;x5T%5N-C~lS&b9{aEW9&QGrxa$9U+1QjF+vLk&} z0*-I#@aAt4E1Fe4{v!5{AX+W3Kq6r^%-(8AWWC#4 z^@0p`tW7;&0lRKwOMma?ysJa%17asJ>lwAjYNO?;cQ*N?KwrY(guf-yhi zS@*H$a&NJ??2u?Emd6va@PiY1H<^+);#)WWFs)1Ssjo-X#bvR)pARsszOJ-pV&Z-@ z07`jIzCIh`vMU2Oar+hZm#x_9vbbuQZ zlw)t>FTKV3ZoE%t1~QHq;eXLWyZ_ojkL22j4YrE$B@@<85AURP+B$)1_pe_; z(>|_Sdo*ZhE^)#xdW%8mw>{0Y`)yu+bzdmQS_;_?p%BML@-?{M`_VBw?&Nr*I~SOT z_mI^Yo1eM}?YfGoZ?idAxXBd$-{E)ix}JTzYLm-X0XJO!Mb=#g=DUY&uyd-$*yTpsHa z>nP}>ShC@U%{P5O^nuda{sP{;_8hugS-qjj{RLpEe(~o5fmvyqI-&d;Hr8DN@6sM^ zZNh1aa-Q>0v*ODEa*NBnc&8X2ZI1HYU~Qlq1Su5po4civmqE7*^O&wv?T^HYkzMrS z#2BlYtV3Hp`Tw1Sj{ne?w*5xs?Qj>%$?l-xu}~n+aD3<+-(PoNREpa|*7@^JOV=^R zZZ_7|F{j09V!(Lw4rqrSxV^Y^s)IS~XB@N#*`Z-?C#widJ$j>g^fIgY^q{SdDqObr zvrSHH2ef4TJF}!=(o=x7LJ<{F|$)q1X+5% zev``UIsfU>9-UXNLyOj^oBfKK&cA>W5Hukxiu4imQwo)0BKGw_Bw0U2?JKF^SV_)a zhgj7I)uh zKW8}XL{hk$#4hL=6PpPjc|M5$V(WZtSYWItLF+a$2@r~^a|m$ovP@T#7fIjJ>;Ce1 zaiN@dOl%oy5m06$Qt?R78shQic zHed6f-k^=)dveDd)C#L2K$wM}gJk~#3Yx>;;OQU1i;%K>ANEwJW?dxM%3gz+#CMYj z0D``4dy0!2#40Uo%HavqDc;}mPg!jI4OBT^oreTN2Sesu;Ka^YuuqkLK* zZ0=%$ScV12E()q{CGM+AJ`fh5-fCO@k5(RL<_ZgnNk6{eQC5i0H~pgMmUyatvKX70<#(mSf&9Frg~ z8qiySQt|K5=l@R=-+wq+{W~}_Ra=6L9m@|`OjP6BO&vIvagVa>ht7GUT8n0E8B~Je z2*7T2f&!`hbh9ru)`x_SI03Te>6N3UhjcHHD^I&s&TLiDlPjl|#!?umLfMZg0|~q% z;0giJi162Ta;m+x7!z`9h&O{ke*kl}XLrjL`t5z1%UVt1#~6gZLaB~;ia%kv7_o&L z2E6?W6|1shOVpv)MX%fE$AN}7XYqYC1kDDlR;sNnKg0Hk(_&Mar_*G?fUBmNUIJ}( zTYNFhmTxuGQLCS7m$(co-r+e6Q@nC&JPt{})|JVju6IPjC&@XntyRGpe|z2Le|3qX zYg{V6EXk6eD@sUZ?qUn`vA<=$I5B|aeoMPi$wP+m=#a}Cf`MTEqF+Mj(KmKY=XZk~ z>3}@ljH-#3Jx`nUaK2NJb6SiDh;lKP*yu0yv`Z__Qwn%*GpjHSS9*FdwQB%y`W zxjraP&OnKXS<%mlqpJ@YEdOp3fS*_1T1GWE3EtoS{OD?PIe@}1eFHOdygn(49eGQn=$Dgm?*)BDn=A}<*?4Q##Gfun2jxfrx4RGnLaMCZX5vV^LE4ng z#HoVJsI*l=*q0KxB_x{f`frqTW#9{7EHK8>I?$;}`NLqG>>@m#<0FZ2&OQ`+-6tI2 zQi_hHTM)9ATh`hh@x7}t0oR%DCgvVstN|-H%PK}**$rl!v)Qtdw2Accl>TwhBJ8I{ ztjCsgP6v7e!`sxKufcx$3kbOC@RB?_Gol>@?_cf>cD4s)dXL<1N*&`il%OEW_ub4_ z)KmkBRekVu8g6b}&}1?BW@c$VbLqMxWaI=eVDg8frH?o{6?debJHQHhV^TAZ_MM&N z4mV4il-i{0w;BNH)~6UvS)Ckc#6^NJ)6AfjqXxm=(ds{}sZ-fL741i1>+k8r>5%u= zNyA@KDxK5s7W|VFoa~TO8VeP z649x9o6N*<5cq0ce2`|HsxDbEU~NsG@C&h&8oy>kl;{-!0hP?#yE7;n>=f;)Wd`hc zSogTtKR1wxQ$K3@reJLtk~eufGB?Mh#wpM%%ldBKP6DVEEA@|k1G+}$&Et+`rS~Mp ze!;Wm>Hg7?oNK+Ct97`GW_DlU zSVp@ci``nE>}C1_)8`SPwiCp}rk#-*HaouWa~^j85)aK-z9P>JS1d2k`Tqka7N;2Z5j6$Livl-5urBKVpbAI@o;@>>Cpa+*fZ@3|K9#D6!#>*d-B)!I_eC}79qsQC(+J+6e zup3RV6E8C|%?8ylAdAc;^PTd! zZ&`UPoc42z-WGY(zWjq&X_my~KX(_%8xM&=L4Cp%jz{_RqXs(KOZZfOjz6lHuA zlf-{mm4?^>SZWFe7QKP**f=!a8(mpz^$^2yD3~D+{ zK=pGwWuB$A(lsiQxJIDWY=I-|7p+bO^90D;o9Fx% zYelFfuk}7`qZge7n11P;TQO2}Ba#!z!t~NK1Sn$1Xui>eFoM)LF>d2%@$E5Au3VyJgz7PppOq4LWKbS({`Q@ z%+9nowV&kBs=953&jEQkn;r#6kkFxYn)eQS#9b1KO!(?%(avT`7${FJ!$1zkNxL#x zL%#U(LJ$~h-DEfZP9?TRRP6dqwuyyuzA(U49_VliETDVeB+)?*Bk7iSs6udCrbJfE z0^$ONZ(HT63i!=vrqEOltq;7VibZ6l#^vAp#R?#Pv_Xq@uCYwX$>ZQmQqdTs5VX^= zoZT_dtviT6y|+NYv=SKB&gAcZ(sU5iKP^fPBc(mu7#W9s6ubJ)E3`)WvrSo zY_~#HO@Z9sElFj^=+nw)5jEPy{#|0481ZMx-#gb-6*7eiF4eZ_*oGShHOY)Il7ceE zn6l2I*W&MVNMj$1bxq|HK13Ai&?J95_nkjs*5*%SLA76^qNpJ)kn!O+wnuUnA#)8( zEws1f`Hh^X8CMxfC;JDe_b)-p~%d;b^9>_5TxA97%AOO;qMpX7E_=Rf>wLI2O99tUujnBH@scmOJ>I4nT%zrV%t zIXh%xVu1ZB+J!*o=ld=y3XneSBq^7-9#T{kOnb93qxR3q75{bef11{yfp&^IPs|!L z%4PAdPW|s4tc2t96u%{brn}q`=-w^u8&xkuncxGJ8C?^DHE&hn$)I0}gx%qa;=mv! ztQW;ocFCy703>($D~d;))HG%#KK$3o|4CXy2ij%oJoa5ZOpP)CjiRzN5&!M<9_*bzoFcac77~L!pXL8rbJI~(VDGbl*W|ur#sVj#gUg--e68) zLFL$P_(fr-OHn^{yCw0Ar5$-@D<`NasMOVbclWNYu>bO9kIZ%slq4ebv}(qz9{Vy~ z;!t;bA-=PCj`A09lJc!5Rktq7G)tZaOPYFUrG2Kas9nmSMk*OFORS`X*N~D?t(SJ;AyT{$46d7QXPE^MJEU4$;kT z4{^*RG0s_@=L;;o;}+0{^^IBBEEVJ4fUYabMf_NngfA)Xj^`WSl_s}hjou+Y*6+t} z#nDPp+pmOXtxU2yIiZwpO~G73Q77Fbw*1p3UPaKWa2)%ZQMCI-CvwYQf2Wfqftd!7 zA)xE(2-`B}Uha2zR3E=lG_}fWiwfNu^qHxn7!|xM)6?hut|EVbUdtA=#rO;*B<*>J zoeR7Sv(_W7GE7T|LcPkT*0pARZ?tU-ox(wt>%U5Y(8LiYWJtk0Cdb58!4zrRE@}3~ z^MQ={O235YmmU_jZL$I1iu%u-3ylFElYFQXTvR>kD*G$$anEuZKT-L>ii6nx@tV~$ zxAn*#ocpdv?eMSm5=hNMt-sa#2&za;f}Q!no|J(cEIGr?D`{=iTp;ewjlU$Aeu?tR zc-A8kn&uOv8gPVFV9#voK>tl)My{ss8y@LlP!}oYm|VJHt1V=d5ohgChTQGn>Xc27 z9=bysE2i3Z)TG0{b%C!^_th5SpT+Yh;65j@QO1R;<#TZAp0E3>9l7e2cx+RKx`VX* zj6<;x9<7ZBEF3opK%msP?GQ&N#pX|boIlf!3Ycn+HbClFfo1VV-Qnfh3@z}IkYKuQ zt^){rG62Gwf}+32rZ|en_?8f*hPzz_3JcmgWPHLS$cLal&SJgyM1$0}Ua}-D=~&1K zXpJ6%!z9q?xLuHicjH?WFX-(Zw7SxE#ZSX?>l#s1<;63~wm0w<)^WFOUBZcZ!jq9} zpt_e8bzOOvYkIlbd~M$1^Y%h%bDx>JhQ2;^t*or%uCpZ6aXoujhkv;g>0xBqXIK3f z5QXRKg8!a`Q^~=Ww3w76te5a0>K0lu!q%bOP=!8Pwvlwqba9KdNGl@t*U#nto4B5} z!fIGAAtC0`bAM^toJJY(!4YkFMdtGR&om)IF)&L}BbN`cyrhbs@b&Wt4tbs+vZ#&_ zdzN0wU-WS(LoO;Qg7Hp8Z7K+>t6zuRJpI4qQMACz^63pDM-J1cp7i1lABj<2eM}1^ zU9h|&GKy7H=HX?Xe;HfThmiRV zl%qWI${7ZaJB<`|(Ukw8yPU4l$;x^@mKRH0U<{BKke$ULzeCPI^WbDlgqn+vyPG8* z-KpWXBdUKa{vIX6bdUw3kqCL6&71=BCg>=?c%SJcol>Hvtsebq#DH5R z3fb=Wz}Ptb zUrK%Br3vm=9r-0|S6sYb$x(a$k6NIJv@3{~7e&i?7tykJEx*0j*Q?IBPSlUpYVeJ% zskLX0-QA8DRWahnhP4{C0vrA=lPd?Jn<2xARi;u=kfjY7VN=)TMnrMDkrZ#n(*VuD zIjt%2o3^OruS1_YwMVzoX|qc2u&t&^slK^=UG(;^-B0qmm&>NgJ`aa77LWN`%lJh2 z%e>;4MwQ?l?DQ@lk%;>ib7d;dT-3c{@&p6 zrvEPh(jg*f!hauD%=h}4dB6`BDot~BJzI2Ft7VIlq_^59_NN>TiH@3^`O<^6)`gu%zP|vKuBb7D84ovdqtU}Z5!lG4x!sS95-sI8RYTGH!FlavHFJKod2xx9c#0M(H+(9>&1gA_}r+U9<9d7@<)_L2*k@Pju zjUYSOS8va+k@_UwHzj zoJ(CibY5im-%q=-W`S4nOhY&?3GepYW0{q~Z}i?vXZLuZK;8P~gT4lb33`E%or0HY zCrR+#Q|czzp9SKsD*0UY?62Vy!vSmJYX!bCJPaTDLX)?5##62G&R`t@pFi$ndNNbY z`;M3oC~#iX^(CBdXbp4CYwQMX?X$O;+N8?+sFnr<=^twO;_&lc7W4b2pXjpaUtNP< z2^J&+32P%^6}Hg7oG5n6z)CV_7Pg5sP(nSd?x)O7y>oUbCaht=LVX(t>s~6p&mxiE zMp>f74)4X9IOH;qF`-HIcXhfMw5=K5q4%R4#BvwI>tcD`3&s1Z>n}2wNgH1u9be%= z0!FMpU)RWc(nOp&Z!3bf@UF^=x6U+Vqm|}O8`HIuj)<;hF;4a!300AqT%NRJ@^G%y zPaxVrv#kqMU4`&~fNqB`~7x*PWYy+5GJS z>`E2N^(Tv-5^Fj|diPlOQ{PC3>B%xgPv%6h-Drf&Av{^)_l|}3d3L90i#O?`H<-^M zZoRwiXL_hxMoyZS<&hW7$i+%tM&T&71g6MfQ-Q{LvGOt{o5S(#fG=-b9tOm@*eY+6 z&rDQC!_=9P`&!JoB^WNZ|5x2uQ0O zzV<^)?nt)hU3|XsSj+JoqsUg_8uK3#&VQd6N;ouQrwx6_=hk!!%r2fA*=fx~*4NXUZQJYkHt_}?d{jXp7{Euq?f3Y;{SRX5k+gDd?uWHRKt}UqR$=%;X;`_Qj zRd47S9P_C|jAUuTv>;=4b#PJM`p4zU-Qj%P81*I2z3~L;uIK)J`?ezGTG+%Lg_|&M4|uLDo$!Z^^5-$_00(R$A|%qJpQw(hmuk?%jbB;%hp`V z^*^sSNYn(W=~!3Al;V4LpbRR?M%^#sc?Mmb*uazDjdAph)u_qPt#}zHeHwuV2&4(Q zL=xKNC?l8UbpTl9OGr_Bv|tl&_!_7%aIbv1O`18##PGfq!qzDhuifW ztDO_HKEFSZM(#SCX})qa?E(dnDl=Er-S~7kC%{eGkx{_w?6XnQiY?xiN+(`R z=C7N?RuPYBm$yFfK}bel?3(<3np*X${ctf zsKUeX(S8LZAwZeY8RGhd)vGI?K|RZn==~dzCl#hIvK1J}@RcG7@4xmnpR=BMpmPxf zu78j??6WpfUiuX_YF{iQ>#CASIK6hiH+f4ymg&s(F$+t#sQ8X5gw z3rJd9WEe5^5DmR9fJF@alFJxzbivC!&glNk?Dw^K+6B9w`!hAQv0-v3HNBVZWCNIY zaq;dWk-M_a*o1@M_3$;cFvj>s7FLRlAnO2bRTC6N_9cHm#5YXIB*|Q9o70+?LYHAnR4#HT@OBq?PFyN#+mBGzhf8 z!&D8Y9-=O1wYrixeolKjY1`6FL*HGf0U@vnNIP>i5WM!q^WJXlBvB!PlD6+8f>tzf z1-^@%b1dZjS(Ql!F3exXqodoz?w3Sg<)6?<#;b7TEnBHXdyEYuG5%a^qIC z({SIWe8FmV{8-*u`;>n0Omi%Zc0yvWRX)au02YN_(cmf~cp;g$wu8|!8RPMH0a=ib zy$J_&67o>~s9<$^Yx7moYq?eqP0J2u1UR-#S@orpjyuT*u8V^@Pw5M*uy#AqTCbhp zgxYsBU3-L+>p%6tt}g-V!awkY@i4JF>cb~kHe(ow)04QLbSP=_LbB+Jxrj{!x=k=| z+TPKsa!!ACyREG@nw)IdH)20!DFhkSlk9t4U)t#67HZ%QYC+ z6Z~4`%Y@Mw*{)k%J+Alm-QM0l7glT~QYZP?nyTZujv_DxQ|l|LqG}{Nx7*2TVS_zP zdYUjXTW@d03ce-hS8ndA{LJ>k%fCVm>P|C0akv-I*J9B;qpp4b#Txd<($c!7GNiMC z>1b|U*r3LyE!`3SJV7XHevYpFS-BW3-E9?lD@=Z(!;8_vRBjB>7h@q(1eLYPGp(g; z@!mkT+0G&Qx)_I@`AnRBjRJ0zuF3u65Rbe?k&6Wq8ZtJPf$|~N*;QfW`7fXppg!+G zs_%TIH|^!&bI*H|bOdh)KcVxQ_zOPA4O)CJdu63MgEd(-$=kt{>QdF%)K( zbNlO|#?GL^(Y;Gu(u<`gjiV=p-`-L;0c%1i!JAsFQ#-Z9lfCxHxj)FnBlhu`#*{9G zVHHuWjqudFjM~*mQ6pKSqp7|DDu8Z5^s!=4u$Y!8Yv5Tk({H*2>oh_PCb7($VqI58 z*5#DSpJtu^_bJx{Q|PBZm_0^|qbaI||TG9D&GV;e?#9 zzpm;TvaO6~TgNu0aP)VIEW_ZuloO8LR^k6?eoC`0@i9&!=A$>mMNf|i`?D4Ca;$=D zH2hl8lILCsA&C1eX+@BWLILmrU_WY!O3}3?Yqlnx8)R%Z=;pMaVxA|;e-83y+UuHj zOra#sN-M7*M<4ZZAW>6f$)?ofM`Reb{UF}yif*xf;??p6OUG`7oKOCxHKQ@ySxl;5 z7e-3 ze7qboB#!omCGiv>1UhK%s5%(xFR!DT8_4EH{t(+HKy#Z1njC8nZ746&7!cMttWT<$ zWoemC5$pyNcHma$Q5*4`RCs)pjXuSoUN4D#4ioY^`HTvu2i}`i+nIlPu%k&WHTa>d z$DP|HC-_p)(gP*4Vt_hb?2jOINZQQ!kK^H0DWnm4oF&5B2wax&c1PB z1=jXyBG9v}NdD3q57Y(bW0Z#FT2K+>2|vrfbY%2enZ<9TuJXYUkX}g;>Ia;?PPCiy z6;~nUZOzGgr+kzOr?y#{UL$?AlT!wJ_^>r?iJo$yMwZ3t%5=|#i2lks0AsA3U`^Jt z`~}qS`H89-vE?)val}y|CtMO-N*rABmY1r$^Ukw7f{!%uo@l`mM>ag$xLwtu7In6X z#8Ro)VC%fUGFtW7KdkWtzCX{R2tHo}Jr9%nRu9&$5f0Aaqv;=ODVnORa||~l-=YO! zD9N&G?+mEyu78e4TVmdq4V^`~zQ5QZ7BKZ8_X2XwE$h|nr@fgQM2}|{b$GrT-hD?r zk7Tn`hQR=*GXVM%3mnSFQC}I#QDS_$xyDRzd7){Dss^5TCD{4~B!YQV!W}X!>y8`!yn=?o-JL>$6cc@Aih@aUGi6_JuVF zDDn2(T60UMoQF|Ich-aX5H41l7|*lSV?QF~DKzb)0o0PjjC}@8c-IRa7PpDxKVE`i;K8dxxFuRxbdrQeTqjtEsi8fYG?5V+V2<*CiOW+b^W`CAajFnbyuW!t{ zpH_*S(<>z5=78HpBEE`SZwj-uUhV+3dEb%BOzC5>so@qG3kBo2jhtj1m@lxOW39QL zllIE>j^mwzGrBAl|c(O@TP@r)oAd3*~Y_-?7f@X@j ze+!09Nm8vEW~34`_cBlUUfq=iugx_hw)ZrDZLu@4NL&bxtDTFhc5g*41AG_pYLaQo>RsHdNF&k~1$N>mrF6qhmGNJ<4E`(}8)PIu zYY&Y{Cr6i{xB8*?B}_O>!3;AA|=Ov`knR1;Ol#7FN{Jb zp#m}s@NAk6;gE!izqZqT{;LuZ{p%z7i)-~(_Erc2ZAR5*B}CyyP8t%7>Hy75Jj~M7 zTVs%!-WVtY-zCSVfQ(g0T@3U!zBW#qxOu?6X7NVm(FSpFs!Fa7d>WAP@>&J051T0kxkE%ueq%zUC5f zhV_&DI3Rfw04lL*h?P+ag*DK8y!ou-Ld9I`^7_j+YqBF{vV8qW$aDO;BYG$&f*i^< z;eVO(MuH=_11d58T2z`zl55VAx=;;+eY#U@I#{BNVM+&lz=O;P;$mkeSjwU%A1a;!sv7Lo)9_`{R6F8xv>?+h~vw za9t9@OfK1-bE4mp$-A4bwt~Yk%0L_^H^l`&LW+WxWXm^Owz3RykTr=gA;k#_=)wtX z{$xbuz_d7ZKEOM;R<^@&=%_Vi{^EA?zKjv3xMoACe3>QfiY8fsN$T4QYPxYj{#0AN zOHFgcjOYHFps8#twjhGDIZZcLCt4tHkU@9D0uQmxPEJ5>9R(KOS*Vyxf{GUPZ3WK? zDr$DDCuDsuYb}PQv1V@!nsviaIFzfi1uWKs**A2OReC~}35~H4Lu8F5O2zHai+YK9&Z-IY4oBT&Mz5gy&_?LJ=%P#svmp*J!2T^Yd9KmQR z=PGe_?p?XdLgkw61#oHIwAz4l?(dZ(Yh=l@ol(&C8yeBR^qTiVf#Bsmn;48GbWG&ox$ptlPK2Ocb4`%ZX&jZOh0J@)un<5CG8J_KEH$VwdHI4 z1zkj322ILGu4N9`RxBvWTyl0umF(ouRD-D^KOi8(RuHJo1Ryx`rzMw8PUpM1;DQqj zv78hs_P+0kQtT=BWw z*KCt}%a&(cP{OdA%pTiZfJ=;46(d^AN}oe4C?y0oTjVE4hf9pvJkG65Eba$D6$jvy z(YgRxY!E6E6#EIavD7OO1!Uw24%SfV-qiO2bf}S#jQpcdZk1=f_QTgwylh zgXnK6#2a{~{~+lHZ9pmO@7iPlyqIP(A5|-g-$5^Xivtc}*iSQ$)mCun3f}w4!L6<) zftJQ_pp-O}MEQoVD#Img;GH-p?43v+rX>LvU~9_&3$5Fb!l3}K?RnKtLAe9v+9SnD zkj&#N%%_j8nAwZOJn2UGXYTII)v8Hgj>B{FIIzf{5j#qaVay+kqNBsJ>2}HwE}3B! zoPU)*8{IA`3T6tju-UlTvil1N)OlevpJ$;>qEDJygV3%JTKE1IMJm-V3PwXSBk|RA zUg@_FrHG`GQpA-3nBR$Lrl`WJtw^FJjgm0LGfu=*!I;hG>xYpttAK2XP>HQ4zGJA< z5{DP=WPxM=ax@>t;UsC~XMRG=n6DF$qNE*Q(gZ(qJ|!NQIS?9Nx~R`eV6rx$@+7m! z)1(uxkhCBo+R!zJY|}+qtL->ejrUeo6u`j=UZ|D=JDocj;T4IKj9}3?MO}sW%Zh@j zL)KBPUplCswuW@gn-2*CjZyF034Vv`+ZYaJAT!= zbk@WjgEYDoYz z!K(1G5X66aFq3*}2*TAyAn?LCiUzIenpo5s&erR!yF)0}`A^fq-}9xb%h3+jV2k({ zD-f9WNcn04i3G=s>K_Qpp`-Na!(YHO6k^jYBiq7PZOw|%X}anj?KCDhty0Hp8U?6n z_ekRHXDxxLg~7%om9s*q?e-dqfNk*>Bt4$Qfg!=WgbYxD!UT#* zv3TDhZ8CUMrpfOn(OAXo5vE|3mm@VRKu6-P%>8$ly}BF?6Mr|5;P8P`TT@GC4DAHw zM8P=>n1ozED+=J0PLMKQ@88FlK1}0lHJ2-c1B0!<(k{e<$<^U#!GLUb9H2zw*>Xi) z;(0|Sj#d?n_y-Ja623*x7F+E_2mx-Kd?aj0(7P-sTmp)GuY?xF#nJdTxuDiqxpwae zV#45m<4*japD+!w$seyqzRmVRZH4e;1xt){`F?KRbCM=5Snm_LW(^S3W*jA^6eGs-jOOF`w27qnNSg|oof+K?7oZu zXcb1EBBzy^>;Dh--a06*s9p2z00Dvqf_rdx2(H1>!QB!PAh^2|2=0x$JB>r*?(WvO zyF>6yXU@4Z_nbL%@7%9y?#xtue{@l`>9u#)T5G>+@AW?K@5xE;HH=S{nXxWsvEK4S zRn0Hb6?C@Rl>FJuvS47~a@K49b=32A4n*z3d$^uF_gXUsgO6m}P*`!g-a;poRq*X1 z42&8*QEob6#rL0ELAC55!E|2Zl%{ljMW3f zYghSy^?iijL;e3%hv`d~ll8AU%&a&2MMD1~+N6hbXT-=;S*V1ptZkqFrlL;Ek|3X7t}IZ>h*5NtFT2#p2uq#eziLr;R7>Lm|Gf@XgK5~C(E?+hcj=>5@T}*7 z*s0Rr8TugdU(7s2lewyec2&G&2h_>ect=9^1R2MTY?IRa{e#B0KPu}edx1dw0&_% zYTVk*B1wy?9D<*$k?XRf(Rbu0DR;JCBJW4&BD-~BM`Q$5wr^Bl=8JxpEgpYsahk4R z=5E$5pGZZ8B8lkAVlEptM7n!mGleJ61!{(>F;H@7sPH2=;YNINw41O^nSYoSJsO#N zSL&Y!Yp+)!~U@%TAUKwcTcZ-y6k0E*3Pp`HT*#mNLPfrufF{SC9qp&?z&n2 zYnP_R!^z6%uvF1dn4h=H`sp~b*nxJgv?OMvr#$+0%5%m~JKjWat#iH7xOaG|6Uev1 zNws#{04;o5Q~i8Pc}53a^5dM9_4irsOVEm(@X&~n8$^`YRk0>;;A}NFb<>F`DWc6!y@23kBm04H|4Y%MBmT=bgQt;=Tk-47}$H9EYkDo z2%3f3HvZ`EO{qD+!*{RfDYfF=yu=jJ6$uC7s`Sc?2s}^g2mP$muG59q!wQI&NWJNE zUu8!r;JxU+>$WC!#|qstCi(+-qHi|*?l^wjemwUmn0hDk660nNMhoaqG@RILU-^?dFx06mtmA`y%&yUdqGq zdh%}`IE{Y)1NhW5S?&le<(ra`%hMR}+&X<`d~CJ3T&0exI6F{eGPK8mj*zWD8XkTYuGTF5w{{ zV*70fa%Zr%+6h*&Ajzs+c>CjKnKX z-3xfk^=Yu$3rz$meDP0MO;UXV_E$YmV5Fey8BuTAKH%lvA-;q9R_MBf!?jI2Un}>n z7|Yq#*QZNBW<&vSyIV9gkD4zr7b}k5aWRrl-GI)f}*HE57emQd#aE6|kmmWupRVyHGh?`wmA4?n|kE(TfN~vZZqw z&Jcbs1(&mRkzWejL0{S_{s1N=nm+~p&rzKG_u!EKp%Ml2E~NeCoyExtZ$IRq%BS37 z`R^KFdJ5rPYOzRK^h}mLmRS*vqB^fIq$(!(e*93-{&nKACe+&1qC9es{QsM@w!+ZI zsbGa=G;I{8gd=8v;s${X`Ie{LXtJ)ub0S3{%O~O$?^LEOfA}+}Nc@dDKJ#)x1s?cd zO;MDsS#po!>@`6%_t_EjE9Gp&-feH!moHE#)J#VrIfdAWK0jnbT23(Cm((3)kIj0! zy}h9&mCWdpJ0dcfj;HkhQP2`p5Wi=^nvr?_rQNo4^Z<3Oz2XVI?P~f3+vd{A@_BU9 z@aSsqK{H>I;rzFZ7hSjP73<<@>X?E1&q^Aj)gw#~8yL1hzzzHZsOvAa_#j_dnCRv?RVaL$@#It< z7|PmfIOf=_NO%XcU)R?qMH#wWdQ{7}<)?1LN-vj2WcQ$dIz)$C>u(|*t6)Dr&E%M| z`Eu-E^!oBQfcKjJV6K%H#%1QS0cal{!0H0`bf?kdAc@&M9*|ttWl!*v1la7sYSVSC zcb>(HveU`RJX%&7Poiku*DC~feiBB>4K;hgYL}<%o7cQEazZUN{YblhgjKNqhH3}B zU*}i|GdG<{wPA7HA&WZtX`XzE$*v`kKt2m35SwX!x}QC?VK|^EbJ5!FcSDZazY%O4 zx>E>sbRwAXJ=GNyCD*xTO1>c_@8WmVOf{7QX&! z(I|vZN6tF!AGK>nb>0TX38VJG^kgjm#aY>~jWzK+bi+u$i%KH%lZB_KuHxOQg$CT1 zMRQWR1c&JYLZ5nbWIS|IiuSJoGvNQP&wsPGpvi#7*m@J+mTSzCKl5GISih{GOj-T| zzEeYrymki7rXrlV4s!)dt&NNEjI2Mi|8w@UMJ#Lw6YRzH--x2VN(ODd=@Y8U_2G7P zx|AK#%x7{V7nJ%RQI%b%TA&Jw-rdytVLt2-eBIGt68hqyQl`his`hZh-EDMU$Z8&y zdIi#4PJcZX>Xcl!>dWb}TuF z>75jnW6E8iZ$I?rjC+^~ z_<&5If;$Y&I60|jJeFT14Vib)J2XT4fJvw;yI~xR-a@*Z(RNc(Azb3J;g z_P!U-)x4M@YiT9I3lnVBM-P*%6v_Rwc#;CVA4 zNAk%eK3KV#BvX8pCbHPDn2DIFsBrPOAFu2~=wBESx`!N>3^MHQ9ptETiFBAMXq`EB zoKKsToZHh)Q5G%;O}1HU%Dx2tQQ^S?&A%;{IDo{3o<+U4&e;q4m} zseNT0+NJNTx@l-+__Y#bpxvC@707hm**~KZzgzsxK(@I#6dQ+^w9-}q=~6TvcHWv( z9$Zi#aVc@BDhVhjg!;SsPs_I)Px?WvEMt%Y?IFX)Ha|M_%2E+zKBRlB`-#^NjA`!m znLHQOk(c<5@JarDW)PyWR10SolQuv8F%fB77>^3oxZm^Sn9T zZcOk93?~&>wJaKlNY<+XIP8lu4mQl424*_uD!Wl+Xl?kN?s6fH4)jzmWu1$iz~+*j zl$`)wFzcD8xHVmKZ4$6;K?W@%9+@yaY2O8xKqNE5roXhGtgc9BWw{f_j#--G7$?0W zcD@33S)ToJpyK>TZ~Undmnu0o>gc}1DMWk14$JU8J|4p!qPm@g#yn`ZO`~yqXl5+} zc6y!_)nUig^50yN4pUgH@(eb^X@2u8n#8Vb&|;2n&Ucm2_7D6A_j9$sT~d4k%2}6y z{%~J&ozWC^D_z3GGW*6uAQVgT@`H}p;a8tqf4L}8m0^)wQF#gW zDYvZ2GR_kR5v!BV8yiP8X@N%CibB{!0q3L$3^9KPQZp1VT9XD;o07qm(NxXbbmB=*3%oRlaO1G;5VTefH#F;bfQ3%j#B&McIVb?STGz?* z4-Zq&YlrtFSiXv#E)cHL5QU61&2HOrkE!d>=Sb0+DglSY*PnXm3HQjZwOF0FHIbY8 z@=2fO72TX*2|En%Ee}Niox|(32_uJ7;n$Ytnkivx+|DkUKOzM&>)uWvGTXcIA56h~ zwj)D#%Xz%yueEiAg$C9PF{bmo7!dl?q3)3m_bT9vnvx1(^!^}i0=Jm+%@lwphg)U$%qrm$Quhox73^CJmcV6*6I1gXrd zS`6n!iZa=Gpp_W8+uZx;O;?t?#A#qO7k$yzKbSlJbOh6Z_eCy@tkLUzlMx z3I7NEd<1y3G~~1xm}vj<)+1?Z~6QIYY>2S zS)q4RK32qZ(4;o0-HF34XS>F%B;~hSCJ~vj7y6x_g-o!~hSn{6c2~;@G1mG$Y72mK z*+0W4D0B(*TS0_khGN#JNQjp$t1+-U!n^pK9)p_uxHCVe&SwyQ0EW z`46vXFNuCcOAa9l-kt(3`iHn+1_vY&;N2*T^@F@ndG4?Md$nTs##g(%%kcBzhUZ|# zw`QdtZUuV!l?iw$d>Yt%#MOE)d|wNg)L0|jhb=3i@_SOd0a$*7Fw`Ewq4`s^6n(fH zQDuaGfy@e3HjW-MEE64KXIyk}Kw{stGJv()dO7qwCQG*q(*TP>@NDm_w@1;GrSs#d z9%Ys|d+huN2kG)Hm zpJpu8&=p!<2HvwyPM|S-2(=`VPPH7FFuRT6V$fhfDWA zJUi$}eO`7NtGgiGvHZQZR87A0QnG4CXn6D3-n^&PZ%ALsc4+AKQ8 z;g7(LtU1TKtPip55nE^robS@kNZlg^=QVNOcDE0Oyc_v`R%h23rQ&tid?4UZzc+oN z-TIl)Cm;V+;zL`iu_bj=Q?Lxhy{2He{{lwcfNsBwnQ-0cP5S!za|@WJh53UJT}0U- z|B{HM3oaCuSSo>Es+LkV(a7?xG5&-*N)_z&habEGHHX=X?6ibA8R9P6>jk&@M4J?m z{qmEk!_wC^&tRx&oF+AnB%sz!&Lw9+BE}aU6X!e8ozNAxY99#XYw25k#6cfDv|9^} z1|Y(`bHqr&Z%yoFx*s@3h(2-wAvLVj9B>~_`t0Ri>KuK$5#WUP8??4G#ul{qhhm9K-RdOi z+3-4t8aKQ+IYsKcA5K}=dLWQ+fZ8-dI1=%IJ<`@v(WtSg31@y{0yG&P$iH+6t&&Myu1`_wt%Ea-0=elvD91kF~s(E!xNqkGb+4k>gU!$ zhpVH%W&K92y5&UhgXoIK^&0q^iy!GdhfG4rfpFYRxC-5DLTY77imjMI-TtL|PlDiq=LS3DK%^}8-5KYJD&i`f(nm z8BfKxk}Ua2aqsiX@bn+RULW-3sp7BaQWPgmMi7FI*Ro)KOXP!WX8Fb%|k% zeBb(@sccc8wI~J4Jx5D`yly@MKFrVM)z?94!iMS~p~zS1F%-&~dN3OqzBSB#``^m) z%mR6(=*KR+F{XxAbZ74vkD6vszeXh?8 z@VSEKJQ=r&gUc02GRahuGN3;phv5yyL#%)1H{B_-dd_S)=5=E}K90!cnKLw%7VC>r zZmY&OYFlXl!Au|fwM4J7p=g|zvT)Be;m16Q#=oqE`J-8opor= zCY64zH5pP1{LvmG)f>MBb+bcDG^-~`%NXg8SC@FsmgvrU=ni8<(QWK zC%|FMsMW0&e0n}CN_YGLxLw?7nyCBKSbq8#IJR6SdiXQgGgE;NcD~dLlpY9&F3|3E zV2YE^c5^Ba1<^s!`O+sTt4Qtoh&&f zBA*RynHN-l_E(TxDL?0l)VVPWlxcDSlYU|K4PgQJRN2Qyj6hx%g|(G6RTwNR2EL*! zJJR@~daC6tET`-2dXglSpf@sl{{9(pu%`fx#3;lPT(G6FuM9N{*U(2!LC!RMtN>=X zSJRn#v#>I8@UN5_5ipJi6xd^!04FipLE+t^X<)ShE4MRY@890CNvyT%FAz|j#N$?z z`YQ_~0KlTn2+#sYfZJuwR7<}$7pJNoDTUXw^}#=L9G7N|jA&Bys5SHDS6!onp^3ZF zijKI*c=K)_vCXtFqZ~z`kvfRmNg6FH+*f>n>aRN%y3aSa9Singr}XJjroQ*amjqv9meLsed><%9h{Y&NZGir^CR;8ICXR-;i?9)DD*Ntm2E5Q zAql^W&TQyol$Us^YA|vNi>$zgbuwC)z($uJ{LKBuJUs8yjGu4(%pZdB2ASV|Ojx8F z3fa}5iE9^=UiX1ttpQ&iMq3~<#n*l=b zNT#v2<8J$v^Sy|!oA#KCTZZ+r%R$;j=(U_9Si}j+646{S-2D;xUL5rv&hDl-q81U8 zqLVy!dU%2NMNN;{WUbS|rJ#GeA;GEB0e83q+)s^*aC4$J1YKU!1$v-VrmTwzQWmL!!G={L5P1lDJ5B{FM@~sAv}K2Bhk$ zT=g;Oc5=StNI@|E(d_18WCSW>FD(3gQ|=d|t_(*RpiTfl12CAO{g04uiQj*F7YA*C zkLZUNd70h&z(SppHYM(2_KKBg^MGv^l@{|MU-%CIVD}}0+KgL~B$$*0*Z3Q(`V`$B zWCrs>kD$iG$D+7@$AVj_PKvmVcK1}A%~>AXChVlwZDVGCH<)m0Z%sv2>755ZvF<;Y zJr6!*bLz#Lf6c{9#Gk>#imQd)&hTFBdse+ed%N*yo!J+yn$Ycvy<${Q98qw$Q`qD>W1$14W{T`?G8I$Q zM|KaTT3E8w`qu!W6%_dPLeH{;#o<1d9T#PbJ2NZJWYmqw=N^90#Dmy%zAm1cVM%Z1 zy?EcTl5otKoALrJx5020hBvw5-cV8!F-g-n;_H#fl^x`2&I({h80*0fWa#-aHl6$Lu=&O%_5FbdoC zOl29t_nMKZ|NX^yNOnu?*P01d+NqoR$hjfHv&netY9-v$66dt=S21a! zhcE)3K$v)uY04;gM5iD_MYou)Q9C?}cW=uEg>M~xH88-TF{g0_Nxy04Np4eEz%k(4 zv`Hx6CkC|6Si6R;QVw4TE?~*u zLW>VB(S;9)*$$Rr)L|NmNEnnKuU8 zB)?&s*crJ}uB}mFJSJ1jtT$gnG?uJ-x5-@Vy$Gop^FyPOoE{6BG2zW?%pnk~KY%y2 z0#C})@RDR{EKl`xfy)BdR5;xDf}u%*+KL)Lz}5aE4odb51H@I-oHH(HBOi#Fod|0W65e6FLGVN z5qS3aeA4*lFtcAl6WgCs9#npaA8SfRX(0?8jvSi11n{n``-ZxZFd2}brR~Ab=iPY~ zAA(Hnbq^oB>mief8D*}Qq*&_Qyi>eJ;iswYCl)q(p&mTaU)QUf3z7Fr3!@OxZSBFktv4i=8b*UlvjRD%^ zsyXj>a!w)N5?RB>i@2u@>}kayM95%22-h* z^XcwR&Wy2Cr>Nk$i^(qv#|r%l(Z?Vzd52&rHYL}hi#RC*Z z{(t#wNz3~c1*RF~^=;>8!G_KH8XR2rJu>vHdq%+K9ed=?jy<7=2b1n}S_^cSp2V+< z?g^PDPPbp*J0Y!6;cB8^8SQ}tf8$E_e#ICdVq3Uj!}{XWGq*On=6-q4v3(lt;}~`3 zJnBru_RC#bioOhD|Sp>un7_e}TRbDLik)Fk#KaQe>qV)h=>c#IHPY!ei^b5nE zKKPV_BLj@xth`DTJxD-bk;mq#;0c7|yqyq#+H9?0>}e*sx+o?ceyDI3pMksg@FjL9 zxrXuCR^O${ov$Wu3c_+*r-;c;G`+{a8S~SJkiIv&p9>@Lbls_7z5{NKx@gPc=;_h4 z%-5@=G5FbTJ3Q~tu!^or9xc1VjcdwF_RI^cCRygUv|>=Lv=TaR?bvMMS}0E2yz6^m zZL~1MLoKyX^OIn&#+5;UKbFn+>e!(92W5ftDgU^L#uBSjiY`>9E8UC*e4U%?mMEAP zvo?;pOS%BRGv*L_O5GCMS$RNIi>HK+cSEJGycvF9%*0soS5G_U>563ktnxTe=3s32fbNe4<$x0 zFiU*9^z`W>{dlyV*n&wqrYenI+VBBovxT+kdA=vC0!v0n3Fu^ldotQO*!3KtyQXRVn66qN8rH|}@Pd(8kq+@k(_}ZJuKgP?k)oBN)t-VjV>Q;SPr;%)YrAXB zy;~DJF3rD zuq=E_=s{&3cLUYSLg@mpcvINnvw%@`Cwdy*D1|*P=hz}?*azIDnQFg(Aol+w>&1U= z^B<}T|H-%dC*SJd@vS&|I7xR!5~KKPKTS zxpt+^n{it(V@r>yYkvX>!ZAg?9UpEo^2(Q-=43H`Hvx^`U@#5tt+_ zG0{Qa+>hWiFAA?pVweE47Be+=Mx)9j_?qqmQQVvhI_>v_#~}&iZ3bv364DyN{0A5F zM2!#iKpd5()lcv+xme6&hnwEhB7E@;_`sxA5oMXVvX`K{ALqMIE%q@V;8KqIx&YC; zxlCWTMjjzCa-uKFfwU!sR{rUjb90#pcE>a6Y12a@7(Tu6@i>%iPnId(rmaTJDcC?Csk>bL6T z20BR|Cn%3$wf1#c9HYj?RC)xPNh`>MNT^pb47?kW~zeUPDm5Q+F=&}gs)?Y|P zEC-hvY8wcqT}qs?9reju=pB8>#D06cr2q*U&QRZ>N)Bdf-beZZ4K$AmIyHHO6-xJI zlD20uTxJN>3(bjoxE{^e!H60+9#F8TeCUN5ZpdVLBFu?Zx__Ggi820Ub~nbVcsa!L z(Jf9m6>qsqW}Skx&sJuxmWNdLb4}goN{ z$Zb)#Lx)d59(>xXG^bu7TUA6IL_4&kk_bb<~i|x41ae}xQVE<0n=*Znc8LjXAV5sdgSP*5j)U`7<|mV#;n0njtz4@OkXCRTRr$lc7fkzsOn8A z7E;k)e{z)!wI85-N3aKS25c4TG&4^rt{1JleK9Myj%cww0j;%DI2`9*mtZL!3Z%~! zoY%c%g;`ara~#+t3>ZjO6p}u?;DR^26dqL+c~8xB8P^zUIEvm^ML)mUDx9CH;(-QR z)w!iAw^rT9{J%bZo@x?BO-76iq0)KYG>lx>W{l17HXO5e|DD%K z?5OSmTwu%L6npfm(ojJ*`Zn{{4Y5pxaKK`|DdcKu&SQ&cBve8>PMx@eYGi=gBm6}T zGC%L!)K^N9IL~_yib9dGp5o4ICPePR{UUxcmwWNL7UIpMHT8y0y-H)LDhP09?dJGW zmq`;om-t{5IHmQfEdWTM?r`Ne5Z@lJOebEk^3~^u7Eg8pVTPJn^oOw`A@&vhIZT_?sJ2OjHX!3Q zEhi;xtE%%%_D6k45z9?5;?{UW7^ZSU zDDbD~6GA-)bdJJ5AINtYYm zPV@W1N^_f+;9OzIdZb6QL8~)$ zL>mKYNX~ovZ^&JK9x^`7t3;tyRkwKrnQ#anG2C-5m?$ApIKxAys%js-gqcr`W(cja zDDku?ZPI5G1v#;Rhy&{`dd}cUt0H~VqsJKd`_$}uxg|_SAp<5(_}Ddqevz3#hkn&Y zys85S3lKaL!IW{W?W&H!>9~H6-C8@(gsDrSitf0bS5evETdNM;qz=F~uPjp5fmSqB z?+|4kEBguzf!{T+DT@a2uNTPNfZ5Q*iw5)ZXKF-Kc^WQv5)O6|GVGPsF;>vg(3;zE z26#-3+`z`ca`go7n;hYv8!^UYAo~_FG8YKd=Cs6NN5sK&4m)lt39f@LcJ% z?QPe2_E}2bM8BAmsdhFky7H&ml&<)VrH&{0(>63V|`pD~ns6b!3a~ec}$u_GXp$3Rrv1 z{0ivxV;Da+;B9jta|?q0^1FVA*aID%gX)xBz68P2(t9d0HN2}P2EEK=m=Nh`u-qHk z{hQs~-TxkfAN4AD97Run@Ri;ZI1SVaA(LsP=5=h!?<=<22n*5SPT23-S)#pc$*xWB zroQCcx8Mb?e7{^JW-tm;c>IhUlYmYgxyR2q)SU&0jpQ1YbHR;Y`&AJUzp|}N`Duz8 z#CzGvFTDmrQb4*X`K_$Gzhtv?4Sf^@1~YfCHayurLc`$SR^wl%Ll0QXd1RM3EDAe0<6aNz9WSkP+$+em+QZ8xzF^CQy`|9{yrBm^ksLy2;H5nePpZry0AEIWn*EB zaK_9+6d&^mkGRR#c^9%d_YKsyc`n^YzsFwCMLa6#7tz{i2=kn!`VC=by5b%Tkb_GOoZfbJW46*?*h$V- zk^8-w7dkYDi;7#zQDn7FZ2(y4^KLkU`7PmEa}T5TuQ?c63HrEe#YY`7RGJA`6&uK!hW$jN|hlCizS5aFq))30&!L7qs?64X9$S=-; zNxvZ(2~3@slMRsRuIp@Gm>@|cj7o${g9A_{B3Lzw&sC*1`1PG%$$je*=YbxMDa@30 z-IVp4T#ii(h~B{CntQxb`yQ+NR?D;Ks)`qlRU8Q(g7D%5gRl54^-T>4C)7`L6c$Cm z?Oo=Dc8#rWl)ta@<4>|O!)7Oll91AZbq>(gFhvf;qix*x8$O}`^Gw`dunU$~*0P($ z9?rs7l9MsJ>ru^@!RgW8Q297=^D)mAe`hZTP5LZEg6~{zebiUZCu_CV{RLi(#KI!u zikiBDT3HzOUEHXdU~Sm>Who;Fv8mO+179n>qATW6+iy}ON#`8MRE7Hk2>6oY`yNtL zSBs#lD~W8K18XysmT=zB9ZPLqJsfe0#1fedgX_R$SumN%O|C~II3%kTy&nVY&HIWn zW`qJN?7o>ePu7j*y(4I!O{PMJ9Au=w7Vr?X$a8FfgsR)ZBZ+nT@)M5h5y8MP!AsDZ zo?YZ&$)1lz_kwl@Dw9$Gjppg&vssPPIl`{Aq8NCC7ajph8KS<>l2G=NTmYsR!;I2v zCMzoW8n4@1-ivnqBZ8Ito6=fkvA5zTR+dKWy1j()Vf-KA?S$oS3TePCc0zIp79_tC zm2%M(^&;(@L74Xl#yn%va?2s#0wa@@bEk|IImvMrh~5~ zm`Ys>!+B4t>Az)uF{7S7&bPnR(QVEsoAmREhYb`(;LzO4aJLoOXX!VxU1{DpXEow` zAy4^NaF*ziVQE`eu#2JO%2(s}Jsw9tm;C_@Tlu?uc6zW=b;I(?Jt5P%hw|F=3p%8E zJHakV9)rJx-k;EBCm(Pzw!BB4E(i0$TcnaRG~JeR{1yn~*tlaUdxg#)`xxO}gjrf$ z#)~P5_!YwFMD=xnQ*4aLU9@sH)ERlPGc&N>_z%Sxs->LuGrxIs{)OQEcfTxNt9Ss$ zbE4D!dB~w~rTVy*uaV=+d|&*0HWkGq+WMdlqhyVzWUfBb|MQ>!?1caKnZN*MCq*iGqkp-bV9WltxyWK3@}W>Vit-`0$JP~6A>;3Dp-q4Qi`LSwp$3vICcW3H+!IF~PVePz}Y->{{ zgx21$G4$1$8E|A*Q}EZ#s+mQ;`{pW`&LD z_fPXrOp`7An=67nb}{e-s{Xu`{lY~7j5ZfKIUFIyF>HG?!W3| zPMf~2<``n5ZTV+(*1UOar*}^fSr@l zQzE65MThcfTYmsXWux!5kb>AO4P#Xs9$znq_pOtmya-k+O?7=gP{R&?Ob>;($KiOQyyB z@@x<)s14Jc2z%eB;AkKPda7G(vLMP!aq zYO^P756@`e2YQOFQoJmzSigT6 zpV_S>@PhWZ-Z$B$U6($5sW1fV%GrJUkd9;D!VD#}J+$qP7Myr}$OJdvQ_5Sn$@GRL zR3?|1*+_HQ7?V87wWCkKX>X~@>V-~cRkz>HYQqO-9KqjS4lhYt%iWI{LA3^VY&W!X z!c(E?rl$%WUuXKMZlztRhP~7woPjP@cjiBQnEsC*u>a9xJoENg>gGGDf5TP*MGma= z9A@4OFE6Q6kz78N*Q>Up8o<6h-#2#*b>iokIm;64ht2YkmcAk|&RUR30=uMwGW4EHj&O%@`QOvLfmU&JHj47JvHaLjBY~pYP@6 zHuMy|I`6!;v-<}ya_`O_(O6hN{BYbp0A~GZ!xG=ymsry6Z52C`KohcMn~n;A4bE1+ zvG%IsHy7O5+CctXtD&xDObF^3mTC9rroh7&&c8O-B)RTk{0;{?@_cDB`}7S}eSznteaMPwSOs#|bYRN$usX9n+XM_A=MPp>t1q)j%ZDV~77AK-PS&X0PEsBSG?XHAuh26&7=UX(#m-=s&raY}{?lNxYV5JVn{RK1&vb)56Z$2CC#mv_^eB6(5 ze%PFU1b)JDefKGRNsM;ZDrqSvmTed%8M%Y{X@TUad$kp*^PwkEz`MrGaKpokQJzwu{Mf3f>d2?pPevs}b(gdSzd&|h z{<~YJFBNR+uxx4vU0UH1RJ1&(?Y8wkkC(=9aS}dg{b}tM6qbAOrF0W4C_i5ilk1AU zsbz+jvq8nUKs-Bud8#1oj$z(cV_b1mB?gJTOB=L&F>Wc&>WF&hUdrqnmBpjjXHl$w zH`HmfcRp5J!YqwhZ5jXVCs!WSKEmz_J5%a6vGHkL+a?C$Z1 z2D)T%J?@ZSYrWqzgdL%JIt1{&_J-`s)&uv(QSnHG`yQJ3KbE2|=EGjPH<;w@yywXd z=o%xb2rv8L?bCLf*${xmdS<-SJY!+J(GzToi0NoWYVM@R?vDLR7UQ&;5@G$TOhoNr zPWtGhGsf6M>pe8Yh;m(NF)9#Z0q_fKD&^?s{{gIbVZKn7Jy9=vVqNu6+SD)qU>8Sr z$$$a2lO9cA_GkM=cZq)hi0FR+eMfnB5|gmn1H>{=ZOn7IeYLFHx0Xw-n1qG_FFr)vc#M8pT9clblNZ@KzOreIhFcgP z4%jxBlWz}M5uq>_;jqyDao!R2$aE6J;KOEyX4J9W-)uW@L;k5atK7fbHLT}%#TN0X z06*JriTaeRdTmY9`>M5Rkr^#a$@BVHFEfXdLw7J3+?HGPIZ&!DIWN3~LS2-dK-dDa zcc+C3wn+CWmlESEe=7+fgc6EUC*4}N`=06J2klN-F^>im24fUVBF1kwwCRRO?12;< zYQ5vfU4!}`)Ymh`Cz%yP*!Coeb#)^qd|d_C3PduK@*w0Ag^{lVBI0{9gC;Q`n|rb@ z(%Yr|;oM1MfF(t$$HhI|)dL+z0qGc%Lfxq4rLHQv2IcTfhcBYpt{z|ROgu0eOAgwh z8hr~AC*~*AP43$uEZvf;G2wgCXGO6KjiAji2in*oDO-u1&9TL|KDC80HwTi~d{O8T zHofyYY@tppiVBayl})Br?}N*dj7{(P_p*38pk}{iy2&sTU$FiFFe+1(BCt)UMjFSS znAg}=s4D2Pw(4B)-4#OepCl$=<^|Jbc}5Dr>J&;*J-liR)meBP&&{+Pcg~>w{koBe?aa1bo5`JXBmQSewGmFi4JQ zjjQzK+1Na*aiZ~v#dae!X-tvYJ(9n?v|~wlh77Ze7kANl zh;DF)+518Q+sXWudg4ACPHsAXS{OExgnm)KQYI|kxeIpXU}=#z-g5oc;$Y@gJWjMM zwtQlw9M8Q#HSWnJ;@ie}fiP<2f?Jjx^|`@po1S>sEA(EJ!)eFGq~NugIT5%m=6nyB zf{9~+C(tnc-ot~QAeeZ!PvNbv0_Fuq{M>=NRek|v>xdvr+{VJ{M`bqQV*Shs)v_Vj zAzHr3LKOYjk)8(@)0P(G4RNd?E@%*B={I8-NK{ivk$(UkE&^67;N>No;5vO{g^oQX zy5BMgPmNMX8SdA(^DvuUVNI2`1Xm|g)ow^C)@O^nq5st0c?L!Cu4#V|5eb515RfP! z11LF5k}NqhfRZGGLXLrxp{c`rp zmLIyRtGlYJ`gyMIuD+k^{#{=`H}cUXG6E|q0@K3(Q+?}S4tDuRjn+U|H>WYQCr)wZ znR-R~+cO==Zve~1Y|{+>`yjD=wu!HRsP@>sw+QQv;Di7=i^rCY+#d5AV+?ST?QwVT zw!Yt3Or=~o!Xs1lacjrh+BJI>a@G_QBPpNFMG9Sub8Lu%>6KQtFcHp-z49m%F;D>=EHL=A6u(b4GaCL;+f^Ogq;&Sg?a4l`R zotwA&Fcyu_ivS!ul`3$taE^ynf&2yymdOtqGj)Gy#@ zKq4H8EF{CdnpauDKOe7EA}KZcxqO1O{4|{tCA^mS{M^85f1}km{wd!h!tNF2^HlQ_ z!-mEfjfU_sl+Pd`o{pi@_k(myqlH0W^REU-a02b*FDip$BmuSsur@nut@(LL>V-iS zFl*zn!=+L|DSd>c-M#jcwo#z^--%4wy8;+%8`k5qh)zZ=>6Ts-vFtdgWkhQr6O(GaREm=n?@TS?{<&6VK2an zMIGZAG*1YjWHeGWq0MoU;zWBfbcU$2Cek{`8%i8gSpVdUhG^Iq6f-o+N12=$k4iq2 z;M{dffgQv2t<-Zme@sAYHEymbOpxbVyl}JsWy8iP^^yne+M!D_QRP-SZt{-qrm0A7 z;R2C4AB;#Putw#MR;9G+nJ~8DmpiKNUFqDG=!2-zs7@MRLTU$V+0tI|b*8cU30b-T zyXa#LYBVT8R2>4z(TPdn>TjeQ6Wq+7etq?#c`AQ;_d7YX1dYC>O3w}mTYMOh4|T;} z^ZiDSK6vcXHdT_`BnPF+Idx!!ZFv0+_{GSCc`G7wPExRV$Us@bKJUb*z*j6TgsWQh&9?U5`RVvjYe|7BSJ-`vXoK`t`3UO?Ps{kg-U z>%RJxtq+rr;)QugbQ>};vZZbf>G*A+D>5nOMh;7`GBPI);RydxE|R%?kq2$i2TD#Q zET7DMcMhR)Xc&5Mcp8`_6Q!?2dL&cp(;`Bh95yp=Uo?u`s_?sQX-f&s>L7D(a)eG^aZYON9@HJbV-!sT~cDp5dE;%{WL2u;M8I{ycbgaO(Pk|AAwtbuv3HNTp|<~A1en{UsbEXtUrX$> zo!Vly?;#o2jIOZjnt{yie2=9qGaD8%F=2@2?*8s9evDEK|Jkv<$CJw2k{b9XS#5&u zJ{*!RCN_d=$YhYhE1*8_wOujba`YUjzO%~nR8yAj4Bhs@kgH^3FUJ`2BhO+4)BQrF zpo@V|0^Gi7t_IsbcT}2OheGTXhC&9YRmO0{E@CEyj0x(mWm`BnMFw}u0E2H{KUW$; z7_u=Xnl_d=CR7cw_gLpF2{W^)$dL!uNhF4(_d6Bt&S3mm1(=#Zjh4SuH6qlj27UFi`4oK39c$V2H0b$)a6HCN`HE=5+U3fWUl^B=Y{ z+>(q7PB9%p4=;&*mvpw`9QlmrvWIP!l%=tqt+ndNSyb=`_9M+cJMQB2iVe|jC>lfz zlD&WO>`H5j*F;VL*NMddw|l3Hf0V}XU>Hr|Ky~s1(%kRLAUjljm~NJ&pQ1Gjwcb1o zZb5$OoDy!Q`;o#yaAzY6pIacPi9bvbQ48?Sd=S;u1d^(eUsP!$F z`6);=7yhecJ;-m!{iN?9tj5taC;*(zo6GoicFh)ZhoO>59?#=9z%6xvhHOI@_Rc5f zL3~)eki9Zt;4XWxfIV($fnhjOJr1LvrOc&KLGdI5b_YMi>DfyP=k^3WwJB4k+_BVO zzoa^e!Td`Q;n<>J)|FCn$|&NG$}I6I#mqJy5=PVuHsA2xrm<}e*}MbkXC^n;$#4+B zB-X!067TSM`#srx)T&a)njuUwBBV${A}e)s&rSo~cAFV#Vu9evoxwX)F){H>qAyUm z(CZW?^!F8LQcHycL1KaB*&&*%zUM~V8K5YVfxc6RlUnN(=7unwYQoFUYtIiUP;u*!C+U1;+}LiDMw3-EZXDXs1tSB3?2_ zC#Z-y`>usbbd_yC-RkVa`&LFku1;WpjW>AKjxiWQxHx0&v~$*Fs`p%IxR!HHsH0cedGOjkV{HiSp!Q)s zj54V>QLWxOSGGIktzUl^o)c&#Phh z%j>j^p@fx{^EDXUq*0FZ)m94G#>!YOg2QlJhSh7J#MZd^$m{6Y0RfZyFtj+k2mRaD za8v>{F0{Er9Vu2Uk3%?=^2A@}anZZy_n5A_s)`8F->kPrndTr8VrLaog&y}#*<&ijmL#c@}cck>}o_2@= zK(%f1s&A0*?Eu!57Xb#9PlHU{Hh zr>}o%cJuSnea}#6nats`bZVyIMR(Bi>)f|XUD+zw$PeE-wXMeq%O3(3Y77s^*a?J^ z;YTM+yRtgR^szTUg%^Rv{=~DQ66sTSy~w+2x-VT0U2GF7Baj)m3y18B68QvDK|v?gOtgoE+DI^ux#2U*=k+j3! zpLeF|;D;jlL!r73*TLM7BAD4zGOkwr0E$NgZNg3@1YpO-%6|h`U^+$&1Z43QeFV?5r(Q{*T3Q6dcJjj* zR@>Qg02?*l)xZl=T2q5`y{|SIH1ScJ1zCh&AO|g(-X6(&{ICf+(FXC`B8#s`R`Vep zW~9Eti*M^@P~W){eMuh4!o_swiMurKimldqz6<2>JwUt^uMNYisknwvBbfyYi-=q7?0?ulLZaWSU zH5csoVP3eWAzGea<%GqEqQ?eBl0J+7;>f5tC!Dz0}^Gs z-IA|*xoCXc2+RRc+6Ukz#sMuaQ**U+@&OTSbq(2g5fPce>3 zrXxC1PR?7;tE|glVg~X&GbS8(`r=LS!BQA|QJ5SZKJ(c>N%{USoeUtocDWLM`=U6& z-!saTZdVe%aqok<8}FZEf0NPX`kzCEzSd?$a#!et0fx`^mRjsT5=+bUci85t?AbZ* z+BsOeJxRO$L-ta?X=7GqK~&Tyr(~w=d!?6ga-(}ZI0&qw>v&531=7*Lw5 z(k&@$v0-?P7z1q$wsCvZ^kyYw^bH3a9V*Hej*&LvD*EoZvobtz)ag4OnPHd4li|c- z4rjN?X})<6+${Uzw2bP^EjeT{ZY>knl(1{x1_LdykYDkmmG(l_LdX=AOBoIpXz2dr ziv*ts0d9+@?)*lk55n)~C0@$rT?c09T;G+5I>RbwVgRz}LqClC+}X64FE^OCX{arm zT}MDIu=&nz;A$-|_?^Ec^P$_0b$o*Wy9mLPM0sVIcMyC)}-@rd{! zsFsj8ta=u#>Dh-+vn_jHX$*QF=wg32Lh#;cm8Nlq)S53xt34KL!EvP4*?nl0YLFpm zNlU?Vm#oxv-FH9HQuRqRq_sJ2Niwwgf|Fkz2g%B$jq*Ghb;AB#vVPXn;N8(IrW&Z3 zBVPnXTs85Be+<)V-_~E-Z**h*?nq95Zf?T&@Tr09ZD)O29RCezU=bEp6)z?P%*sFY znYzDdCU0d3UR0`3WpC8>cg}CGSleHlTu`)r^c#?A4bUN%yK8c1DaM}@e-XzV4~uED za=4^|rE~BKlkb1pOEZ&ysC+UK&v2E8MYA-$$jR!6`w^+xmP0-ASZpQps(iNb@(8=W zd#eJq*}scfSXo|+6Sua3FOdMYk)>Fh3IFovnS()^`G@)$cMKyC`6kx#GIMl*!UT8B z8L-l##R8Vre2^%8yciSUf2;{e=rq6Fm_UEN|nN z@e{2jK$pV|qi8fr49yg-R|Ht0Hgr{s2TM)OYr8(a|B@yInujxB^9p8XYmKM8Huubz zfS<_@+XW6@sX)-2c(&&OEW7oC|GY{6S}4CJf&~x=J-j{4_J;=g(7`U%EUl6J;)+jewk|_C<=?$};i+ojeNIJP3Lpku$7}(cZu#m;emh2!S z5Eh}eE`JqK8XCKxEUvz4vT!R#G5r&89jFdRe_m$*EdG&6C zqca0T{V-n9SoZLq+aA+c!p_Yqmj7GDU3ZE(xZYS=UXu9$F#U7#&mjCmCCJOtaZ(xm zyM!WBr^aumsCIt$s@N#{o2};myNdqaVf1JJZ*HqUWASG!{%GKj2L5Q^j|To|;Ex9W zXyA_q{%GKj2L8nwXgaCCzu9q{A9@TQP1^}ydh|qS=VnT7gz3jJ60B9U&aHZkAz+P3A+6^058-sxGCtS8bco3v)QxIcJ*5NlYdD5%i(Wf0-YwI z==E`W(-iB%g+Whe*2dVFeC?wm3c+Iw+Uxh{jhhykW-$ZH7i6xX+gk{1n4?u)_kZtI z`8o@YJ?7<5hrKILYZ}DsU=aG&xDflS1RO}5KV5Eyc!#wk5s*fH?K#-HDY`&t3I00# zg;>oCM2E4x?{Af;QI~ml0?f@`{wb2-OX}uAdd18_e178Lxgnt=8dV3$$_XWQ6csrt z|H`w+_Yl3{cBHME=cSsXlcX@&+YEY(M_YsW6X~`sX zni3InQ@DK%;Eugm(pkNfOf>#=>Wwd^bNRwZRhD6YKdNoJ#tFV%If4-eDaVg-3la#kusI&i4B!KmDCz$1|>Oz-LPr9=Q=^FJ>N{QUyKzhWN< z1nuwUqVHO(Z;PnxOQZ!_2n7_WXjD=VM@fpauFLUL@DuQj|VweiJ*tnY3XIjwJ&sbZ)= u&)ahK51^O|q3tX6m%lc6r|WsYD(0yI8E|K#sb>C3Lm=ha9;=l>1-D&PnJ literal 0 HcmV?d00001 diff --git a/ArkUISample/DialogProject/screenshots/device/image3.png b/ArkUISample/DialogProject/screenshots/device/image3.png new file mode 100644 index 0000000000000000000000000000000000000000..7ae66b6f447d682fe83ec96085a99fb2a23d0b90 GIT binary patch literal 27139 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 literal 0 HcmV?d00001 diff --git a/ArkUISample/EventProject/README_zh.md b/ArkUISample/EventProject/README_zh.md new file mode 100644 index 000000000..48c486c82 --- /dev/null +++ b/ArkUISample/EventProject/README_zh.md @@ -0,0 +1,111 @@ +# ArkUI使用支持交互事件指南文档示例 + +### 介绍 + +本示例通过使用[ArkUI指南文档](https://gitee.com/openharmony/docs/tree/master/zh-cn/application-dev/ui)中各场景的开发示例,展示在工程中,帮助开发者更好地理解ArkUI提供的组件及组件属性并合理使用。该工程中展示的代码详细描述可查如下链接: + +1. [触屏事件](https://gitee.com/openharmony/docs/blob/OpenHarmony-5.0.1-Release/zh-cn/application-dev/ui/arkts-common-events-touch-screen-event.md) +2. [键鼠事件](https://gitee.com/openharmony/docs/blob/OpenHarmony-5.0.1-Release/zh-cn/application-dev/ui/arkts-common-events-device-input-event.md) +3. [焦点事件](https://gitee.com/openharmony/docs/blob/OpenHarmony-5.0.1-Release/zh-cn/application-dev/ui/arkts-common-events-focus-event.md) +4. [拖拽事件](https://gitee.com/openharmony/docs/blob/OpenHarmony-5.0.1-Release/zh-cn/application-dev/ui/arkts-common-events-drag-event.md) +5. [单一手势](https://gitee.com/openharmony/docs/blob/OpenHarmony-5.0.1-Release/zh-cn/application-dev/ui/arkts-gesture-events-single-gesture.md) +6. [组合手势](https://gitee.com/openharmony/docs/blob/OpenHarmony-5.0.1-Release/zh-cn/application-dev/ui/arkts-gesture-events-combined-gestures.md) +7. [手势拦截](https://gitee.com/openharmony/docs/blob/OpenHarmony-5.0.1-Release/zh-cn/application-dev/ui/arkts-gesture-events-gesture-judge.md) +### 效果预览 + +| 首页 | 交互类组件目录 | 单一手势示例 | +|------------------------------------|------------------------------------|------------------------------------| +| ![](screenshots/device/image1.png) | ![](screenshots/device/image2.png) | ![](screenshots/device/image3.png) | + +### 使用说明 + +1. 在主界面,可以点击对应卡片,选择需要参考的组件示例。 + +2. 在组件目录选择详细的示例参考。 + +3. 进入示例界面,查看参考示例。 + +4. 通过自动测试框架可进行测试及维护。 + +### 工程目录 +``` +entry/src/main/ets/ +|---entryability +|---pages +| |---device //键鼠事件 +| | |---HoverEffect.ets +| | |---OnHover.ets +| | |---OnKey.ets +| | |---OnKeyPreIme.ets +| | |---OnMouse.ets +| | |---Index.ets +| |---focus //焦点事件 +| | |---DefaultFocus.ets +| | |---Focusable.ets +| | |---FocusAndClick.ets +| | |---FocusController.ets +| | |---Index.ets +| | |---FocusPriority.ets +| | |---FocusScopePriority.ets +| | |---FocusStyle.ets +| | |---onFocusBlur.ets +| |---drag //拖拽事件 +| | |---DefaultDrag.ets +| | |---Index.ets +| | |---MoreDrag.ets +| |---gesturejudge //手势拦截 +| | |---Index.ets +| | |---GestureJudge.ets +| |---singlegesture //单一手势 +| | |---LongPressGesture.ets +| | |---PanGesture.ets +| | |---Index.ets +| | |---PinchGesture.ets +| | |---RotationGesture.ets +| | |---SwipeGesture.ets +| | |---TapGesture.ets +| |---Touch //触屏事件 +| | |---ClickEvent.ets +| | |---Index.ets +| | |---TouchEvent.ets +| |---groupgesture //组合手势 +| | |---Exclusive.ets +| | |---Index.ets +| | |---Parallel.ets +| | |---Sequence.ets +|---pages +| |---Index.ets // 应用主页面 +entry/src/ohosTest/ +|---ets +| |---index.test.ets // 示例代码测试代码 +``` + +### 相关权限 + +不涉及。 + +### 依赖 + +不涉及。 + +### 约束与限制 + +1. 本示例仅支持标准系统上运行,支持设备:华为手机。 + +2. HarmonyOS系统:HarmonyOS 5.0.2 Release及以上。 + +3. DevEco Studio版本:DevEco Studio 5.0.2 Release及以上。 + +4. HarmonyOS SDK版本:HarmonyOS 5.0.2 Release及以上。 + +### 下载 + +如需单独下载本工程,执行如下命令: + +```` +git init +git config core.sparsecheckout true +echo ArkUISample/EventProject > .git/info/sparse-checkout +git remote add origin https://gitee.com/harmonyos_samples/guide-snippets.git +git pull origin master +```` \ No newline at end of file diff --git a/ArkUISample/EventProject/build-profile.json5 b/ArkUISample/EventProject/build-profile.json5 new file mode 100644 index 000000000..dfff6457a --- /dev/null +++ b/ArkUISample/EventProject/build-profile.json5 @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2025 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. + */ + +{ + "app": { + "signingConfigs": [ + ], + "products": [ + { + "name": "default", + "signingConfig": "default", + "compatibleSdkVersion": "5.0.2(14)", + "targetSdkVersion": "5.0.2(14)", + "runtimeOS": "HarmonyOS", + "buildOption": { + "strictMode": { + "caseSensitiveCheck": true, + "useNormalizedOHMUrl": true + } + } + } + ], + "buildModeSet": [ + { + "name": "debug", + }, + { + "name": "release" + } + ] + }, + "modules": [ + { + "name": "entry", + "srcPath": "./entry", + "targets": [ + { + "name": "default", + "applyToProducts": [ + "default" + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/ArkUISample/EventProject/code-linter.json5 b/ArkUISample/EventProject/code-linter.json5 new file mode 100644 index 000000000..28586467e --- /dev/null +++ b/ArkUISample/EventProject/code-linter.json5 @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2025 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. + */ + +{ + "files": [ + "**/*.ets" + ], + "ignore": [ + "**/src/ohosTest/**/*", + "**/src/test/**/*", + "**/src/mock/**/*", + "**/node_modules/**/*", + "**/oh_modules/**/*", + "**/build/**/*", + "**/.preview/**/*" + ], + "ruleSet": [ + "plugin:@performance/recommended", + "plugin:@typescript-eslint/recommended" + ], + "rules": { + } +} \ No newline at end of file diff --git a/ArkUISample/EventProject/entry/.gitignore b/ArkUISample/EventProject/entry/.gitignore new file mode 100644 index 000000000..e2713a277 --- /dev/null +++ b/ArkUISample/EventProject/entry/.gitignore @@ -0,0 +1,6 @@ +/node_modules +/oh_modules +/.preview +/build +/.cxx +/.test \ No newline at end of file diff --git a/ArkUISample/EventProject/entry/build-profile.json5 b/ArkUISample/EventProject/entry/build-profile.json5 new file mode 100644 index 000000000..e7569e305 --- /dev/null +++ b/ArkUISample/EventProject/entry/build-profile.json5 @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2025 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. + */ + +{ + "apiType": "stageMode", + "buildOption": { + }, + "buildOptionSet": [ + { + "name": "release", + "arkOptions": { + "obfuscation": { + "ruleOptions": { + "enable": false, + "files": [ + "./obfuscation-rules.txt" + ] + } + } + } + }, + ], + "targets": [ + { + "name": "default" + }, + { + "name": "ohosTest", + } + ] +} \ No newline at end of file diff --git a/ArkUISample/EventProject/entry/hvigorfile.ts b/ArkUISample/EventProject/entry/hvigorfile.ts new file mode 100644 index 000000000..c6edcd904 --- /dev/null +++ b/ArkUISample/EventProject/entry/hvigorfile.ts @@ -0,0 +1,6 @@ +import { hapTasks } from '@ohos/hvigor-ohos-plugin'; + +export default { + system: hapTasks, /* Built-in plugin of Hvigor. It cannot be modified. */ + plugins:[] /* Custom plugin to extend the functionality of Hvigor. */ +} diff --git a/ArkUISample/EventProject/entry/obfuscation-rules.txt b/ArkUISample/EventProject/entry/obfuscation-rules.txt new file mode 100644 index 000000000..272efb6ca --- /dev/null +++ b/ArkUISample/EventProject/entry/obfuscation-rules.txt @@ -0,0 +1,23 @@ +# Define project specific obfuscation rules here. +# You can include the obfuscation configuration files in the current module's build-profile.json5. +# +# For more details, see +# https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/source-obfuscation-V5 + +# Obfuscation options: +# -disable-obfuscation: disable all obfuscations +# -enable-property-obfuscation: obfuscate the property names +# -enable-toplevel-obfuscation: obfuscate the names in the global scope +# -compact: remove unnecessary blank spaces and all line feeds +# -remove-log: remove all console.* statements +# -print-namecache: print the name cache that contains the mapping from the old names to new names +# -apply-namecache: reuse the given cache file + +# Keep options: +# -keep-property-name: specifies property names that you want to keep +# -keep-global-name: specifies names that you want to keep in the global scope + +-enable-property-obfuscation +-enable-toplevel-obfuscation +-enable-filename-obfuscation +-enable-export-obfuscation \ No newline at end of file diff --git a/ArkUISample/EventProject/entry/oh-package.json5 b/ArkUISample/EventProject/entry/oh-package.json5 new file mode 100644 index 000000000..c9cb6c817 --- /dev/null +++ b/ArkUISample/EventProject/entry/oh-package.json5 @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2025 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. + */ + +{ + "name": "entry", + "version": "1.0.0", + "description": "Please describe the basic information.", + "main": "", + "author": "", + "license": "", + "dependencies": {} +} + diff --git a/ArkUISample/EventProject/entry/src/main/ets/common/Card.ets b/ArkUISample/EventProject/entry/src/main/ets/common/Card.ets new file mode 100644 index 000000000..bbddb561a --- /dev/null +++ b/ArkUISample/EventProject/entry/src/main/ets/common/Card.ets @@ -0,0 +1,102 @@ +/* + * Copyright (c) 2025 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. + */ + +@Component +export struct CompletedRoutableCard { + @Prop + symbol: Resource = $r('sys.symbol.label'); + @Prop + @Require + title: string; + @Prop + @Require + description: string; + + build() { + Card({ verticalAlign: VerticalAlign.Top }) { + Button({ type: ButtonType.Circle }) { + SymbolGlyph(this.symbol) + .fontColor(['#fff']) + .fontSize(16) + } + .borderRadius(14) + + Column({ space: 8 }) { + Text(this.title) + .fontColor($r('sys.color.font_primary')) + + Text(this.description) + .fontColor($r('sys.color.font_secondary')) + .fontSize($r('sys.float.Body_S')) + } + .alignItems(HorizontalAlign.Start) + .layoutWeight(1) + } + } +} + +@Component +export struct Card { + @Prop + verticalAlign: VerticalAlign = VerticalAlign.Center; + @BuilderParam + content: () => void; + + build() { + Row({ space: 12 }) { + this.content() + } + .alignItems(this.verticalAlign) + .backgroundColor('#fff') + .borderRadius(12) + .padding(12) + .width('100%') + } +} + +@Component +export struct RoutableCard { + @Prop + icon: Resource = $r('sys.symbol.label'); + @Prop + @Require + title: ResourceStr; + + build() { + Card() { + Button({ type: ButtonType.Circle }) { + SymbolGlyph(this.icon) + .fontColor(['#fff']) + .fontSize(16) + } + .borderRadius(14) + + Text(this.title) + .fontColor($r('sys.color.font_primary')) + .minFontSize(12) + .maxFontSize(16) + .maxLines(1) + .textOverflow({ overflow: TextOverflow.Ellipsis }) + + Blank() + + Button({ type: ButtonType.Normal, buttonStyle: ButtonStyleMode.TEXTUAL }) { + SymbolGlyph($r('sys.symbol.chevron_right')) + .fontSize(18) + .fontColor([$r('sys.color.font_secondary')]) + } + } + } +} \ No newline at end of file diff --git a/ArkUISample/EventProject/entry/src/main/ets/common/Route.ets b/ArkUISample/EventProject/entry/src/main/ets/common/Route.ets new file mode 100644 index 000000000..a74522e35 --- /dev/null +++ b/ArkUISample/EventProject/entry/src/main/ets/common/Route.ets @@ -0,0 +1,21 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export interface Route { + title: string; + name: string; + items?: Route[]; + description?: string; +} \ No newline at end of file diff --git a/ArkUISample/EventProject/entry/src/main/ets/common/resource.ets b/ArkUISample/EventProject/entry/src/main/ets/common/resource.ets new file mode 100644 index 000000000..f0adea122 --- /dev/null +++ b/ArkUISample/EventProject/entry/src/main/ets/common/resource.ets @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export class P2PManager { + public resourceToString(resource: Resource):string { + return getContext(this).resourceManager.getStringSync(resource) + } +} + +// 默认导出let +let p2pManager = new P2PManager(); + +export default p2pManager as P2PManager; \ No newline at end of file diff --git a/ArkUISample/EventProject/entry/src/main/ets/entryability/EntryAbility.ets b/ArkUISample/EventProject/entry/src/main/ets/entryability/EntryAbility.ets new file mode 100644 index 000000000..edc2839f2 --- /dev/null +++ b/ArkUISample/EventProject/entry/src/main/ets/entryability/EntryAbility.ets @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2025 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 { AbilityConstant, ConfigurationConstant, UIAbility, Want } from '@kit.AbilityKit'; +import { hilog } from '@kit.PerformanceAnalysisKit'; +import { window } from '@kit.ArkUI'; + +export default class EntryAbility extends UIAbility { + onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void { + this.context.getApplicationContext().setColorMode(ConfigurationConstant.ColorMode.COLOR_MODE_NOT_SET); + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate'); + } + + onDestroy(): void { + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onDestroy'); + } + + onWindowStageCreate(windowStage: window.WindowStage): void { + // Main window is created, set main page for this ability + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageCreate'); + + windowStage.loadContent('pages/Index', (err) => { + if (err.code) { + hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? ''); + return; + } + hilog.info(0x0000, 'testTag', 'Succeeded in loading the content.'); + }); + } + + onWindowStageDestroy(): void { + // Main window is destroyed, release UI related resources + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageDestroy'); + } + + onForeground(): void { + // Ability has brought to foreground + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onForeground'); + } + + onBackground(): void { + // Ability has back to background + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onBackground'); + } +} \ No newline at end of file diff --git a/ArkUISample/EventProject/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets b/ArkUISample/EventProject/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets new file mode 100644 index 000000000..b1e212947 --- /dev/null +++ b/ArkUISample/EventProject/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2025 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 { hilog } from '@kit.PerformanceAnalysisKit'; +import { BackupExtensionAbility, BundleVersion } from '@kit.CoreFileKit'; + +export default class EntryBackupAbility extends BackupExtensionAbility { + async onBackup() { + hilog.info(0x0000, 'testTag', 'onBackup ok'); + } + + async onRestore(bundleVersion: BundleVersion) { + hilog.info(0x0000, 'testTag', 'onRestore ok %{public}s', JSON.stringify(bundleVersion)); + } +} \ No newline at end of file diff --git a/ArkUISample/EventProject/entry/src/main/ets/pages/Index.ets b/ArkUISample/EventProject/entry/src/main/ets/pages/Index.ets new file mode 100644 index 000000000..03155cfdd --- /dev/null +++ b/ArkUISample/EventProject/entry/src/main/ets/pages/Index.ets @@ -0,0 +1,132 @@ +/* + * Copyright (c) 2025 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 { LengthMetrics } from '@kit.ArkUI'; +import { RoutableCard } from '../common/Card'; +import { Route } from '../common/Route'; +import { DeviceDestination, Device_ROUTE_PREFIX } from './device/Index'; +import { DragGestureDestination, Drag_ROUTE_PREFIX } from './drag/Index'; +import { FocusDestination, Focus_ROUTE_PREFIX } from './focus/Index'; +import { GestureJudgeDestination, GestureJudge_ROUTE_PREFIX } from './gesturejudge/Index'; +import { GroupGestureDestination, GroupGesture_ROUTE_PREFIX } from './groupgesture/Index'; +import { Gesture_ROUTE_PREFIX, GestureDestination } from './singlegesture/Index'; +import { TouchDestination, Touch_ROUTE_PREFIX } from './Touch/Index'; +import resource from '../common/resource'; + +const routes: Route[] = [ + { + title: resource.resourceToString($r('app.string.Pages_Index_gesture')), + name: Gesture_ROUTE_PREFIX + }, + { + title: resource.resourceToString($r('app.string.Pages_Index_GroupGesture')), + name: GroupGesture_ROUTE_PREFIX + }, + { + title: resource.resourceToString($r('app.string.Pages_Index_GestureJudge')), + name: GestureJudge_ROUTE_PREFIX + }, + { + title: resource.resourceToString($r('app.string.Pages_Index_TouchEvent')), + name: Touch_ROUTE_PREFIX + }, + { + title: resource.resourceToString($r('app.string.Pages_Index_DeviceEvent')), + name: Device_ROUTE_PREFIX + }, + { + title: resource.resourceToString($r('app.string.Pages_Index_FocusEvent')), + name: Focus_ROUTE_PREFIX + }, + { + title: resource.resourceToString($r('app.string.Pages_Index_DragEvent')), + name: Drag_ROUTE_PREFIX + } +]; + +@Builder +function Destination(name: string) { + if (name.startsWith(Gesture_ROUTE_PREFIX)) { + GestureDestination(name); + } else if (name.startsWith(GroupGesture_ROUTE_PREFIX)) { + GroupGestureDestination(name); + } else if (name.startsWith(GestureJudge_ROUTE_PREFIX)) { + GestureJudgeDestination(name); + } else if (name.startsWith(Touch_ROUTE_PREFIX)) { + TouchDestination(name); + } else if (name.startsWith(Device_ROUTE_PREFIX)) { + DeviceDestination(name); + } else if (name.startsWith(Focus_ROUTE_PREFIX)) { + FocusDestination(name); + } else if (name.startsWith(Drag_ROUTE_PREFIX)) { + DragGestureDestination(name); + } +} + +@Entry +@Component +struct Index { + @State condition: string = ''; + @Provide pathStack: NavPathStack = new NavPathStack(); + + getFilteredRoutes(): Route[] { + if (!this.condition) { + return routes; + } + return routes.filter((route: Route) => { + return route.title.includes(this.condition); + }) + } + + @LocalBuilder + Title() { + Column() { + Search({ value: this.condition }) + .onChange(value => { + this.condition = value; + }) + .margin({ start: LengthMetrics.vp(16), end: LengthMetrics.vp(16) }) + } + .justifyContent(FlexAlign.Center) + .height('100%') + } + + build() { + Navigation(this.pathStack) { + List({ space: 12 }) { + ForEach(this.getFilteredRoutes(), (route: Route) => { + ListItem() { + RoutableCard({ title: route.title }) + } + .width('100%') + .onClick(() => { + this.pathStack.pushPath({ name: route.name }); + }) + }) + } + .padding({ start: LengthMetrics.vp(16), end: LengthMetrics.vp(16) }) + .contentStartOffset(56) + .height('100%') + .width('100%') + } + .backgroundColor('#f1f3f5') + .title({ builder: this.Title, height: 56 }, { + backgroundBlurStyle: BlurStyle.COMPONENT_THICK, + barStyle: BarStyle.STACK + }) + .navDestination(Destination) + } +} \ No newline at end of file diff --git a/ArkUISample/EventProject/entry/src/main/ets/pages/Touch/ClickEvent.ets b/ArkUISample/EventProject/entry/src/main/ets/pages/Touch/ClickEvent.ets new file mode 100644 index 000000000..84555db10 --- /dev/null +++ b/ArkUISample/EventProject/entry/src/main/ets/pages/Touch/ClickEvent.ets @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2025 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. + */ + +// [Start click_event_handle] +@Entry +@Component +export struct Click { + @State flag: boolean = true; + @State btnMsg: string = 'show'; + + build() { + NavDestination() { + Column({ space: 12 }) { + Text($r('app.string.Touch_ClickEvent_text')) + .fontSize(14) + .fontColor('#666') + Column() { + Button(this.btnMsg).width(80).height(30).margin(30) + .onClick(() => { + if (this.flag) { + this.btnMsg = 'hide'; + } else { + this.btnMsg = 'show'; + } + // 点击Button控制Image的显示和消失 + this.flag = !this.flag; + }) + if (this.flag) { + Image($r('app.media.app_icon')).width(200).height(200) + } + }.height('100%').width('100%') + } + .width('100%') + .height('100%') + .padding({ left: 12, right: 12 }) + } + .backgroundColor('#f1f2f3') + .title($r('app.string.Touch_ClickEvent_title')) + } +} +// [End click_event_handle] \ No newline at end of file diff --git a/ArkUISample/EventProject/entry/src/main/ets/pages/Touch/Index.ets b/ArkUISample/EventProject/entry/src/main/ets/pages/Touch/Index.ets new file mode 100644 index 000000000..4830e9f24 --- /dev/null +++ b/ArkUISample/EventProject/entry/src/main/ets/pages/Touch/Index.ets @@ -0,0 +1,76 @@ +/* + * Copyright (c) 2025 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 { CompletedRoutableCard } from '../../common/Card'; +import { Route } from '../../common/Route'; +import { Click } from './ClickEvent'; +import { Touch } from './TouchEvent'; +import resource from '../../common/resource'; + +export const Touch_ROUTE_PREFIX: string = 'Touch_ROUTE_PREFIX'; + +const routes: Route[] = [ + { + name: `${Touch_ROUTE_PREFIX}/ClickEvent`, + title: resource.resourceToString($r('app.string.Touch_Index_ClickEvent_title')), + description: resource.resourceToString($r('app.string.Touch_Index_ClickEvent_description')) + }, + { + name: `${Touch_ROUTE_PREFIX}/TouchEvent`, + title: resource.resourceToString($r('app.string.Touch_Index_TouchEvent_title')), + description: resource.resourceToString($r('app.string.Touch_Index_TouchEvent_description')), + } +] + +@Builder +export function TouchDestination(name: string) { + if (name === Touch_ROUTE_PREFIX) { + TouchExample(); + } else if (name === routes[0].name) { + Click(); + } else if (name === routes[1].name) { + Touch(); + } +} + +@Entry +@Component +struct TouchExample { + @Consume pathStack: NavPathStack; + + build() { + NavDestination() { + List({ space: 12 }) { + ForEach(routes, (route: Route) => { + ListItem() { + CompletedRoutableCard({ title: route.title, description: route.description }) + } + .width('100%') + .onClick(() => { + this.pathStack.pushPath({ name: route.name }); + }) + }) + } + .contentStartOffset(20) + .padding({ left: 16, right: 16 }) + } + .backgroundColor('#f1f3f5') + .title('', { + backgroundBlurStyle: BlurStyle.COMPONENT_THICK, + barStyle: BarStyle.STACK + }) + .title($r('app.string.Touch_Index_title')) + } +} \ No newline at end of file diff --git a/ArkUISample/EventProject/entry/src/main/ets/pages/Touch/TouchEvent.ets b/ArkUISample/EventProject/entry/src/main/ets/pages/Touch/TouchEvent.ets new file mode 100644 index 000000000..d423f073d --- /dev/null +++ b/ArkUISample/EventProject/entry/src/main/ets/pages/Touch/TouchEvent.ets @@ -0,0 +1,75 @@ +/* + * Copyright (c) 2025 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. + */ + +// [Start touch_event_handle] +@Entry +@Component +export struct Touch { + @State text: string = ''; + @State eventType: string = ''; + + build() { + NavDestination() { + Column({ space: 12 }) { + + Column() { + Button('Touch').height(40).width(100) + .onTouch((event?: TouchEvent) => { + if (event) { + if (event.type === TouchType.Down) { + this.eventType = 'Down'; + } + if (event.type === TouchType.Up) { + this.eventType = 'Up'; + } + if (event.type === TouchType.Move) { + this.eventType = 'Move'; + } + this.text = 'TouchType:' + this.eventType + '\nDistance between touch point and touch element:\nx: ' + + event.touches[0].x + '\n' + 'y: ' + event.touches[0].y + '\nComponent globalPos:(' + + event.target.area.globalPosition.x + ',' + event.target.area.globalPosition.y + ')\nwidth:' + + event.target.area.width + '\nheight:' + event.target.area.height + } + }) + Button('Touch').height(50).width(200).margin(20) + .onTouch((event?: TouchEvent) => { + if (event) { + if (event.type === TouchType.Down) { + this.eventType = 'Down'; + } + if (event.type === TouchType.Up) { + this.eventType = 'Up'; + } + if (event.type === TouchType.Move) { + this.eventType = 'Move'; + } + this.text = 'TouchType:' + this.eventType + '\nDistance between touch point and touch element:\nx: ' + + event.touches[0].x + '\n' + 'y: ' + event.touches[0].y + '\nComponent globalPos:(' + + event.target.area.globalPosition.x + ',' + event.target.area.globalPosition.y + ')\nwidth:' + + event.target.area.width + '\nheight:' + event.target.area.height + } + }) + Text(this.text) + }.width('100%').padding(30) + } + .width('100%') + .height('100%') + .padding({ left: 12, right: 12 }) + } + .backgroundColor('#f1f2f3') + .title($r('app.string.Touch_TouchEvent_title')) + } +} +// [End touch_event_handle] \ No newline at end of file diff --git a/ArkUISample/EventProject/entry/src/main/ets/pages/device/HoverEffect.ets b/ArkUISample/EventProject/entry/src/main/ets/pages/device/HoverEffect.ets new file mode 100644 index 000000000..198de86e0 --- /dev/null +++ b/ArkUISample/EventProject/entry/src/main/ets/pages/device/HoverEffect.ets @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2025 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. + */ + +// [Start mouse_hover_effect] +@Entry +@Component +export struct HoverEffectSample { + @State buttonText: string = ''; + @State columnText: string = ''; + @State hoverText: string = 'Not Hover'; + @State color: Color = Color.Gray; + + build() { + NavDestination() { + Column({ space: 12 }) { + + Column({ space: 10 }) { + Button('Auto') + .width(170).height(70) + Button('Scale') + .width(170).height(70) + .hoverEffect(HoverEffect.Scale) + Button('Highlight') + .width(170).height(70) + .hoverEffect(HoverEffect.Highlight) + Button('None') + .width(170).height(70) + .hoverEffect(HoverEffect.None) + }.width('100%').height('100%').justifyContent(FlexAlign.Center) + + } + .width('100%') + .height('100%') + .padding({ left: 12, right: 12 }) + } + .backgroundColor('#f1f2f3') + .title($r('app.string.HoverEffectSample_title')) + } +} +// [End mouse_hover_effect] \ No newline at end of file diff --git a/ArkUISample/EventProject/entry/src/main/ets/pages/device/Index.ets b/ArkUISample/EventProject/entry/src/main/ets/pages/device/Index.ets new file mode 100644 index 000000000..6038ec226 --- /dev/null +++ b/ArkUISample/EventProject/entry/src/main/ets/pages/device/Index.ets @@ -0,0 +1,103 @@ +/* + * Copyright (c) 2025 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 { CompletedRoutableCard } from '../../common/Card'; +import { Route } from '../../common/Route'; +import { HoverEffectSample } from './HoverEffect'; +import { Hover } from './OnHover'; +import { OnKey } from './OnKey'; +import { PreIme } from './OnKeyPreIme'; +import { Mouse } from './OnMouse'; +import resource from '../../common/resource'; + + +export const Device_ROUTE_PREFIX: string = 'Device_ROUTE_PREFIX'; + +const routes: Route[] = [ + { + name: `${Device_ROUTE_PREFIX}/OnHover`, + title: resource.resourceToString($r('app.string.Hover_Event')), + description: resource.resourceToString($r('app.string.Hover_Description')), + }, + { + name: `${Device_ROUTE_PREFIX}/OnMouse`, + title: resource.resourceToString($r('app.string.Mouse_Event')), + description: resource.resourceToString($r('app.string.Mouse_Description')) + }, + { + name: `${Device_ROUTE_PREFIX}/HoverEffect`, + title: resource.resourceToString($r('app.string.Hover_Effect')), + description: resource.resourceToString($r('app.string.Hover_Effect_Description')), + }, + { + name: `${Device_ROUTE_PREFIX}/onKeyEvent `, + title: resource.resourceToString($r('app.string.Key_Event')), + description: resource.resourceToString($r('app.string.Key_Description')), + }, + { + name: `${Device_ROUTE_PREFIX}/OnKeyPreIme `, + title: resource.resourceToString($r('app.string.Key_PreIme')), + description: resource.resourceToString($r('app.string.Key_PreIme_Description')), + } + + +] + +@Builder +export function DeviceDestination(name: string) { + if (name === Device_ROUTE_PREFIX) { + DeviceExample(); + } else if (name === routes[0].name) { + Hover(); + } else if (name === routes[1].name) { + Mouse(); + } else if (name === routes[2].name) { + HoverEffectSample(); + } else if (name === routes[3].name) { + OnKey(); + } else if (name === routes[4].name) { + PreIme(); + } +} + +@Entry +@Component +struct DeviceExample { + @Consume pathStack: NavPathStack; + + build() { + NavDestination() { + List({ space: 12 }) { + ForEach(routes, (route: Route) => { + ListItem() { + CompletedRoutableCard({ title: route.title, description: route.description }) + } + .width('100%') + .onClick(() => { + this.pathStack.pushPath({ name: route.name }); + }) + }) + } + .contentStartOffset(20) + .padding({ left: 16, right: 16 }) + } + .backgroundColor('#f1f3f5') + .title('', { + backgroundBlurStyle: BlurStyle.COMPONENT_THICK, + barStyle: BarStyle.STACK + }) + .title($r('app.string.Device_index_title')) + } +} \ No newline at end of file diff --git a/ArkUISample/EventProject/entry/src/main/ets/pages/device/OnHover.ets b/ArkUISample/EventProject/entry/src/main/ets/pages/device/OnHover.ets new file mode 100644 index 000000000..6992c005c --- /dev/null +++ b/ArkUISample/EventProject/entry/src/main/ets/pages/device/OnHover.ets @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2025 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. + */ + +// [Start dynamic_response_mouse_hover] +@Entry +@Component +export struct Hover { + @State hoverText: string = 'Not Hover'; + @State color: Color = Color.Gray; + + build() { + NavDestination() { + Column({ space: 12 }) { + + Column() { + Button(this.hoverText) + .width(200).height(100) + .backgroundColor(this.color) + .onHover((isHover?: boolean) => { // 使用onHover接口监听鼠标是否悬浮在Button组件上 + if (isHover) { + this.hoverText = 'Hovered!'; + this.color = Color.Green; + } else { + this.hoverText = 'Not Hover'; + this.color = Color.Gray; + } + }) + }.width('100%').height('100%').justifyContent(FlexAlign.Center) + + } + .width('100%') + .height('100%') + .padding({ left: 12, right: 12 }) + } + .backgroundColor('#f1f2f3') + .title($r('app.string.Device_OnHover_title')) + } +} +// [End dynamic_response_mouse_hover] \ No newline at end of file diff --git a/ArkUISample/EventProject/entry/src/main/ets/pages/device/OnKey.ets b/ArkUISample/EventProject/entry/src/main/ets/pages/device/OnKey.ets new file mode 100644 index 000000000..eaa8bc571 --- /dev/null +++ b/ArkUISample/EventProject/entry/src/main/ets/pages/device/OnKey.ets @@ -0,0 +1,78 @@ +/* + * Copyright (c) 2025 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. + */ + +// [Start listen_response_key_event] +@Entry +@Component +export struct OnKey { + @State buttonText: string = ''; + @State buttonType: string = ''; + @State columnText: string = ''; + @State columnType: string = ''; + + build() { + NavDestination() { + Column({ space: 12 }) { + + Column() { + Button('onKeyEvent') + .defaultFocus(true) + .width(140).height(70) + .onKeyEvent((event?: KeyEvent) => { // 给Button设置onKeyEvent事件 + if(event){ + if (event.type === KeyType.Down) { + this.buttonType = 'Down'; + } + if (event.type === KeyType.Up) { + this.buttonType = 'Up'; + } + this.buttonText = 'Button: \n' + + 'KeyType:' + this.buttonType + '\n' + + 'KeyCode:' + event.keyCode + '\n' + + 'KeyText:' + event.keyText; + } + }) + + Divider() + Text(this.buttonText).fontColor(Color.Green) + + Divider() + Text(this.columnText).fontColor(Color.Red) + }.width('100%').height('100%').justifyContent(FlexAlign.Center) + .onKeyEvent((event?: KeyEvent) => { // 给父组件Column设置onKeyEvent事件 + if(event){ + if (event.type === KeyType.Down) { + this.columnType = 'Down'; + } + if (event.type === KeyType.Up) { + this.columnType = 'Up'; + } + this.columnText = 'Column: \n' + + 'KeyType:' + this.buttonType + '\n' + + 'KeyCode:' + event.keyCode + '\n' + + 'KeyText:' + event.keyText; + } + }) + + } + .width('100%') + .height('100%') + .padding({ left: 12, right: 12 }) + } + .backgroundColor('#f1f2f3') + .title($r('app.string.Device_OnKey_title')) + } +} +// [End listen_response_key_event] \ No newline at end of file diff --git a/ArkUISample/EventProject/entry/src/main/ets/pages/device/OnKeyPreIme.ets b/ArkUISample/EventProject/entry/src/main/ets/pages/device/OnKeyPreIme.ets new file mode 100644 index 000000000..32edef1b9 --- /dev/null +++ b/ArkUISample/EventProject/entry/src/main/ets/pages/device/OnKeyPreIme.ets @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2025 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. + */ + +// [Start key_event_intercept] +import { KeyCode } from '@kit.InputKit'; + +@Entry +@Component +export struct PreIme { + @State buttonText: string = ''; + @State buttonType: string = ''; + @State columnText: string = ''; + @State columnType: string = ''; + + build() { + NavDestination() { + Column({ space: 12 }) { + + Column() { + Search({ + placeholder: 'Search...' + }) + .width('80%') + .height('40vp') + .border({ radius:'20vp' }) + .onKeyPreIme((event:KeyEvent) => { + if (event.keyCode == KeyCode.KEYCODE_DPAD_LEFT) { + return true; + } + return false; + }) + } + + } + .width('100%') + .height('100%') + .padding({ left: 12, right: 12 }) + } + .backgroundColor('#f1f2f3') + .title($r('app.string.Device_OnKeyPreIme_title')) + } +} +// [End key_event_intercept] \ No newline at end of file diff --git a/ArkUISample/EventProject/entry/src/main/ets/pages/device/OnMouse.ets b/ArkUISample/EventProject/entry/src/main/ets/pages/device/OnMouse.ets new file mode 100644 index 000000000..baab41e24 --- /dev/null +++ b/ArkUISample/EventProject/entry/src/main/ets/pages/device/OnMouse.ets @@ -0,0 +1,81 @@ +/* + * Copyright (c) 2025 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. + */ + +// [Start listen_response_mouse_event] +@Entry +@Component +export struct Mouse { + @State buttonText: string = ''; + @State columnText: string = ''; + @State hoverText: string = 'Not Hover'; + @State color: Color = Color.Gray; + + build() { + NavDestination() { + Column({ space: 12 }) { + + Column() { + Button(this.hoverText) + .width(200) + .height(100) + .backgroundColor(this.color) + .onHover((isHover?: boolean) => { + if (isHover) { + this.hoverText = 'Hovered!'; + this.color = Color.Green; + } else { + this.hoverText = 'Not Hover'; + this.color = Color.Gray; + } + }) + .onMouse((event?: MouseEvent) => { // 设置Button的onMouse回调 + if (event) { + this.buttonText = 'Button onMouse:\n' + '' + + 'button = ' + event.button + '\n' + + 'action = ' + event.action + '\n' + + 'x,y = (' + event.x + ',' + event.y + ')' + '\n' + + 'windowXY=(' + event.windowX + ',' + event.windowY + ')'; + } + }) + Divider() + Text(this.buttonText).fontColor(Color.Green) + Divider() + Text(this.columnText).fontColor(Color.Red) + } + .width('100%') + .height('100%') + .justifyContent(FlexAlign.Center) + .borderWidth(2) + .borderColor(Color.Red) + .onMouse((event?: MouseEvent) => { // Set the onMouse callback for the column. + if (event) { + this.columnText = 'Column onMouse:\n' + '' + + 'button = ' + event.button + '\n' + + 'action = ' + event.action + '\n' + + 'x,y = (' + event.x + ',' + event.y + ')' + '\n' + + 'windowXY=(' + event.windowX + ',' + event.windowY + ')'; + } + }) + + } + .width('100%') + .height('100%') + .padding({ left: 12, right: 12 }) + } + .backgroundColor('#f1f2f3') + .title($r('app.string.Device_OnMouse_title')) + } +} +// [End listen_response_mouse_event] \ No newline at end of file diff --git a/ArkUISample/EventProject/entry/src/main/ets/pages/drag/DefaultDrag.ets b/ArkUISample/EventProject/entry/src/main/ets/pages/drag/DefaultDrag.ets new file mode 100644 index 000000000..ad23de3c8 --- /dev/null +++ b/ArkUISample/EventProject/entry/src/main/ets/pages/drag/DefaultDrag.ets @@ -0,0 +1,207 @@ +/* + * Copyright (c) 2025 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. + */ + +// [Start default_drag] +import { unifiedDataChannel, uniformTypeDescriptor } from '@kit.ArkData'; +import { promptAction } from '@kit.ArkUI'; +import { BusinessError } from '@kit.BasicServicesKit'; +import { image } from '@kit.ImageKit'; + +@Entry +@Component +export struct DefaultDrag { + @State targetImage: string = ''; + @State imageWidth: number = 100; + @State imageHeight: number = 100; + @State imgState: Visibility = Visibility.Visible; + @State pixmap: image.PixelMap | undefined = undefined; + + // [Start generate_pix_map] + @Builder + pixelMapBuilder() { + Column() { + Image($r('app.media.startIcon')) + .width(120) + .height(120) + .backgroundColor(Color.Yellow) + } + } + + // [StartExclude generate_pix_map] + // [Start data_delayed_retry] + getDataFromUdmfRetry(event: DragEvent, callback: (data: DragEvent) => void) { + try { + let data: UnifiedData = event.getData(); + if (!data) { + return false; + } + let records: unifiedDataChannel.UnifiedRecord[] = data.getRecords(); + if (!records || records.length <= 0) { + return false; + } + callback(event); + return true; + } catch (e) { + console.log('getData failed, code: ' + (e as BusinessError).code + ', message: ' + (e as BusinessError).message); + return false; + } + } + + // 获取UDMF数据,首次获取失败后添加1500ms延迟重试机制 + getDataFromUdmf(event: DragEvent, callback: (data: DragEvent) => void) { + if (this.getDataFromUdmfRetry(event, callback)) { + return; + } + setTimeout(() => { + this.getDataFromUdmfRetry(event, callback); + }, 1500); + } + // [End data_delayed_retry] + // [EndExclude generate_pix_map] + + // 调用componentSnapshot中的createFromBuilder接口截取自定义builder的截图 + private getComponentSnapshot(): void { + this.getUIContext().getComponentSnapshot().createFromBuilder(() => { + this.pixelMapBuilder() + }, + (error: Error, pixmap: image.PixelMap) => { + if (error) { + console.log('error: ' + JSON.stringify(error)); + return; + } + this.pixmap = pixmap; + }) + } + // [End generate_pix_map] + + // 长按50ms时提前准备自定义截图的pixmap + private PreDragChange(preDragStatus: PreDragStatus): void { + if (preDragStatus == PreDragStatus.ACTION_DETECTING_STATUS) { + this.getComponentSnapshot(); + } + } + + build() { + NavDestination() { + Column({ space: 12 }) { + + Row() { + Column() { + Text('start Drag') + .fontSize(18) + .width('100%') + .height(40) + .margin(10) + .backgroundColor('#008888') + Row() { + // [Start module_draggable] + Image($r('app.media.app_icon')) + .width(100) + .height(100) + .draggable(true) + .margin({ left: 15 }) + // [StartExclude module_draggable] + .visibility(this.imgState)// 绑定平行手势,可同时触发应用自定义长按手势 + // [Start bind_parallel_gesture] + .parallelGesture(LongPressGesture().onAction(() => { + promptAction.showToast({ duration: 100, message: 'Long press gesture trigger' }); + })) + // [End bind_parallel_gesture] + // [EndExclude module_draggable] + .onDragStart((event) => { + let data: unifiedDataChannel.Image = new unifiedDataChannel.Image(); + data.imageUri = 'common/pic/img.png'; + let unifiedData = new unifiedDataChannel.UnifiedData(data); + event.setData(unifiedData); + + let dragItemInfo: DragItemInfo = { + pixelMap: this.pixmap, + extraInfo: 'this is extraInfo', + }; + return dragItemInfo; + }) + // [End module_draggable] + // 提前准备拖拽自定义背板图 + // [Start set_custom_drag_status] + .onPreDrag((status: PreDragStatus) => { + this.PreDragChange(status); + }) + // [End set_custom_drag_status] + // [Start set_on_drag_end] + .onDragEnd((event) => { + // onDragEnd里取到的result值在接收方onDrop设置 + if (event.getResult() === DragResult.DRAG_SUCCESSFUL) { + promptAction.showToast({ duration: 100, message: 'Drag Success' }); + } else if (event.getResult() === DragResult.DRAG_FAILED) { + promptAction.showToast({ duration: 100, message: 'Drag failed' }); + } + }) + // [End set_on_drag_end] + } + + Text('Drag Target Area') + .fontSize(20) + .width('100%') + .height(40) + .margin(10) + .backgroundColor('#008888') + Row() { + Image(this.targetImage) + .width(this.imageWidth) + .height(this.imageHeight) + .draggable(true) + .margin({ left: 15 }) + .border({ color: Color.Black, width: 1 })// 控制角标显示类型为MOVE,即不显示角标 + // [Start set_drag_behavior_move] + .onDragMove((event) => { + event.setResult(DragResult.DROP_ENABLED) + event.dragBehavior = DragBehavior.MOVE + // [End set_drag_behavior_move] + }) + // [Start allow_drag_type] + .allowDrop([uniformTypeDescriptor.UniformDataType.IMAGE]) + // [End allow_drag_type] + // [Start set_on_drop_call] + .onDrop((dragEvent?: DragEvent) => { + // 获取拖拽数据 + this.getDataFromUdmf((dragEvent as DragEvent), (event: DragEvent) => { + let records: unifiedDataChannel.UnifiedRecord[] = event.getData().getRecords(); + let rect: Rectangle = event.getPreviewRect(); + this.imageWidth = Number(rect.width); + this.imageHeight = Number(rect.height); + this.targetImage = (records[0] as unifiedDataChannel.Image).imageUri; + this.imgState = Visibility.None; + // 显式设置result为successful,则将该值传递给拖出方的onDragEnd + event.setResult(DragResult.DRAG_SUCCESSFUL); + }) + }) + // [End set_on_drop_call] + } + } + .width('100%') + .height('100%') + } + .height('100%') + + } + .width('100%') + .height('100%') + .padding({ left: 12, right: 12 }) + } + .backgroundColor('#f1f2f3') + .title($r('app.string.Drag_DefaultDrag_title')) + } +} +// [End default_drag] \ No newline at end of file diff --git a/ArkUISample/EventProject/entry/src/main/ets/pages/drag/Index.ets b/ArkUISample/EventProject/entry/src/main/ets/pages/drag/Index.ets new file mode 100644 index 000000000..f17944899 --- /dev/null +++ b/ArkUISample/EventProject/entry/src/main/ets/pages/drag/Index.ets @@ -0,0 +1,76 @@ +/* + * Copyright (c) 2025 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 { CompletedRoutableCard } from '../../common/Card'; +import { Route } from '../../common/Route'; +import { DefaultDrag } from './DefaultDrag'; +import { MoreDrag } from './MoreDrag'; +import resource from '../../common/resource'; + +export const Drag_ROUTE_PREFIX: string = 'Drag_ROUTE_PREFIX'; + +const routes: Route[] = [ + { + name: `${Drag_ROUTE_PREFIX}/Defaultdrag`, + title: resource.resourceToString($r('app.string.Drag_Index_DefaultDrag_title')), + description: resource.resourceToString($r('app.string.Drag_Index_DefaultDrag_description')), + }, + { + name: `${Drag_ROUTE_PREFIX}/MoreDrag`, + title: resource.resourceToString($r('app.string.Drag_Index_MoreDrag_title')), + description: resource.resourceToString($r('app.string.Drag_Index_MoreDrag_description')), + } +] + +@Builder +export function DragGestureDestination(name: string) { + if (name === Drag_ROUTE_PREFIX) { + DragGestureExample(); + } else if (name === routes[0].name) { + DefaultDrag(); + } else if (name === routes[1].name) { + MoreDrag(); + } +} + +@Entry +@Component +struct DragGestureExample { + @Consume pathStack: NavPathStack; + + build() { + NavDestination() { + List({ space: 12 }) { + ForEach(routes, (route: Route) => { + ListItem() { + CompletedRoutableCard({ title: route.title, description: route.description }) + } + .width('100%') + .onClick(() => { + this.pathStack.pushPath({ name: route.name }); + }) + }) + } + .contentStartOffset(20) + .padding({ left: 16, right: 16 }) + } + .backgroundColor('#f1f3f5') + .title('', { + backgroundBlurStyle: BlurStyle.COMPONENT_THICK, + barStyle: BarStyle.STACK + }) + .title($r('app.string.Drag_Index_title')) + } +} \ No newline at end of file diff --git a/ArkUISample/EventProject/entry/src/main/ets/pages/drag/MoreDrag.ets b/ArkUISample/EventProject/entry/src/main/ets/pages/drag/MoreDrag.ets new file mode 100644 index 000000000..85b1a0ed9 --- /dev/null +++ b/ArkUISample/EventProject/entry/src/main/ets/pages/drag/MoreDrag.ets @@ -0,0 +1,132 @@ +/* + * Copyright (c) 2025 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. + */ + +// [Start more_drag] +import { KeyCode } from '@kit.InputKit'; +import { image } from '@kit.ImageKit'; + +@Entry +@Component +export struct MoreDrag { + @State pixmap: image.PixelMap | undefined = undefined; + @State numbers: number[] = []; + @State isSelectedGrid: boolean[] = []; + @State previewData: DragItemInfo[] = []; + @State colors: Color[] = + [Color.Red, Color.Blue, Color.Brown, Color.Gray, Color.Green, Color.Grey, Color.Orange, Color.Pink, Color.Yellow]; + @State numberBadge: number = 0; + + @Styles + normalStyles(): void { + .opacity(1.0); + } + + @Styles + selectStyles(): void { + .opacity(0.4); + } + + onPageShow(): void { + let i: number = 0 + for (i = 0; i < 100; i++) { + this.numbers.push(i); + this.isSelectedGrid.push(false); + this.previewData.push({}); + } + } + + @Builder + RandomBuilder(idx: number) { + Column() + .backgroundColor(this.colors[idx % 9]) + .width(50) + .height(50) + .opacity(1.0) + } + + build() { + NavDestination() { + Column({ space: 12 }) { + + Column({ space: 5 }) { + // [Start create_grid_item_module] + Grid() { + ForEach(this.numbers, (idx: number) => { + GridItem() { + Column() + .backgroundColor(this.colors[idx % 9]) + .width(50) + .height(50) + .opacity(1.0) + .id('grid' + idx) + } + // [StartExclude create_grid_item_module] + .dragPreview(this.previewData[idx]) + .selectable(true) + .selected(this.isSelectedGrid[idx]) + // 设置多选显示效果 + .stateStyles({ + normal: this.normalStyles, + selected: this.selectStyles + }) + // [Start grid_item_module_selected_true] + .onClick(() => { + this.isSelectedGrid[idx] = !this.isSelectedGrid[idx]; + // [StartExclude grid_item_module_selected_true] + if (this.isSelectedGrid[idx]) { + this.numberBadge++; + let gridItemName = 'grid' + idx; + // 选中状态下提前调用componentSnapshot中的get接口获取pixmap + this.getUIContext() + .getComponentSnapshot() + .get(gridItemName, (error: Error, pixmap: image.PixelMap) => { + this.pixmap = pixmap; + this.previewData[idx] = { + pixelMap: this.pixmap + }; + }) + } else { + this.numberBadge--; + } + // [EndExclude grid_item_module_selected_true] + }) + // [End grid_item_module_selected_true] + // 使能多选拖拽,右上角数量角标需要应用设置numberBadge参数 + // [EndExclude create_grid_item_module] + // [Start drag_preview_options] + .dragPreviewOptions({ numberBadge: this.numberBadge }, + { isMultiSelectionEnabled: true, defaultAnimationBeforeLifting: true }) + // [End drag_preview_options] + .onDragStart(() => { + }) + }, (idx: string) => idx) + } + // [End create_grid_item_module] + .columnsTemplate('1fr 1fr 1fr 1fr 1fr') + .columnsGap(5) + .rowsGap(10) + .backgroundColor(0xFAEEE0) + }.width('100%').margin({ top: 5 }) + + } + .width('100%') + .height('100%') + .padding({ left: 12, right: 12 }) + } + .backgroundColor('#f1f2f3') + .title($r('app.string.Drag_MoreDrag_title')) + } +} +// [End more_drag] \ No newline at end of file diff --git a/ArkUISample/EventProject/entry/src/main/ets/pages/focus/DefaultFocus.ets b/ArkUISample/EventProject/entry/src/main/ets/pages/focus/DefaultFocus.ets new file mode 100644 index 000000000..96fe7d74e --- /dev/null +++ b/ArkUISample/EventProject/entry/src/main/ets/pages/focus/DefaultFocus.ets @@ -0,0 +1,86 @@ +/* + * Copyright (c) 2025 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 { KeyCode } from '@kit.InputKit'; + +// [Start focus_visualization_manage] +@Entry +@Component +export struct DefaultFocus { + @State oneButtonColor: Color = Color.Gray; + @State twoButtonColor: Color = Color.Gray; + @State threeButtonColor: Color = Color.Gray; + + build() { + NavDestination() { + Column({ space: 12 }) { + + Column({ space: 20 }) { + // 通过外接键盘的上下键可以让焦点在三个按钮间移动,按钮获焦时颜色变化,失焦时变回原背景色 + Button('First Button') + .width(260) + .height(70) + .backgroundColor(this.oneButtonColor) + .fontColor(Color.Black) + // 监听第一个组件的获焦事件,获焦后改变颜色 + .onFocus(() => { + this.oneButtonColor = Color.Green; + }) + // 监听第一个组件的失焦事件,失焦后改变颜色 + .onBlur(() => { + this.oneButtonColor = Color.Gray; + }) + + Button('Second Button') + .width(260) + .height(70) + .backgroundColor(this.twoButtonColor) + .fontColor(Color.Black) + // 监听第二个组件的获焦事件,获焦后改变颜色 + .onFocus(() => { + this.twoButtonColor = Color.Green; + }) + // 监听第二个组件的失焦事件,失焦后改变颜色 + .onBlur(() => { + this.twoButtonColor = Color.Grey; + }) + + Button('Third Button') + .width(260) + .height(70) + .backgroundColor(this.threeButtonColor) + .fontColor(Color.Black) + // 设置默认焦点 + .defaultFocus(true) + // 监听第三个组件的获焦事件,获焦后改变颜色 + .onFocus(() => { + this.threeButtonColor = Color.Green; + }) + // 监听第三个组件的失焦事件,失焦后改变颜色 + .onBlur(() => { + this.threeButtonColor = Color.Gray; + }) + }.width('100%').margin({ top: 20 }) + + } + .width('100%') + .height('100%') + .padding({ left: 12, right: 12 }) + } + .backgroundColor('#f1f2f3') + .title($r('app.string.Focus_DefaultFocus_title')) + } +} +// [End focus_visualization_manage] \ No newline at end of file diff --git a/ArkUISample/EventProject/entry/src/main/ets/pages/focus/FocusAndClick.ets b/ArkUISample/EventProject/entry/src/main/ets/pages/focus/FocusAndClick.ets new file mode 100644 index 000000000..f5aebe743 --- /dev/null +++ b/ArkUISample/EventProject/entry/src/main/ets/pages/focus/FocusAndClick.ets @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2025 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 { KeyCode } from '@kit.InputKit'; +import { ColorMetrics, LengthMetrics } from '@kit.ArkUI'; + +// [Start dynamic_focus_click_count] +@Entry +@Component +export struct FocusAndClick { + @State count: number = 0; + @State name: string = 'Button'; + + build() { + NavDestination() { + Column({ space: 12 }) { + + Column() { + Button(this.name) + .fontSize(30) + .onClick(() => { + this.count++; + if (this.count <= 0) { + this.name = 'count is negative number'; + } else if (this.count % 2 === 0) { + this.name = 'count is even number'; + } else { + this.name = 'count is odd number'; + } + }).height(60) + }.height('100%').width('100%').justifyContent(FlexAlign.Center) + + } + .width('100%') + .height('100%') + .padding({ left: 12, right: 12 }) + } + .backgroundColor('#f1f2f3') + .title($r('app.string.Focus_FocusAndClick_title')) + } +} +// [End dynamic_focus_click_count] \ No newline at end of file diff --git a/ArkUISample/EventProject/entry/src/main/ets/pages/focus/FocusController.ets b/ArkUISample/EventProject/entry/src/main/ets/pages/focus/FocusController.ets new file mode 100644 index 000000000..9a282c309 --- /dev/null +++ b/ArkUISample/EventProject/entry/src/main/ets/pages/focus/FocusController.ets @@ -0,0 +1,100 @@ +/* + * Copyright (c) 2025 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 { KeyCode } from '@kit.InputKit'; +import { ColorMetrics, LengthMetrics } from '@kit.ArkUI'; + +// [Start dynamic_focus_control_demo] +@Entry +@Component +export struct FocusControl { + @State btColor: string = '#ff2787d9'; + @State btColor2: string = '#ff2787d9'; + + build() { + NavDestination() { + Column({ space: 12 }) { + + Column({ space: 20 }) { + Column({ space: 5 }) { + Button('Button') + .width(200) + .height(70) + .fontColor(Color.White) + .focusOnTouch(true) + .backgroundColor(this.btColor) + .onFocus(() => { + this.btColor = '#ffd5d5d5'; + }) + .onBlur(() => { + this.btColor = '#ff2787d9'; + }) + .id('testButton') + + Button('Button') + .width(200) + .height(70) + .fontColor(Color.White) + .focusOnTouch(true) + .backgroundColor(this.btColor2) + .onFocus(() => { + this.btColor2 = '#ffd5d5d5'; + }) + .onBlur(() => { + this.btColor2 = '#ff2787d9'; + }) + .id('testButton2') + + Divider() + .vertical(false) + .width('80%') + .backgroundColor('#ff707070') + .height(10) + + Button('FocusController.requestFocus') + .width(200).height(70).fontColor(Color.White) + .onClick(() => { + this.getUIContext().getFocusController().requestFocus('testButton'); + }) + .backgroundColor('#ff2787d9') + + Button('focusControl.requestFocus') + .width(200).height(70).fontColor(Color.White) + .onClick(() => { + focusControl.requestFocus('testButton2'); + }) + .backgroundColor('#ff2787d9') + + Button('clearFocus') + .width(200).height(70).fontColor(Color.White) + .onClick(() => { + this.getUIContext().getFocusController().clearFocus(); + }) + .backgroundColor('#ff2787d9') + } + } + .width('100%') + .height('100%') + + } + .width('100%') + .height('100%') + .padding({ left: 12, right: 12 }) + } + .backgroundColor('#f1f2f3') + .title($r('app.string.Focus_FocusController_title')) + } +} +// [End dynamic_focus_control_demo] \ No newline at end of file diff --git a/ArkUISample/EventProject/entry/src/main/ets/pages/focus/FocusPriority.ets b/ArkUISample/EventProject/entry/src/main/ets/pages/focus/FocusPriority.ets new file mode 100644 index 000000000..23e38577d --- /dev/null +++ b/ArkUISample/EventProject/entry/src/main/ets/pages/focus/FocusPriority.ets @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2025 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 { KeyCode } from '@kit.InputKit'; + +// [Start focus_priority_manage] +@Entry +@Component +export struct FocusPrioritySample { + + build() { + NavDestination() { + Column({ space: 12 }) { + Column({ space: 8 }) { + Row() { + Button('Button1') + .defaultFocus(true) + Button('Button2') + .focusScopePriority('RowScope', FocusPriority.PREVIOUS) + }.focusScopeId('RowScope') + } + .alignItems(HorizontalAlign.Start) + .backgroundColor('#fff') + .borderRadius(12) + .padding(12) + .width('100%') + } + .width('100%') + .height('100%') + .padding({ left: 12, right: 12 }) + } + .backgroundColor('#f1f2f3') + .title($r('app.string.Focus_FocusPriority_title')) + } +} +// [End focus_priority_manage] \ No newline at end of file diff --git a/ArkUISample/EventProject/entry/src/main/ets/pages/focus/FocusScopePriority.ets b/ArkUISample/EventProject/entry/src/main/ets/pages/focus/FocusScopePriority.ets new file mode 100644 index 000000000..eae88de81 --- /dev/null +++ b/ArkUISample/EventProject/entry/src/main/ets/pages/focus/FocusScopePriority.ets @@ -0,0 +1,150 @@ +/* + * Copyright (c) 2025 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 { KeyCode } from '@kit.InputKit'; +import { ColorMetrics, LengthMetrics } from '@kit.ArkUI'; + +// [Start focus_scope_navigation] +@Entry +@Component +export struct FocusScopePriority { + @State inputValue: string = ''; + + build() { + NavDestination() { + Column({ space: 12 }) { + + Scroll() { + Row({ space: 20 }) { + Column({ space: 20 }) { // 标记为Column1 + Column({ space: 5 }) { + Button('Group1') + .width(165) + .height(40) + .fontColor(Color.White) + Row({ space: 5 }) { + Button() + .width(80) + .height(40) + .fontColor(Color.White) + Button() + .width(80) + .height(40) + .fontColor(Color.White) + } + Row({ space: 5 }) { + Button() + .width(80) + .height(40) + .fontColor(Color.White) + Button() + .width(80) + .height(40) + .fontColor(Color.White) + } + }.borderWidth(2).borderColor(Color.Red).borderStyle(BorderStyle.Dashed) + Column({ space: 5 }) { + Button('Group2') + .width(165) + .height(40) + .fontColor(Color.White) + Row({ space: 5 }) { + Button() + .width(80) + .height(40) + .fontColor(Color.White) + Button() + .width(80) + .height(40) + .fontColor(Color.White) + .focusScopePriority('ColumnScope1', FocusPriority.PRIOR) // Column1首次获焦时获焦 + } + Row({ space: 5 }) { + Button() + .width(80) + .height(40) + .fontColor(Color.White) + Button() + .width(80) + .height(40) + .fontColor(Color.White) + } + }.borderWidth(2).borderColor(Color.Green).borderStyle(BorderStyle.Dashed) + } + .focusScopeId('ColumnScope1') + Column({ space: 5 }) { // 标记为Column2 + TextInput({placeholder: 'input', text: this.inputValue}) + .onChange((value: string) => { + this.inputValue = value; + }) + .width(156) + Button('Group3') + .width(165) + .height(40) + .fontColor(Color.White) + Row({ space: 5 }) { + Button() + .width(80) + .height(40) + .fontColor(Color.White) + Button() + .width(80) + .height(40) + .fontColor(Color.White) + } + Button() + .width(165) + .height(40) + .fontColor(Color.White) + .focusScopePriority('ColumnScope2', FocusPriority.PREVIOUS) // Column2获焦时获焦 + Row({ space: 5 }) { + Button() + .width(80) + .height(40) + .fontColor(Color.White) + Button() + .width(80) + .height(40) + .fontColor(Color.White) + } + Button() + .width(165) + .height(40) + .fontColor(Color.White) + Row({ space: 5 }) { + Button() + .width(80) + .height(40) + .fontColor(Color.White) + Button() + .width(80) + .height(40) + .fontColor(Color.White) + } + }.borderWidth(2).borderColor(Color.Orange).borderStyle(BorderStyle.Dashed) + .focusScopeId('ColumnScope2', true) // Column2为焦点组 + }.alignItems(VerticalAlign.Top) + } + + } + .width('100%') + .height('100%') + .padding({ left: 12, right: 12 }) + } + .backgroundColor('#f1f2f3') + .title($r('app.string.Focus_FocusScopePriority_title')) + } +} +// [End focus_scope_navigation] \ No newline at end of file diff --git a/ArkUISample/EventProject/entry/src/main/ets/pages/focus/FocusStyle.ets b/ArkUISample/EventProject/entry/src/main/ets/pages/focus/FocusStyle.ets new file mode 100644 index 000000000..2841736de --- /dev/null +++ b/ArkUISample/EventProject/entry/src/main/ets/pages/focus/FocusStyle.ets @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2025 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 { KeyCode } from '@kit.InputKit'; +import { ColorMetrics, LengthMetrics } from '@kit.ArkUI'; + +// [Start focus_style_manage] +@Entry +@Component +export struct FocusStyle { + + build() { + NavDestination() { + Column({ space: 12 }) { + + Column({ space: 30 }) { + Button('small black focus box') + .focusBox({ + margin: new LengthMetrics(0), + strokeColor: ColorMetrics.rgba(0, 0, 0), + }) + Button('large red focus box') + .focusBox({ + margin: LengthMetrics.px(20), + strokeColor: ColorMetrics.rgba(255, 0, 0), + strokeWidth: LengthMetrics.px(10) + }) + } + .alignItems(HorizontalAlign.Center) + .width('100%') + + } + .width('100%') + .height('100%') + .padding({ left: 12, right: 12 }) + } + .backgroundColor('#f1f2f3') + .title($r('app.string.Focus_FocusStyle_title')) + } +} +// [End focus_style_manage] \ No newline at end of file diff --git a/ArkUISample/EventProject/entry/src/main/ets/pages/focus/Focusable.ets b/ArkUISample/EventProject/entry/src/main/ets/pages/focus/Focusable.ets new file mode 100644 index 000000000..27a7def39 --- /dev/null +++ b/ArkUISample/EventProject/entry/src/main/ets/pages/focus/Focusable.ets @@ -0,0 +1,113 @@ +/* + * Copyright (c) 2025 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 { KeyCode } from '@kit.InputKit'; + +// [Start dynamic_focus_control_manage] +@Entry +@Component +export struct FocusableExample { + @State textFocusable: boolean = true; + @State textEnabled: boolean = true; + @State color1: Color = Color.Yellow; + @State color2: Color = Color.Yellow; + @State color3: Color = Color.Yellow; + + build() { + NavDestination() { + Column({ space: 12 }) { + + Text($r('app.string.Focus_Focusable_text')) + .fontSize(14) + .fontColor('#666') + Column({ space: 5 }) { + Text('Default Text') // 第一个Text组件未设置focusable属性,默认不可获焦 + .borderColor(this.color1) + .borderWidth(2) + .width(300) + .height(70) + .onFocus(() => { + this.color1 = Color.Blue; + }) + .onBlur(() => { + this.color1 = Color.Yellow; + }) + Divider() + + Text('focusable: ' + this.textFocusable) // 第二个Text设置了focusable初始为true,focusableOnTouch为true + .borderColor(this.color2) + .borderWidth(2) + .width(300) + .height(70) + .focusable(this.textFocusable) + .focusOnTouch(true) + .onFocus(() => { + this.color2 = Color.Blue; + }) + .onBlur(() => { + this.color2 = Color.Yellow; + }) + + Text('enabled: ' + this.textEnabled) // 第三个Text设置了focusable为true,enabled初始为true + .borderColor(this.color3) + .borderWidth(2) + .width(300) + .height(70) + .focusable(true) + .enabled(this.textEnabled) + .focusOnTouch(true) + .onFocus(() => { + this.color3 = Color.Blue; + }) + .onBlur(() => { + this.color3 = Color.Yellow; + }) + + Divider() + + Row() { + Button('Button1') + .width(140).height(70) + Button('Button2') + .width(160).height(70) + } + + Divider() + Button('Button3') + .width(300).height(70) + + Divider() + }.width('100%').justifyContent(FlexAlign.Center) + .onKeyEvent((e) => { + // 绑定onKeyEvent,在该Column组件获焦时,按下'F'键,可将第二个Text的focusable置反 + if (e.keyCode === 2022 && e.type === KeyType.Down) { + this.textFocusable = !this.textFocusable; + } + // 绑定onKeyEvent,在该Column组件获焦时,按下'G'键,可将第三个Text的enabled置反 + if (e.keyCode === 2023 && e.type === KeyType.Down) { + this.textEnabled = !this.textEnabled; + } + }) + + } + .width('100%') + .height('100%') + .padding({ left: 12, right: 12 }) + } + .backgroundColor('#f1f2f3') + .title($r('app.string.Focus_Focusable_title')) + } +} +// [End dynamic_focus_control_manage] \ No newline at end of file diff --git a/ArkUISample/EventProject/entry/src/main/ets/pages/focus/Index.ets b/ArkUISample/EventProject/entry/src/main/ets/pages/focus/Index.ets new file mode 100644 index 000000000..af6f9d063 --- /dev/null +++ b/ArkUISample/EventProject/entry/src/main/ets/pages/focus/Index.ets @@ -0,0 +1,125 @@ +/* + * Copyright (c) 2025 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 { CompletedRoutableCard } from '../../common/Card'; +import { Route } from '../../common/Route'; +import { DefaultFocus } from './DefaultFocus'; +import { FocusableExample } from './Focusable'; +import { FocusAndClick } from './FocusAndClick'; +import { FocusControl } from './FocusController'; +import { FocusPrioritySample } from './FocusPriority'; +import { FocusScopePriority } from './FocusScopePriority'; +import { FocusStyle } from './FocusStyle'; +import { OnFocusBlur } from './onFocusBlur'; +import resource from '../../common/resource'; + + +export const Focus_ROUTE_PREFIX: string = 'Focus_ROUTE_PREFIX'; + +const routes: Route[] = [ + { + name: `${Focus_ROUTE_PREFIX}/onFocusBlur`, + title: resource.resourceToString($r('app.string.Focus_Index_onFocusBlur_title')), + description: resource.resourceToString($r('app.string.Focus_Index_onFocusBlur_description')), + }, + { + name: `${Focus_ROUTE_PREFIX}/FocusableExample`, + title: resource.resourceToString($r('app.string.Focus_Index_FocusableExample_title1')), + description: resource.resourceToString($r('app.string.Focus_Index_FocusableExample_description1')), + }, + { + name: `${Focus_ROUTE_PREFIX}/FocusableExample`, + title: resource.resourceToString($r('app.string.Focus_Index_FocusableExample_title2')), + description: resource.resourceToString($r('app.string.Focus_Index_FocusableExample_description2')), + }, + { + name: `${Focus_ROUTE_PREFIX}/FocusableExample`, + title: resource.resourceToString($r('app.string.Focus_Index_FocusableExample_title3')), + description: resource.resourceToString($r('app.string.Focus_Index_FocusableExample_description3')), + }, + { + name: `${Focus_ROUTE_PREFIX}/FocusStyle`, + title: resource.resourceToString($r('app.string.Focus_Index_FocusStyle_title')), + description: resource.resourceToString($r('app.string.Focus_Index_FocusStyle_description')), + }, + { + name: `${Focus_ROUTE_PREFIX}/FocusControl`, + title: resource.resourceToString($r('app.string.Focus_Index_FocusControl_title')), + description: resource.resourceToString($r('app.string.Focus_Index_FocusControl_description')), + }, + { + name: `${Focus_ROUTE_PREFIX}/FocusScopePriority`, + title: resource.resourceToString($r('app.string.Focus_Index_FocusScopePriority_title')), + description: resource.resourceToString($r('app.string.Focus_Index_FocusScopePriority_description')), + }, + { + name: `${Focus_ROUTE_PREFIX}/FocusAndClick`, + title: resource.resourceToString($r('app.string.Focus_Index_FocusAndClick_title')), + description: resource.resourceToString($r('app.string.Focus_Index_FocusAndClick_description')), + } +] + +@Builder +export function FocusDestination(name: string) { + if (name === Focus_ROUTE_PREFIX) { + FocusExample(); + } else if (name === routes[0].name) { + OnFocusBlur(); + } else if (name === routes[1].name) { + FocusableExample(); + } else if (name === routes[2].name) { + DefaultFocus(); + } else if (name === routes[3].name) { + FocusPrioritySample(); + } else if (name === routes[4].name) { + FocusStyle(); + } else if (name === routes[5].name) { + FocusControl(); + } else if (name === routes[6].name) { + FocusScopePriority(); + } else if (name === routes[7].name) { + FocusAndClick(); + } +} + +@Entry +@Component +struct FocusExample { + @Consume pathStack: NavPathStack; + + build() { + NavDestination() { + List({ space: 12 }) { + ForEach(routes, (route: Route) => { + ListItem() { + CompletedRoutableCard({ title: route.title, description: route.description }) + } + .width('100%') + .onClick(() => { + this.pathStack.pushPath({ name: route.name }) + }) + }) + } + .contentStartOffset(20) + .padding({ left: 16, right: 16 }) + } + .backgroundColor('#f1f3f5') + .title('', { + backgroundBlurStyle: BlurStyle.COMPONENT_THICK, + barStyle: BarStyle.STACK + }) + .title($r('app.string.Focus_Index_title')) + } +} \ No newline at end of file diff --git a/ArkUISample/EventProject/entry/src/main/ets/pages/focus/onFocusBlur.ets b/ArkUISample/EventProject/entry/src/main/ets/pages/focus/onFocusBlur.ets new file mode 100644 index 000000000..4f993f6be --- /dev/null +++ b/ArkUISample/EventProject/entry/src/main/ets/pages/focus/onFocusBlur.ets @@ -0,0 +1,84 @@ +/* + * Copyright (c) 2025 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 { KeyCode } from '@kit.InputKit'; + +// [Start focus_dynamic_reflect] +@Entry +@Component +export struct OnFocusBlur { + @State oneButtonColor: Color = Color.Gray; + @State twoButtonColor: Color = Color.Gray; + @State threeButtonColor: Color = Color.Gray; + + build() { + NavDestination() { + Column({ space: 12 }) { + + Column({ space: 20 }) { + // 通过外接键盘的上下键可以让焦点在三个按钮间移动,按钮获焦时颜色变化,失焦时变回原背景色 + Button('First Button') + .width(260) + .height(70) + .backgroundColor(this.oneButtonColor) + .fontColor(Color.Black) + // 监听第一个组件的获焦事件,获焦后改变颜色 + .onFocus(() => { + this.oneButtonColor = Color.Green; + }) + // 监听第一个组件的失焦事件,失焦后改变颜色 + .onBlur(() => { + this.oneButtonColor = Color.Gray; + }) + + Button('Second Button') + .width(260) + .height(70) + .backgroundColor(this.twoButtonColor) + .fontColor(Color.Black) + // 监听第二个组件的获焦事件,获焦后改变颜色 + .onFocus(() => { + this.twoButtonColor = Color.Green; + }) + // 监听第二个组件的失焦事件,失焦后改变颜色 + .onBlur(() => { + this.twoButtonColor = Color.Grey; + }) + + Button('Third Button') + .width(260) + .height(70) + .backgroundColor(this.threeButtonColor) + .fontColor(Color.Black) + // 监听第三个组件的获焦事件,获焦后改变颜色 + .onFocus(() => { + this.threeButtonColor = Color.Green; + }) + // 监听第三个组件的失焦事件,失焦后改变颜色 + .onBlur(() => { + this.threeButtonColor = Color.Gray; + }) + }.width('100%').margin({ top: 20 }) + + } + .width('100%') + .height('100%') + .padding({ left: 12, right: 12 }) + } + .backgroundColor('#f1f2f3') + .title($r('app.string.Focus_OnFocusBlur_title')) + } +} +// [End focus_dynamic_reflect] \ No newline at end of file diff --git a/ArkUISample/EventProject/entry/src/main/ets/pages/gesturejudge/GestureJudge.ets b/ArkUISample/EventProject/entry/src/main/ets/pages/gesturejudge/GestureJudge.ets new file mode 100644 index 000000000..bce286e8d --- /dev/null +++ b/ArkUISample/EventProject/entry/src/main/ets/pages/gesturejudge/GestureJudge.ets @@ -0,0 +1,171 @@ +/* + * Copyright (c) 2025 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. + */ + +// [Start gesture_judge] +// [Start set_gesture_judge] +@Entry +@Component +export struct GestureJudge { + scroller: Scroller = new Scroller(); + // [StartExclude set_gesture_judge] + scroller2: Scroller = new Scroller(); + private arr: number[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]; + private childRecognizer: GestureRecognizer = new GestureRecognizer(); + private currentRecognizer: GestureRecognizer = new GestureRecognizer(); + private lastOffset: number = 0; + // [EndExclude set_gesture_judge] + + build() { + NavDestination() { + Column({ space: 12 }) { + Text($r('app.string.gesture_GestureJudge_text')) + .fontSize(14) + .fontColor('#666') + Stack({ alignContent: Alignment.TopStart }) { + Scroll(this.scroller) { // 外部滚动容器 + Column() { + Text('Scroll Area') + .width('90%') + .height(150) + .backgroundColor(0xFFFFFF) + .borderRadius(15) + .fontSize(16) + .textAlign(TextAlign.Center) + .margin({ top: 10 }) + Scroll(this.scroller2) { // 内部滚动容器 + Column() { + Text('Scroll Area2') + .width('90%') + .height(150) + .backgroundColor(0xFFFFFF) + .borderRadius(15) + .fontSize(16) + .textAlign(TextAlign.Center) + .margin({ top: 10 }) + Column() { + ForEach(this.arr, (item: number) => { + Text(item.toString()) + .width('90%') + .height(150) + .backgroundColor(0xFFFFFF) + .borderRadius(15) + .fontSize(16) + .textAlign(TextAlign.Center) + .margin({ top: 10 }) + }, (item: string) => item) + }.width('100%') + } + } + .id('inner') + .width('100%') + .height(800) + }.width('100%') + } + .id('outer') + .height(600) + .scrollable(ScrollDirection.Vertical) // 滚动方向纵向 + .scrollBar(BarState.On) // 滚动条常驻显示 + .scrollBarColor(Color.Gray) // 滚动条颜色 + .scrollBarWidth(10) // 滚动条宽度 + .edgeEffect(EdgeEffect.None) + .shouldBuiltInRecognizerParallelWith((current: GestureRecognizer, others: Array) => { + for (let i = 0; i < others.length; i++) { + let target = others[i].getEventTargetInfo(); + if (target.getId() == 'inner' && others[i].isBuiltIn() && + others[i].getType() == GestureControl.GestureType.PAN_GESTURE) { // 找到将要组成并行手势的识别器 + this.currentRecognizer = current; // 保存当前组件的识别器 + this.childRecognizer = others[i]; // 保存将要组成并行手势的识别器 + return others[i]; // 返回和当前手势将要组成并行手势的识别器 + } + } + return undefined; + }) + .onGestureRecognizerJudgeBegin((event: BaseGestureEvent, current: GestureRecognizer, + others: Array) => { // 在识别器即将要成功时,根据当前组件状态,设置识别器使能状态 + let target = current.getEventTargetInfo(); + if (target.getId() == 'outer' && current.isBuiltIn() && + current.getType() == GestureControl.GestureType.PAN_GESTURE) { + for (let i = 0; i < others.length; i++) { + let target = others[i].getEventTargetInfo() as ScrollableTargetInfo; + if (target instanceof ScrollableTargetInfo && target.getId() == 'inner') { // 找到响应链上对应并行的识别器 + let panEvent = event as PanGestureEvent; + this.childRecognizer.setEnabled(true); + this.currentRecognizer.setEnabled(false); + if (target.isEnd()) { // 根据当前组件状态以及移动方向动态控制识别器使能状态 + if (panEvent && panEvent.offsetY < 0) { + this.childRecognizer.setEnabled(false); + this.currentRecognizer.setEnabled(true); + } + } else if (target.isBegin()) { + if (panEvent.offsetY > 0) { + this.childRecognizer.setEnabled(false); + this.currentRecognizer.setEnabled(true); + } + } + } + } + } + return GestureJudgeResult.CONTINUE; + }) + // [StartExclude set_gesture_judge] + .parallelGesture( // 绑定一个Pan手势作为动态控制器 + PanGesture() + .onActionUpdate((event: GestureEvent) => { + if (this.childRecognizer.getState() != GestureRecognizerState.SUCCESSFUL || + this.currentRecognizer.getState() != GestureRecognizerState.SUCCESSFUL) { + // 如果识别器状态不是SUCCESSFUL,则不做控制 + return; + } + let target = this.childRecognizer.getEventTargetInfo() as ScrollableTargetInfo; + let currentTarget = this.currentRecognizer.getEventTargetInfo() as ScrollableTargetInfo; + if (target instanceof ScrollableTargetInfo && currentTarget instanceof ScrollableTargetInfo) { + this.childRecognizer.setEnabled(true); + this.currentRecognizer.setEnabled(false); + if (target.isEnd()) { // 在移动过程中实时根据当前组件状态,控制识别器的开闭状态 + if ((event.offsetY - this.lastOffset) < 0) { + this.childRecognizer.setEnabled(false); + if (currentTarget.isEnd()) { + this.currentRecognizer.setEnabled(false); + } else { + this.currentRecognizer.setEnabled(true); + } + } + } else if (target.isBegin()) { + if ((event.offsetY - this.lastOffset) > 0) { + this.childRecognizer.setEnabled(false); + if (currentTarget.isBegin()) { + this.currentRecognizer.setEnabled(false); + } else { + this.currentRecognizer.setEnabled(true); + } + } + } + } + this.lastOffset = event.offsetY; + }) + ) + // [EndExclude set_gesture_judge] + }.width('100%').height('90%').backgroundColor(0xDCDCDC) + } + .width('100%') + .height('100%') + .padding({ left: 12, right: 12 }) + } + .backgroundColor('#f1f2f3') + .title($r('app.string.gesture_GestureJudge_title')) + } +} +// [End set_gesture_judge] +// [End gesture_judge] \ No newline at end of file diff --git a/ArkUISample/EventProject/entry/src/main/ets/pages/gesturejudge/Index.ets b/ArkUISample/EventProject/entry/src/main/ets/pages/gesturejudge/Index.ets new file mode 100644 index 000000000..b63a44b1a --- /dev/null +++ b/ArkUISample/EventProject/entry/src/main/ets/pages/gesturejudge/Index.ets @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2025 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 { CompletedRoutableCard } from '../../common/Card'; +import { Route } from '../../common/Route'; +import { GestureJudge } from './GestureJudge'; +import resource from '../../common/resource'; + + +export const GestureJudge_ROUTE_PREFIX: string = 'GestureJudge_ROUTE_PREFIX'; + +const routes: Route[] = [ + { + name: `${GestureJudge_ROUTE_PREFIX}/GestureJudge`, + title: resource.resourceToString($r('app.string.gesture_Index_GestureJudge_title')), + description: resource.resourceToString($r('app.string.gesture_Index_GestureJudge_description')), + } +] + +@Builder +export function GestureJudgeDestination(name: string) { + if (name === GestureJudge_ROUTE_PREFIX) { + GestureJudgeExample(); + } else if (name === routes[0].name) { + GestureJudge(); + } +} + +@Entry +@Component +struct GestureJudgeExample { + @Consume pathStack: NavPathStack; + + build() { + NavDestination() { + List({ space: 12 }) { + ForEach(routes, (route: Route) => { + ListItem() { + CompletedRoutableCard({ title: route.title, description: route.description }) + } + .width('100%') + .onClick(() => { + this.pathStack.pushPath({ name: route.name }); + }) + }) + } + .contentStartOffset(20) + .padding({ left: 16, right: 16 }) + } + .backgroundColor('#f1f3f5') + .title('', { + backgroundBlurStyle: BlurStyle.COMPONENT_THICK, + barStyle: BarStyle.STACK + }) + .title($r('app.string.gesture_Index_title')) + } +} \ No newline at end of file diff --git a/ArkUISample/EventProject/entry/src/main/ets/pages/groupgesture/Exclusive.ets b/ArkUISample/EventProject/entry/src/main/ets/pages/groupgesture/Exclusive.ets new file mode 100644 index 000000000..a72dfbf76 --- /dev/null +++ b/ArkUISample/EventProject/entry/src/main/ets/pages/groupgesture/Exclusive.ets @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2025 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. + */ + +// [Start exclusive_recognition_gesture] +@Entry +@Component +export struct Exclusive { + @State count1: number = 0; + @State count2: number = 0; + + build() { + NavDestination() { + Column({ space: 12 }) { + Text($r('app.string.groupgesture_Exclusive_text')) + .fontSize(14) + .fontColor('#666') + Column() { + Text('Exclusive gesture\n' + 'tapGesture count is 1:' + this.count1 + '\ntapGesture count is 2:' + this.count2 + '\n') + .fontSize(28) + } + .height(200) + .width('100%') + //以下组合手势为互斥并别,单击手势识别成功后,双击手势会识别失败 + .gesture( + GestureGroup(GestureMode.Exclusive, + TapGesture({ count: 1 }) + .onAction(() => { + this.count1++; + }), + TapGesture({ count: 2 }) + .onAction(() => { + this.count2++; + }) + ) + ) + } + .width('100%') + .height('100%') + .padding({ left: 12, right: 12 }) + } + .backgroundColor('#f1f2f3') + .title($r('app.string.groupgesture_Exclusive_title')) + } +} +// [End exclusive_recognition_gesture] \ No newline at end of file diff --git a/ArkUISample/EventProject/entry/src/main/ets/pages/groupgesture/Index.ets b/ArkUISample/EventProject/entry/src/main/ets/pages/groupgesture/Index.ets new file mode 100644 index 000000000..f11dc4be9 --- /dev/null +++ b/ArkUISample/EventProject/entry/src/main/ets/pages/groupgesture/Index.ets @@ -0,0 +1,84 @@ +/* + * Copyright (c) 2025 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 { CompletedRoutableCard } from '../../common/Card'; +import { Route } from '../../common/Route'; +import { Exclusive } from './Exclusive'; +import { Parallel } from './Parallel'; +import { Sequence } from './Sequence'; +import resource from '../../common/resource'; + +export const GroupGesture_ROUTE_PREFIX: string = 'GroupGestureExample'; + +const routes: Route[] = [ + { + name: `${GroupGesture_ROUTE_PREFIX}/Sequence`, + title: resource.resourceToString($r('app.string.groupgesture_Index_Sequence_title')), + description: resource.resourceToString($r('app.string.groupgesture_Index_Sequence_description')), + }, + { + name: `${GroupGesture_ROUTE_PREFIX}/Parallel`, + title: resource.resourceToString($r('app.string.groupgesture_Index_Parallel_title')), + description: resource.resourceToString($r('app.string.groupgesture_Index_Parallel_description')), + }, + { + name: `${GroupGesture_ROUTE_PREFIX}/Exclusive`, + title: resource.resourceToString($r('app.string.groupgesture_Index_Exclusive_title')), + description: resource.resourceToString($r('app.string.groupgesture_Index_Exclusive_description')), + } +] + +@Builder +export function GroupGestureDestination(name: string) { + if (name === GroupGesture_ROUTE_PREFIX) { + GroupGestureExample(); + } else if (name === routes[0].name) { + Sequence(); + } else if (name === routes[1].name) { + Parallel(); + } else if (name === routes[2].name) { + Exclusive(); + } +} + +@Entry +@Component +struct GroupGestureExample { + @Consume pathStack: NavPathStack; + + build() { + NavDestination() { + List({ space: 12 }) { + ForEach(routes, (route: Route) => { + ListItem() { + CompletedRoutableCard({ title: route.title, description: route.description }) + } + .width('100%') + .onClick(() => { + this.pathStack.pushPath({ name: route.name }); + }) + }) + } + .contentStartOffset(20) + .padding({ left: 16, right: 16 }) + } + .backgroundColor('#f1f3f5') + .title('', { + backgroundBlurStyle: BlurStyle.COMPONENT_THICK, + barStyle: BarStyle.STACK + }) + .title($r('app.string.groupgesture_Index_title')) + } +} \ No newline at end of file diff --git a/ArkUISample/EventProject/entry/src/main/ets/pages/groupgesture/Parallel.ets b/ArkUISample/EventProject/entry/src/main/ets/pages/groupgesture/Parallel.ets new file mode 100644 index 000000000..e08c5b8b0 --- /dev/null +++ b/ArkUISample/EventProject/entry/src/main/ets/pages/groupgesture/Parallel.ets @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2025 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. + */ + +// [Start parallel_recognition_gesture] +@Entry +@Component +export struct Parallel { + @State count1: number = 0; + @State count2: number = 0; + + build() { + NavDestination() { + Column({ space: 12 }) { + Text($r('app.string.groupgesture_Parallel_text')) + .fontSize(14) + .fontColor('#666') + Column() { + Text('Parallel gesture\n' + 'tapGesture count is 1:' + this.count1 + '\ntapGesture count is 2:' + this.count2 + '\n') + .fontSize(28) + } + .height(200) + .width('100%') + // 以下组合手势为并行并别,单击手势识别成功后,若在规定时间内再次点击,双击手势也会识别成功 + .gesture( + GestureGroup(GestureMode.Parallel, + TapGesture({ count: 1 }) + .onAction(() => { + this.count1++; + }), + TapGesture({ count: 2 }) + .onAction(() => { + this.count2++; + }) + ) + ) + } + .width('100%') + .height('100%') + .padding({ left: 12, right: 12 }) + } + .backgroundColor('#f1f2f3') + .title($r('app.string.groupgesture_Parallel_title')) + } +} +// [End parallel_recognition_gesture] \ No newline at end of file diff --git a/ArkUISample/EventProject/entry/src/main/ets/pages/groupgesture/Sequence.ets b/ArkUISample/EventProject/entry/src/main/ets/pages/groupgesture/Sequence.ets new file mode 100644 index 000000000..9f88c3236 --- /dev/null +++ b/ArkUISample/EventProject/entry/src/main/ets/pages/groupgesture/Sequence.ets @@ -0,0 +1,93 @@ +/* + * Copyright (c) 2025 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. + */ + +// [Start sequence_recognition_gesture] +@Entry +@Component +export struct Sequence { + @State offsetX: number = 0; + @State offsetY: number = 0; + @State count: number = 0; + @State positionX: number = 0; + @State positionY: number = 0; + @State borderStyles: BorderStyle = BorderStyle.Solid; + + build() { + NavDestination() { + Column({ space: 12 }) { + Text($r('app.string.groupgesture_Sequence_text')) + .fontSize(14) + .fontColor('#666') + Column() { + Text('sequence gesture\n' + 'LongPress onAction:' + this.count + '\nPanGesture offset:\nX: ' + this.offsetX + '\n' + 'Y: ' + this.offsetY) + .fontSize(28) + }.margin(10) + .borderWidth(1) + // 绑定translate属性可以实现组件的位置移动 + .translate({ x: this.offsetX, y: this.offsetY, z: 0 }) + .height(250) + .width(300) + // 以下组合手势为顺序识别,当长按手势事件未正常触发时不会触发拖动手势事件 + .gesture( + // 声明该组合手势的类型为Sequence类型 + GestureGroup(GestureMode.Sequence, + // 该组合手势第一个触发的手势为长按手势,且长按手势可多次响应 + LongPressGesture({ repeat: true }) + // 当长按手势识别成功,增加Text组件上显示的count次数 + .onAction((event: GestureEvent|undefined) => { + if(event){ + if (event.repeat) { + this.count++; + } + } + console.info('LongPress onAction'); + }) + .onActionEnd(() => { + console.info('LongPress end'); + }), + // 当长按之后进行拖动,PanGesture手势被触发 + PanGesture() + .onActionStart(() => { + this.borderStyles = BorderStyle.Dashed; + console.info('pan start'); + }) + // 当该手势被触发时,根据回调获得拖动的距离,修改该组件的位移距离从而实现组件的移动 + .onActionUpdate((event: GestureEvent|undefined) => { + if(event){ + this.offsetX = (this.positionX + event.offsetX); + this.offsetY = this.positionY + event.offsetY; + } + console.info('pan update'); + }) + .onActionEnd(() => { + this.positionX = this.offsetX; + this.positionY = this.offsetY; + this.borderStyles = BorderStyle.Solid; + }) + ) + .onCancel(() => { + console.log('sequence gesture canceled'); + }) + ) + } + .width('100%') + .height('100%') + .padding({ left: 12, right: 12 }) + } + .backgroundColor('#f1f2f3') + .title($r('app.string.groupgesture_Sequence_title')) + } +} +// [End sequence_recognition_gesture] \ No newline at end of file diff --git a/ArkUISample/EventProject/entry/src/main/ets/pages/singlegesture/Index.ets b/ArkUISample/EventProject/entry/src/main/ets/pages/singlegesture/Index.ets new file mode 100644 index 000000000..44b5aa020 --- /dev/null +++ b/ArkUISample/EventProject/entry/src/main/ets/pages/singlegesture/Index.ets @@ -0,0 +1,108 @@ +/* + * Copyright (c) 2025 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 { CompletedRoutableCard } from '../../common/Card'; +import { Route } from '../../common/Route'; +import { LongPress } from './LongPressGesture'; +import { Pan } from './PanGesture'; +import { Pinch } from './PinchGesture'; +import { Rotation } from './RotationGesture'; +import { Swipe } from './SwipeGesture'; +import { Tap } from './TapGesture'; +import resource from '../../common/resource'; + +export const Gesture_ROUTE_PREFIX: string = 'gesture'; + +const routes: Route[] = [ + { + name: `${Gesture_ROUTE_PREFIX}/TapGesture`, + title: resource.resourceToString($r('app.string.singlegesture_Index_TapGesture_title')), + description: resource.resourceToString($r('app.string.singlegesture_Index_TapGesture_description')), + }, + { + name: `${Gesture_ROUTE_PREFIX}/LongPress`, + title: resource.resourceToString($r('app.string.singlegesture_Index_LongPress_title')), + description: resource.resourceToString($r('app.string.singlegesture_Index_LongPress_description')), + }, + { + name: `${Gesture_ROUTE_PREFIX}/Pan`, + title: resource.resourceToString($r('app.string.singlegesture_Index_Pan_title')), + description: resource.resourceToString($r('app.string.singlegesture_Index_Pan_description')), + }, + { + name: `${Gesture_ROUTE_PREFIX}/Pinch`, + title: resource.resourceToString($r('app.string.singlegesture_Index_Pinch_title')), + description: resource.resourceToString($r('app.string.singlegesture_Index_Pinch_description')), + }, + { + name: `${Gesture_ROUTE_PREFIX}/Rotation`, + title: resource.resourceToString($r('app.string.singlegesture_Index_Rotation_title')), + description: resource.resourceToString($r('app.string.singlegesture_Index_Rotation_description')), + }, + { + name: `${Gesture_ROUTE_PREFIX}/Swipe`, + title: resource.resourceToString($r('app.string.singlegesture_Index_Swipe_title')), + description: resource.resourceToString($r('app.string.singlegesture_Index_Swipe_description')), + } +] + +@Builder +export function GestureDestination(name: string) { + if (name === Gesture_ROUTE_PREFIX) { + GestureExample(); + } else if (name === routes[0].name) { + Tap(); + } else if (name === routes[1].name) { + LongPress(); + } else if (name === routes[2].name) { + Pan(); + } else if (name === routes[3].name) { + Pinch(); + } else if (name === routes[4].name) { + Rotation(); + } else if (name === routes[5].name) { + Swipe(); + } +} + +@Entry +@Component +struct GestureExample { + @Consume pathStack: NavPathStack; + + build() { + NavDestination() { + List({ space: 12 }) { + ForEach(routes, (route: Route) => { + ListItem() { + CompletedRoutableCard({ title: route.title, description: route.description }) + } + .width('100%') + .onClick(() => { + this.pathStack.pushPath({ name: route.name }); + }) + }) + } + .contentStartOffset(20) + .padding({ left: 16, right: 16 }) + } + .backgroundColor('#f1f3f5') + .title('', { + backgroundBlurStyle: BlurStyle.COMPONENT_THICK, + barStyle: BarStyle.STACK + }) + .title($r('app.string.singlegesture_Index_title')) + } +} \ No newline at end of file diff --git a/ArkUISample/EventProject/entry/src/main/ets/pages/singlegesture/LongPressGesture.ets b/ArkUISample/EventProject/entry/src/main/ets/pages/singlegesture/LongPressGesture.ets new file mode 100644 index 000000000..ddf02d55f --- /dev/null +++ b/ArkUISample/EventProject/entry/src/main/ets/pages/singlegesture/LongPressGesture.ets @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2025 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. + */ + +// [Start catch_long_press_event] +@Entry +@Component +export struct LongPress { + @State count: number = 0; + + build() { + NavDestination() { + Column({ space: 12 }) { + Column() { + Text('LongPress OnAction:' + this.count).fontSize(28) + .gesture( + // 绑定可以重复触发的LongPressGesture + LongPressGesture({ repeat: true }) + .onAction((event: GestureEvent | undefined) => { + if (event) { + if (event.repeat) { + this.count++; + } + } + }) + .onActionEnd(() => { + this.count = 0; + }) + ) + } + .height(200) + .width(250) + .padding(20) + .border({ width: 3 }) + .margin(30) + } + .width('100%') + .height('100%') + .padding({ left: 12, right: 12 }) + } + .backgroundColor('#f1f2f3') + .title($r('app.string.singlegesture_LongPressGesture_title')) + } +} +// [End catch_long_press_event] \ No newline at end of file diff --git a/ArkUISample/EventProject/entry/src/main/ets/pages/singlegesture/PanGesture.ets b/ArkUISample/EventProject/entry/src/main/ets/pages/singlegesture/PanGesture.ets new file mode 100644 index 000000000..7afb75ff6 --- /dev/null +++ b/ArkUISample/EventProject/entry/src/main/ets/pages/singlegesture/PanGesture.ets @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2025 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. + */ + +// [Start catch_pan_gesture_event] +@Entry +@Component +export struct Pan { + @State offsetX: number = 0; + @State offsetY: number = 0; + @State positionX: number = 0; + @State positionY: number = 0; + + build() { + NavDestination() { + Column({ space: 12 }) { + Column() { + Text('PanGesture Offset:\nX: ' + this.offsetX + '\n' + 'Y: ' + this.offsetY) + .fontSize(28) + .height(200) + .width(300) + .padding(20) + .border({ width: 3 }) + // 在组件上绑定布局位置信息 + .translate({ x: this.offsetX, y: this.offsetY, z: 0 }) + .gesture( + // 绑定拖动手势 + PanGesture() + .onActionStart((event: GestureEvent|undefined) => { + console.info('Pan start'); + }) + // 当触发拖动手势时,根据回调函数修改组件的布局位置信息 + .onActionUpdate((event: GestureEvent|undefined) => { + if(event){ + this.offsetX = this.positionX + event.offsetX; + this.offsetY = this.positionY + event.offsetY; + } + }) + .onActionEnd(() => { + this.positionX = this.offsetX; + this.positionY = this.offsetY; + }) + ) + } + .height(200) + .width(250) + } + .width('100%') + .height('100%') + .padding({ left: 12, right: 12 }) + } + .backgroundColor('#f1f2f3') + .title($r('app.string.singlegesture_PanGesture_title')) + } +} +// [End catch_pan_gesture_event] \ No newline at end of file diff --git a/ArkUISample/EventProject/entry/src/main/ets/pages/singlegesture/PinchGesture.ets b/ArkUISample/EventProject/entry/src/main/ets/pages/singlegesture/PinchGesture.ets new file mode 100644 index 000000000..9d538513c --- /dev/null +++ b/ArkUISample/EventProject/entry/src/main/ets/pages/singlegesture/PinchGesture.ets @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2025 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. + */ + +// [Start catch_pinch_gesture_event] +@Entry +@Component +export struct Pinch { + @State scaleValue: number = 1; + @State pinchValue: number = 1; + @State pinchX: number = 0; + @State pinchY: number = 0; + + build() { + NavDestination() { + Column({ space: 12 }) { + Column() { + Column() { + Text('PinchGesture scale:\n' + this.scaleValue) + Text('PinchGesture center:\n(' + this.pinchX + ',' + this.pinchY + ')') + } + .height(200) + .width(300) + .border({ width: 3 }) + .margin({ top: 100 }) + // 在组件上绑定缩放比例,可以通过修改缩放比例来实现组件的缩小或者放大 + .scale({ x: this.scaleValue, y: this.scaleValue, z: 1 }) + .gesture( + // 在组件上绑定三指触发的捏合手势 + PinchGesture({ fingers: 3 }) + .onActionStart((event: GestureEvent | undefined) => { + console.info('Pinch start'); + })// 当捏合手势触发时,可以通过回调函数获取缩放比例,从而修改组件的缩放比例 + .onActionUpdate((event: GestureEvent | undefined) => { + if (event) { + this.scaleValue = this.pinchValue * event.scale; + this.pinchX = event.pinchCenterX; + this.pinchY = event.pinchCenterY; + } + }) + .onActionEnd(() => { + this.pinchValue = this.scaleValue; + console.info('Pinch end'); + }) + ) + } + } + .width('100%') + .height('100%') + .padding({ left: 12, right: 12 }) + } + .backgroundColor('#f1f2f3') + .title($r('app.string.singlegesture_PinchGesture_title')) + } +} +// [End catch_pinch_gesture_event] \ No newline at end of file diff --git a/ArkUISample/EventProject/entry/src/main/ets/pages/singlegesture/RotationGesture.ets b/ArkUISample/EventProject/entry/src/main/ets/pages/singlegesture/RotationGesture.ets new file mode 100644 index 000000000..89d5775e8 --- /dev/null +++ b/ArkUISample/EventProject/entry/src/main/ets/pages/singlegesture/RotationGesture.ets @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2025 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. + */ + +// [Start catch_rotation_gesture_event] +@Entry +@Component +export struct Rotation { + @State angle: number = 0; + @State rotateValue: number = 0; + + build() { + NavDestination() { + Column({ space: 12 }) { + Column() { + Text('RotationGesture angle:' + this.angle).fontSize(28) + // 在组件上绑定旋转布局,可以通过修改旋转角度来实现组件的旋转 + .rotate({ angle: this.angle }) + .gesture( + RotationGesture() + .onActionStart((event: GestureEvent|undefined) => { + console.info('RotationGesture is onActionStart'); + }) + // 当旋转手势生效时,通过旋转手势的回调函数获取旋转角度,从而修改组件的旋转角度 + .onActionUpdate((event: GestureEvent|undefined) => { + if(event){ + this.angle = this.rotateValue + event.angle; + } + console.info('RotationGesture is onActionEnd'); + }) + // 当旋转结束抬手时,固定组件在旋转结束时的角度 + .onActionEnd(() => { + this.rotateValue = this.angle; + console.info('RotationGesture is onActionEnd'); + }) + .onActionCancel(() => { + console.info('RotationGesture is onActionCancel'); + }) + ) + .height(200) + .width(300) + .padding(20) + .border({ width: 3 }) + .margin(100) + } + } + .width('100%') + .height('100%') + .padding({ left: 12, right: 12 }) + } + .backgroundColor('#f1f2f3') + .title($r('app.string.singlegesture_RotationGesture_title')) + } +} +// [End catch_rotation_gesture_event] \ No newline at end of file diff --git a/ArkUISample/EventProject/entry/src/main/ets/pages/singlegesture/SwipeGesture.ets b/ArkUISample/EventProject/entry/src/main/ets/pages/singlegesture/SwipeGesture.ets new file mode 100644 index 000000000..4b4363855 --- /dev/null +++ b/ArkUISample/EventProject/entry/src/main/ets/pages/singlegesture/SwipeGesture.ets @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2025 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. + */ + +// [Start catch_swipe_gesture_event] +@Entry +@Component +export struct Swipe { + @State rotateAngle: number = 0; + @State speed: number = 1; + + build() { + NavDestination() { + Column({ space: 12 }) { + Column() { + Column() { + Text('SwipeGesture speed\n' + this.speed) + Text('SwipeGesture angle\n' + this.rotateAngle) + } + .border({ width: 3 }) + .width(300) + .height(200) + .margin(100) + // 在Column组件上绑定旋转,通过滑动手势的滑动速度和角度修改旋转的角度 + .rotate({ angle: this.rotateAngle }) + .gesture( + // 绑定滑动手势且限制仅在竖直方向滑动时触发 + SwipeGesture({ direction: SwipeDirection.Vertical }) + // 当滑动手势触发时,获取滑动的速度和角度,实现对组件的布局参数的修改 + .onAction((event: GestureEvent|undefined) => { + if(event){ + this.speed = event.speed; + this.rotateAngle = event.angle; + } + }) + ) + } + } + .width('100%') + .height('100%') + .padding({ left: 12, right: 12 }) + } + .backgroundColor('#f1f2f3') + .title($r('app.string.singlegesture_SwipeGesture_title')) + } +} +// [End catch_swipe_gesture_event] \ No newline at end of file diff --git a/ArkUISample/EventProject/entry/src/main/ets/pages/singlegesture/TapGesture.ets b/ArkUISample/EventProject/entry/src/main/ets/pages/singlegesture/TapGesture.ets new file mode 100644 index 000000000..bc0f24b52 --- /dev/null +++ b/ArkUISample/EventProject/entry/src/main/ets/pages/singlegesture/TapGesture.ets @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2025 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. + */ + +// [Start catch_click_twice_event] +@Entry +@Component +export struct Tap { + @State value: string = ''; + + build() { + NavDestination() { + Column({ space: 12 }) { + Column() { + Text('Click twice').fontSize(28) + .gesture( + // 绑定count为2的TapGesture + TapGesture({ count: 2 }) + .onAction((event: GestureEvent|undefined) => { + if(event){ + this.value = JSON.stringify(event.fingerList[0]); + } + })) + Text(this.value) + } + .height(200) + .width(250) + .padding(20) + .border({ width: 3 }) + .margin(30) + } + .width('100%') + .height('100%') + .padding({ left: 12, right: 12 }) + } + .backgroundColor('#f1f2f3') + .title($r('app.string.singlegesture_TapGesture_title')) + } +} +// [End catch_click_twice_event] \ No newline at end of file diff --git a/ArkUISample/EventProject/entry/src/main/module.json5 b/ArkUISample/EventProject/entry/src/main/module.json5 new file mode 100644 index 000000000..4144486d1 --- /dev/null +++ b/ArkUISample/EventProject/entry/src/main/module.json5 @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2025 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. + */ + +{ + "module": { + "name": "entry", + "type": "entry", + "description": "$string:module_desc", + "mainElement": "EntryAbility", + "deviceTypes": [ + "default", + "tablet" + ], + "deliveryWithInstall": true, + "installationFree": false, + "pages": "$profile:main_pages", + "abilities": [ + { + "name": "EntryAbility", + "srcEntry": "./ets/entryability/EntryAbility.ets", + "description": "$string:EntryAbility_desc", + "icon": "$media:layered_image", + "label": "$string:EntryAbility_label", + "startWindowIcon": "$media:startIcon", + "startWindowBackground": "$color:start_window_background", + "exported": true, + "skills": [ + { + "entities": [ + "entity.system.home" + ], + "actions": [ + "action.system.home" + ] + } + ] + } + ], + "extensionAbilities": [ + { + "name": "EntryBackupAbility", + "srcEntry": "./ets/entrybackupability/EntryBackupAbility.ets", + "type": "backup", + "exported": false, + "metadata": [ + { + "name": "ohos.extension.backup", + "resource": "$profile:backup_config" + } + ] + } + ] + } +} \ No newline at end of file diff --git a/ArkUISample/EventProject/entry/src/main/resources/base/element/color.json b/ArkUISample/EventProject/entry/src/main/resources/base/element/color.json new file mode 100644 index 000000000..3c712962d --- /dev/null +++ b/ArkUISample/EventProject/entry/src/main/resources/base/element/color.json @@ -0,0 +1,8 @@ +{ + "color": [ + { + "name": "start_window_background", + "value": "#FFFFFF" + } + ] +} \ No newline at end of file diff --git a/ArkUISample/EventProject/entry/src/main/resources/base/element/string.json b/ArkUISample/EventProject/entry/src/main/resources/base/element/string.json new file mode 100644 index 000000000..145f10cab --- /dev/null +++ b/ArkUISample/EventProject/entry/src/main/resources/base/element/string.json @@ -0,0 +1,420 @@ +{ + "string": [ + { + "name": "module_desc", + "value": "module description" + }, + { + "name": "EntryAbility_desc", + "value": "description" + }, + { + "name": "EntryAbility_label", + "value": "EventProject" + }, + { + "name": "HoverEffectSample_title", + "value": "悬浮状态" + }, + { + "name": "Hover_Event", + "value": "悬浮事件" + }, + { + "name": "Hover_Description", + "value": "鼠标悬浮事件回调。参数isHover类型为boolean,表示鼠标进入组件或离开组件。该事件不支持自定义冒泡设置,默认父子冒泡" + }, + { + "name": "Mouse_Event", + "value": "鼠标事件" + }, + { + "name": "Mouse_Description", + "value": "鼠标事件回调。绑定该API的组件每当鼠标指针在该组件内产生行为(MouseAction)时,触发事件回调,参数为MouseEvent对象,表示触发此次的鼠标事件。该事件支持自定义冒泡设置,默认父子冒泡。常用于开发者自定义的鼠标行为逻辑处理。" + }, + { + "name": "Hover_Effect", + "value": "鼠标悬浮态效果" + }, + { + "name": "Hover_Effect_Description", + "value": "鼠标悬浮态效果设置的通用属性。参数类型为HoverEffect,HoverEffect提供的Auto、Scale、Highlight效果均为固定效果,开发者无法自定义设置效果参数。" + }, + { + "name": "Key_Event", + "value": "按键事件" + }, + { + "name": "Key_Description", + "value": "按键事件由外设键盘等设备触发,经驱动和多模处理转换后发送给当前获焦的窗口,窗口获取到事件后,会尝试分发三次事件。" + }, + { + "name": "Key_PreIme", + "value": "屏蔽" + }, + { + "name": "Key_PreIme_Description", + "value": "使用OnKeyPreIme屏蔽在输入框中使用方向左键。" + }, + { + "name": "Device_index_title", + "value": "键鼠事件" + }, + { + "name": "Device_OnHover_title", + "value": "悬浮事件" + }, + { + "name": "Device_OnKey_title", + "value": "按键事件" + }, + { + "name": "Device_OnKeyPreIme_title", + "value": "按键事件" + }, + { + "name": "Device_OnMouse_title", + "value": "鼠标事件" + }, + { + "name": "Drag_DefaultDrag_title", + "value": "通用拖拽" + }, + { + "name": "Drag_Index_DefaultDrag_title", + "value": "通用拖拽" + }, + { + "name": "Drag_Index_DefaultDrag_description", + "value": "组件使能拖拽。设置draggable属性为true,并配置onDragStart回调函数。" + }, + { + "name": "Drag_Index_MoreDrag_title", + "value": "多选拖拽" + }, + { + "name": "Drag_Index_MoreDrag_description", + "value": "从API version 12开始,Grid组件和List组件中的GridItem和ListItem组件支持多选与拖拽功能。目前,仅支持onDragStart的触发方式。" + }, + { + "name": "Drag_Index_title", + "value": "拖拽事件" + }, + { + "name": "Drag_MoreDrag_title", + "value": "多选拖拽" + }, + { + "name": "Focus_DefaultFocus_title", + "value": "默认焦点" + }, + { + "name": "Focus_Focusable_title", + "value": "设置组件是否可获焦" + }, + { + "name": "Focus_Focusable_text", + "value": "当某组件处于获焦状态时,将其的focusable属性或enabled属性设置为false,会自动使该组件失焦,然后焦点按照走焦规范将焦点转移给其他组件。" + }, + { + "name": "Focus_FocusAndClick_title", + "value": "焦点与按键事件" + }, + { + "name": "Focus_FocusController_title", + "value": "主动获焦/失焦" + }, + { + "name": "Focus_FocusPriority_title", + "value": "容器默认焦点" + }, + { + "name": "Focus_FocusScopePriority_title", + "value": "焦点组与获焦优先级" + }, + { + "name": "Focus_FocusStyle_title", + "value": "焦点样式" + }, + { + "name": "Focus_Index_title", + "value": "焦点事件" + }, + { + "name": "Focus_Index_onFocusBlur_title", + "value": "获焦失焦" + }, + { + "name": "Focus_Index_FocusableExample_title1", + "value": "设置是否可获焦" + }, + { + "name": "Focus_Index_FocusableExample_title2", + "value": "页面的默认焦点" + }, + { + "name": "Focus_Index_FocusableExample_title3", + "value": "容器的默认焦点" + }, + { + "name": "Focus_Index_FocusStyle_title", + "value": "焦点样式" + }, + { + "name": "Focus_Index_FocusControl_title", + "value": "主动获焦/失焦" + }, + { + "name": "Focus_Index_FocusScopePriority_title", + "value": "焦点组与获焦优先级" + }, + { + "name": "Focus_Index_FocusAndClick_title", + "value": "焦点与按键事件" + }, + { + "name": "Focus_Index_onFocusBlur_description", + "value": "获焦事件回调,绑定该接口的组件获焦时,回调响应。失焦事件回调,绑定该接口的组件失焦时,回调响应。" + }, + { + "name": "Focus_Index_FocusableExample_description1", + "value": "设置组件是否可获焦。" + }, + { + "name": "Focus_Index_FocusableExample_description2", + "value": "设置当前组件是否为当前页面上的默认焦点。" + }, + { + "name": "Focus_Index_FocusableExample_description3", + "value": "FocusPriority是用于指定某个容器首次获焦时其子节点的获焦优先级。" + }, + { + "name": "Focus_Index_FocusStyle_description", + "value": "设置当前组件系统焦点框样式。" + }, + { + "name": "Focus_Index_FocusControl_description", + "value": "使用FocusController中的方法。更推荐使用FocusController中的requestFocus主动获取焦点。" + }, + { + "name": "Focus_Index_FocusScopePriority_description", + "value": "focusScopePriority(scopeId: string, priority?: FocusPriority)设置当前组件在指定容器内获焦的优先级。需要配合focusScopeId一起使用。" + }, + { + "name": "Focus_Index_FocusAndClick_description", + "value": "当组件获焦且存在点击事件(onClick)或单指单击事件(TapGesture)时,回车和空格会触发对应的事件回调。" + }, + { + "name": "Focus_OnFocusBlur_title", + "value": "获焦/失焦事件" + }, + { + "name": "gesture_GestureJudge_text", + "value": "以下示例中,Image和Stack两个组件位于同一区域。长按Stack组件的上半部分可触发挂载在Stack组件上的长按手势,长按Stack组件的下半部分则会响应Image组件的拖拽操作。" + }, + { + "name": "gesture_GestureJudge_title", + "value": "手势拦截" + }, + { + "name": "gesture_Index_title", + "value": "手势拦截" + }, + { + "name": "gesture_Index_GestureJudge_title", + "value": "手势拦截" + }, + { + "name": "gesture_Index_GestureJudge_description", + "value": "手势拦截主要用于确保手势按需执行,有效解决手势冲突问题。典型应用场景包括:嵌套滚动、通过过滤组件响应手势的范围来优化交互体验。手势拦截主要采用手势触发控制和手势响应控制两种方式实现。" + }, + { + "name": "groupgesture_Exclusive_text", + "value": "以在一个Column组件上绑定单击手势和双击手势组合而成的互斥识别组合手势为例。若先绑定单击手势后绑定双击手势,由于单击手势只需要一次点击即可触发而双击手势需要两次,每次的点击事件均被单击手势消费而不能积累成双击手势,所以双击手势无法触发。若先绑定双击手势后绑定单击手势,则触发双击手势不触发单击手势。" + }, + { + "name": "groupgesture_Exclusive_title", + "value": "互斥识别" + }, + { + "name": "groupgesture_Parallel_text", + "value": "以在一个Column组件上绑定点击手势和双击手势组成的并行识别手势为例,由于单击手势和双击手势是并行识别,因此两个手势可以同时进行识别,二者互不干涉。" + }, + { + "name": "groupgesture_Parallel_title", + "value": "并行识别" + }, + { + "name": "groupgesture_Sequence_text", + "value": "'在一个Column组件上绑定了translate属性,通过修改该属性可以设置组件的位置移动。然后在该组件上绑定LongPressGesture和PanGesture组合而成的Sequence组合手势。当触发LongPressGesture时,更新显示的数字。当长按后进行拖动时,根据拖动手势的回调函数,实现组件的拖动。" + }, + { + "name": "groupgesture_Sequence_title", + "value": "顺序识别" + }, + { + "name": "groupgesture_Index_title", + "value": "组合手势" + }, + { + "name": "groupgesture_Index_Sequence_title", + "value": "顺序识别" + }, + { + "name": "groupgesture_Index_Parallel_title", + "value": "并行识别" + }, + { + "name": "groupgesture_Index_Exclusive_title", + "value": "互斥识别" + }, + { + "name": "groupgesture_Index_Sequence_description", + "value": "顺序识别组合手势对应的GestureMode为Sequence。顺序识别组合手势将按照手势的注册顺序识别手势,直到所有的手势识别成功。当顺序识别组合手势中有一个手势识别失败时,后续手势识别均失败。顺序识别手势组仅有最后一个手势可以响应onActionEnd。" + }, + { + "name": "groupgesture_Index_Parallel_description", + "value": "并行识别组合手势对应的GestureMode为Parallel。并行识别组合手势中注册的手势将同时进行识别,直到所有手势识别结束。并行识别手势组合中的手势进行识别时互不影响。" + }, + { + "name": "groupgesture_Index_Exclusive_description", + "value": "互斥识别组合手势对应的GestureMode为Exclusive。互斥识别组合手势中注册的手势将同时进行识别,若有一个手势识别成功,则结束手势识别,其他所有手势识别失败。" + }, + { + "name": "singlegesture_LongPressGesture_title", + "value": "长按手势" + }, + { + "name": "singlegesture_PanGesture_title", + "value": "拖动手势" + }, + { + "name": "singlegesture_PinchGesture_title", + "value": "捏合手势" + }, + { + "name": "singlegesture_RotationGesture_title", + "value": "旋转手势" + }, + { + "name": "singlegesture_SwipeGesture_title", + "value": "滑动手势" + }, + { + "name": "singlegesture_TapGesture_title", + "value": "点击手势" + }, + { + "name": "singlegesture_Index_title", + "value": "单一手势" + }, + { + "name": "singlegesture_Index_TapGesture_title", + "value": "点击手势" + }, + { + "name": "singlegesture_Index_LongPress_title", + "value": "长按手势" + }, + { + "name": "singlegesture_Index_Pan_title", + "value": "拖动手势" + }, + { + "name": "singlegesture_Index_Pinch_title", + "value": "捏合手势" + }, + { + "name": "singlegesture_Index_Rotation_title", + "value": "旋转手势" + }, + { + "name": "singlegesture_Index_Swipe_title", + "value": "滑动手势" + }, + { + "name": "singlegesture_Index_TapGesture_description", + "value": "单一手势的使用示例,点击手势支持单次点击和多次点击,拥有两个可选参数。" + }, + { + "name": "singlegesture_Index_LongPress_description", + "value": "长按手势用于触发长按手势事件。" + }, + { + "name": "singlegesture_Index_Pan_description", + "value": "拖动手势用于触发拖动手势事件,滑动达到最小滑动距离(默认值为5vp)时拖动手势识别成功。" + }, + { + "name": "singlegesture_Index_Pinch_description", + "value": "捏合手势用于触发捏合手势事件。其中示例为三指捏合" + }, + { + "name": "singlegesture_Index_Rotation_description", + "value": "旋转手势用于触发旋转手势事件,拥有两个可选参数:fingers:用于声明触发旋转手势所需要的最少手指数量,最小值为2,最大值为5,默认值为2。angle:用于声明触发旋转手势的最小改变度数,单位为deg,默认值为1" + }, + { + "name": "singlegesture_Index_Swipe_description", + "value": "滑动手势用于触发滑动事件,当滑动速度大于100vp/s时可以识别成功,拥有三个可选参数:fingers:用于声明触发滑动手势所需要的最少手指数量,最小值为1,最大值为10,默认值为1。direction:用于声明触发滑动手势的方向,此枚举值支持逻辑与(&)和逻辑或(|)运算。默认值为SwipeDirection.All。speed:用于声明触发滑动的最小滑动识别速度,单位为vp/s,默认值为100。" + }, + { + "name": "Touch_ClickEvent_text", + "value": "通过按钮的点击事件控制图片的显示和隐藏。" + }, + { + "name": "Touch_ClickEvent_title", + "value": "点击事件" + }, + { + "name": "Touch_TouchEvent_title", + "value": "触摸事件" + }, + { + "name": "Touch_Index_title", + "value": "触摸事件" + }, + { + "name": "Touch_Index_ClickEvent_title", + "value": "点击事件" + }, + { + "name": "Touch_Index_TouchEvent_title", + "value":"触摸事件" + }, + { + "name": "Touch_Index_ClickEvent_description", + "value": "点击事件是指通过手指或手写笔做出一次完整的按下和抬起动作。当发生点击事件时,会触发以下回调函数:\n onClick(event: (event?: ClickEvent) => void)\n 'event参数提供点击事件相对于窗口或组件的坐标位置,以及发生点击的事件源。" + }, + { + "name": "Touch_Index_TouchEvent_description", + "value": "当手指或手写笔在组件上触碰时,会触发不同动作所对应的事件响应,包括按下(Down)、滑动(Move)、抬起(Up)事件。" + }, + { + "name": "Pages_Index_gesture", + "value": "单一手势/gesture" + }, + { + "name": "Pages_Index_GroupGesture", + "value": "组合手势/GroupGesture" + }, + { + "name": "Pages_Index_GestureJudge", + "value": "手势拦截/GestureJudge" + }, + { + "name": "Pages_Index_TouchEvent", + "value": "触摸事件/TouchEvent" + }, + { + "name": "Pages_Index_DeviceEvent", + "value": "键鼠事件/DeviceEvent" + }, + { + "name": "Pages_Index_FocusEvent", + "value": "焦点事件/FocusEvent" + }, + { + "name": "Pages_Index_DragEvent", + "value": "拖拽事件/DragEvent" + } + ] +} \ No newline at end of file diff --git a/ArkUISample/EventProject/entry/src/main/resources/base/media/background.png b/ArkUISample/EventProject/entry/src/main/resources/base/media/background.png new file mode 100644 index 0000000000000000000000000000000000000000..f939c9fa8cc8914832e602198745f592a0dfa34d GIT binary patch literal 57364 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 A4*&oF literal 0 HcmV?d00001 diff --git a/ArkUISample/EventProject/entry/src/main/resources/base/media/foreground.png b/ArkUISample/EventProject/entry/src/main/resources/base/media/foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..4483ddad1f079e1089d685bd204ee1cfe1d01902 GIT binary patch literal 12430 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 cSLciz6AsI{U0tD9;7S&f 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

c)ijgxDm}8EsRXFt3h@+Ufr7@DN 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 literal 0 HcmV?d00001 diff --git a/ArkUISample/EventProject/entry/src/main/resources/base/profile/backup_config.json b/ArkUISample/EventProject/entry/src/main/resources/base/profile/backup_config.json new file mode 100644 index 000000000..78f40ae7c --- /dev/null +++ b/ArkUISample/EventProject/entry/src/main/resources/base/profile/backup_config.json @@ -0,0 +1,3 @@ +{ + "allowToBackupRestore": true +} \ No newline at end of file diff --git a/ArkUISample/EventProject/entry/src/main/resources/base/profile/main_pages.json b/ArkUISample/EventProject/entry/src/main/resources/base/profile/main_pages.json new file mode 100644 index 000000000..1898d94f5 --- /dev/null +++ b/ArkUISample/EventProject/entry/src/main/resources/base/profile/main_pages.json @@ -0,0 +1,5 @@ +{ + "src": [ + "pages/Index" + ] +} diff --git a/ArkUISample/EventProject/entry/src/main/resources/dark/element/color.json b/ArkUISample/EventProject/entry/src/main/resources/dark/element/color.json new file mode 100644 index 000000000..79b11c274 --- /dev/null +++ b/ArkUISample/EventProject/entry/src/main/resources/dark/element/color.json @@ -0,0 +1,8 @@ +{ + "color": [ + { + "name": "start_window_background", + "value": "#000000" + } + ] +} \ No newline at end of file diff --git a/ArkUISample/EventProject/entry/src/mock/mock-config.json5 b/ArkUISample/EventProject/entry/src/mock/mock-config.json5 new file mode 100644 index 000000000..b9a78e201 --- /dev/null +++ b/ArkUISample/EventProject/entry/src/mock/mock-config.json5 @@ -0,0 +1,17 @@ +/* + * Copyright (c) 2025 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. + */ + +{ +} \ No newline at end of file diff --git a/ArkUISample/EventProject/entry/src/ohosTest/ets/test/Ability.test.ets b/ArkUISample/EventProject/entry/src/ohosTest/ets/test/Ability.test.ets new file mode 100644 index 000000000..0f8ce9a2c --- /dev/null +++ b/ArkUISample/EventProject/entry/src/ohosTest/ets/test/Ability.test.ets @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2025 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 { hilog } from '@kit.PerformanceAnalysisKit'; +import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from '@ohos/hypium'; + +export default function abilityTest() { + describe('ActsAbilityTest', () => { + // Defines a test suite. Two parameters are supported: test suite name and test suite function. + beforeAll(() => { + // Presets an action, which is performed only once before all test cases of the test suite start. + // This API supports only one parameter: preset action function. + }) + beforeEach(() => { + // Presets an action, which is performed before each unit test case starts. + // The number of execution times is the same as the number of test cases defined by **it**. + // This API supports only one parameter: preset action function. + }) + afterEach(() => { + // Presets a clear action, which is performed after each unit test case ends. + // The number of execution times is the same as the number of test cases defined by **it**. + // This API supports only one parameter: clear action function. + }) + afterAll(() => { + // Presets a clear action, which is performed after all test cases of the test suite end. + // This API supports only one parameter: clear action function. + }) + it('assertContain', 0, () => { + // Defines a test case. This API supports three parameters: test case name, filter parameter, and test case function. + hilog.info(0x0000, 'testTag', '%{public}s', 'it begin'); + let a = 'abc'; + let b = 'b'; + // Defines a variety of assertion methods, which are used to declare expected boolean conditions. + expect(a).assertContain(b); + expect(a).assertEqual(a); + }) + }) +} \ No newline at end of file diff --git a/ArkUISample/EventProject/entry/src/ohosTest/ets/test/Index.test.ets b/ArkUISample/EventProject/entry/src/ohosTest/ets/test/Index.test.ets new file mode 100644 index 000000000..6bfc92ee7 --- /dev/null +++ b/ArkUISample/EventProject/entry/src/ohosTest/ets/test/Index.test.ets @@ -0,0 +1,134 @@ +/* + * Copyright (c) 2025 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 { describe, it, expect, beforeAll } from '@ohos/hypium'; +// 导入测试依赖kit +import { abilityDelegatorRegistry, Driver, ON, MouseButton, Component, MatchPattern } from '@kit.TestKit'; +import { UIAbility, Want } from '@kit.AbilityKit'; +import resource from '../../../main/ets/common/resource'; + +const delegator: abilityDelegatorRegistry.AbilityDelegator = abilityDelegatorRegistry.getAbilityDelegator(); +const bundleName = abilityDelegatorRegistry.getArguments().bundleName; +let want: Want; + +export default function IndexTest() { + + describe('IndexTest', () => { + + beforeAll(async () => { + want = { + bundleName: bundleName, + abilityName: 'EntryAbility' + }; + await delegator.startAbility(want); + let driver = Driver.create(); + await driver.delayMs(1000); + const ability: UIAbility = await delegator.getCurrentTopAbility(); + console.info('get top ability'); + expect(ability.context.abilityInfo.name).assertEqual('EntryAbility'); + }) + + /** + * @tc.number UiTest_001 + * @tc.name testSingleGestureTap + * @tc.desc 测试点击手势示例 + */ + it('testSingleGestureTap', 0, async (done: Function) => { + console.info('uitest: testSingleGestureTap begin'); + let driver = Driver.create(); + let button_list = await driver.findComponent(ON.text('gesture', MatchPattern.CONTAINS)); + expect(button_list === null).assertFalse(); + await button_list.click(); + let button_list1 = await driver.findComponent(ON.text(resource.resourceToString($r('app.string.singlegesture_Index_TapGesture_title')), MatchPattern.CONTAINS)); + await button_list1.click(); + //已进入测试界面 + let button2 = await driver.findComponent(ON.text('twice', MatchPattern.CONTAINS)); + await button2.doubleClick(); + await driver.delayMs(1000); + await driver.pressBack(); + await driver.pressBack(); + console.info('uitest: testSingleGestureTap end'); + done(); + }) + + /** + * @tc.number UiTest_002 + * @tc.name testSingleGestureLong + * @tc.desc 测试长按手势示例 + */ + it('testSingleGestureLong', 0, async (done: Function) => { + console.info('uitest: testSingleGestureLong begin'); + let driver = Driver.create(); + let button_list = await driver.findComponent(ON.text('gesture', MatchPattern.CONTAINS)); + expect(button_list === null).assertFalse(); + await button_list.click(); + let button_list1 = await driver.findComponent(ON.text(resource.resourceToString($r('app.string.singlegesture_Index_LongPress_title')), MatchPattern.CONTAINS)); + await button_list1.click(); + //已进入测试界面 + let button2 = await driver.findComponent(ON.text('Long', MatchPattern.CONTAINS)); + await button2.longClick(); + await driver.delayMs(1000); + await driver.pressBack(); + await driver.pressBack(); + console.info('uitest: testSingleGestureLong end'); + done(); + }) + + /** + * @tc.number UiTest_003 + * @tc.name testSingleGestureJudge + * @tc.desc 测试手势拦截示例 + */ + it('testSingleGestureJudge', 0, async (done: Function) => { + console.info('uitest: testSingleGestureJudge begin'); + let driver = Driver.create(); + let button_list = await driver.findComponent(ON.text('GestureJudge', MatchPattern.CONTAINS)); + expect(button_list === null).assertFalse(); + await button_list.click(); + let button_list1 = await driver.findComponent(ON.text(resource.resourceToString($r('app.string.gesture_Index_GestureJudge_title')), MatchPattern.CONTAINS)); + await button_list1.click(); + //已进入测试界面 + await driver.delayMs(1000); + await driver.pressBack(); + console.info('uitest: testSingleGestureJudge end'); + done(); + }) + + /** + * @tc.number UiTest_004 + * @tc.name testSingleGestureTouch + * @tc.desc 测试点击事件示例 + */ + it('testSingleGestureTouch', 0, async (done: Function) => { + console.info('uitest: testSingleGestureTouch begin'); + let driver = Driver.create(); + let button_list = await driver.findComponent(ON.text('TouchEvent', MatchPattern.CONTAINS)); + expect(button_list === null).assertFalse(); + await button_list.click(); + let button_list1 = await driver.findComponent(ON.text(resource.resourceToString($r('app.string.Touch_Index_ClickEvent_title')), MatchPattern.CONTAINS)); + await button_list1.click(); + //已进入测试界面 + let button = await driver.findComponent(ON.text('show', MatchPattern.CONTAINS)); + await button.click(); + await driver.delayMs(1000); + await driver.pressBack(); + await driver.pressBack(); + console.info('uitest: testSingleGestureTouch end'); + done(); + }) + + + }) +} \ No newline at end of file diff --git a/ArkUISample/EventProject/entry/src/ohosTest/ets/test/List.test.ets b/ArkUISample/EventProject/entry/src/ohosTest/ets/test/List.test.ets new file mode 100644 index 000000000..ea9e8f259 --- /dev/null +++ b/ArkUISample/EventProject/entry/src/ohosTest/ets/test/List.test.ets @@ -0,0 +1,22 @@ +/* + * Copyright (c) 2025 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 IndexTest from './Index.test'; +import abilityTest from './Ability.test'; + +export default function testsuite() { + abilityTest(); + IndexTest(); +} \ No newline at end of file diff --git a/ArkUISample/EventProject/entry/src/ohosTest/module.json5 b/ArkUISample/EventProject/entry/src/ohosTest/module.json5 new file mode 100644 index 000000000..c3fd9dda3 --- /dev/null +++ b/ArkUISample/EventProject/entry/src/ohosTest/module.json5 @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2025 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. + */ + +{ + "module": { + "name": "entry_test", + "type": "feature", + "deviceTypes": [ + "default", + "tablet" + ], + "deliveryWithInstall": true, + "installationFree": false + } +} diff --git a/ArkUISample/EventProject/entry/src/test/List.test.ets b/ArkUISample/EventProject/entry/src/test/List.test.ets new file mode 100644 index 000000000..f1186b1f5 --- /dev/null +++ b/ArkUISample/EventProject/entry/src/test/List.test.ets @@ -0,0 +1,20 @@ +/* + * Copyright (c) 2025 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 localUnitTest from './LocalUnit.test'; + +export default function testsuite() { + localUnitTest(); +} \ No newline at end of file diff --git a/ArkUISample/EventProject/entry/src/test/LocalUnit.test.ets b/ArkUISample/EventProject/entry/src/test/LocalUnit.test.ets new file mode 100644 index 000000000..7fc57c77d --- /dev/null +++ b/ArkUISample/EventProject/entry/src/test/LocalUnit.test.ets @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2025 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 { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from '@ohos/hypium'; + +export default function localUnitTest() { + describe('localUnitTest', () => { + // Defines a test suite. Two parameters are supported: test suite name and test suite function. + beforeAll(() => { + // Presets an action, which is performed only once before all test cases of the test suite start. + // This API supports only one parameter: preset action function. + }); + beforeEach(() => { + // Presets an action, which is performed before each unit test case starts. + // The number of execution times is the same as the number of test cases defined by **it**. + // This API supports only one parameter: preset action function. + }); + afterEach(() => { + // Presets a clear action, which is performed after each unit test case ends. + // The number of execution times is the same as the number of test cases defined by **it**. + // This API supports only one parameter: clear action function. + }); + afterAll(() => { + // Presets a clear action, which is performed after all test cases of the test suite end. + // This API supports only one parameter: clear action function. + }); + it('assertContain', 0, () => { + // Defines a test case. This API supports three parameters: test case name, filter parameter, and test case function. + let a = 'abc'; + let b = 'b'; + // Defines a variety of assertion methods, which are used to declare expected boolean conditions. + expect(a).assertContain(b); + expect(a).assertEqual(a); + }); + }); +} \ No newline at end of file diff --git a/ArkUISample/EventProject/hvigor/hvigor-config.json5 b/ArkUISample/EventProject/hvigor/hvigor-config.json5 new file mode 100644 index 000000000..d584c19c2 --- /dev/null +++ b/ArkUISample/EventProject/hvigor/hvigor-config.json5 @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2025 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. + */ + +{ + "modelVersion": "5.0.1", + "dependencies": { + }, + "execution": { + // "analyze": "normal", /* Define the build analyze mode. Value: [ "normal" | "advanced" | false ]. Default: "normal" */ + // "daemon": true, /* Enable daemon compilation. Value: [ true | false ]. Default: true */ + // "incremental": true, /* Enable incremental compilation. Value: [ true | false ]. Default: true */ + // "parallel": true, /* Enable parallel compilation. Value: [ true | false ]. Default: true */ + // "typeCheck": false, /* Enable typeCheck. Value: [ true | false ]. Default: false */ + }, + "logging": { + // "level": "info" /* Define the log level. Value: [ "debug" | "info" | "warn" | "error" ]. Default: "info" */ + }, + "debugging": { + // "stacktrace": false /* Disable stacktrace compilation. Value: [ true | false ]. Default: false */ + }, + "nodeOptions": { + // "maxOldSpaceSize": 8192 /* Enable nodeOptions maxOldSpaceSize compilation. Unit M. Used for the daemon process. Default: 8192*/ + // "exposeGC": true /* Enable to trigger garbage collection explicitly. Default: true*/ + } +} diff --git a/ArkUISample/EventProject/hvigorfile.ts b/ArkUISample/EventProject/hvigorfile.ts new file mode 100644 index 000000000..f3cb9f1a8 --- /dev/null +++ b/ArkUISample/EventProject/hvigorfile.ts @@ -0,0 +1,6 @@ +import { appTasks } from '@ohos/hvigor-ohos-plugin'; + +export default { + system: appTasks, /* Built-in plugin of Hvigor. It cannot be modified. */ + plugins:[] /* Custom plugin to extend the functionality of Hvigor. */ +} diff --git a/ArkUISample/EventProject/oh-package.json5 b/ArkUISample/EventProject/oh-package.json5 new file mode 100644 index 000000000..e41bae026 --- /dev/null +++ b/ArkUISample/EventProject/oh-package.json5 @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2025 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. + */ + +{ + "modelVersion": "5.0.1", + "description": "Please describe the basic information.", + "dependencies": { + }, + "devDependencies": { + "@ohos/hypium": "1.0.19", + "@ohos/hamock": "1.0.0" + } +} diff --git a/ArkUISample/EventProject/screenshots/device/image1.png b/ArkUISample/EventProject/screenshots/device/image1.png new file mode 100644 index 0000000000000000000000000000000000000000..3175478e318bd7c2a75fd63c27be1a515600fd61 GIT binary patch literal 50489 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 Q|A#{P|CoG<`)B6g03o=udH?_b literal 0 HcmV?d00001 diff --git a/ArkUISample/EventProject/screenshots/device/image3.png b/ArkUISample/EventProject/screenshots/device/image3.png new file mode 100644 index 0000000000000000000000000000000000000000..42f997e0bfebd0e150de46bcf0cf38f65ad6f0cd GIT binary patch literal 39756 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 X*kG3a|AX5i|6vZ~zyG`PejEG`!63Ut literal 0 HcmV?d00001 -- Gitee