解决秒表视图到达最高记录时间未出现弹窗视图问题
authorluozheng <1732036298@qq.com>
Tue, 9 Apr 2024 12:28:39 +0000 (20:28 +0800)
committerluozheng <1732036298@qq.com>
Tue, 9 Apr 2024 12:28:39 +0000 (20:28 +0800)
code/sdk/application/wearable/fd230app/nativeui/stopwatch/include/MainStopWatchView.h
code/sdk/application/wearable/fd230app/nativeui/stopwatch/src/MainStopWatchView.cpp
code/sdk/application/wearable/fd230app/nativeui/stopwatch/src/StopWatchModel.cpp

index e65e9b7..d4b9f0a 100644 (file)
@@ -2,7 +2,7 @@
  * @Author: luozheng 1732036298@qq.com\r
  * @Date: 2024-04-04 15:13:51\r
  * @LastEditors: luozheng 1732036298@qq.com\r
- * @LastEditTime: 2024-04-07 10:04:54\r
+ * @LastEditTime: 2024-04-09 20:22:12\r
  * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/stopwatch/include/MainStopWatchView.h\r
  */\r
 #ifndef MAIN_STOPWATCH_VIEW_H\r
@@ -54,6 +54,8 @@ namespace OHOS
         bool ChangeStopWatchRecordCycleLimit(int16_t thisView);\r
         bool ChangeMainStopWatchRecordTimeLimit(int16_t thisView);\r
         UILabelExt *GetShowTimelabel(void);\r
+        UICheckBox *GetPlayOrPausecheckBox(void);\r
+        void ChangeRecordTimeToLimitView(void);\r
     private:\r
         void InitMainStopWatchView(void);\r
         void ClearAll(void);\r
index abfe108..b2d8ba4 100644 (file)
@@ -358,6 +358,17 @@ namespace OHOS
         return showTimelabel;\r
     }\r
 \r
+    UICheckBox *MainStopWatchView::GetPlayOrPausecheckBox(void)\r
+    {\r
+        return PlayOrPausecheckBox;\r
+    }\r
+\r
+    /*切换到记录时间到达上线视图*/\r
+    void MainStopWatchView::ChangeRecordTimeToLimitView(void)\r
+    {\r
+        ChangeView(MAIN_STOPWATCH, STOPWATCH_RECORD_TIME_TO_LIMIT);\r
+    }\r
+\r
     void MainStopWatchView::OnStart()\r
     {\r
         View<MainStopWatchPresenter>::OnStart();\r
index 0a38795..3b64f18 100644 (file)
@@ -19,13 +19,14 @@ namespace OHOS
     // 声明定时器变量\r
     static osTimerId_t g_timer = NULL;\r
     static int g_StopWatchTimes = {0};\r
-    static constexpr int32 NUM_TEN = 10;\r
+    static constexpr int32 NUM_TEN = 10; // 主要用于格式化输出,当小时、分钟或秒小于10时,在其前面添加一个’0’以保持常规时间格式\r
     static constexpr int16 ERROR = 0;\r
     static constexpr int16 SUCCESS = 1;\r
     static constexpr int16 NUM_TIME_MIN = 60;\r
     static constexpr int16 NUM_TIME_HOUR = 3600;\r
     static constexpr int32 NUM_TIME_DAY = 86400;\r
-    static uint64_t g_timerStartTimestamp = 0; // 添加一个全局变量来存储定时器开始的时间戳\r
+    static constexpr int32 MAX_NUM_TIME = (99 * 60 * 1000) + (59 * 1000) + 990; // 99分59秒990毫秒\r
+    static uint64_t g_timerStartTimestamp = 0;                                  // 添加一个全局变量来存储定时器开始的时间戳\r
     /*\r
      * @brief 显示倒计时(分钟、秒、毫秒),毫秒显示为两位数\r
      */\r
@@ -101,7 +102,15 @@ namespace OHOS
             return;\r
         }\r
 \r
-        MainStopWatchView::GetInstance()->GetShowTimelabel()->SetText(StopWatchModel::GetInstance()->DisplayStopWatchDuration());\r
+        if ((g_StopWatchTimes) >= MAX_NUM_TIME) // 5999990 = 99分59秒99的毫秒数\r
+        {\r
+            MainStopWatchView::GetInstance()->GetPlayOrPausecheckBox()->SetState(UICheckBox::UNSELECTED);\r
+            MainStopWatchView::GetInstance()->ChangeRecordTimeToLimitView();\r
+        }\r
+        else\r
+        {\r
+            MainStopWatchView::GetInstance()->GetShowTimelabel()->SetText(StopWatchModel::GetInstance()->DisplayStopWatchDuration());\r
+        }\r
     }\r
 \r
     /*\r
@@ -109,24 +118,6 @@ namespace OHOS
      */\r
     static void StopWatch_TimerCallback(int data)\r
     {\r
-#if 0\r
-        uint64_t currentTimestamp = GetCurrentTimestamp();\r
-        if ((currentTimestamp - g_timerStartTimestamp) >= 5999990) // 99分59秒99的毫秒数\r
-        {\r
-            if (g_timer != NULL)\r
-            {\r
-                osTimerStop(g_timer);   // 停止定时器\r
-                osTimerDelete(g_timer); // 删除定时器\r
-                g_timer = NULL;\r
-                g_timerStartTimestamp = 0; // 重置时间戳\r
-                // 可以在这里添加额外的逻辑,比如更新界面显示等\r
-            }\r
-        }\r
-        else\r
-        {\r
-            GraphicService::GetInstance()->PostGraphicEvent(std::bind(StopWatch_TimerCallbackProc, data));\r
-        }\r
-#endif\r
         GraphicService::GetInstance()->PostGraphicEvent(std::bind(StopWatch_TimerCallbackProc, data));\r
     }\r
 \r
@@ -156,7 +147,7 @@ namespace OHOS
         int tick = osMs2Tick(interval);\r
 \r
         /* --------------------------------- 4.启动定时器 -------------------------------- */\r
-        //g_timerStartTimestamp = GetCurrentTimestamp(); // 假设GetCurrentTimestamp()是获取当前时间戳的函数\r
+        // g_timerStartTimestamp = GetCurrentTimestamp(); // 假设GetCurrentTimestamp()是获取当前时间戳的函数\r
         osStatus_t ret = osTimerStart(g_timer, tick);\r
         /* -------------------- 5.检查定时器启动是否成功,如果启动失败,删除定时器并置为 NULL -------------------- */\r
         if (ret != osOK)\r