*/
bool InitImageView(UIImageView *&imageView, int left, int top, int width, int height, const char *viewId, const char *imagePath)
{
+ if (imagePath == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "imagePath is fail");
+ return false;
+ }
// 创建新图片(如果当前图片为空)
if (imageView == nullptr)
{
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "InitImageView is not nullptr");
return false; // 内存分配失败,返回false
}
- if (imagePath == nullptr)
- {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "imagePath %s fail", imagePath);
- return false;
- }
+
imageView->SetPosition(left, top);
imageView->SetAutoEnable(true);
imageView->SetViewId(viewId);
#include "bleEvent.h"
#include <unistd.h>
-#define LEAK_CHECK 0
-#if LEAK_CHECK
#include "gfx_utils/mem_check.h"
-#endif
namespace OHOS
{
AiVoicePresenter::AiVoicePresenter()
{
-#if LEAK_CHECK
- MemCheck::GetInstance().EnableLeakCheck(true);
+#ifdef MEM_CHECK
+ MemCheck::GetInstance()->EnableLeakCheck(true);
#endif
model = &AiVoiceModel::GetInstance();
g_pAiVoicePresenter = this;
AiVoicePresenter::~AiVoicePresenter()
{
-#if LEAK_CHECK
- MemCheck::GetInstance().EnableLeakCheck(false);
+#ifdef MEM_CHECK
+ MemCheck::GetInstance()->EnableLeakCheck(false);
#endif
g_pAiVoicePresenter = nullptr;
}
#include "ChangeSliceListener.h"\r
#include "PhoneService.h"\r
#include "PlayersModel.h"\r
-\r
+#include "gfx_utils/mem_check.h"\r
namespace OHOS {\r
static AlarmPopUpPresenter *g_pAlarmPresenter = nullptr;\r
\r
{\r
WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AlarmPopUpPresenter new");\r
g_pAlarmPresenter = this;\r
+#ifdef MEM_CHECK\r
+ MemCheck::GetInstance()->EnableLeakCheck(true);\r
+#endif\r
}\r
\r
AlarmPopUpPresenter::~AlarmPopUpPresenter()\r
{\r
g_pAlarmPresenter = nullptr;\r
WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AlarmPopUpPresenter::~AlarmPopUpPresenter");\r
+#ifdef MEM_CHECK\r
+ MemCheck::GetInstance()->EnableLeakCheck(false);\r
+#endif\r
}\r
\r
void AlarmPopUpPresenter::OnStart()\r
#include "AlipayTransListView.h"\r
#include "custom_utils.h"\r
#include "common/key_code.h"\r
+#include "gfx_utils/mem_check.h"\r
namespace OHOS {\r
static AlipayPresenter *g_alipayPresenter = nullptr;\r
\r
WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AlipayPresenter new");\r
alipayMode_ = AlipayModel::GetInstance();\r
g_alipayPresenter = this;\r
+#ifdef MEM_CHECK\r
+ MemCheck::GetInstance()->EnableLeakCheck(true);\r
+#endif\r
}\r
\r
AlipayPresenter::~AlipayPresenter()\r
{\r
g_alipayPresenter = nullptr;\r
WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AlipayPresenter::~AlipayPresenter");\r
+#ifdef MEM_CHECK\r
+ MemCheck::GetInstance()->EnableLeakCheck(false);\r
+#endif\r
}\r
\r
AlipayPresenter *AlipayPresenter::GetInstance()\r
#include "battery_hal.h"
#include "heart_blood/health_service/health_service.h"
+#include "gfx_utils/mem_check.h"
#define BLOODKEYABLE 1
namespace OHOS
/* -------------------------------------------------------------------------- */
BloodResultPresenter::BloodResultPresenter()
{
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BloodResultPresenter::new BloodResultPresenter");
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodResultPresenter::new BloodResultPresenter");
g_pBloodResultPresenter = this;
+#ifdef MEM_CHECK
+ MemCheck::GetInstance()->EnableLeakCheck(true);
+#endif
}
BloodResultPresenter::~BloodResultPresenter()
{
g_pBloodResultPresenter = nullptr;
+#ifdef MEM_CHECK
+ MemCheck::GetInstance()->EnableLeakCheck(false);
+#endif
}
BloodResultPresenter *BloodResultPresenter::GetInstance()
{
#include "calculator/include/CalculatorPresenter.h"
#include "calculator/include/CalculatorView.h"
-
+#include "gfx_utils/mem_check.h"
namespace OHOS {
CalculatorPresenter::CalculatorPresenter()
{
g_pMainView = this;
+#ifdef MEM_CHECK
+ MemCheck::GetInstance()->EnableLeakCheck(true);
+#endif
}
CalculatorPresenter::~CalculatorPresenter()
{
g_pMainView = nullptr;
+#ifdef MEM_CHECK
+ MemCheck::GetInstance()->EnableLeakCheck(false);
+#endif
}
CalculatorPresenter *CalculatorPresenter::GetInstance(void)
#include "compass/include/CompassPresenter.h"
#include "compass/include/CompassModel.h"
#include "graphic_service.h"
-
+#include "gfx_utils/mem_check.h"
namespace OHOS {
static constexpr int16_t RIGHT_NORTH_DOWN_23 = 23;
static constexpr int16_t RIGHT_EASTNORTH_UP_68 = 68;
CompassPresenter::CompassPresenter()
{
g_pMainView = this;
+#ifdef MEM_CHECK
+ MemCheck::GetInstance()->EnableLeakCheck(true);
+#endif
}
CompassPresenter::~CompassPresenter()
{
g_pMainView = nullptr;
+#ifdef MEM_CHECK
+ MemCheck::GetInstance()->EnableLeakCheck(false);
+#endif
}
CompassPresenter* CompassPresenter::GetInstance(void)
#include <custom_utils.h>
#include "bleEvent.h"
#include "findphone/include/FindPhoneModel.h"
-
+#include "gfx_utils/mem_check.h"
namespace OHOS
{
// 当前Presenter属性实例化的内存指针
FindPhonePresenter::FindPhonePresenter()
{
g_pFindPhonePresenter = this;
+#ifdef MEM_CHECK
+ MemCheck::GetInstance()->EnableLeakCheck(true);
+#endif
}
FindPhonePresenter::~FindPhonePresenter()
{
g_pFindPhonePresenter = nullptr;
+#ifdef MEM_CHECK
+ MemCheck::GetInstance()->EnableLeakCheck(false);
+#endif
}
FindPhonePresenter *FindPhonePresenter::GetInstance()
#include "flashlight/include/FlashlightModel.h"
#include "common/key_code.h"
#include <custom_utils.h>
+#include "gfx_utils/mem_check.h"
namespace OHOS
{
FlashlightPresenter::FlashlightPresenter()
{
g_pFlashlightPresenter = this;
+#ifdef MEM_CHECK
+ MemCheck::GetInstance()->EnableLeakCheck(true);
+#endif
}
FlashlightPresenter::~FlashlightPresenter()
{
g_pFlashlightPresenter = nullptr;
+#ifdef MEM_CHECK
+ MemCheck::GetInstance()->EnableLeakCheck(false);
+#endif
}
FlashlightPresenter *FlashlightPresenter::GetInstance()
#include <custom_utils.h>
#include <ohos_types.h>
#include "UiConfig.h"
+#include "gfx_utils/mem_check.h"
namespace OHOS
{
{
weatherModel = &GoalModel::GetInstance();
g_pMainWeatherPresenter = this;
+#ifdef MEM_CHECK
+ MemCheck::GetInstance()->EnableLeakCheck(true);
+#endif
}
MaingoalPresenter::~MaingoalPresenter()
{
-
g_pMainWeatherPresenter = nullptr;
+#ifdef MEM_CHECK
+ MemCheck::GetInstance()->EnableLeakCheck(false);
+#endif
}
MaingoalPresenter *MaingoalPresenter::GetInstance()
+/***
+ * @Date: 2024-08-15 18:38:49
+ * @LastEditors: Caisking 3449750381@qq.com
+ * @LastEditTime: 2024-08-26 15:17:07
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/heartrate/include/HeartChartView.h
+ */
/***
* @Date: 2024-08-15 18:38:49
* @LastEditors: Caisking 3449750381@qq.com
#include "displaybrightness/include/DisplayBrightnessModel.h"
#include "heartrate/include/HeartModel.h"
#include "MainModel.h"
-
+#include "gfx_utils/mem_check.h"
namespace OHOS
{
// 当前Presenter属性实例化的内存指针
static HeartChartPresenter *g_pHeartChartPresenter = nullptr;
-
HeartChartPresenter::HeartChartPresenter()
{
WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "HeartChartPresenter::HeartChartPresenter");
display_time = DisplayBrightnessModel::GetInstance()->GetScreenDurationTime();
display_api->set_screen_auto_off_timeout(300 * 1000); // 设置常亮
ResetTickTimer();
+#ifdef MEM_CHECK
+ MemCheck::GetInstance()->EnableLeakCheck(true);
+#endif
}
HeartChartPresenter::~HeartChartPresenter()
{
display_api->set_screen_auto_off_timeout(display_time); // 恢复
g_pHeartChartPresenter = nullptr;
+#ifdef MEM_CHECK
+ MemCheck::GetInstance()->EnableLeakCheck(false);
+#endif
}
HeartChartPresenter *HeartChartPresenter::GetInstance()
{
{
WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "HeartChartView::~HeartChartView");
imageAnimator->Stop();
+ /*
+ UIViewGroup *tmpGroup = dynamic_cast<UIViewGroup *>(container_);
+ UIViewGroup::RemoveAndDeleteAllRecursively(tmpGroup);
+ */
- UIViewGroup *tmpGroup = dynamic_cast<UIViewGroup *>(container_);
- UIViewGroup::RemoveAndDeleteAllRecursively(tmpGroup);
+ delete CurrentHeartText;
+ CurrentHeartText = nullptr;
+ delete MaxHeartText;
+ MaxHeartText = nullptr;
+ delete MinHeartText;
+ MinHeartText = nullptr;
+ delete UHeartText;
+ UHeartText = nullptr;
+ delete RestHeartText;
+ RestHeartText = nullptr;
+ delete TopimageView;
+ TopimageView = nullptr;
+ delete BottomimageView;
+ BottomimageView = nullptr;
+ delete CoordinateimageView;
+ CoordinateimageView = nullptr;
+ delete HeartIconView;
+ HeartIconView = nullptr;
+ delete imageAnimator;
+ imageAnimator = nullptr;
+
+
+ heartchart->ClearDataSerial();
+ delete heartSerial;
+ heartSerial = nullptr;
+ delete heartchart;
+ heartchart = nullptr;
g_pHeartCheckView = this;
}
{\r
int32_t i;\r
RemoveAll();\r
- UnLoadHeartRateImageRes();\r
+ // UnLoadHeartRateImageRes();\r
delete imageViewCoordinate;\r
imageViewCoordinate = nullptr;\r
\r
+/***
+ * @Date: 2024-04-15 10:55:58
+ * @LastEditors: Caisking 3449750381@qq.com
+ * @LastEditTime: 2024-08-27 16:00:39
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/main/src/dial/DialModelWeather.cpp
+ */
/*
* Copyright (c) CompanyNameMagicTag 2023. All rights reserved.
* Description: DialModelWeather
// WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "DialModelWeather %d", Weather_);
return true;
}
-
+ /*表盘更新天气Icon*/
void DialModelWeather::UpdateWeather(int16_t Weather)
{
Weather_ = static_cast<float>(Weather);
+/***
+ * @Date: 2024-07-10 16:58:06
+ * @LastEditors: Caisking 3449750381@qq.com
+ * @LastEditTime: 2024-08-24 17:36:42
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/message/include/MessageCardView.h
+ */
/***
* @Date: 2024-07-10 16:58:06
* @LastEditors: Caisking 3449750381@qq.com
delete DeleteButton;
DeleteButton = nullptr;
}
+
+ delete p_MessageListAdapter;
+ p_MessageListAdapter = nullptr;
}
void MessageCardView::AddMessageToList(const MessageListItem &item)
{
#include "common/key_code.h"
#include "KeyInputListener.h"
#include "custom_utils.h"
-
+#include "gfx_utils/mem_check.h"
namespace OHOS
{
{
model = &MessageModel::GetInstance();
g_pMessagePresenter = this;
+#ifdef MEM_CHECK
+ MemCheck::GetInstance()->EnableLeakCheck(true);
+#endif
}
MessagePresenter::~MessagePresenter()
{
g_pMessagePresenter = nullptr;
+#ifdef MEM_CHECK
+ MemCheck::GetInstance()->EnableLeakCheck(false);
+#endif
}
MessagePresenter *MessagePresenter::GetInstance()
#include "VocassistPresenter.h"
#include "PlayersModel.h"
#include "ui_service.h"
-
+#include "gfx_utils/mem_check.h"
namespace OHOS {
static VocassistPresenter *g_pVocassistPresenter = nullptr;
{
WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[VocassistPresenter] VocassistPresenter");
g_pVocassistPresenter = this;
+#ifdef MEM_CHECK
+ MemCheck::GetInstance()->EnableLeakCheck(true);
+#endif
}
VocassistPresenter::~VocassistPresenter()
WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[VocassistPresenter] ~VocassistPresenter");
VocassistModel::GetInstance()->SetHasOneCmd(false);
g_pVocassistPresenter = nullptr;
+#ifdef MEM_CHECK
+ MemCheck::GetInstance()->EnableLeakCheck(false);
+#endif
}
VocassistPresenter *VocassistPresenter::GetInstance()
#include "iostream"
#include "UiConfig.h"
#include "phone/include/phoneaddressmodel.h"
+#include "gfx_utils/mem_check.h"
namespace OHOS
{
MainPhonePresenter::MainPhonePresenter()
{
g_pMainPhonePresenter = this;
+#ifdef MEM_CHECK
+ MemCheck::GetInstance()->EnableLeakCheck(true);
+#endif
}
MainPhonePresenter::~MainPhonePresenter()
{
g_pMainPhonePresenter = nullptr;
+#ifdef MEM_CHECK
+ MemCheck::GetInstance()->EnableLeakCheck(false);
+#endif
}
MainPhonePresenter *MainPhonePresenter::GetInstance()
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "%s OnClick", curViewId.c_str());
NativeAbility::GetInstance().EnterSlice(VIEW_PHONEDIR);
}
- else
+ else
{
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "%s OnClick", curViewId.c_str());
set_address_number((char *)view.GetViewId());
NativeAbility::GetInstance().EnterSlice(VIEW_DIALING_METHOD);
}
-
return true;
}
WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MainPhonePresenter::OnDragEnd");
if ((event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT) && TelephonyInitInterface::X_DRAG_FLAG) // 拖动结束判断是否是右滑
{
- //NativeAbility::GetInstance().Back();
+ // NativeAbility::GetInstance().Back();
NativeAbility::GetInstance().EnterSlice(VIEW_APPLIST);
TelephonyInitInterface::X_DRAG_FLAG = false;
}
#include <iostream>
#include <string>
#include "respiratorytraining/include/RespiratoryTrainingModel.h"
+#include "gfx_utils/mem_check.h"
namespace OHOS
{
RespiratoryTrainingPresenter::RespiratoryTrainingPresenter()
{
g_pRespiratoryTrainingPresenter = this;
+#ifdef MEM_CHECK
+ MemCheck::GetInstance()->EnableLeakCheck(true);
+#endif
}
RespiratoryTrainingPresenter::~RespiratoryTrainingPresenter()
{
g_pRespiratoryTrainingPresenter = nullptr;
+#ifdef MEM_CHECK
+ MemCheck::GetInstance()->EnableLeakCheck(false);
+#endif
}
RespiratoryTrainingPresenter *RespiratoryTrainingPresenter::GetInstance()
int length = 0;
for (const auto &entry : registeredDials)
{
- uint16_t id=entry.first;
- if(id<=5)
+ uint16_t id = entry.first;
+ if (id <= 5)
{
id--;
}
return false; // 文件打开失败
}
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "saveDialConfig: %d %d %d", layout.batteryDisplay, layout.timeDisplay, layout.colorTypeSet);
+
// 将结构体的三个数据按1个字节的存储到文件
configFile.put(static_cast<char>(layout.batteryDisplay)); // 第一字节:电池图标样式
configFile.put(static_cast<char>(layout.timeDisplay)); // 第二字节:时间label位置
layout.colorTypeSet = static_cast<ColorTypeSet>(settings[2]); // 字体颜色
// 关闭文件
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to read config file or insufficient file content!");
configFile.close();
return true; // 成功读取配置
}
* Author:
* Create: 2021-11-23
*/
-
+#include "gfx_utils/mem_check.h"
#include "settings/include/SettingView.h"
#include "settings/include/SettingModel.h"
#include "settings/include/SettingPresenter.h"
WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SettingPresenter::SettingPresenter");
settingModel = &SettingModel::GetInstance();
g_pSettingPresenter = this;
+#ifdef MEM_CHECK
+ MemCheck::GetInstance()->EnableLeakCheck(true);
+#endif
}
SettingPresenter::~SettingPresenter()
{
WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SettingPresenter::~SettingPresenter");
g_pSettingPresenter = nullptr;
+#ifdef MEM_CHECK
+ MemCheck::GetInstance()->EnableLeakCheck(false);
+#endif
}
SettingPresenter *SettingPresenter::GetInstance()
-/***
+/***
* @Date: 2024-06-25 10:33:08
* @LastEditors: Caisking 3449750381@qq.com
* @LastEditTime: 2024-07-12 20:00:41
#include <ohos_types.h>
#include "UiConfig.h"
#include "string.h"
+#include "gfx_utils/mem_check.h"
namespace OHOS
{
{
// SleepModel = &SleepModel::GetInstance();
g_pSleepControlPresenter = this;
+#ifdef MEM_CHECK
+ MemCheck::GetInstance()->EnableLeakCheck(true);
+#endif
}
SleepControlPresenter::~SleepControlPresenter()
{
-
g_pSleepControlPresenter = nullptr;
+#ifdef MEM_CHECK
+ MemCheck::GetInstance()->EnableLeakCheck(true);
+#endif
}
SleepControlPresenter *SleepControlPresenter::GetInstance()
{
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, " SleepTimeView::~SleepTimeView");
ClearAll();
+
g_pSleepView = nullptr;
}
#include "common/key_code.h"\r
#include <custom_utils.h>\r
/*秒表主视图*/\r
+#include "gfx_utils/mem_check.h"\r
namespace OHOS\r
{\r
\r
\r
MainStopWatchPresenter::MainStopWatchPresenter()\r
{\r
-\r
g_pMainStopWatchPresenter = this;\r
+#ifdef MEM_CHECK\r
+ MemCheck::GetInstance()->EnableLeakCheck(true);\r
+#endif\r
}\r
\r
MainStopWatchPresenter::~MainStopWatchPresenter()\r
{\r
StopWatchModel::GetInstance()->StopWatch_StopTimer(); // 退出删除并清理定时器资源\r
g_pMainStopWatchPresenter = nullptr;\r
+#ifdef MEM_CHECK\r
+ MemCheck::GetInstance()->EnableLeakCheck(false);\r
+#endif\r
}\r
\r
MainStopWatchPresenter *MainStopWatchPresenter::GetInstance()\r
{\r
-\r
return g_pMainStopWatchPresenter;\r
}\r
\r
#include "takephotos/include/TakephotosPresenter.h"
#include "takephotos/include/TakephotosModel.h"
+#include "gfx_utils/mem_check.h"
// #include "TakephotosView.h"
namespace OHOS
TakephotosPresenter::TakephotosPresenter()
{
g_pTakephotosPresenter = this;
+#ifdef MEM_CHECK
+ MemCheck::GetInstance()->EnableLeakCheck(true);
+#endif
}
TakephotosPresenter::~TakephotosPresenter()
{
g_pTakephotosPresenter = nullptr;
+#ifdef MEM_CHECK
+ MemCheck::GetInstance()->EnableLeakCheck(false);
+#endif
}
TakephotosPresenter *TakephotosPresenter::GetInstance()
#include "traing/include/TraingModel.h"
#include "uicomponents/UIComponents.h"
// #include "TraingView.h"
-
+#include "gfx_utils/mem_check.h"
namespace OHOS
{
TraingPresenter::TraingPresenter()
{
g_pTraingPresenter = this;
+#ifdef MEM_CHECK
+ MemCheck::GetInstance()->EnableLeakCheck(true);
+#endif
}
TraingPresenter::~TraingPresenter()
{
g_pTraingPresenter = nullptr;
+#ifdef MEM_CHECK
+ MemCheck::GetInstance()->EnableLeakCheck(false);
+#endif
}
TraingPresenter *TraingPresenter::GetInstance()
/*** \r
+ * @Date: 2024-04-15 10:55:58\r
+ * @LastEditors: Caisking 3449750381@qq.com\r
+ * @LastEditTime: 2024-08-24 15:18:42\r
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/traing/training_card/include/TraingCardPresenter.h\r
+ */\r
+/***\r
* @Date: 2024-04-15 10:55:58\r
* @LastEditors: Caisking 3449750381@qq.com\r
* @LastEditTime: 2024-08-19 10:55:50\r
bool ControlSensor(ExerciseState state);\r
\r
void ModifiesTime();\r
- void RefreshData(); // 更新数据\r
+ void RefreshData(SportData *sportdata); // 更新数据\r
\r
/*蓝牙开启运动*/\r
bool send_sport_cmd(training_ble *cmd);\r
#include <iomanip>\r
#include <sstream>\r
#include <unordered_map>\r
+#include "graphic_service.h"\r
\r
extern "C" void do_cywee_service_check_msg(int cmd, int data[]);\r
\r
return true;\r
}\r
\r
- void TraingCardPresenter::RefreshData()\r
+ void TraingCardPresenter::RefreshData(SportData *sportdata)\r
{\r
- SportData *sportdata = TraingModel::GetInstance()->GetSportdata();\r
if (sportdata == nullptr)\r
{\r
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "sportdata is null");\r
// 未开启训练 直接退出\r
if (TraingModel::GetInstance()->GetSportState() == ExerciseState::General)\r
return;\r
- // 刷新训练数据界面 时间\r
+ // 刷新训练数据界面 现实时间\r
TrainingDataView::GetInstance()->UpdataTime();\r
// 刷新训练数据界面 心率 卡路里 距离 步数 训练强度 目标完成度\r
RefreshData();\r
// 未开启训练 直接退出\r
if (TraingModel::GetInstance()->GetSportState() == ExerciseState::General)\r
return;\r
- // 刷新训练数据界面 时间\r
- TrainingDataView::GetInstance()->UpdataTime();\r
+\r
+ // 刷新训练数据界面 现实时间\r
+ GraphicService::GetInstance()->PostGraphicEvent(std::bind(&TrainingDataView::UpdataTime, TrainingDataView::GetInstance()));\r
+\r
// 刷新训练数据界面 心率 卡路里 距离 步数 训练强度 目标完成度\r
- RefreshData();\r
+ SportData *sportdata = TraingModel::GetInstance()->GetSportdata();\r
+ GraphicService::GetInstance()->PostGraphicEvent(std::bind(&TraingCardPresenter::RefreshData, TraingCardPresenter::GetInstance(), sportdata));\r
}\r
#endif\r
/* --------------------------------- 点击事件处理 --------------------------------- */\r
// 初始化Lable
InitLabelExt(labeltitle, 83, 50, 300, 35, "label1", STR_TRAINING_IN_PROGRESS, DEFAULT_VECTOR_FONT_FILENAME, 30);
- InitLabel(labeltimer, 45, 110, 360, 80, "label2", "00:00:00", GILROY_BOLD_FONT, 65);
+ InitLabel(labeltimer, 45, 110, 360, 80, "label2", "00:00:00", DEFAULT_VECTOR_FONT_FILENAME, 65);
InitLabelExt(labelend, 81, 330, 130, 35, "label3", STR_FINISH, DEFAULT_VECTOR_FONT_FILENAME, 30);
InitLabelExt(labelstop, 251, 330, 130, 35, "label4", STR_PAUSE, DEFAULT_VECTOR_FONT_FILENAME, 30);
Add(labeltitle);
u_stepslabel->SetTextColor(Color::Gray());
u_calorielabel->SetTextColor(Color::Gray());
- InitLabel(milelabel, 17, 160, 200, 80, "label6", "13.21", GILROY_BOLD_FONT, 65);
- InitLabel(calorielabel, 230, 160, 200, 80, "label7", "28312", GILROY_BOLD_FONT, 65);
- InitLabel(steplabel, 133, 285, 200, 80, "label8", "210.03", GILROY_BOLD_FONT, 65);
+ InitLabel(milelabel, 17, 160, 200, 80, "label6", "13.21", DEFAULT_VECTOR_FONT_FILENAME, 65);
+ InitLabel(calorielabel, 230, 160, 200, 80, "label7", "28312", DEFAULT_VECTOR_FONT_FILENAME, 65);
+ InitLabel(steplabel, 133, 285, 200, 80, "label8", "210.03", DEFAULT_VECTOR_FONT_FILENAME, 65);
Add(u_milelabel);
Add(u_stepslabel);
Add(u_calorielabel);
#include "custom_utils.h"
#include "common/key_code.h"
// #include "TraingRecordView.h"
-
+#include "gfx_utils/mem_check.h"
namespace OHOS
{
// 当前Presenter属性实例化的内存指针
{
p_TraingRecordModel = &TraingRecordModel::GetInstance();
g_pTraingRecordPresenter = this;
+#ifdef MEM_CHECK
+ MemCheck::GetInstance()->EnableLeakCheck(true);
+#endif
}
TraingRecordPresenter::~TraingRecordPresenter()
{
g_pTraingRecordPresenter = nullptr;
+ p_TraingRecordModel = nullptr;
+#ifdef MEM_CHECK
+ MemCheck::GetInstance()->EnableLeakCheck(false);
+#endif
}
TraingRecordPresenter *TraingRecordPresenter::GetInstance()
#include <custom_utils.h>\r
#include <ohos_types.h>\r
#include "UiConfig.h"\r
+#include "gfx_utils/mem_check.h"\r
namespace OHOS\r
{\r
\r
{\r
weatherModel = &WeatherModel::GetInstance();\r
g_pMainWeatherPresenter = this;\r
+#ifdef MEM_CHECK\r
+ MemCheck::GetInstance()->EnableLeakCheck(true);\r
+#endif\r
}\r
\r
MainWeatherPresenter::~MainWeatherPresenter()\r
{\r
-\r
g_pMainWeatherPresenter = nullptr;\r
+#ifdef MEM_CHECK\r
+ MemCheck::GetInstance()->EnableLeakCheck(false);\r
+#endif\r
}\r
\r
MainWeatherPresenter *MainWeatherPresenter::GetInstance()\r
#include <TransitionType.h>
#include "BaseView.h"
#include "AppViewIDs.h"
-namespace OHOS {
-/*
- * @brief 负责将一个SliceProxy对象添加到Ability对象中,如果传入的sliceId是无效的或者代理对象proxy为空,则不执行任何操作。
- */
-void Ability::AddSliceProxy(const uint16_t sliceId, SliceProxy* proxy)
-{
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_LAUNCHER_FWK, "Ability::AddSliceProxy sliceId = %d", sliceId);
- if (sliceId <= gSliceInvalid || proxy == nullptr) {
- return;
- }
+#include "los_memory_pri.h"
+#include "gfx_utils/mem_check.h"
- /*首先,会检查是否已经有一个与传入的sliceId对应的Slice存在,如果存在,则不会添加新的代理。*/
- if (Find(sliceId) != nullptr) {
- return;
- }
+namespace OHOS
+{
+ /*
+ * @brief 负责将一个SliceProxy对象添加到Ability对象中,如果传入的sliceId是无效的或者代理对象proxy为空,则不执行任何操作。
+ */
+ void Ability::AddSliceProxy(const uint16_t sliceId, SliceProxy *proxy)
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_LAUNCHER_FWK, "Ability::AddSliceProxy sliceId = %d", sliceId);
+ if (sliceId <= gSliceInvalid || proxy == nullptr)
+ {
+ return;
+ }
- /*如果检查通过,则将sliceId和proxy作为一个结构体添加到allSlicesProxy_列表中,allSlicesProxy_可能是存储所有尚存代理的列表。*/
- Ability::ProxyStruct proxyPair = {sliceId, proxy};
- allSlicesProxy_.PushBack(proxyPair);
-}
+ /*首先,会检查是否已经有一个与传入的sliceId对应的Slice存在,如果存在,则不会添加新的代理。*/
+ if (Find(sliceId) != nullptr)
+ {
+ return;
+ }
-/*
- * @brief 该函数用于启动一个指定ID的Slice。
- */
-void Ability::StartSlice(const uint16_t sliceId, const uint16_t priority)
-{
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_LAUNCHER_FWK, "Ability::StartSlice sliceId = %d", sliceId);
-
- /* ---------------------- 1.首先检查sliceId的有效性,如果无效,则直接返回。 --------------------- */
- if (sliceId <= gSliceInvalid) {
- return;
+ /*如果检查通过,则将sliceId和proxy作为一个结构体添加到allSlicesProxy_列表中,allSlicesProxy_可能是存储所有尚存代理的列表。*/
+ Ability::ProxyStruct proxyPair = {sliceId, proxy};
+ allSlicesProxy_.PushBack(proxyPair);
}
- /* ---- 2.通过Find函数查找是否已经有对应的SliceProxy存在,如果没有找到对应的代理或创建新Slice实例失败,则不继续执行。 --- */
- ListsNode<Ability::ProxyStruct>* node = Find(sliceId);
- if (node == nullptr) {
- return;
- }
- InputDeviceManager::GetInstance()->ClearPressableViews();
- Slice* nextSlice = node->value_.proxy->CreateSlice();
- if (nextSlice == nullptr) {
- return;
- }
+ /*
+ * @brief 该函数用于启动一个指定ID的Slice。
+ */
+ void Ability::StartSlice(const uint16_t sliceId, const uint16_t priority)
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_LAUNCHER_FWK, "Ability::StartSlice sliceId = %d", sliceId);
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_LAUNCHER_FWK, "Ability::StartSlice Size = %d", allSlices_.size());
- /* ----------- 3.记录历史Slice ID,如果历史记录达到最大值gMaxHistorySlices,则移除最旧的记录。 ---------- */
- if (allSlices_.size() == gMaxHistorySlices) {// 记录最多gMaxHistorySlices个页面id
- allSlices_.erase(allSlices_.begin());
- }
- /* -------------- 4.设置当前Slice的相关信息,并调用Slice的OnStart和OnResume方法。 ------------- */
- allSlices_.push_back(sliceId);
- if (curSlice_.slice != nullptr) {
- prevSlice_.sliceId = curSlice_.sliceId;
- prevSlice_.slice = curSlice_.slice;
- }
+ /* ---------------------- 1.首先检查sliceId的有效性,如果无效,则直接返回。 --------------------- */
+ if (sliceId <= gSliceInvalid)
+ {
+ return;
+ }
- curSlice_.sliceId = sliceId;
- curSlice_.slice = nextSlice;
- curSlicePriority_ = priority;
+ /* ---- 2.通过Find函数查找是否已经有对应的SliceProxy存在,如果没有找到对应的代理或创建新Slice实例失败,则不继续执行。 --- */
+ ListsNode<Ability::ProxyStruct> *node = Find(sliceId);
+ if (node == nullptr)
+ {
+ return;
+ }
+ InputDeviceManager::GetInstance()->ClearPressableViews();
+ Slice *nextSlice = node->value_.proxy->CreateSlice();
+ if (nextSlice == nullptr)
+ {
+ return;
+ }
- nextSlice->OnStart();
- nextSlice->OnResume();
-}
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_LAUNCHER_FWK, "Ability::StartSlice Size = %d", allSlices_.size());
+ /* ----------- 3.记录历史Slice ID,如果历史记录达到最大值gMaxHistorySlices,则移除最旧的记录。 ---------- */
+ if (allSlices_.size() == gMaxHistorySlices)
+ { // 记录最多gMaxHistorySlices个页面id
+ allSlices_.erase(allSlices_.begin());
+ }
+ /* -------------- 4.设置当前Slice的相关信息,并调用Slice的OnStart和OnResume方法。 ------------- */
+ allSlices_.push_back(sliceId);
+ if (curSlice_.slice != nullptr)
+ {
+ prevSlice_.sliceId = curSlice_.sliceId;
+ prevSlice_.slice = curSlice_.slice;
+ }
+ curSlice_.sliceId = sliceId;
+ curSlice_.slice = nextSlice;
+ curSlicePriority_ = priority;
-/*
- * @brief 在allSlicesProxy_列表中寻找与给定sliceId相符合的ProxyStruct节点。如果找到则返回该节点,否则返回nullptr。
- */
-ListsNode<Ability::ProxyStruct>* Ability::Find(const uint16_t sliceId)
-{
- if (sliceId <= gSliceInvalid) {
- return nullptr;
+ nextSlice->OnStart();
+ nextSlice->OnResume();
}
- if (allSlicesProxy_.IsEmpty()) {
- return nullptr;
- }
+ /*
+ * @brief 在allSlicesProxy_列表中寻找与给定sliceId相符合的ProxyStruct节点。如果找到则返回该节点,否则返回nullptr。
+ */
+ ListsNode<Ability::ProxyStruct> *Ability::Find(const uint16_t sliceId)
+ {
+ if (sliceId <= gSliceInvalid)
+ {
+ return nullptr;
+ }
- ListsNode<Ability::ProxyStruct>* node = allSlicesProxy_.Begin();
- while (node != allSlicesProxy_.End()) {
- if (node->value_.sliceId == sliceId) {
- return node;
+ if (allSlicesProxy_.IsEmpty())
+ {
+ return nullptr;
}
- node = node->next_;
- }
- return nullptr;
-}
+ ListsNode<Ability::ProxyStruct> *node = allSlicesProxy_.Begin();
+ while (node != allSlicesProxy_.End())
+ {
+ if (node->value_.sliceId == sliceId)
+ {
+ return node;
+ }
+ node = node->next_;
+ }
-/*
- * @brief 用于改变当前Slice。首先检查切换是否正在进行中;如果是,直接返回。
- * @param {uint16_t} targetSliceId
- * @param {uint16_t} transitionId
- * @param {uint16_t} priority
- * @return {*}
- */
-void Ability::ChangeSlice(const uint16_t targetSliceId, TransitionType type, const uint16_t priority)
-{
- if(targetSliceId == VIEW_MAIN)
- {
- ClearSliceIdStack();/*凡是回到主界面都要清空栈*/
- }
- // showsStackSliceId();
- /*
- if (GetCurSliceId() == targetSliceId) {
- return;
- }
- */
- if (osal_atomic_read(&transitionCount_) <= 0) {
- osal_atomic_inc(&transitionCount_);
- // onStop释放当前页面需要和当前页面的事件监听异步执行,否则会出现自己杀掉自己的情况
- //使用图形服务的PostGraphicEvent方法异步执行PostChangeSlice,以避免在页面事件监听时出现当前页面自我销毁的情况。
- GraphicService::GetInstance()->PostGraphicEvent(std::bind(&Ability::PostChangeSlice, this, targetSliceId,
- type, priority));
+ return nullptr;
}
-}
-void Ability::PostChangeSlice(const uint16_t targetSliceId, TransitionType type, const uint16_t priority)
-{
/*
- 1.首先检查当前Slice是否存在,并验证transitionId的有效性。
- 如果当前存在一个有效的Slice,并且transitionId合法,则调用sliceTransition_的SaveCurrentSnapshot方法保存当前Slice的快照,
- 主要是为了后续可能使用的页面转场效果。
- */
- bool useTransition = sliceTransition_.SetTransitionType(type);
- bool isCurSnapshotEnabled = sliceTransition_.IsCurrentSnapshotEnabled();
- FocusManager::GetInstance()->ClearFocus();
- if(type == TransitionType::TRANSITION_HEXAGONS)
+ * @brief 用于改变当前Slice。首先检查切换是否正在进行中;如果是,直接返回。
+ * @param {uint16_t} targetSliceId
+ * @param {uint16_t} transitionId
+ * @param {uint16_t} priority
+ * @return {*}
+ */
+ void Ability::ChangeSlice(const uint16_t targetSliceId, TransitionType type, const uint16_t priority)
{
- RootView::GetInstance()->ClearOnKeyActListener();
+ if (targetSliceId == VIEW_MAIN)
+ {
+ ClearSliceIdStack(); /*凡是回到主界面都要清空栈*/
+ }
+ // showsStackSliceId();
+ /*
+ if (GetCurSliceId() == targetSliceId) {
+ return;
+ }
+ */
+ if (osal_atomic_read(&transitionCount_) <= 0)
+ {
+ osal_atomic_inc(&transitionCount_);
+ // onStop释放当前页面需要和当前页面的事件监听异步执行,否则会出现自己杀掉自己的情况
+ // 使用图形服务的PostGraphicEvent方法异步执行PostChangeSlice,以避免在页面事件监听时出现当前页面自我销毁的情况。
+ GraphicService::GetInstance()->PostGraphicEvent(std::bind(&Ability::PostChangeSlice, this, targetSliceId,
+ type, priority));
+ }
}
- if (!useTransition) {
- StopSlice();
- } else if (isCurSnapshotEnabled) {
- if (!sliceTransition_.SaveCurrentSnapshot(curSlice_.slice->GetSliceContainer())) {
- useTransition = false;
+ void Ability::PostChangeSlice(const uint16_t targetSliceId, TransitionType type, const uint16_t priority)
+ {
+ /*
+ 1.首先检查当前Slice是否存在,并验证transitionId的有效性。
+ 如果当前存在一个有效的Slice,并且transitionId合法,则调用sliceTransition_的SaveCurrentSnapshot方法保存当前Slice的快照,
+ 主要是为了后续可能使用的页面转场效果。
+ */
+ /*进行内存泄漏自查*/
+ bool useTransition;
+#ifdef MEM_CHECK
+ useTransition = sliceTransition_.SetTransitionType(type);
+#else
+ useTransition = false;
+#endif
+ bool isCurSnapshotEnabled = sliceTransition_.IsCurrentSnapshotEnabled();
+ FocusManager::GetInstance()->ClearFocus();
+ if (type == TransitionType::TRANSITION_HEXAGONS)
+ {
+ RootView::GetInstance()->ClearOnKeyActListener();
}
- // slice页面跳转,先onstop,再onstart.在一个线程同步执行绘制,不会出现闪屏现象
- /*
- 2.调用StopSlice函数停止当前Slice的运行。在StopSlice中,会调用当前Slice的OnStop方法,并释放当前Slice占用的资源。
- */
- StopSlice();
- }
-
- // slice页面跳转,先onstop,再onstart.在一个线程同步执行绘制,不会出现闪屏现象
+ if (!useTransition)
+ {
+ StopSlice();
+ }
+ else if (isCurSnapshotEnabled)
+ {
+ if (!sliceTransition_.SaveCurrentSnapshot(curSlice_.slice->GetSliceContainer()))
+ {
+ useTransition = false;
+ }
+ StopSlice();
+ }
+ // slice页面跳转,先onstop,再onstart.在一个线程同步执行绘制,不会出现闪屏现象
+ /*
+ 2.调用StopSlice函数停止当前Slice的运行。在StopSlice中,会调用当前Slice的OnStop方法,并释放当前Slice占用的资源。
+ */
+#ifdef MEM_CHECK
+ OsMemInfoPrint(OS_SYS_MEM_ADDR);
+ OsMemInfoPrint(OS_EXTEND_MEM_ADDR);
+ printf("*******************next slice id is %d*****************\r\n", targetSliceId);
+#endif
+ // slice页面跳转,先onstop,再onstart.在一个线程同步执行绘制,不会出现闪屏现象
#ifdef JS_ENABLE
- ElementName *elementName = OHOS::AbilityMsClient::GetInstance().GetTopAbility();
- if (elementName != nullptr && strcmp(elementName->bundleName, "com.huawei.launcher") != 0) {
- OHOS::AbilityMsClient::GetInstance().ForceStop(elementName->bundleName);
- targetSliceIdFromJS_ = targetSliceId;
- osal_atomic_dec(&transitionCount_);
- return;
- }
+ ElementName *elementName = OHOS::AbilityMsClient::GetInstance().GetTopAbility();
+ if (elementName != nullptr && strcmp(elementName->bundleName, "com.huawei.launcher") != 0)
+ {
+ OHOS::AbilityMsClient::GetInstance().ForceStop(elementName->bundleName);
+ targetSliceIdFromJS_ = targetSliceId;
+ osal_atomic_dec(&transitionCount_);
+ return;
+ }
#endif
- /*
- 调用StartSlice函数以启动新的指定的Slice。
- StartSlice函数内部会先检查是否存在目标Slice的Proxy,并通过Proxy创建新的实例,
- 记录Slice ID到历史记录中,并调用该Slice的OnStart和OnResume方法开始运行新的Slice。
- */
- StartSlice(targetSliceId, priority);
-
- if (useTransition) {
- if (isCurSnapshotEnabled) {
- sliceTransition_.Transition(nullptr, curSlice_.slice->GetSliceContainer());
- } else {
- sliceTransition_.Transition(prevSlice_.slice->GetSliceContainer(), curSlice_.slice->GetSliceContainer());
- }
- } else {
- osal_atomic_dec(&transitionCount_);
+ /*
+ 调用StartSlice函数以启动新的指定的Slice。
+ StartSlice函数内部会先检查是否存在目标Slice的Proxy,并通过Proxy创建新的实例,
+ 记录Slice ID到历史记录中,并调用该Slice的OnStart和OnResume方法开始运行新的Slice。
+ */
+ StartSlice(targetSliceId, priority);
+
+ if (useTransition)
+ {
+ if (isCurSnapshotEnabled)
+ {
+ sliceTransition_.Transition(nullptr, curSlice_.slice->GetSliceContainer());
+ }
+ else
+ {
+ sliceTransition_.Transition(prevSlice_.slice->GetSliceContainer(), curSlice_.slice->GetSliceContainer());
+ }
+ }
+ else
+ {
+ osal_atomic_dec(&transitionCount_);
+ }
}
-}
-void Ability::OnTransitionEnd()
-{
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_LAUNCHER_FWK, "Ability::OnTransitionEnd");
- if (!sliceTransition_.IsCurrentSnapshotEnabled()) {
- if (prevSlice_.slice != nullptr) {
- prevSlice_.slice->OnStop();
- if (prevSlice_.slice != nullptr) {
- prevSlice_.sliceId = gSliceInvalid;
- delete prevSlice_.slice;
- prevSlice_.slice = nullptr;
+ void Ability::OnTransitionEnd()
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_LAUNCHER_FWK, "Ability::OnTransitionEnd");
+ if (!sliceTransition_.IsCurrentSnapshotEnabled())
+ {
+ if (prevSlice_.slice != nullptr)
+ {
+ prevSlice_.slice->OnStop();
+ if (prevSlice_.slice != nullptr)
+ {
+ prevSlice_.sliceId = gSliceInvalid;
+ delete prevSlice_.slice;
+ prevSlice_.slice = nullptr;
+ }
}
}
+ osal_atomic_dec(&transitionCount_);
}
- osal_atomic_dec(&transitionCount_);
-}
-/*
- * @brief 重新启动当前或默认Slice。根据当前记录的切片历史来决定重启哪个Slice。
- */
-void Ability::ResumeSlice(const uint16_t priority)
-{
- uint16_t targetSliceId = gSliceInvalid;
- if (targetSliceIdFromJS_ != 0) {
- targetSliceId = targetSliceIdFromJS_;
- targetSliceIdFromJS_ = 0;
- } else if (allSlices_.empty()) {
- targetSliceId = defaultSliceId_;
- } else {
- targetSliceId = GetCurSliceId();
+ /*
+ * @brief 重新启动当前或默认Slice。根据当前记录的切片历史来决定重启哪个Slice。
+ */
+ void Ability::ResumeSlice(const uint16_t priority)
+ {
+ uint16_t targetSliceId = gSliceInvalid;
+ if (targetSliceIdFromJS_ != 0)
+ {
+ targetSliceId = targetSliceIdFromJS_;
+ targetSliceIdFromJS_ = 0;
+ }
+ else if (allSlices_.empty())
+ {
+ targetSliceId = defaultSliceId_;
+ }
+ else
+ {
+ targetSliceId = GetCurSliceId();
+ }
+ StartSlice(targetSliceId, priority);
}
- StartSlice(targetSliceId, priority);
-}
-/*
- * @brief 停止当前的Slice,调用其OnStop方法,并释放当前Slice资源。
- */
-void Ability::StopSlice()
-{
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_LAUNCHER_FWK, "Ability::StopSlice");
- if (curSlice_.slice != nullptr) {
- curSlice_.slice->OnStop();
- if (curSlice_.slice != nullptr) {
- curSlice_.sliceId = gSliceInvalid;
- delete curSlice_.slice;
- curSlice_.slice = nullptr;
- }
+ /*
+ * @brief 停止当前的Slice,调用其OnStop方法,并释放当前Slice资源。
+ */
+ void Ability::StopSlice()
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_LAUNCHER_FWK, "Ability::StopSlice");
+ if (curSlice_.slice != nullptr)
+ {
+ curSlice_.slice->OnStop();
+ if (curSlice_.slice != nullptr)
+ {
+ curSlice_.sliceId = gSliceInvalid;
+ delete curSlice_.slice;
+ curSlice_.slice = nullptr;
+ }
- curSlicePriority_ = gSliceDefaultPriority;
+ curSlicePriority_ = gSliceDefaultPriority;
+ }
}
-}
} // namespace OHOS
'SUPPORT_AT_CUSTOMUTILS',
'SUPPORT_BLE_SERVICE',
'FD230',
+ #"MEM_CHECK",
# 'ENABLE_WEBSOCKET',
'CYWEE_SPORT',
'SUPPORT_TCPIP',
--- /dev/null
+version https://git-lfs.github.com/spec/v1
+oid sha256:c93e6f6eec8c947e19fbc32a041b262607f991083a5c9871a998469bdefb6739
+size 8664
--- /dev/null
+version https://git-lfs.github.com/spec/v1
+oid sha256:c269a13d2d8e861b7e619138f44c38f5c395de04a8258a3f181cb5a5c7f938d9
+size 8664
}
if (leakCount_ == crashCnt_) {
if (leakSize_ != allocNote->size) {
- GRAPHIC_LOGE("size not right!");
+ GRAPHIC_LOGE("size not right! %d",allocNote->size);
}
#ifdef __LITEOS__
LOS_Panic("mem leak here!\n");