优化省电模式退出
authorCaisking <3449750381@qq.com>
Mon, 19 Aug 2024 11:19:34 +0000 (19:19 +0800)
committerCaisking <3449750381@qq.com>
Mon, 19 Aug 2024 11:19:34 +0000 (19:19 +0800)
code/sdk/application/wearable/fd230app/nativeui/saveele/include/SaveBatPresenter.h
code/sdk/application/wearable/fd230app/nativeui/saveele/include/SaveBatView.h
code/sdk/application/wearable/fd230app/nativeui/saveele/include/SaveEleModel.h
code/sdk/application/wearable/fd230app/nativeui/saveele/src/SaveBatPresenter.cpp
code/sdk/application/wearable/fd230app/nativeui/saveele/src/SaveBatView.cpp
code/sdk/application/wearable/fd230app/nativeui/saveele/src/SaveEleModel.cpp
code/sdk/application/wearable/service/msg_center/src/msg_center_customer.cpp

index 79cba45..4f142e8 100644 (file)
@@ -1,16 +1,13 @@
-/***\r
- * @Date: 2024-04-15 10:55:58\r
- * @LastEditors: Caisking 3449750381@qq.com\r
- * @LastEditTime: 2024-08-17 16:00:26\r
- * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/saveele/include/SaveBatPresenter.h\r
- */\r
 \r
 #ifndef _SAVEBAT_PRESENTER_H\r
 #define _SAVEBAT_PRESENTER_H\r
 \r
 #include "Presenter.h"\r
-#include "SaveBatView.h"\r
+#include "saveele/include/SaveBatPresenter.h"\r
+#include "saveele/include/SaveEleModel.h"\r
+#include "saveele/include/SaveBatView.h"\r
 #include "ModelListenerSample.h"\r
+#include "MainModel.h"\r
 \r
 namespace OHOS\r
 {\r
@@ -33,8 +30,13 @@ namespace OHOS
         void OnStop() override;\r
 \r
         static SaveBatPresenter *GetInstance();\r
-        virtual void Notify() override;\r
+\r
+        void OnTickEvent() override;\r
+        void Notify() override {}\r
+        void ResetTickTimer();\r
+\r
         void ExitView(void);\r
+        uint64_t startTime{0};\r
 \r
     private:\r
         // 因为继承了OnClickListener,所以有OnClick属性,至于参数,原函数也这样直接继承;\r
index 1b6be41..b737f5f 100644 (file)
@@ -1,3 +1,9 @@
+/***\r
+ * @Date: 2024-04-15 10:55:58\r
+ * @LastEditors: Caisking 3449750381@qq.com\r
+ * @LastEditTime: 2024-08-19 15:07:03\r
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/saveele/include/SaveBatView.h\r
+ */\r
 /***\r
  * @Date: 2024-04-15 10:55:58\r
  * @LastEditors: Caisking 3449750381@qq.com\r
@@ -43,7 +49,8 @@ namespace OHOS
         void DeInit();\r
         UIView *GetView();\r
 \r
-        void RefreshView();\r
+        void Refresh_Dial_View();\r
+        void Refresh_Back_View();\r
 \r
         void InitBatteryView();\r
         void InitTimeView();\r
@@ -60,16 +67,18 @@ namespace OHOS
         /*省电界面*/\r
         UILabel *timelabel = nullptr;            // 时间\r
         UILabel *datelabel = nullptr;            // 日期标签\r
-        UILabel *weeklabel = nullptr;            // 星期标签\r
         UILabel *batterylabel = nullptr;         // 电量标签\r
         UIBoxProgress *batteryprogress{nullptr}; // 电池进度条\r
         UIImageView *batteryiamge = nullptr;     // 电池框图标\r
         UIButton *button_exit = nullptr;         // 退出按键\r
         /*退出界面*/\r
-        UILabel *curren_timelabel{nullptr};\r
+        UILabel *curren_label{nullptr};\r
         UILabel *countlabel{nullptr};\r
-        UIImageView *wathchiamge = nullptr;\r
+        UIImageView *wathchiamge{nullptr};\r
         UICircleProgress *backprogress{nullptr};\r
+\r
+        int count = 3;         // 初始计数\r
+        int progressValue = 0; // 初始进度值\r
     };\r
 } // namespace OHOS\r
 \r
index 044c073..0a0cfe6 100644 (file)
@@ -28,7 +28,7 @@ namespace OHOS
         SaveEleModel(const SaveEleModel &) = delete;             // 禁止拷贝构造  
         SaveEleModel &operator=(const SaveEleModel &) = delete;  // 禁止赋值操作  
 
