Merge #289 into sdk602patch0521 from refs/changes/289/head 290/target/1
author罗正 <1732036298@qq.com>
Sat, 15 Jun 2024 01:28:18 +0000 (01:28 +0000)
committersnickersun@163.com <accounts_62b90f7fcf51ade33b6f628e@mail.teambition.com>
Sat, 15 Jun 2024 01:28:18 +0000 (01:28 +0000)
Code review from 罗正

* refs/changes/289/head: (3 commits squashed)

  - 添加显示方式(applist主题样式)Slice

  - Merge branch &#39;sdk602patch0521&#39; of https://codeup.aliyun.com/64191456b9581d62e8f81ac0/FD230 into sdk602patch0521

  - applist与主题样式修改

Signed-off-by: 罗正 <1732036298@qq.com>
Reviewed-by: snickersun@163.com <accounts_62b90f7fcf51ade33b6f628e@mail.teambition.com>
Merged-by: snickersun@163.com <accounts_62b90f7fcf51ade33b6f628e@mail.teambition.com>
link: https://codeup.aliyun.com/64191456b9581d62e8f81ac0/FD230/change/289
18 files changed:
code/sdk/application/wearable/fd230app/CMakeLists.txt
code/sdk/application/wearable/fd230app/nativelauncher/include/AppViewIDs.h
code/sdk/application/wearable/fd230app/nativelauncher/include/NativeLauncher.h
code/sdk/application/wearable/fd230app/nativelauncher/src/NativeLauncher.cpp
code/sdk/application/wearable/fd230app/nativeui/applist/src/ApplistModel.cpp
code/sdk/application/wearable/fd230app/nativeui/key/src/KeyInputListener.cpp
code/sdk/application/wearable/fd230app/nativeui/rebootdevice/src/RebootModel.cpp
code/sdk/application/wearable/fd230app/nativeui/settings/src/SettingModel.cpp
code/sdk/application/wearable/fd230app/nativeui/themestyle/include/ThemeStyleModel.h [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/themestyle/include/ThemeStylePresenter.h [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/themestyle/include/ThemeStyleView.h [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/themestyle/src/ThemeStyleModel.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/themestyle/src/ThemeStylePresenter.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/themestyle/src/ThemeStyleView.cpp [new file with mode: 0644]
code/sdk/application/wearable/nativeabilityfwk/include/Ability.h
code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/themestyle/grid.bin [new file with mode: 0644]
code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/themestyle/hexagons.bin [new file with mode: 0644]
code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/themestyle/list.bin [new file with mode: 0644]

index f17a043..82e41e5 100644 (file)
@@ -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
index 959d6c1..af166a7 100644 (file)
@@ -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,
     /* ---------------------------------- 界面 ---------------------------------- */
index c27a9cf..41fb8ec 100644 (file)
@@ -61,6 +61,7 @@ namespace OHOS
         void InitSystemUpdateSlice(void);
         void InitWatchQRCodeSlice(void);
         void InitRespiratoryTrainingSlice(void);
+        void InitThemeStyleSlice(void);
         /* --------------------------------界面------------------------------------ */
         void InitRotateSlice(void);
         void InitBloodSlice(void);
index fe80268..077ad21 100644 (file)
 
 #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<ThemeStyleView, ThemeStylePresenter>;
+        if (ThemeStyle == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThemeStyle");
+            return;
+        }
+        NativeAbility::GetInstance().AddSliceProxy(VIEW_THEME_STYLE, ThemeStyle);
+    }
     /* -------------------------------------------------------------------------- */
     void NativeLauncher::InitSetDesktopSlice(void)
     {
index f7a3b06..25105cb 100644 (file)
@@ -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);
     }
 }
index 4d71687..d345d15 100644 (file)
@@ -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 // 如果当前页面是主表盘,如果屏幕亮起,则先处理闹钟通知再切换到用户配置的快捷卡片
index 73ecf58..b083cd0 100644 (file)
@@ -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);
         }
 
index 658ec6d..84542fa 100644 (file)
@@ -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 (file)
index 0000000..de5fb1c
--- /dev/null
@@ -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 <cstdint>
+#include <map>
+#include <iostream>
+#include <unordered_map>
+#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<ThemeStyle, std::string> ThemeStyleMap = {
+        {ThemeStyle::APPLIST_STYLE, THEMESTYLE_VALUE_LIST},
+        {ThemeStyle::HEXAGONS_STYLE, THEMESTYLE_VALUE_HEXAGONS},
+        // 在此处添加更多的映射关系
+    };
+
+    // 映射[显示样式值]->[枚举值]的关系
+    const std::unordered_map<std::string, ThemeStyle> 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 (file)
index 0000000..199d279
--- /dev/null
@@ -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<ThemeStyleView>,
+                                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 (file)
index 0000000..8aa1737
--- /dev/null
@@ -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<ThemeStylePresenter>
+    {
+    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 (file)
index 0000000..87fbf77
--- /dev/null
@@ -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 (file)
index 0000000..3771bf5
--- /dev/null
@@ -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 <custom_utils.h>
+
+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<ThemeStyleView>::OnStart();
+    }
+
+    void ThemeStylePresenter::OnPause()
+    {
+        Presenter<ThemeStyleView>::OnPause();
+    }
+
+    void ThemeStylePresenter::OnResume(void)
+    {
+        Presenter<ThemeStyleView>::OnResume();
+    }
+
+    void ThemeStylePresenter::OnStop(void)
+    {
+        Presenter<ThemeStyleView>::OnStop();
+    }
+
+    bool ThemeStylePresenter::OnClick(UIView &view, const ClickEvent &event)
+    {
+        UNUSED(event);
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ThemeStylePresenter::OnClick");
+        UILabelButtonExt *LabelButtonExt = dynamic_cast<UILabelButtonExt *>(&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<uint16_t>(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 (file)
index 0000000..caf87d2
--- /dev/null
@@ -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 <string>
+#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<ThemeStylePresenter>::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<ThemeStylePresenter>::OnSetUpView();
+        Draw();
+    }
+
+    void ThemeStyleView::OnTearDownView()
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ThemeStyleView::OnTearDownView");
+        View<ThemeStylePresenter>::OnTearDownView();
+    }
+
+    void ThemeStyleView::OnStop()
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ThemeStyleView::OnStop");
+        View<ThemeStylePresenter>::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();
+        }
+    }
+}
index 069aed3..6127a7d 100755 (executable)
@@ -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 (file)
index 0000000..9d4dddb
--- /dev/null
@@ -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 (file)
index 0000000..fb143ee
--- /dev/null
@@ -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 (file)
index 0000000..8ec851c
--- /dev/null
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9455c97c5c82fdf90230323c804897098a4b98f4e7db20e078b314e8e9726135
+size 1144