${CMAKE_CURRENT_SOURCE_DIR}/nativeui/emotion/src/EmoTestFailedNoWearingView.cpp
${CMAKE_CURRENT_SOURCE_DIR}/nativeui/emotion/src/EmoTestFailedNoValueView.cpp
+ #压力
+ ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/stress/src/StressMainView.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/stress/src/StressMeasureView.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/stress/src/StressUnderMeasureView.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/stress/src/StressAnalysisView.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/stress/src/StressModel.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/stress/src/StressResultView.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/stress/src/StressWearView.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/stress/src/StressFailView.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/stress/src/StressPresenter.cpp
+
+
${CMAKE_CURRENT_SOURCE_DIR}/nativeui/bluetooth/src/BluetoothDeviceCaseListAdapter.cpp
${CMAKE_CURRENT_SOURCE_DIR}/nativeui/bluetooth/src/BluetoothDeviceListView.cpp
${CMAKE_CURRENT_SOURCE_DIR}/nativeui/bluetooth/src/BluetoothPresenter.cpp
void InitRotateSlice(void);
void InitBloodSlice(void);
void InitBloodPressureSlice(void);
+ void InitStressSlice(void);
void InitCheckAbnormalSlice(void);
void InitCheckInvalidSlice(void);
void InitHeartResultSlice(void);
/* -------------------------------------------------------------------------- */
void InitCalculatorSlice(void);
void InintCalendarSlice(void);
-
+
void InitScheduleSlice(void);
void InitSleepModeSlice(void);
void InittestSlice(void);
#include "calculator/include/CalculatorPresenter.h"
#include "calculator/include/CalculatorView.h"
-
#include "calendar/include/CalendarPresenter.h"
#include "calendar/include/CalendarView.h"
-
#include "system/include/SystemPresenter.h"
#include "system/include/SystemView.h"
/*情绪测量*/
#include "emotion/include/EmoPresenter.h"
#include "emotion/include/EmoView.h"
+/*压力检测*/
+#include "stress/include/StressPresenter.h"
+#include "stress/include/StressMainView.h"
/*心率监测*/
#include "heartrate/include/HeartDetectionView.h"
#include "heartrate/include/HeartDetectionPresenter.h"
#include "system/include/SystemLogModel.h"
-#include "ui_service.h"
-extern "C" void uapi_dev_runtime_set_lock_status(uint8_t status);
-extern "C" uint8_t uapi_dev_runtime_get_lock_status(void);
+#include "ui_service.h"
+extern "C" void uapi_dev_runtime_set_lock_status(uint8_t status);
+extern "C" uint8_t uapi_dev_runtime_get_lock_status(void);
#ifdef SUPPORT_ALIPAY_SEC
#include "AlipayMainView.h"
{VIEW_INDOORWALK, &NativeLauncher::InitIndoorWalkSlice},
{VIEW_WEATHER, &NativeLauncher::InitWeatherSlice}, // 天气
{VIEW_GOAL, &NativeLauncher::InitGoalSlice}, // 每日目标
- {VIEW_SYSTEM, &NativeLauncher::InitSystemSlice}, // 系统实例化地址
+ {VIEW_SYSTEM, &NativeLauncher::InitSystemSlice}, // 系统实例化地址
{VIEW_SOUND_VIBRATION,
&NativeLauncher::InitSoundAndVibrationSlice}, // 声音与震动实例化地址
{VIEW_SYSTEM_VOLUME,
- &NativeLauncher::InitSystemVolumeSlice}, // 系统音量
+ &NativeLauncher::InitSystemVolumeSlice}, // 系统音量
{VIEW_CALL_VOLUME, &NativeLauncher::InitCallVolumeSlice}, // 系统音量
{VIEW_CLASSIC_BLUETOOTH,
&NativeLauncher::InitClassicBluetoothSlice}, // 经典蓝牙slice
{VIEW_TRAININGNOMAL,
&NativeLauncher::InitTraingNomalSlice}, // 正常训练初始界面
{VIEW_TRAININGSET,
- &NativeLauncher::InitTraingSetSlice}, // 训练目标设置界面
+ &NativeLauncher::InitTraingSetSlice}, // 训练目标设置界面
{VIEW_TRAININGCRAD, &NativeLauncher::InitTraingCardSlice}, // 训练卡片
{VIEW_TRAININGENDDATA,
&NativeLauncher::InitTraingEnddataSlice}, // 训练结束详细数据
{VIEW_TRAINING_RECORD,
- &NativeLauncher::InitTraingRecordSlice}, // 训练记录
- {VIEW_TRAININGMORE, &NativeLauncher::InitTraingMoreSlice}, // 更多训练
+ &NativeLauncher::InitTraingRecordSlice}, // 训练记录
+ {VIEW_TRAININGMORE, &NativeLauncher::InitTraingMoreSlice}, // 更多训练
{VIEW_TRAININGLIMIT, &NativeLauncher::InitTraingLimitSlice}, // 极限训练
- {VIEW_TRAININGICE, &NativeLauncher::InitTraingIceSlice}, // 冰上训练
+ {VIEW_TRAININGICE, &NativeLauncher::InitTraingIceSlice}, // 冰上训练
{VIEW_TRAININGFITNESS,
- &NativeLauncher::InitTraingFitnessSlice}, // 健身训练
+ &NativeLauncher::InitTraingFitnessSlice}, // 健身训练
{VIEW_TRAININGDANCE, &NativeLauncher::InitTraingDanceSlice}, // 舞蹈训练
- {VIEW_TRAININGREST, &NativeLauncher::InitTraingRestSlice}, // 休闲训练
- {VIEW_TRAININGBALL, &NativeLauncher::InitTraingBallSlice}, // 球类训练
+ {VIEW_TRAININGREST, &NativeLauncher::InitTraingRestSlice}, // 休闲训练
+ {VIEW_TRAININGBALL, &NativeLauncher::InitTraingBallSlice}, // 球类训练
{VIEW_TRAININGAQUATIC,
- &NativeLauncher::InitTraingAquaticSlice}, // 水上训练
+ &NativeLauncher::InitTraingAquaticSlice}, // 水上训练
{VIEW_TRAININGOTHER, &NativeLauncher::InitTraingOtherSlice}, // 水上训练
/* --------------------------------------------------------------------------
*/
{VIEW_ECG, &NativeLauncher::InitECGSlice},
/*情绪测量*/
{VIEW_EMOTION, &NativeLauncher::InitEmotionSlice},
+ /*压力监测*/
+ {VIEW_PRESSURE, &NativeLauncher::InitStressSlice},
/*心率检测*/
{VIEW_HEART_CHECK, &NativeLauncher::InitHeartCheckSlice},
{VIEW_HEART_RESULT, &NativeLauncher::InitHeartResultSlice},
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "InitLangues error");
}
// 初始化所有预加载slice
-
+
InitAllNativeSlices();
CallerLogModel::GetInstance()->InitPhoneService();
- GoalModel::GetInstance().GoalModelInitdata();//活动数据初始化
+ GoalModel::GetInstance().GoalModelInitdata(); // 活动数据初始化
// PresenterTask::GetInstance()->Init();
PlayersModel::GetInstance()->AudioInit();
ActivityModel::GetInstance()->Init();
TakephotosModel::GetInstance()->Init(); // 拍照消息订阅
MessageModel::GetInstance().Init(); // 消息订阅监听
AssistantModel::GetInstance()->Init(); // 语音助手消息订阅
- //音乐列表初始化,放在nativelauncher 初始化,防止手表连接耳机时,操控耳机控制手表音乐造成死机
+ // 音乐列表初始化,放在nativelauncher 初始化,防止手表连接耳机时,操控耳机控制手表音乐造成死机
do_custom_fileoperate_service_check_msg(CUSTOM_FILEOPERATE_MSG_TYPE_MUSICNAME_READ, nullptr, 0);
// 初始化默认首页
mmi_sleep_mode_switch_read();
/*开机读取消息历史数据*/
- if(!MessageModel::GetInstance().LoadMessagesFromStorage())
+ if (!MessageModel::GetInstance().LoadMessagesFromStorage())
{
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "LoadMessagesFromStorage failed!");
}
/*开机读取睡眠数据*/
SleepModel::GetInstance().read_sleep_file_data();
- //更新主表盘配置
+ // 更新主表盘配置
MainModel::GetInstance().InitDialState();
// 初始化屏幕亮度
// 开机增加震动 页面启动震动一次
// ui_api_vibrate_once_func();
}
- // 注册开机时间
- SystemLogData systemlog;
- systemlog.timestamp = SystemLogModel::GetInstance()->GetCurrentTime();
- systemlog.type = SystemLogType::POWER_ON;
+ // 注册开机时间
+ SystemLogData systemlog;
+ systemlog.timestamp = SystemLogModel::GetInstance()->GetCurrentTime();
+ systemlog.type = SystemLogType::POWER_ON;
// 先读取日志
SystemLogModel::GetInstance()->loadLog();
// 再存储日志
NativeAbility::GetInstance().AddSliceProxy(VIEW_CALCULATOR, Calculatorview_);
}
- void NativeLauncher::InintCalendarSlice(void)
+ void NativeLauncher::InintCalendarSlice(void)
{
WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "NativeLauncher::InitCalculatorSlice");
SliceProxy *Calendarview_ = new AbilitySliceProxy<CalendarView, CalendarPresenter>;
return;
}
NativeAbility::GetInstance().AddSliceProxy(VIEW_EMOTION, EmotionView);
+ }
+ // 压力监测界面
+ void NativeLauncher::InitStressSlice(void)
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "NativeLauncher::InitBloodPressureSlice");
+ SliceProxy *stressView = new AbilitySliceProxy<StressMainView, StressPresenter>;
+ if (stressView == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "stressView is nullptr");
+ return;
+ }
+ NativeAbility::GetInstance().AddSliceProxy(VIEW_PRESSURE, stressView);
}
// 心率监测界面
void NativeLauncher::InitHeartCheckSlice(void)
}
NativeAbility::GetInstance().AddSliceProxy(VIEW_SAFE_MODE, safemodeView);
}
- //语音助手
+ // 语音助手
void NativeLauncher::InitAssistantSlice(void)
{
WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "NativeLauncher::InitAssistantSlice");
}
NativeAbility::GetInstance().AddSliceProxy(VIEW_ASSISTANT, assistantView);
}
- //时间格式
+ // 时间格式
void NativeLauncher::InitSetTimeFormatSlice()
{
WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "NativeLauncher::InitSetTimeFormatSlice");
{
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "setTimeFormatView is nullptr");
}
- NativeAbility::GetInstance().AddSliceProxy(VIEW_SET_TIME_FORMAT,setTimeFormatView);
+ NativeAbility::GetInstance().AddSliceProxy(VIEW_SET_TIME_FORMAT, setTimeFormatView);
}
/* -------------------------------------------------------------------------- */
// 查找手机
//情绪
//{VIEW_EMOTION, PNG_APPLIST_EMOTION_IMAGE_BIG, PNG_APPLIST_EMOTION_IMAGE, PNG_APPLIST_DEFAULT_IMG, "情绪", STR_EMOTION, nullptr},
//压力
- //{VIEW_STRESS, PNG_APPLIST_STRESS_IMAGE_BIG, PNG_APPLIST_STRESS_IMAGE, PNG_APPLIST_DEFAULT_IMG, "压力", STR_STRESS, nullptr},
+ //{VIEW_PRESSURE, PNG_APPLIST_STRESS_IMAGE_BIG, PNG_APPLIST_STRESS_IMAGE, PNG_APPLIST_DEFAULT_IMG, "压力", STR_STRESS, nullptr},
//疲劳度
//{VIEW_FATIGUE, PNG_APPLIST_FATIGUE_IMAGE_BIG, PNG_APPLIST_FATIGUE_IMAGE, PNG_APPLIST_DEFAULT_IMG, "疲劳度", STR_FATIGUE, nullptr},
#endif
-/***
- * @Date: 2024-07-29 15:38:56
- * @LastEditors: Caisking 3449750381@qq.com
- * @LastEditTime: 2024-07-29 15:42:12
- * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/bloodoxygen/include/StressAnalysisViewView.cpp
- */
-/*
- * Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved.
- * Description: StressAnalysisView view
- * Author:
- * Create: 2021-08-01
- */
-
#ifndef STRESS_ANALYSIS_VIEW_H
#define STRESS_ANALYSIS_VIEW_H
-#include "View.h"
-#include "BaseView.h"
-#include "wearable_log.h"
-#include "UiConfig.h"
-
+#include "components/ui_view_group.h"
+#include "components/ui_label_ext.h"
#include "components/ui_image_animator.h"
-
-#define STOP_SOS "stop_sos"
-
namespace OHOS
{
- class StressAnalysisViewView
+ class StressAnalysisView
{
public:
- StressAnalysisViewView();
- virtual ~StressAnalysisViewView();
- static StressAnalysisViewView *GetInstance(void);
-
- UIViewGroup *StressAnalysisViewInit();
- UIImageAnimatorView *GetImageAnimator();
+ StressAnalysisView();
+ ~StressAnalysisView();
+ static StressAnalysisView *GetInstance(void);
+ UIViewGroup *StressAnalysisInit();
+ void startorstopAnalysisAni(bool state);
private:
- UIImageAnimatorView *imageAnimator{nullptr};
+ void ClearAll(void);
UIViewGroup *group{nullptr};
+ UILabelExt *titleLabel{nullptr};
+ UILabelExt *remindLabel{nullptr};
+ UIImageAnimatorView *StressAnaAni{nullptr};
+ ImageAnimatorInfo StressAnaAniImageInfo[30];
};
}
-
-#endif // 血氧主界面
\ No newline at end of file
+#endif
\ No newline at end of file
#include "stress/include/StressWearView.h"
#include "stress/include/StressFailView.h"
#include "stress/include/StressResultView.h"
+#include "stress/include/StressAnalysisView.h"
namespace OHOS
{
{
STRESSMEASUREVIEW = 0, // 压力测量界面
STRESSUNDERMEASUREVIEW, // 测量中界面
+ STRESSANALYSISEVIEW, // 分析界面
STRESSRESULTVIEW, // 测量结果界面
+ STRESSWEARVIEW, // 佩戴错误界面
+ STRESSFAILVIEW, // 测量失败界面
MAX_STRESSVIEW,
} StressVIEWID;
bool ChangeStressResultView(int16_t);
bool ChangeStressWearView(int16_t);
bool ChangeStressFailView(int16_t);
+ bool ChangeStressAnalysisView(int16_t);
bool ClickFunc(int16_t interface);
void ChangeView(int16_t hideView, int16_t showView);
StressResultView *g_pStressResultView{nullptr};
StressFailView *g_pStressFailView{nullptr};
StressWearView *g_pStressWearView{nullptr};
+ StressAnalysisView *g_pStressAnalysisView{nullptr};
private:
void DeInit();
--- /dev/null
+#ifndef STRESS_MODEL_H
+#define STRESS_MODEL_H
+
+#include <stdint.h>
+#include <string>
+
+
+namespace OHOS {
+// 血压检测状态
+enum class StressState {
+ //结束
+ STRESS_End = 0,
+ //压力检测中
+ STRESS_MEASURE,
+ //结果分析中
+ STRESS_ANALYSIS,
+ //普通状态
+ STRESS_NORMAL,
+ //暂停
+ STRESS_PAUSE,
+
+ STRESS_STATE_MAX,
+};
+// 压力检测结果
+enum class StressRESULT {
+ NOT_TESTED = 0, // 未检测
+ SUCCESS, // 检测成功
+ NOT_WORN, // 未佩戴检测
+ TIMEOUT, // 检测超时
+ HIGH_RESULT, // 检测结果过高
+ LOW_RESULT, // 检测结果过低
+ INVALID_DATA // 无效数据
+};
+
+#define Stress_ANLYSISI_TIME_MAX 5
+
+class StressModel {
+public:
+ StressModel();
+ ~StressModel();
+ static StressModel *GetInstance();
+
+ //当前状态管理
+ void Stress_SetState(StressState state);
+ StressState GetCurrentState();
+ //控制血压检测
+ void Stress_Control(StressState state);
+
+ ///////////////////////////////////////////////
+ void Stress_StartTimer(uint32_t interval = 1*1000);// 1s定时器
+ void Stress_StopTimer(void);
+
+
+private:
+ StressState current_state = StressState::STRESS_NORMAL;
+};
+} // namespace OHOS
+
+#endif
#include "KeyInputListener.h"
#include "common/key_code.h"
#include "stress/include/StressMainView.h"
+#include "stress/include/StressModel.h"
namespace OHOS
{
-/***
- * @Date: 2024-04-15 10:55:58
- * @LastEditors: Caisking 3449750381@qq.com
- * @LastEditTime: 2024-07-31 14:36:25
- * @FilePath: /FD230/code/sdk/application/wearable/fd230/nativeapp/nativeui/bloodpressure/src/StressAnalysisViewView.cpp
- */
-
-#include "ui_resource_image.h"
-#include "UiConfig.h"
+#include "stress/include/StressAnalysisView.h"
+#include "stress/include/StressPresenter.h"
#include "wearable_log.h"
-#include "uicomponents/UIComponents.h"
-#include "bloodpressure/include/detection/StressPresenter.h"
-#include "bloodpressure/include/detection/StressAnalysisViewView.h"
-#include "bloodpressure/include/BPModel.h"
+#include "UiConfig.h"
+#include "common/image_cache_manager.h"
namespace OHOS
{
- // 动态刷新设置
- static constexpr uint16_t IMAGE_SIZE = 466;
- static constexpr uint16_t IMAGE_POSITION_Y = 0;
- static constexpr uint16_t IMAGE_POSITION_X = 0;
- static constexpr uint16_t BP_SOS_IMAGE_SIZE = 30;
- static constexpr uint16_t BP_SOS_IMAGE_SPEED = 40;
- static ImageAnimatorInfo g_imageAnimatorInfo_blood[30] = {
- {PNG_BP_SOS_IMAGE_01, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
- {PNG_BP_SOS_IMAGE_02, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
- {PNG_BP_SOS_IMAGE_03, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
- {PNG_BP_SOS_IMAGE_04, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
- {PNG_BP_SOS_IMAGE_05, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
- {PNG_BP_SOS_IMAGE_06, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
- {PNG_BP_SOS_IMAGE_07, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
- {PNG_BP_SOS_IMAGE_08, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
- {PNG_BP_SOS_IMAGE_09, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
- {PNG_BP_SOS_IMAGE_10, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
- {PNG_BP_SOS_IMAGE_11, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
- {PNG_BP_SOS_IMAGE_12, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
- {PNG_BP_SOS_IMAGE_13, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
- {PNG_BP_SOS_IMAGE_14, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
- {PNG_BP_SOS_IMAGE_15, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
- {PNG_BP_SOS_IMAGE_16, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
- {PNG_BP_SOS_IMAGE_17, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
- {PNG_BP_SOS_IMAGE_18, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
- {PNG_BP_SOS_IMAGE_19, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
- {PNG_BP_SOS_IMAGE_20, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
- {PNG_BP_SOS_IMAGE_21, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
- {PNG_BP_SOS_IMAGE_22, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
- {PNG_BP_SOS_IMAGE_23, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
- {PNG_BP_SOS_IMAGE_24, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
- {PNG_BP_SOS_IMAGE_25, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
- {PNG_BP_SOS_IMAGE_26, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
- {PNG_BP_SOS_IMAGE_27, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
- {PNG_BP_SOS_IMAGE_28, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
- {PNG_BP_SOS_IMAGE_29, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
- {PNG_BP_SOS_IMAGE_30, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
+ const char *StressAnaAniImagePath[] = {
+ PNG_STRESS_IMAGE_00,
+ PNG_STRESS_IMAGE_01,
+ PNG_STRESS_IMAGE_02,
+ PNG_STRESS_IMAGE_03,
+ PNG_STRESS_IMAGE_04,
+ PNG_STRESS_IMAGE_05,
+ PNG_STRESS_IMAGE_06,
+ PNG_STRESS_IMAGE_07,
+ PNG_STRESS_IMAGE_08,
+ PNG_STRESS_IMAGE_09,
+ PNG_STRESS_IMAGE_10,
+ PNG_STRESS_IMAGE_11,
+ PNG_STRESS_IMAGE_12,
+ PNG_STRESS_IMAGE_13,
+ PNG_STRESS_IMAGE_14,
+ PNG_STRESS_IMAGE_15,
+ PNG_STRESS_IMAGE_16,
+ PNG_STRESS_IMAGE_17,
+ PNG_STRESS_IMAGE_18,
+ PNG_STRESS_IMAGE_19,
+ PNG_STRESS_IMAGE_20,
+ PNG_STRESS_IMAGE_21,
+ PNG_STRESS_IMAGE_22,
+ PNG_STRESS_IMAGE_23,
+ PNG_STRESS_IMAGE_24,
+ PNG_STRESS_IMAGE_25,
+ PNG_STRESS_IMAGE_26,
+ PNG_STRESS_IMAGE_27,
+ PNG_STRESS_IMAGE_28,
+ PNG_STRESS_IMAGE_29,
};
- static StressAnalysisViewView *g_pStressAnalysisViewView{nullptr};
+ static StressAnalysisView *g_pStressAnalysisView = nullptr;
+ StressAnalysisView::StressAnalysisView()
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "StressAnalysisView::StressAnalysisView");
+ g_pStressAnalysisView = this;
+ }
+
+ StressAnalysisView::~StressAnalysisView()
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "StressAnalysisView::~StressAnalysisView");
+ ClearAll();
+ g_pStressAnalysisView = nullptr;
+ }
- StressAnalysisViewView::StressAnalysisViewView()
+ StressAnalysisView *StressAnalysisView::GetInstance(void)
{
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "StressAnalysisViewView::StressAnalysisViewView");
- g_pStressAnalysisViewView = this;
+ return g_pStressAnalysisView;
}
- StressAnalysisViewView::~StressAnalysisViewView()
+
+ void StressAnalysisView::ClearAll(void)
{
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "StressAnalysisViewView::~StressAnalysisViewView");
- if(group)
+ if (group)
{
- group->RemoveAll();
- if(imageAnimator)
+ group->RemoveAll();
+ delete group;
+ group = nullptr;
+ delete titleLabel;
+ titleLabel = nullptr;
+ delete remindLabel;
+ remindLabel = nullptr;
+ if (StressAnaAni)
{
- imageAnimator->Stop();
- delete imageAnimator;
- imageAnimator = nullptr;
+ StressAnaAni->Stop();
+ delete StressAnaAni;
+ StressAnaAni = nullptr;
}
}
- delete group;
- group = nullptr;
- g_pStressAnalysisViewView = nullptr;
}
- StressAnalysisViewView *StressAnalysisViewView::GetInstance()
+ void StressAnalysisView::startorstopAnalysisAni(bool state)
{
- return g_pStressAnalysisViewView;
+ if (StressAnaAni)
+ {
+ if (state)
+ {
+ StressAnaAni->Start();
+ }
+ else
+ {
+ StressAnaAni->Stop();
+ }
+ }
}
- /***
- * @description:
- * @return 是否初始化成功
- */
- UIViewGroup *StressAnalysisViewView::StressAnalysisViewInit()
+ UIViewGroup *StressAnalysisView::StressAnalysisInit()
{
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "bool StressAnalysisViewView::InitView()");
- group = new UIViewGroup();
- group->SetPosition(0, 0, Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight());
-
- imageAnimator = new UIImageAnimatorView();
- imageAnimator->SetImageAnimatorSrc(g_imageAnimatorInfo_blood, BP_SOS_IMAGE_SIZE, BP_SOS_IMAGE_SPEED);
- imageAnimator->SetRepeat(true);
- group->Add(imageAnimator);
-
-
-
+ if (group == nullptr)
+ {
+ group = new UIViewGroup();
+ if (group == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "group null!");
+ return nullptr;
+ }
+ }
+ group->SetPosition(0, 0, HORIZONTAL_RESOLUTION, VERTICAL_RESOLUTION);
+ group->SetTouchable(true);
+ group->SetDraggable(true);
+ // UIView::OnDragListener *dragListener = (UIView::OnDragListener *)OHOS::StressPresenter::GetInstance();
+ // group->SetOnDragListener(dragListener);
+ /* -------------------------------------------------------------------------- */
+ StressAnaAni = new UIImageAnimatorView();
+ if (StressAnaAni == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AlipayBindAni::AlipayInitImageAni new StressAnaAni fail");
+ return nullptr;
+ }
+ for (uint8_t i = 0; i < (sizeof(StressAnaAniImagePath) / sizeof(StressAnaAniImagePath[0])); i++)
+ {
+ StressAnaAniImageInfo[i].imageInfo = ImageCacheManager::GetInstance().LoadSingleRes(StressAnaAniImagePath[i]);
+ StressAnaAniImageInfo[i].imageType = IMG_SRC_IMAGE_INFO;
+ StressAnaAniImageInfo[i].pos.x = 0;
+ StressAnaAniImageInfo[i].pos.y = 0;
+ StressAnaAniImageInfo[i].width = 466;
+ StressAnaAniImageInfo[i].height = 466;
+ }
+ StressAnaAni->SetPosition(0, 0, 466, 466);
+ StressAnaAni->SetImageAnimatorSrc(StressAnaAniImageInfo, (sizeof(StressAnaAniImagePath) / sizeof(StressAnaAniImagePath[0])), 100);
+ StressAnaAni->SetRepeat(true);
+ StressAnaAni->SetAutoEnable(false);
+ StressAnaAni->SetResizeMode(UIImageView::FILL);
+ group->Add(StressAnaAni);
+ /* -------------------------------------------------------------------------- */
+ if (titleLabel == nullptr)
+ {
+ titleLabel = new UILabelExt();
+ if (titleLabel == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "titleLabel null!");
+ return nullptr;
+ }
+ }
+ titleLabel->SetPosition((HORIZONTAL_RESOLUTION - 300) / 2, 50, 300, 35);
+ titleLabel->SetStyle(STYLE_TEXT_FONT, 30);
+ titleLabel->SetStyle(STYLE_LINE_HEIGHT, 35);
+ titleLabel->SetText("压力");
+ titleLabel->SetLineBreakMode(UILabel::LINE_BREAK_OSCILLATION);
+ titleLabel->SetRollSpeed(23);
+ titleLabel->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
+ titleLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);
+ group->Add(titleLabel);
+ /* -------------------------------------------------------------------------- */
+ if (remindLabel == nullptr)
+ {
+ remindLabel = new UILabelExt();
+ if (remindLabel == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "remindLabel null!");
+ return nullptr;
+ }
+ }
+ remindLabel->SetPosition((HORIZONTAL_RESOLUTION - 300) / 2, 360, 300, 35);
+ remindLabel->SetStyle(STYLE_TEXT_FONT, 30);
+ remindLabel->SetStyle(STYLE_LINE_HEIGHT, 35);
+ remindLabel->SetText("数据分析中,请耐心等待结果");
+ remindLabel->SetTextColor(Color::GetColorFromRGBA(0xff, 0x3a, 0x3a, 0xff));
+ remindLabel->SetLineBreakMode(UILabel::LINE_BREAK_WRAP);
+ remindLabel->SetRollSpeed(23);
+ remindLabel->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
+ remindLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);
+ group->Add(remindLabel);
return group;
}
-
- UIImageAnimatorView *StressAnalysisViewView::GetImageAnimator()
- {
- return imageAnimator;
- }
-
-
-}
+}
\ No newline at end of file
delete g_pStressUnderMeasureView;
g_pStressUnderMeasureView = nullptr;
}
- if (g_pStressResultView)
+ if (g_pStressResultView)
{
delete g_pStressResultView;
g_pStressResultView = nullptr;
}
return true;
}
- bool StressMainView::ChangeStressUnderMeasureView(int16_t thisView)
+ bool StressMainView::ChangeStressUnderMeasureView(int16_t thisView)
{
// 检查视图是否已初始化
if (group[thisView] == nullptr)
}
return true;
}
+ bool StressMainView::ChangeStressAnalysisView(int16_t thisView)
+ {
+ // 检查视图是否已初始化
+ if (group[thisView] == nullptr)
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "stressView::ChangeStressResultView");
+ g_pStressAnalysisView = new StressAnalysisView();
+ if (g_pStressAnalysisView == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "stressView:: new scrollView[%d] fail", thisView);
+ return false;
+ }
+ // 初始化视图并添加到视图组
+ group[thisView] = g_pStressAnalysisView->StressAnalysisInit();
+ container_->Add(group[thisView]);
+ }
+ return true;
+ }
/**
* 视图映射结构体 - 将视图ID映射到对应的视图切换函数
static const StressViewMapper ViewMapper[] = {
{STRESSMEASUREVIEW, &StressMainView::ChangeStressMeasureView},
{STRESSUNDERMEASUREVIEW, &StressMainView::ChangeStressUnderMeasureView},
-
+ {STRESSANALYSISEVIEW, &StressMainView::ChangeStressAnalysisView},
+ {STRESSRESULTVIEW, &StressMainView::ChangeStressResultView},
+ {STRESSWEARVIEW, &StressMainView::ChangeStressWearView},
+ {STRESSFAILVIEW, &StressMainView::ChangeStressFailView},
};
bool StressMainView::ClickFunc(int16_t interface)
{
InitLabel(titleLable, 200, 30, 70, 45, "titleLable", "压力", DEFAULT_VECTOR_FONT_FILENAME, 35);
- InitLabel(resultremindLable, 68, 211, 337, 100, "resultremindLable", "---", DEFAULT_VECTOR_FONT_FILENAME, 100);
+ InitLabel(resultremindLable, 68, 239, 337, 100, "resultremindLable", "---", DEFAULT_VECTOR_FONT_FILENAME, 100);
resultremindLable->SetLineBreakMode(UILabel::LINE_BREAK_WRAP);
resultremindLable->SetTextColor(Color::White());
/*初始化检测时间*/
bool StressMeasureView::Initbackground()
{
error = new UIImageView();
- error->SetPosition(145, 75, 200, 200);
+ error->SetPosition(140, 65, 111, 118);
error->SetSrc(BPBACKPATH);
group->Add(error);
return true;
--- /dev/null
+#include "stress/include/StressModel.h"
+#include "stress/include/StressPresenter.h"
+#include "stress/include/StressMainView.h"
+#include "stress/include/StressAnalysisView.h"
+
+
+
+
+#include "wearable_log.h"
+#include <cmsis_os.h>
+#include <cmsis_os2.h>
+#include <service/graphic_service.h>
+
+#include "AppViewIDs.h"
+#include "ConfigModel.h"
+#include "NativeAbility.h"
+
+#include "battery_hal.h"
+#include "custom_utils.h"
+#include "ppg_service.h"
+
+namespace OHOS
+{
+/**
+ * @brief Constructor for the StressModel class.
+ */
+
+#define STRESS_MEASURE_TIME_MAX 30
+#define STRESS_ANALYSIS_TIME_MAX 5
+
+ // 声明定时器变量
+ static osTimerId_t g_timer = nullptr;
+ static int Time = 30;
+ static StressState statefalg = StressState::STRESS_MEASURE;
+
+ StressModel::StressModel() {}
+ StressModel::~StressModel() {}
+ StressModel *StressModel::GetInstance(void)
+ {
+ static StressModel instance;
+ return &instance;
+ }
+
+
+ // 管理当前状态
+ void StressModel::Stress_SetState(StressState state) { current_state = state; }
+ StressState StressModel::GetCurrentState() { return current_state; }
+
+ // 进行传感器、定时器等控制
+ void StressModel::Stress_Control(StressState state)
+ {
+ if (state == current_state)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"Stress_Control: Already in current state");
+ return;
+ }
+ switch (state)
+ {
+ case StressState::STRESS_NORMAL:
+ {
+ /*
+ 关闭定时器
+ 关闭传感器
+ 关闭常亮
+ */
+ Stress_StopTimer();
+ ScreenAlwaysOnCtr(CANCEL_SCREEN_ALWAYS_ON);
+ Time = STRESS_MEASURE_TIME_MAX;
+ break;
+ }
+ case StressState::STRESS_MEASURE:
+ {
+ /*
+ 开启定时器
+ 开启传感器
+ 开启常亮
+ */
+ Stress_StartTimer();
+ ScreenAlwaysOnCtr(OPEN_SCREEN_ALWAYS_ON); // 后期 周期被动状态 需要做区别
+
+ if (Time != STRESS_MEASURE_TIME_MAX)
+ Time = STRESS_MEASURE_TIME_MAX; // 重置时间
+
+ break;
+ }
+ case StressState::STRESS_ANALYSIS:
+ {
+ /*
+ 开启定时器
+ 开启传感器
+ 开启常亮
+ */
+ Stress_StartTimer();
+ ScreenAlwaysOnCtr(OPEN_SCREEN_ALWAYS_ON); // 后期 周期被动状态 需要做区别
+
+ if (Time != STRESS_ANALYSIS_TIME_MAX)
+ Time = STRESS_ANALYSIS_TIME_MAX; // 重置时间
+
+ break;
+ }
+
+ default:
+ /*未知状态,全部状态重置*/
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Stress_Control: Invalid state");
+ Stress_SetState(StressState::STRESS_NORMAL);
+ Stress_StopTimer();
+ Time = STRESS_MEASURE_TIME_MAX;
+ return;
+ }
+ // 更新状态
+ Stress_SetState(state);
+ }
+ ///////////////////////////////////////////////////////////////////////////////////////
+
+ /*定时器到期时的处理*/
+ static void Stress_TimerCallbackProc(int data)
+ {
+
+ // 倒计时
+ Time--;
+ // 提前检查无效时间
+ if (Time < 0)
+ {
+ StressModel::GetInstance()->Stress_StopTimer();
+ StressModel::GetInstance()->Stress_SetState(StressState::STRESS_NORMAL);
+ if (statefalg == StressState::STRESS_ANALYSIS) //在分析中
+ {
+ StressMainView::GetInstance()->ChangeView(STRESSANALYSISEVIEW,STRESSRESULTVIEW);
+ StressAnalysisView::GetInstance()->startorstopAnalysisAni(false);
+ statefalg = StressState::STRESS_MEASURE;
+ }
+ else if(statefalg == StressState::STRESS_MEASURE)//在检测中
+ {
+ // 测量成功
+ StressModel::GetInstance()->Stress_Control(StressState::STRESS_ANALYSIS);
+ StressMainView::GetInstance()->ChangeView(STRESSUNDERMEASUREVIEW, STRESSANALYSISEVIEW);
+ StressAnalysisView::GetInstance()->startorstopAnalysisAni(true);
+ statefalg = StressState::STRESS_ANALYSIS;
+
+
+ // 测量失败
+
+ }
+ return;
+ }
+
+ StressState current_state_time = StressModel::GetInstance()->GetCurrentState();
+ // 根据状态处理
+ switch (current_state_time)
+ {
+ case StressState::STRESS_NORMAL:
+ StressModel::GetInstance()->Stress_StopTimer();
+ StressModel::GetInstance()->Stress_SetState(StressState::STRESS_NORMAL);
+ return;
+
+ case StressState::STRESS_MEASURE:
+ {
+ break;
+ }
+ case StressState::STRESS_ANALYSIS:
+ {
+ break;
+ }
+
+ default:
+ StressModel::GetInstance()->Stress_StopTimer();
+ // 显示错误界面提示
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "current_state is error!!");
+ return;
+ }
+ }
+
+ /*
+ * @brief 回调函数
+ */
+ static void Stress_TimerCallback(int data)
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Stress_TimerCallback %d", data);
+ GraphicService::GetInstance()->PostGraphicEvent(
+ std::bind(Stress_TimerCallbackProc, data));
+ }
+
+ /*
+ * @brief 开启定时器函数
+ * @param interval 时间间隔,单位ms
+ */
+ void StressModel::Stress_StartTimer(uint32_t interval)
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "StressModel::Stress_StartTimer");
+ /* -------------------------- 1.检查定时器是否已经存在,如果存在则返回
+ * ------------------------- */
+ if (g_timer != nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Timer already exists!!");
+ return;
+ }
+
+ /* --------------------------------- 2.创建定时器
+ * -------------------------------- */
+ g_timer = osTimerNew((osTimerFunc_t)Stress_TimerCallback, osTimerPeriodic,
+ nullptr, nullptr);
+ // 检查定时器创建是否成功
+ if (g_timer == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Timer create failed!!");
+ return;
+ }
+
+ /* ----------------------------- 3.将毫秒转换为系统时钟节拍数
+ * ---------------------------- */
+ int tick = osMs2Tick(interval);
+
+ /* --------------------------------- 4.启动定时器
+ * -------------------------------- */
+ osStatus_t ret = osTimerStart(g_timer, tick);
+ /* -------------------- 5.检查定时器启动是否成功,如果启动失败,删除定时器并置为
+ * nullptr -------------------- */
+ if (ret != osOK)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "osTimerDelete failed, ret = %lx!!",
+ ret);
+ if (g_timer != nullptr)
+ {
+ ret = osTimerDelete(g_timer);
+ }
+ g_timer = nullptr;
+ return;
+ }
+ }
+ /*
+ * @brief 停止定时器
+ */
+ void StressModel::Stress_StopTimer(void)
+ {
+ // 检查定时器是否存在
+ if (g_timer != nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "StressModel::Stress_StopTimer");
+ osTimerStop(g_timer);
+ // 删除定时器并置为 nullptr
+ osStatus_t ret = osTimerDelete(g_timer);
+ if (ret != osOK)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
+ "osTimerDelete failed, ret = %lx!!", ret);
+ }
+ g_timer = nullptr;
+ }
+ }
+
+} // namespace OHOS
void StressPresenter::OnStop(void)
{
-
}
bool StressPresenter::OnDrag(UIView &view, const DragEvent &event)
bool StressPresenter::OnClick(UIView &view, const ClickEvent &event)
{
- std::string viewId = view.GetViewId();
-
- std::map<std::string, std::pair<int16_t, int16_t>> viewIdMap = {
- {STARTBUTTON, {STRESSMEASUREVIEW, STRESSUNDERMEASUREVIEW}},
- {UNDERBUTTON, {STRESSMEASUREVIEW, STRESSUNDERMEASUREVIEW}},
-
- };
- auto it = viewIdMap.find(viewId);
- if (it != viewIdMap.end())
+ if (strcmp(view.GetViewId(), STARTBUTTON) == 0)
{
- StressMainView::GetInstance()->ChangeView(it->second.first, it->second.second);
- return true;
+ StressModel::GetInstance()->Stress_Control(StressState::STRESS_MEASURE);
+ StressMainView::GetInstance()->ChangeView(STRESSMEASUREVIEW, STRESSUNDERMEASUREVIEW);
}
+
return true;
WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "StressPresenter::OnClick");
}
{
InitLabel(titleLable, 200, 30, 70, 45, "titleLable", "压力", DEFAULT_VECTOR_FONT_FILENAME, 35);
- InitLabel(resultremindLable, 68, 211, 337, 100, "resultremindLable", "30", DEFAULT_VECTOR_FONT_FILENAME, 100);
+ InitLabel(resultremindLable, 68, 239, 337, 100, "resultremindLable", "30", DEFAULT_VECTOR_FONT_FILENAME, 100);
resultremindLable->SetLineBreakMode(UILabel::LINE_BREAK_WRAP);
resultremindLable->SetTextColor(Color::White());
- InitLabel(resultLable, 200, 352, 337, 45, "resultremindLable", "正常", DEFAULT_VECTOR_FONT_FILENAME, 35);
+ InitLabel(resultLable, 200, 362, 70, 45, "resultremindLable", "正常", DEFAULT_VECTOR_FONT_FILENAME, 35);
/*初始化检测时间*/
group->Add(titleLable);
group->Add(resultremindLable);
bool StressResultView::Initbackground()
{
error = new UIImageView();
- error->SetPosition(145, 75, 200, 200);
+ error->SetPosition(140, 65, 111, 118);
error->SetSrc(BPBACKPATH);
group->Add(error);
return true;
{
InitLabel(titleLable, 200, 30, 70, 45, "titleLable", "压力", DEFAULT_VECTOR_FONT_FILENAME, 35);
- InitLabel(resultremindLable, 68, 211, 337, 100, "resultremindLable", "---", DEFAULT_VECTOR_FONT_FILENAME, 100);
+ InitLabel(resultremindLable, 68, 239, 337, 100, "resultremindLable", "---", DEFAULT_VECTOR_FONT_FILENAME, 100);
resultremindLable->SetLineBreakMode(UILabel::LINE_BREAK_WRAP);
resultremindLable->SetTextColor(Color::White());
/*初始化检测时间*/
bool StressUnderMeasureView::Initbackground()
{
error = new UIImageView();
- error->SetPosition(145, 75, 111, 118);
+ error->SetPosition(140, 65, 111, 118);
error->SetSrc(BPBACKPATH);
group->Add(error);
return true;