-        int chargeStatus = 0;       // 充电状态  
+        int chargeStatus_ = 0;       // 充电状态  
         bool viewState{false};      // 视图状态  
     };  
 }  
index 349b569..d1c9d32 100644 (file)
@@ -6,53 +6,61 @@
  */\r
 \r
 #include "AppViewIDs.h"\r
-#include "components/ui_label_ext.h"\r
-#include "ui_resource_string.h"\r
 #include "NativeAbility.h"\r
+#include "common/key_code.h"\r
+#include "KeyInputListener.h"\r
+#include "MainModel.h"\r
 \r
 #include "saveele/include/SaveBatPresenter.h"\r
 #include "saveele/include/SaveEleModel.h"\r
-\r
+#include "saveele/include/SaveBatView.h"\r
+#include "custom_utils.h"\r
 #include "string.h"\r
+#include "time.h"\r
+#include "battery_hal.h"\r
 namespace OHOS\r
 {\r
 \r
     // 当前Presenter属性实例化的内存指针\r
     static SaveBatPresenter *g_pSaveBatPresenter = nullptr;\r
 \r
+// 时间间隔宏定义(以毫秒为单位)\r
+#define ONE_SECOND 1000\r
+#define TWO_SECONDS 2000\r
+#define THREE_SECONDS 3000\r
+#define TIME_THRESHOLD 3000\r
+\r
+// 判断时间条件的宏\r
+#define IS_TIME_MATCH(startTime, current_time, interval) ((startTime != 0) && ((current_time - startTime) >= (interval)))\r
+#define IS_TIME_EXCEED(startTime, current_time) ((startTime != 0) && ((current_time - startTime) > (TIME_THRESHOLD)))\r
+\r
     SaveBatPresenter::SaveBatPresenter()\r
     {\r
-\r
         g_pSaveBatPresenter = this;\r
     }\r
 \r
     SaveBatPresenter::~SaveBatPresenter()\r
     {\r
-\r
         g_pSaveBatPresenter = nullptr;\r
     }\r
 \r
     SaveBatPresenter *SaveBatPresenter::GetInstance()\r
     {\r
-\r
         return g_pSaveBatPresenter;\r
     }\r
 \r
     void SaveBatPresenter::OnStart()\r
     {\r
-\r
         Presenter<SaveBatView>::OnStart();\r
     }\r
 \r
     void SaveBatPresenter::OnPause(void)\r
     {\r
-\r
         Presenter<SaveBatView>::OnPause();\r
     }\r
 \r
     void SaveBatPresenter::OnResume(void)\r
     {\r
-\r
         Presenter<SaveBatView>::OnResume();\r
     }\r
 \r
@@ -77,6 +85,7 @@ namespace OHOS
             bool state = SaveEleModel::GetInstance()->GetViewState();\r
             SaveEleModel::GetInstance()->SetViewState(!state);\r
             SaveBatView::GetInstance()->UpdateView();\r
+            ResetTickTimer();\r
         }\r
         return true;\r
     }\r
@@ -92,7 +101,6 @@ namespace OHOS
     }\r
     bool SaveBatPresenter::OnPress(UIView &view, const PressEvent &event)\r
     {\r
-\r
         return true;\r
     }\r
     bool SaveBatPresenter::OnRelease(UIView &view, const ReleaseEvent &event)\r
@@ -107,14 +115,36 @@ namespace OHOS
     }\r
     void SaveBatPresenter::ExitView(void)\r
     {\r
-        if (SaveEleModel::GetInstance()->GetChargeStatus())\r
+        bool isCharging = get_charge_stat(); // 获取充电状态\r
+        if (isCharging)\r
         {\r
             NativeAbility::GetInstance().ChangeSlice(VIEW_MAIN);\r
         }\r
     }\r
-    void SaveBatPresenter::Notify(void)\r
+\r
+    void SaveBatPresenter::OnTickEvent()\r
+    {\r
+        uint64_t current_time = osKernelGetTick2ms();\r
+        /*省电表盘界面*/\r
+        if (SaveEleModel::GetInstance()->GetViewState() == false)\r
+        {\r
+            SaveBatView::GetInstance()->Refresh_Dial_View();\r
+            ExitView();\r
+        }\r
+        else if (SaveEleModel::GetInstance()->GetViewState() == true)\r
+        {\r
+            if (IS_TIME_MATCH(startTime, current_time, ONE_SECOND))\r
+            {\r
+                SaveBatView::GetInstance()->Refresh_Back_View();\r
+            }\r
+            if (IS_TIME_EXCEED(startTime, current_time))\r
+            {\r
+                NativeAbility::GetInstance().ChangeSlice(VIEW_MAIN);\r
+            }\r
+        }\r
+    }\r
+    void SaveBatPresenter::ResetTickTimer(void)\r
     {\r
-        SaveBatView::GetInstance()->RefreshView();\r
-        ExitView();\r
+        startTime = osKernelGetTick2ms();\r
     }\r
 }
