From 3b33b8ff356c7b95e23ecde33d84333ff733cc3c Mon Sep 17 00:00:00 2001 From: luozheng <1732036298@qq.com> Date: Wed, 8 May 2024 16:35:07 +0800 Subject: [PATCH] =?utf8?q?=E9=87=87=E7=94=A8=E5=AE=9A=E6=97=B6=E5=99=A8?= =?utf8?q?=E6=9B=B4=E6=96=B0=E4=B8=8B=E6=8B=89=E6=8E=A7=E5=88=B6=E8=A7=86?= =?utf8?q?=E5=9B=BE=E7=9A=84=E7=8A=B6=E6=80=81=E6=98=BE=E7=A4=BA=EF=BC=8C?= =?utf8?q?=E5=8C=85=E6=8B=AC=E6=97=B6=E9=97=B4=EF=BC=8C=E7=94=B5=E6=B1=A0?= =?utf8?q?=EF=BC=8C=E4=BF=A1=E5=8F=B7=E5=BC=BA=E5=BA=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../main/include/MainPresenterSample.h | 5 +- .../nativeui/main/include/PullUpDownView.h | 7 +- .../nativeui/main/src/MainPresenterSample.cpp | 99 ++++++++++++- .../nativeui/main/src/PullUpDownView.cpp | 130 +++++++++++------- 4 files changed, 182 insertions(+), 59 deletions(-) diff --git a/code/sdk/application/wearable/fd230app/nativeui/main/include/MainPresenterSample.h b/code/sdk/application/wearable/fd230app/nativeui/main/include/MainPresenterSample.h index 99d0d6127..ac3329ee9 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/main/include/MainPresenterSample.h +++ b/code/sdk/application/wearable/fd230app/nativeui/main/include/MainPresenterSample.h @@ -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); diff --git a/code/sdk/application/wearable/fd230app/nativeui/main/include/PullUpDownView.h b/code/sdk/application/wearable/fd230app/nativeui/main/include/PullUpDownView.h index 38fa1e990..caadd670b 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/main/include/PullUpDownView.h +++ b/code/sdk/application/wearable/fd230app/nativeui/main/include/PullUpDownView.h @@ -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); diff --git a/code/sdk/application/wearable/fd230app/nativeui/main/src/MainPresenterSample.cpp b/code/sdk/application/wearable/fd230app/nativeui/main/src/MainPresenterSample.cpp index f5abf577e..5fa5d6a18 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/main/src/MainPresenterSample.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/main/src/MainPresenterSample.cpp @@ -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 diff --git a/code/sdk/application/wearable/fd230app/nativeui/main/src/PullUpDownView.cpp b/code/sdk/application/wearable/fd230app/nativeui/main/src/PullUpDownView.cpp index a15efe7b8..06951fcca 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/main/src/PullUpDownView.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/main/src/PullUpDownView.cpp @@ -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); } // 清除信号强度相关组件 -- 2.17.1