Merge #144 into xts_origin from refs/changes/144/head 145/target/1
author罗正 <1732036298@qq.com>
Wed, 8 May 2024 09:11:53 +0000 (09:11 +0000)
committersnickersun@163.com <accounts_62b90f7fcf51ade33b6f628e@mail.teambition.com>
Wed, 8 May 2024 09:11:53 +0000 (09:11 +0000)
采用定时器更新下拉控制视图的状态显示,包括时间,电池,信号强度

* refs/changes/144/head: (1 commits squashed)

  - 采用定时器更新下拉控制视图的状态显示,包括时间,电池,信号强度

Signed-off-by: 罗正 <1732036298@qq.com>
Reviewed-by: snickersun@163.com <accounts_62b90f7fcf51ade33b6f628e@mail.teambition.com>
Merged-by: snickersun@163.com <accounts_62b90f7fcf51ade33b6f628e@mail.teambition.com>
link: https://codeup.aliyun.com/64191456b9581d62e8f81ac0/FD230/change/144
code/sdk/application/wearable/fd230app/nativeui/main/include/MainPresenterSample.h
code/sdk/application/wearable/fd230app/nativeui/main/include/PullUpDownView.h
code/sdk/application/wearable/fd230app/nativeui/main/src/MainPresenterSample.cpp
code/sdk/application/wearable/fd230app/nativeui/main/src/PullUpDownView.cpp

index 99d0d61..ac3329e 100644 (file)
@@ -2,7 +2,7 @@
  * @Author: luozheng 1732036298@qq.com
  * @Date: 2024-03-01 15:10:34
  * @LastEditors: luozheng 1732036298@qq.com
- * @LastEditTime: 2024-04-27 10:00:11
+ * @LastEditTime: 2024-05-08 15:57:02
  * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/main/include/MainPresenterSample.h
  */
 
@@ -80,6 +80,9 @@ public:
     void InitDialSettings(void);
     DialSetting& GetDialSetting();
     void UpdataBaseData();
+    void PullUpDown_StartTimer(uint32_t interval);
+    void PullUpDown_StopTimer(void);
+    static uint8_t g_PullUpDownTimes;
 
 private:
     void ProcessDataNotify(void);
index 38fa1e9..caadd67 100644 (file)
@@ -2,7 +2,7 @@
  * @Author: luozheng 1732036298@qq.com
  * @Date: 2024-04-17 15:26:49
  * @LastEditors: luozheng 1732036298@qq.com
