*/\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
bool state = SaveEleModel::GetInstance()->GetViewState();\r
SaveEleModel::GetInstance()->SetViewState(!state);\r
SaveBatView::GetInstance()->UpdateView();\r
+ ResetTickTimer();\r
}\r
return true;\r
}\r
}\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
}\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
}\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
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
datelabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);\r
container_->Add(datelabel);\r
}\r
-\r
void SaveBatView::InitButtonView()\r
{\r
// 初始化按键\r
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
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
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
}\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
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