【屏幕与亮度】UI
authorCaisking <Casiking@zhihuishixun.com>
Mon, 28 Apr 2025 10:00:53 +0000 (18:00 +0800)
committerCaisking <Casiking@zhihuishixun.com>
Mon, 28 Apr 2025 10:00:53 +0000 (18:00 +0800)
code/sdk/application/wearable/fd230/nativeapp/nativeui/displaybrightness/include/BrightnessControlView.h [new file with mode: 0644]
code/sdk/application/wearable/fd230/nativeapp/nativeui/displaybrightness/include/DisplayBrightnessModel.h [new file with mode: 0644]
code/sdk/application/wearable/fd230/nativeapp/nativeui/displaybrightness/include/DisplayBrightnessPresenter.h [new file with mode: 0644]
code/sdk/application/wearable/fd230/nativeapp/nativeui/displaybrightness/include/DisplayBrightnessView.h [new file with mode: 0644]
code/sdk/application/wearable/fd230/nativeapp/nativeui/displaybrightness/include/ScreenDurationView.h [new file with mode: 0644]
code/sdk/application/wearable/fd230/nativeapp/nativeui/displaybrightness/src/BrightnessControlView.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230/nativeapp/nativeui/displaybrightness/src/DisplayBrightnessModel.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230/nativeapp/nativeui/displaybrightness/src/DisplayBrightnessPresent.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230/nativeapp/nativeui/displaybrightness/src/DisplayBrightnessView.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230/nativeapp/nativeui/displaybrightness/src/ScreenDurationView.cpp [new file with mode: 0644]

diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/displaybrightness/include/BrightnessControlView.h b/code/sdk/application/wearable/fd230/nativeapp/nativeui/displaybrightness/include/BrightnessControlView.h
new file mode 100644 (file)
index 0000000..2f5262d
--- /dev/null
@@ -0,0 +1,75 @@
+/*\r
+ * @Author: luozheng 1732036298@qq.com\r
+ * @Date: 2024-01-29 15:37:44\r
+ * @LastEditors: luozheng 1732036298@qq.com\r
+ * @LastEditTime: 2024-09-27 15:07:34\r
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/displaybrightness/include/BrightnessControlView.h\r
+ */\r
+#ifndef BRIGHTNESS_CONTROL_VIEW_H\r
+#define BRIGHTNESS_CONTROL_VIEW_H\r
+\r
+\r
+#include "View.h"\r
+#include "components/ui_scroll_view.h"\r
+#include "components/ui_slider.h"\r
+#include "components/ui_image_view.h"\r
+#include <memory>\r
+#include "map"\r
+namespace OHOS\r
+{\r
+#define BRIGHTNESS_MIN 51\r
+#define BRIGHTNESS_MAX 0xff\r
+#define BRIGHTNESS_PROGRESS "progress"\r
+\r
+    // 步骤 1: 定义策略接口.定义一个策略接口,所有的亮度调整策略都需要实现这个接口\r
+    class BrightnessControlView;\r
+    class BrightnessChangeStrategy\r
+    {\r
+    public:\r
+        virtual void ApplyChange(BrightnessControlView *view, UISlider *slider, uint8_t value) = 0;\r
+        virtual ~BrightnessChangeStrategy() = default;\r
+    };\r
+\r
+    static const char *BRIGHTNESS_CONTROL_SLIDER = "BrightnessControlViewSlider";\r
+    class BrightnessSliderEventListener : public UISlider::UISliderEventListener,\r
+                                          public UIView::OnClickListener,\r
+                                          public UIView::OnDragListener,\r
+                                          public UIView::OnRotateListener\r
+    {\r
+    public:\r
+        BrightnessSliderEventListener();\r
+        ~BrightnessSliderEventListener();\r
+        static BrightnessSliderEventListener *GetInstance();\r
+        void ChangeBrightness(uint8_t status, uint8_t value);\r
+        void OnChange(int32_t value) override;\r
+        void OnRelease(int32_t value) override;\r
+        bool OnClick(UIView &view, const ClickEvent &event) override;\r
+        bool OnDrag(UIView &view, const DragEvent &event) override;\r
+        bool OnRotateEnd(UIView& view, const RotateEvent& event);\r
+\r
+    private:\r
+        std::map<uint8_t, std::shared_ptr<BrightnessChangeStrategy>> strategyMap;\r
+    };\r
+    class BrightnessControlView\r
+    {\r
+    public:\r
+        BrightnessControlView();\r
+        virtual ~BrightnessControlView();\r
+        static BrightnessControlView *GetInstance(void);\r
+        UIScrollView *BrightnessControlViewInit(void);\r
+        void ClearAll(void);\r
+        UISlider *GetBrightnessControlViewSlider(void);\r
+\r
+    private:\r
+        bool SetUpScrollView(void);\r
+        bool SetUpSlider(void);\r
+        bool SetUpImageView(void);\r
+        BrightnessSliderEventListener *rawPointer{nullptr};\r
+        UIScrollView *BrightnessControlScrollView{nullptr};\r
+        UISlider *BrightnessControlViewSlider = nullptr;\r
+        UIImageView *BrightnessControlViewImageIcon = nullptr;\r
+        bool initViewStatus{false};\r
+    };\r
+} // namespace OHOS\r
+\r
+#endif
\ No newline at end of file
diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/displaybrightness/include/DisplayBrightnessModel.h b/code/sdk/application/wearable/fd230/nativeapp/nativeui/displaybrightness/include/DisplayBrightnessModel.h
new file mode 100644 (file)
index 0000000..94af90d
--- /dev/null
@@ -0,0 +1,33 @@
+/*\r
+ * @Author: luozheng 1732036298@qq.com\r
+ * @Date: 2024-04-12 20:11:04\r
+ * @LastEditors: luozheng 1732036298@qq.com\r
+ * @LastEditTime: 2024-06-18 15:14:25\r
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/displaybrightness/include/DisplayBrightnessModel.h\r
+ */\r
+#ifndef DISPLAY_BRIGHTNESS_MODEL_H_\r
+#define DISPLAY_BRIGHTNESS_MODEL_H_\r
+\r
+#include "ConfigModel.h"\r
+namespace OHOS\r
+{\r
+    class DisplayBrightnessModel\r
+    {\r
+    public:\r
+        static DisplayBrightnessModel *GetInstance(void);\r
+        bool UpdateRaiseToBrightnessCheckBoxButtonStatus(void);\r
+        bool UpdateScreenDurationRadioButtonSlectStatus(void);\r
+        bool UpdateSelectScreenDurationLabel(void);\r
+        bool UpdateBrightnessValueOfSlider(void);\r
+        void SetScreenDurationTime(unsigned int time);\r
+        unsigned int GetScreenDurationTime(void);\r
+\r
+    private:\r
+        DisplayBrightnessModel();\r
+        DisplayBrightnessModel(const DisplayBrightnessModel &) = delete;\r
+        DisplayBrightnessModel &operator=(const DisplayBrightnessModel &) = delete;\r
+        virtual ~DisplayBrightnessModel();\r
+    };\r
+}\r
+\r
+#endif
\ No newline at end of file
diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/displaybrightness/include/DisplayBrightnessPresenter.h b/code/sdk/application/wearable/fd230/nativeapp/nativeui/displaybrightness/include/DisplayBrightnessPresenter.h
new file mode 100644 (file)
index 0000000..bf14d29
--- /dev/null
@@ -0,0 +1,109 @@
+/*\r
+ * @Author: luozheng 1732036298@qq.com\r
+ * @Date: 2024-02-18 09:10:05\r
+ * @LastEditors: luozheng 1732036298@qq.com\r
+ * @LastEditTime: 2024-07-22 16:24:31\r
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/displaybrightness/include/DisplayBrightnessPresenter.h\r
+ */\r
+#ifndef _DISPLAY_BRIGHTNESS_PRESENTER_H\r
+#define _DISPLAY_BRIGHTNESS_PRESENTER_H\r
+\r
+/*显示与亮度*/\r
+#include "Presenter.h"\r
+#include "DisplayBrightnessView.h"\r
+#include "components/ui_slider.h"\r
+\r
+namespace OHOS\r
+{\r
+    static constexpr uint8_t WRIST_RAISE_TO_WAKE_ENABLED = 1;\r
+    static constexpr uint8_t WRIST_RAISE_TO_WAKE_DISENABLED = 0;\r
+    typedef enum\r
+    {\r
+        DISPLAYBRIGHTNESSVIEW = 0, // 屏幕与亮度视图(slice)\r
+        SCREENDURATIONVIEW,        // 亮屏时长视图(subView)\r
+        MAX_DISPLAYBRIGHTNESSVIEWID,\r
+    } DISPLAYBRIGHTNESSVIEWID;\r
+\r
+    /// @brief 亮度状态改变\r
+    typedef enum : uint8_t\r
+    {\r
+        BRIGHTNESSLOWERS = 0, // 亮度降低\r
+        BRIGHTNESSEVATED = 1, // 亮度增加\r
+        BRIGHTNESSDRAG = 2,   // 亮度拖动状态\r
+    } BrightnessChangeStatus;\r
+\r
+    /// @brief 亮屏时长\r
+    typedef enum : uint32_t\r
+    {\r
+        SCREENDURATION_FIVE = 1000 * 5,            // 5秒后熄屏\r
+        SCREENDURATION_TEN = 1000 * 10,            // 10秒后熄屏\r
+        SCREENDURATION_FIFTEENTH = 1000 * 15,      // 15秒后熄屏\r
+        SCREENDURATION_THIRTY = 1000 * 30,         // 30秒后熄屏\r
+        SCREENDURATION_SIXTY = 1000 * 60,          // 60秒后熄屏\r
+        SCREENDURATION_THREE_HUNDRED = 1000 * 300, // 300秒后熄屏\r
+    } ScreenDurationTime;\r
+\r
+    typedef enum\r
+    {\r
+        ScreenDurationRadioButton1 = 0,\r
+        ScreenDurationRadioButton2,\r
+        ScreenDurationRadioButton3,\r
+        ScreenDurationRadioButton4,\r
+        ScreenDurationRadioButton5,\r
+        ScreenDurationRadioButton6,\r
+        Max_ScreenDurationRadioButton,\r
+    } ScreenDurationRadioButton;\r
+\r
+    static const char *BRINGHTNESSCONTROLBUTTON_VIEW = "BRINGHTNESSCONTROLBUTTON";                 // 亮度调节按钮视图id\r
+    static const char *SCREENDURATIONBUTTON_VIEWID = "SCREENDURATIONBUTTON";                       // 亮屏时长按钮视图id\r
+    static const char *RAISETOBRIGHTNESSCHECKBOXBUTTON_VIEWID = "RAISETOBRIGHTNESSCHECKBOXBUTTON"; // 抬腕亮屏checkbox按钮视图id\r
+\r
+    class ScreenDurationRadiobuttonOnChangeListener : public UICheckBox::OnChangeListener, public UIView::OnClickListener\r
+    {\r
+    public:\r
+        ScreenDurationRadiobuttonOnChangeListener() {}\r
+        ScreenDurationRadiobuttonOnChangeListener(UIView *view)\r
+        {\r
+            m_view = view;\r
+        }\r
+        ~ScreenDurationRadiobuttonOnChangeListener() {}\r
+        bool OnChange(UICheckBox::UICheckBoxState state) override;\r
+        bool OnClick(UIView &view, const ClickEvent &event) override;\r
+\r
+    private:\r
+        UIView *m_view{nullptr};\r
+    };\r
+\r
+    class DisplayBrightnessView;\r
+    class DisplayBrightnessPresenter : public Presenter<DisplayBrightnessView>,\r
+                                       public UIView::OnClickListener,\r
+                                       public UIView::OnDragListener,\r
+                                       public RootView::OnKeyActListener,\r
+                                       public UICheckBox::OnChangeListener\r
+    {\r
+    public:\r
+        DisplayBrightnessPresenter();\r
+        virtual ~DisplayBrightnessPresenter();\r
+\r
+        void OnStart() override;\r
+        void OnPause() override;\r
+        void OnResume() override;\r
+        void OnStop() override;\r
+\r
+        static DisplayBrightnessPresenter *GetInstance();\r
+        void SetRaiseToBrightnessState(bool value);\r
+        void SetScreenDurationRadioButtonSelectStatus(uint32_t value);\r
+        void SetSelectScreenDurationLabel(uint32_t value);\r
+\r
+    private:\r
+        // 因为继承了OnClickListener,所以有OnClick属性,至于参数,原函数也这样直接继承;\r
+        bool OnClick(UIView &view, const ClickEvent &event) override;\r
+        bool OnDrag(UIView &view, const DragEvent &event) override;\r
+        bool OnDragEnd(UIView &view, const DragEvent &event) override;\r
+        bool OnChange(UICheckBox::UICheckBoxState state) override;\r
+        bool OnKeyAct(UIView &view, const KeyEvent &event) override; // 增加按键事件\r
+        bool X_DRAG_FLAG{false};\r
+    };\r
+} // namespace OHOS\r
+\r
+#endif //_DisplayBrightness_PRESENTER_H\r
diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/displaybrightness/include/DisplayBrightnessView.h b/code/sdk/application/wearable/fd230/nativeapp/nativeui/displaybrightness/include/DisplayBrightnessView.h
new file mode 100644 (file)
index 0000000..2378bf1
--- /dev/null
@@ -0,0 +1,109 @@
+#ifndef _DISPLAY_BRIGHTNESS_VIEW_H\r
+#define _DISPLAY_BRIGHTNESS_VIEW_H\r
+\r
+\r
+#include "View.h"\r
+#include "components/ui_label.h"\r
+#include "components/ui_label_ext.h"\r
+#include "components/ui_image_view.h"\r
+#include "components/ui_button.h"\r
+#include "components/ui_scroll_view.h"\r
+#include "components/ui_checkbox.h"\r
+#include "components/ui_radio_button.h"\r
+#include "DisplayBrightnessPresenter.h"\r
+#include "displaybrightness/include/ScreenDurationView.h"\r
+#include "memory"\r
+namespace OHOS\r
+{\r
+    static constexpr const char *DISPLAY_BRIGHTNESS_VIEW = "DisplayBrightnessView";\r
+    class DisplayBrightnessPresenter;\r
+    class DisplayBrightnessView : public View<DisplayBrightnessPresenter>\r
+    {\r
+    public:\r
+        struct ImageConfig\r
+        {\r
+            int16_t x;\r
+            int16_t y;\r
+            int16_t w;\r
+            int16_t h;\r
+            const char *ImageSrc;\r
+        };\r
+        struct ButtonConfig\r
+        {\r
+            int16_t x;\r
+            int16_t y;\r
+            int16_t w;\r
+            int16_t h;\r
+            const char *ViewId;\r
+            // const char *ImageSrc;\r
+        };\r
+        struct LabelConfig\r
+        {\r
+            int16_t left;\r
+            int16_t top;\r
+            int16_t width;\r
+            int16_t height;\r
+            int16_t fontSize;  // 字体大小\r
+            int16_t lineHeigh; // 行高\r
+            // std::string text;      // 文本\r
+            int16_t textId;\r
+            uint8_t lineBreakMode; // 断行模式。\r
+        };\r
+        struct CheckBoxConfig\r
+        {\r
+            int16_t x;\r
+            int16_t y;\r
+            int16_t w;\r
+            int16_t h;\r
+            const char *ViewId;\r
+            const char *select;\r
+            const char *unselect;\r
+        };\r
+        DisplayBrightnessView();\r
+        virtual ~DisplayBrightnessView();\r
+        static DisplayBrightnessView *GetInstance(void);\r
+\r
+        bool ChangeDisplayBrightnessView(int16_t thisView); // 切换到“屏幕与亮度”视图\r
+        bool ChangeScreenDurationView(int16_t thisView);    // 切换到亮屏时长视图\r
+        bool ClickFunc(int16_t interface);\r
+        void ChangeView(int16_t hideView, int16_t showView);\r
+        void SetRaiseToBrightnessCheckBoxButtonState(UICheckBox::UICheckBoxState state);\r
+        ScreenDurationView *GetScreenDurationView(void);\r
+        UILabelExt *GetSelectScreenDurationLabel(void);\r
+\r
+    public:\r
+        void OnStart() override;\r
+\r
+\r
+    private:\r
+        ScreenDurationView *p_ScreenDurationView{nullptr}; // 亮屏时长视图\r
+\r
+    private:\r
+        UILabelExt *SetUpLabel(LabelConfig &labelconfig);          // 设置标签\r
+        UIImageView *SetUpImageView(ImageConfig &imageconfig);     // 设置图片\r
+        UICheckBox *SetUpCheckBox(CheckBoxConfig &checkboxconfig); // 设置复选框\r
+        UIButton *SetTheButton(ButtonConfig &buttonconfig, UIView::OnClickListener *clickListener);\r
+        bool SetTheTitle(void);\r
+        bool InitDisplayBrightnessViewButton(void);\r
+        bool InitDisplayBrightnessViewLabel(void);\r
+        bool InitDisplayBrightnessViewImage(void);\r
+        bool InitDisplayBrightnessViewCheckBox(void);\r
+        bool SetUpScrollView(void);\r
+        void DisplayAndBrightnessViewInit(void);\r
+        void ClearAll(void);\r
+        UIScrollView *DisplayBrightnessScrollView[2]{nullptr};\r
+        UILabelExt *DisplayBrightnessTitleLabel = nullptr; // 显示与亮度标题\r
+        UIButton *BringhtnessControlButton = nullptr;      // 亮度调节按钮\r
+        UIButton *ScreenDurationButton = nullptr;          // 亮屏时长按钮\r
+        UILabelExt *BringhtnessControlLabel = nullptr;     // 亮度调节标签\r
+        UILabelExt *ScreenDurationLabel = nullptr;         // 亮屏时长标签\r
+        UILabelExt *selectScreenDurationLabel = nullptr;   // 选择的亮屏时间\r
+        UILabelExt *RaiseToBrightnessLabel = nullptr;      // 抬腕亮屏标签\r
+        UIImageView *NextImage[2]{nullptr};\r
+        UIImageView *RaiseToBrightnessImage = nullptr;         // 抬腕亮屏图片\r
+        UICheckBox *RaiseToBrightnessCheckBoxButton = nullptr; // 抬腕亮屏按钮\r
+        uint8_t state = UICheckBox::UICheckBoxState::MAX_STATUS_NUM;\r
+        bool initViewStatus{false};\r
+    };\r
+} // namespace OHOS\r
+#endif // DisplayBrightness_PRESENTER_H\r
diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/displaybrightness/include/ScreenDurationView.h b/code/sdk/application/wearable/fd230/nativeapp/nativeui/displaybrightness/include/ScreenDurationView.h
new file mode 100644 (file)
index 0000000..37cdafd
--- /dev/null
@@ -0,0 +1,81 @@
+/*\r
+ * @Author: luozheng 1732036298@qq.com\r
+ * @Date: 2024-03-30 09:14:38\r
+ * @LastEditors: luozheng 1732036298@qq.com\r
+ * @LastEditTime: 2024-07-22 16:30:36\r
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/displaybrightness/include/ScreenDurationView.h\r
+ */\r
+#ifndef SCREEN_DUATION_VIEW_H\r
+#define SCREEN_DUATION_VIEW_H\r
+// 屏幕时长\r
+\r
+#include "View.h"\r
+#include "components/ui_scroll_view.h"\r
+#include "components/ui_image_view.h"\r
+#include "components/ui_label_ext.h"\r
+#include "components/ui_radio_button.h"\r
+#include "components/ui_button.h"\r
+namespace OHOS\r
+{\r
+#define DURATIONS 6\r
+    static constexpr const char *SCREENDURATIONSCROLLVIEW = "ScreenDurationView";\r
+    class ScreenDurationView\r
+    {\r
+    public:\r
+        struct ButtonConfig\r
+        {\r
+            int16_t x;\r
+            int16_t y;\r
+            int16_t w;\r
+            int16_t h;\r
+        };\r
+        struct LabelConfig\r
+        {\r
+            int16_t left;\r
+            int16_t top;\r
+            int16_t width;\r
+            int16_t height;\r
+            int16_t fontSize;      // 字体大小\r
+            int16_t lineHeigh;     // 行高\r
+            int16_t textId;        // 文本id\r
+            uint8_t lineBreakMode; // 断行模式。\r
+        };\r
+        struct RadioButtonConfig\r
+        {\r
+            int16_t x;\r
+            int16_t y;\r
+            int16_t w;\r
+            int16_t h;\r
+            // const char *viewId;\r
+            const char *select;\r
+            const char *unselect;\r
+        };\r
+        ScreenDurationView();\r
+        virtual ~ScreenDurationView();\r
+        static ScreenDurationView *GetInstance(void);\r
+        UIScrollView *ScreenDurationViewInit(void);\r
+        void ClearAll(void);\r
+        UIRadioButton *GetRadioButton(int16_t i);\r
+        void SetRadioButtonSelectStatus(int16_t i);\r
+        UIButton *GetScreenDurationButton(int16_t i);\r
+\r
+    private:\r
+        UIButton *SetUpButtonView(ButtonConfig &buttonConfig);                 // 设置按钮\r
+        UILabelExt *SetUpLabel(LabelConfig &labelconfig);                      // 设置标签\r
+        UIRadioButton *SetUpRadioButton(RadioButtonConfig &radiobuttonconfig); // 设置单选框\r
+        bool SetUpScrollView(void);\r
+        bool SetUpScreenDurationViewLabel(void);\r
+        bool SetUpScreenDurationViewImageView(void);\r
+        bool SetUpScreenDurationViewRadioButton(void);\r
+        UIScrollView *ScreenDurationScrollView = nullptr;\r
+        UILabelExt *ScreenDurationTitleLabel = nullptr;               // 标题\r
+        UILabelExt *ScreenDurationLabel[DURATIONS]{nullptr};          // 亮屏时长标签\r
+        UIButton *ScreenDurationButton[DURATIONS]{nullptr};           // 放置组件的按钮\r
+        UIRadioButton *ScreenDurationRadioButton[DURATIONS]{nullptr}; // 单选框\r
+        UICheckBox::OnChangeListener *SimplifiedChineseRadioButtonChange[DURATIONS]{nullptr};\r
+        UIView::OnClickListener *ScreenDurationButtonClickListener{nullptr};\r
+        bool initViewStatus{false};\r
+    };\r
+} // namespace OHOS\r
+\r
+#endif
\ No newline at end of file
diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/displaybrightness/src/BrightnessControlView.cpp b/code/sdk/application/wearable/fd230/nativeapp/nativeui/displaybrightness/src/BrightnessControlView.cpp
new file mode 100644 (file)
index 0000000..da7923c
--- /dev/null
@@ -0,0 +1,303 @@
+#include "displaybrightness/include/BrightnessControlView.h"\r
+#include "displaybrightness/include/DisplayBrightnessPresenter.h"\r
+#include "wearable_log.h"\r
+#include <custom_utils.h>\r
+#include "power_display_service.h"\r
+#include "ConfigModel.h"\r
+#include "map"\r
+#include "iostream"\r
+#include "vibrator_service.h"\r
+namespace OHOS\r
+{\r
+    static BrightnessControlView *g_pBrightnessControlView{nullptr};\r
+    BrightnessControlView::BrightnessControlView()\r
+    {\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BrightnessControlView::BrightnessControlView");\r
+        g_pBrightnessControlView = this;\r
+    }\r
+\r
+    BrightnessControlView::~BrightnessControlView()\r
+    {\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BrightnessControlView::~BrightnessControlView");\r
+        ClearAll();\r
+        g_pBrightnessControlView = nullptr;\r
+    }\r
+\r
+    BrightnessControlView *BrightnessControlView::GetInstance()\r
+    {\r
+        return g_pBrightnessControlView;\r
+    }\r
+\r
+    void BrightnessControlView::ClearAll(void)\r
+    {\r
+        if (initViewStatus == true)\r
+        {\r
+            BrightnessControlScrollView->RemoveAll();\r
+\r
+            delete BrightnessControlViewSlider;\r
+            BrightnessControlViewSlider = nullptr;\r
+\r
+            delete BrightnessControlViewImageIcon;\r
+            BrightnessControlViewImageIcon = nullptr;\r
+\r
+            delete rawPointer;\r
+            rawPointer = nullptr;\r
+\r
+            delete BrightnessControlScrollView;\r
+            BrightnessControlScrollView = nullptr;\r
+        }\r
+    }\r
+\r
+    // 显示与亮度视图scrollView初始化\r
+    bool BrightnessControlView::SetUpScrollView(void)\r
+    {\r
+        BrightnessControlScrollView = new UIScrollView();\r
+        if (BrightnessControlScrollView == nullptr)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BrightnessControlView::BrightnessControlScrollView new fail!");\r
+            return false;\r
+        }\r
+        BrightnessControlScrollView->SetPosition(0, 0, Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight());\r
+        BrightnessControlScrollView->SetTouchable(true);\r
+        BrightnessControlScrollView->SetDraggable(true);\r
+        return true;\r
+    }\r
+\r
+    // 亮度滑动条设置\r
+    bool BrightnessControlView::SetUpSlider(void)\r
+    {\r
+        BrightnessControlViewSlider = new UISlider();\r
+        if (BrightnessControlViewSlider == nullptr)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BrightnessControlViewSlider new fail");\r
+            return false;\r
+        }\r
+        BrightnessControlViewSlider->SetSliderColor(Color::Gray(), Color::Silver());\r
+        BrightnessControlViewSlider->SetPosition(167, 77, 130, 310);\r
+        BrightnessControlViewSlider->SetDirection(UISlider::Direction::DIR_BOTTOM_TO_TOP);\r
+        BrightnessControlViewSlider->SetViewId(BRIGHTNESS_PROGRESS);\r
+        BrightnessControlViewSlider->SetRange(BRIGHTNESS_MAX, BRIGHTNESS_MIN);\r
+\r
+        BrightnessControlViewSlider->SetStyle(STYLE_BORDER_RADIUS, 100);\r
+        BrightnessControlViewSlider->SetBackgroundStyle(STYLE_LINE_CAP, CapType::CAP_ROUND);\r
+        BrightnessControlViewSlider->SetForegroundStyle(STYLE_LINE_CAP, CapType::CAP_ROUND);\r
+        BrightnessControlViewSlider->SetSliderColor(Color::GetColorFromRGBA(0x19, 0x19, 0x19, 0xff), Color::GetColorFromRGBA(0xff, 0xff, 0xff, 0xff));\r
+        BrightnessControlViewSlider->SetForegroundStyle(STYLE_BACKGROUND_OPA, 0xff);\r
+        BrightnessControlViewSlider->SetValue(ConfigModel::GetInstance()->GetBrightness());\r
+        BrightnessControlViewSlider->SetRotateFactor(1);\r
+        BrightnessControlViewSlider->RequestFocus();\r
+        BrightnessControlViewSlider->SetIntercept(true);\r
+\r
+        if (rawPointer == nullptr)\r
+        {\r
+            rawPointer = new BrightnessSliderEventListener();\r
+            if (rawPointer == nullptr)\r
+            {\r
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "rawPointer new fail");\r
+                return false;\r
+            }\r
+        }\r
+        BrightnessControlViewSlider->SetSliderEventListener(rawPointer);\r
+        BrightnessControlViewSlider->SetOnClickListener(rawPointer);\r
+        BrightnessControlViewSlider->SetOnDragListener(rawPointer);\r
+        BrightnessControlViewSlider->SetOnRotateListener(rawPointer);\r
+        BrightnessControlViewSlider->SetKnobStyle(StyleDefault::GetSliderKnobStyle());\r
+        return true;\r
+    }\r
+\r
+    bool BrightnessControlView::SetUpImageView(void)\r
+    {\r
+        BrightnessControlViewImageIcon = new UIImageView();\r
+        if (BrightnessControlViewImageIcon == nullptr)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BrightnessControlViewImageIcon new fail");\r
+            return false;\r
+        }\r
+        BrightnessControlViewImageIcon->SetPosition(213, 213, 40, 40);\r
+        const char *image = "/user/res/BringhtnessContuolVector.bin";\r
+        BrightnessControlViewImageIcon->SetSrc(image);\r
+        return true;\r
+    }\r
+\r
+    UISlider *BrightnessControlView::GetBrightnessControlViewSlider(void)\r
+    {\r
+        return BrightnessControlViewSlider;\r
+    }\r
+\r
+\r
+    // 亮度调节视图初始化\r
+    UIScrollView *BrightnessControlView::BrightnessControlViewInit(void)\r
+    {\r
+        /* ----------------------- BrightnessControlScrollView ---------------------- */\r
+        if (!SetUpScrollView())\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BrightnessControlView::BrightnessControlScrollView is nullptr!");\r
+            return nullptr;\r
+        }\r
+\r
+        /* ----------------------- BrightnessControlViewSlider ---------------------- */\r
+        if (!SetUpSlider())\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BrightnessControlView::BrightnessControlViewSlider is nullptr!");\r
+            return nullptr;\r
+        }\r
+\r
+        /* ------------------------------- BrightnessControlViewImageIcon ------------------------------ */\r
+        if (!SetUpImageView())\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BrightnessControlView::BrightnessControlViewImageIcon is nullptr!");\r
+            return nullptr;\r
+        }\r
+        /* ----------------------------------- Add ---------------------------------- */\r
+        BrightnessControlScrollView->Add(BrightnessControlViewSlider);\r
+        BrightnessControlScrollView->Add(BrightnessControlViewImageIcon);\r
+        initViewStatus = true;\r
+        return BrightnessControlScrollView;\r
+    }\r
+\r
+    /* -------------------------------------------------------------------------- */\r
+\r
+    static constexpr int16_t BRIGHTNESS_CHANGE = 10;\r
+    // 步骤 2: 实现具体的策略\r
+    class LowerBrightnessStrategy : public BrightnessChangeStrategy\r
+    {\r
+    public:\r
+        void ApplyChange(BrightnessControlView *view, UISlider *slider, uint8_t value) override\r
+        {\r
+            // Implement the logic similar to the BRIGHTNESSLOWERS case\r
+            uint8_t newBrightnessValue = slider->GetValue() - BRIGHTNESS_CHANGE;\r
+            if (newBrightnessValue < BRIGHTNESS_MIN)\r
+            {\r
+                newBrightnessValue = BRIGHTNESS_MIN;\r
+            }\r
+\r
+            const power_display_svr_api_t *display_api = power_display_svr_get_api();\r
+            if (display_api->set_brightness(newBrightnessValue) != ERRCODE_SUCC)\r
+            {\r
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "LowerBrightness: set_brightness fail!");\r
+            }\r
+            else\r
+            {\r
+                slider->SetValue(newBrightnessValue);\r
+            }\r
+        }\r
+    };\r
+\r
+    class ElevateBrightnessStrategy : public BrightnessChangeStrategy\r
+    {\r
+    public:\r
+        void ApplyChange(BrightnessControlView *view, UISlider *slider, uint8_t value) override\r
+        {\r
+            // Implement the logic similar to the BRIGHTNESSEVATED case\r
+            uint8_t newBrightnessValue = slider->GetValue() + BRIGHTNESS_CHANGE;\r
+            if (newBrightnessValue > BRIGHTNESS_MAX)\r
+            {\r
+                newBrightnessValue = BRIGHTNESS_MAX;\r
+            }\r
+\r
+            const power_display_svr_api_t *display_api = power_display_svr_get_api();\r
+            if (display_api->set_brightness(newBrightnessValue) != ERRCODE_SUCC)\r
+            {\r
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ElevateBrightness: set_brightness fail!");\r
+            }\r
+            else\r
+            {\r
+                slider->SetValue(newBrightnessValue);\r
+            }\r
+        }\r
+    };\r
+\r
+    class DragBrightnessStrategy : public BrightnessChangeStrategy\r
+    {\r
+    public:\r
+        void ApplyChange(BrightnessControlView *view, UISlider *slider, uint8_t value) override\r
+        {\r
+            // Implement the logic similar to the BRIGHTNESSDRAG case\r
+            const power_display_svr_api_t *display_api = power_display_svr_get_api();\r
+            // 更新进度条的显示:\r
+            slider->SetValue(value);\r
+            if (display_api->set_brightness(value) != ERRCODE_SUCC)\r
+            {\r
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ChangeBrightness: set_brightness  fail!");\r
+                return;\r
+            }\r
+        }\r
+    };\r
+    /* -------------------------------------------------------------------------- */\r
+    static BrightnessSliderEventListener *g_pBrightnessSliderEventListener{nullptr};\r
+    BrightnessSliderEventListener::BrightnessSliderEventListener()\r
+    {\r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BrightnessSliderEventListener::BrightnessSliderEventListener");\r
+        // 步骤 3: 创建一个映射表将状态映射到策略\r
+        strategyMap[BRIGHTNESSLOWERS] = std::make_shared<LowerBrightnessStrategy>();\r
+        strategyMap[BRIGHTNESSEVATED] = std::make_shared<ElevateBrightnessStrategy>();\r
+        strategyMap[BRIGHTNESSDRAG] = std::make_shared<DragBrightnessStrategy>();\r
+        g_pBrightnessSliderEventListener = this;\r
+    }\r
+\r
+    BrightnessSliderEventListener::~BrightnessSliderEventListener()\r
+    {\r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BrightnessSliderEventListener::~BrightnessSliderEventListener");\r
+        g_pBrightnessSliderEventListener = nullptr;\r
+    }\r
+\r
+    BrightnessSliderEventListener *BrightnessSliderEventListener::GetInstance(void)\r
+    {\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BrightnessSliderEventListener::GetInstance");\r
+        return g_pBrightnessSliderEventListener;\r
+    }\r
+\r
+    // 步骤 4: 使用映射表简化 ChangeBrightness\r
+    void BrightnessSliderEventListener::ChangeBrightness(uint8_t status, uint8_t value)\r
+    {\r
+        auto it = strategyMap.find(status);\r
+        if (it != strategyMap.end())\r
+        {\r
+            // 确保 BrightnessControlView 和 UISlider 都不为 nullptr\r
+            BrightnessControlView *view = BrightnessControlView::GetInstance();\r
+            UISlider *slider = view ? view->GetBrightnessControlViewSlider() : nullptr;\r
+            if (view && slider)\r
+            {\r
+                it->second->ApplyChange(view, slider, value);\r
+            }\r
+        }\r
+    }\r
+\r
+    /// @brief 当滑动条被拖动或点击时调用\r
+    /// @param value 滑块的当前值。\r
+    void BrightnessSliderEventListener::OnChange(int32_t value)\r
+    {\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "OnChange %d", value);\r
+        ChangeBrightness(BRIGHTNESSDRAG, value);\r
+        ConfigModel::GetInstance()->SetBrightness(value);\r
+    }\r
+\r
+    /// @brief 当滑动条被释放时调用\r
+    /// @param value 滑块的当前值。\r
+    void BrightnessSliderEventListener::OnRelease(int32_t value)\r
+    {\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "OnRelease %d", value);\r
+        ChangeBrightness(BRIGHTNESSDRAG, value);\r
+        ConfigModel::GetInstance()->SetBrightness(value);\r
+    }\r
+\r
+    bool BrightnessSliderEventListener::OnClick(UIView &view, const ClickEvent &event)\r
+    {\r
+        UNUSED(event);\r
+        UNUSED(view);\r
+        return true;\r
+    }\r
+    bool BrightnessSliderEventListener::OnDrag(UIView &view, const DragEvent &event)\r
+    {\r
+        UNUSED(event);\r
+        UNUSED(view);\r
+        return true;\r
+    }\r
+\r
+    bool BrightnessSliderEventListener::OnRotateEnd(UIView& view, const RotateEvent& event)\r
+    {\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "OnRotateEnd %d", value);\r
+        ui_api_vibrate_once_func();//受设置中震动强度控制\r
+        return true;\r
+    }\r
+}\r
diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/displaybrightness/src/DisplayBrightnessModel.cpp b/code/sdk/application/wearable/fd230/nativeapp/nativeui/displaybrightness/src/DisplayBrightnessModel.cpp
new file mode 100644 (file)
index 0000000..3ad1650
--- /dev/null
@@ -0,0 +1,107 @@
+/*
+ * @Author: luozheng 1732036298@qq.com
+ * @Date: 2024-04-12 20:11:04
+ * @LastEditors: luozheng 1732036298@qq.com
+ * @LastEditTime: 2024-07-22 12:00:13
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/displaybrightness/src/DisplayBrightnessModel.cpp
+ */
+#include "displaybrightness/include/DisplayBrightnessModel.h"
+#include "displaybrightness/include/DisplayBrightnessPresenter.h"
+#include "brightnesslevel/include/BrightnessLevelView.h"
+#include "wearable_log.h"
+#include "ConfigModel.h"
+#include "ConfigModelC.h"
+#include "custom_runtime.h"
+
+namespace OHOS
+{
+
+    DisplayBrightnessModel::DisplayBrightnessModel() {}
+
+    DisplayBrightnessModel::~DisplayBrightnessModel() {}
+
+    DisplayBrightnessModel *DisplayBrightnessModel::GetInstance(void)
+    {
+        static DisplayBrightnessModel instance;
+        return &instance;
+    }
+
+    // 更新抬腕亮屏按钮状态
+    bool DisplayBrightnessModel::UpdateRaiseToBrightnessCheckBoxButtonStatus(void)
+    {
+        DisplayBrightnessPresenter *displayBrightnessPresent = DisplayBrightnessPresenter::GetInstance();
+        if (displayBrightnessPresent == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "DisplayBrightnessViewAndSubViewComponentsStatusInit DisplayBrightnessPresenter GetInstance fail");
+            return false;
+        }
+        bool t_value = mmi_flip_wrist_switch_get();
+        if(uapi_sleep_mode_flag_get())
+        {
+            t_value = false;
+        }
+        displayBrightnessPresent->SetRaiseToBrightnessState(t_value);
+        return true;
+    }
+
+    // 更新亮屏时长按钮选中状态
+    bool DisplayBrightnessModel::UpdateScreenDurationRadioButtonSlectStatus(void)
+    {
+        DisplayBrightnessPresenter *displayBrightnessPresent = DisplayBrightnessPresenter::GetInstance();
+        if (displayBrightnessPresent == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "DisplayBrightnessViewAndSubViewComponentsStatusInit DisplayBrightnessPresenter GetInstance fail");
+            return false;
+        }
+        displayBrightnessPresent->SetScreenDurationRadioButtonSelectStatus(GetScreenDurationTime());
+        return true;
+    }
+
+    // 更新选择的亮屏时长标签内容
+    bool DisplayBrightnessModel::UpdateSelectScreenDurationLabel(void)
+    {
+        DisplayBrightnessPresenter *displayBrightnessPresent = DisplayBrightnessPresenter::GetInstance();
+        if (displayBrightnessPresent == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "DisplayBrightnessViewAndSubViewComponentsStatusInit DisplayBrightnessPresenter GetInstance fail");
+            return false;
+        }
+        displayBrightnessPresent->SetSelectScreenDurationLabel(GetScreenDurationTime());
+        // UpdateRaiseToBrightnessCheckBoxButtonStatus();
+        UpdateScreenDurationRadioButtonSlectStatus();
+        return true;
+    }
+
+    //更新亮度条的亮度值值
+    bool DisplayBrightnessModel::UpdateBrightnessValueOfSlider(void)
+    {
+        BrightnessLevelView *p_BrightnessLevelView= BrightnessLevelView::GetInstance();
+        if (p_BrightnessLevelView == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BrightnessLevelView::GetInstance fail!!");
+            return false;
+        }
+        UISlider *slider = p_BrightnessLevelView->GetBrightnessControlView()->GetBrightnessControlViewSlider();
+        if (slider == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "slider is nullptr!!");
+            return false;
+        }
+        uint8_t value = ConfigModel::GetInstance()->GetBrightness();
+        slider->SetValue(value);
+        return true;
+    }
+
+    /// @brief 保存设置的亮屏时间,单位ms
+    /// @param time
+    void DisplayBrightnessModel::SetScreenDurationTime(unsigned int time)
+    {
+        ConfigModel::GetInstance()->SetScreenDuration(time);
+    }
+
+    // 获取亮屏时长,单位ms
+    unsigned int DisplayBrightnessModel::GetScreenDurationTime(void)
+    {
+        return ConfigModel::GetInstance()->GetScreenDuration();
+    }
+}
diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/displaybrightness/src/DisplayBrightnessPresent.cpp b/code/sdk/application/wearable/fd230/nativeapp/nativeui/displaybrightness/src/DisplayBrightnessPresent.cpp
new file mode 100644 (file)
index 0000000..0aba5f4
--- /dev/null
@@ -0,0 +1,352 @@
+/*\r
+ * @Author: luozheng 1732036298@qq.com\r
+ * @Date: 2024-03-30 09:14:38\r
+ * @LastEditors: luozheng 1732036298@qq.com\r
+ * @LastEditTime: 2024-07-22 16:37:02\r
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/displaybrightness/src/DisplayBrightnessPresent.cpp\r
+ */\r
+#include "AppViewIDs.h"\r
+#include "UiConfig.h"\r
+#include "components/ui_label_ext.h"\r
+#include "ui_resource_string.h"\r
+#include "NativeAbility.h"\r
+#include "graphic_math.h"\r
+#include "string.h"\r
+#include "displaybrightness/include/DisplayBrightnessPresenter.h"\r
+#include "cat1_ctl.h"\r
+#include "displaybrightness/include/DisplayBrightnessModel.h"\r
+#include "power_display_service.h"\r
+#include "common/key_code.h"\r
+#include <custom_utils.h>\r
+#include "map"\r
+#include "iostream"\r
+#include "string"\r
+#include "ConfigModel.h"\r
+#include "ConfigModelC.h"\r
+#include "custom_runtime.h"\r
+\r
+#include "NativeRegisterManager.h"\r
+\r
+namespace OHOS\r
+{\r
+    REGIST_SLICE(VIEW_DISPLAY_BRIGHTNESS, DisplayBrightnessView, DisplayBrightnessPresenter);\r
+    // 当前Presenter属性实例化的内存指针\r
+    static DisplayBrightnessPresenter *g_pDisplayBrightnessPresenter = nullptr;\r
+\r
+    DisplayBrightnessPresenter::DisplayBrightnessPresenter()\r
+    {\r
+\r
+        g_pDisplayBrightnessPresenter = this;\r
+    }\r
+\r
+    DisplayBrightnessPresenter::~DisplayBrightnessPresenter()\r
+    {\r
+\r
+        g_pDisplayBrightnessPresenter = nullptr;\r
+    }\r
+\r
+    DisplayBrightnessPresenter *DisplayBrightnessPresenter::GetInstance()\r
+    {\r
+\r
+        return g_pDisplayBrightnessPresenter;\r
+    }\r
+\r
+    /// @brief 设置抬腕亮屏状态\r
+    /// @param value\r
+    void DisplayBrightnessPresenter::SetRaiseToBrightnessState(bool value)\r
+    {\r
+        DisplayBrightnessView *displayBrightnessView = DisplayBrightnessView::GetInstance();\r
+        if (displayBrightnessView == nullptr)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SetRaiseToBrightnessState displayBrightnessView GetInstance fail");\r
+            return;\r
+        }\r
+        displayBrightnessView->SetRaiseToBrightnessCheckBoxButtonState(value != false ? UICheckBox::UICheckBoxState::SELECTED : UICheckBox::UICheckBoxState::UNSELECTED);\r
+    }\r
+\r
+    /// @brief 根据value值设置哪个按钮被选中\r
+    /// @param value\r
+    void DisplayBrightnessPresenter::SetScreenDurationRadioButtonSelectStatus(uint32_t value)\r
+    {\r
+        ScreenDurationView *p_ScreenDurationView = ScreenDurationView::GetInstance();\r
+        if (p_ScreenDurationView == nullptr)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ScreenDurationView GetInstance fail");\r
+            return;\r
+        }\r
+\r
+        // 映射表将value映射到特定的单选按钮\r
+        const std::map<uint32_t, ScreenDurationRadioButton> radioButtonMap = {\r
+            {SCREENDURATION_FIVE, ScreenDurationRadioButton1},\r
+            {SCREENDURATION_TEN, ScreenDurationRadioButton2},\r
+            {SCREENDURATION_FIFTEENTH, ScreenDurationRadioButton3},\r
+            {SCREENDURATION_THIRTY, ScreenDurationRadioButton4},\r
+            {SCREENDURATION_SIXTY, ScreenDurationRadioButton5},\r
+            {SCREENDURATION_THREE_HUNDRED, ScreenDurationRadioButton6},\r
+        };\r
+\r
+        auto iter = radioButtonMap.find(value);\r
+        if (iter != radioButtonMap.end())\r
+        {\r
+            p_ScreenDurationView->SetRadioButtonSelectStatus(iter->second);\r
+        }\r
+        else\r
+        {\r
+            // 处理未知值\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Unexpected duration value");\r
+        }\r
+    }\r
+\r
+    /*\r
+     * @brief 根据value值出设置选择的亮屏时长内容\r
+     */\r
+    void DisplayBrightnessPresenter::SetSelectScreenDurationLabel(uint32_t value)\r
+    {\r
+        DisplayBrightnessView *p_DisplayBrightnessView = DisplayBrightnessView::GetInstance();\r
+        if (p_DisplayBrightnessView == nullptr)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "DisplayBrightnessView GetInstance fail");\r
+            return;\r
+        }\r
+\r
+        if (p_DisplayBrightnessView->GetSelectScreenDurationLabel() == nullptr)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "p_DisplayBrightnessView->GetSelectScreenDurationLabel()  is nullptr!");\r
+            return;\r
+        }\r
+\r
+        const std::map<uint32_t, int16_t> durationMap = {\r
+            {SCREENDURATION_FIVE, STR_5_SECONDS},\r
+            {SCREENDURATION_TEN, STR_10_SECONDS},\r
+            {SCREENDURATION_FIFTEENTH, STR_15_SECONDS},\r
+            {SCREENDURATION_THIRTY, STR_30_SECONDS},\r
+            {SCREENDURATION_SIXTY, STR_60_SECONDS},\r
+            {SCREENDURATION_THREE_HUNDRED, STR_300_SECONDS}};\r
+\r
+        auto iter = durationMap.find(value);\r
+        if (iter != durationMap.end())\r
+        {\r
+            p_DisplayBrightnessView->GetSelectScreenDurationLabel()->SetTextId(iter->second);\r
+        }\r
+        else\r
+        {\r
+            // Handle unexpected value\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Unexpected duration value");\r
+        }\r
+\r
+        p_DisplayBrightnessView->GetSelectScreenDurationLabel()->Invalidate();\r
+        return;\r
+    }\r
+\r
+    void DisplayBrightnessPresenter::OnStart()\r
+    {\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "DisplayBrightnessPresenter::OnStart");\r
+        Presenter<DisplayBrightnessView>::OnStart();\r
+    }\r
+\r
+    void DisplayBrightnessPresenter::OnPause(void)\r
+    {\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "DisplayBrightnessPresenter::OnPause");\r
+        Presenter<DisplayBrightnessView>::OnPause();\r
+    }\r
+\r
+    void DisplayBrightnessPresenter::OnResume(void)\r
+    {\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "DisplayBrightnessPresenter::OnResume");\r
+        Presenter<DisplayBrightnessView>::OnResume();\r
+    }\r
+\r
+    void DisplayBrightnessPresenter::OnStop(void)\r
+    {\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "DisplayBrightnessPresenter::OnStop");\r
+        Presenter<DisplayBrightnessView>::OnStop();\r
+    }\r
+\r
+    bool DisplayBrightnessPresenter::OnClick(UIView &view, const ClickEvent &event)\r
+    {\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "DisplayBrightnessPresenter::OnClick");\r
+        DisplayBrightnessView *p_DisplayBrightnessView = DisplayBrightnessView::GetInstance();\r
+        if (p_DisplayBrightnessView == nullptr)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "DisplayBrightnessView::GetInstance fail!!");\r
+            return false;\r
+        }\r
+        if (strcmp(view.GetViewId(), BRINGHTNESSCONTROLBUTTON_VIEW) == 0)\r
+        {\r
+            if(uapi_sleep_mode_flag_get())\r
+            {\r
+                return false;\r
+            }\r
+            NativeAbility::GetInstance().EnterSlice(VIEW_BRIGHTNESSLEVEL); /*切换到亮度调节slice*/\r
+        }\r
+        else if (strcmp(view.GetViewId(), SCREENDURATIONBUTTON_VIEWID) == 0)\r
+        {\r
+            p_DisplayBrightnessView->ChangeView(DISPLAYBRIGHTNESSVIEW, SCREENDURATIONVIEW); // 屏幕与亮度视图切换到亮屏时长视图\r
+        }\r
+        return true;\r
+    }\r
+\r
+    bool DisplayBrightnessPresenter::OnDrag(UIView &view, const DragEvent &event)\r
+    {\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "DisplayBrightnessPresenter::OnDrag");\r
+        UNUSED(view);\r
+        if ((event.GetDeltaX() > X_DRAG_OFFSET) && (event.GetDeltaX() > (DOUBLES * MATH_ABS(event.GetDeltaY())))) // 拖动过程中判断是否是水平滑动\r
+        {\r
+            DisplayBrightnessPresenter::X_DRAG_FLAG = true;\r
+        }\r
+        return true;\r
+    }\r
+\r
+    bool DisplayBrightnessPresenter::OnDragEnd(UIView &view, const DragEvent &event)\r
+    {\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "DisplayBrightnessPresenter::OnDragEnd");\r
+        DisplayBrightnessView *p_DisplayBrightnessView = DisplayBrightnessView::GetInstance();\r
+        if (p_DisplayBrightnessView == nullptr)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "DisplayBrightnessView GetInstance fail");\r
+            return false;\r
+        }\r
+        if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT && DisplayBrightnessPresenter::X_DRAG_FLAG)\r
+        {\r
+            if (strcmp(view.GetViewId(), SCREENDURATIONSCROLLVIEW) == 0)\r
+            {\r
+                p_DisplayBrightnessView->ChangeView(SCREENDURATIONVIEW, DISPLAYBRIGHTNESSVIEW);\r
+            }\r
+            else if (strcmp(view.GetViewId(), DISPLAY_BRIGHTNESS_VIEW) == 0)\r
+            {\r
+                NativeAbility::GetInstance().Back(TransitionType::TRANSITION_BACK_TO_HEXAGONS);\r
+            }\r
+            DisplayBrightnessPresenter::X_DRAG_FLAG = false;\r
+        }\r
+        return true;\r
+    }\r
+\r
+    /*处理抬腕亮屏开关*/\r
+    bool DisplayBrightnessPresenter::OnChange(UICheckBox::UICheckBoxState state)\r
+    {\r
+        switch (state)\r
+        {\r
+        case UICheckBox::SELECTED:\r
+            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Raise to Wake switched on!");\r
+            uapi_take_to_wake(WRIST_RAISE_TO_WAKE_ENABLED);\r
+            mmi_flip_wrist_switch_set(true);\r
+            break;\r
+        case UICheckBox::UNSELECTED:\r
+            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Raise to Wake switched off!");\r
+            uapi_take_to_wake(WRIST_RAISE_TO_WAKE_DISENABLED);\r
+            mmi_flip_wrist_switch_set(false);\r
+            break;\r
+        default:\r
+            break;\r
+        }\r
+        return true;\r
+    }\r
+\r
+    bool DisplayBrightnessPresenter::OnKeyAct(UIView &view, const KeyEvent &event) // 增加按键事件\r
+    {\r
+        UNUSED(view);\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "DisplayBrightnessPresenter::OnKeyAct");\r
+        unsigned short keyID = event.GetKeyId();\r
+        unsigned short keyState = event.GetState();\r
+        // 如果是power键,且是亮屏状态,按键释放就返回上一级\r
+        if (keyID == static_cast<uint16_t>(ZliteKeyCode::ZLITE_KEY_POWER) && keyState == 1 && uapi_get_screen_state() == 0)\r
+        {\r
+            NativeAbility::GetInstance().Back();\r
+        }\r
+        return true;\r
+    }\r
+\r
+    /*\r
+     * @brief 用于处理亮屏时长单选按钮的状态改变.根据用户选择的单选按钮,更新屏幕持续显示时间\r
+     */\r
+    bool ScreenDurationRadiobuttonOnChangeListener::OnChange(UICheckBox::UICheckBoxState state)\r
+    {\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ScreenDurationRadiobuttonOnChangeListener::OnChange");\r
+        if (state != UICheckBox::SELECTED)\r
+        {\r
+            return true; // 如果不是选中状态,无需处理\r
+        }\r
+\r
+        DisplayBrightnessView *p_DisplayBrightnessView = DisplayBrightnessView::GetInstance();\r
+        if (p_DisplayBrightnessView == nullptr)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "DisplayBrightnessView::GetInstance fail!");\r
+            return false;\r
+        }\r
+\r
+        ScreenDurationView *p_ScreenDurationView = p_DisplayBrightnessView->GetScreenDurationView();\r
+        if (p_ScreenDurationView == nullptr)\r
+        {\r
+            return false; // 相关视图不存在,直接返回\r
+        }\r
+\r
+        // 关联单选按钮视图和对应的持续时间\r
+        std::map<UIView *, uint32_t> durationMap = {\r
+            {p_ScreenDurationView->GetRadioButton(ScreenDurationRadioButton1), SCREENDURATION_FIVE},\r
+            {p_ScreenDurationView->GetRadioButton(ScreenDurationRadioButton2), SCREENDURATION_TEN},\r
+            {p_ScreenDurationView->GetRadioButton(ScreenDurationRadioButton3), SCREENDURATION_FIFTEENTH},\r
+            {p_ScreenDurationView->GetRadioButton(ScreenDurationRadioButton4), SCREENDURATION_THIRTY},\r
+            {p_ScreenDurationView->GetRadioButton(ScreenDurationRadioButton5), SCREENDURATION_SIXTY},\r
+            {p_ScreenDurationView->GetRadioButton(ScreenDurationRadioButton6), SCREENDURATION_THREE_HUNDRED}};\r
+\r
+        auto it = durationMap.find((UIView *)m_view);\r
+        if (it != durationMap.end())\r
+        {\r
+            uapi_setScreenDuration(it->second);\r
+            DisplayBrightnessModel::GetInstance()->SetScreenDurationTime(it->second);\r
+            // 此处可以根据需要,添加对 WEARABLE_LOGE 的调用,打印日志\r
+            DisplayBrightnessPresenter::GetInstance()->SetSelectScreenDurationLabel(it->second);\r
+        }\r
+        else\r
+        {\r
+            // 如果没有找到对应的映射项,可能是逻辑错误或数据不一致\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "No matching screen duration found for selected radiobutton.");\r
+        }\r
+\r
+        return true;\r
+    }\r
+\r
+    bool ScreenDurationRadiobuttonOnChangeListener::OnClick(UIView &view, const ClickEvent &event)\r
+    {\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ScreenDurationRadiobuttonOnChangeListener::OnClick");\r
+        UIButton *button = dynamic_cast<UIButton *>(&view);\r
+        if (button == nullptr)\r
+        {\r
+            return false;\r
+        }\r
+\r
+        DisplayBrightnessView *p_DisplayBrightnessView = DisplayBrightnessView::GetInstance();\r
+        if (p_DisplayBrightnessView == nullptr)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "DisplayBrightnessView::GetInstance fail!");\r
+            return false;\r
+        }\r
+\r
+        ScreenDurationView *p_ScreenDurationView = p_DisplayBrightnessView->GetScreenDurationView();\r
+        if (p_ScreenDurationView == nullptr)\r
+        {\r
+            return false; // 相关视图不存在,直接返回\r
+        }\r
+        // 关联单选按钮视图和对应的持续时间\r
+        std::map<UIButton *, uint8_t> durationMap = {\r
+            {p_ScreenDurationView->GetScreenDurationButton(ScreenDurationRadioButton1), ScreenDurationRadioButton1},\r
+            {p_ScreenDurationView->GetScreenDurationButton(ScreenDurationRadioButton2), ScreenDurationRadioButton2},\r
+            {p_ScreenDurationView->GetScreenDurationButton(ScreenDurationRadioButton3), ScreenDurationRadioButton3},\r
+            {p_ScreenDurationView->GetScreenDurationButton(ScreenDurationRadioButton4), ScreenDurationRadioButton4},\r
+            {p_ScreenDurationView->GetScreenDurationButton(ScreenDurationRadioButton5), ScreenDurationRadioButton5},\r
+            {p_ScreenDurationView->GetScreenDurationButton(ScreenDurationRadioButton6), ScreenDurationRadioButton6}};\r
+\r
+        auto it = durationMap.find((UIButton *)button);\r
+        if (it != durationMap.end())\r
+        {\r
+            p_ScreenDurationView->SetRadioButtonSelectStatus(it->second);\r
+        }\r
+        else\r
+        {\r
+            // 如果没有找到对应的映射项,可能是逻辑错误或数据不一致\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Logic error or data inconsistency.");\r
+        }\r
+\r
+        return true;\r
+    }\r
+}
\ No newline at end of file
diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/displaybrightness/src/DisplayBrightnessView.cpp b/code/sdk/application/wearable/fd230/nativeapp/nativeui/displaybrightness/src/DisplayBrightnessView.cpp
new file mode 100644 (file)
index 0000000..b62557f
--- /dev/null
@@ -0,0 +1,510 @@
+#include "displaybrightness/include/DisplayBrightnessView.h"\r
+#include "displaybrightness/include/DisplayBrightnessModel.h"\r
+#include "wearable_log.h"\r
+#include "ConfigModel.h"\r
+#include "ConfigModelC.h"\r
+#include "ui_resource_string.h"\r
+#include <UiConfig.h>\r
+#include "custom_runtime.h"\r
+\r
+namespace OHOS\r
+{\r
+    static DisplayBrightnessView *g_pDisplayBrightnessView{nullptr};\r
+\r
+    DisplayBrightnessView::DisplayBrightnessView()\r
+    {\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "DisplayBrightnessView::DisplayBrightnessView");\r
+        g_pDisplayBrightnessView = this;\r
+    }\r
+\r
+    DisplayBrightnessView::~DisplayBrightnessView()\r
+    {\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "DisplayBrightnessView::~DisplayBrightnessView");\r
+        ClearAll();\r
+        g_pDisplayBrightnessView = nullptr;\r
+    }\r
+\r
+    DisplayBrightnessView *DisplayBrightnessView::GetInstance()\r
+    {\r
+        return g_pDisplayBrightnessView;\r
+    }\r
+\r
+    void DisplayBrightnessView::ClearAll(void)\r
+    {\r
+        if (initViewStatus == true)\r
+        {\r
+            DisplayBrightnessScrollView[DISPLAYBRIGHTNESSVIEW]->RemoveAll();\r
+\r
+            delete DisplayBrightnessTitleLabel;\r
+            DisplayBrightnessTitleLabel = nullptr;\r
+\r
+            delete BringhtnessControlButton;\r
+            BringhtnessControlButton = nullptr;\r
+\r
+            delete ScreenDurationButton;\r
+            ScreenDurationButton = nullptr;\r
+\r
+            delete BringhtnessControlLabel;\r
+            BringhtnessControlLabel = nullptr;\r
+\r
+            delete ScreenDurationLabel;\r
+            ScreenDurationLabel = nullptr;\r
+\r
+            delete selectScreenDurationLabel;\r
+            selectScreenDurationLabel = nullptr;\r
+\r
+            delete RaiseToBrightnessLabel;\r
+            RaiseToBrightnessLabel = nullptr;\r
+\r
+            for (int i = 0; i < 2; i++)\r
+            {\r
+                delete NextImage[i];\r
+                NextImage[i] = nullptr;\r
+            }\r
+\r
+            delete RaiseToBrightnessImage;\r
+            RaiseToBrightnessImage = nullptr;\r
+\r
+            delete RaiseToBrightnessCheckBoxButton;\r
+            RaiseToBrightnessCheckBoxButton = nullptr;\r
+\r
+            delete DisplayBrightnessScrollView[DISPLAYBRIGHTNESSVIEW];\r
+            DisplayBrightnessScrollView[DISPLAYBRIGHTNESSVIEW] = nullptr;\r
+        }\r
+        if (p_ScreenDurationView != nullptr)\r
+        {\r
+            delete p_ScreenDurationView;\r
+            p_ScreenDurationView = nullptr;\r
+        }\r
+        for (int i = DISPLAYBRIGHTNESSVIEW; i < MAX_DISPLAYBRIGHTNESSVIEWID; i++)\r
+        {\r
+            DisplayBrightnessScrollView[i] = nullptr;\r
+        }\r
+    }\r
+\r
+    // 显示与亮度视图scrollView初始化\r
+    bool DisplayBrightnessView::SetUpScrollView(void)\r
+    {\r
+        DisplayBrightnessScrollView[DISPLAYBRIGHTNESSVIEW] = new UIScrollView();\r
+        if (DisplayBrightnessScrollView[DISPLAYBRIGHTNESSVIEW] == nullptr)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "DisplayBrightnessView::DisplayBrightnessScrollView[DISPLAYBRIGHTNESSVIEW] new fail!");\r
+            return false;\r
+        }\r
+        DisplayBrightnessScrollView[DISPLAYBRIGHTNESSVIEW]->SetPosition(0, 0, Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight());\r
+        DisplayBrightnessScrollView[DISPLAYBRIGHTNESSVIEW]->SetViewId(DISPLAY_BRIGHTNESS_VIEW);\r
+        DisplayBrightnessScrollView[DISPLAYBRIGHTNESSVIEW]->SetScrollBlankSize(75);\r
+        // DisplayBrightnessScrollView[DISPLAYBRIGHTNESSVIEW]->SetReboundSize(35);\r
+        DisplayBrightnessScrollView[DISPLAYBRIGHTNESSVIEW]->SetDirection(1);\r
+        // DisplayBrightnessScrollView[DISPLAYBRIGHTNESSVIEW]->SetMaxScrollDistance(1000);\r
+        // DisplayBrightnessScrollView[DISPLAYBRIGHTNESSVIEW]->SetThrowDrag(true);\r
+        DisplayBrightnessScrollView[DISPLAYBRIGHTNESSVIEW]->RequestFocus();\r
+        DisplayBrightnessScrollView[DISPLAYBRIGHTNESSVIEW]->SetRotateFactor(1.0);\r
+        UIView::OnDragListener *draglistener = static_cast<UIView::OnDragListener *>(DisplayBrightnessPresenter::GetInstance());\r
+        if (draglistener == nullptr)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "DisplayBrightnessView::draglistener can not be nullptr!");\r
+            return false;\r
+        }\r
+        DisplayBrightnessScrollView[DISPLAYBRIGHTNESSVIEW]->SetOnDragListener(draglistener);\r
+        DisplayBrightnessScrollView[DISPLAYBRIGHTNESSVIEW]->SetTouchable(true);\r
+        DisplayBrightnessScrollView[DISPLAYBRIGHTNESSVIEW]->SetDraggable(true);\r
+        return true;\r
+    }\r
+\r
+    /// @brief 设置显示与亮度标题\r
+    /// @param  void\r
+    /// @return true 设置成功,false 失败\r
+    bool DisplayBrightnessView::SetTheTitle(void)\r
+    {\r
+        DisplayBrightnessTitleLabel = new UILabelExt();\r
+        if (DisplayBrightnessTitleLabel == nullptr)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "DisplayBrightnessView::DisplayBrightnessTitleLabel new fail!");\r
+            return false;\r
+        }\r
+        DisplayBrightnessTitleLabel->SetPosition(83, 50, 300, 35);\r
+        DisplayBrightnessTitleLabel->SetStyle(STYLE_BACKGROUND_OPA, 0xff);\r
+        DisplayBrightnessTitleLabel->SetStyle(STYLE_TEXT_FONT, 30);\r
+        DisplayBrightnessTitleLabel->SetStyle(STYLE_LINE_HEIGHT, 35);\r
+        DisplayBrightnessTitleLabel->SetTextId(STR_SCREEN_AND_BRIGHTNESS); /*屏幕与亮度*/\r
+        DisplayBrightnessTitleLabel->SetLineBreakMode(UILabel::LINE_BREAK_OSCILLATION);\r
+        DisplayBrightnessTitleLabel->SetRollSpeed(23);\r
+        DisplayBrightnessTitleLabel->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
+        DisplayBrightnessTitleLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);\r
+        return true;\r
+    }\r
+\r
+    /// @brief 设置按钮\r
+    /// @param button\r
+    /// @return true 设置成功,false 失败\r
+    UIButton *DisplayBrightnessView::SetTheButton(ButtonConfig &buttonconfig, UIView::OnClickListener *clickListener)\r
+    {\r
+        UIButton *button = new UIButton();\r
+        if (button == nullptr)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, " DisplayBrightnessView::SetTheButton: button new  fail!");\r
+            return nullptr;\r
+        }\r
+        button->SetPosition(buttonconfig.x, buttonconfig.y, buttonconfig.w, buttonconfig.h);\r
+        button->SetViewId(buttonconfig.ViewId);\r
+        button->SetStyle(STYLE_BACKGROUND_COLOR, 0xff191919);\r
+        button->SetStyle(STYLE_BACKGROUND_OPA, 0xff);\r
+        button->SetStyleForState(STYLE_BACKGROUND_COLOR, 0xff000000, UIButton::PRESSED);\r
+        button->SetOnClickListener(clickListener);\r
+        return button;\r
+    }\r
+\r
+    /// @brief 初始化显示与亮度视图按钮\r
+    /// @param void\r
+    /// @return true 设置成功,false 失败\r
+    bool DisplayBrightnessView::InitDisplayBrightnessViewButton(void)\r
+    {\r
+        /* -------------------------------------------------------------------------- */\r
+        ButtonConfig buttonconfig;\r
+        buttonconfig.x = 43;\r
+        buttonconfig.y = 120;\r
+        buttonconfig.w = 380;\r
+        buttonconfig.h = 100;\r
+        buttonconfig.ViewId = BRINGHTNESSCONTROLBUTTON_VIEW;\r
+        BringhtnessControlButton = SetTheButton(buttonconfig, presenter_);\r
+        if (nullptr == BringhtnessControlButton)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "DisplayBrightnessView::BringhtnessControlButton new fail!");\r
+            return false;\r
+        }\r
+        /* -------------------------------------------------------------------------- */\r
+        buttonconfig.y = 240;\r
+        buttonconfig.ViewId = SCREENDURATIONBUTTON_VIEWID;\r
+        ScreenDurationButton = SetTheButton(buttonconfig, presenter_);\r
+        if (nullptr == ScreenDurationButton)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "DisplayBrightnessView::ScreenDurationButton new fail!");\r
+            return false;\r
+        }\r
+        return true;\r
+    }\r
+\r
+    // 设置标签LabelConfig &labelconfig\r
+    UILabelExt *DisplayBrightnessView::SetUpLabel(LabelConfig &labelconfig)\r
+    {\r
+        UILabelExt *label = new UILabelExt();\r
+        if (label == nullptr)\r
+        {\r
+            return nullptr;\r
+        }\r
+        label->SetPosition(labelconfig.left, labelconfig.top, labelconfig.width, labelconfig.height); // 位置大小\r
+        label->SetStyle(STYLE_TEXT_FONT, labelconfig.fontSize);                                       // 字体大小\r
+        label->SetStyle(STYLE_LINE_HEIGHT, labelconfig.lineHeigh);                                    // 字体行高\r
+        label->SetTextId(labelconfig.textId);\r
+        label->SetLineBreakMode(labelconfig.lineBreakMode); // 断行模式。\r
+        label->SetRollSpeed(23);\r
+        label->SetFont(DEFAULT_VECTOR_FONT_FILENAME, labelconfig.fontSize);\r
+        return label;\r
+    }\r
+\r
+    /// @brief 初始化显示与亮度标签\r
+    /// @param  void\r
+    /// @return true 设置成功,false 失败\r
+    bool DisplayBrightnessView::InitDisplayBrightnessViewLabel(void)\r
+    {\r
+        LabelConfig labelconfig = {\r
+            .left = 90,\r
+            .top = 153,\r
+            .width = 250,\r
+            .height = 35,\r
+            .fontSize = 30,\r
+            .lineHeigh = 35,\r
+            .textId = STR_BRIGHTNESS_ADJUSTMENT, /*亮度调节*/\r
+            .lineBreakMode = UILabel::LINE_BREAK_OSCILLATION,\r
+        };\r
+        BringhtnessControlLabel = SetUpLabel(labelconfig);\r
+        if (BringhtnessControlLabel == nullptr)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "DisplayBrightnessView::BringhtnessControlLabel new fail!");\r
+            return false;\r
+        }\r
+        /* -------------------------------------------------------------------------- */\r
+        labelconfig.top = 273;\r
+        labelconfig.width = 180;\r
+        labelconfig.textId = STR_SCREEN_ON_DURATION; /*亮屏时长*/\r
+        ScreenDurationLabel = SetUpLabel(labelconfig);\r
+        if (ScreenDurationLabel == nullptr)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "DisplayBrightnessView::ScreenDurationLabel new fail!");\r
+            return false;\r
+        }\r
+        /* -------------------------------------------------------------------------- */\r
+        labelconfig.top = 393;\r
+        labelconfig.textId = STR_RAISE_TO_WAKE; /*抬腕亮屏*/\r
+        RaiseToBrightnessLabel = SetUpLabel(labelconfig);\r
+        if (RaiseToBrightnessLabel == nullptr)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "DisplayBrightnessView::RaiseToBrightnessLabel new fail!");\r
+            return false;\r
+        }\r
+        /* -------------------------------------------------------------------------- */\r
+        labelconfig = {\r
+            .left = 291,\r
+            .top = 273,\r
+            .width = 65,\r
+            .height = 40,\r
+            .fontSize = 30,\r
+            .lineHeigh = 35,\r
+            .textId = 0,\r
+            .lineBreakMode = UILabel::LINE_BREAK_OSCILLATION,\r
+        };\r
+        selectScreenDurationLabel = SetUpLabel(labelconfig);\r
+        if (selectScreenDurationLabel == nullptr)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "DisplayBrightnessView::selectScreenDurationLabel new fail!");\r
+            return false;\r
+        }\r
+        selectScreenDurationLabel->SetTextColor(Color::GetColorFromRGBA(0x66, 0x66, 0x66, 0xff));\r
+        /* -------------------------------------------------------------------------- */\r
+        return true;\r
+    }\r
+\r
+    // 设置图片\r
+    UIImageView *DisplayBrightnessView::SetUpImageView(ImageConfig &imageconfig)\r
+    {\r
+        UIImageView *Image = new UIImageView();\r
+        if (Image == nullptr)\r
+        {\r
+            return nullptr;\r
+        }\r
+        Image->SetPosition(imageconfig.x, imageconfig.y, imageconfig.w, imageconfig.h);\r
+        Image->SetSrc(imageconfig.ImageSrc);\r
+        return Image;\r
+    }\r
+\r
+    /// @brief 初始化显示与亮度图片\r
+    /// @param  void\r
+    /// @return true 设置成功,false 失败\r
+    bool DisplayBrightnessView::InitDisplayBrightnessViewImage(void)\r
+    {\r
+        ImageConfig imageconfig = {\r
+            .x = 369,\r
+            .y = 157,\r
+            .w = 14,\r
+            .h = 26,\r
+            .ImageSrc = PNG_SETTING_NEXT_IMAGE,\r
+        };\r
+        NextImage[0] = SetUpImageView(imageconfig);\r
+        if (nullptr == NextImage[0])\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "DisplayBrightnessView::NextImage[0] is nullptr!");\r
+            return false;\r
+        }\r
+        /* -------------------------------------------------------------------------- */\r
+        imageconfig.y = 277;\r
+        NextImage[1] = SetUpImageView(imageconfig);\r
+        if (nullptr == NextImage[1])\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "DisplayBrightnessView::NextImage[1] is nullptr!");\r
+            return false;\r
+        }\r
+        /* -------------------------------------------------------------------------- */\r
+        imageconfig = {\r
+            .x = 43,\r
+            .y = 360,\r
+            .w = 380,\r
+            .h = 100,\r
+            .ImageSrc = PNG_SETTING_BACKGROUND_IMAGE,\r
+        };\r
+        RaiseToBrightnessImage = SetUpImageView(imageconfig);\r
+        if (nullptr == RaiseToBrightnessImage)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "DisplayBrightnessView::RaiseToBrightnessImage is nullptr!");\r
+            return false;\r
+        }\r
+        return true;\r
+    }\r
+\r
+    UICheckBox *DisplayBrightnessView::SetUpCheckBox(CheckBoxConfig &checkboxconfig) // 设置复选框\r
+    {\r
+        UICheckBox *checkbox = new UICheckBox();\r
+        if (nullptr == checkbox)\r
+        {\r
+            return nullptr;\r
+        }\r
+        checkbox->SetPosition(checkboxconfig.x, checkboxconfig.y, checkboxconfig.w, checkboxconfig.h);\r
+        checkbox->SetStyle(STYLE_BACKGROUND_COLOR, 0xffffffff);\r
+        checkbox->SetViewId(checkboxconfig.ViewId);\r
+        checkbox->SetImages(checkboxconfig.select, checkboxconfig.unselect);\r
+        return checkbox;\r
+    }\r
+\r
+    /// @brief 初始化抬腕亮屏checkbox\r
+    /// @param  void\r
+    /// @return true 设置成功,false 失败\r
+    bool DisplayBrightnessView::InitDisplayBrightnessViewCheckBox(void)\r
+    {\r
+        CheckBoxConfig checkboxconfig = {\r
+            .x = 298,\r
+            .y = 385,\r
+            .w = 100,\r
+            .h = 50,\r
+            .ViewId = RAISETOBRIGHTNESSCHECKBOXBUTTON_VIEWID,\r
+            .select = PNG_TOGGLEBUTTON_ON_IMAGE,\r
+            .unselect = PNG_TOGGLEBUTTON_OFF_IMAGE,\r
+        };\r
+        RaiseToBrightnessCheckBoxButton = SetUpCheckBox(checkboxconfig);\r
+        if (nullptr == RaiseToBrightnessCheckBoxButton)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "DisplayBrightnessView::RaiseToBrightnessCheckBoxButton is nullptr");\r
+            return false;\r
+        }\r
+        RaiseToBrightnessCheckBoxButton->SetOnChangeListener(presenter_);\r
+        return true;\r
+    }\r
+\r
+    // 显示与亮度视图初始化\r
+    void DisplayBrightnessView::DisplayAndBrightnessViewInit()\r
+    {\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "DisplayAndBrightnessViewInit");\r
+\r
+        if (!SetUpScrollView() || !SetTheTitle() || !InitDisplayBrightnessViewButton() || !InitDisplayBrightnessViewLabel() ||\r
+            !InitDisplayBrightnessViewImage() || !InitDisplayBrightnessViewCheckBox())\r
+        {\r
+            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "DisplayAndBrightnessViewInit fail!!");\r
+            return;\r
+        }\r
+        DisplayBrightnessModel::GetInstance()->UpdateRaiseToBrightnessCheckBoxButtonStatus();\r
+        DisplayBrightnessModel::GetInstance()->UpdateSelectScreenDurationLabel();\r
+    }\r
+\r
+    void DisplayBrightnessView::OnStart()\r
+    {\r
+        View<DisplayBrightnessPresenter>::OnStart();\r
+        if (!initViewStatus)\r
+        {\r
+            DisplayAndBrightnessViewInit();\r
+            initViewStatus = true;\r
+        }\r
+        RootView::OnKeyActListener *keyactListener = (RootView::OnKeyActListener *)OHOS::DisplayBrightnessPresenter::GetInstance();\r
+       RootView::GetInstance()->SetOnKeyActListener(keyactListener);\r
+\r
+        if (DisplayBrightnessScrollView[DISPLAYBRIGHTNESSVIEW] == nullptr)\r
+        {\r
+            return;\r
+        }\r
+        DisplayBrightnessScrollView[DISPLAYBRIGHTNESSVIEW]->Add(DisplayBrightnessTitleLabel);\r
+        DisplayBrightnessScrollView[DISPLAYBRIGHTNESSVIEW]->Add(BringhtnessControlButton);\r
+        DisplayBrightnessScrollView[DISPLAYBRIGHTNESSVIEW]->Add(ScreenDurationButton);\r
+        DisplayBrightnessScrollView[DISPLAYBRIGHTNESSVIEW]->Add(BringhtnessControlLabel);\r
+        DisplayBrightnessScrollView[DISPLAYBRIGHTNESSVIEW]->Add(ScreenDurationLabel);\r
+        DisplayBrightnessScrollView[DISPLAYBRIGHTNESSVIEW]->Add(selectScreenDurationLabel);\r
+        DisplayBrightnessScrollView[DISPLAYBRIGHTNESSVIEW]->Add(NextImage[0]);\r
+        DisplayBrightnessScrollView[DISPLAYBRIGHTNESSVIEW]->Add(NextImage[1]);\r
+        DisplayBrightnessScrollView[DISPLAYBRIGHTNESSVIEW]->Add(RaiseToBrightnessImage);\r
+        DisplayBrightnessScrollView[DISPLAYBRIGHTNESSVIEW]->Add(RaiseToBrightnessLabel);\r
+        DisplayBrightnessScrollView[DISPLAYBRIGHTNESSVIEW]->Add(RaiseToBrightnessCheckBoxButton);\r
+\r
+        if (uapi_sleep_mode_flag_get())\r
+        {\r
+            RaiseToBrightnessCheckBoxButton->SetTouchable(false);\r
+        }\r
+        else\r
+        {\r
+            RaiseToBrightnessCheckBoxButton->SetTouchable(true);\r
+        }\r
+\r
+       RootView::GetInstance()->Add(DisplayBrightnessScrollView[DISPLAYBRIGHTNESSVIEW]);\r
+    }\r
+\r
+\r
+\r
+\r
+    /// @brief 设置抬腕亮屏按钮状态\r
+    /// @param state\r
+    void DisplayBrightnessView::SetRaiseToBrightnessCheckBoxButtonState(UICheckBox::UICheckBoxState state)\r
+    {\r
+        RaiseToBrightnessCheckBoxButton->SetState(state);\r
+    }\r
+\r
+    ScreenDurationView *DisplayBrightnessView::GetScreenDurationView(void)\r
+    {\r
+        return p_ScreenDurationView;\r
+    }\r
+\r
+    UILabelExt *DisplayBrightnessView::GetSelectScreenDurationLabel(void)\r
+    {\r
+        return selectScreenDurationLabel;\r
+    }\r
+\r
+    // 1.切换到“屏幕与亮度”视图\r
+    bool DisplayBrightnessView::ChangeDisplayBrightnessView(int16_t thisView)\r
+    {\r
+        if (DisplayBrightnessScrollView[thisView] == nullptr)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "DisplayBrightnessView::ChangeDisplayBrightnessView");\r
+           RootView::GetInstance()->Add(DisplayBrightnessScrollView[thisView]);\r
+        }\r
+        return true;\r
+    }\r
+\r
+    // 2.切换到“亮屏时长”视图\r
+    bool DisplayBrightnessView::ChangeScreenDurationView(int16_t thisView)\r
+    {\r
+        if (DisplayBrightnessScrollView[thisView] == nullptr)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "DisplayBrightnessView::ChangeScreenDurationView");\r
+            p_ScreenDurationView = new ScreenDurationView();\r
+            if (p_ScreenDurationView == nullptr)\r
+            {\r
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "DisplayBrightnessView:: new scrollView[%d] fail", thisView);\r
+                return false;\r
+            }\r
+            DisplayBrightnessScrollView[thisView] = p_ScreenDurationView->ScreenDurationViewInit();\r
+           RootView::GetInstance()->Add(DisplayBrightnessScrollView[thisView]);\r
+        }\r
+        return true;\r
+    }\r
+\r
+    // 1.DisplayBrightnessViewMapper:结构体定义了一个将视图ID映射到特定成员函数指针的映射表。\r
+    struct DisplayBrightnessViewMapper\r
+    {\r
+        const int16_t viewId;\r
+        bool (DisplayBrightnessView::*func)(int16_t thisView);\r
+    };\r
+\r
+    // 2.ViewMapper[] 是一个静态的视图映射数组,将视图ID与DisplayBrightnessViewMapper类中的特定成员函数指针进行了绑定。\r
+    static const DisplayBrightnessViewMapper ViewMapper[] = {\r
+        {DISPLAYBRIGHTNESSVIEW, &DisplayBrightnessView::ChangeDisplayBrightnessView},\r
+        {SCREENDURATIONVIEW, &DisplayBrightnessView::ChangeScreenDurationView},\r
+    };\r
+\r
+    // 3.根据传入的interface参数执行相应视图ID关联的成员函数。\r
+    bool DisplayBrightnessView::ClickFunc(int16_t interface)\r
+    {\r
+        int funcSize = sizeof(ViewMapper) / sizeof(ViewMapper[0]);\r
+        for (int i = 0; i < funcSize; i++)\r
+        {\r
+            if (interface == ViewMapper[i].viewId)\r
+            {\r
+                bool jug = (this->*(ViewMapper[i].func))(interface);\r
+                if (jug == false)\r
+                {\r
+                    return false;\r
+                }\r
+                return true;\r
+            }\r
+        }\r
+        return false;\r
+    }\r
+\r
+    // 4.切换视图\r
+    void DisplayBrightnessView::ChangeView(int16_t hideView, int16_t showView)\r
+    {\r
+        if (hideView > MAX_DISPLAYBRIGHTNESSVIEWID)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "DisplayBrightnessView:: SystemViewId Overstep ones bounds");\r
+            return;\r
+        }\r
+        DisplayBrightnessScrollView[hideView]->SetVisible(false);\r
+        ClickFunc(showView);\r
+        DisplayBrightnessScrollView[showView]->SetVisible(true);\r
+        Draw();\r
+    }\r
+}
\ No newline at end of file
diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/displaybrightness/src/ScreenDurationView.cpp b/code/sdk/application/wearable/fd230/nativeapp/nativeui/displaybrightness/src/ScreenDurationView.cpp
new file mode 100644 (file)
index 0000000..165721e
--- /dev/null
@@ -0,0 +1,323 @@
+#include "displaybrightness/include/ScreenDurationView.h"\r
+#include "displaybrightness/include/DisplayBrightnessPresenter.h"\r
+#include "displaybrightness/include/DisplayBrightnessModel.h"\r
+#include "wearable_log.h"\r
+#include "ui_resource_string.h"\r
+#include <UiConfig.h>\r
+namespace OHOS\r
+{\r
+\r
+    static ScreenDurationView *g_pScreenDurationView{nullptr};\r
+\r
+    ScreenDurationView::ScreenDurationView()\r
+    {\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ScreenDurationView::ScreenDurationView");\r
+        g_pScreenDurationView = this;\r
+    }\r
+\r
+    ScreenDurationView::~ScreenDurationView()\r
+    {\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ScreenDurationView::~ScreenDurationView");\r
+        ClearAll();\r
+        g_pScreenDurationView = nullptr;\r
+    }\r
+\r
+    ScreenDurationView *ScreenDurationView::GetInstance()\r
+    {\r
+        return g_pScreenDurationView;\r
+    }\r
+\r
+    void ScreenDurationView::ClearAll(void)\r
+    {\r
+        if (initViewStatus == true)\r
+        {\r
+            if (ScreenDurationScrollView != nullptr)\r
+            {\r
+                ScreenDurationScrollView->RemoveAll();\r
+                if (ScreenDurationTitleLabel != nullptr)\r
+                {\r
+                    delete ScreenDurationTitleLabel;\r
+                    ScreenDurationTitleLabel = nullptr;\r
+                }\r
+                for (int i = 0; i < DURATIONS; i++)\r
+                {\r
+                    if (ScreenDurationLabel[i] != nullptr)\r
+                    {\r
+                        delete ScreenDurationLabel[i];\r
+                        ScreenDurationLabel[i] = nullptr;\r
+                    }\r
+                    if (ScreenDurationButton[i])\r
+                    {\r
+                        delete ScreenDurationButton[i];\r
+                        ScreenDurationButton[i] = nullptr;\r
+                    }\r
+                    if (SimplifiedChineseRadioButtonChange[i] != nullptr)\r
+                    {\r
+                        delete SimplifiedChineseRadioButtonChange[i];\r
+                        SimplifiedChineseRadioButtonChange[i] = nullptr;\r
+                    }\r
+                    if (ScreenDurationRadioButton[i])\r
+                    {\r
+                        delete ScreenDurationRadioButton[i];\r
+                        ScreenDurationRadioButton[i] = nullptr;\r
+                    }\r
+                }\r
+                if (ScreenDurationButtonClickListener != nullptr)\r
+                {\r
+                    delete ScreenDurationButtonClickListener;\r
+                    ScreenDurationButtonClickListener = nullptr;\r
+                }\r
+                delete ScreenDurationScrollView;\r
+                ScreenDurationScrollView = nullptr;\r
+            }\r
+        }\r
+    }\r
+\r
+    // 设置图片\r
+    UIButton *ScreenDurationView::SetUpButtonView(ButtonConfig &buttonConfig)\r
+    {\r
+        UIButton *button = new UIButton();\r
+        if (button == nullptr)\r
+        {\r
+            return nullptr;\r
+        }\r
+        button->SetPosition(buttonConfig.x, buttonConfig.y, buttonConfig.w, buttonConfig.h);\r
+        button->SetStyle(STYLE_BACKGROUND_COLOR, 0xff191919);\r
+        button->SetStyleForState(STYLE_BACKGROUND_COLOR, 0xff000000, UIButton::PRESSED);\r
+\r
+        return button;\r
+    }\r
+\r
+    // 设置标签\r
+    UILabelExt *ScreenDurationView::SetUpLabel(LabelConfig &labelconfig)\r
+    {\r
+        UILabelExt *label = new UILabelExt();\r
+        if (label == nullptr)\r
+        {\r
+            return nullptr;\r
+        }\r
+        label->SetPosition(labelconfig.left, labelconfig.top, labelconfig.width, labelconfig.height); // 位置大小\r
+        label->SetStyle(STYLE_TEXT_FONT, labelconfig.fontSize);                                       // 字体大小\r
+        label->SetStyle(STYLE_LINE_HEIGHT, labelconfig.lineHeigh);                                    // 字体行高\r
+        label->SetTextId(labelconfig.textId);                                                         // 内容\r
+        label->SetLineBreakMode(labelconfig.lineBreakMode);                                           // 断行模式。\r
+        label->SetRollSpeed(23);\r
+        label->SetFont(DEFAULT_VECTOR_FONT_FILENAME, labelconfig.fontSize);\r
+        return label;\r
+    }\r
+\r
+    // 设置单选框\r
+    UIRadioButton *ScreenDurationView::SetUpRadioButton(RadioButtonConfig &radiobuttonconfig)\r
+    {\r
+        UIRadioButton *radiobutton = new UIRadioButton("ScreenDuration");\r
+        if (nullptr == radiobutton)\r
+        {\r
+            return nullptr;\r
+        }\r
+        radiobutton->SetPosition(radiobuttonconfig.x, radiobuttonconfig.y, radiobuttonconfig.w, radiobuttonconfig.h);\r
+        radiobutton->SetStyle(STYLE_BACKGROUND_COLOR, 0xffffffff);\r
+        radiobutton->SetImages(radiobuttonconfig.select, radiobuttonconfig.unselect);\r
+        return radiobutton;\r
+    }\r
+\r
+    // 亮屏时长视图“scrollView”初始化\r
+    bool ScreenDurationView::SetUpScrollView(void)\r
+    {\r
+        ScreenDurationScrollView = new UIScrollView();\r
+        if (ScreenDurationScrollView == nullptr)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ScreenDurationView::ScreenDurationScrollView new fail!");\r
+            return false;\r
+        }\r
+        ScreenDurationScrollView->SetPosition(0, 0, Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight());\r
+        ScreenDurationScrollView->SetViewId(SCREENDURATIONSCROLLVIEW);\r
+        ScreenDurationScrollView->SetScrollBlankSize(75);\r
+        ScreenDurationScrollView->SetReboundSize(35);\r
+        ScreenDurationScrollView->SetDirection(1);\r
+        ScreenDurationScrollView->SetMaxScrollDistance(1000);\r
+        ScreenDurationScrollView->SetThrowDrag(true);\r
+        ScreenDurationScrollView->RequestFocus();\r
+        ScreenDurationScrollView->SetRotateFactor(2);\r
+        UIView::OnDragListener *draglistener = static_cast<UIView::OnDragListener *>(DisplayBrightnessPresenter::GetInstance());\r
+        if (draglistener == nullptr)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ScreenDurationView::draglistener can not be nullptr!");\r
+            return false;\r
+        }\r
+        ScreenDurationScrollView->SetOnDragListener(draglistener);\r
+        ScreenDurationScrollView->SetTouchable(true);\r
+        ScreenDurationScrollView->SetDraggable(true);\r
+        return true;\r
+    }\r
+\r
+    // 亮屏时长视图“图片”初始化\r
+    bool ScreenDurationView::SetUpScreenDurationViewImageView(void)\r
+    {\r
+        ButtonConfig buttonConfig = {\r
+            .x = 39,\r
+            .y = 120,\r
+            .w = 380,\r
+            .h = 100,\r
+        };\r
+\r
+        ScreenDurationButtonClickListener = static_cast<UIView::OnClickListener *>(new ScreenDurationRadiobuttonOnChangeListener());\r
+\r
+        for (int i = 0; i < DURATIONS; i++)\r
+        {\r
+            buttonConfig.y = 120 + (i * 120);\r
+            ScreenDurationButton[i] = SetUpButtonView(buttonConfig);\r
+            if (ScreenDurationButton[i] == nullptr)\r
+            {\r
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ScreenDurationView::ScreenDurationButton[%d] is nullptr!", i);\r
+                return false;\r
+            }\r
+            ScreenDurationButton[i]->SetOnClickListener(ScreenDurationButtonClickListener);\r
+        }\r
+        return true;\r
+    }\r
+\r
+    // 亮屏时长视图“标签”初始化\r
+    bool ScreenDurationView::SetUpScreenDurationViewLabel(void)\r
+    {\r
+        // 创建ScreenDurationTitleLabel\r
+        LabelConfig labelconfig = {\r
+            .left = 83,\r
+            .top = 50,\r
+            .width = 300,\r
+            .height = 35,\r
+            .fontSize = 30,\r
+            .lineHeigh = 35,\r
+            .textId = STR_SCREEN_ON_DURATION, /*亮屏时长*/\r
+            .lineBreakMode = UILabel::LINE_BREAK_OSCILLATION,\r
+        };\r
+\r
+        ScreenDurationTitleLabel = SetUpLabel(labelconfig);\r
+        if (nullptr == ScreenDurationTitleLabel)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ScreenDurationView::SetUpScreenDurationViewLabel is nullptr!");\r
+            return false;\r
+        }\r
+        ScreenDurationTitleLabel->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
+\r
+        // 创建ScreenDurationLabel\r
+        labelconfig = {\r
+            .left = 103,\r
+            .top = 153,\r
+            .width = 210,\r
+            .height = 35,\r
+            .fontSize = 30,\r
+            .lineHeigh = 35,\r
+            .textId = STR_SCREEN_ON_DURATION,\r
+            .lineBreakMode = UILabel::LINE_BREAK_OSCILLATION,\r
+        };\r
+\r
+        // const char *durations[DURATIONS] = {"5秒", "10秒", "15秒", "30秒", "60秒", "300秒"};\r
+        UIResourceTextId durations[DURATIONS] = {STR_5_SECONDS, STR_10_SECONDS, STR_15_SECONDS, STR_30_SECONDS, STR_60_SECONDS, STR_300_SECONDS};\r
+\r
+        for (int i = 0; i < DURATIONS; i++)\r
+        {\r
+            labelconfig.top = 153 + (i * 120);\r
+            labelconfig.textId = durations[i];\r
+            ScreenDurationLabel[i] = SetUpLabel(labelconfig);\r
+            if (ScreenDurationLabel[i] == nullptr)\r
+            {\r
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ScreenDurationView::ScreenDurationLabel[%d] is nullptr!", i);\r
+                return false;\r
+            }\r
+            ScreenDurationLabel[i]->SetAlign(TEXT_ALIGNMENT_LEFT, TEXT_ALIGNMENT_CENTER);\r
+        }\r
+\r
+        return true;\r
+    }\r
+\r
+    // 亮屏时长视图“单选框”初始化\r
+    bool ScreenDurationView::SetUpScreenDurationViewRadioButton(void)\r
+    {\r
+        RadioButtonConfig radiobuttonconfig = {\r
+            .x = 300,\r
+            .w = 80,\r
+            .h = 80,\r
+            .select = PNG_CHECKBOX_ON_IMAGE,\r
+            .unselect = PNG_CHECKBOX_OFF_IMAGE,\r
+        };\r
+\r
+        int y_positions = 130;\r
+        for (int i = 0; i < DURATIONS; i++)\r
+        {\r
+            radiobuttonconfig.y = y_positions + 120 * i;\r
+            ScreenDurationRadioButton[i] = SetUpRadioButton(radiobuttonconfig);\r
+            if (ScreenDurationRadioButton[i] == nullptr)\r
+            {\r
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ScreenDurationView::ScreenDurationRadioButton[%d] is nullptr!", i);\r
+                return false;\r
+            }\r
+            SimplifiedChineseRadioButtonChange[i] = static_cast<UICheckBox::OnChangeListener *>(new ScreenDurationRadiobuttonOnChangeListener(ScreenDurationRadioButton[i]));\r
+            ScreenDurationRadioButton[i]->SetOnChangeListener(SimplifiedChineseRadioButtonChange[i]);\r
+        }\r
+\r
+        return true;\r
+    }\r
+\r
+    // 亮屏时长视图初始化\r
+    UIScrollView *ScreenDurationView::ScreenDurationViewInit(void)\r
+    {\r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ScreenDurationView::ScreenDurationViewInit");\r
+        if (!SetUpScrollView() || !SetUpScreenDurationViewImageView() ||\r
+            !SetUpScreenDurationViewLabel() || !SetUpScreenDurationViewRadioButton())\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ScreenDurationView::ScreenDurationViewInit fail!!");\r
+            return nullptr;\r
+        }\r
+\r
+        if (!DisplayBrightnessModel::GetInstance()->UpdateScreenDurationRadioButtonSlectStatus())\r
+        {\r
+            return nullptr;\r
+        }\r
+\r
+        /* ----------------------------------- Add ---------------------------------- */\r
+        ScreenDurationScrollView->Add(ScreenDurationTitleLabel);\r
+        for (int i = 0; i < DURATIONS; i++)\r
+        {\r
+            ScreenDurationScrollView->Add(ScreenDurationButton[i]);\r
+            ScreenDurationScrollView->Add(ScreenDurationLabel[i]);\r
+            ScreenDurationScrollView->Add(ScreenDurationRadioButton[i]);\r
+        }\r
+        initViewStatus = true;\r
+        return ScreenDurationScrollView;\r
+    }\r
+\r
+    // 设置哪个单选按钮被选中\r
+    void ScreenDurationView::SetRadioButtonSelectStatus(int16_t index)\r
+    {\r
+        if (index >= DURATIONS || index < 0)\r
+        {\r
+            return;\r
+        }\r
+\r
+        if (ScreenDurationRadioButton[index] == nullptr)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ScreenDurationView::ScreenDurationRadioButton[%d] is nullptr!", index);\r
+            return;\r
+        }\r
+\r
+        for (int i = 0; i < DURATIONS; i++)\r
+        {\r
+            ScreenDurationRadioButton[i]->SetState(i == index ? UICheckBox::SELECTED : UICheckBox::UNSELECTED);\r
+        }\r
+    }\r
+\r
+    UIRadioButton *ScreenDurationView::GetRadioButton(int16_t i)\r
+    {\r
+        if (ScreenDurationRadioButton[i] == nullptr)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ScreenDurationView::ScreenDurationRadioButton[%d] is nullptr!", i);\r
+            return nullptr;\r
+        }\r
+        return ScreenDurationRadioButton[i];\r
+    }\r
+\r
+    UIButton *ScreenDurationView::GetScreenDurationButton(int16_t i)\r
+    {\r
+        return ScreenDurationButton[i];\r
+    }\r
+}
\ No newline at end of file