From: Caisking <3449750381@qq.com> Date: Mon, 19 Aug 2024 11:19:34 +0000 (+0800) Subject: 优化省电模式退出 X-Git-Tag: release_V1.2.70_20241020_135402~628^2~4 X-Git-Url: http://git.snicker.com.cn/css/static/gitweb.css?a=commitdiff_plain;h=0327deae122d649f71b3b90723ff3631925daad0;p=mirrors%2FFD230.git 优化省电模式退出 --- diff --git a/code/sdk/application/wearable/fd230app/nativeui/saveele/include/SaveBatPresenter.h b/code/sdk/application/wearable/fd230app/nativeui/saveele/include/SaveBatPresenter.h index 79cba458e..4f142e8c8 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/saveele/include/SaveBatPresenter.h +++ b/code/sdk/application/wearable/fd230app/nativeui/saveele/include/SaveBatPresenter.h @@ -1,16 +1,13 @@ -/*** - * @Date: 2024-04-15 10:55:58 - * @LastEditors: Caisking 3449750381@qq.com - * @LastEditTime: 2024-08-17 16:00:26 - * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/saveele/include/SaveBatPresenter.h - */ #ifndef _SAVEBAT_PRESENTER_H #define _SAVEBAT_PRESENTER_H #include "Presenter.h" -#include "SaveBatView.h" +#include "saveele/include/SaveBatPresenter.h" +#include "saveele/include/SaveEleModel.h" +#include "saveele/include/SaveBatView.h" #include "ModelListenerSample.h" +#include "MainModel.h" namespace OHOS { @@ -33,8 +30,13 @@ namespace OHOS void OnStop() override; static SaveBatPresenter *GetInstance(); - virtual void Notify() override; + + void OnTickEvent() override; + void Notify() override {} + void ResetTickTimer(); + void ExitView(void); + uint64_t startTime{0}; private: // 因为继承了OnClickListener,所以有OnClick属性,至于参数,原函数也这样直接继承; diff --git a/code/sdk/application/wearable/fd230app/nativeui/saveele/include/SaveBatView.h b/code/sdk/application/wearable/fd230app/nativeui/saveele/include/SaveBatView.h index 1b6be41d9..b737f5f0b 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/saveele/include/SaveBatView.h +++ b/code/sdk/application/wearable/fd230app/nativeui/saveele/include/SaveBatView.h @@ -1,3 +1,9 @@ +/*** + * @Date: 2024-04-15 10:55:58 + * @LastEditors: Caisking 3449750381@qq.com + * @LastEditTime: 2024-08-19 15:07:03 + * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/saveele/include/SaveBatView.h + */ /*** * @Date: 2024-04-15 10:55:58 * @LastEditors: Caisking 3449750381@qq.com @@ -43,7 +49,8 @@ namespace OHOS void DeInit(); UIView *GetView(); - void RefreshView(); + void Refresh_Dial_View(); + void Refresh_Back_View(); void InitBatteryView(); void InitTimeView(); @@ -60,16 +67,18 @@ namespace OHOS /*省电界面*/ UILabel *timelabel = nullptr; // 时间 UILabel *datelabel = nullptr; // 日期标签 - UILabel *weeklabel = nullptr; // 星期标签 UILabel *batterylabel = nullptr; // 电量标签 UIBoxProgress *batteryprogress{nullptr}; // 电池进度条 UIImageView *batteryiamge = nullptr; // 电池框图标 UIButton *button_exit = nullptr; // 退出按键 /*退出界面*/ - UILabel *curren_timelabel{nullptr}; + UILabel *curren_label{nullptr}; UILabel *countlabel{nullptr}; - UIImageView *wathchiamge = nullptr; + UIImageView *wathchiamge{nullptr}; UICircleProgress *backprogress{nullptr}; + + int count = 3; // 初始计数 + int progressValue = 0; // 初始进度值 }; } // namespace OHOS diff --git a/code/sdk/application/wearable/fd230app/nativeui/saveele/include/SaveEleModel.h b/code/sdk/application/wearable/fd230app/nativeui/saveele/include/SaveEleModel.h index 044c0734a..0a0cfe697 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/saveele/include/SaveEleModel.h +++ b/code/sdk/application/wearable/fd230app/nativeui/saveele/include/SaveEleModel.h @@ -28,7 +28,7 @@ namespace OHOS SaveEleModel(const SaveEleModel &) = delete; // 禁止拷贝构造 SaveEleModel &operator=(const SaveEleModel &) = delete; // 禁止赋值操作 - int chargeStatus = 0; // 充电状态 + int chargeStatus_ = 0; // 充电状态 bool viewState{false}; // 视图状态 }; } diff --git a/code/sdk/application/wearable/fd230app/nativeui/saveele/src/SaveBatPresenter.cpp b/code/sdk/application/wearable/fd230app/nativeui/saveele/src/SaveBatPresenter.cpp index 349b5690d..d1c9d327a 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/saveele/src/SaveBatPresenter.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/saveele/src/SaveBatPresenter.cpp @@ -6,53 +6,61 @@ */ #include "AppViewIDs.h" -#include "components/ui_label_ext.h" -#include "ui_resource_string.h" #include "NativeAbility.h" +#include "common/key_code.h" +#include "KeyInputListener.h" +#include "MainModel.h" #include "saveele/include/SaveBatPresenter.h" #include "saveele/include/SaveEleModel.h" - +#include "saveele/include/SaveBatView.h" +#include "custom_utils.h" #include "string.h" +#include "time.h" +#include "battery_hal.h" namespace OHOS { // 当前Presenter属性实例化的内存指针 static SaveBatPresenter *g_pSaveBatPresenter = nullptr; +// 时间间隔宏定义(以毫秒为单位) +#define ONE_SECOND 1000 +#define TWO_SECONDS 2000 +#define THREE_SECONDS 3000 +#define TIME_THRESHOLD 3000 + +// 判断时间条件的宏 +#define IS_TIME_MATCH(startTime, current_time, interval) ((startTime != 0) && ((current_time - startTime) >= (interval))) +#define IS_TIME_EXCEED(startTime, current_time) ((startTime != 0) && ((current_time - startTime) > (TIME_THRESHOLD))) + SaveBatPresenter::SaveBatPresenter() { - g_pSaveBatPresenter = this; } SaveBatPresenter::~SaveBatPresenter() { - g_pSaveBatPresenter = nullptr; } SaveBatPresenter *SaveBatPresenter::GetInstance() { - return g_pSaveBatPresenter; } void SaveBatPresenter::OnStart() { - Presenter::OnStart(); } void SaveBatPresenter::OnPause(void) { - Presenter::OnPause(); } void SaveBatPresenter::OnResume(void) { - Presenter::OnResume(); } @@ -77,6 +85,7 @@ namespace OHOS bool state = SaveEleModel::GetInstance()->GetViewState(); SaveEleModel::GetInstance()->SetViewState(!state); SaveBatView::GetInstance()->UpdateView(); + ResetTickTimer(); } return true; } @@ -92,7 +101,6 @@ namespace OHOS } bool SaveBatPresenter::OnPress(UIView &view, const PressEvent &event) { - return true; } bool SaveBatPresenter::OnRelease(UIView &view, const ReleaseEvent &event) @@ -107,14 +115,36 @@ namespace OHOS } void SaveBatPresenter::ExitView(void) { - if (SaveEleModel::GetInstance()->GetChargeStatus()) + bool isCharging = get_charge_stat(); // 获取充电状态 + if (isCharging) { NativeAbility::GetInstance().ChangeSlice(VIEW_MAIN); } } - void SaveBatPresenter::Notify(void) + + void SaveBatPresenter::OnTickEvent() + { + uint64_t current_time = osKernelGetTick2ms(); + /*省电表盘界面*/ + if (SaveEleModel::GetInstance()->GetViewState() == false) + { + SaveBatView::GetInstance()->Refresh_Dial_View(); + ExitView(); + } + else if (SaveEleModel::GetInstance()->GetViewState() == true) + { + if (IS_TIME_MATCH(startTime, current_time, ONE_SECOND)) + { + SaveBatView::GetInstance()->Refresh_Back_View(); + } + if (IS_TIME_EXCEED(startTime, current_time)) + { + NativeAbility::GetInstance().ChangeSlice(VIEW_MAIN); + } + } + } + void SaveBatPresenter::ResetTickTimer(void) { - SaveBatView::GetInstance()->RefreshView(); - ExitView(); + startTime = osKernelGetTick2ms(); } } \ No newline at end of file diff --git a/code/sdk/application/wearable/fd230app/nativeui/saveele/src/SaveBatView.cpp b/code/sdk/application/wearable/fd230app/nativeui/saveele/src/SaveBatView.cpp index e0a4b44e4..b23d9784f 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/saveele/src/SaveBatView.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/saveele/src/SaveBatView.cpp @@ -56,12 +56,14 @@ namespace OHOS } /* 更新主界面数据 */ - void SaveBatView::RefreshView() + void SaveBatView::Refresh_Dial_View() { /* 日期样式 04-22 周五 时间样式 09:10 */ + if (timelabel == nullptr || datelabel == nullptr || batterylabel == nullptr || batteryprogress == nullptr) + return; // 获取当前时间 time_t seconds; @@ -90,11 +92,39 @@ namespace OHOS uint8_t value = battery_get_voltage(&voltage); // 更新界面组件 + timelabel->SetText(stringtime.c_str()); datelabel->SetText(dateStr.c_str()); batterylabel->SetText((std::to_string(value) + "%").c_str()); batteryprogress->SetValue(value); } + + /* 更新退出UI */ + void SaveBatView::Refresh_Back_View() + { + if (countlabel == nullptr || backprogress == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Refresh_Back_View: countlabel or backprogress is null."); + return; + } + + if (count > 0) // 确保不会减少到负数 + { + count--; + progressValue += 33; + + countlabel->SetText(std::to_string(count).c_str()); + backprogress->SetValue(progressValue); + + // 根据最大值进行检查以避免进度条越界 + if (progressValue > 100) // 假设进度最大值为100 + { + progressValue = 100; // 限制在最大值 + } + + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Refresh_Back_View: 当前计数: %d, 当前进度值: %d", count, progressValue); + } + } void SaveBatView::InitBatteryView() { // 创建电池框图像 @@ -178,7 +208,6 @@ namespace OHOS datelabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30); container_->Add(datelabel); } - void SaveBatView::InitButtonView() { // 初始化按键 @@ -198,32 +227,47 @@ namespace OHOS button_exit->SetStyleForState(STYLE_BACKGROUND_COLOR, 0xff000000, UIButton::PRESSED); button_exit->SetOnLongPressListener(presenter_); - // button_exit->SetOnClickListener(presenter_); + button_exit->SetOnClickListener(presenter_); container_->Add(button_exit); } void SaveBatView::InitShowBackView() { // 时间 - if (curren_timelabel == nullptr) + time_t seconds; + time(&seconds); + struct tm pTM; + localtime_r(&seconds, &pTM); + + int hour = pTM.tm_hour; + int minute = pTM.tm_min; + std::string stringtime = + (hour < 10 ? "0" : "") + std::to_string(hour) + ":" + + (minute < 10 ? "0" : "") + std::to_string(minute); + + curren_label = new UILabel(); + if (curren_label == nullptr) { - curren_timelabel = new UILabel(); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "curren_label creation failed"); + return; } - curren_timelabel->SetPosition(181, 52); - curren_timelabel->Resize(200, 60); - curren_timelabel->SetViewId("label4"); - curren_timelabel->SetStyle(STYLE_TEXT_FONT, 40); - curren_timelabel->SetText("12:10"); - curren_timelabel->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT); - curren_timelabel->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); - curren_timelabel->SetRollSpeed(0); - curren_timelabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 40); - container_->Add(curren_timelabel); - curren_timelabel->SetVisible(false); + curren_label->SetPosition(181, 52); + curren_label->Resize(200, 60); + curren_label->SetViewId("label4"); + curren_label->SetStyle(STYLE_TEXT_FONT, 40); + curren_label->SetText(stringtime.c_str()); + curren_label->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT); + curren_label->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); + curren_label->SetRollSpeed(0); + curren_label->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 40); + container_->Add(curren_label); + curren_label->SetVisible(false); // 圆形进度条 + backprogress = new UICircleProgress(); if (backprogress == nullptr) { - backprogress = new UICircleProgress(); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "backprogress creation failed"); + return; } backprogress->SetPosition(143, 143); backprogress->Resize(183, 186); @@ -238,14 +282,16 @@ namespace OHOS backprogress->SetCenterPosition(92, 93); backprogress->SetRadius(90); backprogress->SetEndAngle(359); - backprogress->SetValue(30); + backprogress->SetValue(0); container_->Add(backprogress); backprogress->SetVisible(false); // 手表image + wathchiamge = new UIImageView(); if (wathchiamge == nullptr) { - wathchiamge = new UIImageView(); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "wathchiamge creation failed"); + return; } wathchiamge->SetPosition(188, 182); wathchiamge->Resize(100, 100); @@ -255,9 +301,11 @@ namespace OHOS wathchiamge->SetVisible(false); // 倒计时 + countlabel = new UILabel(); if (countlabel == nullptr) { - countlabel = new UILabel(); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "countlabel creation failed"); + return; } countlabel->SetPosition(221, 212); countlabel->Resize(200, 60); @@ -273,29 +321,89 @@ namespace OHOS } // 更新当前界面状态 - void SaveBatView ::UpdateView() + void SaveBatView::UpdateView() { bool state = SaveEleModel::GetInstance()->GetViewState(); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "UpdateView state %d", state); +#if 0 + // 检查每个组件是否为空,并记录具体信息 + if (timelabel == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "timelabel is null"); + } + if (datelabel == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "datelabel is null"); + } + if (batterylabel == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "batterylabel is null"); + } + if (batteryprogress == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "batteryprogress is null"); + } + if (batteryiamge == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "batteryiamge is null"); + } + if (curren_label == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "curren_label is null"); + } + if (countlabel == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "countlabel is null"); + } + if (wathchiamge == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "wathchiamge is null"); + } + if (backprogress == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "backprogress is null"); + } + if (button_exit == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "button_exit is null"); + } +#endif + // 如果有任何组件为空,返回 + if (timelabel == nullptr || datelabel == nullptr || batterylabel == nullptr || batteryprogress == nullptr || + batteryiamge == nullptr || curren_label == nullptr || + countlabel == nullptr || wathchiamge == nullptr || backprogress == nullptr || button_exit == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "One or more view components are null."); + return; + } /*原界面*/ timelabel->SetVisible(!state); datelabel->SetVisible(!state); - weeklabel->SetVisible(!state); batterylabel->SetVisible(!state); batteryprogress->SetVisible(!state); batteryiamge->SetVisible(!state); + /*重置计数器*/ + count = 3; // 初始计数 + progressValue = 0; // 初始进度值 + countlabel->SetText(std::to_string(count).c_str()); + backprogress->SetValue(progressValue); + /*退出界面*/ - curren_timelabel->SetVisible(state); + curren_label->SetVisible(state); countlabel->SetVisible(state); wathchiamge->SetVisible(state); backprogress->SetVisible(state); - /* - if (state) - button_exit->SetImageSrc(BACK_BUTTON, BACK_BUTTON); - else - button_exit->SetImageSrc(SAVE_BUTTON, SAVE_BUTTON); - */ + + if (state) + { + button_exit->SetImageSrc(BACK_BUTTON, BACK_BUTTON); + } + else + { + button_exit->SetImageSrc(SAVE_BUTTON, SAVE_BUTTON); + } } void SaveBatView::OnStart() { @@ -314,9 +422,9 @@ namespace OHOS InitBatteryView(); InitTimeView(); InitButtonView(); - // InitShowBackView(); + InitShowBackView(); - RootView::GetInstance()->Add(container_); + SetContainerView(container_); } void SaveBatView::OnSetUpView() diff --git a/code/sdk/application/wearable/fd230app/nativeui/saveele/src/SaveEleModel.cpp b/code/sdk/application/wearable/fd230app/nativeui/saveele/src/SaveEleModel.cpp index 072adcfcd..1f22e38bc 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/saveele/src/SaveEleModel.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/saveele/src/SaveEleModel.cpp @@ -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 diff --git a/code/sdk/application/wearable/service/msg_center/src/msg_center_customer.cpp b/code/sdk/application/wearable/service/msg_center/src/msg_center_customer.cpp index f492994eb..2b05cd551 100644 --- a/code/sdk/application/wearable/service/msg_center/src/msg_center_customer.cpp +++ b/code/sdk/application/wearable/service/msg_center/src/msg_center_customer.cpp @@ -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(); } + } /*低电量提醒*/