【睡眠模式】UI 1725/1 1725/head 1727/target/1
authormaomao <2144439972@qq.com>
Mon, 21 Apr 2025 06:41:31 +0000 (14:41 +0800)
committermaomao <2144439972@qq.com>
Mon, 21 Apr 2025 06:41:31 +0000 (14:41 +0800)
code/sdk/application/wearable/fd230/nativeapp/nativeui/sleepmode/include/SleepModeModel.h [new file with mode: 0644]
code/sdk/application/wearable/fd230/nativeapp/nativeui/sleepmode/include/SleepModePresenter.h [new file with mode: 0644]
code/sdk/application/wearable/fd230/nativeapp/nativeui/sleepmode/include/SleepModeView.h [new file with mode: 0644]
code/sdk/application/wearable/fd230/nativeapp/nativeui/sleepmode/src/SleepModeModel.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230/nativeapp/nativeui/sleepmode/src/SleepModePresenter.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230/nativeapp/nativeui/sleepmode/src/SleepModeView.cpp [new file with mode: 0644]

diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/sleepmode/include/SleepModeModel.h b/code/sdk/application/wearable/fd230/nativeapp/nativeui/sleepmode/include/SleepModeModel.h
new file mode 100644 (file)
index 0000000..14cc1ac
--- /dev/null
@@ -0,0 +1,25 @@
+
+#ifndef __SLEEPMODEMODEL_H__
+#define __SLEEPMODEMODEL_H__
+
+
+namespace OHOS
+{
+    class SleepModeModel
+    {
+    public:
+        static SleepModeModel &GetInstance(void);
+        // void UpdateSleepMode(void);
+        void SetSleepModeEnabled(void);
+        void SetSleepModeDisabled(void);
+
+    private:
+        SleepModeModel();
+        SleepModeModel(const SleepModeModel &) = delete;
+        SleepModeModel &operator=(const SleepModeModel &) = delete;
+        virtual ~SleepModeModel();
+
+    };
+}
+
+#endif
\ No newline at end of file
diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/sleepmode/include/SleepModePresenter.h b/code/sdk/application/wearable/fd230/nativeapp/nativeui/sleepmode/include/SleepModePresenter.h
new file mode 100644 (file)
index 0000000..b33b338
--- /dev/null
@@ -0,0 +1,40 @@
+
+#ifndef __SLEEPMODEPRESENTER_H__
+#define __SLEEPMODEPRESENTER_H__
+
+#include "Presenter.h"
+#include "View.h"
+#include "sleepmode/include/SleepModeView.h"
+#include "sleepmode/include/SleepModeModel.h"
+
+
+namespace OHOS
+{
+    class SleepModeView;
+    class SleepModePresenter : public Presenter<SleepModeView>,
+                                 public UIView::OnClickListener,
+                                 public RootView::OnKeyActListener,
+                                 public UIView::OnDragListener
+    {
+    public:
+        SleepModePresenter();
+        virtual ~SleepModePresenter();
+
+        void OnStart() override;
+       
+
+        static SleepModePresenter *GetInstance();
+        // virtual void Notify() 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};
+
+        SleepModeModel * SleepModeModel_{nullptr};
+    };
+}
+
+#endif
\ No newline at end of file
diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/sleepmode/include/SleepModeView.h b/code/sdk/application/wearable/fd230/nativeapp/nativeui/sleepmode/include/SleepModeView.h
new file mode 100644 (file)
index 0000000..c2edc30
--- /dev/null
@@ -0,0 +1,46 @@
+
+#ifndef __SLEEPMODEVIEW_H__
+#define __SLEEPMODEVIEW_H__
+
+//#include "BaseView.h"
+#include "View.h"
+
+#include "components/ui_scroll_view.h"
+#include "components/ui_label_ext.h"
+#include "components/ui_image_view.h"
+#include "components/ui_label_button_ext.h"
+
+
+namespace OHOS
+{
+    #define SLEEPMODE_ViewId_OKButton_ "SLEEPMODE_ViewId_OKButton_"
+
+    class SleepModePresenter;
+    class SleepModeView : public View<SleepModePresenter>
+    {
+    public:
+        SleepModeView();
+        virtual ~SleepModeView();
+        static SleepModeView * GetInstance(void);
+        
+        void OnStart() override;
+
+    private:
+        UIScrollView * InitScreen(void);
+        void DeinitScreen(void);
+
+        UIScrollView * ScrollView_{nullptr};
+        UILabelExt * TitleLabelExt_{nullptr}; 
+        UIImageView * PromptImage_{nullptr};
+        UILabelExt * PromptLabelExt_{nullptr};
+        UILabelButtonExt * CancelButton_{nullptr};
+        UILabelButtonExt * OKButton_{nullptr};
+
+
+        #define SCREEN_WIDTH (Screen::GetInstance().GetWidth())
+        #define SCREEN_HEIGHT (Screen::GetInstance().GetHeight())
+
+        #define SLEEP_MODE_PROMPT_IMAGE "/user/res/Sleepmode/sleepmode.bin"
+    };
+}
+#endif
\ No newline at end of file
diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/sleepmode/src/SleepModeModel.cpp b/code/sdk/application/wearable/fd230/nativeapp/nativeui/sleepmode/src/SleepModeModel.cpp
new file mode 100644 (file)
index 0000000..672dacd
--- /dev/null
@@ -0,0 +1,92 @@
+
+#include "sleepmode/include/SleepModeModel.h"
+#include "main/include/MainViewSample.h"
+#include "main/include/dropdown/DropDownCardPage1.h"
+#include "MainModel.h"
+#include "ConfigModel.h"
+#include "custom_runtime.h"
+#include "custom_utils.h"
+#include "ui_service.h"
+#include "ConfigModelC.h"
+#include "power_display_service.h"
+
+
+namespace OHOS
+{
+    SleepModeModel::SleepModeModel() {}
+
+    SleepModeModel::~SleepModeModel() {}
+
+    SleepModeModel &SleepModeModel::GetInstance()
+    {
+        static SleepModeModel instance;
+        return instance;
+    }
+
+    void SleepModeModel::SetSleepModeEnabled(void)
+    {
+        uapi_sleep_mode_flag_set(1);
+
+        // update donotdisturb
+        // SendMsgToUIService(UI_UPDATE_DNOTDISTURB_MODE, 0, nullptr, 0);
+
+        /*更新主界面配置*/
+        MainModel::GetInstance().setDialState(DialState::SLEEP, true);
+
+        //更新下拉界面
+        if(DropDownCardPage1::GetInstance() != nullptr && MainViewSample::GetInstance() != nullptr)
+        {
+           DropDownCardPage1::GetInstance()->UpdateSleepModelState(true);
+        }
+
+        // disable flip wrist
+        uapi_take_to_wake(0);
+
+        // turn down brightness
+        const power_display_svr_api_t *display_api = power_display_svr_get_api();
+        display_api->set_brightness(MIN_BRIGHTNESS);
+    }
+
+    void SleepModeModel::SetSleepModeDisabled(void)
+    {
+        uapi_sleep_mode_flag_set(0);
+
+        // update donotdisturb
+        // SendMsgToUIService(UI_UPDATE_DNOTDISTURB_MODE, 0, nullptr, 0);
+
+        /*更新主界面配置*/
+        MainModel::GetInstance().setDialState(DialState::SLEEP, false);
+
+        //更新下拉界面
+        if(DropDownCardPage1::GetInstance() != nullptr && MainViewSample::GetInstance() != nullptr)
+        {
+           DropDownCardPage1::GetInstance()->UpdateSleepModelState(false);
+        }
+        // enable flip wrist
+        if(true == mmi_flip_wrist_switch_get())
+        {
+            uapi_take_to_wake(1);
+        }
+
+        // reset brightness
+        const power_display_svr_api_t *display_api = power_display_svr_get_api();
+        display_api->set_brightness(OHOS::ConfigModel::GetInstance()->GetBrightness());
+    }
+
+    // /*更新勿扰模式*/
+    // void SleepModeModel::UpdateSleepMode(void)
+    // {
+    //     if (PullUpDownView::GetInstance() != nullptr)
+    //     {
+    //         /*更新主界面下拉界面配置*/
+    //         if(DropDownCardPage1::GetInstance() && DropDownCardPage1::GetInstance()->GetDropDownCardPage1_ToggleButton(DropDownCardPage1::toggleButton_DNOTDISTURB))
+    //         {
+    //             DropDownCardPage1::GetInstance()->GetDropDownCardPage1_ToggleButton(DropDownCardPage1::toggleButton_DNOTDISTURB)->SetState(GetSleepModeEnabled());
+    //         }
+    //         PullUpDownView::GetInstance()->UpdateSleepModeStatus(GetSleepModeEnabled());
+    //         /*更新主界面配置*/
+    //         MainModel::GetInstance().setDialState(DialState::DO_NOT_DISTURB, GetSleepModeEnabled());
+    //     }
+    //     return;
+    // }
+}
\ No newline at end of file
diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/sleepmode/src/SleepModePresenter.cpp b/code/sdk/application/wearable/fd230/nativeapp/nativeui/sleepmode/src/SleepModePresenter.cpp
new file mode 100644 (file)
index 0000000..77fed05
--- /dev/null
@@ -0,0 +1,91 @@
+
+#include "AppViewIDs.h"
+#include "NativeAbility.h"
+#include "UiConfig.h"
+#include "sleepmode/include/SleepModePresenter.h"
+#include "common/key_code.h"
+#include <custom_utils.h>
+#include "NativeRegisterManager.h"
+
+namespace OHOS
+{
+    REGIST_SLICE( VIEW_SLEEPMODE, SleepModeView, SleepModePresenter);
+
+    static SleepModePresenter * p_SleepModePresenterInstance = nullptr;
+
+    SleepModePresenter::SleepModePresenter()
+    {
+        SleepModeModel_ = &SleepModeModel::GetInstance();
+        p_SleepModePresenterInstance = this;
+    }
+
+    SleepModePresenter::~SleepModePresenter()
+    {
+        p_SleepModePresenterInstance = nullptr;
+    }
+
+    SleepModePresenter * SleepModePresenter::GetInstance()
+    {
+        return p_SleepModePresenterInstance;
+    }
+
+    void SleepModePresenter::OnStart()
+    {
+        Presenter<SleepModeView>::OnStart();
+    }
+
+    bool SleepModePresenter::OnDrag(UIView &view, const DragEvent &event)
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SleepModePresenter::OnDrag");
+        UNUSED(view);
+        if ((event.GetDeltaX() > X_DRAG_OFFSET) && (event.GetDeltaX() > (DOUBLES * MATH_ABS(event.GetDeltaY())))) // 拖动过程中判断是否是水平滑动
+        {
+            SleepModePresenter::X_DRAG_FLAG = true;
+        }
+        return true;
+    }
+
+    bool SleepModePresenter::OnDragEnd(UIView &view, const DragEvent &event)
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SleepModePresenter::OnDragEnd");
+        UNUSED(event);
+        if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT && SleepModePresenter::X_DRAG_FLAG)
+        {
+            NativeAbility::GetInstance().Back(TransitionType::TRANSITION_BACK_TO_HEXAGONS);
+            SleepModePresenter::X_DRAG_FLAG = false;
+        }
+        return true;
+    }
+
+    bool SleepModePresenter::OnClick(UIView &view, const ClickEvent &event)
+    {
+        UNUSED(event);
+
+        if(0 == strcmp(view.GetViewId(), SLEEPMODE_ViewId_OKButton_))
+        {
+            SleepModeModel_->SetSleepModeEnabled();
+        }
+
+        NativeAbility::GetInstance().Back(TransitionType::TRANSITION_BACK_TO_HEXAGONS);
+        return true;
+    }
+
+    // 增加按键事件
+    bool SleepModePresenter::OnKeyAct(UIView &view, const KeyEvent &event)
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SleepModePresenter::OnKeyAct");
+        uint16_t keyID = event.GetKeyId();
+        uint16_t keyState = event.GetState();
+        // 如果是power键就返回上一级
+        if (keyID == static_cast<uint16_t>(ZliteKeyCode::ZLITE_KEY_POWER) && keyState == 1 && uapi_get_screen_state() == 0)
+        {
+            NativeAbility::GetInstance().Back(TransitionType::TRANSITION_BACK_TO_HEXAGONS);
+        }
+        return true;
+    }
+
+    // void SleepModePresenter::Notify()
+    // {
+    //     // SleepModeView::GetInstance()->UpdataTime();
+    // }
+}
\ No newline at end of file
diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/sleepmode/src/SleepModeView.cpp b/code/sdk/application/wearable/fd230/nativeapp/nativeui/sleepmode/src/SleepModeView.cpp
new file mode 100644 (file)
index 0000000..26d714d
--- /dev/null
@@ -0,0 +1,198 @@
+
+#include "sleepmode/include/SleepModeView.h"
+#include "sleepmode/include/SleepModePresenter.h"
+#include "sleepmode/include/SleepModeModel.h"
+#include "wearable_log.h"
+#include "UiConfig.h"
+#include "ui_resource_image.h"
+#include "uicomponents/UIComponents.h"
+#include "ui_resource_string.h"
+
+
+namespace OHOS
+{
+    static SleepModeView * p_SleepModeViewInstance = nullptr;
+
+    SleepModeView::SleepModeView()
+    {
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SleepModeView::SleepModeView");
+        p_SleepModeViewInstance = this;
+    }
+
+    SleepModeView::~SleepModeView()
+    {
+        DeinitScreen();
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SleepModeView::~SleepModeView");
+        p_SleepModeViewInstance = nullptr;
+    }
+
+    SleepModeView * SleepModeView::GetInstance()
+    {
+        return p_SleepModeViewInstance;
+    }
+
+    void SleepModeView::OnStart()
+    {
+        View<SleepModePresenter>::OnStart();
+        GetRootContainer()->SetTouchable(true);
+        GetRootContainer()->SetDraggable(true);
+
+        ScrollView_ = InitScreen();
+
+        AddViewToRootContainer(ScrollView_);
+
+        RootView::GetInstance()->SetOnKeyActListener(presenter_);
+    }
+
+ 
+
+    void SleepModeView::DeinitScreen()
+    {
+        if(nullptr != ScrollView_)
+        {
+            ScrollView_->RemoveAll();
+            if(nullptr != TitleLabelExt_)
+            {
+                delete TitleLabelExt_;
+                TitleLabelExt_ = nullptr;
+            }
+            if(nullptr != PromptImage_)
+            {
+                delete PromptImage_;
+                PromptImage_ = nullptr;
+            }
+            if(nullptr != PromptLabelExt_)
+            {
+                delete PromptLabelExt_;
+                PromptLabelExt_ = nullptr;
+            }
+            if(nullptr != CancelButton_)
+            {
+                delete CancelButton_;
+                CancelButton_ = nullptr;
+            }
+            if(nullptr != OKButton_)
+            {
+                delete OKButton_;
+                OKButton_ = nullptr;
+            }
+            
+            delete ScrollView_;
+            ScrollView_ = nullptr;
+        }
+    }
+
+    UIScrollView * SleepModeView::InitScreen(void)
+    {
+        if (nullptr == ScrollView_)
+        {
+            ScrollView_ = new UIScrollView();
+            if (nullptr == ScrollView_)
+              return nullptr;
+            
+            ScrollView_->SetScrollBlankSize(35);
+            ScrollView_->SetReboundSize(50);
+            ScrollView_->SetPosition(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);
+            // ScrollView_->SetViewId();
+            ScrollView_->SetStyle(STYLE_BACKGROUND_OPA, OPA_OPAQUE);
+            ScrollView_->SetStyle(STYLE_BACKGROUND_COLOR, Color::Black().full);
+            ScrollView_->SetOnDragListener(presenter_);
+            ScrollView_->SetTouchable(true);
+            ScrollView_->SetDraggable(true);
+
+            if (nullptr == TitleLabelExt_)
+            {
+                TitleLabelExt_ = new UILabelExt();
+                if (nullptr == TitleLabelExt_)
+                    return nullptr;
+
+                TitleLabelExt_->SetPosition(83, 50, 300, 35);
+                TitleLabelExt_->SetStyle(STYLE_TEXT_FONT, 30);
+                TitleLabelExt_->SetStyle(STYLE_LINE_HEIGHT, 35);
+                TitleLabelExt_->SetTextId(STR_SLEEPMODE);
+                TitleLabelExt_->SetLineBreakMode(UILabel::LINE_BREAK_OSCILLATION);
+                TitleLabelExt_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
+                TitleLabelExt_->SetRollSpeed(23);
+                TitleLabelExt_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);
+                // TitleLabelExt_->SetStyle(STYLE_TEXT_COLOR, 0xffff5a36);
+            }
+
+            if (nullptr == PromptImage_)
+            {
+                PromptImage_ = new UIImageView();
+                if (nullptr == PromptImage_)
+                    return nullptr;
+
+                PromptImage_->SetPosition(183, 107);
+                // PromptImage_->Resize(94, 94);
+                // PromptImage_->SetStyle(STYLE_BACKGROUND_COLOR, 0xff8120e2);
+                // PromptImage_->SetStyle(STYLE_BACKGROUND_OPA, 0xff);
+                // PromptImage_->SetStyle(STYLE_BORDER_RADIUS, 100);
+                // PromptImage_->SetAutoEnable(false);
+                // PromptImage_->SetResizeMode(UIImageView::CENTER);
+                PromptImage_->SetSrc(SLEEP_MODE_PROMPT_IMAGE);
+            }
+
+            if (nullptr == PromptLabelExt_)
+            {
+                PromptLabelExt_ = new UILabelExt();
+                if (nullptr == PromptLabelExt_)
+                    return nullptr;
+
+                PromptLabelExt_->SetPosition(53, 230, 360, 70);
+                PromptLabelExt_->SetStyle(STYLE_TEXT_FONT, 30);
+                PromptLabelExt_->SetStyle(STYLE_LINE_HEIGHT, 35);
+                PromptLabelExt_->SetTextId(STR_SLEEP_MODE_PROMPT_ON);
+                PromptLabelExt_->SetLineBreakMode(UILabel::LINE_BREAK_WRAP);
+                PromptLabelExt_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
+                PromptLabelExt_->SetRollSpeed(23);
+                PromptLabelExt_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);
+                PromptLabelExt_->SetStyle(STYLE_TEXT_COLOR, 0Xff999999);
+            }
+
+            if (nullptr == CancelButton_)
+            {
+                CancelButton_ = new UILabelButtonExt();
+                if (nullptr == CancelButton_)
+                    return nullptr;
+
+                CancelButton_->SetPosition(111, PromptLabelExt_->GetY() + PromptLabelExt_->GetHeight() + 20, 100, 100);
+                // CancelButton_->SetViewId(SCHEDULE_ViewId_DeleteCancelButton_);
+                CancelButton_->SetStyle(STYLE_BACKGROUND_COLOR, 0xffffffff);
+                CancelButton_->SetStyle(STYLE_BACKGROUND_OPA, 25); // 10%
+                CancelButton_->SetStyleForState(STYLE_BACKGROUND_COLOR, 0xffffffff, UIButton::PRESSED);
+                CancelButton_->SetStyleForState(STYLE_BACKGROUND_OPA, 25, UIButton::PRESSED);
+                CancelButton_->SetStyle(STYLE_BORDER_RADIUS, 100);
+                CancelButton_->SetImagePosition(0, 0);
+                CancelButton_->SetImageSrc(PNG_SYSTEM_CHECK_OFF_IMAGE, PNG_SYSTEM_CHECK_OFF_IMAGE);
+                CancelButton_->SetOnClickListener(presenter_);
+            }
+
+            if (nullptr == OKButton_)
+            {
+                OKButton_ = new UILabelButtonExt();
+                if (nullptr == OKButton_)
+                    return nullptr;
+
+                OKButton_->SetPosition(256, PromptLabelExt_->GetY() + PromptLabelExt_->GetHeight() + 20,100, 100);
+                OKButton_->SetViewId(SLEEPMODE_ViewId_OKButton_);
+                OKButton_->SetStyle(STYLE_BACKGROUND_COLOR, 0xffffffff);
+                OKButton_->SetStyle(STYLE_BACKGROUND_OPA, 25); // 10%
+                OKButton_->SetStyleForState(STYLE_BACKGROUND_COLOR, 0xffffffff, UIButton::PRESSED);
+                OKButton_->SetStyleForState(STYLE_BACKGROUND_OPA, 25, UIButton::PRESSED);
+                OKButton_->SetStyle(STYLE_BORDER_RADIUS, 100);
+                OKButton_->SetImagePosition(0, 0);
+                OKButton_->SetImageSrc(PNG_SYSTEM_CHECK_ON_IMAGE, PNG_SYSTEM_CHECK_ON_IMAGE);
+                OKButton_->SetOnClickListener(presenter_);
+            }
+
+            ScrollView_->Add(TitleLabelExt_);
+            ScrollView_->Add(PromptImage_);
+            ScrollView_->Add(PromptLabelExt_);
+            ScrollView_->Add(CancelButton_);
+            ScrollView_->Add(OKButton_);
+        }
+
+        return ScrollView_;
+    }
+}
\ No newline at end of file