${CMAKE_CURRENT_SOURCE_DIR}/nativeui/traingrecord/src/TraingRecordView.cpp
${CMAKE_CURRENT_SOURCE_DIR}/nativeui/traingrecord/src/TraingRecordPresenter.cpp
+ #saveele
+ ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/saveele/src/SaveEleModel.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/saveele/src/SaveElePresenter.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/saveele/src/SaveEleView.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/saveele/src/SaveBatPresenter.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/saveele/src/SaveBatView.cpp
+
${CMAKE_CURRENT_SOURCE_DIR}/nativeui/phone/src/PhoneView.cpp
${CMAKE_CURRENT_SOURCE_DIR}/nativeui/phone/src/PhonePresenter.cpp
VIEW_ROTATE, // 模拟表冠
VIEW_BLOODOXY, // 血氧饱和度界面
VIEW_HEART, // 心率监测
+ VIEW_SAVEELE, // 省电模式
+ VIEW_SAVEBAT, // 省电模式界面
/* ----------------------------------- 训练 ----------------------------------- */
VIEW_TRAINING, // 训练
VIEW_TRAININGMORE, // 更多训练
+ VIEW_RUNNING, // 跑步训练之列表
VIEW_TRAININGLIMIT, // 极限运动子列表
VIEW_TRAININGNOMAL, // 正常训练开始界面(除骑行,健走,跑步外)
VIEW_TRAININGSET, // 训练目标(时长,卡路里)
- VIEW_TRAININGGPSSET, // GPS训练目标(时长,距离,卡路里,步数)
VIEW_TRAININGSETTIME, // 设置训练时长
VIEW_TRAININGSETCALULI, // 设置训练卡路里
VIEW_TRAININGSETDIST, // 设置训练路程
VIEW_TRAININGENDNOTE, // 结束训练提醒
VIEW_TRAININGENDNOTE2, // 结束训练时间太短
VIEW_TRAININGENDDATA, // 训练结束详细数据
- VIEW_TRAININGGPS, // GPS训练
- VIEW_TRAININGGPSLACK, // 缺少GPS
- VIEW_TRAININGGPSNOTE, // 连接GPS提醒
VIEW_TRAININGSTRONG, // 训练强度介绍
- VIEW_TRAININGGPSLOST, // GPS断联
- VIEW_TRAININGGPSBACK, // GPS回连
VIEW_TRAININGWIN, // 目标达成
VIEW_TRAINING_RECORD, // 训练记录
+ /* ---------------------------------- GPS训练 --------------------------------- */
+ VIEW_TRAININGGPS, // GPS训练
+ VIEW_TRAININGGPSSET, // GPS训练目标(时长,距离,卡路里,步数)
+ VIEW_TRAININGGPSLACK, // 缺少GPS
+ VIEW_TRAININGGPSNOTE, // 连接GPS提醒
+ VIEW_TRAININGGPSLOST, // GPS断联
+ VIEW_TRAININGGPSBACK, // GPS回连
/* -------------------------------------------------------------------------- */
VIEW_MAIN_TEMP, // 体温界面(暂时不用)
VIEW_OFFLINEVOICE, // 语音助手界面(暂时不用)
void InitDisplayBrightnessSlice(void);
/* --------------------------------- 经典蓝牙界面 --------------------------------- */
void InitClassicBluetoothSlice(void);
- /* --------------------------------测试界面------------------------------------ */
+ /* --------------------------------界面------------------------------------ */
void InitRotateSlice(void);
void InitBloodSlice(void);
void InitHeartSlice(void);
void InitMainAlipaySlice(void);
void InitDialUpdateSlice(void);
+ void InitSaveEleSlice(void);
+ void InitSaveBatSlice(void);
/* ----------------------------------- 训练 ----------------------------------- */
void InitTraingSlice(void);
void InitTraingMoreSlice(void);
#include "producttest/include/testPresenter.h"
#include "producttest/include/testView.h"
+#include "saveele/include/SaveEleView.h"
+#include "saveele/include/SaveElePresenter.h"
+#include "saveele/include/SaveBatView.h"
+#include "saveele/include/SaveBatPresenter.h"
+
/* -------------------------------------------------------------------------- */
#include "traing/include/TraingView.h"
#include "traing/include/TraingPresenter.h"
{VIEW_PHONERING, &NativeLauncher::InitPhoneRingSlice},
{VIEW_TEST, &NativeLauncher::InittestSlice},
-
+ /* ---------------------------------- 省电模式 ---------------------------------- */
+ {VIEW_SAVEELE, &NativeLauncher::InitSaveEleSlice},
+ {VIEW_SAVEBAT, &NativeLauncher::InitSaveBatSlice},
/* ----------------------------------- 训练 ----------------------------------- */
{VIEW_TRAINING, &NativeLauncher::InitTraingSlice}, // 训练
{VIEW_TRAININGMORE, &NativeLauncher::InitTraingMoreSlice}, // 更多训练
RebootModel::GetInstance()->RegisterLongPressEvents();
// 开机检测充电状态
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Power is %d",get_charge_stat());
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Power is %d", get_charge_stat());
if (get_charge_stat())
{
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Power is Charging!");
NativeAbility::GetInstance().AddSliceProxy(VIEW_TRAINING_RECORD, traingrecordview);
}
/* -------------------------------------------------------------------------- */
+
+ // 省电模式
+ void NativeLauncher::InitSaveEleSlice(void)
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "NativeLauncher::InitSaveEleSlice");
+ SliceProxy *saveeleview = new AbilitySliceProxy<SaveEleView, SaveElePresenter>;
+ if (saveeleview == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "saveeleview");
+ return;
+ }
+ NativeAbility::GetInstance().AddSliceProxy(VIEW_SAVEELE, saveeleview);
+ }
+
+ void NativeLauncher::InitSaveBatSlice(void)
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "NativeLauncher::InitSaveBatSlice");
+ SliceProxy *savebatview = new AbilitySliceProxy<SaveBatView, SaveBatPresenter>;
+ if (savebatview == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "savebatview");
+ return;
+ }
+ NativeAbility::GetInstance().AddSliceProxy(VIEW_SAVEBAT, savebatview);
+ }
}
{
const AppItem g_nativeAppList[] = {
{VIEW_MAIN_ALARM, PNG_APPLIST_ALARM_IMAGE, PNG_APPLIST_ALARM_IMAGE, "闹钟", nullptr},
- {VIEW_BLOODOXY, PNG_APPLIST_SPO2_IMAGE, PNG_APPLIST_SPO2_IMAGE, "血氧饱和度", nullptr},
+ {VIEW_SETTING, PNG_APPLIST_SETTING_IMAGE, PNG_APPLIST_SETTING_IMAGE, "设置", nullptr},
+ {VIEW_DIALUPDATE, PNG_APPLIST_UI_SAMPLE_IMAGE, PNG_APPLIST_UI_SAMPLE_IMAGE, "表盘切换", nullptr},
{VIEW_COMPASS, PNG_APPLIST_COMPASS_IMAGE, PNG_APPLIST_COMPASS_IMAGE, "指南针", nullptr},
+ {VIEW_BLOODOXY, PNG_APPLIST_SPO2_IMAGE, PNG_APPLIST_SPO2_IMAGE, "血氧饱和度", nullptr},
+ {VIEW_HEART, PNG_APPLIST_HEART_IMAGE, PNG_APPLIST_HEART_IMAGE, "心率检测", nullptr},
{VIEW_INDOORWALK, PNG_APPLIST_WALK_IMAGE, PNG_APPLIST_WALK_IMAGE, "室内步行", nullptr},
{VIEW_WEATHER, PNG_APPLIST_WEATHER_IMAGE, PNG_APPLIST_WEATHER_IMAGE, "天气", nullptr},
{VIEW_TRAINING, PNG_APPLIST_TRAINING_IMAGE, PNG_APPLIST_TRAINING_IMAGE, "体能训练", nullptr},
{VIEW_TRAINING_RECORD, PNG_APPLIST_TRAINING_RECORD_IMAGE, PNG_APPLIST_TRAINING_RECORD_IMAGE, "训练记录", nullptr},
- {VIEW_HEART, PNG_APPLIST_HEART_IMAGE, PNG_APPLIST_HEART_IMAGE, "心率检测", nullptr},
{VIEW_RECORD, PNG_APPLIST_RECORD_IMAGE, PNG_APPLIST_RECORD_IMAGE, "录音", nullptr},
- {VIEW_SETTING, PNG_APPLIST_SETTING_IMAGE, PNG_APPLIST_SETTING_IMAGE, "设置", nullptr},
- {VIEW_DIALUPDATE, PNG_APPLIST_UI_SAMPLE_IMAGE, PNG_APPLIST_UI_SAMPLE_IMAGE, "表盘切换", nullptr},
{VIEW_CALLER_LOG, PNG_APPLIST_CALLLOG_IMAGE, PNG_APPLIST_CALLLOG_IMAGE, "通话记录", nullptr},
{VIEW_PHONE, PNG_APPLIST_CALLER_IMAGE, PNG_APPLIST_CALLER_IMAGE, "电话", nullptr},
#ifdef SUPPORT_ALIPAY_SEC
map<string, AppViewId> g_jumpView = {
{DROPDOWN_CLICK_SETTING, VIEW_SETTING}, // 设置
{DROPDOWN_CLICK_BLUETOOTH, VIEW_CLASSIC_BLUETOOTH}, // 蓝牙
+ {DROPDOWN_CLICK_SAVEELE, VIEW_SAVEELE}, // 省电模式
};
// map<string, int> g_chanColor = { { DROPDOWN_CLICK_FINDMYPHONE, DROPDOWN_DROPDOWN_FIND_PHONE_B },
--- /dev/null
+\r
+#ifndef _SAVEBAT_PRESENTER_H\r
+#define _SAVEBAT_PRESENTER_H\r
+\r
+#include "Presenter.h"\r
+#include "SaveBatView.h"\r
+#include "ModelListenerSample.h"\r
+\r
+namespace OHOS\r
+{\r
+ class SaveBatView;\r
+\r
+ class SaveBatPresenter : public Presenter<SaveBatView>,\r
+ public UIView::OnClickListener,\r
+ public UIView::OnDragListener,\r
+ public UIView::OnLongPressListener,\r
+ public ModelListenerSample\r
+ {\r
+ public:\r
+ SaveBatPresenter();\r
+ virtual ~SaveBatPresenter();\r
+\r
+ void OnStart() override;\r
+ void OnPause() override;\r
+ void OnResume() override;\r
+ void OnStop() override;\r
+\r
+ static SaveBatPresenter *GetInstance();\r
+ virtual void Notify() override;\r
+\r
+ private:\r
+ // 因为继承了OnClickListener,所以有OnClick属性,至于参数,原函数也这样直接继承;\r
+ bool OnClick(UIView &view, const ClickEvent &event) override;\r
+ bool OnDrag(UIView &view, const DragEvent &event) override;\r
+ bool OnLongPress(UIView &view, const LongPressEvent &event);\r
+ };\r
+\r
+} // namespace OHOS\r
+\r
+#endif
\ No newline at end of file
--- /dev/null
+/***\r
+ * @Author: Caisking 3449750381@qq.com\r
+ * @Date: 2024-03-25 11:15:36\r
+ * @LastEditors: Caisking 3449750381@qq.com\r
+ * @LastEditTime: 2024-03-25 14:31:53\r
+ * @FilePath: /sdk/application/wearable/fd230app/nativeui/saveele/include/SaveBatView.h\r
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE\r
+ */\r
+#ifndef _SAVEBAT_VIEW_H\r
+#define _SAVEBAT_VIEW_H\r
+\r
+#include "BaseView.h"\r
+#include "View.h"\r
+#include <ui_scroll_view.h>\r
+#include "components/ui_view_group.h"\r
+#include "components/ui_label.h"\r
+#include "components/ui_image_view.h"\r
+#include "components/ui_button.h"\r
+#include "components/ui_digital_clock.h"\r
+#include "components/ui_box_progress.h"\r
+#include "SaveBatPresenter.h"\r
+#include <thread>\r
+\r
+namespace OHOS\r
+{\r
+ class SaveBatPresenter;\r
+ class SaveBatView : public View<SaveBatPresenter>\r
+ {\r
+\r
+ public:\r
+ SaveBatView();\r
+ virtual ~SaveBatView();\r
+ static SaveBatView *GetInstance(void);\r
+ void updateClock();\r
+\r
+ void OnStart() override;\r
+ void OnSetUpView() override;\r
+ void OnTearDownView() override;\r
+ void OnStop() override;\r
+ void Init();\r
+ void DeInit();\r
+ UIView *GetView();\r
+ void RefreshView();\r
+\r
+ private:\r
+ UIView::OnDragListener *draglistener{nullptr};\r
+\r
+ SaveBatView(SaveBatView &&) = delete;\r
+ SaveBatView &operator=(SaveBatView &&) = delete;\r
+ // UIViewGroup *container_ = nullptr;\r
+ UIDigitalClock *labelTime{nullptr};\r
+ UILabel *timelabel = nullptr; // 时间\r
+ UILabel *datelabel = nullptr; // 日期标签\r
+ UILabel *weeklabel = nullptr; // 星期标签\r
+ UILabel *elelabel = nullptr; // 电量标签\r
+ UIBoxProgress *progress{nullptr}; // 电池进度条\r
+ UIImageView *eleicon = nullptr; // 电池框图标\r
+ UIButton *button_exit = nullptr; // 退出按键\r
+ };\r
+} // namespace OHOS\r
+\r
+#endif // SLEEPDETAIL_PRESENTER_H
\ No newline at end of file
--- /dev/null
+#ifndef _SAVEELE_PRESENTER_H\r
+#define _SAVEELE_PRESENTER_H\r
+ \r
+\r
+#include "Presenter.h"\r
+#include "SaveEleView.h"\r
+ \r
+namespace OHOS\r
+{\r
+ class SaveEleView;\r
+ \r
+ class SaveElePresenter : public Presenter<SaveEleView>,\r
+ public UIView::OnClickListener,\r
+ public UIView::OnDragListener\r
+ {\r
+ public:\r
+ SaveElePresenter();\r
+ virtual ~SaveElePresenter();\r
+ \r
+ void OnStart() override; \r
+ void OnPause() override; \r
+ void OnResume() override; \r
+ void OnStop() override; \r
+ \r
+ static SaveElePresenter *GetInstance(); \r
+ \r
+ private:\r
+ //因为继承了OnClickListener,所以有OnClick属性,至于参数,原函数也这样直接继承;\r
+ bool OnClick(UIView &view, const ClickEvent &event) override; \r
+ bool OnDrag(UIView &view, const DragEvent &event) override; \r
+ };\r
+} //namespace OHOS\r
+ \r
+ \r
+#endif //SLEEPDETAIL_PRESENTER_H
\ No newline at end of file
--- /dev/null
+#ifndef _SAVEELE_VIEW_H\r
+#define _SAVEELE_VIEW_H\r
+\r
+#include "BaseView.h"\r
+#include "View.h"\r
+#include <ui_scroll_view.h>\r
+#include "components/ui_view_group.h"\r
+#include "components/ui_label.h"\r
+#include "components/ui_image_view.h"\r
+#include "components/ui_button.h"\r
+\r
+#include "SaveElePresenter.h"\r
+namespace OHOS\r
+{\r
+ class SaveElePresenter;\r
+ class SaveEleView : public View<SaveElePresenter>\r
+ {\r
+\r
+ public:\r
+ SaveEleView();\r
+ virtual ~SaveEleView();\r
+ static SaveEleView *GetInstance(void);\r
+\r
+ void OnStart() override;\r
+ void OnSetUpView() override;\r
+ void OnTearDownView() override;\r
+ void OnStop() override;\r
+ void Init();\r
+ void DeInit();\r
+ UIView *GetView();\r
+\r
+ private:\r
+ UIView::OnDragListener *draglistener{nullptr};\r
+\r
+ // void InitImage(void);\r
+ // void InitLable(void);\r
+\r
+ // 以下控件属性通过new实例化后,add到对应root属性上;\r
+ // SaveEleView(constSaveEleView &) = delete;\r
+ // SaveEleView &operator=(constSaveEleView &) = delete;\r
+ SaveEleView(SaveEleView &&) = delete;\r
+ SaveEleView &operator=(SaveEleView &&) = delete;\r
+\r
+ UIViewGroup *container_ = nullptr;\r
+ UIScrollView *scrollView1_ = nullptr;\r
+ UILabel *label1_ = nullptr;\r
+ UILabel *label3_ = nullptr;\r
+ UILabel *label4_ = nullptr;\r
+ UIButton *button1_ = nullptr;\r
+ UIButton *button2_ = nullptr;\r
+ UIImageView *image2_ = nullptr;\r
+ UIImageView *image1_ = nullptr;\r
+ UILabel *label2_ = nullptr;\r
+ };\r
+} // namespace OHOS\r
+#endif // SaveEle_PRESENTER_H\r
--- /dev/null
+/***\r
+ * @Author: Caisking 3449750381@qq.com\r
+ * @Date: 2024-03-25 11:15:36\r
+ * @LastEditors: Caisking 3449750381@qq.com\r
+ * @LastEditTime: 2024-03-25 14:49:31\r
+ * @FilePath: /sdk/application/wearable/fd230app/nativeui/saveele/src/SaveBatPresenter.cpp\r
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE\r
+ */\r
+/***\r
+ * @Author: Caisking 3449750381@qq.com\r
+ * @Date: 2024-03-25 11:15:36\r
+ * @LastEditors: Caisking 3449750381@qq.com\r
+ * @LastEditTime: 2024-03-25 11:27:21\r
+ * @FilePath: /sdk/application/wearable/fd230app/nativeui/saveele/src/SaveBatPresenter.cpp\r
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE\r
+ */\r
+#include "AppViewIDs.h"\r
+#include "NativeAbility.h"\r
+\r
+#include "saveele/include/SaveBatPresenter.h"\r
+\r
+namespace OHOS\r
+{\r
+\r
+ // 当前Presenter属性实例化的内存指针\r
+ static SaveBatPresenter *g_pSaveBatPresenter = nullptr;\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
+ void SaveBatPresenter::OnStop(void)\r
+ {\r
+\r
+ Presenter<SaveBatView>::OnStop();\r
+ }\r
+\r
+ bool SaveBatPresenter::OnDrag(UIView &view, const DragEvent &event)\r
+ {\r
+ UNUSED(view);\r
+ // 返回 true 以消耗拖动事件\r
+ return true;\r
+ }\r
+\r
+ bool SaveBatPresenter::OnClick(UIView &view, const ClickEvent &event)\r
+ {\r
+ // 执行点击事件的处理逻辑\r
+ // 根据控件id查找是哪个控件触发了点击回调\r
+ // if (strcmp(view.GetViewId(), 控件ID) == 0\r
+ // 返回 true 以消耗点击事件\r
+\r
+ return true;\r
+ }\r
+ bool SaveBatPresenter::OnLongPress(UIView &view, const LongPressEvent &event)\r
+ {\r
+ // 1.长按三秒button1\r
+ // 2.退出 button1NativeAbility::GetInstance().ChangeSlice(VIEW_SAVEELE);\r
+ // 3.返回 true 以消耗点击事件\r
+ if (strcmp(view.GetViewId(), "button_exit") == 0)\r
+ {\r
+ NativeAbility::GetInstance().ChangeSlice(VIEW_MAIN);\r
+ }\r
+ return true;\r
+ }\r
+ void SaveBatPresenter::Notify(void)\r
+ {\r
+ SaveBatView::GetInstance()->RefreshView();\r
+ }\r
+}
\ No newline at end of file
--- /dev/null
+/*\r
+ * Copyright (c) 2023 CompanyNameMagicTag.\r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ */\r
+\r
+#include "saveele/include/SaveBatView.h"\r
+\r
+#include "common/image_cache_manager.h"\r
+#include "UiConfig.h"\r
+#include "ui_resource_image.h"\r
+#include <ui_scroll_view.h>\r
+#include <iostream>\r
+#include <chrono>\r
+#include <thread>\r
+#include "battery_hal.h"\r
+#include "string"\r
+namespace OHOS\r
+{\r
+ static SaveBatView *g_pSaveBatView{nullptr};\r
+ std::string WeekString(int wday)\r
+ {\r
+ std::string weekDays[] = {"星期天", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"};\r
+ return weekDays[wday];\r
+ }\r
+ SaveBatView::SaveBatView()\r
+ {\r
+ g_pSaveBatView = this;\r
+ }\r
+\r
+ SaveBatView::~SaveBatView()\r
+ {\r
+ DeInit();\r
+ g_pSaveBatView = nullptr;\r
+ }\r
+\r
+ SaveBatView *SaveBatView::GetInstance()\r
+ {\r
+\r
+ return g_pSaveBatView;\r
+ }\r
+ void SaveBatView::RefreshView()\r
+ {\r
+ // 获取当前时间\r
+ struct tm pTM;\r
+ time_t seconds;\r
+ time(&seconds);\r
+ localtime_r(&seconds, &pTM);\r
+\r
+ // 解析时间\r
+ int hour = pTM.tm_hour;\r
+ int minute = pTM.tm_min;\r
+\r
+ // 构建日期字符串\r
+ std::string yearStr = std::to_string(pTM.tm_year + 1900);\r
+ std::string monthStr = (pTM.tm_mon + 1 < 10) ? "0" + std::to_string(pTM.tm_mon + 1) : std::to_string(pTM.tm_mon + 1);\r
+ std::string weekStr = WeekString(pTM.tm_wday);\r
+ std::string dayStr = (pTM.tm_mday < 10) ? "0" + std::to_string(pTM.tm_mday) : std::to_string(pTM.tm_mday);\r
+ std::string dateStr = monthStr + "月" + dayStr + "日";\r
+\r
+ // 将时间和日期转换为字符串\r
+ std::string stringtime = (hour < 10 ? "0" : "") + std::to_string(hour) + ":" + (minute < 10 ? "0" : "") + std::to_string(minute);\r
+\r
+ // 获取电量值\r
+ float voltage = 0.0F;\r
+ uint8_t value = 0;\r
+ value = battery_get_voltage(&voltage);\r
+\r
+ // 更新界面组件\r
+ timelabel->SetText(stringtime.c_str());\r
+ datelabel->SetText(dateStr.c_str());\r
+ weeklabel->SetText(weekStr.c_str());\r
+ elelabel->SetText((std::to_string(value) + "%").c_str());\r
+ progress->SetValue(value);\r
+ }\r
+\r
+ void SaveBatView::Init()\r
+ {\r
+ if (container_ == nullptr)\r
+ {\r
+ container_ = new UIViewGroup();\r
+ container_->SetPosition(0, 0, 466, 466);\r
+ container_->SetStyle(STYLE_BACKGROUND_OPA, 0);\r
+ }\r
+ /* --------------------------------- 电池标签初始化 -------------------------------- */\r
+ if (elelabel == nullptr)\r
+ {\r
+ elelabel = new UILabel();\r
+ }\r
+ elelabel->SetPosition(239, 52); // widget's left position and top position\r
+ elelabel->Resize(200, 60); // widget's width and height\r
+ elelabel->SetViewId("label1"); // Set style\r
+ elelabel->SetStyle(STYLE_TEXT_FONT, 27);\r
+ elelabel->SetText("10%");\r
+ elelabel->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);\r
+ elelabel->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
+ elelabel->SetRollSpeed(0);\r
+ elelabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 27);\r
+ container_->Add(elelabel);\r
+ elelabel->SetVisible(true);\r
+ /* -------------------------------- 电池框图标初始化 -------------------------------- */\r
+ if (eleicon == nullptr)\r
+ {\r
+ eleicon = new UIImageView();\r
+ }\r
+ eleicon->SetPosition(179, 52); // widget's left position and top position\r
+ eleicon->Resize(48, 30); // widget's width and height\r
+ eleicon->SetViewId("image7"); // Set style\r
+ // Set additional property\r
+ char *image7imagesPath = "/user/res/Save_Ele/Battery-E.bin";\r
+ eleicon->SetSrc(image7imagesPath);\r
+ // Add to rootView\r
+ container_->Add(eleicon);\r
+ eleicon->SetVisible(true);\r
+ /* -------------------------------- 电池进度条初始化 -------------------------------- */\r
+ // Add BoxProgress to App\r
+ if (progress == nullptr)\r
+ {\r
+ progress = new UIBoxProgress();\r
+ }\r
+ progress->SetPosition(184, 58); // widget's left position and top position\r
+ progress->Resize(31, 19); // widget's width and height\r
+ progress->SetViewId("progress1"); // Set style\r
+ progress->SetValidHeight(19);\r
+ progress->SetValidWidth(31);\r
+ progress->SetValue(20);\r
+ // Set BackgroundStyle\r
+ progress->SetBackgroundStyle(STYLE_BACKGROUND_OPA, 0x00);\r
+ progress->SetBackgroundStyle(STYLE_TEXT_COLOR, 0xff000000);\r
+ // Set ForegroundStyle\r
+ progress->SetForegroundStyle(STYLE_BACKGROUND_COLOR, 0xff2195F6);\r
+ progress->SetForegroundStyle(STYLE_TEXT_COLOR, 0xff000000);\r
+ progress->SetForegroundStyle(STYLE_LINE_COLOR, 0xff45A5FF);\r
+ char *progress1ForeImageSrc = "/user/res/Battery/Battery_Nomoal.bin";\r
+ char *progress1BackImageSrc = nullptr;\r
+ progress->SetImage(progress1ForeImageSrc, progress1BackImageSrc);\r
+ // Add to rootView\r
+ container_->Add(progress);\r
+ /* --------------------------------- 时间标签初始化 -------------------------------- */\r
+ // Add Label to App\r
+ if (timelabel == nullptr)\r
+ {\r
+ timelabel = new UILabel();\r
+ }\r
+ timelabel->SetPosition(118, 148); // widget's left position and top position\r
+ timelabel->Resize(231, 115); // widget's width and height\r
+ timelabel->SetViewId("label2"); // Set style\r
+ timelabel->SetStyle(STYLE_TEXT_FONT, 100);\r
+ timelabel->SetStyle(STYLE_LINE_HEIGHT, 115);\r
+ // Set additional property\r
+ timelabel->SetText("23:59");\r
+ timelabel->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);\r
+ timelabel->SetTextColor(Color::GetColorFromRGBA(0x4f, 0xc3, 0x4c, 0xff));\r
+ timelabel->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
+ timelabel->SetRollSpeed(0);\r
+ timelabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 100);\r
+ // Add to rootView\r
+ container_->Add(timelabel);\r
+ timelabel->SetVisible(true);\r
+ /* --------------------------------- 日期标签初始化 -------------------------------- */\r
+ // Add Label to App\r
+ if (datelabel == nullptr)\r
+ {\r
+ datelabel = new UILabel();\r
+ }\r
+ datelabel->SetPosition(125, 268); // widget's left position and top position\r
+ datelabel->Resize(210, 35); // widget's width and height\r
+ datelabel->SetViewId("label3"); // Set style\r
+ datelabel->SetStyle(STYLE_TEXT_FONT, 30);\r
+ datelabel->SetStyle(STYLE_LETTER_SPACE, 2);\r
+ datelabel->SetStyle(STYLE_LINE_HEIGHT, 35);\r
+ // Set additional property\r
+ datelabel->SetText("11月3号");\r
+ datelabel->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);\r
+ datelabel->SetTextColor(Color::GetColorFromRGBA(0x66, 0x66, 0x66, 0xff));\r
+ datelabel->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
+ datelabel->SetRollSpeed(0);\r
+ datelabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);\r
+ // Add to rootView\r
+ container_->Add(datelabel);\r
+ datelabel->SetVisible(true);\r
+\r
+ /* --------------------------------- 星期标签初始化 -------------------------------- */\r
+ if (weeklabel == nullptr)\r
+ {\r
+ weeklabel = new UILabel();\r
+ }\r
+ weeklabel->SetPosition(280, 268); // widget's left position and top position\r
+ weeklabel->Resize(280, 35); // widget's width and height\r
+ weeklabel->SetViewId("label3"); // Set style\r
+ weeklabel->SetStyle(STYLE_TEXT_FONT, 30);\r
+ weeklabel->SetStyle(STYLE_LETTER_SPACE, 2);\r
+ weeklabel->SetStyle(STYLE_LINE_HEIGHT, 35);\r
+\r
+ // Set additional property\r
+ weeklabel->SetText("星期五");\r
+ weeklabel->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);\r
+ weeklabel->SetTextColor(Color::GetColorFromRGBA(0x66, 0x66, 0x66, 0xff));\r
+ weeklabel->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
+ weeklabel->SetRollSpeed(0);\r
+ weeklabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);\r
+ // Add to rootView\r
+ container_->Add(weeklabel);\r
+ weeklabel->SetVisible(true);\r
+\r
+ /* --------------------------------- 退出按键初始化 -------------------------------- */\r
+ if (button_exit == nullptr)\r
+ {\r
+ button_exit = new UIButton();\r
+ }\r
+ button_exit->SetPosition(204, 350); // widget's left position and top position\r
+ button_exit->Resize(60, 60); // widget's width and height\r
+ button_exit->SetViewId("button_exit"); // Set style\r
+ button_exit->SetStyle(STYLE_BACKGROUND_COLOR, 0xff000000);\r
+ button_exit->SetStyle(STYLE_BACKGROUND_OPA, 0x00);\r
+\r
+ // Set additional property\r
+ char *button1defaultImgSrc = "/user/res/Save_Ele/finger.bin";\r
+ char *button1triggeredImgSrc = nullptr;\r
+ button_exit->SetImageSrc(button1defaultImgSrc, button1triggeredImgSrc);\r
+ button_exit->SetStyleForState(STYLE_BACKGROUND_COLOR, 0xff000000, UIButton::PRESSED);\r
+\r
+ // Add the CallBack about events\r
+ UIView::OnLongPressListener *button1LongPress = static_cast<UIView::OnLongPressListener *>(SaveBatPresenter::GetInstance());\r
+ button_exit->SetOnLongPressListener(button1LongPress);\r
+ // Add to rootView\r
+ container_->Add(button_exit);\r
+ button_exit->SetVisible(true);\r
+ }\r
+\r
+ void SaveBatView::DeInit()\r
+ {\r
+ if (container_ != nullptr)\r
+ {\r
+ container_->RemoveAll();\r
+ delete container_;\r
+ container_ = nullptr;\r
+ }\r
+ if (elelabel != nullptr)\r
+ {\r
+ delete elelabel;\r
+ elelabel = nullptr;\r
+ }\r
+ if (eleicon != nullptr)\r
+ {\r
+ delete eleicon;\r
+ eleicon = nullptr;\r
+ }\r
+ if (weeklabel != nullptr)\r
+ {\r
+ delete weeklabel;\r
+ weeklabel = nullptr;\r
+ }\r
+ if (timelabel != nullptr)\r
+ {\r
+ delete timelabel;\r
+ timelabel = nullptr;\r
+ }\r
+ if (datelabel != nullptr)\r
+ {\r
+ delete datelabel;\r
+ datelabel = nullptr;\r
+ }\r
+ if (button_exit != nullptr)\r
+ {\r
+ delete button_exit;\r
+ button_exit = nullptr;\r
+ }\r
+ }\r
+\r
+ UIView *SaveBatView::GetView()\r
+ {\r
+ Init();\r
+ return container_;\r
+ }\r
+ void SaveBatView::OnStart()\r
+ {\r
+ container_ = new UIViewGroup();\r
+ if (container_ == nullptr)\r
+ {\r
+ return;\r
+ }\r
+ container_->SetPosition(0, 0);\r
+ container_->SetWidth(Screen::GetInstance().GetWidth());\r
+ container_->SetHeight(Screen::GetInstance().GetHeight());\r
+ container_->SetTouchable(true);\r
+ container_->SetDraggable(true);\r
+\r
+ GetView();\r
+ RootView::GetInstance()->Add(container_);\r
+ }\r
+\r
+ void SaveBatView::OnSetUpView()\r
+ {\r
+\r
+ View<SaveBatPresenter>::OnSetUpView();\r
+ Draw();\r
+ }\r
+\r
+ void SaveBatView::OnTearDownView()\r
+ {\r
+\r
+ View<SaveBatPresenter>::OnTearDownView();\r
+ return;\r
+ }\r
+\r
+ void SaveBatView::OnStop()\r
+ {\r
+ View<SaveBatPresenter>::OnStop();\r
+ RootView::GetInstance()->RemoveAll();\r
+\r
+ return;\r
+ }\r
+}
\ No newline at end of file
--- /dev/null
+#include "AppViewIDs.h"\r
+#include "NativeAbility.h"\r
+\r
+#include "saveele/include/SaveElePresenter.h"\r
+\r
+namespace OHOS\r
+{\r
+\r
+ // 当前Presenter属性实例化的内存指针\r
+ static SaveElePresenter *g_pSaveElePresenter = nullptr;\r
+\r
+ SaveElePresenter::SaveElePresenter()\r
+ {\r
+\r
+ g_pSaveElePresenter = this;\r
+ }\r
+\r
+ SaveElePresenter::~SaveElePresenter()\r
+ {\r
+\r
+ g_pSaveElePresenter = nullptr;\r
+ }\r
+\r
+ SaveElePresenter *SaveElePresenter::GetInstance()\r
+ {\r
+\r
+ return g_pSaveElePresenter;\r
+ }\r
+\r
+ void SaveElePresenter::OnStart()\r
+ {\r
+\r
+ Presenter<SaveEleView>::OnStart();\r
+ }\r
+\r
+ void SaveElePresenter::OnPause(void)\r
+ {\r
+\r
+ Presenter<SaveEleView>::OnPause();\r
+ }\r
+\r
+ void SaveElePresenter::OnResume(void)\r
+ {\r
+\r
+ Presenter<SaveEleView>::OnResume();\r
+ }\r
+\r
+ void SaveElePresenter::OnStop(void)\r
+ {\r
+\r
+ Presenter<SaveEleView>::OnStop();\r
+ }\r
+\r
+ bool SaveElePresenter::OnDrag(UIView &view, const DragEvent &event)\r
+ {\r
+\r
+ // if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT)\r
+ // {\r
+ // NativeAbility::GetInstance().ChangeSlice(VIEW_APPLIST);\r
+ // }\r
+ UNUSED(view);\r
+ return true;\r
+ }\r
+\r
+ bool SaveElePresenter::OnClick(UIView &view, const ClickEvent &event)\r
+ {\r
+ // 根据控件id查找是哪个控件触发了点击回调\r
+ // if (strcmp(view.GetViewId(), 控件ID) == 0)\r
+ if (strcmp(view.GetViewId(), "button1") == 0)\r
+ {\r
+ // NativeAbility::GetInstance().ChangeSlice(VIEW_MAIN_SAMPLE);\r
+ uint16_t preSlice = NativeAbility::GetInstance().GetPreSliceId();\r
+ NativeAbility::GetInstance().ChangeSlice(preSlice);\r
+ }\r
+ if (strcmp(view.GetViewId(), "button2") == 0)\r
+ {\r
+ NativeAbility::GetInstance().ChangeSlice(VIEW_SAVEBAT);\r
+ }\r
+ return true;\r
+ }\r
+}
\ No newline at end of file
--- /dev/null
+\r
+\r
+#include "saveele/include/SaveEleView.h"\r
+\r
+#include "common/image_cache_manager.h"\r
+#include "UiConfig.h"\r
+#include "ui_resource_image.h"\r
+#include <ui_scroll_view.h>\r
+#include "components/ui_button.h"\r
+namespace OHOS\r
+{\r
+\r
+ static SaveEleView *g_pSaveEleView{nullptr};\r
+\r
+ SaveEleView::SaveEleView()\r
+ {\r
+\r
+ g_pSaveEleView = this;\r
+ }\r
+\r
+ SaveEleView::~SaveEleView()\r
+ {\r
+ DeInit();\r
+ g_pSaveEleView = nullptr;\r
+ }\r
+\r
+ SaveEleView *SaveEleView::GetInstance()\r
+ {\r
+\r
+ return g_pSaveEleView;\r
+ }\r
+\r
+ void SaveEleView::Init()\r
+ {\r
+ if (container_ == nullptr)\r
+ {\r
+ container_ = new UIViewGroup();\r
+ container_->SetPosition(0, 0, 466, 466);\r
+ container_->SetStyle(STYLE_BACKGROUND_OPA, 0);\r
+ }\r
+\r
+ // Add ScrollView to App\r
+ if (scrollView1_ == nullptr)\r
+ {\r
+ scrollView1_ = new UIScrollView();\r
+ }\r
+ scrollView1_->SetPosition(0, 0); // widget's left position and top position\r
+ scrollView1_->Resize(466, 466); // widget's width and height\r
+ scrollView1_->SetViewId("scrollView1"); // Set style\r
+ scrollView1_->SetStyle(STYLE_BACKGROUND_OPA, 0xff);\r
+\r
+ // Set additional property\r
+ scrollView1_->SetDirection(1);\r
+\r
+ // Add the CallBack about events\r
+ UIView::OnDragListener *scrollView1Drag = static_cast<UIView::OnDragListener *>(SaveElePresenter::GetInstance());\r
+ scrollView1_->SetOnDragListener(scrollView1Drag);\r
+ // Add to rootView\r
+ container_->Add(scrollView1_);\r
+ scrollView1_->SetVisible(true);\r
+\r
+ // Add Label to App\r
+ if (label1_ == nullptr)\r
+ {\r
+ label1_ = new UILabel();\r
+ }\r
+ label1_->SetPosition(173, 52); // widget's left position and top position\r
+ label1_->Resize(120, 35); // widget's width and height\r
+ label1_->SetViewId("label1"); // Set style\r
+ label1_->SetStyle(STYLE_TEXT_FONT, 30);\r
+ label1_->SetStyle(STYLE_LINE_SPACE, 0);\r
+ label1_->SetStyle(STYLE_LETTER_SPACE, 1);\r
+ label1_->SetStyle(STYLE_LINE_HEIGHT, 35);\r
+\r
+ // Set additional property\r
+ label1_->SetText("省电模式");\r
+ label1_->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);\r
+ label1_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
+ label1_->SetRollSpeed(0);\r
+ label1_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);\r
+\r
+ // Add to scrollView1\r
+ scrollView1_->Add(label1_);\r
+ label1_->SetVisible(true);\r
+\r
+ // Add Label to App\r
+ if (label3_ == nullptr)\r
+ {\r
+ label3_ = new UILabel();\r
+ }\r
+ label3_->SetPosition(33, 440); // widget's left position and top position\r
+ label3_->Resize(200, 60); // widget's width and height\r
+ label3_->SetViewId("label3"); // Set style\r
+ label3_->SetStyle(STYLE_TEXT_FONT, 30);\r
+ label3_->SetStyle(STYLE_LINE_HEIGHT, 35);\r
+\r
+ // Set additional property\r
+ label3_->SetText("长按屏幕3秒以上或充电可退\n出省电模式");\r
+ label3_->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);\r
+ label3_->SetTextColor(Color::GetColorFromRGBA(0xff, 0xc3, 0x00, 0xff));\r
+ label3_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
+ label3_->SetRollSpeed(0);\r
+ label3_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);\r
+\r
+ // Add to scrollView1\r
+ scrollView1_->Add(label3_);\r
+ label3_->SetVisible(true);\r
+\r
+ // Add Label to App\r
+ if (label4_ == nullptr)\r
+ {\r
+ label4_ = new UILabel();\r
+ }\r
+ label4_->SetPosition(173, 547); // widget's left position and top position\r
+ label4_->Resize(400, 395); // widget's width and height\r
+ label4_->SetViewId("label4"); // Set style\r
+ label4_->SetStyle(STYLE_TEXT_FONT, 30);\r
+ label4_->SetStyle(STYLE_LINE_HEIGHT, 35);\r
+\r
+ // Set additional property\r
+ label4_->SetText("是否开启");\r
+ label4_->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);\r
+ label4_->SetTextColor(Color::GetColorFromRGBA(0x99, 0x99, 0x99, 0xff));\r
+ label4_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
+ label4_->SetRollSpeed(0);\r
+ label4_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);\r
+\r
+ // Add to scrollView1\r
+ scrollView1_->Add(label4_);\r
+ label4_->SetVisible(true);\r
+\r
+ // Add Button to App\r
+ if (button1_ == nullptr)\r
+ {\r
+ button1_ = new UIButton();\r
+ }\r
+ button1_->SetPosition(110, 636); // widget's left position and top position\r
+ button1_->Resize(100, 100); // widget's width and height\r
+ button1_->SetViewId("button1"); // Set style\r
+ button1_->SetStyle(STYLE_BACKGROUND_COLOR, 0xff000000);\r
+ button1_->SetStyle(STYLE_BACKGROUND_OPA, 0x00);\r
+\r
+ char *button1defaultImgSrc = "/user/res/Save_Ele/Save_Error.bin";\r
+ char *button1triggeredImgSrc = nullptr;\r
+ button1_->SetImageSrc(button1defaultImgSrc, button1triggeredImgSrc);\r
+ button1_->SetStyleForState(STYLE_BACKGROUND_COLOR, 0xffff1919, UIButton::PRESSED);\r
+ button1_->SetStyleForState(STYLE_BORDER_COLOR, 0xff0b1928, UIButton::PRESSED);\r
+\r
+ // Add the CallBack about events\r
+ UIView::OnClickListener *button1Click = static_cast<UIView::OnClickListener *>(SaveElePresenter::GetInstance());\r
+ button1_->SetOnClickListener(button1Click);\r
+ // Add to scrollView1\r
+ scrollView1_->Add(button1_);\r
+ button1_->SetVisible(true);\r
+\r
+ // Add Button to App\r
+ if (button2_ == nullptr)\r
+ {\r
+ button2_ = new UIButton();\r
+ }\r
+ button2_->SetPosition(255, 636); // widget's left position and top position\r
+ button2_->Resize(100, 100); // widget's width and height\r
+ button2_->SetViewId("button2"); // Set style\r
+ button2_->SetStyle(STYLE_BACKGROUND_COLOR, 0xff000000);\r
+ button2_->SetStyle(STYLE_BACKGROUND_OPA, 0x00);\r
+\r
+ char *button2defaultImgSrc = "/user/res/Save_Ele/Save_Right.bin";\r
+ char *button2triggeredImgSrc = nullptr;\r
+ button2_->SetImageSrc(button2defaultImgSrc, button2triggeredImgSrc);\r
+ button2_->SetStyleForState(STYLE_BACKGROUND_COLOR, 0xff19ff5e, UIButton::PRESSED);\r
+ button2_->SetStyleForState(STYLE_BORDER_COLOR, 0xff0b1928, UIButton::PRESSED);\r
+\r
+ // Add the CallBack about events\r
+ UIView::OnClickListener *button2Click = static_cast<UIView::OnClickListener *>(SaveElePresenter::GetInstance());\r
+ button2_->SetOnClickListener(button2Click);\r
+ // Add to scrollView1\r
+ scrollView1_->Add(button2_);\r
+ button2_->SetVisible(true);\r
+\r
+ // Add ImageView to App\r
+ if (image2_ == nullptr)\r
+ {\r
+ image2_ = new UIImageView();\r
+ }\r
+ image2_->SetPosition(183, 775); // widget's left position and top position\r
+ image2_->Resize(100, 100); // widget's width and height\r
+ image2_->SetViewId("image2"); // Set style\r
+\r
+ // Set additional property\r
+\r
+ // Add to scrollView1\r
+ scrollView1_->Add(image2_);\r
+ image2_->SetVisible(true);\r
+\r
+ // Add ImageView to App\r
+ if (image1_ == nullptr)\r
+ {\r
+ image1_ = new UIImageView();\r
+ }\r
+ image1_->SetPosition(188, 121); // widget's left position and top position\r
+ image1_->Resize(90, 90); // widget's width and height\r
+ image1_->SetViewId("image1"); // Set style\r
+\r
+ // Set additional property\r
+ char *image1imagesPath = "/user/res/Save_Ele/SaveEle.bin";\r
+ image1_->SetSrc(image1imagesPath);\r
+\r
+ // Add to scrollView1\r
+ scrollView1_->Add(image1_);\r
+ image1_->SetVisible(true);\r
+\r
+ // Add Label to App\r
+ if (label2_ == nullptr)\r
+ {\r
+ label2_ = new UILabel();\r
+ }\r
+ label2_->SetPosition(33, 217); // widget's left position and top position\r
+ label2_->Resize(400, 395); // widget's width and height\r
+ label2_->SetViewId("label2"); // Set style\r
+ label2_->SetStyle(STYLE_TEXT_FONT, 30);\r
+ label2_->SetStyle(STYLE_LINE_HEIGHT, 35);\r
+\r
+ // Set additional property\r
+ label2_->SetText("开启省电模式会关闭非必要的\n蓝牙连接(通话/耳机蓝牙),以\n及传感器监测(心率监测及血\n氧监测等会停止)等功能\n 仅保留时间日期可查看");\r
+ label2_->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);\r
+ label2_->SetTextColor(Color::GetColorFromRGBA(0x99, 0x99, 0x99, 0xff));\r
+ label2_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
+ label2_->SetRollSpeed(0);\r
+ label2_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);\r
+\r
+ // Add to scrollView1\r
+ scrollView1_->Add(label2_);\r
+ label2_->SetVisible(true);\r
+ }\r
+\r
+ void SaveEleView::DeInit()\r
+ {\r
+ if (container_ != nullptr)\r
+ {\r
+ container_->RemoveAll();\r
+ delete container_;\r
+ container_ = nullptr;\r
+ }\r
+ if (scrollView1_ != nullptr)\r
+ {\r
+ delete scrollView1_;\r
+ scrollView1_ = nullptr;\r
+ }\r
+ if (label1_ != nullptr)\r
+ {\r
+ delete label1_;\r
+ label1_ = nullptr;\r
+ }\r
+ if (label3_ != nullptr)\r
+ {\r
+ delete label3_;\r
+ label3_ = nullptr;\r
+ }\r
+ if (label4_ != nullptr)\r
+ {\r
+ delete label4_;\r
+ label4_ = nullptr;\r
+ }\r
+ if (button1_ != nullptr)\r
+ {\r
+ delete button1_;\r
+ button1_ = nullptr;\r
+ }\r
+ if (button2_ != nullptr)\r
+ {\r
+ delete button2_;\r
+ button2_ = nullptr;\r
+ }\r
+ if (image2_ != nullptr)\r
+ {\r
+ delete image2_;\r
+ image2_ = nullptr;\r
+ }\r
+ if (image1_ != nullptr)\r
+ {\r
+ delete image1_;\r
+ image1_ = nullptr;\r
+ }\r
+ if (label2_ != nullptr)\r
+ {\r
+ delete label2_;\r
+ label2_ = nullptr;\r
+ }\r
+ }\r
+\r
+ UIView *SaveEleView::GetView()\r
+ {\r
+ Init();\r
+ return container_;\r
+ }\r
+ void SaveEleView::OnStart()\r
+ {\r
+ container_ = new UIScrollView();\r
+ if (container_ == nullptr)\r
+ {\r
+ return;\r
+ }\r
+ container_->SetPosition(0, 0);\r
+ container_->SetWidth(Screen::GetInstance().GetWidth());\r
+ container_->SetHeight(Screen::GetInstance().GetHeight() * 2);\r
+\r
+ // 创建 draglistener 实例并设置为拖动监听器\r
+ UIView::OnDragListener *draglistener = static_cast<UIView::OnDragListener *>(SaveElePresenter::GetInstance());\r
+ if (draglistener == nullptr)\r
+ {\r
+ return;\r
+ }\r
+ container_->SetOnDragListener(draglistener);\r
+\r
+ container_->SetTouchable(true);\r
+ container_->SetDraggable(true);\r
+\r
+ GetView();\r
+ RootView::GetInstance()->Add(container_);\r
+ }\r
+\r
+ void SaveEleView::OnSetUpView()\r
+ {\r
+\r
+ View<SaveElePresenter>::OnSetUpView();\r
+ Draw();\r
+ }\r
+\r
+ void SaveEleView::OnTearDownView()\r
+ {\r
+\r
+ View<SaveElePresenter>::OnTearDownView();\r
+ return;\r
+ }\r
+\r
+ void SaveEleView::OnStop()\r
+ {\r
+ View<SaveElePresenter>::OnStop();\r
+ RootView::GetInstance()->RemoveAll();\r
+ return;\r
+ }\r
+}\r
#include "ui_screennotify.h"
#ifdef __cplusplus
-extern "C" {
+extern "C"
+{
#endif
-static uint32_t g_back_to_home_interval = 5;
+ static uint32_t g_back_to_home_interval = 5;
-// 需要屏蔽掉的slice,ignore_slice_ids数组中的slice灭屏超时后不会调转到默认界面
-uint16_t ignore_slice_ids[] = {
- VIEW_INVALID,
- VIEW_SETTING,
- VIEW_UISAMPLE,
- VIEW_BLOODOXY,//血氧功能
+ // 需要屏蔽掉的slice,ignore_slice_ids数组中的slice灭屏超时后不会调转到默认界面
+ uint16_t ignore_slice_ids[] = {
+ VIEW_INVALID,
+ VIEW_SETTING,
+ VIEW_UISAMPLE,
+ VIEW_BLOODOXY, // 血氧功能
+ VIEW_HEART, // 心率检测
+ VIEW_SAVEBAT, // 省电模式
#ifdef SUPPORT_ALIPAY_SEC
- VIEW_MAIN_ALIPAY,
+ VIEW_MAIN_ALIPAY,
#endif
-};
+ };
-static std::list<ScreenStatusNotifyCallback> g_callback;
+ static std::list<ScreenStatusNotifyCallback> g_callback;
-static void ChangeToHomeView(void)
-{
- screen_context_t *sc = power_display_get_screen_context();
- uint16_t current_slice_id = OHOS::NativeAbility::GetInstance().GetCurSliceId();
- for (uint16_t i = 0; i < sizeof(ignore_slice_ids) / sizeof(uint16_t); i++) {
- if (ignore_slice_ids[i] == current_slice_id) {
- return;
+ static void ChangeToHomeView(void)
+ {
+ screen_context_t *sc = power_display_get_screen_context();
+ uint16_t current_slice_id = OHOS::NativeAbility::GetInstance().GetCurSliceId();
+ for (uint16_t i = 0; i < sizeof(ignore_slice_ids) / sizeof(uint16_t); i++)
+ {
+ if (ignore_slice_ids[i] == current_slice_id)
+ {
+ return;
+ }
}
- }
- if (sc->screen_off_time_interval > g_back_to_home_interval) {
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "screen off time = %u",
- sc->screen_off_time_interval);
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "GetNativeAbilityState = %u",
- OHOS::NativeAbility::GetInstance().GetNativeAbilityState());
- if (OHOS::NativeAbility::GetInstance().GetNativeAbilityState() == STATE_ACTIVE) {
- if (current_slice_id != VIEW_MAIN) { // 主表盘
- OHOS::NativeAbility::GetInstance().ChangeSlice(VIEW_MAIN);
- } else {
- // if (!OHOS::MainViewSample::GetInstance()->IsMainClockPage()) {
+ if (sc->screen_off_time_interval > g_back_to_home_interval)
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "screen off time = %u",
+ sc->screen_off_time_interval);
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "GetNativeAbilityState = %u",
+ OHOS::NativeAbility::GetInstance().GetNativeAbilityState());
+ if (OHOS::NativeAbility::GetInstance().GetNativeAbilityState() == STATE_ACTIVE)
+ {
+ if (current_slice_id != VIEW_MAIN)
+ { // 主表盘
+ OHOS::NativeAbility::GetInstance().ChangeSlice(VIEW_MAIN);
+ }
+ else
+ {
+ // if (!OHOS::MainViewSample::GetInstance()->IsMainClockPage()) {
// 当前页面为主表盘的其他页面时,切换回主表盘页面
// OHOS::MainViewSample::GetInstance()->SwitchToClockPage();
- // }
+ // }
+ }
}
}
}
-}
-void notify_screen_on_event(void)
-{
- for (auto callback : g_callback) {
- callback(SCREEN_STATUS_ON);
+ void notify_screen_on_event(void)
+ {
+ for (auto callback : g_callback)
+ {
+ callback(SCREEN_STATUS_ON);
+ }
+ GraphicService::GetInstance()->PostGraphicEvent(ChangeToHomeView);
}
- GraphicService::GetInstance()->PostGraphicEvent(ChangeToHomeView);
-}
-void notify_screen_off_event(void)
-{
- for (auto callback : g_callback) {
- callback(SCREEN_STATUS_OFF);
+ void notify_screen_off_event(void)
+ {
+ for (auto callback : g_callback)
+ {
+ callback(SCREEN_STATUS_OFF);
+ }
}
-}
-void set_back_to_home_interval(uint32_t time_sec)
-{
- g_back_to_home_interval = time_sec;
-}
+ void set_back_to_home_interval(uint32_t time_sec)
+ {
+ g_back_to_home_interval = time_sec;
+ }
-uint32_t get_back_to_home_interval(void)
-{
- return g_back_to_home_interval;
-}
+ uint32_t get_back_to_home_interval(void)
+ {
+ return g_back_to_home_interval;
+ }
-void registerNotifyScreenStatus(ScreenStatusNotifyCallback callback)
-{
- if (callback != nullptr) {
- g_callback.push_back(callback);
+ void registerNotifyScreenStatus(ScreenStatusNotifyCallback callback)
+ {
+ if (callback != nullptr)
+ {
+ g_callback.push_back(callback);
+ }
}
-}
-void deregisterNotifyScreenStatus(ScreenStatusNotifyCallback callback)
-{
- if (callback != nullptr) {
- g_callback.remove(callback);
+ void deregisterNotifyScreenStatus(ScreenStatusNotifyCallback callback)
+ {
+ if (callback != nullptr)
+ {
+ g_callback.remove(callback);
+ }
}
-}
#ifdef __cplusplus
}
* @Author: Caisking 3449750381@qq.com
* @Date: 2024-03-19 18:18:30
* @LastEditors: Caisking 3449750381@qq.com
- * @LastEditTime: 2024-03-22 15:24:40
+ * @LastEditTime: 2024-03-25 10:26:23
* @FilePath: /sdk/application/wearable/fd230app/nativeui/traing/include/TraingPresenter.h
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
*/
+/*** \r
+ * @Author: Caisking 3449750381@qq.com\r
+ * @Date: 2024-03-19 17:37:19\r
+ * @LastEditors: Caisking 3449750381@qq.com\r
+ * @LastEditTime: 2024-03-25 10:15:08\r
+ * @FilePath: /sdk/application/wearable/fd230app/nativeui/traing/src/TraingDataPresenter.cpp\r
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE\r
+ */\r
#include "AppViewIDs.h"\r
#include "NativeAbility.h"\r
\r
bool TraingDataPresenter::OnDragEnd(UIView &view, const DragEvent &event)\r
{\r
\r
- if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT &&\r
- (event.GetDeltaX() > 20) && (event.GetDeltaX() > (2 * MATH_ABS(event.GetDeltaY()))))\r
+ if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT)\r
{\r
NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGCONTROL);\r
}\r
InitImageView(image2_, 208, 297, 20, 20, "image2", ARROWS_IMAGE);\r
InitImageView(image3_, 98, 314, 270, 20, "image3", SPORT_STRENGTH_IMAGE);\r
InitImageView(image4_, 225, 396, 16, 10, "image4", INCO_UP_IMAGE);\r
- InitImageView(image5_, 193, 421, 80, 20, "image5", CONTROL_POINT_IMAGE);\r
+ InitImageView(image5_, 193, 421, 80, 20, "image5", DATA_POINT_IMAGE);\r
container_->Add(image1_);\r
container_->Add(image2_);\r
container_->Add(image3_);\r
+/***
+ * @Author: Caisking 3449750381@qq.com
+ * @Date: 2024-03-19 17:37:19
+ * @LastEditors: Caisking 3449750381@qq.com
+ * @LastEditTime: 2024-03-25 09:46:15
+ * @FilePath: /sdk/application/wearable/fd230app/nativeui/traing/src/TraingGPSnotePresenter.cpp
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
+ */
#include "AppViewIDs.h"
#include "NativeAbility.h"
bool TraingGPSnotePresenter::OnDragEnd(UIView &view, const DragEvent &event)
{
- if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT &&
- (event.GetDeltaX() > 40) && (event.GetDeltaX() > (2 * MATH_ABS(event.GetDeltaY()))))
+ if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT)
{
uint16_t preSlice = NativeAbility::GetInstance().GetPreSliceId();
NativeAbility::GetInstance().ChangeSlice(preSlice);
bool TraingGPSsetPresenter::OnDragEnd(UIView &view, const DragEvent &event)
{
- if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT &&
- (event.GetDeltaX() > 40) && (event.GetDeltaX() > (2 * MATH_ABS(event.GetDeltaY()))))
+ if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT)
{
uint16_t preSlice = NativeAbility::GetInstance().GetPreSliceId();
NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGGPS);
-/*** \r
+/***\r
* @Author: Caisking 3449750381@qq.com\r
* @Date: 2024-03-19 17:37:19\r
* @LastEditors: Caisking 3449750381@qq.com\r
bool TraingLimitPresenter::OnDragEnd(UIView &view, const DragEvent &event)\r
{\r
\r
- if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT &&\r
- (event.GetDeltaX() > 30) && (event.GetDeltaX() > (2 * MATH_ABS(event.GetDeltaY()))))\r
+ if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT)\r
{\r
NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGMORE);\r
}\r
// MainViewSample::GetInstance()->SetPage(CardId::TRAINING);\r
return true;\r
}\r
- NativeAbility::GetInstance().ChangeSlice(preSlice);\r
+ else\r
+ {\r
+ NativeAbility::GetInstance().ChangeSlice(VIEW_TRAINING);\r
+ }\r
}\r
UNUSED(view);\r
return true;\r
+/***\r
+ * @Author: Caisking 3449750381@qq.com\r
+ * @Date: 2024-03-19 17:37:19\r
+ * @LastEditors: Caisking 3449750381@qq.com\r
+ * @LastEditTime: 2024-03-25 09:56:37\r
+ * @FilePath: /sdk/application/wearable/fd230app/nativeui/traing/src/TraingNomalPresenter.cpp\r
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE\r
+ */\r
#include "AppViewIDs.h"\r
#include "NativeAbility.h"\r
\r
}\r
bool TraingNomalPresenter::OnDragEnd(UIView &view, const DragEvent &event)\r
{\r
-\r
- uint16_t preSlice = NativeAbility::GetInstance().GetPreSliceId();\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Id:[%d]", preSlice);\r
- if (preSlice == VIEW_MAIN)\r
+ if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT)\r
{\r
- NativeAbility::GetInstance().ChangeSlice(VIEW_MAIN);\r
- // MainViewSample::GetInstance()->SetPage(CardId::TRAINING);\r
- return true;\r
+ uint16_t preSlice = NativeAbility::GetInstance().GetPreSliceId();\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Id:[%d]", preSlice);\r
+ if (preSlice == VIEW_MAIN)\r
+ {\r
+ NativeAbility::GetInstance().ChangeSlice(VIEW_MAIN);\r
+ // MainViewSample::GetInstance()->SetPage(CardId::TRAINING);\r
+ return true;\r
+ }\r
+ else\r
+ {\r
+ NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGLIMIT);\r
+ }\r
}\r
- NativeAbility::GetInstance().ChangeSlice(preSlice);\r
UNUSED(view);\r
return true;\r
}\r
+/***
+ * @Author: Caisking 3449750381@qq.com
+ * @Date: 2024-03-19 17:37:20
+ * @LastEditors: Caisking 3449750381@qq.com
+ * @LastEditTime: 2024-03-25 09:43:53
+ * @FilePath: /sdk/application/wearable/fd230app/nativeui/traing/src/TraingStrongPresenter.cpp
+ */
#include "AppViewIDs.h"
#include "NativeAbility.h"
bool TraingStrongPresenter::OnDragEnd(UIView &view, const DragEvent &event)
{
- if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT &&
- (event.GetDeltaX() > 20) && (event.GetDeltaX() > (2 * MATH_ABS(event.GetDeltaY()))))
+ if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT)
{
NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGDATA);
}