\ No newline at end of file
index e0a4b44..b23d978 100644 (file)
@@ -56,12 +56,14 @@ namespace OHOS
     }\r
 \r
     /* 更新主界面数据 */\r
-    void SaveBatView::RefreshView()\r
+    void SaveBatView::Refresh_Dial_View()\r
     {\r
         /*\r
           日期样式 04-22 周五\r
           时间样式 09:10\r
         */\r
+        if (timelabel == nullptr || datelabel == nullptr || batterylabel == nullptr || batteryprogress == nullptr)\r
+            return;\r
 \r
         // 获取当前时间\r
         time_t seconds;\r
@@ -90,11 +92,39 @@ namespace OHOS
         uint8_t value = battery_get_voltage(&voltage);\r
 \r
         // 更新界面组件\r
+\r
         timelabel->SetText(stringtime.c_str());\r
         datelabel->SetText(dateStr.c_str());\r
         batterylabel->SetText((std::to_string(value) + "%").c_str());\r
         batteryprogress->SetValue(value);\r
     }\r
+\r
+    /* 更新退出UI */\r
+    void SaveBatView::Refresh_Back_View()\r
+    {\r
+        if (countlabel == nullptr || backprogress == nullptr)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Refresh_Back_View: countlabel or backprogress is null.");\r
+            return;\r
+        }\r
+\r
+        if (count > 0) // 确保不会减少到负数\r
+        {\r
+            count--;\r
+            progressValue += 33;\r
+\r
+            countlabel->SetText(std::to_string(count).c_str());\r
+            backprogress->SetValue(progressValue);\r
+\r
+            // 根据最大值进行检查以避免进度条越界\r
+            if (progressValue > 100) // 假设进度最大值为100\r
+            {\r
+                progressValue = 100; // 限制在最大值\r
+            }\r
+\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Refresh_Back_View: 当前计数: %d, 当前进度值: %d", count, progressValue);\r
+        }\r
+    }\r
     void SaveBatView::InitBatteryView()\r
     {\r
         // 创建电池框图像\r
@@ -178,7 +208,6 @@ namespace OHOS
         datelabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);\r
         container_->Add(datelabel);\r
     }\r
-\r
     void SaveBatView::InitButtonView()\r
     {\r
         // 初始化按键\r
@@ -198,32 +227,47 @@ namespace OHOS
         button_exit->SetStyleForState(STYLE_BACKGROUND_COLOR, 0xff000000, UIButton::PRESSED);\r
 \r
         button_exit->SetOnLongPressListener(presenter_);\r
-        // button_exit->SetOnClickListener(presenter_);\r
+        button_exit->SetOnClickListener(presenter_);\r
         container_->Add(button_exit);\r
     }\r
     void SaveBatView::InitShowBackView()\r
     {\r
         // 时间\r
-        if (curren_timelabel == nullptr)\r
+        time_t seconds;\r
+        time(&seconds);\r
+        struct tm pTM;\r
+        localtime_r(&seconds, &pTM);\r
+\r
+        int hour = pTM.tm_hour;\r
+        int minute = pTM.tm_min;\r
+        std::string stringtime =\r
+            (hour < 10 ? "0" : "") + std::to_string(hour) + ":" +\r
+            (minute < 10 ? "0" : "") + std::to_string(minute);\r
+\r
+        curren_label = new UILabel();\r
+        if (curren_label == nullptr)\r
         {\r
-            curren_timelabel = new UILabel();\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "curren_label creation failed");\r
+            return;\r
         }\r
