+/***
+ * @Date: 2024-07-17 14:09:04
+ * @LastEditors: Caisking 3449750381@qq.com
+ * @LastEditTime: 2024-07-20 15:26:53
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/clock/include/MainClockView.h
+ */
/*
* Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved.
* Description: MainClockView
* Create: 2021-10-18
*/
-#ifndef MAIN_CLOCK_VIEW_H
-#define MAIN_CLOCK_VIEW_H
-
-#include <string>
-#include <ctime>
-#include "View.h"
-#include "components/ui_label.h"
-#include "components/root_view.h"
-#include "components/ui_view_group.h"
-#include "components/ui_image_view.h"
-#include "components/ui_label_button.h"
-#include "components/ui_sweep_clock.h"
-#include "ChangeSliceListener.h"
-#include "font/ui_font_bitmap.h"
-#include "font/ui_font.h"
-#include "graphic_config.h"
-#include "HealthModel.h"
-#include "ActivityModel.h"
-#include "UiConfig.h"
-#include "components/ui_card_page.h"
-#include "animator/animator_manager.h"
-#include <ctime>
-#include "sys/time.h"
-
-namespace OHOS {
-class MainClockView : public UICardPage {
-public:
- MainClockView();
- ~MainClockView() override;
- static MainClockView *GetInstance(void);
- bool InitView(void);
- void PreLoad(void) override;
- void UnLoad(void) override;
- void RefreshStep(int step);
- void RefreshHeartRate(int value);
- void ClockAnimatorStart(void);
- void ClockAnimatorStop(void);
- void UpdateTime(void);
-
-private:
- void InitStepValue();
- bool InitLabelView(void);
- bool InitCenterCircleView(void);
- bool InitHandView(void);
- void InitDateTime(void);
- bool InitSweepClock(void);
- bool LoadClockImage(Image *view, uint32_t resId);
- bool LoadClockImage(UIImageView *view, uint32_t resId);
- UIImageView *curFace{nullptr};
- UILabelButton *stepLabel{nullptr};
- UILabel *batteryLabel{nullptr};
- UILabel *weekLabel{nullptr};
- UILabel *heartRateLabel{nullptr};
- UISweepClock *mainSweepClock{nullptr};
- Image *secondHand{nullptr};
- Image *minuteHand{nullptr};
- Image *hourHand{nullptr};
- UIImageView *heartRate{nullptr};
- Image *hand24Hour{nullptr};
- UIImageView *weekDay{nullptr};
- UIImageView *progress{nullptr};
- Image *bigCircle{nullptr};
- Image *medCircle{nullptr};
- Image *smallCircle{nullptr};
- bool viewiInitStatus{false};
-};
-} // namespace OHOS
-#endif // MAIN_CLOCK_VIEW_H
+ #ifndef MAIN_CLOCK_VIEW_H
+ #define MAIN_CLOCK_VIEW_H
+
+ #include <string>
+ #include <time.h>
+ #include "View.h"
+ #include "components/ui_view_group.h"
+ #include "components/ui_image_view.h"
+ #include "components/ui_label.h"
+ #include "components/ui_label_ext.h"
+ #include "components/ui_label_button.h"
+ #include "components/ui_box_progress.h"
+ #include "components/ui_image_animator.h"
+ #include "components/root_view.h"
+
+ #include "components/ui_sweep_clock.h"
+ #include "ChangeSliceListener.h"
+ #include "font/ui_font_bitmap.h"
+ #include "font/ui_font.h"
+ #include "graphic_config.h"
+ #include "HealthModel.h"
+ #include "ActivityModel.h"
+ #include "UiConfig.h"
+ #include "components/ui_card_page.h"
+ #include "animator/animator_manager.h"
+ #include "time.h"
+ #include "sys/time.h"
+
+ namespace OHOS
+ {
+ /*表盘颜色配置*/
+ enum ColorTypeSet
+ {
+ COLOR_WHITE = 0,
+ COLOR_BLACK,
+ COLOR_GRAY,
+ COLOR_GREEN,
+ COLOR_ORANGE,
+ COLOR_BLUE,
+ COLOR_DEFAULT = COLOR_WHITE // 默认颜色
+ };
+ /*表盘电量配置*/
+ enum BatteryDisplayType
+ {
+ BATTERY_DISPLAY_NONE = 0, // 不显示图标
+ BATTERY_DISPLAY_BLACK, // 显示黑色
+ BATTERY_DISPLAY_WHITE, // 显示白色
+ BATTERY_DISPLAY_DEFAULT = BATTERY_DISPLAY_WHITE // 默认:白色
+ };
+ /*表盘时间配置*/
+ enum TimeDisplayPosition
+ {
+ TIME_DISPLAY_BELOW = 0, // 显示在表盘下方
+ TIME_DISPLAY_ABOVE, // 显示在表盘上方
+ TIME_DISPLAY_DEFAULT = TIME_DISPLAY_BELOW // 默认:下方
+ };
+
+ class MainClockView : public UICardPage
+ {
+ public:
+ MainClockView();
+ virtual ~MainClockView();
+ static MainClockView *GetInstance(void);
+ bool InitView(void);
+ void PreLoad(void) override;
+ void UnLoad(void) override;
+ /*刷新数据*/
+ void RefreshStep(int step);
+ void RefreshHeartRate(int value);
+ void ClockAnimatorStart(void);
+ void ClockAnimatorStop(void);
+ /*更新数据*/
+ void UpdateTime(void);
+ void UpdataBattery(void);
+ void SetViewColor(int64_t color);
+ void UpdateBatteryColor(void);
+ /*配置文件*/
+ void SetDialPath(std::string dialpath);
+
+ /*配置自定义表盘*/
+ void SetCustomId(int Id);
+
+ /*配置函数*/
+ bool InitBackground(const char *filename);
+ bool InitTimeView(TimeDisplayPosition type); // 时间
+ bool InitBatteryView(BatteryDisplayType type); // 电量
+ bool InitColor(ColorTypeSet type); // 颜色
+ void SetLabelsColor(ColorType color);
+
+ void UpdateStateShow(void);
+
+ private:
+ void InitStepValue();
+ bool InitLabelView(void);
+ bool InitCenterCircleView(void);
+ bool InitHandView(void);
+ void InitDateTime(void);
+ bool InitClock(void);
+ bool LoadClockImage(Image *view, uint32_t resId);
+ bool LoadClockImage(UIImageView *view, uint32_t resId);
+
+ /*表盘背景*/
+ UIImageView *curFace{nullptr};
+
+ /*时间相关*/
+ UILabel *timerlabel{nullptr};
+ UILabel *weekLabel{nullptr};
+ UILabel *datelabel{nullptr};
+
+ /*电量相关*/
+ UIImageView *batteryiamge{nullptr};
+ UIBoxProgress *batteryprogress{nullptr};
+ UILabel *batterylabel{nullptr};
+ UIImageView *batteryicon{nullptr};
+
+ /*数据相关*/
+ UILabel *stepLabel{nullptr};
+ UILabel *heartlabel{nullptr};
+
+ /*指针表盘相关 暂不使用*/
+ UISweepClock *mainSweepClock{nullptr};
+ Image *secondHand{nullptr};
+ Image *minuteHand{nullptr};
+ Image *hourHand{nullptr};
+ UIImageView *heartRate{nullptr};
+ Image *hand24Hour{nullptr};
+ UIImageView *weekDay{nullptr};
+ UIImageView *progress{nullptr};
+ Image *bigCircle{nullptr};
+ Image *medCircle{nullptr};
+ Image *smallCircle{nullptr};
+
+ UIImageView *dialstateicon_{nullptr}; // 勿扰
+ UIImageView *messageicon_{nullptr}; // 未读图标
+
+ bool viewiInitStatus{false};
+ bool resLoadStatus{false};
+
+ std::string dialFile; // 表盘背景文件名
+ ColorTypeSet colorType = COLOR_DEFAULT; // 颜色类型
+ BatteryDisplayType batterySetting = BATTERY_DISPLAY_NONE; // 电池设置
+ TimeDisplayPosition timePosition = TIME_DISPLAY_DEFAULT; // 时间位置
+ int64_t color_ = Color::White().full; // 电量颜色
+ int32_t power_ = -1; // 电量
+ bool isBatteryIconVisible{false}; // 电池暂停
+ };
+ } // namespace OHOS
+ #endif // MAIN_CLOCK_VIEW_H
+
\ No newline at end of file
+/***
+ * @Date: 2024-07-17 14:09:09
+ * @LastEditors: Caisking 3449750381@qq.com
+ * @LastEditTime: 2024-07-22 09:33:10
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/clock/src/MainClockView.cpp
+ */
/*
* Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved.
* Description: MainClockView
* Create: 2021-08-14
*/
-#include "MainClockView.h"
-#include "MainPresenterSample.h"
-#include "components/ui_label.h"
-#include "wearable_log.h"
-#include "ui_resource_image.h"
-#include "common/image_cache_manager.h"
-#include <ctime>
-
-namespace OHOS {
-static MainClockView *g_pMainClockView = nullptr;
-
-static constexpr uint16_t FONT_DEFAULT_SIZE = 25;
-static constexpr uint16_t FONT_TEXT_SIZE = 24;
-static constexpr uint16_t STEP_LABEL_X = 100;
-static constexpr uint16_t STEP_LABEL_Y = 230;
-static constexpr uint16_t BATTERYP_LABEL_X = 315;
-static constexpr uint16_t BATTERYP_LABEL_Y = 230;
-static constexpr uint16_t TEXT_WIDTH = 60;
-static constexpr uint16_t TEXT_HEIGHT = 35;
-static constexpr uint16_t POINT_POSITION_X = 202;
-static constexpr uint16_t POINT_POSITION_Y = 16;
-static constexpr uint16_t SECOND_POINT_POSITION_Y = 16;
-static constexpr uint16_t POINT_CENTER_X = 25;
-static constexpr uint16_t POINT_CENTER_Y = 211;
-static constexpr uint16_t STEP_CHAR_NUM = 255;
-static constexpr int16_t STEP_LABLE_WIDTH = 75;
-static constexpr int16_t STEP_LABLE_SIZE = 35;
-static constexpr uint16_t WEEKLABEL_POSITION_X = 247;
-static constexpr uint16_t WEEKLABEL_POSITION_Y = 122;
-static constexpr uint16_t HEARTRATELABEL_POSITION_X = 198;
-static constexpr uint16_t HEARTRATELABEL_POSITION_Y = 330;
-static constexpr uint16_t HEARTRATE_POSITION_X = 156;
-static constexpr uint16_t HEARTRATE_POSITION_Y = 260;
-static constexpr uint16_t PROGRESS_POSITION_X = 53;
-static constexpr uint16_t PROGRESS_POSITION_Y = 54;
-static constexpr uint16_t BIGCIRCLE_POSITION_X = 202;
-static constexpr uint16_t BIGCIRCLE_POSITION_Y = 202;
-static constexpr uint16_t MEDCIRCLE_POSITION_X = 202;
-static constexpr uint16_t MEDCIRCLE_POSITION_Y = 202;
-static constexpr uint16_t SMALLCIRCLE_POSITION_X = 202;
-static constexpr uint16_t SMALLCIRCLE_POSITION_Y = 202;
-static constexpr uint16_t WEEKDAY_POSITION_X = 193;
-static constexpr uint16_t WEEKDAY_POSITION_Y = 127;
-static constexpr int16_t SEC_TO_MILLI = 1000;
-static constexpr int16_t USEC_TO_MILLI = 1000;
-static constexpr int16_t MIN_TO_HOUR = 60;
-static constexpr int16_t HOURLY_SYSTEM = 24;
-static constexpr int16_t INTERVAL = 30;
-
-MainClockView::MainClockView()
-{
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MainClockView::MainClockView");
- SetPosition(0, 0, HORIZONTAL_RESOLUTION, VERTICAL_RESOLUTION);
- g_pMainClockView = this;
-}
-
-MainClockView::~MainClockView()
-{
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MainClockView::~MainClockView");
- if (viewiInitStatus) {
- mainSweepClock->RemoveAll();
- delete curFace;
- curFace = nullptr;
- delete stepLabel;
- stepLabel = nullptr;
- delete batteryLabel;
- batteryLabel = nullptr;
- delete secondHand;
- secondHand = nullptr;
- delete minuteHand;
- minuteHand = nullptr;
- delete hourHand;
- hourHand = nullptr;
- delete weekLabel;
- weekLabel = nullptr;
- delete heartRateLabel;
- heartRateLabel = nullptr;
- delete heartRate;
- heartRate = nullptr;
- delete hand24Hour;
- hand24Hour = nullptr;
- delete weekDay;
- weekDay = nullptr;
- delete progress;
- progress = nullptr;
- delete bigCircle;
- bigCircle = nullptr;
- delete medCircle;
- medCircle = nullptr;
- delete smallCircle;
- smallCircle = nullptr;
- Remove(mainSweepClock);
- delete mainSweepClock;
- mainSweepClock = nullptr;
- g_pMainClockView = nullptr;
- }
-}
-
-MainClockView *MainClockView::GetInstance(void)
-{
- return g_pMainClockView;
-}
-
-void MainClockView::InitStepValue()
-{
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MainClockView::InitStepValue");
- uint32_t stepValue;
- int weekToday = ActivityModel::GetInstance()->GetWeekToday();
- ActivityModel::GetInstance()->GetStepData((StepDataDistribute)weekToday, &stepValue);
- char stepChar[STEP_CHAR_NUM] = {0};
- if (sprintf_s(stepChar, STEP_CHAR_NUM, "%d", stepValue) == -1) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "MainClockView::InitStepValue error");
- return;
- }
- if (stepLabel == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "MainClockView::InitStepValue nullptr");
- return;
- }
- stepLabel->SetText(stepChar);
- stepLabel->SetStyleForState(STYLE_BACKGROUND_OPA, OPA_TRANSPARENT, UIButton::RELEASED);
- stepLabel->SetStyleForState(STYLE_BACKGROUND_OPA, OPA_TRANSPARENT, UIButton::PRESSED);
- stepLabel->SetStyleForState(STYLE_BACKGROUND_OPA, OPA_TRANSPARENT, UIButton::INACTIVE);
-}
-
-bool MainClockView::InitLabelView(void)
-{
- UIView::OnClickListener *clickListener = (UIView::OnClickListener *)OHOS::MainPresenterSample::GetInstance();
- stepLabel = new UILabelButton();
- if (stepLabel == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "stepLabel new fail");
- return false;
- }
- stepLabel->SetPosition(STEP_LABEL_X, STEP_LABEL_Y);
- stepLabel->Resize(STEP_LABLE_WIDTH, STEP_LABLE_SIZE);
- stepLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, FONT_DEFAULT_SIZE);
- stepLabel->SetStyle(STYLE_BACKGROUND_OPA, OPA_TRANSPARENT);
- stepLabel->SetViewId(MAIN_CLICK_ACTIVITY);
- stepLabel->SetTouchable(true);
- stepLabel->SetOnClickListener(clickListener);
- InitStepValue();
-
- batteryLabel = new UILabel();
- if (batteryLabel == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "batteryLabel new fail");
- return false;
- }
- batteryLabel->SetPosition(BATTERYP_LABEL_X, BATTERYP_LABEL_Y, TEXT_WIDTH, TEXT_HEIGHT);
- batteryLabel->SetText("90%");
- batteryLabel->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
- batteryLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, FONT_DEFAULT_SIZE);
- batteryLabel->SetStyle(STYLE_BACKGROUND_COLOR, OPA_TRANSPARENT);
-
- heartRateLabel = new UILabel();
- if (heartRateLabel == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "heartRateLabel new fail");
- return false;
- }
- heartRateLabel->SetPosition(HEARTRATELABEL_POSITION_X, HEARTRATELABEL_POSITION_Y, TEXT_WIDTH, TEXT_HEIGHT);
- heartRateLabel->SetText("--");
- heartRateLabel->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
- heartRateLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, FONT_DEFAULT_SIZE);
- heartRateLabel->SetStyle(STYLE_BACKGROUND_COLOR, OPA_OPAQUE);
-
- weekLabel = new UILabel();
- if (weekLabel == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "weekLabel new fail");
- return false;
- }
- weekLabel->SetPosition(WEEKLABEL_POSITION_X, WEEKLABEL_POSITION_Y, TEXT_WIDTH, TEXT_HEIGHT);
- weekLabel->SetText("2");
- weekLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, FONT_TEXT_SIZE);
- weekLabel->SetStyle(STYLE_BACKGROUND_COLOR, OPA_TRANSPARENT);
- return true;
-}
-
-bool MainClockView::InitCenterCircleView(void)
-{
- bigCircle = new Image();
- if (bigCircle == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bigCircle new fail");
- return false;
- }
- if (!LoadClockImage(bigCircle, CLOCK_BIGCIRCLE_IMAGE_PATH)) {
- return false;
- }
-
- medCircle = new Image();
- if (medCircle == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "medCircle new fail");
- return false;
- }
- if (!LoadClockImage(medCircle, CLOCK_MEDCIRCLE_IMAGE_PATH)) {
- return false;
- }
-
- smallCircle = new Image();
- if (smallCircle == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "smallCircle new fail");
- return false;
- }
- if (!LoadClockImage(smallCircle, CLOCK_CIRCLE_IMAGE_PATH)) {
- return false;
- }
- return true;
-}
-
-bool MainClockView::InitHandView(void)
-{
- secondHand = new Image();
- if (secondHand == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "secondHand new fail");
- return false;
- }
- if (!LoadClockImage(secondHand, CLOCK_SECONDHAND)) {
- return false;
- }
-
- minuteHand = new Image();
- if (minuteHand == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "minuteHand new fail");
- return false;
- }
- if (!LoadClockImage(minuteHand, CLOCK_MINUTEHAND)) {
- return false;
- }
- hourHand = new Image();
- if (hourHand == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "hourHand new fail");
- return false;
- }
- if (!LoadClockImage(hourHand, CLOCK_HOURHAND)) {
- return false;
- }
-
- hand24Hour = new Image();
- if (hand24Hour == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "hand24Hour new fail");
- return false;
- }
- if (!LoadClockImage(hand24Hour, CLOCK_HAND24HOUR_IMAGE_PATH)) {
- return false;
- }
- return true;
-}
-
-bool MainClockView::LoadClockImage(Image *view, uint32_t resId)
-{
- std::string file = CLOCK_IAMGES;
- ImageInfo* image = ImageCacheManager::GetInstance().LoadOneInMultiRes(resId, file);
- if (image == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "LoadClockImage %x fail", resId);
- return false;
- }
- view->SetSrc(image);
- return true;
-}
-
-bool MainClockView::LoadClockImage(UIImageView *view, uint32_t resId)
-{
- std::string file = CLOCK_IAMGES;
- ImageInfo* image = ImageCacheManager::GetInstance().LoadOneInMultiRes(resId, file);
- if (image == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "LoadClockImage %x fail", resId);
- return false;
- }
- view->SetSrc(image);
- return true;
-}
-
-bool MainClockView::InitSweepClock(void)
-{
- curFace = new UIImageView();
- if (curFace == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "curFace new fail");
- return false;
- }
- curFace->SetPosition(0, 0);
-
- if (!LoadClockImage(curFace, CLOCK_MAIN_FACE_IMAGE)) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "curFace LoadClockImage CLOCK_MAIN_FACE_IMAGE fail");
- return false;
- }
-
- if (!InitLabelView()) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "InitLabelView() fail");
- return false;
- }
- if (!InitCenterCircleView()) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "InitCenterCircleView() fail");
- return false;
- }
- heartRate = new UIImageView();
- if (heartRate == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "heartRate new fail");
- return false;
- }
- heartRate->SetPosition(HEARTRATE_POSITION_X, HEARTRATE_POSITION_Y);
- if (!LoadClockImage(heartRate, CLOCK_HEARTRATE_IMAGE_PATH)) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "heartRate LoadClockImage CLOCK_HEARTRATE_IMAGE_PATH fail");
- return false;
- }
-
- progress = new UIImageView();
- if (progress == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "progress new fail");
- return false;
- }
- progress->SetPosition(PROGRESS_POSITION_X, PROGRESS_POSITION_Y);
- if (!LoadClockImage(progress, CLOCK_PROGRESS_IMAGE_PATH)) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "progress LoadClockImage CLOCK_PROGRESS_IMAGE_PATH fail");
- return false;
- }
-
- InitHandView();
- weekDay = new UIImageView();
- if (weekDay == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "weekDay new fail");
- return false;
- }
- weekDay->SetPosition(WEEKDAY_POSITION_X, WEEKDAY_POSITION_Y);
- if (!LoadClockImage(weekDay, CLOCK_THURSDAY_IMAGE_PATH)) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "weekDay LoadClockImage CLOCK_THURSDAY_IMAGE_PATH fail");
- return false;
- }
- return true;
-}
-
-void MainClockView::PreLoad(void)
-{
- if (!viewiInitStatus) {
- InitView();
- viewiInitStatus = true;
- }
-}
-
-void MainClockView::UnLoad(void)
-{
- // Main clock view is commonly used page, so we do not release it's resources inner slice.
-}
-
-bool MainClockView::InitView(void)
-{
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MainClockView::InitView");
-
- mainSweepClock = new UISweepClock();
- if (mainSweepClock == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "mainSweepClock new fail");
- return false;
- }
- if (!InitSweepClock()) {
- return false;
- }
-
- mainSweepClock->Add(curFace);
- mainSweepClock->Add(stepLabel);
- mainSweepClock->Add(heartRate);
- mainSweepClock->Add(weekLabel);
- mainSweepClock->Add(heartRateLabel);
- mainSweepClock->Add(weekDay);
- mainSweepClock->Add(progress);
- mainSweepClock->Add(batteryLabel);
- Add(mainSweepClock);
-
- mainSweepClock->SetDragParentInstead(true);
- mainSweepClock->SetPosition(0, 0, HORIZONTAL_RESOLUTION, VERTICAL_RESOLUTION);
-
- // {214, 3}: position x, y {14, 223}: center x, y
- mainSweepClock->SetHandImage(UISweepClock::HandType::SECOND_HAND, *secondHand,
- { POINT_POSITION_X, SECOND_POINT_POSITION_Y }, { POINT_CENTER_X, POINT_CENTER_Y });
- mainSweepClock->SetHandImage(UISweepClock::HandType::MINUTE_HAND, *minuteHand,
- { POINT_POSITION_X, POINT_POSITION_Y }, { POINT_CENTER_X, POINT_CENTER_Y });
- mainSweepClock->SetHandImage(UISweepClock::HandType::HOUR_HAND, *hourHand, { POINT_POSITION_X, POINT_POSITION_Y },
- { POINT_CENTER_X, POINT_CENTER_Y });
- mainSweepClock->SetHandCircleImage(UISweepClock::HandType::SECOND_HAND, *smallCircle,
- { SMALLCIRCLE_POSITION_X, SMALLCIRCLE_POSITION_Y });
- mainSweepClock->SetHandCircleImage(UISweepClock::HandType::MINUTE_HAND, *medCircle,
- { MEDCIRCLE_POSITION_X, MEDCIRCLE_POSITION_Y });
- mainSweepClock->SetHandCircleImage(UISweepClock::HandType::HOUR_HAND, *bigCircle,
- { BIGCIRCLE_POSITION_X, BIGCIRCLE_POSITION_Y });
-
- mainSweepClock->SetInitTime24Hour(0, 0, 0);
- mainSweepClock->SetWorkMode(UISweepClock::WorkMode::NORMAL);
- InitDateTime();
- SetCoverable(true);
- return true;
-}
-
-void MainClockView::RefreshStep(int step)
-{
- char stepChar[STEP_CHAR_NUM] = {0};
-
- (void)sprintf_s(stepChar, STEP_CHAR_NUM, "%d", step);
- stepLabel->SetText(stepChar);
-}
-
-void MainClockView::RefreshHeartRate(int value)
-{
- if (value == 0) {
- heartRateLabel->SetText("--");
- return;
- }
- char heartRateChar[STEP_CHAR_NUM] = {0};
-
- (void)sprintf_s(heartRateChar, STEP_CHAR_NUM, "%d", value);
- heartRateLabel->SetText(heartRateChar);
-}
-
-void MainClockView::InitDateTime(void)
-{
- UpdateTime();
-}
-
-void MainClockView::UpdateTime(void)
-{
- struct timeval tv;
- gettimeofday(&tv, nullptr);
- uint64_t second = tv.tv_sec;
- uint64_t uSecond = tv.tv_usec;
- uint64_t minute = second / MIN_TO_HOUR;
- uint64_t hour = minute / MIN_TO_HOUR + timezone / (MIN_TO_HOUR * MIN_TO_HOUR);
- uint8_t realHour = static_cast<uint8_t>(hour % HOURLY_SYSTEM);
- uint8_t realMinute = static_cast<uint8_t>(minute % MIN_TO_HOUR);
- uint16_t realMilliSecond = static_cast<uint16_t>((second % MIN_TO_HOUR) *
- SEC_TO_MILLI + uSecond / USEC_TO_MILLI);
- mainSweepClock->SetSweepTime12Hour(realHour, realMinute, realMilliSecond, 1);
-}
-}
+ #include "MainClockView.h"
+ #include "MainModel.h"
+ #include "MainPresenterSample.h"
+ #include "SetDialModel.h"
+// #include "battery_hal.h"
+ #include "common/image_cache_manager.h"
+ #include "components/ui_label.h"
+ #include "custom_runtime.h"
+
+// #include "main/include/PullUpDownView.h"
+// #include "message/include/MessageControlView.h"
+#include "uicomponents/UIComponents.h"
+
+ #include "ui_resource_image.h"
+
+ #include "wearable_log.h"
+ #include <cwchar>
+ #include <iomanip>
+ #include <iostream>
+ #include <sstream>
+ #include <string>
+ #include <sys/stat.h>
+ #include <time.h>
+ #include <unistd.h>
+// extern uint8_t battery_get_voltage(float *voltage);
+
+ #define TIMEVIEW_UP 0
+ #define TIMEVIEW_DOWN 1
+ #define SECONDTEST 0
+ #define TIMEFORMAT 1
+
+ std::string Enweekdays[] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
+ std::string Cnweekdays[] = {"星期天", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"};
+
+ static constexpr const char *CHAGE_BATTERY = "/user/res/Battery/Icon.bin";
+ static constexpr const char *WHITE_BATTERY = "/user/res/Battery/Battery_White.bin";
+ static constexpr const char *BLACK_BATTERY = "/user/res/Battery/Battery_Black.bin";
+
+ static constexpr const char *DISTURBICON = "user/res/dial_state/disturbicon.bin";
+ static constexpr const char *MESSAGEICON = "user/res/dial_state/unread.bin";
+ static constexpr const char *SLEEPICON = "user/res/dial_state/sleep.bin";
+ static constexpr const char *LOCKICON = "user/res/dial_state/lock.bin";
+
+ // 定义一些常量
+ constexpr int HOURS_IN_DAY = 24;
+ constexpr int MINUTES_IN_HOUR = 60;
+ constexpr int HOUR_FORMAT_12 = 12;
+ constexpr int BATTERY_LOW_THRESHOLD = 10;
+ constexpr int BATTERY_MEDIUM_THRESHOLD = 20;
+
+ namespace OHOS
+ {
+ #if 0
+ static constexpr uint16_t FONT_DEFAULT_SIZE = 25;
+ static constexpr uint16_t FONT_TEXT_SIZE = 24;
+ static constexpr uint16_t STEP_LABEL_X = 100;
+ static constexpr uint16_t STEP_LABEL_Y = 230;
+ static constexpr uint16_t BATTERYP_LABEL_X = 315;
+ static constexpr uint16_t BATTERYP_LABEL_Y = 230;
+ static constexpr uint16_t TEXT_WIDTH = 60;
+ static constexpr uint16_t TEXT_HEIGHT = 35;
+ static constexpr uint16_t POINT_POSITION_X = 202;
+ static constexpr uint16_t POINT_POSITION_Y = 16;
+ static constexpr uint16_t SECOND_POINT_POSITION_Y = 16;
+ static constexpr uint16_t POINT_CENTER_X = 25;
+ static constexpr uint16_t POINT_CENTER_Y = 211;
+ static constexpr int16_t STEP_LABLE_WIDTH = 75;
+ static constexpr int16_t STEP_LABLE_SIZE = 35;
+ static constexpr uint16_t WEEKLABEL_POSITION_X = 181;
+ static constexpr uint16_t WEEKLABEL_POSITION_Y = 365;
+ static constexpr uint16_t HEARTRATELABEL_POSITION_X = 198;
+ static constexpr uint16_t HEARTRATELABEL_POSITION_Y = 330;
+ static constexpr uint16_t HEARTRATE_POSITION_X = 156;
+ static constexpr uint16_t HEARTRATE_POSITION_Y = 260;
+ static constexpr uint16_t PROGRESS_POSITION_X = 53;
+ static constexpr uint16_t PROGRESS_POSITION_Y = 54;
+ static constexpr uint16_t BIGCIRCLE_POSITION_X = 202;
+ static constexpr uint16_t BIGCIRCLE_POSITION_Y = 202;
+ static constexpr uint16_t MEDCIRCLE_POSITION_X = 202;
+ static constexpr uint16_t MEDCIRCLE_POSITION_Y = 202;
+ static constexpr uint16_t SMALLCIRCLE_POSITION_X = 202;
+ static constexpr uint16_t SMALLCIRCLE_POSITION_Y = 202;
+ static constexpr uint16_t WEEKDAY_POSITION_X = 193;
+ static constexpr uint16_t WEEKDAY_POSITION_Y = 127;
+ static constexpr int16_t SEC_TO_MILLI = 1000;
+ static constexpr int16_t USEC_TO_MILLI = 1000;
+ static constexpr int16_t MIN_TO_HOUR = 60;
+ static constexpr int16_t HOURLY_SYSTEM = 24;
+ static constexpr int16_t INTERVAL = 30;
+ #endif
+ static constexpr uint16_t STEP_CHAR_NUM = 255;
+ static MainClockView *g_pMainClockView = nullptr;
+ MainClockView::MainClockView()
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MainClockView::MainClockView");
+ SetPosition(0, 0, HORIZONTAL_RESOLUTION, VERTICAL_RESOLUTION);
+ g_pMainClockView = this;
+ }
+
+ MainClockView::~MainClockView()
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MainClockView::~MainClockView");
+
+ delete curFace; // 背景
+ curFace = nullptr;
+ delete timerlabel; // 时间
+ timerlabel = nullptr;
+ delete weekLabel; // 星期
+ weekLabel = nullptr;
+ delete datelabel; // 日期
+ datelabel = nullptr;
+ delete batteryiamge; // 电量框
+ batteryiamge = nullptr;
+ delete batteryprogress; // 电量进度条
+ batteryprogress = nullptr;
+ delete batterylabel; // 电量label
+ batterylabel = nullptr;
+ delete batteryicon; // 充电图标
+ batteryicon = nullptr;
+ delete stepLabel; // 步数
+ stepLabel = nullptr;
+ delete heartlabel; // 心率
+ heartlabel = nullptr;
+ if (dialstateicon_ != nullptr) {
+ delete dialstateicon_;
+ dialstateicon_ = nullptr;
+ }
+
+ if (messageicon_ != nullptr) {
+ delete messageicon_;
+ messageicon_ = nullptr;
+ }
+
+ g_pMainClockView = nullptr;
+ }
+
+ MainClockView *MainClockView::GetInstance(void)
+ {
+ return g_pMainClockView;
+ }
+ /*配置自定义表盘*/
+ void MainClockView::SetCustomId(int Id)
+ {
+ // // 默认表盘和异常表盘采用原表盘配置
+ // if (Id == DIAL_CLOCK || Id > DIAL_MAX)
+ // return;
+
+ // DialLayout dialconfig;
+ // if (SetDialModel::GetInstance().loadDialConfig(Id, dialconfig))
+ // {
+ // // 设置背景
+ // dialFile = SetDialModel::GetInstance().GetSaveDir(Id) + "/" + "main_bg.bin";
+ // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "dialFile is %s", dialFile.c_str());
+
+ // // 设置表盘配置
+ // timePosition = static_cast<TimeDisplayPosition>(dialconfig.timeDisplay);
+ // batterySetting = static_cast<BatteryDisplayType>(dialconfig.batteryDisplay);
+ // colorType = static_cast<ColorTypeSet>(dialconfig.colorTypeSet);
+ // }
+ // else
+ // {
+ // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "custom_id [%d] file is error! ", Id);
+ // }
+ }
+
+ /*设置表盘背景*/
+ void MainClockView::SetDialPath(std::string dialpath)
+ {
+ if (dialpath.empty())
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Error: The specified dial path does not exist:");
+ return;
+ }
+ dialFile.clear();
+ dialFile = dialpath;
+ }
+
+ bool MainClockView::InitClock(void)
+ {
+ InitBackground(dialFile.c_str());
+ InitTimeView(timePosition);
+ InitBatteryView(batterySetting);
+ InitColor(colorType);
+ return true;
+ }
+ /*初始化表盘背景*/
+ bool MainClockView::InitBackground(const char *filename) {
+
+ if (filename == nullptr) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "filename is null");
+ return false;
+ }
+ curFace = new UIImageView();
+ if (curFace == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "curFace new fail");
+ return false;
+ }
+ curFace->SetPosition(0, 0);
+
+ ImageCacheManager::GetInstance().UnloadSingleRes(filename);
+ ImageInfo *image = ImageCacheManager::GetInstance().LoadSingleRes(filename, false);
+ if (image == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "LoadAllDialFromRam loadimage %s fail",
+ filename);
+ curFace->SetSrc(DEFAULT_DIALBACK_PATH);
+ Add(curFace);
+ return false;
+ }
+ curFace->SetSrc(image);
+ Add(curFace);
+ return true;
+ }
+
+ /*
+ 时间显示 [时间 日期 星期]
+ 0 显示在表盘上方
+ 1 显示在表盘下方
+
+ 默认:下方
+ */
+ bool MainClockView::InitTimeView(TimeDisplayPosition type)
+ {
+ // 创建UILabel的助手函数
+ auto createLabel = [](UILabel *&label, const std::string &labelName) -> bool
+ {
+ label = new UILabel();
+ if (label == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "%s creation failed", labelName.c_str());
+ return false;
+ }
+ label->SetStyle(STYLE_BACKGROUND_COLOR, OPA_TRANSPARENT);
+ label->SetLineBreakMode(UILabel::LINE_BREAK_ELLIPSIS); // 居中
+ label->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
+ label->SetStyle(STYLE_BACKGROUND_COLOR, OPA_OPAQUE);
+ return true;
+ };
+
+ // 创建时间、星期、日期标签
+ if (!createLabel(timerlabel, "timerlabel") ||
+ !createLabel(datelabel, "datelabel"))
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Label creation failed, exiting InitTimeView");
+ return false; // 分配失败
+ }
+
+ // 设置标签的位置和字体大小
+ switch (type)
+ {
+ case TIME_DISPLAY_ABOVE:
+ timerlabel->SetPosition(0, 65, 466, 150);
+ timerlabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME_EN , 100);
+ datelabel->SetPosition(83, 186, 300, 60);
+ datelabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME_EN , 26);
+ // weekLabel->SetPosition(246, 196, 200, 60);
+ // weekLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME_EN , 26);
+ break;
+
+ case TIME_DISPLAY_BELOW:
+ default: // 默认情况下显示在下方
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "type is unknown, defaulting to TIMEVIEW_DOWN");
+ timerlabel->SetPosition(83, 300, 300, 100);
+ timerlabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME_EN , 65);
+ datelabel->SetPosition(137, 380, 200, 60);
+ datelabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME_EN , 26);
+ // weekLabel->SetPosition(252, 390, 200, 60);
+ // weekLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME_EN , 26);
+ break;
+ }
+
+ Add(timerlabel);
+ Add(datelabel);
+ // Add(weekLabel);
+
+ // timerlabel->SetWorkMode(UISweepClock::WorkMode::NORMAL);
+ return true;
+ }
+ /*
+ 界面颜色显示
+ 0 白
+ 1 黑
+ 2 灰
+ 3 绿
+ 4 橙
+ 5 蓝
+
+ 默认:白
+ */
+ bool MainClockView::InitColor(ColorTypeSet type)
+ {
+ if (!timerlabel ||!datelabel)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "label is null");
+ return false;
+ }
+
+ // 根据传入的颜色类型设置文本颜色
+ switch (type)
+ {
+ case COLOR_BLACK:
+ SetLabelsColor(Color::GetColorFromRGBA(0x00, 0x00, 0x00, 0xff));
+ break;
+ case COLOR_GRAY:
+ SetLabelsColor(Color::GetColorFromRGBA(0xCC, 0xCC, 0xCC, 0xff));
+ break;
+ case COLOR_GREEN:
+ SetLabelsColor(Color::GetColorFromRGBA(0x4F, 0xC3, 0x4C, 0xff));
+ break;
+ case COLOR_ORANGE:
+ SetLabelsColor(Color::GetColorFromRGBA(0xFF, 0x5A, 0x36, 0xff));
+ break;
+ case COLOR_BLUE:
+ SetLabelsColor(Color::GetColorFromRGBA(0x35, 0x49, 0xFF, 0xff));
+ break;
+ case COLOR_WHITE:
+ default: // 默认情况下使用白色
+ SetLabelsColor(Color::GetColorFromRGBA(0xff, 0xff, 0xff, 0xff));
+ break;
+ }
+ return true;
+ }
+
+ void MainClockView::SetLabelsColor(ColorType color)
+ {
+ timerlabel->SetTextColor(color);
+ datelabel->SetTextColor(color);
+ // weekLabel->SetTextColor(color);
+ }
+
+ /*
+ 电量显示 [电池框图片 电池进度条 电池标签]
+ 0 不显示图标
+ 1 显示黑色
+ 2 显示白色
+
+ 默认:白色
+ */
+ bool MainClockView::InitBatteryView(BatteryDisplayType type)
+ {
+ // 不显示电池 icon
+ if (type == BATTERY_DISPLAY_NONE)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "no show battery");
+ return false;
+ }
+
+ // 创建电池框图像
+ batteryiamge = new UIImageView();
+ if (!batteryiamge)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "batteryiamge creation failed");
+ return false;
+ }
+
+ // 创建电池图标图像
+ batteryicon = new UIImageView();
+ if (!batteryicon)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "batteryicon creation failed");
+ return false;
+ }
+
+ // 创建电池进度条
+ batteryprogress = new UIBoxProgress();
+ if (!batteryprogress)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "batteryprogress creation failed");
+ return false;
+ }
+
+ // 创建电池标签
+ batterylabel = new UILabel();
+ if (!batterylabel)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "batterylabel creation failed");
+ return false;
+ }
+
+ // 设置位置
+ batteryicon->SetPosition(186, 52, 100, 100);
+ batteryiamge->SetPosition(176, 52, 100, 100);
+
+ batteryprogress->SetPosition(182, 58, 30, 18);
+ batteryprogress->SetViewId("progress");
+ batteryprogress->SetBackgroundStyle(STYLE_BACKGROUND_COLOR, 0xffffffff);
+ batteryprogress->SetBackgroundStyle(STYLE_BACKGROUND_OPA, 0x00);
+
+ batterylabel->SetPosition(228, 52, 200, 60);
+ batterylabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME_EN , 26);
+
+ // 设置图标和颜色
+ switch (type) {
+ case BATTERY_DISPLAY_BLACK:
+ batteryiamge->SetSrc(BLACK_BATTERY);
+ batterylabel->SetTextColor(Color::Black());
+ batteryprogress->SetForegroundStyle(STYLE_BACKGROUND_COLOR,
+ 0xff000000);
+ break;
+ case BATTERY_DISPLAY_WHITE:
+ default:
+ batteryiamge->SetSrc(WHITE_BATTERY);
+ batterylabel->SetTextColor(Color::White());
+ batteryprogress->SetForegroundStyle(STYLE_BACKGROUND_COLOR,
+ 0xffffffff);
+ break;
+ }
+ batteryicon->SetSrc(CHAGE_BATTERY);
+ batteryicon->SetVisible(false); // 设置不可见
+
+ Add(batteryiamge);
+ Add(batterylabel);
+ Add(batteryprogress);
+ Add(batteryicon);
+ return true;
+ }
+
+ void MainClockView::UpdateStateShow()
+ {
+ // if (messageicon_ == nullptr || dialstateicon_ == nullptr)
+ // return;
+
+ // /*配置未读状态*/
+ // messageicon_->SetVisible(MainModel::GetInstance().getMessageActiveState());
+ // /*配置表盘状态*/
+ // dialstateicon_->SetVisible(true);
+ // switch (MainModel::GetInstance().getHighestPriorityActiveState())
+ // {
+ // case DialState::DO_NOT_DISTURB:
+ // dialstateicon_->SetSrc(DISTURBICON);
+ // break;
+ // case DialState::SLEEP:
+ // dialstateicon_->SetSrc(SLEEPICON);
+ // break;
+ // case DialState::LOCK:
+ // dialstateicon_->SetSrc(LOCKICON);
+ // break;
+ // default:
+ // dialstateicon_->SetVisible(false);
+ // break;
+ // }
+ }
+
+ void MainClockView::PreLoad(void)
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MainClockView::PreLoad");
+ if (!viewiInitStatus)
+ {
+ InitView();
+
+ /*增加手表状态图标*/
+ InitImageView(dialstateicon_, 213, 2, 40, 40, "disturbicon", DISTURBICON);
+ // dialstateicon_->SetVisible(false);
+
+ /*增加未读图标*/
+ InitImageView(messageicon_, 223, 444, 20, 20, "messageicon_", MESSAGEICON);
+
+ UpdateStateShow();
+
+ Add(dialstateicon_);
+ Add(messageicon_);
+
+ viewiInitStatus = true;
+ }
+
+ if (!resLoadStatus)
+ {
+ // if (PullUpDownView::GetInstance() != nullptr)
+ // {
+ // PullUpDownView::GetInstance()->PreLoad();
+ // }
+ // if (MessageControlView::GetInstance() != nullptr)
+ // {
+ // MessageControlView::GetInstance()->PreLoad();
+ // }
+ resLoadStatus = true;
+ }
+ }
+
+ void MainClockView::UnLoad(void)
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MainClockView::UnLoad");
+
+ if (resLoadStatus)
+ {
+ // if (PullUpDownView::GetInstance() != nullptr)
+ // {
+ // PullUpDownView::GetInstance()->UnLoad();
+ // }
+
+ // if (MessageControlView::GetInstance() != nullptr)
+ // {
+ // MessageControlView::GetInstance()->UnLoad();
+ // }
+ resLoadStatus = false;
+ }
+ }
+
+ bool MainClockView::InitView(void)
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MainClockView::InitView");
+ if (InitClock() == false)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "InitClock is error");
+ return false;
+ }
+ InitDateTime(); // 初始化数据
+ SetCoverable(true);
+ return true;
+ }
+
+ void MainClockView::InitDateTime(void)
+ {
+ UpdateTime();
+ }
+
+ /* 更新时间 */
+ void MainClockView::UpdateTime(void) {
+ struct tm local_time = {0};
+ time_t seconds = time(nullptr);
+
+ // Get local time
+ if (localtime_r(&seconds, &local_time) == nullptr) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "get localtime error!");
+ return;
+ }
+
+ // Extract hour and minute
+ uint8_t hour = local_time.tm_hour % HOURS_IN_DAY;
+ uint8_t minute = local_time.tm_min % MINUTES_IN_HOUR;
+ char timebuf[64] = {0};
+ //时间显示样式
+ #if TIMEFORMAT
+ if (uapi_dev_runtime_get_time_hour_show_model() == HOUR_FORMAT_12) {
+ if (hour > HOUR_FORMAT_12) {
+ hour -= HOUR_FORMAT_12;
+ }
+ }
+ #endif
+ //是否显示秒
+ #if SECONDTEST
+ uint8_t second = local_time.tm_sec;
+ sprintf(timebuf, "%02d:%02d:%02d", hour, minute, second);
+ #else
+ sprintf_s(timebuf, sizeof(timebuf), "%02d:%02d", hour, minute);
+ #endif
+
+ // Update display labels
+ if (timerlabel != nullptr)
+ timerlabel->SetText(timebuf);
+
+ // Update date and week day
+ std::string weekStr = Cnweekdays[local_time.tm_wday];
+ std::string dateStr = std::to_string(local_time.tm_mon + 1) + "月" +
+ std::to_string(local_time.tm_mday) + "号 " + weekStr;
+
+ if (datelabel != nullptr)
+ datelabel->SetText(dateStr.c_str());
+
+ // Update battery status
+ if (batterySetting == BATTERY_DISPLAY_NONE)
+ return;
+
+ UpdateBatteryColor();
+
+ float voltage = 0.0F;
+ // int power = battery_get_voltage(&voltage);
+ int power = 100;
+ if (power == power_)
+ return;
+
+ power_ = power;
+ // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "batteryprogress power_:%d", power_);
+
+ if (batteryprogress != nullptr && batterylabel != nullptr) {
+ batteryprogress->SetValue(power_);
+ std::string batteryStr = std::to_string(power_) + "%";
+ batterylabel->SetText(batteryStr.c_str());
+ }
+ }
+
+ void MainClockView::UpdateBatteryColor(void)
+ {
+#ifdef FD230_650
+ bool isCharging = get_charge_stat(); // 获取充电状态
+
+ if (isCharging)
+ {
+ if (!isBatteryIconVisible)
+ {
+ batteryicon->SetVisible(true);
+ isBatteryIconVisible = true;
+ }
+ SetViewColor(Color::Green().full); // 充电状态为绿色
+ return;
+ }
+ else
+ {
+ if (isBatteryIconVisible)
+ {
+ batteryicon->SetVisible(false);
+ isBatteryIconVisible = false;
+ }
+
+ if (power_ <= BATTERY_LOW_THRESHOLD)
+ {
+ SetViewColor(Color::Red().full);
+ }
+ else if (power_ <= BATTERY_MEDIUM_THRESHOLD)
+ {
+ SetViewColor(Color::Yellow().full);
+ }
+ else
+ {
+ if (batterySetting == BATTERY_DISPLAY_BLACK)
+ {
+ SetViewColor(Color::Black().full);
+ }
+ else
+ {
+ SetViewColor(Color::White().full);
+ }
+ }
+ }
+#endif
+ }
+
+ void MainClockView::SetViewColor(int64_t color)
+ {
+ if (color == color_)
+ {
+ return;
+ }
+ color_ = color;
+ batteryprogress->SetForegroundStyle(STYLE_BACKGROUND_COLOR, color_);
+ }
+
+ /*刷新步数*/
+ void MainClockView::RefreshStep(int step)
+ {
+ if (stepLabel == nullptr)
+ return;
+
+ char stepChar[STEP_CHAR_NUM] = {0};
+ (void)sprintf_s(stepChar, STEP_CHAR_NUM, "%d", step);
+ stepLabel->SetText(stepChar);
+ }
+
+ /*刷新心率*/
+ void MainClockView::RefreshHeartRate(int value)
+ {
+ if (heartlabel == nullptr)
+ return;
+
+ if (value == 0)
+ {
+ heartlabel->SetText("--");
+ return;
+ }
+ char heartRateChar[STEP_CHAR_NUM] = {0};
+ (void)sprintf_s(heartRateChar, STEP_CHAR_NUM, "%d", value);
+ heartlabel->SetText(heartRateChar);
+ }
+
+ /*初始化步数*/
+ void MainClockView::InitStepValue()
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MainClockView::InitStepValue");
+ uint32_t stepValue;
+ int weekToday = ActivityModel::GetInstance()->GetWeekToday();
+ ActivityModel::GetInstance()->GetStepData((StepDataDistribute)weekToday, &stepValue);
+ char stepChar[STEP_CHAR_NUM] = {0};
+ if (sprintf_s(stepChar, STEP_CHAR_NUM, "%d", stepValue) == -1)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "MainClockView::InitStepValue error");
+ return;
+ }
+ if (stepLabel == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "MainClockView::InitStepValue nullptr");
+ return;
+ }
+ stepLabel->SetText(stepChar);
+ }
+ /*初始化指针图片*/
+ bool MainClockView::InitCenterCircleView(void)
+ {
+
+ bigCircle = new Image();
+ if (bigCircle == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bigCircle new fail");
+ return false;
+ }
+ if (LoadClockImage(bigCircle, CLOCK_CLASSIC_GEOMETRY) == false)
+ {
+ return false;
+ }
+
+ medCircle = new Image();
+ if (medCircle == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "medCircle new fail");
+ return false;
+ }
+ if (LoadClockImage(medCircle, CLOCK_CLASSIC_GEOMETRY) == false)
+ {
+ return false;
+ }
+
+ smallCircle = new Image();
+ if (smallCircle == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "smallCircle new fail");
+ return false;
+ }
+ if (LoadClockImage(smallCircle, CLOCK_CLASSIC_GEOMETRY) == false)
+ {
+ return false;
+ }
+
+ return true;
+ }
+
+ bool MainClockView::InitHandView(void)
+ {
+ secondHand = new Image();
+ if (secondHand == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "secondHand new fail");
+ return false;
+ }
+ if (LoadClockImage(secondHand, CLOCK_CLOCK_SECOND) == false)
+ {
+ return false;
+ }
+
+ minuteHand = new Image();
+ if (minuteHand == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "minuteHand new fail");
+ return false;
+ }
+ if (LoadClockImage(minuteHand, CLOCK_CLOCK_MINUTE) == false)
+ {
+ return false;
+ }
+ hourHand = new Image();
+ if (hourHand == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "hourHand new fail");
+ return false;
+ }
+ if (LoadClockImage(hourHand, CLOCK_CLOCK_HOUR) == false)
+ {
+ return false;
+ }
+
+ hand24Hour = new Image();
+ if (hand24Hour == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "hand24Hour new fail");
+ return false;
+ }
+ if (LoadClockImage(hand24Hour, CLOCK_CLASSIC_GEOMETRY) == false)
+ {
+ return false;
+ }
+
+ return true;
+ }
+
+ bool MainClockView::LoadClockImage(Image *view, uint32_t resId)
+ {
+
+ std::string file = CLOCK_IAMGES;
+ ImageInfo *image = ImageCacheManager::GetInstance().LoadOneInMultiRes(resId, file);
+ if (image == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "LoadClockImage %x fail", resId);
+ return false;
+ }
+ view->SetSrc(image);
+
+ return true;
+ }
+
+ bool MainClockView::LoadClockImage(UIImageView *view, uint32_t resId)
+ {
+ std::string file = CLOCK_IAMGES;
+ ImageInfo *image = ImageCacheManager::GetInstance().LoadOneInMultiRes(resId, file);
+ if (image == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "LoadClockImage %x fail", resId);
+ return false;
+ }
+ view->SetSrc(image);
+ return true;
+ }
+ }
+
\ No newline at end of file
return;
}
dnotDisturb->SetPosition(DISTURB_IMG_X, DISTURB_IMG_Y);
- if (HealthModel::GetInstance()->GetDntDistStatus() == 0) {
- ScreenModels::GetInstance()->LoadAppImages(DROPDOWN_IAMGES, dnotDisturb, DROPDOWN_DROPDOWN_DN_DISTURB);
- } else {
- ScreenModels::GetInstance()->LoadAppImages(DROPDOWN_IAMGES, dnotDisturb, DROPDOWN_DROPDOWN_DN_DISTURB_B);
- }
+ // if (HealthModel::GetInstance()->GetDntDistStatus() == 0) {
+ // ScreenModels::GetInstance()->LoadAppImages(DROPDOWN_IAMGES, dnotDisturb, DROPDOWN_DROPDOWN_DN_DISTURB);
+ // } else {
+ // ScreenModels::GetInstance()->LoadAppImages(DROPDOWN_IAMGES, dnotDisturb, DROPDOWN_DROPDOWN_DN_DISTURB_B);
+ // }
dnotDisturb->SetViewId(DROPDOWN_CLICK_DONOTDISTURB);
dnotDisturb->SetTouchable(true);
dnotDisturb->SetOnClickListener(clickListener); // 进入勿扰模式
return;
}
briScreen->SetPosition(SCREEN_IMG_X, SCREEN_IMG_Y);
- if (HealthModel::GetInstance()->GetBriScrStatus() == 0) {
- ScreenModels::GetInstance()->LoadAppImages(DROPDOWN_IAMGES, briScreen, DROPDOWN_DROPDOWN_BRI_SCREEN);
- } else {
- ScreenModels::GetInstance()->LoadAppImages(DROPDOWN_IAMGES, briScreen, DROPDOWN_DROPDOWN_BRI_SCREEN_B);
- }
+ // if (HealthModel::GetInstance()->GetBriScrStatus() == 0) {
+ // ScreenModels::GetInstance()->LoadAppImages(DROPDOWN_IAMGES, briScreen, DROPDOWN_DROPDOWN_BRI_SCREEN);
+ // } else {
+ // ScreenModels::GetInstance()->LoadAppImages(DROPDOWN_IAMGES, briScreen, DROPDOWN_DROPDOWN_BRI_SCREEN_B);
+ // }
briScreen->SetViewId(DROPDOWN_CLICK_BRIGHTENSCREEN);
briScreen->SetTouchable(true);
briScreen->SetOnClickListener(clickListener); // 进入亮屏模式
void PullUpDownView::InitViewImg(void)
{
- InitSubViewImg();
+ // InitSubViewImg();
- finPhone = new UIImageView();
- if (finPhone == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "finPhone new fail");
- return;
- }
- finPhone->SetPosition(PHONE_IMG_X, PHONE_IMG_Y);
- ScreenModels::GetInstance()->LoadAppImages(DROPDOWN_IAMGES, finPhone, DROPDOWN_DROPDOWN_FIND_PHONE);
- finPhone->SetViewId(DROPDOWN_CLICK_FINDMYPHONE); // 找手机界面 DROP_DOWN_FIND_PHONE
- finPhone->SetTouchable(true);
- finPhone->SetOnClickListener(clickListener);
+ // finPhone = new UIImageView();
+ // if (finPhone == nullptr) {
+ // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "finPhone new fail");
+ // return;
+ // }
+ // finPhone->SetPosition(PHONE_IMG_X, PHONE_IMG_Y);
+ // ScreenModels::GetInstance()->LoadAppImages(DROPDOWN_IAMGES, finPhone, DROPDOWN_DROPDOWN_FIND_PHONE);
+ // finPhone->SetViewId(DROPDOWN_CLICK_FINDMYPHONE); // 找手机界面 DROP_DOWN_FIND_PHONE
+ // finPhone->SetTouchable(true);
+ // finPhone->SetOnClickListener(clickListener);
- droAlarm = new UIImageView();
- if (droAlarm == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "droAlarm new fail");
- return;
- }
- droAlarm->SetPosition(ALARM_IMG_X, ALARM_IMG_Y);
- ScreenModels::GetInstance()->LoadAppImages(DROPDOWN_IAMGES, droAlarm, DROPDOWN_DROPDOWN_ALARM);
- droAlarm->SetViewId(DROPDOWN_CLICK_ALARM); // 进入闹钟App DROP_DOWN_ALARM
- droAlarm->SetTouchable(true);
- droAlarm->SetOnClickListener(clickListener);
+ // droAlarm = new UIImageView();
+ // if (droAlarm == nullptr) {
+ // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "droAlarm new fail");
+ // return;
+ // }
+ // droAlarm->SetPosition(ALARM_IMG_X, ALARM_IMG_Y);
+ // ScreenModels::GetInstance()->LoadAppImages(DROPDOWN_IAMGES, droAlarm, DROPDOWN_DROPDOWN_ALARM);
+ // droAlarm->SetViewId(DROPDOWN_CLICK_ALARM); // 进入闹钟App DROP_DOWN_ALARM
+ // droAlarm->SetTouchable(true);
+ // droAlarm->SetOnClickListener(clickListener);
- droSetting = new UIImageView();
- if (droSetting == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "droSetting new fail");
- return;
- }
- droSetting->SetPosition(SETTING_IMG_X, SETTING_IMG_Y);
- ScreenModels::GetInstance()->LoadAppImages(DROPDOWN_IAMGES, droSetting, DROPDOWN_DROPDOWN_SETTING);
- droSetting->SetViewId(DROPDOWN_CLICK_SETTING); // 进入设置界面 DROP_DOWN_SETTING
- droSetting->SetTouchable(true);
- droSetting->SetOnClickListener(clickListener);
+ // droSetting = new UIImageView();
+ // if (droSetting == nullptr) {
+ // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "droSetting new fail");
+ // return;
+ // }
+ // droSetting->SetPosition(SETTING_IMG_X, SETTING_IMG_Y);
+ // ScreenModels::GetInstance()->LoadAppImages(DROPDOWN_IAMGES, droSetting, DROPDOWN_DROPDOWN_SETTING);
+ // droSetting->SetViewId(DROPDOWN_CLICK_SETTING); // 进入设置界面 DROP_DOWN_SETTING
+ // droSetting->SetTouchable(true);
+ // droSetting->SetOnClickListener(clickListener);
}
void PullUpDownView::InitViewLable(void)
{
- dnotDisturbLable = new UILabel();
- if (dnotDisturbLable == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "dnotDisturbLable new fail");
- return;
- }
- dnotDisturbLable->SetPosition(DISTURB_LABEL_X, DISTURB_LABEL_Y, TEXT_WIDTH, TEXT_HEIGHT);
- dnotDisturbLable->SetText("勿扰");
- dnotDisturbLable->SetFont(DEFAULT_VECTOR_FONT_FILENAME, FONT_DEFAULT_SIZE);
- dnotDisturbLable->SetStyle(STYLE_BACKGROUND_COLOR, OPA_TRANSPARENT);
- briScreenLable = new UILabel();
- if (briScreenLable == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "briScreenLable new fail");
- return;
- }
- briScreenLable->SetPosition(SCREEN_LABEL_X, SCREEN_LABEL_Y, TEXT_WIDTH, TEXT_HEIGHT);
- briScreenLable->SetText("亮屏");
- briScreenLable->SetFont(DEFAULT_VECTOR_FONT_FILENAME, FONT_DEFAULT_SIZE);
- briScreenLable->SetStyle(STYLE_BACKGROUND_COLOR, OPA_TRANSPARENT);
- finPhoneLable = new UILabel();
- if (finPhoneLable == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "finPhoneLable new fail");
- return;
- }
- finPhoneLable->SetPosition(PHONE_LABEL_X, PHONE_LABEL_Y, TEXT_WIDTH, TEXT_HEIGHT);
- finPhoneLable->SetText("找手机");
- finPhoneLable->SetFont(DEFAULT_VECTOR_FONT_FILENAME, FONT_DEFAULT_SIZE);
- finPhoneLable->SetStyle(STYLE_BACKGROUND_COLOR, OPA_TRANSPARENT);
- droAlarmLable = new UILabel();
- if (finPhoneLable == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "finPhoneLable new fail");
- return;
- }
- droAlarmLable->SetPosition(ALARM_LABEL_X, ALARM_LABEL_Y, TEXT_WIDTH, TEXT_HEIGHT);
- droAlarmLable->SetText("闹钟");
- droAlarmLable->SetFont(DEFAULT_VECTOR_FONT_FILENAME, FONT_DEFAULT_SIZE);
- droAlarmLable->SetStyle(STYLE_BACKGROUND_COLOR, OPA_TRANSPARENT);
- droSettingLable = new UILabel();
- if (droSettingLable == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "droSettingLable new fail");
- return;
- }
- droSettingLable->SetPosition(SETTING_LABEL_X, SETTING_LABEL_Y, TEXT_WIDTH, TEXT_HEIGHT);
- droSettingLable->SetText("设置");
- droSettingLable->SetFont(DEFAULT_VECTOR_FONT_FILENAME, FONT_DEFAULT_SIZE);
- droSettingLable->SetStyle(STYLE_BACKGROUND_COLOR, OPA_TRANSPARENT);
+ // dnotDisturbLable = new UILabel();
+ // if (dnotDisturbLable == nullptr) {
+ // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "dnotDisturbLable new fail");
+ // return;
+ // }
+ // dnotDisturbLable->SetPosition(DISTURB_LABEL_X, DISTURB_LABEL_Y, TEXT_WIDTH, TEXT_HEIGHT);
+ // dnotDisturbLable->SetText("勿扰");
+ // dnotDisturbLable->SetFont(DEFAULT_VECTOR_FONT_FILENAME, FONT_DEFAULT_SIZE);
+ // dnotDisturbLable->SetStyle(STYLE_BACKGROUND_COLOR, OPA_TRANSPARENT);
+ // briScreenLable = new UILabel();
+ // if (briScreenLable == nullptr) {
+ // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "briScreenLable new fail");
+ // return;
+ // }
+ // briScreenLable->SetPosition(SCREEN_LABEL_X, SCREEN_LABEL_Y, TEXT_WIDTH, TEXT_HEIGHT);
+ // briScreenLable->SetText("亮屏");
+ // briScreenLable->SetFont(DEFAULT_VECTOR_FONT_FILENAME, FONT_DEFAULT_SIZE);
+ // briScreenLable->SetStyle(STYLE_BACKGROUND_COLOR, OPA_TRANSPARENT);
+ // finPhoneLable = new UILabel();
+ // if (finPhoneLable == nullptr) {
+ // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "finPhoneLable new fail");
+ // return;
+ // }
+ // finPhoneLable->SetPosition(PHONE_LABEL_X, PHONE_LABEL_Y, TEXT_WIDTH, TEXT_HEIGHT);
+ // finPhoneLable->SetText("找手机");
+ // finPhoneLable->SetFont(DEFAULT_VECTOR_FONT_FILENAME, FONT_DEFAULT_SIZE);
+ // finPhoneLable->SetStyle(STYLE_BACKGROUND_COLOR, OPA_TRANSPARENT);
+ // droAlarmLable = new UILabel();
+ // if (finPhoneLable == nullptr) {
+ // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "finPhoneLable new fail");
+ // return;
+ // }
+ // droAlarmLable->SetPosition(ALARM_LABEL_X, ALARM_LABEL_Y, TEXT_WIDTH, TEXT_HEIGHT);
+ // droAlarmLable->SetText("闹钟");
+ // droAlarmLable->SetFont(DEFAULT_VECTOR_FONT_FILENAME, FONT_DEFAULT_SIZE);
+ // droAlarmLable->SetStyle(STYLE_BACKGROUND_COLOR, OPA_TRANSPARENT);
+ // droSettingLable = new UILabel();
+ // if (droSettingLable == nullptr) {
+ // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "droSettingLable new fail");
+ // return;
+ // }
+ // droSettingLable->SetPosition(SETTING_LABEL_X, SETTING_LABEL_Y, TEXT_WIDTH, TEXT_HEIGHT);
+ // droSettingLable->SetText("设置");
+ // droSettingLable->SetFont(DEFAULT_VECTOR_FONT_FILENAME, FONT_DEFAULT_SIZE);
+ // droSettingLable->SetStyle(STYLE_BACKGROUND_COLOR, OPA_TRANSPARENT);
}
void PullUpDownView::InitViewInfo(void)
return;
}
- if (SettingModel::GetInstance().GetBlueToothConnectStatus()) {
- ScreenModels::GetInstance()->LoadAppImages(DROPDOWN_IAMGES, bluetooth, DROPDOWN_DROPDOWN_BLUETOOTH_B);
- } else {
- ScreenModels::GetInstance()->LoadAppImages(DROPDOWN_IAMGES, bluetooth, DROPDOWN_DROPDOWN_BLUETOOTH);
- }
+ // if (SettingModel::GetInstance().GetBlueToothConnectStatus()) {
+ // ScreenModels::GetInstance()->LoadAppImages(DROPDOWN_IAMGES, bluetooth, DROPDOWN_DROPDOWN_BLUETOOTH_B);
+ // } else {
+ // ScreenModels::GetInstance()->LoadAppImages(DROPDOWN_IAMGES, bluetooth, DROPDOWN_DROPDOWN_BLUETOOTH);
+ // }
battery = new UIImageView(); // 电量状态显示
if (battery == nullptr) {
return;
}
battery->SetPosition(BATTERY_IMG_X, BATTERY_IMG_Y);
- ScreenModels::GetInstance()->LoadAppImages(DROPDOWN_IAMGES, battery, DROPDOWN_DROPDOWN_BATTERY);
+ // ScreenModels::GetInstance()->LoadAppImages(DROPDOWN_IAMGES, battery, DROPDOWN_DROPDOWN_BATTERY);
batteryLable = new UILabel();
if (batteryLable == nullptr) {
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "batteryLable new fail");
WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::InitDropDownView");
clickListener = (UIView::OnClickListener *)OHOS::MainPresenterSample::GetInstance();
- InitViewImg();
- InitViewLable();
- InitViewInfo();
+ // InitViewImg();
+ // InitViewLable();
+ // InitViewInfo();
Add(dnotDisturb);
Add(dnotDisturbLable);
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bluetooth nullptr");
return;
}
- if (status == 1) {
- ScreenModels::GetInstance()->LoadAppImages(DROPDOWN_IAMGES, bluetooth, DROPDOWN_DROPDOWN_BLUETOOTH_B);
- } else {
- ScreenModels::GetInstance()->LoadAppImages(DROPDOWN_IAMGES, bluetooth, DROPDOWN_DROPDOWN_BLUETOOTH);
- }
+ // if (status == 1) {
+ // ScreenModels::GetInstance()->LoadAppImages(DROPDOWN_IAMGES, bluetooth, DROPDOWN_DROPDOWN_BLUETOOTH_B);
+ // } else {
+ // ScreenModels::GetInstance()->LoadAppImages(DROPDOWN_IAMGES, bluetooth, DROPDOWN_DROPDOWN_BLUETOOTH);
+ // }
bluetooth->Invalidate();
return;
}