/*
* @Author: luozheng 1732036298@qq.com
* @Date: 2024-06-20 15:14:43
- * @LastEditors: SnickerSun snickersun@163.com
- * @LastEditTime: 2024-07-05 10:32:12
+ * @LastEditors: luozheng 1732036298@qq.com
+ * @LastEditTime: 2024-07-04 18:31:22
* @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/aivoice/include/AiVoiceModel.h
*/
#ifndef AI_VOICE_MODEL_H
uint8_t GetChatContentListCount(void);
// 更新和清空问题及回答
+ void RemoveLastTwoItemsOrClear();
bool UpdateUserQuestionStr(void);
bool UpdateAiAnswerStr(void);
void ClearQuestionAndAiAnswerStr(void);
uint8_t ChatContentListCount{0}; // 列表数量
static const uint16_t MaxChatContentListCount = 2; // 对话列表最大数量
ChatContentItem chatTtems[MaxChatContentListCount] = {0, "", false}; // 对话项数组
+ bool entryTextViewState{false}; // 进入返回结果界面的标志
};
}
* @Author: luozheng 1732036298@qq.com
* @Date: 2024-06-20 14:44:22
* @LastEditors: luozheng 1732036298@qq.com
- * @LastEditTime: 2024-07-02 18:58:24
+ * @LastEditTime: 2024-07-03 19:31:46
* @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/aivoice/include/AiVoicePresenter.h
*/
#ifndef AI_VOICE_PRESENTER_H
* @Author: luozheng 1732036298@qq.com
* @Date: 2024-06-20 15:14:50
* @LastEditors: SnickerSun snickersun@163.com
- * @LastEditTime: 2024-07-05 10:32:00
+ * @LastEditTime: 2024-07-05 10:35:42
* @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/aivoice/src/AiVoiceModel.cpp
*/
#include "aivoice/include/AiVoiceModel.h"
return false;
}
Aipresenter_->JumpToReturnResultTextView();
+ entryTextViewState = false;
return true;
}
return false;
}
- chatTtems[ChatContentListCount].index = item.index;
- chatTtems[ChatContentListCount].text = item.text;
- chatTtems[ChatContentListCount].isAiAnswer = item.isAiAnswer;
+ chatTtems[ChatContentListCount] = item;
ChatContentListCount++;
return true;
}
else
{
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Chat content list or adapter is nullptr!!");
return false;
}
return true;
}
- /*更新用户问题字符串*/
- bool AiVoiceModel::UpdateUserQuestionStr(void)
+ // 函数定义:移除列表的最后两项或清空列表
+ void AiVoiceModel::RemoveLastTwoItemsOrClear()
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AiVoiceModel::RemoveLastTwoItemsOrClear");
+ AivoiceReturnResultTextView *p_AivoiceReturnResultTextView = AivoiceReturnResultTextView::GetInstance();
+ if (p_AivoiceReturnResultTextView == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AivoiceReturnResultTextView::GetInstance fail!!");
+ return;
+ }
+ // 获取适配器
+ AivoiceChatContentListAdapter *adapter = p_AivoiceReturnResultTextView->GetAivoiceChatContentListAdapter();
+ if (adapter != nullptr)
+ {
+ // 获取列表的大小
+ size_t listSize = adapter->GetChatContentItem().size();
+
+ // 移除最后两项或清空列表
+ if (listSize >= 2)
+ {
+ auto it = adapter->GetChatContentItem().end();
+ std::advance(it, -2); // 移动迭代器到倒数第二项的位置
+ adapter->GetChatContentItem().erase(it, adapter->GetChatContentItem().end());
+ }
+ else if (listSize == 1)
+ {
+ // 如果列表只有一项,直接清空
+ adapter->GetChatContentItem().clear();
+ }
+ ChatContentListCount -= (listSize < 2 ? listSize : 2);
+ }
+ }
+
+ // 在需要的地方调用该函数
+ // 例如:
+ // RemoveLastTwoItemsOrClear(p_AivoiceReturnResultTextView);
+
+ /* 更新用户问题字符串 */
+ bool AiVoiceModel::UpdateUserQuestionStr()
{
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AiVoiceModel::UpdateUserQuestionStr");
+ RemoveLastTwoItemsOrClear();
+
+ if (!AddUserQuestionToChatItems())
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AddUserQuestionToChatItems fail!!");
+ return false;
+ }
+
+ // 更新显示列表
+ AivoiceReturnResultTextView *p_AivoiceReturnResultTextView = AivoiceReturnResultTextView::GetInstance();
+ if (!p_AivoiceReturnResultTextView)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AivoiceReturnResultTextView::GetInstance fail!!");
+ return false;
+ }
+
+ AivoiceChatContentListAdapter *adapter = p_AivoiceReturnResultTextView->GetAivoiceChatContentListAdapter();
+ if (adapter && !adapter->GetChatContentItem().empty())
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GetChatContentListCount() - 1 = %d,%d", GetChatContentListCount() - 1, __LINE__);
+ adapter->GetChatContentItem().push_back(chatTtems[GetChatContentListCount() - 1]);
+ p_AivoiceReturnResultTextView->GetChatContentList()->RefreshList();
+ }
+ else
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Chat content adapter is nullptr!!");
+ return false;
+ }
+
return true;
}
{
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AiVoiceModel::UpdateAiAnswerStr");
- // 获取 ChatContentListCount
int index = GetChatContentListCount() - 1;
if (index < 0 || index >= MaxChatContentListCount)
{
return false;
}
- // 更新 chatTtems 中的 AI 回答内容
- chatTtems[index].index = index;
- chatTtems[index].text = GetAiAnswerStr();
- chatTtems[index].isAiAnswer = true;
+ if (chatTtems[index].isAiAnswer) // 处理ai1的多段回答
+ {
+ ChatContentListCount--;
+ }
+
+ if (!AddAiAnswerToChatItems())
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AddAiAnswerToChatItems fail!!");
+ return false;
+ }
// 更新显示列表
AivoiceReturnResultTextView *p_AivoiceReturnResultTextView = AivoiceReturnResultTextView::GetInstance();
- if (p_AivoiceReturnResultTextView == nullptr)
+ if (!p_AivoiceReturnResultTextView)
{
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AivoiceReturnResultTextView::GetInstance fail!!");
return false;
adapter->GetChatContentItem().pop_back();
}
// 将更新后的 AI 回答内容添加到列表
- adapter->GetChatContentItem().push_back(chatTtems[index]);
+ adapter->GetChatContentItem().push_back(chatTtems[GetChatContentListCount() - 1]);
p_AivoiceReturnResultTextView->GetChatContentList()->RefreshList();
}
/*设置用户问题的字符串*/
void AiVoiceModel::SetUserQuestionStr(std::string str)
{
+ /* -------------------------------------------------------------------------- */
userQuestionStr = str;
+ /* -------------------------------------------------------------------------- */
+ if (!UpdateUserQuestionStr())
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AiVoiceModel::UpdateUserQuestionStr fail!!");
+ }
}
/*获取Ai回答的字符串*/
/*设置Ai回答的字符串*/
void AiVoiceModel::SetAiAnswerStrStr(std::string str)
{
- SendMsgToUIService(UI_AI_RESPONSE_USERDATA, 0, nullptr, 0);
+ if (!entryTextViewState)
+ {
+ SendMsgToUIService(UI_AI_RESPONSE_USERDATA, 0, nullptr, 0);
+ entryTextViewState = true; //进入返回结果界面的标志 避免重复发消息
+ }
+ /* -------------------------------------------------------------------------- */
aiAnswerStr += str;
+ /* -------------------------------------------------------------------------- */
+ if (!UpdateAiAnswerStr())
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AiVoiceModel::UpdateAiAnswerStr fail!!");
+ }
}
/*清空上次用户问题和Ai回答字符串*/
chatTtems[i].isAiAnswer = false;
}
ChatContentListCount = 0;
-
+ entryTextViewState = false;
entryTimeoutFlag = false;
AIVoice_StopTimer();
ClearQuestionAndAiAnswerStr();
* @Author: luozheng 1732036298@qq.com
* @Date: 2024-06-20 15:11:17
* @LastEditors: SnickerSun snickersun@163.com
- * @LastEditTime: 2024-07-05 10:12:51
+ * @LastEditTime: 2024-07-05 10:35:34
* @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/aivoice/src/AiVoicePresenter.cpp
*/
#include "AppViewIDs.h"
#include <unordered_map> // For std::unordered_map
#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);
+#endif
model = &AiVoiceModel::GetInstance();
g_pAiVoicePresenter = this;
}
AiVoicePresenter::~AiVoicePresenter()
{
+#if LEAK_CHECK
+ MemCheck::GetInstance().EnableLeakCheck(false);
+#endif
g_pAiVoicePresenter = nullptr;
}
else
{
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AiVoicePresenter::JumpToReturnResultTextView fail");
- // return false;
- }
- if (!model->UpdateAiAnswerStr())
- {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "UpdateUserQuestionAndAiAnswerStr fail");
return false;
}
return true;
* @Author: luozheng 1732036298@qq.com
* @Date: 2024-06-26 18:14:24
* @LastEditors: luozheng 1732036298@qq.com
- * @LastEditTime: 2024-07-03 18:42:05
+ * @LastEditTime: 2024-07-04 18:51:18
* @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/main/src/PullUpDownView.cpp
*/
const int NETWORK_TYPE_NO_NETWORK = 0;
const int NETWORK_TYPE_4G = 4;
- bool showNoSignalUI = (sim == 0 || cat1_powerOn == 0 || signal == SIGNAL_NO_SIGNAL);
- bool showNoNetworkUI = (network_on == 0 || cat1_network_type == NETWORK_TYPE_NO_NETWORK);
-
- bool show4GIcon = (cat1_network_type == NETWORK_TYPE_4G);
+ bool showNoSignal = (sim == 0 || cat1_powerOn == 0 || signal == SIGNAL_NO_SIGNAL);
+ bool showNo4GIcon = (network_on == 0 || cat1_network_type == NETWORK_TYPE_NO_NETWORK);
- UpdateCat1NoSignalisplay(showNoSignalUI);
- UpdateCat14GDisplay(show4GIcon);
- UpdateSignalBarDisplay(CalculateSignalBars(signal), !(showNoSignalUI || showNoNetworkUI));
+ if (showNoSignal)
+ {
+ UpdateCat1NoSignalisplay(true);
+ UpdateCat14GDisplay(false);
+ UpdateSignalBarDisplay(CalculateSignalBars(signal), false);
+ }
+ else
+ {
+ UpdateCat1NoSignalisplay(false);
+ UpdateCat14GDisplay(!showNo4GIcon && cat1_network_type == NETWORK_TYPE_4G);
+ UpdateSignalBarDisplay(CalculateSignalBars(signal), true);
+ }
}
+
#endif
// 更新信号强度显示
#include <cywee_hal.h>
#include <dirent.h>
+#include <ppg_service.h>
void ble_set_ai_Question_str(char *buf)
{
printf("频率:%d\r\n",data.freq);
p_ConfigModel->set_condigData_Int(OHOS::ConfigModel::CONFIGMODEL_ITEM_DRINK_FREQ,data.freq);
}
- }
+ }
+ CustomEventPublish(TOPIC_EVENT_DRINKREMINDER,NULL,0);
return;
}
\r
send_big_data(1,data,read_size,file_size,pack_id,pack,0x34,1);\r
pack_id++;\r
- msleep(10);\r
+ msleep(40);\r
\r
} while (read_size==num);\r
free(data);\r
data_info.value = data;\r
data_info.value_len = data_len;\r
errcode_t ret = gatts_notify_indicate(g_ble_server_id, g_ble_conn_id, &data_info);\r
+ if(ret!=ERRCODE_SUCC)\r
+ {\r
+ gatts_notify_indicate(g_ble_server_id, g_ble_conn_id, &data_info);\r
+ }\r
WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "gatts_notify_indicate ret:0x%x. serverid:%u,conn_id:%u,handle:%u.data_len:%d", ret, g_ble_server_id,\r
g_ble_conn_id, g_ble_server_handle,data_len);\r
\r
+/*
+ * @Author: luozheng 1732036298@qq.com
+ * @Date: 2024-06-12 11:44:04
+ * @LastEditors: luozheng 1732036298@qq.com
+ * @LastEditTime: 2024-07-04 15:16:56
+ * @FilePath: /FD230/code/sdk/application/wearable/service/msg_center/include/notify/drinkReminder_notification.h
+ */
#ifndef DRINKREMINDER_NOTIFICATION
#define DRINKREMINDER_NOTIFICATION
UIViewGroup *CreateDrinkReminderView(void);
void FreeDrinkReminderView(void);
- class DrinkReminderViewEventListener : public UIView::OnTouchListener,public UIView::OnDragListener
+ class DrinkReminderViewEventListener : public UIView::OnTouchListener, public UIView::OnDragListener
{
public:
static DrinkReminderViewEventListener &GetInstance();
bool OnRelease(UIView &view, const ReleaseEvent &event) override;
- bool OnDrag(UIView& view, const DragEvent& event) override;
- bool OnDragEnd(UIView& view, const DragEvent& event) override;
+ bool OnDrag(UIView &view, const DragEvent &event) override;
+ bool OnDragEnd(UIView &view, const DragEvent &event) override;
+
+ void SetDrinkReminderTopic(uint16_t topic);
+ uint16_t GetDrinkReminderTopic(void);
+ bool IsDrinkReminderTimerOpen(void);
+ int DrinkReminderOpenState(void);
+ uint32_t GetDrinkReminderIntervalTime(void);
+ bool IsDrinkReminderTime(void);
+ void DrinkReminder_StartTimer();
+ void DrinkReminder_StopTimer(void);
private:
DrinkReminderViewEventListener();
DrinkReminderViewEventListener(const DrinkReminderViewEventListener &) = delete;
const DrinkReminderViewEventListener &operator=(const DrinkReminderViewEventListener &) = delete;
bool X_DRAG_FLAG{false};
-
+ int frequency{0};
+ uint16_t drinkReminderTopic;
+ bool timerOpen{false}; // 定时器是否开启
};
}
}
//喝水提醒通知
-void MsgCenterNotifyDrinkReminderProc(const Topic topic, Request* req)
+void MsgCenterNotifyDrinkReminderProc(const Topic topic, Request *req)
{
unused(topic);
unused(req);
WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "MsgCenterNotifyDrinkReminderProc !");
- NotificationManager::GetInstance()->SetNotifyPriority(PRIORITY_TWO);
- NotificationManager::GetInstance()->ShowNotify(showDrinkReminderNotify, (uint16_t)topic, true);
+ int state = DrinkReminderViewEventListener::GetInstance().DrinkReminderOpenState();
+ switch (state)
+ {
+ case 0:
+ if (DrinkReminderViewEventListener::GetInstance().IsDrinkReminderTimerOpen())
+ {
+ DrinkReminderViewEventListener::GetInstance().DrinkReminder_StopTimer();
+ }
+
+ break;
+ case 1:
+ if (DrinkReminderViewEventListener::GetInstance().IsDrinkReminderTimerOpen())
+ {
+ DrinkReminderViewEventListener::GetInstance().DrinkReminder_StopTimer();
+ }
+ // uapi_set_screen_on_api();
+ // NotificationManager::GetInstance()->ShowNotify(showDrinkReminderNotify, (uint16_t)topic, true);
+
+ break;
+ case 2:
+ if (!DrinkReminderViewEventListener::GetInstance().IsDrinkReminderTimerOpen())
+ {
+ DrinkReminderViewEventListener::GetInstance().DrinkReminder_StartTimer();
+ }
+ break;
+ default:
+ break;
+ }
}
void MsgCenterNotifyActivityProc(const Topic topic, Request* req)
#ifdef FD230
#include "language/font/ui_resource_string.h"
#endif
-#include <UIComponents.h>
-
+#include <cmsis_os2.h>
+#include <cmsis_os.h>
+#include <ohos_types.h>
+#include <service/graphic_service.h>
+#include "ConfigModel.h"
+#include <msg_center.h>
+#include <power_display_service.h>
+#include <custom_utils.h>
namespace OHOS
{
UIViewGroup *DrinkReminderGroupView{nullptr};
UILabelExt *DrinkReminderTitleLabel{nullptr}; // 标题: 喝水提醒
UIImageView *DrinkReminderImage{nullptr};
- UILabel *DrinkReminderNoteLabel{nullptr}; // 喝水提醒note
+ UILabelExt *DrinkReminderNoteLabel{nullptr}; // 喝水提醒note
UILabelExt *DrinkReminderLabel{nullptr};
UIButton *DrinkReminderButton{nullptr};
static constexpr const char *DRINKREMINDERGROUPVIEWID = "DrinkReminderGroupview";
static constexpr const char *DRINKREMINDERBUTTONVIEWID = "DrinkReminderButton";
+ // 声明定时器变量
+ static osTimerId_t g_timer = NULL;
+ static constexpr const uint32_t HALF_HOUR = 30 * 60 * 1000; // 半小时
+ static constexpr const uint32_t ONE_HOUR = 1 * 60 * 60 * 1000; // 1小时
+ static constexpr const uint32_t TWO_HOUR = 2 * 60 * 60 * 1000; // 2小时
+ static constexpr const uint32_t THREE_HOUR = 3 * 60 * 60 * 1000; // 3小时
+
DrinkReminderViewEventListener::DrinkReminderViewEventListener()
{
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "DrinkReminderViewEventListener::DrinkReminderViewEventListener");
return true;
}
+ void DrinkReminderViewEventListener::SetDrinkReminderTopic(uint16_t topic)
+ {
+ drinkReminderTopic = topic;
+ }
+
+ uint16_t DrinkReminderViewEventListener::GetDrinkReminderTopic(void)
+ {
+ return drinkReminderTopic;
+ }
+
+ /*获取定时器是否开启*/
+ bool DrinkReminderViewEventListener::IsDrinkReminderTimerOpen(void)
+ {
+ return timerOpen;
+ }
+
+ /*久坐提醒是否开启,(0:关闭,1:开启 [每天一次]) 2为间隔提醒*/
+ int DrinkReminderViewEventListener::DrinkReminderOpenState(void)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "DrinkReminderViewEventListener::DrinkReminderOpenState");
+ int state = ConfigModel::GetInstance()->GetDrinkSwitch();
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "state = %d", state);
+ return state;
+ }
+
+ /*获取喝水提醒的间隔时间*/
+ uint32_t DrinkReminderViewEventListener::GetDrinkReminderIntervalTime(void)
+ {
+ // 添加日志输出,用于调试
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "DrinkReminderViewEventListener::GetDrinkReminderIntervalTime");
+
+ // 获取频率前先进行错误处理
+ ConfigModel *config = ConfigModel::GetInstance();
+ if (!config)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ConfigModel::GetInstance() returned nullptr");
+ return HALF_HOUR; // 返回一个默认值
+ }
+
+ // 获取喝水提醒的频率
+ frequency = config->GetDrinkFreq();
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "frequency = %d", frequency);
+
+ // 根据频率设置间隔时间
+ switch (frequency)
+ {
+ case 0:
+ return HALF_HOUR;
+ case 1:
+ return ONE_HOUR;
+ case 2:
+ return TWO_HOUR;
+ case 3:
+ return THREE_HOUR;
+ default:
+ return HALF_HOUR; // 默认情况下返回半小时间隔
+ }
+ }
+
+ /*是否是喝水提醒时间段内,间隔提醒开启后启用*/
+ bool DrinkReminderViewEventListener::IsDrinkReminderTime()
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "DrinkReminderViewEventListener::IsDrinkReminderTime");
+ // 获取当前时间
+ time_t now = time(0);
+ tm *ltm = localtime(&now);
+ int currentHour = ltm->tm_hour;
+ int currentMinute = ltm->tm_min;
+
+ // 获取提醒时间段
+ int drinkReminderStartTime = ConfigModel::GetInstance()->GetDrinkStart(); // 获取喝水提醒开始时间,int类型 前16位小时,后16位分钟
+ int drinkReminderEndTime = ConfigModel::GetInstance()->GetDrinkEnd(); // 获取喝水提醒结束时间, int类型 前16位小时,后16位分钟
+
+ // 解析开始时间
+ int startHour = (drinkReminderStartTime >> 8) & 0xFF; // 前8位是小时
+ int startMinute = drinkReminderStartTime & 0xFF; // 后8位是分钟
+
+ // 解析结束时间
+ int endHour = (drinkReminderEndTime >> 8) & 0xFF; // 中前8位是小时
+ int endMinute = drinkReminderEndTime & 0xFF; // 后8位是分钟
+
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "currentHour = %d,currentMinute = %d", currentHour, currentMinute);
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "drinkReminderStartTime = %d,drinkReminderEndTime = %d", drinkReminderStartTime, drinkReminderEndTime);
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "startHour = %d,startMinute = %d", startHour, startMinute);
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "endHour = %d,endMinute = %d", endHour, endMinute);
+
+ // 判断当前时间是否在提醒时间段内
+ if (currentHour > startHour || (currentHour == startHour && currentMinute >= startMinute))
+ {
+ if (currentHour < endHour || (currentHour == endHour && currentMinute < endMinute))
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "It's time to remind the user to drink!");
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ /* -------------------------------------------------------------------------- */
+
+ /*显示喝水提醒视图*/
+ static OHOS::UIViewGroup *showDrinkReminderNotify(void)
+ {
+ return OHOS::CreateDrinkReminderView();
+ }
+
+ /*定时器到期时的处理*/
+ static void DrinkReminder_TimerCallbackProc(int data)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "DrinkReminder_TimerCallbackProc");
+ if (DrinkReminderViewEventListener::GetInstance().IsDrinkReminderTime())
+ {
+ uapi_set_screen_on_api();
+ NotificationManager::GetInstance()->ShowNotify(showDrinkReminderNotify, DrinkReminderViewEventListener::GetInstance().GetDrinkReminderTopic(), true);
+ }
+ else
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "DrinkReminder Out of time");
+ }
+ }
+
+ /*回调函数*/
+ static void DrinkReminder_TimerCallback(int data)
+ {
+ GraphicService::GetInstance()->PostGraphicEvent(std::bind(DrinkReminder_TimerCallbackProc, data));
+ }
+
+ /*开启定时器*/
+ void DrinkReminderViewEventListener::DrinkReminder_StartTimer(void)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "DrinkReminderViewEventListener::DrinkReminder_StartTimer");
+ /* -------------------------- 1.检查定时器是否已经存在,如果存在则返回 ------------------------- */
+ if (g_timer != NULL)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Timer already exists!!");
+ return;
+ }
+
+ /* --------------------------------- 2.创建定时器 -------------------------------- */
+ g_timer = osTimerNew((osTimerFunc_t)DrinkReminder_TimerCallback, osTimerPeriodic, NULL, NULL);
+ // 检查定时器创建是否成功
+ if (g_timer == NULL)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Timer create failed!!");
+ return;
+ }
+
+ /* ----------------------------- 3.将毫秒转换为系统时钟节拍数 ---------------------------- */
+ int tick = osMs2Tick(GetDrinkReminderIntervalTime());
+
+ /* --------------------------------- 4.启动定时器 -------------------------------- */
+ osStatus_t ret = osTimerStart(g_timer, tick);
+ /* -------------------- 5.检查定时器启动是否成功,如果启动失败,删除定时器并置为 NULL -------------------- */
+ if (ret != osOK)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "osTimerDelete failed, ret = %lx!!", ret);
+ if (g_timer != NULL)
+ {
+ ret = osTimerDelete(g_timer);
+ }
+ g_timer = NULL;
+ return;
+ }
+ timerOpen = true;
+ }
+
+ /*停止定时器*/
+ void DrinkReminderViewEventListener::DrinkReminder_StopTimer(void)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "DrinkReminderViewEventListener::DrinkReminder_StopTimer");
+ // 检查定时器是否存在
+ if (g_timer != NULL)
+ {
+ // 删除定时器并置为 NULL
+ osStatus_t ret = osTimerDelete(g_timer);
+ if (ret != osOK)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "osTimerDelete failed, ret = %lx!!", ret);
+ }
+ g_timer = NULL;
+ timerOpen = false;
+ }
+ }
+
/*创建喝水提醒视图*/
UIViewGroup *CreateDrinkReminderView(void)
{
DrinkReminderImage->SetPosition(193, 130, 80, 80);
DrinkReminderImage->SetSrc("/user/res/drinkReminder/DrinkReminder.bin");
/* ------------------------- DrinkReminderNoteLabel ------------------------- */
- DrinkReminderNoteLabel = new UILabel();
+ DrinkReminderNoteLabel = new UILabelExt();
if (DrinkReminderNoteLabel == nullptr)
{
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[CreateDrinkReminderView] DrinkReminderNoteLabel new fail!!");
DrinkReminderNoteLabel->SetStyle(STYLE_TEXT_FONT, 30);
DrinkReminderNoteLabel->SetStyle(STYLE_LINE_HEIGHT, 35);
#ifdef FD230
- SetLabelId(DrinkReminderNoteLabel, STR_DRINK_WATER_REMINDER_NOTE);
+ DrinkReminderNoteLabel->SetTextId(STR_DRINK_WATER_REMINDER_NOTE);
#endif
DrinkReminderNoteLabel->SetLineBreakMode(UILabel::LINE_BREAK_WRAP);
DrinkReminderNoteLabel->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "FreeDrinkReminderView(void)");
if (DrinkReminderGroupView != nullptr)
{
+ if (DrinkReminderViewEventListener::GetInstance().IsDrinkReminderTimerOpen())
+ {
+ DrinkReminderViewEventListener::GetInstance().DrinkReminder_StopTimer();
+ }
+
DrinkReminderGroupView->RemoveAll();
delete DrinkReminderTitleLabel;
return get_configData_int(CONFIGMODEL_ITEM_DRINK_GOAL);
}
- //设置喝水提醒开始时间,32位数字,前16位代表小时,后16位代表分钟
+ //设置喝水提醒开始时间, int类型 前16位小时,后16位分钟
void ConfigModel::SetDrinkStart(const int value)
{
set_condigData_Int(CONFIGMODEL_ITEM_DRINK_START,value);
}
- //获取喝水提醒开始时间,32位数字,前16位代表小时,后16位代表分钟
+ //获取喝水提醒开始时间,int类型 前16位小时,后16位分钟
int ConfigModel::GetDrinkStart()
{
return get_configData_int(CONFIGMODEL_ITEM_DRINK_START);
}
- //设置喝水提醒结束时间,32位数字,前16位代表小时,后16位代表分钟
+ //设置喝水提醒结束时间 int类型 前16位小时,后16位分钟
void ConfigModel::SetDrinkEnd(const int value)
{
set_condigData_Int(CONFIGMODEL_ITEM_DRINK_END,value);
}
- //获取喝水提醒结束时间,32位数字,前16位代表小时,后16位代表分钟
+ //获取喝水提醒结束时间, int类型 前16位小时,后16位分钟
int ConfigModel::GetDrinkEnd()
{
return get_configData_int(CONFIGMODEL_ITEM_DRINK_END);