-        curren_timelabel->SetPosition(181, 52);\r
-        curren_timelabel->Resize(200, 60);\r
-        curren_timelabel->SetViewId("label4");\r
-        curren_timelabel->SetStyle(STYLE_TEXT_FONT, 40);\r
-        curren_timelabel->SetText("12:10");\r
-        curren_timelabel->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);\r
-        curren_timelabel->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
-        curren_timelabel->SetRollSpeed(0);\r
-        curren_timelabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 40);\r
-        container_->Add(curren_timelabel);\r
-        curren_timelabel->SetVisible(false);\r
+        curren_label->SetPosition(181, 52);\r
+        curren_label->Resize(200, 60);\r
+        curren_label->SetViewId("label4");\r
+        curren_label->SetStyle(STYLE_TEXT_FONT, 40);\r
+        curren_label->SetText(stringtime.c_str());\r
+        curren_label->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);\r
+        curren_label->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
+        curren_label->SetRollSpeed(0);\r
+        curren_label->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 40);\r
+        container_->Add(curren_label);\r
+        curren_label->SetVisible(false);\r
 \r
         // 圆形进度条\r
+        backprogress = new UICircleProgress();\r
         if (backprogress == nullptr)\r
         {\r
-            backprogress = new UICircleProgress();\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "backprogress creation failed");\r
+            return;\r
         }\r
         backprogress->SetPosition(143, 143);\r
         backprogress->Resize(183, 186);\r
@@ -238,14 +282,16 @@ namespace OHOS
         backprogress->SetCenterPosition(92, 93);\r
         backprogress->SetRadius(90);\r
         backprogress->SetEndAngle(359);\r
-        backprogress->SetValue(30);\r
+        backprogress->SetValue(0);\r
         container_->Add(backprogress);\r
         backprogress->SetVisible(false);\r
 \r
         // 手表image\r
+        wathchiamge = new UIImageView();\r
         if (wathchiamge == nullptr)\r
         {\r
-            wathchiamge = new UIImageView();\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "wathchiamge creation failed");\r
+            return;\r
         }\r
         wathchiamge->SetPosition(188, 182);\r
         wathchiamge->Resize(100, 100);\r
@@ -255,9 +301,11 @@ namespace OHOS
         wathchiamge->SetVisible(false);\r
 \r
         // 倒计时\r
+        countlabel = new UILabel();\r
         if (countlabel == nullptr)\r
         {\r
-            countlabel = new UILabel();\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "countlabel creation failed");\r
+            return;\r
         }\r
         countlabel->SetPosition(221, 212);\r
         countlabel->Resize(200, 60);\r
@@ -273,29 +321,89 @@ namespace OHOS
     }\r
 \r
     // 更新当前界面状态\r
-    void SaveBatView ::UpdateView()\r
+    void SaveBatView::UpdateView()\r
     {\r
         bool state = SaveEleModel::GetInstance()->GetViewState();\r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "UpdateView state %d", state);\r
+#if 0\r
+        // 检查每个组件是否为空,并记录具体信息\r
+        if (timelabel == nullptr)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "timelabel is null");\r
+        }\r
+        if (datelabel == nullptr)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "datelabel is null");\r
+        }\r
+        if (batterylabel == nullptr)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "batterylabel is null");\r
+        }\r
+        if (batteryprogress == nullptr)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "batteryprogress is null");\r
+        }\r
+        if (batteryiamge == nullptr)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "batteryiamge is null");\r
+        }\r
+        if (curren_label == nullptr)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "curren_label is null");\r
+        }\r
+        if (countlabel == nullptr)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "countlabel is null");\r
+        }\r
+        if (wathchiamge == nullptr)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "wathchiamge is null");\r
+        }\r
+        if (backprogress == nullptr)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "backprogress is null");\r
+        }\r
+        if (button_exit == nullptr)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "button_exit is null");\r
+        }\r
+#endif\r
+        // 如果有任何组件为空,返回\r
+        if (timelabel == nullptr || datelabel == nullptr || batterylabel == nullptr || batteryprogress == nullptr ||\r
+            batteryiamge == nullptr || curren_label == nullptr ||\r
+            countlabel == nullptr || wathchiamge == nullptr || backprogress == nullptr || button_exit == nullptr)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "One or more view components are null.");\r
+            return;\r
+        }\r
 \r
         /*原界面*/\r
         timelabel->SetVisible(!state);\r
         datelabel->SetVisible(!state);\r
-        weeklabel->SetVisible(!state);\r
         batterylabel->SetVisible(!state);\r
         batteryprogress->SetVisible(!state);\r
         batteryiamge->SetVisible(!state);\r
 \r
+        /*重置计数器*/\r
+        count = 3;         // 初始计数\r
+        progressValue = 0; // 初始进度值\r
+        countlabel->SetText(std::to_string(count).c_str());\r
+        backprogress->SetValue(progressValue);\r
+\r
         /*退出界面*/\r
-        curren_timelabel->SetVisible(state);\r
+        curren_label->SetVisible(state);\r
         countlabel->SetVisible(state);\r
         wathchiamge->SetVisible(state);\r
         backprogress->SetVisible(state);\r
