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");
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "DrinkReminderViewEventListener::DrinkReminderViewEventListener");
}
DrinkReminderViewEventListener::~DrinkReminderViewEventListener()
{
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "DrinkReminderViewEventListener::~DrinkReminderViewEventListener");
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "DrinkReminderViewEventListener::~DrinkReminderViewEventListener");
}
DrinkReminderViewEventListener &DrinkReminderViewEventListener::GetInstance()
bool DrinkReminderViewEventListener::OnRelease(UIView &view, const ReleaseEvent &event)
{
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "DrinkReminderViewEventListener::OnRelease");
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "DrinkReminderViewEventListener::OnRelease");
UNUSED(event);
std::string viewId = view.GetViewId();
if (viewId == DRINKREMINDERBUTTONVIEWID)
uapi_vibrationModeSet(ConfigModel::GetInstance()->GetVibrationReminder());
}
- 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 & 0XFFFF0000) >> 16; // 前16位是小时
- int startMinute = drinkReminderStartTime & 0X0000FFFF; // 后16位是分钟
-
- // 解析结束时间
- int endHour = (drinkReminderEndTime & 0XFFFF0000) >> 16; // 前16位是小时
- int endMinute = drinkReminderEndTime & 0x0000FFFF; // 后16位是分钟
-
- 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())
- {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "该喝水了!!该喝水了!!");
- DrinkReminderViewEventListener::GetInstance().set_screen_on_and_vibration();
- NotificationManager::GetInstance()->ShowNotify(showDrinkReminderNotify, DrinkReminderViewEventListener::GetInstance().GetDrinkReminderTopic(), true);
- }
- else
- {
- DrinkReminderViewEventListener::GetInstance().DrinkReminder_StopTimer();
- 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)
{
/*释放喝水提醒视图*/
void FreeDrinkReminderView(void)
{
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "FreeDrinkReminderView(void)");
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "FreeDrinkReminderView(void)");
if (DrinkReminderGroupView != nullptr)
{
- if (DrinkReminderViewEventListener::GetInstance().IsDrinkReminderTimerOpen())
- {
- DrinkReminderViewEventListener::GetInstance().DrinkReminder_StopTimer();
- }
-
DrinkReminderGroupView->RemoveAll();
delete DrinkReminderTitleLabel;
RootView::GetInstance()->Remove(DrinkReminderGroupView);
delete DrinkReminderGroupView;
DrinkReminderGroupView = nullptr;
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Free DrinkReminderView succeed!!");
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Free DrinkReminderView succeed!!");
}
return;
}