增加久坐提醒开关
authorxue <2144439972@qq.com>
Tue, 26 Aug 2025 06:10:53 +0000 (14:10 +0800)
committerxue <2144439972@qq.com>
Tue, 26 Aug 2025 06:10:53 +0000 (14:10 +0800)
13 files changed:
code/sdk/application/wearable/fd230app/CMakeLists.txt
code/sdk/application/wearable/fd230app/nativelauncher/include/AppViewIDs.h
code/sdk/application/wearable/fd230app/nativelauncher/include/NativeLauncher.h
code/sdk/application/wearable/fd230app/nativelauncher/src/NativeLauncher.cpp
code/sdk/application/wearable/fd230app/nativeui/sedentary_setting/include/SedentarySettingModel.h [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/sedentary_setting/include/SedentarySettingPresenter.h [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/sedentary_setting/include/SedentarySettingView.h [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/sedentary_setting/src/SedentarySettingModel.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/sedentary_setting/src/SedentarySettingPresenter.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/sedentary_setting/src/SedentarySettingView.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/system/include/SystemView.h
code/sdk/application/wearable/fd230app/nativeui/system/src/SystemPresenter.cpp
code/sdk/application/wearable/fd230app/nativeui/system/src/SystemView.cpp

index 4fd2a70..0917044 100644 (file)
@@ -432,6 +432,9 @@ set(SOURCES
     ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/set_time_format/src/SetTimeFormatModel.cpp
     ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/set_time_format/src/SetTimeFormatPresenter.cpp
     ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/set_time_format/src/SetTimeFormatView.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/sedentary_setting/src/SedentarySettingModel.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/sedentary_setting/src/SedentarySettingPresenter.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/sedentary_setting/src/SedentarySettingView.cpp
     ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/key/src/KeyInputListener.cpp
     ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/screennotify/src/ui_screennotify.cpp
     ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/heart_blood/BloodCardView.cpp
index bc5699b..175d9ab 100644 (file)
@@ -155,6 +155,7 @@ typedef enum : uint16_t
     VIEW_SAFE_MODE, // 安全模式
     VIEW_ASSISTANT, // 智能助手
     VIEW_SET_TIME_FORMAT,// 时间格式
+    VIEW_SET_SEDENTARY,  // 久坐提醒设置
     /*表盘功能相关VIEW_ID 请勿移动 请勿在下方增加slice*/
     VIEW_DIAL_FUN_ID = 200,
     VIEW_GOAL,    // 步数
index 0190fa5..ae7264c 100644 (file)
@@ -124,6 +124,7 @@ namespace OHOS
         void InitSafeModeSlice(void);
         void InitAssistantSlice(void);
         void InitSetTimeFormatSlice(void);
+        void InitSedentarySettingSlice(void);
         /* -------------------------------------------------------------------------- */
         // void InitPhoneSlice(void);
         void InitPhoneCallSlice(void);
index 2bfe381..68174ff 100644 (file)
 /*时间格式显示*/
 #include "set_time_format/include/SetTimeFormatView.h"
 #include "set_time_format/include/SetTimeFormatPresenter.h"
+/*久坐提醒*/
+#include "sedentary_setting/include/SedentarySettingView.h"
+#include "sedentary_setting/include/SedentarySettingPresenter.h"
+#include "sedentary_setting/include/SedentarySettingModel.h"
 /*画布组件测试*/
 #include "canvastest/include/CanvasView.h"
 #include "canvastest/include/CanvasPresenter.h"
@@ -505,6 +509,8 @@ namespace OHOS
         {VIEW_SLEEP, &NativeLauncher::InitSleepSlice},
         /*设置表盘样式*/
         {VIEW_SET_DIAL_STYLE, &NativeLauncher::InitSetDialStyleSlice},
+        /*久坐提醒设置*/
+        {VIEW_SET_SEDENTARY, &NativeLauncher::InitSedentarySettingSlice},
         /*心率周期检测*/
         //{VIEW_SET_HEART, &NativeLauncher::InitSetHeartSlice},
         /*密码锁*/
@@ -1814,6 +1820,17 @@ namespace OHOS
         }
         NativeAbility::GetInstance().AddSliceProxy(VIEW_SET_DIAL_STYLE, setDialStyleView);
     }
+     void NativeLauncher::InitSedentarySettingSlice(void)
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "NativeLauncher::InitSedentarySettingSlice");
+        SliceProxy *sedentarySettingView = new AbilitySliceProxy<SedentarySettingView, SedentarySettingPresenter>;
+        if (sedentarySettingView == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "sedentarySettingView");
+            return;
+        }
+        NativeAbility::GetInstance().AddSliceProxy(VIEW_SET_SEDENTARY, sedentarySettingView);
+    }
 
     void NativeLauncher::InitScheduleSlice(void)
     {
diff --git a/code/sdk/application/wearable/fd230app/nativeui/sedentary_setting/include/SedentarySettingModel.h b/code/sdk/application/wearable/fd230app/nativeui/sedentary_setting/include/SedentarySettingModel.h
new file mode 100644 (file)
index 0000000..f9adb80
--- /dev/null
@@ -0,0 +1,30 @@
+#ifndef SEDENTARY_SETTING_MODEL_H_
+#define SEDENTARY_SETTING_MODEL_H_
+
+#include "components/ui_view.h"
+
+namespace OHOS {
+
+class SedentarySettingModel {
+public:
+    static SedentarySettingModel &GetInstance()
+    {
+        static SedentarySettingModel inst;
+        return inst;
+    }
+
+    void SetSwitch(bool enable);
+    bool GetSwitch();
+
+private:
+    SedentarySettingModel() = default;
+    ~SedentarySettingModel() = default;
+    SedentarySettingModel(const SedentarySettingModel &) = delete;
+    SedentarySettingModel &operator=(const SedentarySettingModel &) = delete;
+};
+
+} // namespace OHOS
+
+#endif
+
+
diff --git a/code/sdk/application/wearable/fd230app/nativeui/sedentary_setting/include/SedentarySettingPresenter.h b/code/sdk/application/wearable/fd230app/nativeui/sedentary_setting/include/SedentarySettingPresenter.h
new file mode 100644 (file)
index 0000000..1a2330e
--- /dev/null
@@ -0,0 +1,34 @@
+#ifndef SEDENTARY_SETTING_PRESENTER_H_
+#define SEDENTARY_SETTING_PRESENTER_H_
+
+#include "components/ui_view.h"
+#include "key/include/KeyInputListener.h"
+#include "Presenter.h"
+
+#include "sedentary_setting/include/SedentarySettingModel.h"
+#include "sedentary_setting/include/SedentarySettingView.h"
+
+namespace OHOS
+{
+    class SedentarySettingModel;
+    class SedentarySettingView;
+    class SedentarySettingPresenter : public Presenter<SedentarySettingView, SedentarySettingModel>,
+                                  public UIView::OnClickListener,
+                                  public RootView::OnKeyActListener,
+                                  public UIView::OnDragListener
+    {
+    public:
+        SedentarySettingPresenter();
+        ~SedentarySettingPresenter();
+        SedentarySettingPresenter(const SedentarySettingPresenter &) = delete;
+        SedentarySettingPresenter &operator=(const SedentarySettingPresenter &) = delete;
+        bool OnClick(UIView &view, const ClickEvent &event) override;
+        bool OnDrag(UIView &view, const DragEvent &event) override;
+        bool OnKeyAct(UIView &view, const KeyEvent &event) override; // 增加按键事件
+    };
+
+} // OHOS
+#endif
+
+
+
diff --git a/code/sdk/application/wearable/fd230app/nativeui/sedentary_setting/include/SedentarySettingView.h b/code/sdk/application/wearable/fd230app/nativeui/sedentary_setting/include/SedentarySettingView.h
new file mode 100644 (file)
index 0000000..d71cfb0
--- /dev/null
@@ -0,0 +1,42 @@
+#ifndef SEDENTARY_SETTING_VIEW_H_
+#define SEDENTARY_SETTING_VIEW_H_
+
+#include "components/ui_button.h"
+#include "components/ui_label.h"
+#include "components/ui_toggle_button.h"
+#include "components/ui_view.h"
+#include "components/ui_view_group.h"
+
+#include "View.h"
+#include "components/ui_image_view.h"
+#include "components/ui_label_ext.h"
+
+#include "sedentary_setting/include/SedentarySettingModel.h"
+
+namespace OHOS {
+class SedentarySettingPresenter;
+class SedentarySettingView : public View<SedentarySettingPresenter> {
+public:
+  SedentarySettingView();
+  ~SedentarySettingView() override;
+  SedentarySettingView(const SedentarySettingView &) = delete;
+  SedentarySettingView &operator=(const SedentarySettingView &) = delete;
+
+  void OnStart() override;
+  void OnSetUpView() override;
+  void OnStop() override;
+  void OnClick(UIView &view);
+
+private:
+  UILabelExt labelTitle_;
+
+  UILabelExt labelSedentary_;
+  UIToggleButton btnSedentary_;
+  UIImageView Sedentary_Image_;
+
+  UILabelExt labelNote_;
+};
+} // OHOS
+#endif
+
+
diff --git a/code/sdk/application/wearable/fd230app/nativeui/sedentary_setting/src/SedentarySettingModel.cpp b/code/sdk/application/wearable/fd230app/nativeui/sedentary_setting/src/SedentarySettingModel.cpp
new file mode 100644 (file)
index 0000000..cb120e0
--- /dev/null
@@ -0,0 +1,19 @@
+#include "sedentary_setting/include/SedentarySettingModel.h"
+
+#include "custom_runtime.h"
+
+namespace OHOS {
+
+void SedentarySettingModel::SetSwitch(bool enable)
+{
+    uapi_dev_runtime_set_sedentary_status(enable ? 1 : 0);
+}
+
+bool SedentarySettingModel::GetSwitch()
+{
+    return uapi_dev_runtime_get_sedentary_status() ? true : false;
+}
+
+} // namespace OHOS
+
+
diff --git a/code/sdk/application/wearable/fd230app/nativeui/sedentary_setting/src/SedentarySettingPresenter.cpp b/code/sdk/application/wearable/fd230app/nativeui/sedentary_setting/src/SedentarySettingPresenter.cpp
new file mode 100644 (file)
index 0000000..433a082
--- /dev/null
@@ -0,0 +1,46 @@
+#include "sedentary_setting/include/SedentarySettingPresenter.h"
+#include "KeyInputListener.h"
+#include "common/key_code.h"
+#include "custom_utils.h"
+
+#include "AppViewIDs.h"
+#include "NativeAbility.h"
+
+namespace OHOS {
+SedentarySettingPresenter::SedentarySettingPresenter() {
+  Attach(&SedentarySettingModel::GetInstance());
+}
+
+SedentarySettingPresenter::~SedentarySettingPresenter() {}
+
+bool SedentarySettingPresenter::OnClick(UIView &view, const ClickEvent &event) {
+  WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SedentarySettingPresenter::OnClick");
+  view_->OnClick(view);
+  return true;
+}
+
+bool SedentarySettingPresenter::OnDrag(UIView &view, const DragEvent &event) {
+  WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SedentarySettingPresenter::OnDrag");
+  UNUSED(view);
+  if ((event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT) &&
+      (event.GetDeltaX() > X_DRAG_OFFSET) &&
+      (event.GetDeltaX() > (DOUBLES * MATH_ABS(event.GetDeltaY())))) {
+    NativeAbility::GetInstance().Back();
+  }
+  return true;
+}
+
+bool SedentarySettingPresenter::OnKeyAct(UIView &view, const KeyEvent &event) {
+  unsigned short keyID = event.GetKeyId();
+  unsigned short keyState = event.GetState();
+  // 如果是power键,且是亮屏状态,按键释放就返回上一级
+  if (keyID == static_cast<uint16_t>(ZliteKeyCode::ZLITE_KEY_POWER) &&
+      keyState == 1 && uapi_get_screen_state() == 0) {
+    // 回退
+    NativeAbility::GetInstance().Back();
+  }
+  return true;
+}
+} // namespace OHOS
+
+
diff --git a/code/sdk/application/wearable/fd230app/nativeui/sedentary_setting/src/SedentarySettingView.cpp b/code/sdk/application/wearable/fd230app/nativeui/sedentary_setting/src/SedentarySettingView.cpp
new file mode 100644 (file)
index 0000000..9e916f2
--- /dev/null
@@ -0,0 +1,97 @@
+#include "sedentary_setting/include/SedentarySettingView.h"
+#include "sedentary_setting/include/SedentarySettingModel.h"
+#include "sedentary_setting/include/SedentarySettingPresenter.h"
+
+#include "UiConfig.h"
+#include "ui_resource_string.h"
+#include "components/ui_scroll_view.h"
+#include "wearable_log.h"
+
+namespace OHOS {
+SedentarySettingView::SedentarySettingView() {}
+
+SedentarySettingView::~SedentarySettingView() {}
+
+void SedentarySettingView::OnStart() {
+  View<SedentarySettingPresenter>::OnStart();
+  SetContainerView(new UIViewGroup);
+  if (container_ == nullptr) {
+    return;
+  }
+  container_->SetDraggable(true);
+  container_->SetPosition(0, 0, 466, 466);
+  container_->SetOnDragListener(presenter_);
+  // 增加按键监听
+  RootView::OnKeyActListener *keyactListener =
+      (RootView::OnKeyActListener *)(presenter_);
+  RootView::GetInstance()->SetOnKeyActListener(keyactListener);
+  container_->SetTouchable(true);
+}
+
+void SedentarySettingView::OnSetUpView() {
+  if (container_ == nullptr) {
+    return;
+  }
+  View<SedentarySettingPresenter>::OnSetUpView();
+
+  Sedentary_Image_.SetPosition(43, 120, 380, 100);
+  Sedentary_Image_.SetStyle(STYLE_BACKGROUND_COLOR, 0xff191919);
+  Sedentary_Image_.SetStyle(STYLE_BACKGROUND_OPA, 0xff);
+  Sedentary_Image_.SetStyle(STYLE_BORDER_RADIUS, 100);
+  container_->Add(&Sedentary_Image_);
+
+  labelTitle_.SetPosition(83, 50, 300, 60);
+  labelTitle_.SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);
+  // labelTitle_.SetTextId(STR_BROWSING_SPECIAL_EFFECTS);
+  labelTitle_.SetText("久坐设置"); 
+  labelTitle_.SetLineBreakMode(UILabel::LINE_BREAK_ELLIPSIS); // 居中
+  labelTitle_.SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
+  container_->Add(&labelTitle_);
+
+  labelSedentary_.SetPosition(90, 153, 200, 60);
+  labelSedentary_.SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);
+  labelSedentary_.SetText("久坐提醒"); // TODO:多国语言
+  labelSedentary_.SetLineBreakMode(UILabel::LINE_BREAK_OSCILLATION);
+  labelSedentary_.SetRollSpeed(23);
+  container_->Add(&labelSedentary_);
+
+  btnSedentary_.SetPosition(298, 145, 100, 50);
+  btnSedentary_.SetImages(PNG_TOGGLEBUTTON_ON_IMAGE,
+                          PNG_TOGGLEBUTTON_OFF_IMAGE);
+  container_->Add(&btnSedentary_);
+
+  labelNote_.SetPosition(53, 240, 360, 100);
+  labelNote_.SetFont(DEFAULT_VECTOR_FONT_FILENAME, 20);
+  labelNote_.SetText("注:打开后将会在长时间坐姿时,自动开启提醒");
+  container_->Add(&labelNote_);
+
+  btnSedentary_.SetState( SedentarySettingModel::GetInstance().GetSwitch());
+
+  btnSedentary_.SetOnClickListener(presenter_);
+}
+
+void SedentarySettingView::OnStop() {
+  View<SedentarySettingPresenter>::OnStop();
+  if (container_ != nullptr) {
+    container_->RemoveAll();
+    delete container_;
+    container_ = nullptr;
+  }
+}
+
+void SedentarySettingView::OnClick(UIView &view) {
+  const UIToggleButton *ptr = dynamic_cast<UIToggleButton *>(&view);
+  if (ptr == nullptr) {
+    return;
+  }
+  if (ptr->GetState() == true) {
+    btnSedentary_.SetState(true);
+    SedentarySettingModel::GetInstance().SetSwitch(true);
+  } else {
+    btnSedentary_.SetState(false);
+    SedentarySettingModel::GetInstance().SetSwitch(false);
+  }
+  // 切换到切换表盘Slice
+  // NativeAbility::GetInstance().ChangeSlice(VIEW_SET_DIAL);
+}
+} // namespace OHOS
index b22d6ae..fa31678 100644 (file)
@@ -25,6 +25,7 @@
 #include "system/include/SystemShutdown.h"\r
 #include "system/include/SystemRestart.h"\r
 #include "rebootandshutdown/include/ShutDownImageAnimatorView.h"\r