-        /*\r
-            if (state)\r
-                button_exit->SetImageSrc(BACK_BUTTON, BACK_BUTTON);\r
-            else\r
-                button_exit->SetImageSrc(SAVE_BUTTON, SAVE_BUTTON);\r
-        */\r
+\r
+        if (state)\r
+        {\r
+            button_exit->SetImageSrc(BACK_BUTTON, BACK_BUTTON);\r
+        }\r
+        else\r
+        {\r
+            button_exit->SetImageSrc(SAVE_BUTTON, SAVE_BUTTON);\r
+        }\r
     }\r
     void SaveBatView::OnStart()\r
     {\r
@@ -314,9 +422,9 @@ namespace OHOS
         InitBatteryView();\r
         InitTimeView();\r
         InitButtonView();\r
-        // InitShowBackView();\r
+        InitShowBackView();\r
 \r
-        RootView::GetInstance()->Add(container_);\r
+        SetContainerView(container_);\r
     }\r
 \r
     void SaveBatView::OnSetUpView()\r
index 072adcf..1f22e38 100644 (file)
@@ -1,3 +1,9 @@
+/*** 
+ * @Date: 2024-04-15 10:55:58
+ * @LastEditors: Caisking 3449750381@qq.com
+ * @LastEditTime: 2024-08-19 17:07:54
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/saveele/src/SaveEleModel.cpp
+ */
 /*** 
  * @Date: 2024-04-15 10:55:58
  * @LastEditors: Caisking 3449750381@qq.com
@@ -16,10 +22,10 @@ namespace OHOS
     }
     int SaveEleModel::GetChargeStatus()
     {
-        return chargeStatus;
+        return chargeStatus_;
     }
     void SaveEleModel::SetChargeStatus(int chargeStatus)
     {
-        chargeStatus = chargeStatus;
+        chargeStatus_ = chargeStatus;
     }
 }
\ No newline at end of file
index f492994..2b05cd5 100644 (file)
@@ -313,7 +313,7 @@ void MsgCenterNotifyAlarmProc(const Topic topic, Request* req)
 void MsgCenterNotifyONtimeProc(const Topic topic, Request* req)
 {
     unused(req);
-    // The alarm notification is not displayed if the incoming call notification is already being processed
+   // The alarm notification is not displayed if the incoming call notification is already being processed
    // cywee_save_data();
    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "保存每小时步数");
    step_history_save();
@@ -323,7 +323,7 @@ void MsgCenterNotifyONtimeProc(const Topic topic, Request* req)
    calories_history_save();
    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "保存每小时距离数据");
    distances_history_save();
-    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "保存每小时燃脂数据");
+   WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "保存每小时燃脂数据");
    fat_history_save();
 }
 
@@ -360,13 +360,12 @@ void MsgCenterNotifyChargePlugProc(const Topic topic, Request* req)
     {
         display_api->turn_on_screen();
     }
+
 #if DIALDATASET
     DialModelCharge::GetInstance()->UpdatechargeStatus(1);
 #endif
-    SaveEleModel::GetInstance()->SetChargeStatus(1);
-
-   
 
+/* ---------------------------------- 充电弹窗 ---------------------------------- */
     testCHANINGView *t=testCHANINGView::GetInstance();
     if(t!=NULL)
     {
@@ -374,7 +373,6 @@ void MsgCenterNotifyChargePlugProc(const Topic topic, Request* req)
     }
     else
     {
-
         NotificationManager::GetInstance()->ShowNotify(ShowChargeingNotify, (uint16_t)topic, true);
     }
    
@@ -386,13 +384,12 @@ void MsgCenterNotifyChargeUnPlugProc(const Topic topic, Request* req)
     unused(req);
     unused(topic);
     WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "MsgCenterNotifyProc:: CHarger UnPlug !");
+
 #if DIALDATASET
     DialModelCharge::GetInstance()->UpdatechargeStatus(0);
 #endif
-    SaveEleModel::GetInstance()->SetChargeStatus(0);
-
-   
 
+/* ---------------------------------- 充电弹窗 ---------------------------------- */
     testCHANINGView *t=testCHANINGView::GetInstance();
     if(t!=NULL)
     {
@@ -403,6 +400,7 @@ void MsgCenterNotifyChargeUnPlugProc(const Topic topic, Request* req)
         if(is_UIViewGroup_charge())
         NotificationManager::GetInstance()->StopNotify();
     }
+
 }
 
 /*低电量提醒*/