- * @LastEditTime: 2024-04-27 11:48:15
+ * @LastEditTime: 2024-05-08 16:01:10
  * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/main/include/PullUpDownView.h
  */
 /*
@@ -67,8 +67,11 @@ namespace OHOS
         void ClearAll();
         bool InitSingalComponentsView();
         void ClearAllSingalComponentsView();
-        void SetSingalComponentsVisible(int SignalStrength);
         int GetSignalStrength(void);
+        int CalculateSignalBars(int signalStrength);
+        void UpdateSignalDisplay(int signalBars);
+        void UpdateBatteryPosition(int signalBars);
+        void UpdateSignalStrengthStatusAndBatteryPosition();
 
         void ClearAllConnectedStatusComponentsView();
         bool GetPhoneConnectedStatus(void);
index f5abf57..5fa5d6a 100644 (file)
@@ -80,6 +80,7 @@ namespace OHOS
                 RootView::GetInstance()->SetOnKeyActListener(keyActListener_);
             }
         }
+        PullUpDown_StartTimer(1000);
     }
 
     void MainPresenterSample::OnPause(void) {}
@@ -99,6 +100,7 @@ namespace OHOS
             delete keyActListener_;
             keyActListener_ = nullptr;
         }
+        PullUpDown_StopTimer();
     }
 
     bool MainPresenterSample::OnClick(UIView &view, const ClickEvent &event)
@@ -253,10 +255,10 @@ namespace OHOS
     void MainPresenterSample::OnSwipe(UISwipeView &view)
     {
         //UNUSED(view);
-        if(MainViewSample::GetInstance()->IsPullUpViewPage())
-        {
-            UpdataBaseData();
-        }
+        // if(MainViewSample::GetInstance()->IsPullUpViewPage())
+        // {
+        //     UpdataBaseData();
+        // }
 
         CardId cardId = view_->GetHorCurrentCard();
         callback_->OnSwipe(view);
@@ -400,7 +402,7 @@ namespace OHOS
 
     void MainPresenterSample::UpdataBaseData()
     {
-        PRINT("RefreshData Begin!\n");
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::UpdataBaseData");
         // 获取当前时间
         char *dateStr = (char *)malloc(9);
         if (uapi_get_YYMMDD_Time(dateStr, '/') != ERRCODE_SUCC)
@@ -463,4 +465,91 @@ namespace OHOS
         free(weekStr);
     }
 
+    /* -------------------------------------------------------------------------- */
+    // 声明定时器变量
+    static osTimerId_t g_timer = NULL;
+    uint8_t MainPresenterSample::g_PullUpDownTimes = 5;//5秒
+
+    /*定时器到期时的处理*/
+    static void PullUpDown_TimerCallbackProc(int data)
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDown_TimerCallbackProc");
+        MainPresenterSample::g_PullUpDownTimes--;
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "%d",MainPresenterSample::g_PullUpDownTimes);
+        if(MainPresenterSample::g_PullUpDownTimes <= 0)
+        {
+            MainPresenterSample::g_PullUpDownTimes = 5;//每5秒更新一次,时间
+            MainPresenterSample::GetInstance()->UpdataBaseData();
+            PullUpDownView::GetInstance()->UpdateSignalStrengthStatusAndBatteryPosition();
+        }
+        return;
+    }
+    
+    /*
+     * @brief 回调函数
+     */
+    static void PullUpDown_TimerCallback(int data)
+    {
+        GraphicService::GetInstance()->PostGraphicEvent(std::bind(PullUpDown_TimerCallbackProc, data));
+    }
+
+    /*
+     *  @brief 开启定时器函数
+     *  @param interval 时间间隔,单位ms
+     */
+    void MainPresenterSample::PullUpDown_StartTimer(uint32_t interval)
+    {
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "MainPresenterSample::PullUpDown_StartTimer");
+        /* -------------------------- 1.检查定时器是否已经存在,如果存在则返回 ------------------------- */
+        if (g_timer != NULL)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "MainPresenterSample::PullUpDown_StartTimer Timer already exists!!");
+            return;
+        }
+
+        /* --------------------------------- 2.创建定时器 -------------------------------- */
+        g_timer = osTimerNew((osTimerFunc_t)PullUpDown_TimerCallback, osTimerPeriodic, NULL, NULL);
+        // 检查定时器创建是否成功
+        if (g_timer == NULL)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "MainPresenterSample::PullUpDown_StartTimer Timer create failed!!");
+            return;
+        }
+
+        /* ----------------------------- 3.将毫秒转换为系统时钟节拍数 ---------------------------- */
+        int tick = osMs2Tick(interval);
+        /* --------------------------------- 4.启动定时器 -------------------------------- */
+        osStatus_t ret = osTimerStart(g_timer, tick);
+        /* -------------------- 5.检查定时器启动是否成功,如果启动失败,删除定时器并置为 NULL -------------------- */
+        if (ret != osOK)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[PullUpDown_StartTimer] osTimerDelete failed, ret = %lx!!", ret);
+            if (g_timer != NULL)
+            {
+                ret = osTimerDelete(g_timer);
+            }
+            g_timer = NULL;
+            return;
+        }
+        return;
+    }
+
+    /*
+     * @brief 停止定时器
+     */
+    void MainPresenterSample::PullUpDown_StopTimer(void)
+    {
+        // 检查定时器是否存在
+        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;
+        }
+    }
+
 }
\ No newline at end of file
index a15efe7..06951fc 100644 (file)
@@ -15,7 +15,7 @@
 #include "ui_resource_image.h"
 #include "dnotdisturb/include/DnotDisturbModel.h"
 #include "custom_utils.h"