+#include "sedentary_setting/include/SedentarySettingView.h"\r
 namespace OHOS\r
 {\r
     static constexpr const char *ABOUT_THE_WATCH = "AboutTheWatchButton";       // 关于手表\r
@@ -36,6 +37,7 @@ namespace OHOS
     static constexpr const char *SHUTDOWN = "ShutdownButton";                   // 关机\r
     static constexpr const char *FACTORY_RESET = "FactoryResetButton";          // 恢复出厂设置\r
     static constexpr const char *SET_TIME_FORMAT = "SetTimeFormatButton";       // 设置时间格式\r
+    static constexpr const char *SET_SEDENTARY = "SetSedentaryButton";          // 设置久坐提醒\r
 \r
     typedef enum\r
     {\r
index 59931d7..dd21746 100644 (file)
@@ -169,6 +169,11 @@ namespace OHOS
         {\r
             NativeAbility::GetInstance().EnterSlice(VIEW_SET_TIME_FORMAT);\r
             return true;\r
+        }\r
+         else if (strcmp(view.GetViewId(), SET_SEDENTARY) == 0) // 点击进入设置久坐提醒\r
+        {\r
+            NativeAbility::GetInstance().EnterSlice(VIEW_SET_SEDENTARY);\r
+            return true;\r
         }\r
         else if (strcmp(view.GetViewId(), SYSTEM_UPGRADE) == 0) // 点击进入系统升级视图\r
         {\r
index 4fd6543..c89b58d 100644 (file)
@@ -173,11 +173,12 @@ namespace OHOS
             {153, STR_ABOUT_WATCH},\r
             // {273, STR_SYSTEM_UPDATE},\r
             {273, STR_TIME_FORMAT_SET},\r
-            {393, STR_WATCH_QR_CODE},\r
-            {513, STR_SYSTEM_LANGUAGE},\r
-            {633, STR_RESTART},\r
-            {753, STR_SHUTDOWN},\r
-            {873, STR_FACTORY_RESET},\r
+            {393, STR_TIME_FORMAT_SET},\r
+            {513, STR_WATCH_QR_CODE},\r
+            {633, STR_SYSTEM_LANGUAGE},\r
+            {753, STR_RESTART},\r
+            {873, STR_SHUTDOWN},\r
+            {993, STR_FACTORY_RESET},\r
         };\r
         labelConfig = {\r
             .left = 90,\r
@@ -219,6 +220,7 @@ namespace OHOS
         ButtonSetup buttonSetups[] = {\r
             {120, ABOUT_THE_WATCH},\r
             // {240, SYSTEM_UPGRADE},\r
+            {240, SET_SEDENTARY},\r
             {300, SET_TIME_FORMAT},\r
             {360, WATCH_QR_CODE},\r
             {480, SYSTEM_LANGUAGE},\r