From 7e8183132b2342b1e9f50ae26a4b6978679caa93 Mon Sep 17 00:00:00 2001 From: =?utf8?q?=E7=BD=97=E6=AD=A3?= <1732036298@qq.com> Date: Sat, 15 Jun 2024 01:28:18 +0000 Subject: [PATCH] Merge #289 into sdk602patch0521 from refs/changes/289/head MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Code review from 罗正 * refs/changes/289/head: (3 commits squashed) - 添加显示方式(applist主题样式)Slice - Merge branch 'sdk602patch0521' of https://codeup.aliyun.com/64191456b9581d62e8f81ac0/FD230 into sdk602patch0521 - applist与主题样式修改 Signed-off-by: 罗正 <1732036298@qq.com> Reviewed-by: snickersun@163.com Merged-by: snickersun@163.com CR-link: https://codeup.aliyun.com/64191456b9581d62e8f81ac0/FD230/change/289 --- .../wearable/fd230app/CMakeLists.txt | 5 + .../nativelauncher/include/AppViewIDs.h | 9 +- .../nativelauncher/include/NativeLauncher.h | 1 + .../nativelauncher/src/NativeLauncher.cpp | 16 + .../nativeui/applist/src/ApplistModel.cpp | 5 +- .../nativeui/key/src/KeyInputListener.cpp | 2 +- .../nativeui/rebootdevice/src/RebootModel.cpp | 4 +- .../nativeui/settings/src/SettingModel.cpp | 4 +- .../themestyle/include/ThemeStyleModel.h | 63 ++++ .../themestyle/include/ThemeStylePresenter.h | 47 +++ .../themestyle/include/ThemeStyleView.h | 86 +++++ .../themestyle/src/ThemeStyleModel.cpp | 79 +++++ .../themestyle/src/ThemeStylePresenter.cpp | 143 +++++++++ .../themestyle/src/ThemeStyleView.cpp | 297 ++++++++++++++++++ .../nativeabilityfwk/include/Ability.h | 9 + .../fd230/fs/user/res/themestyle/grid.bin | 3 + .../fd230/fs/user/res/themestyle/hexagons.bin | 3 + .../fd230/fs/user/res/themestyle/list.bin | 3 + 18 files changed, 768 insertions(+), 11 deletions(-) create mode 100644 code/sdk/application/wearable/fd230app/nativeui/themestyle/include/ThemeStyleModel.h create mode 100644 code/sdk/application/wearable/fd230app/nativeui/themestyle/include/ThemeStylePresenter.h create mode 100644 code/sdk/application/wearable/fd230app/nativeui/themestyle/include/ThemeStyleView.h create mode 100644 code/sdk/application/wearable/fd230app/nativeui/themestyle/src/ThemeStyleModel.cpp create mode 100644 code/sdk/application/wearable/fd230app/nativeui/themestyle/src/ThemeStylePresenter.cpp create mode 100644 code/sdk/application/wearable/fd230app/nativeui/themestyle/src/ThemeStyleView.cpp create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/themestyle/grid.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/themestyle/hexagons.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/themestyle/list.bin diff --git a/code/sdk/application/wearable/fd230app/CMakeLists.txt b/code/sdk/application/wearable/fd230app/CMakeLists.txt index f17a04364..82e41e5fe 100644 --- a/code/sdk/application/wearable/fd230app/CMakeLists.txt +++ b/code/sdk/application/wearable/fd230app/CMakeLists.txt @@ -376,6 +376,11 @@ set(SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/respiratorytraining/src/RespiratoryTrainingCompletedView.cpp ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/respiratorytraining/src/RespiratoryTrainingModel.cpp + #呼吸训练 + ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/themestyle/src/ThemeStyleModel.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/themestyle/src/ThemeStylePresenter.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/themestyle/src/ThemeStyleView.cpp + #声音与震动 ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/soundandvibration/src/SoundAndVibrationPresenter.cpp ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/soundandvibration/src/SoundAndVibrationView.cpp diff --git a/code/sdk/application/wearable/fd230app/nativelauncher/include/AppViewIDs.h b/code/sdk/application/wearable/fd230app/nativelauncher/include/AppViewIDs.h index 959d6c1fa..af166a7ad 100644 --- a/code/sdk/application/wearable/fd230app/nativelauncher/include/AppViewIDs.h +++ b/code/sdk/application/wearable/fd230app/nativelauncher/include/AppViewIDs.h @@ -44,7 +44,7 @@ typedef enum : uint16_t VIEW_INDOORWALK, // 室内步行 VIEW_SHUTDOWN_OR_REBOOT, // 关机或重启界面 VIEW_WEATHER, // 天气 - VIEW_GOAL, //每日目标 + VIEW_GOAL, // 每日目标 VIEW_SYSTEM, // 系统 VIEW_SOUND_VIBRATION, // 声音与震动 VIEW_SYSTEM_VOLUME, // 系统音量 @@ -63,9 +63,10 @@ typedef enum : uint16_t VIEW_NETWORKANDCALL, // 网络与通话 VIEW_MOTION_RECOGNITION, // 运动识别 VIEW_SYSTEM_UPDATE, // 系统更新 - VIEW_WATCH_QR_CODE, //手表二维码 - VIEW_RESPIRATORY_TRAINING, //呼吸训练 - + VIEW_WATCH_QR_CODE, // 手表二维码 + VIEW_RESPIRATORY_TRAINING, // 呼吸训练 + VIEW_THEME_STYLE, // 主题样式 + /* ----------------------------------- 录音 ----------------------------------- */ VIEW_RECORD, /* ---------------------------------- 界面 ---------------------------------- */ diff --git a/code/sdk/application/wearable/fd230app/nativelauncher/include/NativeLauncher.h b/code/sdk/application/wearable/fd230app/nativelauncher/include/NativeLauncher.h index c27a9cfd9..41fb8ecff 100644 --- a/code/sdk/application/wearable/fd230app/nativelauncher/include/NativeLauncher.h +++ b/code/sdk/application/wearable/fd230app/nativelauncher/include/NativeLauncher.h @@ -61,6 +61,7 @@ namespace OHOS void InitSystemUpdateSlice(void); void InitWatchQRCodeSlice(void); void InitRespiratoryTrainingSlice(void); + void InitThemeStyleSlice(void); /* --------------------------------界面------------------------------------ */ void InitRotateSlice(void); void InitBloodSlice(void); diff --git a/code/sdk/application/wearable/fd230app/nativelauncher/src/NativeLauncher.cpp b/code/sdk/application/wearable/fd230app/nativelauncher/src/NativeLauncher.cpp index fe802689e..077ad213a 100644 --- a/code/sdk/application/wearable/fd230app/nativelauncher/src/NativeLauncher.cpp +++ b/code/sdk/application/wearable/fd230app/nativelauncher/src/NativeLauncher.cpp @@ -187,6 +187,9 @@ #include "respiratorytraining/include/RespiratoryTrainingPresenter.h" #include "respiratorytraining/include/RespiratoryTrainingView.h" + +#include "themestyle/include/ThemeStyleView.h" +#include "themestyle/include/ThemeStylePresenter.h" /* -------------------------------------------------------------------------- */ #include "traing/include/TraingView.h" #include "traing/include/TraingPresenter.h" @@ -280,6 +283,7 @@ namespace OHOS {VIEW_SYSTEM_UPDATE, &NativeLauncher::InitSystemUpdateSlice}, // 系统更新界面 {VIEW_WATCH_QR_CODE, &NativeLauncher::InitWatchQRCodeSlice}, // 手表二维码界面 {VIEW_RESPIRATORY_TRAINING, &NativeLauncher::InitRespiratoryTrainingSlice}, // 呼吸训练界面 + {VIEW_THEME_STYLE, &NativeLauncher::InitThemeStyleSlice}, // 主题样式界面 // {VIEW_SECONDARY_FUNCTION, &NativeLauncher::InitSecondaryFunction}, // {VIEW_FAST_TRAINING, &NativeLauncher::InitFastTrainingSlice}, @@ -1210,6 +1214,18 @@ namespace OHOS } NativeAbility::GetInstance().AddSliceProxy(VIEW_RESPIRATORY_TRAINING, respiratorytraining); } + + /*主题样式*/ + void NativeLauncher::InitThemeStyleSlice(void) + { + SliceProxy *ThemeStyle = new AbilitySliceProxy; + if (ThemeStyle == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThemeStyle"); + return; + } + NativeAbility::GetInstance().AddSliceProxy(VIEW_THEME_STYLE, ThemeStyle); + } /* -------------------------------------------------------------------------- */ void NativeLauncher::InitSetDesktopSlice(void) { diff --git a/code/sdk/application/wearable/fd230app/nativeui/applist/src/ApplistModel.cpp b/code/sdk/application/wearable/fd230app/nativeui/applist/src/ApplistModel.cpp index f7a3b0660..25105cb27 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/applist/src/ApplistModel.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/applist/src/ApplistModel.cpp @@ -20,6 +20,7 @@ #include "ApplistModel.h" #include "ApplistPresenter.h" #include "SetDesktopModel.h" +#include "themestyle/include/ThemeStyleModel.h" namespace OHOS { @@ -40,7 +41,7 @@ namespace OHOS {VIEW_MAIN_STOPWATCH, PNG_APPLIST_STOPWATCH_IMAGE, PNG_APPLIST_STOPWATCH_IMAGE, "秒表", STR_STOPWATCH, nullptr}, {VIEW_MAIN_COUNTDOWN, PNG_APPLIST_COUNTDOWN_IMAGE, PNG_APPLIST_COUNTDOWN_IMAGE, "计时器", STR_TIMER, nullptr}, {VIEW_FIND_PHONE, PNG_APPLIST_FINDPHONE_IMAGE, PNG_APPLIST_FINDPHONE_IMAGE, "查找手机", STR_FIND_PHONE, nullptr}, - {VIEW_SET_DESKTOP, PNG_APPLIST_THEME_IMAGE, PNG_APPLIST_THEME_IMAGE, "显示方式", STR_DISPLAY_MODE, nullptr}, + {VIEW_THEME_STYLE, PNG_APPLIST_THEME_IMAGE, PNG_APPLIST_THEME_IMAGE, "显示方式", STR_DISPLAY_MODE, nullptr}, {VIEW_SET_CARD, PNG_APPLIST_CARDSET_IMAGE, PNG_APPLIST_CARDSET_IMAGE, "卡片管理", STR_CARD_MANAGEMENT, nullptr}, {VIEW_SET_DIAL, PNG_APPLIST_CHANGEDIAL_IMAGE, PNG_APPLIST_CHANGEDIAL_IMAGE, "更换表盘", STR_WATCH_FACE, nullptr}, {VIEW_CLASSIC_BLUETOOTH, PNG_APPLIST_BLUETOOTH_IMAGE, PNG_APPLIST_BLUETOOTH_IMAGE, "蓝牙", STR_BLUETOOTH, nullptr}, @@ -195,6 +196,6 @@ namespace OHOS bool ApplistModel::GetIsUseListStyle(void) { - return (SetDesktopModel::GetInstance().GetDesktopStyle() == APPLIST_STYLE); + return (ThemeStyleModel::GetInstance().GetAppListDisplayStyle() == APPLIST_STYLE); } } diff --git a/code/sdk/application/wearable/fd230app/nativeui/key/src/KeyInputListener.cpp b/code/sdk/application/wearable/fd230app/nativeui/key/src/KeyInputListener.cpp index 4d71687bc..d345d158a 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/key/src/KeyInputListener.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/key/src/KeyInputListener.cpp @@ -171,7 +171,7 @@ void KeyInputListener::CallVolumeDipSwitchControl(VolumeChangeStatus status) if (mcu_pms_is_screen_on()) { PressAlarmNotify(); - NativeAbility::GetInstance().ChangeSlice(VIEW_MAIN, TransitionType::TRANSITION_ZOOM); + //NativeAbility::GetInstance().ChangeSlice(VIEW_MAIN, TransitionType::TRANSITION_ZOOM); } } else // 如果当前页面是主表盘,如果屏幕亮起,则先处理闹钟通知再切换到用户配置的快捷卡片 diff --git a/code/sdk/application/wearable/fd230app/nativeui/rebootdevice/src/RebootModel.cpp b/code/sdk/application/wearable/fd230app/nativeui/rebootdevice/src/RebootModel.cpp index 73ecf58c8..b083cd02c 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/rebootdevice/src/RebootModel.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/rebootdevice/src/RebootModel.cpp @@ -2,7 +2,7 @@ * @Author: luozheng 1732036298@qq.com * @Date: 2024-03-28 11:50:42 * @LastEditors: luozheng 1732036298@qq.com - * @LastEditTime: 2024-06-13 19:52:52 + * @LastEditTime: 2024-06-14 18:42:57 * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/rebootdevice/src/RebootModel.cpp */ @@ -98,7 +98,7 @@ namespace OHOS if (display_api->get_screen_state() == SCREEN_ON) { // 切换到主题样式界面 - NativeAbility::GetInstance().EnterSlice(VIEW_SET_DESKTOP); + NativeAbility::GetInstance().EnterSlice(VIEW_THEME_STYLE); //NativeAbility::GetInstance().ChangeSlice(VIEW_SET_DESKTOP); } diff --git a/code/sdk/application/wearable/fd230app/nativeui/settings/src/SettingModel.cpp b/code/sdk/application/wearable/fd230app/nativeui/settings/src/SettingModel.cpp index 658ec6d69..84542fa9d 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/settings/src/SettingModel.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/settings/src/SettingModel.cpp @@ -2,7 +2,7 @@ * @Author: luozheng 1732036298@qq.com * @Date: 2024-02-18 09:09:13 * @LastEditors: luozheng 1732036298@qq.com - * @LastEditTime: 2024-04-25 09:12:06 + * @LastEditTime: 2024-06-14 18:43:36 * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/settings/src/SettingModel.cpp */ #include "SettingModel.h" @@ -27,7 +27,7 @@ namespace OHOS settings[index++] = {VIEW_NETWORKANDCALL, PNG_SETTINGS_NETWORKANDCALL, STR_NETWORKANDCALL, true}; settings[index++] = {VIEW_CLASSIC_BLUETOOTH, PNG_SETTINGS_BLUETOOTH, STR_BLUETOOTH, true}; settings[index++] = {VIEW_SOUND_VIBRATION, PNG_SETTINGS_SOUND_VIBRATION, STR_SOUND_AND_VIBRATION, true}; - settings[index++] = {VIEW_SET_DESKTOP, PNG_SETTINGS_DISPLAY_MODE, STR_DISPLAY_MODE, true}; + settings[index++] = {VIEW_THEME_STYLE, PNG_SETTINGS_DISPLAY_MODE, STR_DISPLAY_MODE, true}; settings[index++] = {VIEW_MOTION_RECOGNITION, PNG_SETTINGS_MOTION_RECOGNITION, STR_MOTION_RECOGNITION, true}; settings[index++] = {VIEW_SYSTEM, PNG_SETTINGS_SYSTEM, STR_SYSTEM, true}; settings[index++] = {VIEW_SHUTDOWN_OR_REBOOT, PNG_SETTINGS_SHUTDOWN_AND_RESTART, STR_SHUTDOWN_AND_RESTART, true}; diff --git a/code/sdk/application/wearable/fd230app/nativeui/themestyle/include/ThemeStyleModel.h b/code/sdk/application/wearable/fd230app/nativeui/themestyle/include/ThemeStyleModel.h new file mode 100644 index 000000000..de5fb1c39 --- /dev/null +++ b/code/sdk/application/wearable/fd230app/nativeui/themestyle/include/ThemeStyleModel.h @@ -0,0 +1,63 @@ +/* + * @Author: luozheng 1732036298@qq.com + * @Date: 2024-06-14 09:40:13 + * @LastEditors: luozheng 1732036298@qq.com + * @LastEditTime: 2024-06-14 18:28:15 + * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/themestyle/include/ThemeStyleModel.h + */ +#ifndef SET_THEMESTYLE_MODEL_H +#define SET_THEMESTYLE_MODEL_H + +#include +#include +#include +#include +#include "AppViewIDs.h" +#include "UiConfig.h" + +namespace OHOS +{ + static constexpr const char *THEMESTYLE_KEY = "applist_style"; + static constexpr const char *THEMESTYLE_VALUE_LIST = "list"; + static constexpr const char *THEMESTYLE_VALUE_HEXAGONS = "hexagons"; + + typedef enum : uint16_t + { + APPLIST_STYLE, // 列表显示 + HEXAGONS_STYLE, // 蜂窝显示 + MAX_THEME_STYLE, + } ThemeStyle; + + // 映射[枚举值]->[显示样式值}的关系 + const std::map ThemeStyleMap = { + {ThemeStyle::APPLIST_STYLE, THEMESTYLE_VALUE_LIST}, + {ThemeStyle::HEXAGONS_STYLE, THEMESTYLE_VALUE_HEXAGONS}, + // 在此处添加更多的映射关系 + }; + + // 映射[显示样式值]->[枚举值]的关系 + const std::unordered_map ReverseThemeStyleMap = { + {THEMESTYLE_VALUE_LIST, ThemeStyle::APPLIST_STYLE}, + {THEMESTYLE_VALUE_HEXAGONS, ThemeStyle::HEXAGONS_STYLE}, + // 在此处添加更多的映射关系 + }; + + class ThemeStyleModel + { + public: + static ThemeStyleModel &GetInstance(void); + ThemeStyle GetAppListDisplayStyle(void); + void SetAppListDisplayStyle(ThemeStyle style); + uint16_t GetSelectThemeStyleId(void); + void SetSelectThemeStyleId(uint16_t Id); + + private: + ThemeStyleModel(); + virtual ~ThemeStyleModel(); + ThemeStyleModel(const ThemeStyleModel &) = delete; + ThemeStyleModel &operator=(const ThemeStyleModel &) = delete; + uint16_t ThemeStyleId; + }; +} + +#endif // SET_DESKTOP_MODEL_H \ No newline at end of file diff --git a/code/sdk/application/wearable/fd230app/nativeui/themestyle/include/ThemeStylePresenter.h b/code/sdk/application/wearable/fd230app/nativeui/themestyle/include/ThemeStylePresenter.h new file mode 100644 index 000000000..199d279e6 --- /dev/null +++ b/code/sdk/application/wearable/fd230app/nativeui/themestyle/include/ThemeStylePresenter.h @@ -0,0 +1,47 @@ +/* + * @Author: luozheng 1732036298@qq.com + * @Date: 2024-06-14 09:40:13 + * @LastEditors: luozheng 1732036298@qq.com + * @LastEditTime: 2024-06-14 18:12:38 + * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/themestyle/include/ThemeStylePresenter.h + */ + +#ifndef SET_THEMESTYLE_PRESENTER_H +#define SET_THEMESTYLE_PRESENTER_H + +#include "View.h" +#include "Presenter.h" +#include "components/ui_view.h" +namespace OHOS +{ + class ThemeStyleView; + class ThemeStyleModel; + class ThemeStylePresenter : public Presenter, + public UIView::OnClickListener, + public RootView::OnKeyActListener, + public UIView::OnDragListener + { + public: + ThemeStylePresenter(); + ~ThemeStylePresenter() override; + static ThemeStylePresenter *GetInstance(); + + bool GetListStyleState(void); + bool GetHexagonsStyleState(void); + + void OnStart() override; + void OnPause() override; + void OnResume() override; + void OnStop() override; + + private: + bool OnClick(UIView &view, const ClickEvent &event) override; + bool OnDrag(UIView &view, const DragEvent &event) override; + bool OnDragEnd(UIView &view, const DragEvent &event) override; + bool OnKeyAct(UIView &view, const KeyEvent &event) override; // 增加按键事件 + + bool X_DRAG_FLAG{false}; + }; +} + +#endif // SET_THEMESTYLE_PRESENTER_H \ No newline at end of file diff --git a/code/sdk/application/wearable/fd230app/nativeui/themestyle/include/ThemeStyleView.h b/code/sdk/application/wearable/fd230app/nativeui/themestyle/include/ThemeStyleView.h new file mode 100644 index 000000000..8aa173706 --- /dev/null +++ b/code/sdk/application/wearable/fd230app/nativeui/themestyle/include/ThemeStyleView.h @@ -0,0 +1,86 @@ +/* + * @Author: luozheng 1732036298@qq.com + * @Date: 2024-06-14 09:40:13 + * @LastEditors: luozheng 1732036298@qq.com + * @LastEditTime: 2024-06-14 18:38:50 + * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/themestyle/include/ThemeStyleView.h + */ + +#ifndef SET_THEMESTYLE_VIEW_H +#define SET_THEMESTYLE_VIEW_H + +#include "View.h" +#include "components/ui_view_group.h" +#include "components/ui_label_ext.h" +#include "components/ui_image_view.h" +#include "components/ui_toggle_button.h" +#include "components/ui_scroll_view.h" +#include "components/ui_label_button_ext.h" +#include "window/window.h" +#include "BaseView.h" +#include "ChangeSliceListener.h" +#include "UiConfig.h" +#include "themestyle/include/ThemeStyleModel.h" + +namespace OHOS +{ + static constexpr const uint16_t MAX_STYLE = MAX_THEME_STYLE; + static constexpr char *THEME_STYLE_LIST = "themestyleList"; // 列表 + static constexpr char *THEME_STYLE_HEXAGONS = "themestyleHexagons"; // 蜂窝 + static constexpr char *THEMESTYLEVIEWEXIT = "ThemeStyleViewExit"; // exit + + static constexpr char *THEMESTYLE_LIST_IMAGEPATH = "/user/res/themestyle/list.bin"; + static constexpr char *THEMESTYLE_HEXAGONS_IMAGEPATH = "/user/res/themestyle/hexagons.bin"; + + class ThemeStylePresenter; + class ThemeStyleView : public View + { + public: + struct LabelButtonConfig + { + int16_t left; + int16_t top; + int16_t width; + int16_t height; + int16_t fontSize; + int16_t lineHeigh; + const char *viewId; + int16_t textId; + }; + + struct ImageConfig + { + int16_t x; + int16_t y; + int16_t w; + int16_t h; + const char *src; + }; + + ThemeStyleView(); + ~ThemeStyleView() override; + static ThemeStyleView *GetInstance(); + void UpdateSelectedStyle(); + + void OnStart() override; + void OnSetUpView() override; + void OnTearDownView() override; + void OnStop() override; + + private: + bool CreateThemeStyleScrollView(void); + bool CreateThemeStyleLabelView(void); + bool CreateThemeStyleLabelButtonView(void); + bool CreateThemeStyleImageView(void); + UILabelButtonExt *ThemeStyleLabelButtonViewInit(LabelButtonConfig &labelbuttonconfig); + UIImageView *ThemeStyleImageViewInit(ImageConfig &imageconfig); + void ThemeStyleViewInit(void); + void ClearAll(void); + UIScrollView *scrollView{nullptr}; + UILabelExt *titleText; + UILabelButtonExt *ThemeStyleLabelButton[MAX_STYLE]{nullptr}; + UIImageView *ThemeStyleImage[MAX_STYLE]{nullptr}; + UILabelButtonExt *ExitLabelButton{nullptr}; + }; +} +#endif // SET_THEMESTYLE_VIEW_H diff --git a/code/sdk/application/wearable/fd230app/nativeui/themestyle/src/ThemeStyleModel.cpp b/code/sdk/application/wearable/fd230app/nativeui/themestyle/src/ThemeStyleModel.cpp new file mode 100644 index 000000000..87fbf7702 --- /dev/null +++ b/code/sdk/application/wearable/fd230app/nativeui/themestyle/src/ThemeStyleModel.cpp @@ -0,0 +1,79 @@ +/* + * @Author: luozheng 1732036298@qq.com + * @Date: 2024-06-07 09:21:47 + * @LastEditors: luozheng 1732036298@qq.com + * @LastEditTime: 2024-06-14 19:14:47 + * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/set_desktop/src/ThemeStyleModel.cpp + */ + +#include "themestyle/include/ThemeStyleModel.h" +#include "kv_store.h" +#include "securec.h" +#include "wearable_log.h" +namespace OHOS +{ + static const int STYLE_VALUE_LEN = 32; + ThemeStyleModel::ThemeStyleModel() {} + ThemeStyleModel::~ThemeStyleModel() {} + + ThemeStyleModel &ThemeStyleModel::GetInstance() + { + static ThemeStyleModel instance; + return instance; + } + + /// @brief 获取applist的显示样式 + /// @param void + /// @return 主题样式 + ThemeStyle ThemeStyleModel::GetAppListDisplayStyle() + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ThemeStyleModel::GetAppListDisplayStyle"); + + char temp[STYLE_VALUE_LEN] = {0}; + (void)UtilsGetValue(THEMESTYLE_KEY, temp, STYLE_VALUE_LEN); // 从文件系统或缓存中获取与指定键匹配的值。 + + // 检查是否存在对应的样式选项 + auto it = ReverseThemeStyleMap.find(std::string(temp)); + if (it != ReverseThemeStyleMap.end()) + { + return it->second; + } + else + { + // 默认返回列表显示 + return ThemeStyle::APPLIST_STYLE; + } + } + + /// @brief 设置applist的显示样式 + /// @param style 要设置的风格样式 + void ThemeStyleModel::SetAppListDisplayStyle(ThemeStyle style) + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ThemeStyleModel::SetAppListDisplayStyle"); + + // 检查是否存在对应的样式选项 + if (ThemeStyleMap.find(style) != ThemeStyleMap.end()) + { + // 根据映射设置显示样式值 + (void)UtilsSetValue(THEMESTYLE_KEY, ThemeStyleMap.at(style).c_str()); + SetSelectThemeStyleId(style); + } + else + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SetAppListDisplayStyle fail!!"); + } + } + + //获取选中的样式Id + uint16_t ThemeStyleModel::GetSelectThemeStyleId(void) + { + return ThemeStyleId; + } + + //设置选中的样式Id + void ThemeStyleModel::SetSelectThemeStyleId(uint16_t Id) + { + ThemeStyleId = Id; + } + +} diff --git a/code/sdk/application/wearable/fd230app/nativeui/themestyle/src/ThemeStylePresenter.cpp b/code/sdk/application/wearable/fd230app/nativeui/themestyle/src/ThemeStylePresenter.cpp new file mode 100644 index 000000000..3771bf5ea --- /dev/null +++ b/code/sdk/application/wearable/fd230app/nativeui/themestyle/src/ThemeStylePresenter.cpp @@ -0,0 +1,143 @@ +/* + * @Author: luozheng 1732036298@qq.com + * @Date: 2024-04-08 16:43:48 + * @LastEditors: luozheng 1732036298@qq.com + * @LastEditTime: 2024-06-14 19:39:03 + * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/set_desktop/src/ThemeStylePresenter.cpp + */ + +#include "themestyle/include/ThemeStyleView.h" +#include "themestyle/include/ThemeStyleModel.h" +#include "themestyle/include/ThemeStylePresenter.h" +#include "common/key_code.h" +#include + +namespace OHOS +{ + + static ThemeStylePresenter *g_pThemeStylePresenter = nullptr; + + ThemeStylePresenter::ThemeStylePresenter() + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ThemeStylePresenter::ThemeStylePresenter"); + g_pThemeStylePresenter = this; + } + + ThemeStylePresenter::~ThemeStylePresenter() + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ThemeStylePresenter::~ThemeStylePresenter"); + g_pThemeStylePresenter = nullptr; + } + + ThemeStylePresenter *ThemeStylePresenter::GetInstance() + { + return g_pThemeStylePresenter; + } + + void ThemeStylePresenter::OnStart() + { + Presenter::OnStart(); + } + + void ThemeStylePresenter::OnPause() + { + Presenter::OnPause(); + } + + void ThemeStylePresenter::OnResume(void) + { + Presenter::OnResume(); + } + + void ThemeStylePresenter::OnStop(void) + { + Presenter::OnStop(); + } + + bool ThemeStylePresenter::OnClick(UIView &view, const ClickEvent &event) + { + UNUSED(event); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ThemeStylePresenter::OnClick"); + UILabelButtonExt *LabelButtonExt = dynamic_cast(&view); + std::string viewId = LabelButtonExt->GetViewId(); + if (viewId == THEMESTYLEVIEWEXIT) + { + NativeAbility::GetInstance().Back(TransitionType::TRANSITION_BACK_TO_HEXAGONS); + return true; + } + else + { + if (viewId == THEME_STYLE_LIST) + { + ThemeStyleModel::GetInstance().SetAppListDisplayStyle(ThemeStyle::APPLIST_STYLE); + } + else if (viewId == THEME_STYLE_HEXAGONS) + { + ThemeStyleModel::GetInstance().SetAppListDisplayStyle(ThemeStyle::HEXAGONS_STYLE); + } + // LabelButtonExt->SetImageSrc(PNG_CHECKBOX_ON_IMAGE, PNG_CHECKBOX_ON_IMAGE); + // LabelButtonExt->Invalidate(); + uint16_t preSlice = NativeAbility::GetInstance().GetPreSliceId(); + if (preSlice == VIEW_APPLIST) + { + NativeAbility::GetInstance().Back(TransitionType::TRANSITION_BACK_TO_HEXAGONS); + } + else + { + NativeAbility::GetInstance().ChangeSlice(VIEW_APPLIST); + NativeAbility::GetInstance().ClearSliceIdStack(); + } + } + + return true; + } + + bool ThemeStylePresenter::OnDrag(UIView &view, const DragEvent &event) + { + UNUSED(view); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "RespiratoryTrainingPresenter::OnDrag"); + if ((event.GetDeltaX() > X_DRAG_OFFSET) && (event.GetDeltaX() > (DOUBLES * MATH_ABS(event.GetDeltaY())))) // 拖动过程中判断是否是水平滑动 + { + ThemeStylePresenter::X_DRAG_FLAG = true; + } + return true; + } + + bool ThemeStylePresenter::OnDragEnd(UIView &view, const DragEvent &event) + { + UNUSED(view); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "RespiratoryTrainingPresenter::OnDragEnd"); + if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT && ThemeStylePresenter::X_DRAG_FLAG) + { + NativeAbility::GetInstance().Back(TransitionType::TRANSITION_BACK_TO_HEXAGONS); + ThemeStylePresenter::X_DRAG_FLAG = false; + } + return true; + } + + bool ThemeStylePresenter::OnKeyAct(UIView &view, const KeyEvent &event) + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ThemeStylePresenter::OnKeyAct"); + uint16 keyID = event.GetKeyId(); + uint16 keyState = event.GetState(); + // 如果是power键就返回上一级 + if (keyID == static_cast(ZliteKeyCode::ZLITE_KEY_POWER) && keyState == 0 && uapi_get_screen_state() == 0) + { + NativeAbility::GetInstance().Back(TransitionType::TRANSITION_BACK_TO_HEXAGONS); + } + return true; + } + + // 获取当前主题是否是蜂窝 + bool ThemeStylePresenter::GetHexagonsStyleState(void) + { + return (ThemeStyleModel::GetInstance().GetAppListDisplayStyle() == ThemeStyle::HEXAGONS_STYLE); + } + + // 获取当前主题是否是列表 + bool ThemeStylePresenter::GetListStyleState(void) + { + return (ThemeStyleModel::GetInstance().GetAppListDisplayStyle() == ThemeStyle::APPLIST_STYLE); + } + +} diff --git a/code/sdk/application/wearable/fd230app/nativeui/themestyle/src/ThemeStyleView.cpp b/code/sdk/application/wearable/fd230app/nativeui/themestyle/src/ThemeStyleView.cpp new file mode 100644 index 000000000..caf87d295 --- /dev/null +++ b/code/sdk/application/wearable/fd230app/nativeui/themestyle/src/ThemeStyleView.cpp @@ -0,0 +1,297 @@ +/* + * @Author: luozheng 1732036298@qq.com + * @Date: 2024-06-14 09:40:20 + * @LastEditors: luozheng 1732036298@qq.com + * @LastEditTime: 2024-06-14 18:41:37 + * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/themestyle/src/ThemeStyleView.cpp + */ + +#include +#include "themestyle/include/ThemeStyleView.h" +#include "themestyle/include/ThemeStylePresenter.h" +#include "language/font/ui_resource_string.h" + +namespace OHOS +{ + static ThemeStyleView *g_pThemeStyleView{nullptr}; + static constexpr uint16 SCROLLBLANKSIZE = 75; + static constexpr uint16 REBOUNDSIZE = 35; + ThemeStyleView::ThemeStyleView() + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ThemeStyleView::ThemeStyleView"); + g_pThemeStyleView = this; + } + + ThemeStyleView::~ThemeStyleView() + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ThemeStyleView::~ThemeStyleView"); + g_pThemeStyleView = nullptr; + } + + ThemeStyleView *ThemeStyleView::GetInstance() + { + return g_pThemeStyleView; + } + + void ThemeStyleView::ClearAll(void) + { + if (scrollView != nullptr) + { + scrollView->RemoveAll(); + + delete titleText; + titleText = nullptr; + + for (int i = 0; i < MAX_STYLE; i++) + { + delete ThemeStyleLabelButton[i]; + ThemeStyleLabelButton[i] = nullptr; + + delete ThemeStyleImage[i]; + ThemeStyleImage[i] = nullptr; + } + + delete ExitLabelButton; + ExitLabelButton = nullptr; + + delete scrollView; + scrollView = nullptr; + } + } + + // 设置按键监听 + static void SetKeyActListener() + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SetKeyActListener"); + RootView::OnKeyActListener *keyactListener = (RootView::OnKeyActListener *)OHOS::ThemeStylePresenter::GetInstance(); + RootView::GetInstance()->SetOnKeyActListener(keyactListener); + } + + UILabelButtonExt *ThemeStyleView::ThemeStyleLabelButtonViewInit(LabelButtonConfig &labelbuttonconfig) + { + UILabelButtonExt *labelButton = new UILabelButtonExt(); + if (labelButton == nullptr) + { + return nullptr; + } + labelButton->SetPosition(labelbuttonconfig.left, labelbuttonconfig.top); + labelButton->Resize(labelbuttonconfig.width, labelbuttonconfig.height); + labelButton->SetViewId(labelbuttonconfig.viewId); + labelButton->SetStyle(STYLE_BACKGROUND_COLOR, 0xff191919); + labelButton->SetImagePosition(300, 30); + labelButton->SetImageSrc(PNG_CHECKBOX_OFF_IMAGE, PNG_CHECKBOX_OFF_IMAGE); + labelButton->SetTextId(labelbuttonconfig.textId); + labelButton->SetAlign(TEXT_ALIGNMENT_LEFT); + labelButton->SetLabelPosition(100, 0); + labelButton->SetFont(DEFAULT_VECTOR_FONT_FILENAME, labelbuttonconfig.fontSize); + labelButton->SetStyle(STYLE_LINE_HEIGHT, labelbuttonconfig.lineHeigh); + labelButton->SetStyleForState(STYLE_BACKGROUND_COLOR, 0xff000000, UIButton::PRESSED); + labelButton->SetStyleForState(STYLE_BORDER_COLOR, 0xffffffff, UIButton::PRESSED); + labelButton->SetStyleForState(STYLE_BORDER_OPA, 0x00, UIButton::PRESSED); + labelButton->SetOnClickListener(presenter_); + + return labelButton; + } + + UIImageView *ThemeStyleView::ThemeStyleImageViewInit(ImageConfig &imageconfig) + { + UIImageView *Image = new UIImageView(); + if (Image == nullptr) + { + return nullptr; + } + Image->SetPosition(imageconfig.x, imageconfig.y, imageconfig.w, imageconfig.h); + Image->SetSrc(imageconfig.src); + return Image; + } + + bool ThemeStyleView::CreateThemeStyleScrollView(void) + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ThemeStyleView::InitThemeStyleScrollView"); + scrollView = new UIScrollView(); + if (scrollView == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "scrollView new fail!"); + return false; + } + scrollView->SetPosition(0, 0, Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight()); + scrollView->SetScrollBlankSize(SCROLLBLANKSIZE); + scrollView->SetReboundSize(REBOUNDSIZE); + scrollView->SetHorizontalScrollState(false); + scrollView->SetTouchable(true); + scrollView->SetDraggable(true); + container_->Add(scrollView); + + return true; + } + + bool ThemeStyleView::CreateThemeStyleLabelView(void) + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ThemeStyleView::InitThemeStyleLabelView"); + titleText = new UILabelExt(); + if (titleText == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "titleText new fail!"); + return false; + } + titleText->SetPosition(83, 52, 300, 35); + titleText->SetTextId(STR_DISPLAY_MODE); // 显示方式 + titleText->SetStyle(STYLE_TEXT_FONT, 30); + titleText->SetStyle(STYLE_LINE_HEIGHT, 35); + titleText->SetLineBreakMode(UILabel::LINE_BREAK_MARQUEE); + titleText->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30); + titleText->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); + scrollView->Add(titleText); + + return true; + } + + bool ThemeStyleView::CreateThemeStyleLabelButtonView(void) + { + LabelButtonConfig labelbuttonconfig = { + .left = 43, + .top = 120, + .width = 380, + .height = 100, + .fontSize = 30, + .lineHeigh = 35, + .viewId = THEME_STYLE_LIST, + .textId = STR_LIST_DISPLAY, + }; + + int top = 120; + const char *viewId[MAX_STYLE] = {THEME_STYLE_LIST, THEME_STYLE_HEXAGONS}; + uint16_t textId[MAX_STYLE] = {STR_LIST_DISPLAY, STR_CELLULAR_DISPLAY}; + for (int i = 0; i < MAX_STYLE; i++) + { + labelbuttonconfig.top = top + 120 * i; + labelbuttonconfig.viewId = viewId[i]; + labelbuttonconfig.textId = textId[i]; + ThemeStyleLabelButton[i] = ThemeStyleLabelButtonViewInit(labelbuttonconfig); + if (ThemeStyleLabelButton[i] == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThemeStyleLabelButton[%d] is nullptr", i); + return false; + } + scrollView->Add(ThemeStyleLabelButton[i]); + } + /* -------------------------------------------------------------------------- */ + ExitLabelButton = new UILabelButtonExt(); + if (ExitLabelButton == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ExitLabelButton is nullptr"); + return false; + } + ExitLabelButton->SetPosition(labelbuttonconfig.left, labelbuttonconfig.top + 120); + ExitLabelButton->Resize(labelbuttonconfig.width, labelbuttonconfig.height); + ExitLabelButton->SetViewId(THEMESTYLEVIEWEXIT); + ExitLabelButton->SetStyle(STYLE_BACKGROUND_COLOR, 0xff191919); + ExitLabelButton->SetTextId(STR_CLOSE); + ExitLabelButton->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30); + ExitLabelButton->SetStyle(STYLE_LINE_HEIGHT, labelbuttonconfig.lineHeigh); + ExitLabelButton->SetStyleForState(STYLE_BACKGROUND_COLOR, 0xff000000, UIButton::PRESSED); + ExitLabelButton->SetStyleForState(STYLE_BORDER_COLOR, 0xffffffff, UIButton::PRESSED); + ExitLabelButton->SetStyleForState(STYLE_BORDER_OPA, 0x00, UIButton::PRESSED); + ExitLabelButton->SetOnClickListener(presenter_); + scrollView->Add(ExitLabelButton); + + return true; + } + + bool ThemeStyleView::CreateThemeStyleImageView(void) + { + ImageConfig imageconfig = { + .x = 83, + .y = 150, + .w = 40, + .h = 40, + .src = THEMESTYLE_LIST_IMAGEPATH, + }; + int y = 150; + const char *src[MAX_STYLE] = {THEMESTYLE_LIST_IMAGEPATH, THEMESTYLE_HEXAGONS_IMAGEPATH}; + for (int i = 0; i < MAX_STYLE; i++) + { + imageconfig.y = y + 120 * i; + imageconfig.src = src[i]; + ThemeStyleImage[i] = ThemeStyleImageViewInit(imageconfig); + if (ThemeStyleImage[i] == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThemeStyleImage[%d] is nullptr", i); + return false; + } + scrollView->Add(ThemeStyleImage[i]); + } + + return true; + } + + void ThemeStyleView::ThemeStyleViewInit(void) + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ThemeStyleView::ThemeStyleViewInit"); + if (!CreateThemeStyleScrollView() || !CreateThemeStyleLabelView() || + !CreateThemeStyleLabelButtonView() || !CreateThemeStyleImageView()) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThemeStyleView::ThemeStyleViewInit fail!!"); + return; + } + UpdateSelectedStyle(); + } + + void ThemeStyleView::OnStart() + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ThemeStyleView::OnStart"); + View::OnStart(); + SetContainerView(new UIViewGroup()); + container_->SetPosition(0, 0, Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight()); + container_->SetOnDragListener(presenter_); + container_->SetTouchable(true); + container_->SetDraggable(true); + + ThemeStyleViewInit(); + SetKeyActListener(); + } + + void ThemeStyleView::OnSetUpView() + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ThemeStyleView::OnSetUpView"); + View::OnSetUpView(); + Draw(); + } + + void ThemeStyleView::OnTearDownView() + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ThemeStyleView::OnTearDownView"); + View::OnTearDownView(); + } + + void ThemeStyleView::OnStop() + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ThemeStyleView::OnStop"); + View::OnStop(); + RootView::GetInstance()->ClearOnKeyActListener(); + if (container_ != nullptr) + { + container_->RemoveAll(); + delete container_; + container_ = nullptr; + } + ClearAll(); + } + + //更新按钮的选中状态 + void ThemeStyleView::UpdateSelectedStyle(void) + { + for (int i = 0; i < MAX_STYLE; i++) + { + if (i == ThemeStyleModel::GetInstance().GetSelectThemeStyleId()) + { + ThemeStyleLabelButton[i]->SetImageSrc(PNG_CHECKBOX_ON_IMAGE, PNG_CHECKBOX_ON_IMAGE); + } + else + { + ThemeStyleLabelButton[i]->SetImageSrc(PNG_CHECKBOX_OFF_IMAGE, PNG_CHECKBOX_OFF_IMAGE); + } + ThemeStyleLabelButton[i]->Invalidate(); + } + } +} diff --git a/code/sdk/application/wearable/nativeabilityfwk/include/Ability.h b/code/sdk/application/wearable/nativeabilityfwk/include/Ability.h index 069aed3e3..6127a7d9f 100755 --- a/code/sdk/application/wearable/nativeabilityfwk/include/Ability.h +++ b/code/sdk/application/wearable/nativeabilityfwk/include/Ability.h @@ -99,6 +99,15 @@ public: return false; // 返回false表示无前一个slice,退回到默认slice } } + + void ClearSliceIdStack(void) + { + while(!backStack_.empty()) + { + backStack_.pop(); + } + } + protected: Ability() = default; virtual ~Ability() = default; diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/themestyle/grid.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/themestyle/grid.bin new file mode 100644 index 000000000..9d4dddb41 --- /dev/null +++ b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/themestyle/grid.bin @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5807bc7196ad96d976c0b3d21846c365e5682646e5ee7f1b97905216f6a01b04 +size 1144 diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/themestyle/hexagons.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/themestyle/hexagons.bin new file mode 100644 index 000000000..fb143ee92 --- /dev/null +++ b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/themestyle/hexagons.bin @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:67f69deef89552e906c10a65a4444040ac7f6179db8bd9fba85c34cf77efc147 +size 1144 diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/themestyle/list.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/themestyle/list.bin new file mode 100644 index 000000000..8ec851c84 --- /dev/null +++ b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/themestyle/list.bin @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9455c97c5c82fdf90230323c804897098a4b98f4e7db20e078b314e8e9726135 +size 1144 -- 2.17.1