-
+#include "custom_runtime.h"
 namespace OHOS
 {
 
@@ -81,6 +81,13 @@ namespace OHOS
     constexpr int16_t BLUETOOTHCONNECTSTATUS_BUTTON_Y = 350;
     constexpr int16_t BLUETOOTHCONNECTSTATUS_BUTTON_W = 60;
     constexpr int16_t BLUETOOTHCONNECTSTATUS_BUTTON_H = 60;
+
+    static const int64_t COLOR_SIGNAL_ON = 0xffffffff;
+    static const int64_t COLOR_SIGNAL_OFF = 0xff383838;
+    static const int BATTERY_IMAGE_WIDTH = 48;
+    static const int BATTERY_IMAGE_HEIGHT = 30;
+    static const int PROGRESS_WIDTH = 30;
+    static const int PROGRESS_HEIGHT = 18;
     /* -------------------------------------------------------------------------- */
     std::string getWeekString(int wday)
     {
@@ -120,31 +127,31 @@ namespace OHOS
                 delete dropIconBackground[i];
                 dropIconBackground[i] = nullptr;
             }
-            
+
             delete dropSetting;
             dropSetting = nullptr;
-            
+
             delete dropLighting;
             dropLighting = nullptr;
-            
+
             delete dropDnotDisturb;
             dropDnotDisturb = nullptr;
-            
+
             delete dropLine;
             dropLine = nullptr;
-            
+
             delete dropSavePower;
             dropSavePower = nullptr;
-            
+
             delete drofindPhone;
             drofindPhone = nullptr;
-            
+
             delete showTimeLabel;
             showTimeLabel = nullptr;
-            
+
             delete showDateLabel;
             showDateLabel = nullptr;
-            
+
             delete showWeekLabel;
             showWeekLabel = nullptr;
             /* -------------------------------------------------------------------------- */
@@ -156,14 +163,13 @@ namespace OHOS
                 delete batteryimage;
                 batteryimage = nullptr;
             }
-    
+
             if (progress != nullptr)
             {
                 delete progress;
                 progress = nullptr;
             }
-            
-        
+
             if (progresscallback_ != nullptr)
             {
                 delete progresscallback_;
@@ -325,6 +331,8 @@ namespace OHOS
     // 获取蓝牙耳机连接状态
     bool PullUpDownView::GetEarPhoneConnectedStatus(void)
     {
+        runtime_status_t *g_runtime = get_device_runtime_status();
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "g_runtime->bt_connected = %d", g_runtime->bt_connected);
         return true;
     }
 
@@ -337,7 +345,7 @@ namespace OHOS
     /// @brief 连接状态
     /// @param  void
     void PullUpDownView::InitTimeDateWeekLabelAndConnectedStatusImage(void)
-    {   
+    {
         connectedStatusBackgroundButton = new UIButton();
         if (connectedStatusBackgroundButton == nullptr)
         {
@@ -493,14 +501,7 @@ namespace OHOS
             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "batteryimage new fail");
             return false;
         }
-        if (GetSignalStrength() == 0)
-        {
-            batteryimage->SetPosition(200, 180, 48, 30);
-        }
-        else
-        {
-            batteryimage->SetPosition(258, 180, 48, 30);
-        }
+        batteryimage->SetPosition(258, 180, BATTERY_IMAGE_WIDTH, BATTERY_IMAGE_HEIGHT);
         std::string batteryimagesPath = "/user/res/Battery/Battery-E.bin";
         batteryimage->SetSrc(batteryimagesPath.c_str());
         /* -------------------------------------------------------------------------- */
@@ -510,16 +511,9 @@ namespace OHOS
             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "progress new fail");
             return false;
         }
-        if (GetSignalStrength() == 0)
-        {
-            batteryimage->SetPosition(206, 180, 48, 30);
-        }
-        else
-        {
-            progress->SetPosition(264, 186, 31, 19);
-        }
-        progress->SetValidHeight(19);
-        progress->SetValidWidth(31);
+        progress->SetPosition(206, 180, PROGRESS_WIDTH, PROGRESS_HEIGHT);
+        progress->SetValidHeight(PROGRESS_HEIGHT);
+        progress->SetValidWidth(PROGRESS_WIDTH);
 
         // progress->SetValue(value);
         const char *progressImageSrc = "/user/res/Battery/Battery_Normal.bin";
@@ -536,6 +530,10 @@ namespace OHOS
         group[DROPDOWNVIEW]->Add(showDateLabel);
         group[DROPDOWNVIEW]->Add(showWeekLabel);
 
+        /* -------------------------------------------------------------------------- */
+        UpdateSignalStrengthStatusAndBatteryPosition();
+        /* -------------------------------------------------------------------------- */
+
         return true;
     }
 
@@ -586,14 +584,7 @@ namespace OHOS
                 }
             }
             showSignalStrength[i]->SetPosition(imageViewList[i].posX, imageViewList[i].posY, imageViewList[i].width, imageViewList[i].height);
-            if (i < GetSignalStrength())
-            {
-                showSignalStrength[i]->SetStyle(STYLE_BACKGROUND_COLOR, 0xffffffff);
-            }
-            else
-            {
-                showSignalStrength[i]->SetStyle(STYLE_BACKGROUND_COLOR, 0xff383838);
-            }
+            showSignalStrength[i]->SetStyle(STYLE_BACKGROUND_COLOR, 0xffffffff);
             showSignalStrength[i]->SetStyle(STYLE_BACKGROUND_OPA, 0xff);
             showSignalStrength[i]->SetStyle(STYLE_BORDER_RADIUS, 10);
             group[DROPDOWNVIEW]->Add(showSignalStrength[i]);
@@ -613,8 +604,6 @@ namespace OHOS
         Singal_4->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 34);
         Singal_4->SetVisible(false);
         group[DROPDOWNVIEW]->Add(Singal_4);
-        /* -------------------------------------------------------------------------- */
-        SetSingalComponentsVisible(GetSignalStrength());
 
         return true;
     }
@@ -622,25 +611,64 @@ namespace OHOS
     // 获取信号强度
     int PullUpDownView::GetSignalStrength(void)
     {
-        int SignalStrength = 4; // 信号强度
+        runtime_status_t *g_runtime = get_device_runtime_status();
+        int SignalStrength = g_runtime->cat1_runtime.signal; // 信号强度
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SignalStrength = %d", SignalStrength);
+
         return SignalStrength;
     }
 
-    // 根据信号强度设置信号组件是否可见
-    void PullUpDownView::SetSingalComponentsVisible(int SignalStrength)
+    int PullUpDownView::CalculateSignalBars(int signalStrength)
+    {
+        if (signalStrength < 0 || signalStrength > 32)
+            return 99; // 无信号 or Invalid signal strength
+
+        // if (signalStrength == 32)
+        //     return 4; // Edge case where signalStrength is exactly at the upper boundary
+
+        return (signalStrength / 8) + 1;
+    }
+
+    void PullUpDownView::UpdateSignalDisplay(int signalBars)
     {
-        if (SignalStrength != 0)
+        bool noSignal = (signalBars == 99);
+        for (int i = 0; i < 4; i++)
         {
-            for (int i = 0; i < 4; i++)
-            {
-                showSignalStrength[i]->SetVisible(true);
-            }
+            showSignalStrength[i]->SetStyle(STYLE_BACKGROUND_COLOR, (i < signalBars) ? COLOR_SIGNAL_ON : COLOR_SIGNAL_OFF);
+            showSignalStrength[i]->Invalidate();
+            showSignalStrength[i]->SetVisible(!noSignal);
+        }
+        if (noSignal == true)
+            Singal_4->SetVisible(false);
+        else
             Singal_4->SetVisible(true);
+
+        NoSignal->SetVisible(noSignal);
+    }
+
+    void PullUpDownView::UpdateBatteryPosition(int signalBars)
+    {
+        if (signalBars == 99)
+        {
+            batteryimage->SetPosition(209, 180, BATTERY_IMAGE_WIDTH, BATTERY_IMAGE_HEIGHT);
+            progress->SetPosition(215, 186, PROGRESS_WIDTH, PROGRESS_HEIGHT);
         }
         else
         {
-            NoSignal->SetVisible(true);
+            batteryimage->SetPosition(258, 180, BATTERY_IMAGE_WIDTH, BATTERY_IMAGE_HEIGHT);
+            progress->SetPosition(264, 186, PROGRESS_WIDTH, PROGRESS_HEIGHT);
         }
+        batteryimage->Invalidate();
+        progress->Invalidate();
+    }
+
+    // 更新信号强度和电池位置
+    void PullUpDownView::UpdateSignalStrengthStatusAndBatteryPosition()
+    {
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PullUpDownView::UpdateSignalStrengthStatusAndBatteryPosition");
+        int signalBars = CalculateSignalBars(GetSignalStrength());
+        UpdateSignalDisplay(signalBars);
+        UpdateBatteryPosition(signalBars);
     }
 
     // 清除信号强度相关组件