From a5bbf8b7bb5b1aea2637573d2d92f9cecdb2ec7b Mon Sep 17 00:00:00 2001 From: luozheng <1732036298@qq.com> Date: Thu, 27 Mar 2025 14:33:19 +0800 Subject: [PATCH] =?utf8?q?=E4=B8=8B=E6=8B=89=E7=95=8C=E9=9D=A2=E5=92=8C?= =?utf8?q?=E8=BF=9E=E6=8E=A5=E7=8A=B6=E6=80=81=E7=95=8C=E9=9D=A2=E5=90=88?= =?utf8?q?=E5=B9=B6=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../main/include/ConnectedStatusView.h | 102 ++ .../nativeui/main/include/MainViewSample.h | 2 +- .../nativeui/main/include/PullUpDownView.h | 195 ++- .../main/include/dropdown/DropDownCardPage1.h | 65 + .../main/include/dropdown/DropDownCardPage2.h | 49 + .../nativeui/main/src/ConnectedStatusView.cpp | 394 +++++ .../nativeui/main/src/PullUpDownView.cpp | 1494 +++++++++++++---- .../main/src/dropdown/DropDownCardPage1.cpp | 306 ++++ .../main/src/dropdown/DropDownCardPage2.cpp | 132 ++ 9 files changed, 2392 insertions(+), 347 deletions(-) create mode 100644 code/sdk/application/wearable/fd230/nativeapp/nativeui/main/include/ConnectedStatusView.h create mode 100644 code/sdk/application/wearable/fd230/nativeapp/nativeui/main/include/dropdown/DropDownCardPage1.h create mode 100644 code/sdk/application/wearable/fd230/nativeapp/nativeui/main/include/dropdown/DropDownCardPage2.h create mode 100644 code/sdk/application/wearable/fd230/nativeapp/nativeui/main/src/ConnectedStatusView.cpp create mode 100644 code/sdk/application/wearable/fd230/nativeapp/nativeui/main/src/dropdown/DropDownCardPage1.cpp create mode 100644 code/sdk/application/wearable/fd230/nativeapp/nativeui/main/src/dropdown/DropDownCardPage2.cpp diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/main/include/ConnectedStatusView.h b/code/sdk/application/wearable/fd230/nativeapp/nativeui/main/include/ConnectedStatusView.h new file mode 100644 index 000000000..cb0b68c6a --- /dev/null +++ b/code/sdk/application/wearable/fd230/nativeapp/nativeui/main/include/ConnectedStatusView.h @@ -0,0 +1,102 @@ +/* + * @Author: luozheng 1732036298@qq.com + * @Date: 2024-04-26 17:58:00 + * @LastEditors: luozheng 1732036298@qq.com + * @LastEditTime: 2024-06-17 16:33:42 + * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/main/include/ConnectedStatusView.h + */ +#ifndef CONNECTED_STATUS_VIEW_H +#define CONNECTED_STATUS_VIEW_H + +#include "components/ui_view_group.h" +#include "components/ui_image_view.h" +#include "components/ui_scroll_view.h" +#include "components/ui_label_ext.h" +#include "components/ui_button.h" +namespace OHOS +{ + typedef enum : uint8_t + { + PHONECONNECTEDSTATUS_ID = 0, + EARPHONECONNECTESTATUS_ID, + BLUETOOTHCONNECTEDSTATUS, + MAX_CONNECTEDSTATUS_ID, + } CONNECTEDSTATUS_ID; + + class ConnectedStatusView + { + + public: + ConnectedStatusView(); + ~ConnectedStatusView(); + static ConnectedStatusView *GetInstance(void); + UIViewGroup *ConnectedStatusViewInit(void); + UIButton *GetCloseButton(); + void UpdatePhoneConnectedStatus(int status); + void UpdateEarPhoneConnectedStatus(int status); + void UpdateBlueToothConnectedStatus(int status); + + struct LabelConfig + { + int x; + int y; + int width; + int height; + int fontSize; + int lineHeight; + // const char *text; + uint16_t textId; + }; + + typedef struct + { + int x; + int y; + int width; + int height; + uint32_t connectedImage; + uint32_t disconnectedImage; + bool isConnected; + } StatusImageParams; + + typedef struct + { + UIImageView *statusImage; + UILabelExt *statusLabel; + int status; + uint32_t connectedImage; + uint32_t disconnectedImage; + uint16_t connectedText; + uint16_t disconnectedText; + OHOS::ColorType connectedColor; + OHOS::ColorType disconnectedColor; + } ConnectionStatusParams; + + private: + UILabelExt *InitLabel(const LabelConfig &config); + UIImageView *InitStatusImage(const StatusImageParams& params); + void updateConnectionStatus(const ConnectionStatusParams ¶ms); + bool initGroupView(void); + bool initTitle(void); + bool initBackground(); + bool initConnectedStatus(void); + bool initCloseButton(void); + void ClearAll(void); + UIViewGroup *group{nullptr}; + UILabelExt *Title{nullptr}; + UIImageView *background[MAX_CONNECTEDSTATUS_ID]{nullptr}; + + UIImageView *PhoneConnectedStatusImage{nullptr}; // 显示手机连接状态 + UIImageView *EarPhoneConnectedStatusImage{nullptr}; // 显示耳机连接状态 + UIImageView *BluetoothConnectedStatusImage{nullptr}; // 显示蓝牙连接状态 + UILabelExt *ConnectedStatusLabel[MAX_CONNECTEDSTATUS_ID]{nullptr}; + + UILabelExt *PhoneAndEarAndBluetooth[MAX_CONNECTEDSTATUS_ID]{nullptr}; + + UIButton *CloseButton{nullptr}; // 关闭按钮 + UILabel *CloseLabel{nullptr}; // 关闭标签 + }; + +} + +#endif \ No newline at end of file diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/main/include/MainViewSample.h b/code/sdk/application/wearable/fd230/nativeapp/nativeui/main/include/MainViewSample.h index 3b3390499..c482d0309 100644 --- a/code/sdk/application/wearable/fd230/nativeapp/nativeui/main/include/MainViewSample.h +++ b/code/sdk/application/wearable/fd230/nativeapp/nativeui/main/include/MainViewSample.h @@ -25,7 +25,7 @@ #include "MainPresenterSample.h" #include "HeartRateView.h" #include "components/ui_card_page.h" -#include "PullUpDownView.h" +#include "main/include/PullUpDownView.h" #include "components/ui_cross_view.h" #include "SetCardModel.h" diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/main/include/PullUpDownView.h b/code/sdk/application/wearable/fd230/nativeapp/nativeui/main/include/PullUpDownView.h index e511eccee..9f330a307 100644 --- a/code/sdk/application/wearable/fd230/nativeapp/nativeui/main/include/PullUpDownView.h +++ b/code/sdk/application/wearable/fd230/nativeapp/nativeui/main/include/PullUpDownView.h @@ -1,53 +1,142 @@ -/* - * Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved. - * Description: WeekStep - * Author: - * Create: 2021-09-11 - */ - -#ifndef PULL_UP_DOWN_VIEW_H -#define PULL_UP_DOWN_VIEW_H - -#include "graphic_types.h" -#include "wearable_log.h" -#include "components/ui_card_page.h" -#include "components/ui_view_group.h" -#include "components/ui_image_view.h" -#include "components/ui_label.h" -#include "components/ui_label_button.h" - -namespace OHOS { -class PullUpDownView : public UICardPage { -public: - PullUpDownView(); - ~PullUpDownView() override; - static PullUpDownView *GetInstance(void); - bool InitView(); - void PreLoad(void) override; - void UpdateBlueToothStatus(int status); -private: - UIImageView *dnotDisturb{nullptr}; - UIImageView *briScreen{nullptr}; - UIImageView *finPhone{nullptr}; - UIImageView *droAlarm{nullptr}; - UIImageView *droSetting{nullptr}; - UILabel *dnotDisturbLable{nullptr}; - UILabel *briScreenLable{nullptr}; - UILabel *finPhoneLable{nullptr}; - UILabel *droAlarmLable{nullptr}; - UILabel *droSettingLable{nullptr}; - UIImageView *bluetooth{nullptr}; - UIImageView *battery{nullptr}; - UILabel *batteryLable{nullptr}; - UILabel *dateLable{nullptr}; - bool viewiInitStatus{false}; - - void InitSubViewImg(void); - void InitViewImg(void); - void InitViewLable(void); - void InitViewInfo(void); - - UIView::OnClickListener *clickListener{nullptr}; -}; -} -#endif +/* + * @Author: luozheng 1732036298@qq.com + * @Date: 2024-04-17 15:26:49 + * @LastEditors: luozheng 1732036298@qq.com + * @LastEditTime: 2024-10-30 18:27:12 + * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/main/include/PullUpDownView.h + */ + +#ifndef PULL_UP_DOWN_VIEW_H +#define PULL_UP_DOWN_VIEW_H + +#include "graphic_types.h" +#include "wearable_log.h" +#include "components/ui_card_page.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/ui_swipe_view.h" +#include "battery_hal.h" +#include "main/include/ConnectedStatusView.h" +#include "main/include/dropdown/DropDownCardPage1.h" +#include "main/include/dropdown/DropDownCardPage2.h" + +extern uint8_t battery_get_voltage(float *voltage); + +namespace OHOS +{ + static constexpr int16_t SETTING_INDEX = 0; + static constexpr int16_t LIGHTING_INDEX = 1; + static constexpr int16_t DNOTDISTURB_INDEX = 2; + static constexpr int16_t SAVEPOWER_INDEX = 3; + static constexpr int16_t FINDPHONE_INDEX = 4; + static constexpr int16_t MAX_INDEX = 5; + + typedef enum : uint8_t + { + DROPDOWNVIEW = 0, + CONNECTEDSTATUSVIEW, + MAX_DROPDOWNVIEWID, + } DROPDOWNVIEWID; + + class PullUpDownView : public UICardPage, public UISwipeView::OnSwipeListener + { + public: + PullUpDownView(); + ~PullUpDownView() override; + static PullUpDownView *GetInstance(void); + void PreLoad(void) override; + void UnLoad(void) override; + void UpdateDnotDisturbStatus(int status); + bool ChangeDropDownView(int16_t thisView); // 切换到"下拉控制中心"视图 + bool ChangeConnectedStatusView(int16_t thisView); // 切换到"连接状态"视图 + bool ClickFunc(int16_t interface); + void ChangeView(int16_t hideView, int16_t showView); + ConnectedStatusView *GetConnectedStatusView(void); + void HandOnKeyEventSwitchMainPullDownView(void); + + private: + void OnSwipe(UISwipeView &view) override; + bool PullUpDownViewInit(); + void ClearAll(); + UIViewGroup *group[MAX_DROPDOWNVIEWID]{nullptr}; + ConnectedStatusView *connectedStatusView{nullptr}; + bool viewiInitStatus{false}; + uint8_t curView{0}; + + /* ---------------------------------- 1.连接状态 ---------------------------------- */ + public: + bool GetPhoneConnectedStatus(void); + bool GetEarPhoneConnectedStatus(void); + bool GetBlueToothConnectedStatus(void); + void UpdatePhoneStatus(int status); + void UpdateEarPhoneStatus(int status); + void UpdateBlueToothStatus(int status); + void SetPhoneConnectedIsVisible(bool state); + + private: + UIImageView *DropDownConnectedStatusImageViweInit(int16_t x, int16_t y, int16_t w, int16_t h); + void CreateDropDownConnectionStatusImageViwe(void); + void ClearAll_1(void); + UIButton *connectedStatusBackgroundButton{nullptr}; // 放置连接状态icon的背景按钮 + UIImageView *showPhoneConnectedStatus{nullptr}; // 显示手机连接状态 + UIImageView *showEarPhoneConnectedStatus{nullptr}; // 显示耳机连接状态 + UIImageView *showBluetoothConnectedStatus{nullptr}; // 显示蓝牙连接状态 + /* --------------------------------- 2.基本数据显示-------------------------------- */ + public: + UIBoxProgress *GetProgress(); + UILabel *GetDateAndWeekLabel(void); + void UpdateSignalStrengthStatusAndBatteryPosition(); + void UpdateBatteryProcess(); + + private: + void InitBaseData(); + void ClearAll_2(void); + int GetSignalStrength(void); + int CalculateSignalBars(int signalStrength); + void UpdateSignalBarDisplay(int signalBars, bool state); + void updateSignalDisplay(); + void UpdateCat1NoSignalisplay(bool state); + void UpdateCat14GDisplay(bool state); + void UpdateHDDisplay(bool state); + void UpdateCat1MobileDataDisplay(bool state); + void UpdateXPosition(void); + UIViewGroup *group1{nullptr}; + UIImageView *showSignalStrength[4]{nullptr}; // 信号强度 + UILabel *Singal_4{nullptr}; // 4G图标 + UIImageView *NoSignal{nullptr}; // 无信号 + UIImageView *MobileData{nullptr}; // 移动数据 + UIImageView *HD{nullptr}; // HD + UIImageView *batteryimage{nullptr}; // 电池图片 + UIBoxProgress *progress{nullptr}; // 电池进度条 + UILabel *showDateAndWeekLabel{nullptr}; // 显示日期和星期 + UIImageView *chargeBatteryicon{nullptr}; //充电图标 + bool isChargeBatteryIconVisible{false}; // 充电图标是否可见 + /* ---------------------------------- 3.滑动列表 ---------------------------------- */ + public: + AppGroupView *DropDownCardPage1Init(void); + AppGroupView *DropDownCardPage2Init(void); + + private: + AppGroupView *CreatePage(int32_t WeatherPageId); + void CreateDropDownswipeViewListView(void); + void ClearAll_3(void); + UISwipeView *dropDownswipeViewList{nullptr}; // 滑动列表 + AppGroupView *recordCard[2]{nullptr}; + DropDownCardPage1 *dropDownCardPage1{nullptr}; + DropDownCardPage2 *dropDownCardPage2{nullptr}; + /* ------------------------------------ 4 ----------------------------------- */ + public: + void UpdateSwipviewSelect(bool value); + private: + void CreateView4(); + void ClearAll_4(void); + UIImageView *swipviewSelect{nullptr}; + UIImageView *line{nullptr}; + }; +} +#endif \ No newline at end of file diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/main/include/dropdown/DropDownCardPage1.h b/code/sdk/application/wearable/fd230/nativeapp/nativeui/main/include/dropdown/DropDownCardPage1.h new file mode 100644 index 000000000..2989d3b63 --- /dev/null +++ b/code/sdk/application/wearable/fd230/nativeapp/nativeui/main/include/dropdown/DropDownCardPage1.h @@ -0,0 +1,65 @@ +/* + * @Author: luozheng 1732036298@qq.com + * @Date: 2024-08-21 11:54:00 + * @LastEditors: luozheng 1732036298@qq.com + * @LastEditTime: 2024-09-11 15:28:39 + * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/main/include/dropdown/DropDownCardPage1.h + */ +#ifndef __DROPDOWN_CARD_PAGE1_H__ +#define __DROPDOWN_CARD_PAGE1_H__ +#include "AppGroupView.h" +#include "components/ui_toggle_button.h" + +namespace OHOS +{ + class DropDownCardPage1 : public AppGroupView, + public UIView::OnClickListener + { + public: + struct ToggleButtonConfig + { + int16_t left; + int16_t top; + int16_t width; + int16_t height; + const char *viewId; + const char *selectImg; + const char *unselectImg; + bool isTouchable; + bool state; + }; + enum toggleButtonid : uint8_t + { + toggleButton_BT = 0, // 蓝牙开关 + toggleButton_4G, // 4G开关 + toggleButton_ALIPAY, // 支付宝 + toggleButton_SAVEPOWER, // 省电模式开关 + toggleButton_SLEEP, // 睡眠开关 + toggleButton_DNOTDISTURB, // 勿扰开关 + toggleButton_SETTING, // 设置 + toggleButton_MAX, + }; + + DropDownCardPage1(); + ~DropDownCardPage1(); + static DropDownCardPage1 *GetInstance(void); + bool OnClick(UIView &view, const ClickEvent &event) override; + bool InitPage(void); + bool InitView(void *caller) override; + void ClearAll(); + + UIToggleButton *GetDropDownCardPage1_ToggleButton(int index); + void UpdateBTState(bool state); + void Updat4GState(bool state); + void UpdateDnotdisturbState(bool state); + void UpdateSleepModelState(bool state); + void Refresh4GState(); + + private: + UIToggleButton *ToggleButtonInit(ToggleButtonConfig &toggleButtonConfig); + UIToggleButton *toggleButton[toggleButton_MAX]{nullptr}; + }; + +} + +#endif diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/main/include/dropdown/DropDownCardPage2.h b/code/sdk/application/wearable/fd230/nativeapp/nativeui/main/include/dropdown/DropDownCardPage2.h new file mode 100644 index 000000000..d67569cf8 --- /dev/null +++ b/code/sdk/application/wearable/fd230/nativeapp/nativeui/main/include/dropdown/DropDownCardPage2.h @@ -0,0 +1,49 @@ +/* + * @Author: luozheng 1732036298@qq.com + * @Date: 2024-08-21 11:54:00 + * @LastEditors: luozheng 1732036298@qq.com + * @LastEditTime: 2024-08-21 16:42:29 + * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/main/include/dropdown/DropDownCardPage2.h + * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE + */ + +#ifndef __DROPDOWN_CARD_PAGE2_H__ +#define __DROPDOWN_CARD_PAGE2_H__ +#include "AppGroupView.h" +#include "components/ui_toggle_button.h" + +namespace OHOS +{ + class DropDownCardPage2 : public AppGroupView, + public UIView::OnClickListener + { + public: + struct ToggleButtonConfig + { + int16_t left; + int16_t top; + int16_t width; + int16_t height; + const char *viewId; + const char *selectImg; + const char *unselectImg; + bool isTouchable; + }; + DropDownCardPage2(); + ~DropDownCardPage2(); + static DropDownCardPage2 *GetInstance(void); + bool OnClick(UIView &view, const ClickEvent &event) override; + bool InitPage(void); + bool InitView(void *caller) override; + void ClearAll(); + + UIToggleButton *GetDropDownCardPage2_ToggleButton(int index); + + private: + UIToggleButton *ToggleButtonInit(ToggleButtonConfig &toggleButtonConfig); + UIToggleButton *toggleButton[2]{nullptr}; + }; + +} + +#endif diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/main/src/ConnectedStatusView.cpp b/code/sdk/application/wearable/fd230/nativeapp/nativeui/main/src/ConnectedStatusView.cpp new file mode 100644 index 000000000..51cf38498 --- /dev/null +++ b/code/sdk/application/wearable/fd230/nativeapp/nativeui/main/src/ConnectedStatusView.cpp @@ -0,0 +1,394 @@ +#include "main/include/ConnectedStatusView.h" +#include "main/include/PullUpDownView.h" +#include "wearable_log.h" +#include "SettingModel.h" +#include +#include "screensetting/include/ScreenModels.h" +#include "main/include/MainPresenterSample.h" +#include "ui_resource_string.h" +#include "UiConfig.h" +namespace OHOS +{ + static OHOS::ColorType connectedColor[MAX_CONNECTEDSTATUS_ID] = { + Color::GetColorFromRGBA(0xff, 0x8f, 0x00, 0xff), + Color::GetColorFromRGBA(0x4f, 0xc3, 0x4c, 0xff), + Color::GetColorFromRGBA(0x01, 0x76, 0xff, 0xff), + }; + static OHOS::ColorType disconnectedColor = Color::GetColorFromRGBA(0x66, 0x66, 0x66, 0xff); + + static ConnectedStatusView *g_pConnectedStatusView = nullptr; + ConnectedStatusView::ConnectedStatusView() + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ConnectedStatusView::ConnectedStatusView"); + g_pConnectedStatusView = this; + } + + ConnectedStatusView::~ConnectedStatusView() + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ConnectedStatusView::~ConnectedStatusView"); + ClearAll(); + g_pConnectedStatusView = nullptr; + } + + ConnectedStatusView *ConnectedStatusView::GetInstance() + { + return g_pConnectedStatusView; + } + + void ConnectedStatusView::ClearAll(void) + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ConnectedStatusView::ClearAll"); + if (group != nullptr) + { + group->RemoveAll(); + + delete Title; + Title = nullptr; + + for (int i = 0; i < MAX_CONNECTEDSTATUS_ID; i++) + { + delete background[i]; + background[i] = nullptr; + + delete PhoneAndEarAndBluetooth[i]; + PhoneAndEarAndBluetooth[i] = nullptr; + + delete ConnectedStatusLabel[i]; + ConnectedStatusLabel[i] = nullptr; + } + + delete PhoneConnectedStatusImage; + PhoneConnectedStatusImage = nullptr; + + delete EarPhoneConnectedStatusImage; + EarPhoneConnectedStatusImage = nullptr; + + delete BluetoothConnectedStatusImage; + BluetoothConnectedStatusImage = nullptr; + + delete CloseButton; + CloseButton = nullptr; + + delete CloseLabel; + CloseLabel = nullptr; + + delete group; + group = nullptr; + } + } + + UILabelExt *ConnectedStatusView::InitLabel(const LabelConfig &config) + { + UILabelExt *Label = new UILabelExt(); + if (Label == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Label new fail!!"); + return nullptr; + } + + Label->SetPosition(config.x, config.y, config.width, config.height); + Label->SetStyle(STYLE_TEXT_FONT, config.fontSize); + Label->SetStyle(STYLE_LINE_HEIGHT, config.lineHeight); + Label->SetTextId(config.textId); + Label->SetLineBreakMode(UILabel::LINE_BREAK_MARQUEE); + Label->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); + // Label->SetRollSpeed(40);系统默认为35 + Label->SetFont(DEFAULT_VECTOR_FONT_FILENAME, config.fontSize); + + return Label; + } + + UIImageView *ConnectedStatusView::InitStatusImage(const StatusImageParams ¶ms) + { + UIImageView *statusImage = new UIImageView(); + if (statusImage == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "%s new fail"); + return nullptr; + } + statusImage->SetPosition(params.x, params.y, params.width, params.height); + statusImage->SetAutoEnable(false); + statusImage->SetResizeMode(UIImageView::CENTER); + statusImage->SetStyle(STYLE_BORDER_RADIUS, 30); + + if (params.isConnected) + { + ScreenModels::GetInstance()->LoadAppImages(DROPDOWN_IAMGES, statusImage, params.connectedImage); + } + else + { + ScreenModels::GetInstance()->LoadAppImages(DROPDOWN_IAMGES, statusImage, params.disconnectedImage); + } + + return statusImage; + } + + void ConnectedStatusView::updateConnectionStatus(const ConnectionStatusParams ¶ms) + { + if (params.statusImage == nullptr || params.statusLabel == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "UpdateConnectionStatus fail!!"); + return; + } + + ScreenModels::GetInstance()->LoadAppImages(DROPDOWN_IAMGES, params.statusImage, (params.status ? params.connectedImage : params.disconnectedImage)); + params.statusLabel->SetTextId(params.status ? params.connectedText : params.disconnectedText); + params.statusLabel->SetTextColor(params.status ? params.connectedColor : params.disconnectedColor); + + params.statusImage->Invalidate(); + params.statusLabel->Invalidate(); + } + + bool ConnectedStatusView::initGroupView(void) + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ConnectedStatusView::initGroupView"); + group = new UIViewGroup(); + if (group == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "group new fail!!"); + return false; + } + group->SetPosition(0, 0, 466, 466); + group->SetViewIndex(1); + group->SetTouchable(true); + group->SetDraggable(true); + group->SetIntercept(true); + + return true; + } + + bool ConnectedStatusView::initTitle(void) + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ConnectedStatusView::initTitle"); + LabelConfig titleConfig = {93, 53, 280, 35, 30, 35, STR_CONNECTION_STATUS}; // 连接状态 + Title = InitLabel(titleConfig); + if (Title == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Title new fail!!"); + return false; + } + group->Add(Title); + + return true; + } + + bool ConnectedStatusView::initBackground(void) + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ConnectedStatusView::initBackground"); + int background_position_x = 33; + for (int i = 0; i < MAX_CONNECTEDSTATUS_ID; i++) + { + background[i] = new UIImageView(); + if (background[i] == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "background[%d] new fail!!", i); + return false; + } + background[i]->SetPosition(background_position_x + i * 140, 113, 120, 200); + background[i]->SetStyle(STYLE_BACKGROUND_COLOR, 0xff191919); + background[i]->SetStyle(STYLE_BACKGROUND_OPA, 0xff); + background[i]->SetStyle(STYLE_BORDER_RADIUS, 40); + group->Add(background[i]); + } + + return true; + } + + bool ConnectedStatusView::initConnectedStatus(void) + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ConnectedStatusView::initConnectedStatus"); + PullUpDownView *pullUpDownView = PullUpDownView::GetInstance(); + if (pullUpDownView == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PullUpDownView::GetInstance() fail"); + return false; + } + + StatusImageParams params = { + .x = 63, + .y = 135, + .width = 60, + .height = 60, + .connectedImage = DROPDOWN_PHONECONNECTED, + .disconnectedImage = DROPDOWN_PHONEDISCONNECTED, + .isConnected = pullUpDownView->GetPhoneConnectedStatus(), + }; + PhoneConnectedStatusImage = InitStatusImage(params); + group->Add(PhoneConnectedStatusImage); + + params = { + .x = 203, + .y = 135, + .width = 60, + .height = 60, + .connectedImage = DROPDOWN_EARPHONESCONNECTED, + .disconnectedImage = DROPDOWN_EARPHONESDISCONNECTED, + .isConnected = pullUpDownView->GetEarPhoneConnectedStatus(), + }; + EarPhoneConnectedStatusImage = InitStatusImage(params); + group->Add(EarPhoneConnectedStatusImage); + + params = { + .x = 343, + .y = 135, + .width = 60, + .height = 60, + .connectedImage = DROPDOWN_BLUETOOTHCONNECTED, + .disconnectedImage = DROPDOWN_BLUETOOTHDISCONNECTED, + .isConnected = pullUpDownView->GetBlueToothConnectedStatus(), + }; + BluetoothConnectedStatusImage = InitStatusImage(params); + group->Add(BluetoothConnectedStatusImage); + + uint16_t deviceName[MAX_CONNECTEDSTATUS_ID] = { + STR_PHONE, // 手机 + STR_HEADSET, // 耳机 + STR_BLUETOOTH, // 蓝牙 + }; // 初始化设备名称数组 + + int PhoneAndEarAndBluetooth_position_x = 53; + int ConnectedStatusLabel_position_x = 59; + + for (int i = 0; i < MAX_CONNECTEDSTATUS_ID; i++) + { + LabelConfig titleConfig = {PhoneAndEarAndBluetooth_position_x + i * 140, 220, 80, 35, 30, 35, deviceName[i]}; + PhoneAndEarAndBluetooth[i] = InitLabel(titleConfig); + group->Add(PhoneAndEarAndBluetooth[i]); + + ConnectedStatusLabel[i] = new UILabelExt(); + if (ConnectedStatusLabel[i] == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ConnectedStatusLabel[%d] new fail!!", i); + return false; + } + ConnectedStatusLabel[i]->SetPosition(ConnectedStatusLabel_position_x + i * 140, 258, 70, 27); + ConnectedStatusLabel[i]->SetStyle(STYLE_TEXT_FONT, 23); + ConnectedStatusLabel[i]->SetStyle(STYLE_LINE_HEIGHT, 27); + ConnectedStatusLabel[i]->SetLineBreakMode(UILabel::LINE_BREAK_MARQUEE); + ConnectedStatusLabel[i]->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); + ConnectedStatusLabel[i]->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 23); + group->Add(ConnectedStatusLabel[i]); + } + UpdatePhoneConnectedStatus(pullUpDownView->GetPhoneConnectedStatus()); + UpdateEarPhoneConnectedStatus(pullUpDownView->GetEarPhoneConnectedStatus()); + UpdateBlueToothConnectedStatus(pullUpDownView->GetBlueToothConnectedStatus()); + + return true; + } + + bool ConnectedStatusView::initCloseButton(void) + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ConnectedStatusView::initCloseButton"); + CloseButton = new UIButton(); + if (CloseButton == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "CloseButton new fail!"); + return false; + } + CloseButton->SetPosition(118, 340, 230, 80); +#ifdef FD230_650 + CloseButton->SetViewId(CONNECTEDSTATUSVIEWCLOSEBUTTON); +#endif + CloseButton->SetStyle(STYLE_BACKGROUND_COLOR, 0xff191919); + CloseButton->SetStyleForState(STYLE_BACKGROUND_COLOR, 0xff000000, UIButton::PRESSED); + UIView::OnClickListener *listener = static_cast(MainPresenterSample::GetInstance()); + if (listener == nullptr) + { + return false; + } + CloseButton->SetOnClickListener(listener); + LabelConfig titleConfig = {143, 363, 180, 35, 26, 35, STR_CLOSE}; // 关闭 + CloseLabel = InitLabel(titleConfig); + if (CloseLabel == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "CloseLabel new fail!!"); + return false; + } + group->Add(CloseButton); + group->Add(CloseLabel); + + return true; + } + + UIViewGroup *ConnectedStatusView::ConnectedStatusViewInit() + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::ConnectedStatusViewInit"); + if (group != nullptr) + { + return group; + } + + if (!initGroupView() || !initTitle() || !initBackground() || !initConnectedStatus() || !initCloseButton()) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PullUpDownView::ConnectedStatusViewInit fail!!"); + return nullptr; + } + + return group; + } + + // 更新手机连接状态 + void ConnectedStatusView::UpdatePhoneConnectedStatus(int status) + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ConnectedStatusView::UpdatePhoneConnectedStatus"); + + ConnectionStatusParams params = { + .statusImage = PhoneConnectedStatusImage, + .statusLabel = ConnectedStatusLabel[PHONECONNECTEDSTATUS_ID], + .status = status, + .connectedImage = DROPDOWN_PHONECONNECTED, + .disconnectedImage = DROPDOWN_PHONEDISCONNECTED, + .connectedText = STR_CONNECTED, + .disconnectedText = STR_DISCONNECTED, + .connectedColor = connectedColor[PHONECONNECTEDSTATUS_ID], + .disconnectedColor = disconnectedColor, + }; + + updateConnectionStatus(params); + } + + // 更新蓝牙耳机连接状态 + void ConnectedStatusView::UpdateEarPhoneConnectedStatus(int status) + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ConnectedStatusView::UpdateEarPhoneConnectedStatus"); + + ConnectionStatusParams params = { + .statusImage = EarPhoneConnectedStatusImage, + .statusLabel = ConnectedStatusLabel[EARPHONECONNECTESTATUS_ID], + .status = status, + .connectedImage = DROPDOWN_EARPHONESCONNECTED, + .disconnectedImage = DROPDOWN_EARPHONESDISCONNECTED, + .connectedText = STR_CONNECTED, + .disconnectedText = STR_DISCONNECTED, + .connectedColor = connectedColor[EARPHONECONNECTESTATUS_ID], + .disconnectedColor = disconnectedColor, + }; + + updateConnectionStatus(params); + } + + // 更新蓝牙连接状态 + void ConnectedStatusView::UpdateBlueToothConnectedStatus(int status) + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ConnectedStatusView::UpdateBlueToothConnectedStatus"); + + ConnectionStatusParams params = { + .statusImage = BluetoothConnectedStatusImage, + .statusLabel = ConnectedStatusLabel[BLUETOOTHCONNECTEDSTATUS], + .status = status, + .connectedImage = DROPDOWN_BLUETOOTHCONNECTED, + .disconnectedImage = DROPDOWN_BLUETOOTHDISCONNECTED, + .connectedText = STR_CONNECTED, + .disconnectedText = STR_DISCONNECTED, + .connectedColor = connectedColor[BLUETOOTHCONNECTEDSTATUS], + .disconnectedColor = disconnectedColor, + }; + + updateConnectionStatus(params); + } + + UIButton *ConnectedStatusView::GetCloseButton() + { + return CloseButton; + } +} \ No newline at end of file diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/main/src/PullUpDownView.cpp b/code/sdk/application/wearable/fd230/nativeapp/nativeui/main/src/PullUpDownView.cpp index d2e8bf9b5..a55c3ea7c 100644 --- a/code/sdk/application/wearable/fd230/nativeapp/nativeui/main/src/PullUpDownView.cpp +++ b/code/sdk/application/wearable/fd230/nativeapp/nativeui/main/src/PullUpDownView.cpp @@ -1,330 +1,1238 @@ /* - * Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved. - * Description: WeekStep - * Author: - * Create: 2021-09-11 + * @Author: luozheng 1732036298@qq.com + * @Date: 2024-06-26 18:14:24 + * @LastEditors: luozheng 1732036298@qq.com + * @LastEditTime: 2025-02-06 09:59:53 + * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/main/src/PullUpDownView.cpp */ #include "PullUpDownView.h" #include "wearable_log.h" #include "UiConfig.h" #include "common/screen.h" -#include "MainPresenterSample.h" -#include "ScreenModels.h" -#include "SettingModel.h" +#include "main/include/MainPresenterSample.h" +#include "screensetting/include/ScreenModels.h" +#include "settings/include/SettingModel.h" #include "ui_resource_image.h" - -namespace OHOS { - -static PullUpDownView *g_pPullUpDownView = nullptr; - -constexpr int16_t DISTURB_IMG_X = 117; -constexpr int16_t DISTURB_IMG_Y = 50; -constexpr int16_t SCREEN_IMG_X = 251; -constexpr int16_t SCREEN_IMG_Y = 50; -constexpr int16_t PHONE_IMG_X = 49; -constexpr int16_t PHONE_IMG_Y = 184; -constexpr int16_t ALARM_IMG_X = 184; -constexpr int16_t ALARM_IMG_Y = 184; -constexpr int16_t SETTING_IMG_X = 319; -constexpr int16_t SETTING_IMG_Y = 184; - -constexpr int16_t BLUETOOTH_IMG_X = 145; -constexpr int16_t BLUETOOTH_IMG_Y = 335; -constexpr int16_t BATTERY_IMG_X = 195; -constexpr int16_t BATTERY_IMG_Y = 340; - -constexpr int16_t DISTURB_LABEL_X = 136; -constexpr int16_t DISTURB_LABEL_Y = 145; -constexpr int16_t SCREEN_LABEL_X = 270; -constexpr int16_t SCREEN_LABEL_Y = 145; -constexpr int16_t PHONE_LABEL_X = 68; -constexpr int16_t PHONE_LABEL_Y = 279; -constexpr int16_t ALARM_LABEL_X = 203; -constexpr int16_t ALARM_LABEL_Y = 279; -constexpr int16_t SETTING_LABEL_X = 338; -constexpr int16_t SETTING_LABEL_Y = 279; - -constexpr int16_t BATTERY_LABEL_X = 247; -constexpr int16_t BATTERY_LABEL_Y = 335; -constexpr int16_t DATE_LABEL_X = 173; -constexpr int16_t DATE_LABEL_Y = 374; - -constexpr int16_t FONT_DEFAULT_SIZE = 24; -constexpr int16_t TEXT_WIDTH = 86; -constexpr int16_t TEXT_HEIGHT = 30; - -constexpr int16_t NONOTICE_LABLE_X = 141; -constexpr int16_t NONOTICE_LABLE_Y = 212; - -PullUpDownView::PullUpDownView() +#include "dnotdisturb/include/DnotDisturbModel.h" +#include "custom_utils.h" +#include "custom_runtime.h" +#include "bluetooth/include/BluetoothModel.h" +#include "phoneservice/include/PhoneService.h" +#include "ConfigModel.h" +namespace OHOS { - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::PullUpDownView"); - g_pPullUpDownView = this; -} -PullUpDownView::~PullUpDownView() -{ - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::~PullUpDownView"); - RemoveAll(); - delete dnotDisturb; - dnotDisturb = nullptr; - delete briScreen; - briScreen = nullptr; - delete finPhone; - finPhone = nullptr; - delete droAlarm; - droAlarm = nullptr; - delete droSetting; - droSetting = nullptr; - delete dnotDisturbLable; - dnotDisturbLable = nullptr; - delete briScreenLable; - briScreenLable = nullptr; - delete finPhoneLable; - finPhoneLable = nullptr; - delete droAlarmLable; - droAlarmLable = nullptr; - delete droSettingLable; - droSettingLable = nullptr; - delete bluetooth; - bluetooth = nullptr; - delete battery; - battery = nullptr; - delete batteryLable; - batteryLable = nullptr; - delete dateLable; - dateLable = nullptr; - g_pPullUpDownView = nullptr; -} + /* ---------------------------------- 坐标位置 ---------------------------------- */ + // 手机连接状态 + static constexpr const char *DROPDOWN_PHONECONNECTED_IMAGE = "/user/res/dropdown/phone_connect.bin"; + static constexpr const char *DROPDOWN_PHONEDISCONNECTED_IMAGE = "/user/res/dropdown/phone_disconnect.bin"; + // 耳机连接状态 + static constexpr const char *DROPDOWN_EARPHONESCONNECTED_IMAGE = "/user/res/dropdown/earphones_connect.bin"; + static constexpr const char *DROPDOWN_EARPHONESDISCONNECTED_IMAGE = "/user/res/dropdown/earphones_disconnect.bin"; + // 蓝牙连接状态 + static constexpr const char *DROPDOWN_BLUETOOTHCONNECTED_IMAGE = "/user/res/dropdown/bluetooth_connect.bin"; + static constexpr const char *DROPDOWN_BLUETOOTHDISCONNECTED_IMAGE = "/user/res/dropdown/bluetooth_disconnect.bin"; -PullUpDownView *PullUpDownView::GetInstance(void) -{ - return g_pPullUpDownView; -} + static constexpr const char *DROPDOWN_NOSIGNAL_IMAGE = "/user/res/dropdown/DROPDOWN_NOSIGNAL.bin"; + static constexpr const char *DROPDOWN_MOBILE_DATA_IMAGE = "/user/res/dropdown/DROPDOWN_MOBILE_DATA.bin"; + static constexpr const char *DROPDOWN_HD_IMAGE = "/user/res/dropdown/DROPDOWN_HD.bin"; + static constexpr const char *DROPDOWN_SELECT_1_IMAGE = "/user/res/dropdown/DROPDOWN_SELECT_1.bin"; + static constexpr const char *DROPDOWN_SELECT_2_IMAGE = "/user/res/dropdown/DROPDOWN_SELECT_2.bin"; + static constexpr const char *DROPDOWN_LINE_IMAGE = "/user/res/dropdown/DROPDOWN_LINE.bin"; + static const int64_t COLOR_SIGNAL_ON = 0xffffffff; + static const int64_t COLOR_SIGNAL_OFF = 0xff383838; + /* -------------------------------------------------------------------------- */ + static PullUpDownView *g_pPullUpDownView = nullptr; + PullUpDownView::PullUpDownView() + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::PullUpDownView"); + g_pPullUpDownView = this; + } -void PullUpDownView::InitSubViewImg(void) -{ - if (HealthModel::GetInstance() == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "health model nullptr"); - return; + PullUpDownView::~PullUpDownView() + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::~PullUpDownView"); + if (MainPresenterSample::GetInstance() != nullptr) + { +#ifdef FD230_650 + MainPresenterSample::GetInstance()->PullUpDown_StopTimer(); +#endif + } + ClearAll(); + g_pPullUpDownView = nullptr; } - dnotDisturb = new UIImageView(); - if (dnotDisturb == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "dnotDisturb new fail"); - return; + PullUpDownView *PullUpDownView::GetInstance(void) + { + return g_pPullUpDownView; } - 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); - // } - dnotDisturb->SetViewId(DROPDOWN_CLICK_DONOTDISTURB); - dnotDisturb->SetTouchable(true); - dnotDisturb->SetOnClickListener(clickListener); // 进入勿扰模式 - - briScreen = new UIImageView(); - if (briScreen == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "briScreen new fail"); + + void PullUpDownView::OnSwipe(UISwipeView &view) + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::OnSwipe,current tab index = %d", view.GetCurrentPage()); + if (view.GetCurrentPage() == 0) + { + UpdateSwipviewSelect(true); + } + else + { + UpdateSwipviewSelect(false); + } 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); - // } - briScreen->SetViewId(DROPDOWN_CLICK_BRIGHTENSCREEN); - briScreen->SetTouchable(true); - briScreen->SetOnClickListener(clickListener); // 进入亮屏模式 -} -void PullUpDownView::InitViewImg(void) -{ - // 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); - - // 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); -} + void PullUpDownView::ClearAll() + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::ClearAll"); + RemoveAll(); + if (group[DROPDOWNVIEW] != nullptr) + { + group[DROPDOWNVIEW]->RemoveAll(); + /* -------------------------------------------------------------------------- */ + ClearAll_1(); + ClearAll_2(); + ClearAll_3(); + ClearAll_4(); + /* -------------------------------------------------------------------------- */ + delete group[DROPDOWNVIEW]; + group[DROPDOWNVIEW] = nullptr; + } + if (connectedStatusView != nullptr) + { + delete connectedStatusView; + connectedStatusView = nullptr; + } + for (int i = DROPDOWNVIEW; i < MAX_DROPDOWNVIEWID; i++) + { + group[i] = nullptr; + } + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::ClearAll end!!"); + } + /* --------------------------------- 1.连接状态相关 --------------------------------- */ + // 获取手机连接状态 + bool PullUpDownView::GetPhoneConnectedStatus(void) + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::GetPhoneConnectedStatus"); + // uint8_t ret = uapi_dev_runtime_get_ble_connect_stat(); + // WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "ble phone connect stat = %d", ret); + // if (ret == 1) + // return true; + // else + return false; -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); -} +#ifdef FD230_650 + return SettingModel::GetInstance().GetPhoneConnectStatus(); +#endif + } + // 获取蓝牙耳机连接状态 + bool PullUpDownView::GetEarPhoneConnectedStatus(void) + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::GetEarPhoneConnectedStatus"); + // uint8_t ret = uapi_dev_runtime_get_earphone_connect_stat(); + // WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "earphone connect stat = %d", ret); + // if (ret == 1) + // return true; + // else + return false; +#ifdef FD230_650 + return SettingModel::GetInstance().GetEarPhoneConnectStatus(); +#endif + } + // 获取蓝牙连接状态 + bool PullUpDownView::GetBlueToothConnectedStatus(void) + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::GetBlueToothConnectedStatus"); + // uint8_t ret = uapi_dev_runtime_get_br_connect_stat(); + // WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "br connect stat = %d [0 no connect, 1 a2dp, 2 hfp, 3 both]", ret); + // if (ret != 0) + // return true; + // else + return false; -void PullUpDownView::InitViewInfo(void) -{ - bluetooth = new UIImageView(); // 蓝牙状态显示 - if (bluetooth == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bluetooth new fail"); - return; +#ifdef FD230_650 + return SettingModel::GetInstance().GetBlueToothConnectStatus(); +#endif } - bluetooth->SetPosition(BLUETOOTH_IMG_X, BLUETOOTH_IMG_Y); - if (BluetoothModel::GetInstance() == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bluetooth model nullptr"); - return; + + // 设置蓝牙连接状态是否显示 + void PullUpDownView::SetPhoneConnectedIsVisible(bool state) + { + if (connectedStatusBackgroundButton && showPhoneConnectedStatus && showEarPhoneConnectedStatus && showBluetoothConnectedStatus) + { + if (!state) + { + connectedStatusBackgroundButton->SetPosition(153, 10, 160, 50); + int x = connectedStatusBackgroundButton->GetX(); + int y = connectedStatusBackgroundButton->GetY(); + showPhoneConnectedStatus->SetVisible(true); + showEarPhoneConnectedStatus->SetPosition(x + 68, y + 13); + showBluetoothConnectedStatus->SetPosition(x + 110, y + 13); + } + else + { + connectedStatusBackgroundButton->SetPosition(178, 10, 110, 50); + int x = connectedStatusBackgroundButton->GetX(); + int y = connectedStatusBackgroundButton->GetY(); + showPhoneConnectedStatus->SetVisible(false); + showEarPhoneConnectedStatus->SetPosition(x + 22, y + 13); + showBluetoothConnectedStatus->SetPosition(showEarPhoneConnectedStatus->GetX() + showEarPhoneConnectedStatus->GetWidth() + 18, y + 13); + } + connectedStatusBackgroundButton->Invalidate(); + showPhoneConnectedStatus->Invalidate(); + showEarPhoneConnectedStatus->Invalidate(); + showBluetoothConnectedStatus->Invalidate(); + } } - // if (SettingModel::GetInstance().GetBlueToothConnectStatus()) { - // ScreenModels::GetInstance()->LoadAppImages(DROPDOWN_IAMGES, bluetooth, DROPDOWN_DROPDOWN_BLUETOOTH_B); - // } else { - // ScreenModels::GetInstance()->LoadAppImages(DROPDOWN_IAMGES, bluetooth, DROPDOWN_DROPDOWN_BLUETOOTH); - // } + // 更新手机连接状态 + void PullUpDownView::UpdatePhoneStatus(int status) + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::UpdatePhoneStatus"); + if (showPhoneConnectedStatus == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "showPhoneConnectedStatus nullptr"); + return; + } + // showPhoneConnectedStatus->SetSrc(status ? DROPDOWN_PHONECONNECTED_IMAGE : DROPDOWN_PHONEDISCONNECTED_IMAGE); + // showPhoneConnectedStatus->Invalidate(); + + showPhoneConnectedStatus->SetSrc(DROPDOWN_PHONEDISCONNECTED_IMAGE); + SetPhoneConnectedIsVisible(status); + + if (GetConnectedStatusView() != nullptr) + GetConnectedStatusView()->UpdatePhoneConnectedStatus(status); - battery = new UIImageView(); // 电量状态显示 - if (battery == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "battery new fail"); return; } - battery->SetPosition(BATTERY_IMG_X, BATTERY_IMG_Y); - // ScreenModels::GetInstance()->LoadAppImages(DROPDOWN_IAMGES, battery, DROPDOWN_DROPDOWN_BATTERY); - batteryLable = new UILabel(); - if (batteryLable == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "batteryLable new fail"); + // 更新蓝牙耳机连接状态 + void PullUpDownView::UpdateEarPhoneStatus(int status) + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::UpdateEarPhoneStatus"); + if (showEarPhoneConnectedStatus == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "showEarPhoneConnectedStatus nullptr"); + return; + } + showEarPhoneConnectedStatus->SetSrc(status ? DROPDOWN_EARPHONESCONNECTED_IMAGE : DROPDOWN_EARPHONESDISCONNECTED_IMAGE); + showEarPhoneConnectedStatus->Invalidate(); + + if (GetConnectedStatusView() != nullptr) + GetConnectedStatusView()->UpdateEarPhoneConnectedStatus(status); + return; } - batteryLable->SetPosition(BATTERY_LABEL_X, BATTERY_LABEL_Y, TEXT_WIDTH, TEXT_HEIGHT); - batteryLable->SetText("90%"); - batteryLable->SetFont(DEFAULT_VECTOR_FONT_FILENAME, FONT_DEFAULT_SIZE); - batteryLable->SetStyle(STYLE_BACKGROUND_COLOR, OPA_TRANSPARENT); - dateLable = new UILabel(); - if (dateLable == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "dateLable new fail"); + // 更新蓝牙连接状态 + void PullUpDownView::UpdateBlueToothStatus(int status) + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::UpdateBlueToothStatus"); + if (showBluetoothConnectedStatus == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "showBluetoothConnectedStatus nullptr"); + return; + } + showBluetoothConnectedStatus->SetSrc(status ? DROPDOWN_BLUETOOTHCONNECTED_IMAGE : DROPDOWN_BLUETOOTHDISCONNECTED_IMAGE); + showBluetoothConnectedStatus->Invalidate(); + + if (GetConnectedStatusView() != nullptr) + GetConnectedStatusView()->UpdateBlueToothConnectedStatus(status); + return; } - dateLable->SetPosition(DATE_LABEL_X, DATE_LABEL_Y, 192, TEXT_HEIGHT); // TEXT_WIDTH = 192 - dateLable->SetText("10/23 星期五"); - dateLable->SetFont(DEFAULT_VECTOR_FONT_FILENAME, FONT_DEFAULT_SIZE); - dateLable->SetStyle(STYLE_BACKGROUND_COLOR, OPA_TRANSPARENT); -} + UIImageView *PullUpDownView::DropDownConnectedStatusImageViweInit(int16_t x, int16_t y, int16_t w, int16_t h) + { + UIImageView *img = new UIImageView(); + if (img == nullptr) + { + return nullptr; + } + img->SetPosition(x, y, w, h); + img->SetAutoEnable(false); + img->SetResizeMode(UIImageView::CENTER); + img->SetStyle(STYLE_BORDER_RADIUS, 100); -bool PullUpDownView::InitView() -{ - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::InitDropDownView"); - clickListener = (UIView::OnClickListener *)OHOS::MainPresenterSample::GetInstance(); - - // InitViewImg(); - // InitViewLable(); - // InitViewInfo(); - - Add(dnotDisturb); - Add(dnotDisturbLable); - Add(briScreen); - Add(briScreenLable); - Add(finPhone); - Add(finPhoneLable); - Add(droAlarm); - Add(droAlarmLable); - Add(droSetting); - Add(droSettingLable); - Add(bluetooth); - Add(battery); - Add(batteryLable); - Add(dateLable); - - SetTouchable(true); - SetIntercept(true); - - return true; -} + return img; + } + /// @brief 创建与连接状态相关组件 + void PullUpDownView::CreateDropDownConnectionStatusImageViwe(void) + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::CreateDropDownConnectionStatusImageViwe"); + if (connectedStatusBackgroundButton == nullptr) + { + connectedStatusBackgroundButton = new UIButton(); + if (connectedStatusBackgroundButton == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "connectedStatusBackgroundButton new fail"); + return; + } + } + connectedStatusBackgroundButton->SetPosition(153, 10, 160, 50); +#ifdef FD230_650 + connectedStatusBackgroundButton->SetViewId(CONNECTEDSTATUSBACKGROUNDBUTTON); +#endif + connectedStatusBackgroundButton->SetStyle(STYLE_BACKGROUND_COLOR, 0xff191919); + connectedStatusBackgroundButton->SetStyle(STYLE_BACKGROUND_OPA, 0xff); + connectedStatusBackgroundButton->SetStyleForState(STYLE_BACKGROUND_COLOR, 0xff383838, UIButton::PRESSED); + UIView::OnClickListener *clickListener = (UIView::OnClickListener *)OHOS::MainPresenterSample::GetInstance(); + if (clickListener == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "MainPresenterSample::GetInstance fail!!"); + return; + } + connectedStatusBackgroundButton->SetOnClickListener(clickListener); + int x = connectedStatusBackgroundButton->GetX(); + int y = connectedStatusBackgroundButton->GetY(); + /* -------------------------------- 显示手机连接状态 -------------------------------- */ + if (showPhoneConnectedStatus == nullptr) + { + showPhoneConnectedStatus = DropDownConnectedStatusImageViweInit(x + 26, y + 13, 24, 24); + if (showPhoneConnectedStatus == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "showPhoneConnectedStatus new fail"); + return; + } + } + /* -------------------------------- 显示耳机连接状态 -------------------------------- */ + if (showEarPhoneConnectedStatus == nullptr) + { + showEarPhoneConnectedStatus = DropDownConnectedStatusImageViweInit(x + 68, y + 13, 24, 24); + if (showEarPhoneConnectedStatus == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "showEarPhoneConnectedStatus new fail"); + return; + } + } + /* -------------------------------- 显示蓝牙连接状态 -------------------------------- */ + if (showBluetoothConnectedStatus == nullptr) + { + showBluetoothConnectedStatus = DropDownConnectedStatusImageViweInit(x + 110, y + 13, 24, 24); + if (showBluetoothConnectedStatus == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "showBluetoothConnectedStatus new fail"); + return; + } + } + /* -------------------------------------------------------------------------- */ + UpdatePhoneStatus(GetPhoneConnectedStatus()); + UpdateEarPhoneStatus(GetEarPhoneConnectedStatus()); + UpdateBlueToothStatus(GetBlueToothConnectedStatus()); + /* -------------------------------------------------------------------------- */ + group[DROPDOWNVIEW]->Add(connectedStatusBackgroundButton); + group[DROPDOWNVIEW]->Add(showPhoneConnectedStatus); + group[DROPDOWNVIEW]->Add(showEarPhoneConnectedStatus); + group[DROPDOWNVIEW]->Add(showBluetoothConnectedStatus); + } -void PullUpDownView::PreLoad(void) -{ - if (!viewiInitStatus) { - InitView(); - viewiInitStatus = true; + void PullUpDownView::ClearAll_1(void) + { + if (connectedStatusBackgroundButton != nullptr) + { + delete connectedStatusBackgroundButton; + connectedStatusBackgroundButton = nullptr; + } + if (showPhoneConnectedStatus != nullptr) + { + delete showPhoneConnectedStatus; + showPhoneConnectedStatus = nullptr; + } + if (showEarPhoneConnectedStatus != nullptr) + { + delete showEarPhoneConnectedStatus; + showEarPhoneConnectedStatus = nullptr; + } + if (showBluetoothConnectedStatus != nullptr) + { + delete showBluetoothConnectedStatus; + showBluetoothConnectedStatus = nullptr; + } + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::ClearAllConnectedStatusComponentsView"); } -} + /* -------------------------------------------------------------------------- */ + /*** + * @brief 初始化时间,日期,星期,电池,信号强度 + */ + void PullUpDownView::InitBaseData() + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::InitBaseData"); + if (group1 == nullptr) + { + group1 = new UIViewGroup(); + if (group1 == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "group1 new fail"); + return; + } + } + group1->SetPosition(132, 80, 202, 40); + group1->SetStyle(STYLE_BACKGROUND_OPA, 0); + /* -------------------------------- NoSignal -------------------------------- */ + if (NoSignal == nullptr) + { + NoSignal = new UIImageView(); + if (NoSignal == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "NoSignal new fail"); + return; + } + } + NoSignal->SetPosition(0, (group1->GetHeight() - 38) / 2, 36, 38); + NoSignal->SetAutoEnable(false); + NoSignal->SetResizeMode(UIImageView::CENTER); + NoSignal->SetSrc(DROPDOWN_NOSIGNAL_IMAGE); + NoSignal->SetVisible(false); + group1->Add(NoSignal); + /* ------------------------------- MobileData ------------------------------- */ + if (MobileData == nullptr) + { + MobileData = new UIImageView(); + if (MobileData == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "MobileData new fail"); + return; + } + } + MobileData->SetPosition(1, 4, 13, 15); + MobileData->SetAutoEnable(false); + MobileData->SetResizeMode(UIImageView::CENTER); + MobileData->SetSrc(DROPDOWN_MOBILE_DATA_IMAGE); + MobileData->SetVisible(false); + group1->Add(MobileData); + /* -------------------------------------------------------------------------- */ + // 定义一个结构体,用于存储 ImageView 的信息 + struct ImageViewInfo + { + int posX; + int posY; + int width; + int height; + }; + // 待添加的 ImageView 信息列表 + std::vector imageViewList = { + {0, 28, 6, 6}, + {10, 20, 6, 14}, + {20, 12, 6, 22}, + {30, 4, 6, 30}, + }; -void PullUpDownView::UpdateBlueToothStatus(int status) -{ - if (bluetooth == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bluetooth nullptr"); - return; + // 循环添加 ImageView 到相应的容器中 + for (int i = 0; i < 4; i++) + { + if (showSignalStrength[i] == nullptr) + { + showSignalStrength[i] = new UIImageView(); + if (showSignalStrength[i] == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "showSignalStrength[%d] new fail", i); + return; + } + } + showSignalStrength[i]->SetPosition(imageViewList[i].posX, imageViewList[i].posY, imageViewList[i].width, imageViewList[i].height); + showSignalStrength[i]->SetStyle(STYLE_BACKGROUND_COLOR, 0xffffffff); + showSignalStrength[i]->SetStyle(STYLE_BACKGROUND_OPA, 0xff); + showSignalStrength[i]->SetStyle(STYLE_BORDER_RADIUS, 10); + group1->Add(showSignalStrength[i]); + showSignalStrength[i]->SetVisible(false); + } + /* -------------------------------- Singal_4 -------------------------------- */ + if (Singal_4 == nullptr) + { + Singal_4 = new UILabel(); + } + Singal_4->SetPosition(0, 0, 40, 47); + Singal_4->SetStyle(STYLE_TEXT_FONT, 34); + Singal_4->SetStyle(STYLE_LINE_HEIGHT, 40); + Singal_4->SetText("4G"); + Singal_4->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT); + Singal_4->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); + Singal_4->SetFont(DEFAULT_VECTOR_FONT_FILENAME_EN, 34); + Singal_4->SetVisible(false); + group1->Add(Singal_4); + /* ----------------------------------- HD ----------------------------------- */ + if (HD == nullptr) + { + HD = new UIImageView(); + if (HD == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HD new fail"); + return; + } + } + HD->SetPosition(88 + 10, (group1->GetHeight() - 30) / 2, 46, 30); + HD->SetAutoEnable(false); + HD->SetResizeMode(UIImageView::CENTER); + HD->SetSrc(DROPDOWN_HD_IMAGE); + HD->SetVisible(false); + group1->Add(HD); + /* ----------------------------------- 电池 ----------------------------------- */ + batteryimage = new UIImageView(); + if (batteryimage == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "batteryimage new fail"); + return; + } + batteryimage->SetPosition(HD->GetX() + HD->GetWidth() + 10, (group1->GetHeight() - 30) / 2, 48, 30); + std::string batteryimagesPath = "/user/res/Battery/Battery_White.bin"; + batteryimage->SetSrc(batteryimagesPath.c_str()); + group1->Add(batteryimage); + /* -------------------------------------------------------------------------- */ + progress = new UIBoxProgress(); + if (progress == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "progress new fail"); + return; + } + progress->SetPosition(batteryimage->GetX() + 7, batteryimage->GetY() + 6, 30, 18); + progress->SetValidWidth(30); + progress->SetValidHeight(18); + progress->SetRange(100, 0); + progress->SetStyle(STYLE_BORDER_RADIUS, 3); + progress->SetBackgroundStyle(STYLE_BACKGROUND_OPA, 0x00); + progress->SetBackgroundStyle(STYLE_TEXT_COLOR, 0xff000000); + progress->SetForegroundStyle(STYLE_BACKGROUND_COLOR, 0xffffffff); + progress->SetForegroundStyle(STYLE_TEXT_COLOR, 0xff000000); + progress->SetForegroundStyle(STYLE_LINE_COLOR, 0xff45A5FF); + group1->Add(progress); + /* -------------------------------------------------------------------------- */ + chargeBatteryicon = new UIImageView(); + if (!chargeBatteryicon) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "chargeBatteryicon creation failed"); + return; + } + chargeBatteryicon->SetPosition(progress->GetX() + 6, batteryimage->GetY() + 2, 17, 26); + chargeBatteryicon->SetSrc("/user/res/Battery/Icon.bin"); + chargeBatteryicon->SetAutoEnable(false); + chargeBatteryicon->SetResizeMode(UIImageView::CONTAIN); + chargeBatteryicon->SetVisible(false); + group1->Add(chargeBatteryicon); + /* -------------------------------------------------------------------------- */ + group[DROPDOWNVIEW]->Add(group1); + /* --------------------------------- 显示日期和星期 -------------------------------- */ + showDateAndWeekLabel = new UILabel(); + if (showDateAndWeekLabel == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "showDateAndWeekLabel new fail"); + return; + } + showDateAndWeekLabel->SetPosition(83, 130, 300, 35); + showDateAndWeekLabel->SetStyle(STYLE_TEXT_FONT, 30); + showDateAndWeekLabel->SetStyle(STYLE_LINE_HEIGHT, 35); + showDateAndWeekLabel->SetTextColor(Color::GetColorFromRGBA(0xaa, 0xaa, 0xaa, 0xff)); + showDateAndWeekLabel->SetLineBreakMode(UILabel::LINE_BREAK_OSCILLATION); + showDateAndWeekLabel->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); + showDateAndWeekLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME_EN, 30); + group[DROPDOWNVIEW]->Add(showDateAndWeekLabel); + /* -------------------------------------------------------------------------- */ + UpdateSignalStrengthStatusAndBatteryPosition(); +/* -------------------------------------------------------------------------- */ +#ifdef FD230_650 + MainPresenterSample::GetInstance()->UpdataBaseData(); +#endif + /* -------------------------------------------------------------------------- */ + UpdateBatteryProcess(); + } + void PullUpDownView::ClearAll_2(void) + { + if (group1 != nullptr) + { + group1->RemoveAll(); + for (int i = 0; i < 4; i++) + { + if (showSignalStrength[i] != nullptr) + { + delete showSignalStrength[i]; + showSignalStrength[i] = nullptr; + } + } + if (Singal_4 != nullptr) + { + delete Singal_4; + Singal_4 = nullptr; + } + if (NoSignal != nullptr) + { + delete NoSignal; + NoSignal = nullptr; + } + if (MobileData != nullptr) + { + delete MobileData; + MobileData = nullptr; + } + if (HD != nullptr) + { + delete HD; + HD = nullptr; + } + if (batteryimage != nullptr) + { + delete batteryimage; + batteryimage = nullptr; + } + if (progress != nullptr) + { + delete progress; + progress = nullptr; + } + if (chargeBatteryicon != nullptr) + { + delete chargeBatteryicon; + chargeBatteryicon = nullptr; + } + delete group1; + group1 = nullptr; + } + if (showDateAndWeekLabel != nullptr) + { + delete showDateAndWeekLabel; + showDateAndWeekLabel = nullptr; + } + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::ClearAll_2 over!!"); + } + + // 获取信号强度 + int PullUpDownView::GetSignalStrength(void) + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::GetSignalStrength"); + int SignalStrength = uapi_dev_runtime_get_cat1_signal(); // 信号强度 + return CalculateSignalBars(SignalStrength); } - // 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; -} + // 计算信号格 + int PullUpDownView::CalculateSignalBars(int signalStrength) + { +#if 0 + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::CalculateSignalBars"); + if (signalStrength < 0 || signalStrength > 31 || signalStrength == 0) + 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; +#else + if (signalStrength >= 1 && signalStrength <= 8) // 0信号 + { + return 0; + } + else if (signalStrength >= 9 && signalStrength <= 16) // 1格信号,信号很弱偶尔可以接打电话,很容易失败 + { + return 1; + } + else if (signalStrength >= 17 && signalStrength <= 21) // 2格信号,信号一般 + { + return 2; + } + else if (signalStrength >= 22 && signalStrength <= 26) // 3格信号,信号较强 + { + return 3; + } + else if (signalStrength >= 27 && signalStrength <= 31) // 4格信号,信号很强 + { + return 4; + } + else + { + return 99; // Invalid signal strength + } +#endif + } + + // 函数用于更新信号显示的UI + void PullUpDownView::updateSignalDisplay() + { + int sim = uapi_dev_runtime_get_cat1_simstat(); + int cat1_powerOn = uapi_dev_runtime_get_cat1_powerstat(); + int signal = uapi_dev_runtime_get_cat1_signal(); + int network_on = uapi_dev_runtime_get_cat1_networkstat(); + int cat1_network_type = uapi_dev_runtime_get_cat1_networtype(); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "sim = %d", sim); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "cat1_powerOn = %d", cat1_powerOn); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "signal = %d", signal); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "network_on = %d", network_on); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "cat1_network_type = %d", cat1_network_type); + + const int SIGNAL_NO_SIGNAL = 99; + const int NETWORK_TYPE_NO_NETWORK = 0; + const int NETWORK_TYPE_4G = 4; + + if (sim == 0 || cat1_powerOn == 0) + { + // 无信号,无4G图标 + UpdateCat1NoSignalisplay(true); + UpdateCat14GDisplay(false); + UpdateSignalBarDisplay(CalculateSignalBars(signal), false); + UpdateCat1MobileDataDisplay(false); + } + else if (cat1_powerOn == 1 && sim == 1) + { + if (signal == SIGNAL_NO_SIGNAL) // 计算信号强度 + { + // 无信号UI显示 + // UpdateCat1NoSignalisplay(true); + // UpdateCat14GDisplay(false); + UpdateSignalBarDisplay(CalculateSignalBars(signal), false); + } + else + { + // 信号强度显示 + UpdateCat1NoSignalisplay(false); + // UpdateCat14GDisplay(true); + UpdateSignalBarDisplay(CalculateSignalBars(signal), true); + } + + if (network_on == 0) + { + // 无信号,无4G图标 显示 + // UpdateCat1NoSignalisplay(true); + UpdateCat14GDisplay(false); + UpdateCat1MobileDataDisplay(false); + // UpdateSignalBarDisplay(CalculateSignalBars(signal), false); + } + else + { + if (cat1_network_type == NETWORK_TYPE_NO_NETWORK) + { + // 无信号,无4G图标 显示 + // UpdateCat1NoSignalisplay(true); + UpdateCat14GDisplay(false); + UpdateCat1MobileDataDisplay(false); + // UpdateSignalBarDisplay(CalculateSignalBars(signal), false); + } + else if (cat1_network_type == NETWORK_TYPE_4G) + { + // 有4G图标,正常显示信号 + // UpdateCat1NoSignalisplay(false); + UpdateCat14GDisplay(true); + UpdateCat1MobileDataDisplay(true); + // UpdateSignalBarDisplay(CalculateSignalBars(signal), true); + } + else + { + // 无4G图标,正常显示信号 + // UpdateCat1NoSignalisplay(false); + UpdateCat14GDisplay(false); + UpdateCat1MobileDataDisplay(true); + // UpdateSignalBarDisplay(CalculateSignalBars(signal), true); + } + } + } + /*4g开关的状态刷新*/ + if (DropDownCardPage1::GetInstance()) + { + DropDownCardPage1::GetInstance()->Refresh4GState(); + } + } + // 更新信号强度显示 + void PullUpDownView::UpdateSignalBarDisplay(int signalBars, bool state) + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::UpdateSignalBarDisplay"); + for (int i = 0; i < 4; i++) + { + showSignalStrength[i]->SetStyle(STYLE_BACKGROUND_COLOR, (i < signalBars) ? COLOR_SIGNAL_ON : COLOR_SIGNAL_OFF); + showSignalStrength[i]->Invalidate(); + showSignalStrength[i]->SetVisible(state); + } + } + + // 更新无信号图标显示 + void PullUpDownView::UpdateCat1NoSignalisplay(bool state) + { + if (NoSignal != nullptr) + { + NoSignal->SetVisible(state); + } + } + + // 更新4G图标显示 + void PullUpDownView::UpdateCat14GDisplay(bool state) + { + if (Singal_4 != nullptr) + { + Singal_4->SetVisible(state); + } + UpdateHDDisplay(state && ConfigModel::GetInstance()->GetVoLTE_Call()); + } + + // 有HD一定有4G + void PullUpDownView::UpdateHDDisplay(bool state) + { + if (HD != nullptr) + { + HD->SetVisible(state); + } + } + + /*更新移动数据图标显示*/ + void PullUpDownView::UpdateCat1MobileDataDisplay(bool state) + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::UpdateCat1MobileDataDisplay %d", state); + if (MobileData != nullptr) + { + MobileData->SetVisible(state); + } + } + + void PullUpDownView::UpdateXPosition(void) + { + // 判断相关组件是否有效 + if (MobileData && HD && Singal_4 && NoSignal && batteryimage && progress && chargeBatteryicon) + { + // 获取各个组件的可见状态 + bool mobileDataVisible = MobileData->IsVisible(); // 移动数据 + bool hdVisible = HD->IsVisible(); // HD [VoLTE开关] + bool signal4Visible = Singal_4->IsVisible(); // 4G + bool noSignalVisible = NoSignal->IsVisible(); // 无信号 + + int x; + int signalWidth = NoSignal->GetWidth(); + int batteryWidth = batteryimage->GetWidth(); + int spacing = 10; + + if (noSignalVisible) // 无信号时的处理 + { + x = (group1->GetWidth() - (signalWidth + batteryWidth + spacing)) / 2; + NoSignal->SetX(x); + batteryimage->SetX(x + signalWidth + spacing); + progress->SetX(batteryimage->GetX() + 7); + } + else // 有信号时的处理 + { + if (!signal4Visible) // 无 4G + { + x = (group1->GetWidth() - (signalWidth + batteryWidth + spacing)) / 2; + for (int i = 0; i < 4; i++) + { + if (showSignalStrength[i] != nullptr) + { + if (i != 0) + { + showSignalStrength[i]->SetX(showSignalStrength[i - 1]->GetX() + 10); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "showSignalStrength[%d]", showSignalStrength[i]->GetX()); + } + else + { + showSignalStrength[i]->SetX(x); + } + } + } + batteryimage->SetX(showSignalStrength[3]->GetX() + spacing); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "showSignalStrength[%d]", batteryimage->GetX()); + progress->SetX(batteryimage->GetX() + 7); + } + else // 有 4G + { + int additionalWidth = hdVisible ? HD->GetWidth() : 0; + x = (group1->GetWidth() - (signalWidth + Singal_4->GetWidth() + additionalWidth + batteryWidth + spacing * (2 + hdVisible))) / 2; + for (int i = 0; i < 4; i++) + { + if (showSignalStrength[i] != nullptr) + { + if (i != 0) + { + showSignalStrength[i]->SetX(showSignalStrength[i - 1]->GetX() + 10); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "showSignalStrength[%d]", showSignalStrength[i]->GetX()); + } + else + { + showSignalStrength[i]->SetX(x); + } + } + } + Singal_4->SetX(showSignalStrength[3]->GetX() + spacing); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "showSignalStrength[%d]", batteryimage->GetX()); + if (hdVisible) // 有 HD + { + HD->SetX(Singal_4->GetX() + Singal_4->GetWidth() + spacing); + batteryimage->SetX(HD->GetX() + HD->GetWidth() + spacing); + progress->SetX(batteryimage->GetX() + 7); + } + else // 无 HD + { + batteryimage->SetX(Singal_4->GetX() + Singal_4->GetWidth() + spacing); + progress->SetX(batteryimage->GetX() + 7); + } + } + if (mobileDataVisible) // 如果有移动数据图标,设置其位置 + { + MobileData->SetX(showSignalStrength[0]->GetX()); + } + } + chargeBatteryicon->SetPosition(progress->GetX() + 6, batteryimage->GetY() + 2); + // 使相关组件无效化以触发重绘 + MobileData->Invalidate(); + HD->Invalidate(); + Singal_4->Invalidate(); + NoSignal->Invalidate(); + batteryimage->Invalidate(); + progress->Invalidate(); + chargeBatteryicon->Invalidate(); + } + } + + // 更新信号强度和电池位置 + void PullUpDownView::UpdateSignalStrengthStatusAndBatteryPosition() + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::UpdateSignalStrengthStatusAndBatteryPosition"); + updateSignalDisplay(); // 函数用于更新信号显示的UI + UpdateXPosition(); + +#ifdef FD230_650 + /*更新蓝牙连接状态*/ + int a2dp = uapi_a2dp_snk_get_device_connect_state(); + int hfp = uapi_hfp_connect_state(); + bool bluetoothstatus = (a2dp == 0 && hfp == 0) ? false : true; + UpdateBlueToothStatus(bluetoothstatus); +#endif + } + + // 更新是否是充电状态 + void PullUpDownView::UpdateBatteryProcess() + { + if (!chargeBatteryicon || !progress) + { + return; + } + + bool isCharging = get_charge_stat(); // 获取充电状态 + + if (isCharging) + { + if (!isChargeBatteryIconVisible) + { + chargeBatteryicon->SetVisible(true); + isChargeBatteryIconVisible = true; + } + progress->SetForegroundStyle(STYLE_BACKGROUND_COLOR, Color::Green().full); // 充电状态为绿色 + return; + } + else + { + if (isChargeBatteryIconVisible) + { + chargeBatteryicon->SetVisible(false); + isChargeBatteryIconVisible = false; + } + progress->SetForegroundStyle(STYLE_BACKGROUND_COLOR, Color::White().full); // 充电状态为绿色 + return; + } + } + + UILabel *PullUpDownView::GetDateAndWeekLabel(void) + { + return showDateAndWeekLabel; + } + /* -------------------------------------------------------------------------- */ + AppGroupView *PullUpDownView::DropDownCardPage1Init(void) + { + if (dropDownCardPage1 == nullptr) + { + dropDownCardPage1 = new DropDownCardPage1(); + if (dropDownCardPage1 == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "dropDownCardPage1 new fail!!"); + return nullptr; + } + } + return dropDownCardPage1; + } + AppGroupView *PullUpDownView::DropDownCardPage2Init(void) + { + if (dropDownCardPage2 == nullptr) + { + dropDownCardPage2 = new DropDownCardPage2(); + if (dropDownCardPage2 == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "dropDownCardPage2 new fail!!"); + return nullptr; + } + } + return dropDownCardPage2; + } + struct DropDownSwipViewMapper + { + const int16_t viewId; + AppGroupView *(PullUpDownView::*func)(void); + }; + static const DropDownSwipViewMapper g_pageMapper[] = { + {0, &PullUpDownView::DropDownCardPage1Init}, + {1, &PullUpDownView::DropDownCardPage2Init}, + }; + AppGroupView *PullUpDownView::CreatePage(int32_t PageId) + { + uint16_t i; + AppGroupView *view = nullptr; + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "CreatePage %d", PageId); + + for (i = 0; i < sizeof(g_pageMapper) / sizeof(g_pageMapper[0]); i++) + { + if (g_pageMapper[i].viewId == PageId) + { + view = (this->*(g_pageMapper[i].func))(); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "CreatePage view:%p", view); + return view; + } + } + return nullptr; // 如果没有找到匹配的视图ID,返回 nullptr + } + void PullUpDownView::ClearAll_3(void) + { + if (dropDownswipeViewList != nullptr) + { + dropDownswipeViewList->RemoveAll(); + + delete dropDownswipeViewList; + dropDownswipeViewList = nullptr; + } + if (dropDownCardPage1 != nullptr) + { + delete dropDownCardPage1; + dropDownCardPage1 = nullptr; + } + if (dropDownCardPage2 != nullptr) + { + delete dropDownCardPage2; + dropDownCardPage2 = nullptr; + } + for (int i = 0; i < sizeof(g_pageMapper) / sizeof(g_pageMapper[0]); i++) + { + recordCard[i] = nullptr; + } + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::ClearAll_3 over!!"); + } + // 创建与滑动列表相关组件 + void PullUpDownView::CreateDropDownswipeViewListView(void) + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::CreateDropDownswipeViewListView start!!"); + dropDownswipeViewList = new UISwipeView(UISwipeView::HORIZONTAL); // 水平方向 + if (nullptr == dropDownswipeViewList) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "dropDownswipeViewList new fail!!"); + return; + } + dropDownswipeViewList->SetStyle(STYLE_BACKGROUND_COLOR, Color::Black().full); + dropDownswipeViewList->SetPosition(18, 180, 430, 210); // 0 : X; 0 : Y + dropDownswipeViewList->SetAnimatorTime(200); // 200:animator drag time(ms) + dropDownswipeViewList->SetDraggable(true); + dropDownswipeViewList->SetTouchable(true); + for (uint16_t i = 0; i < 2; i++) + { + recordCard[i] = CreatePage(i); + if (nullptr == recordCard[i]) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "recordCard[%d] is nullptr!!", i); + return; + } + recordCard[i]->InitView(this); + dropDownswipeViewList->Add(recordCard[i]); + } + dropDownswipeViewList->SetOnSwipeListener(this); + group[DROPDOWNVIEW]->Add(dropDownswipeViewList); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::CreateDropDownswipeViewListView over!!"); + } + /* ------------------------------------ 4 ----------------------------------- */ + void PullUpDownView::UpdateSwipviewSelect(bool value) + { + if (swipviewSelect) + { + swipviewSelect->SetSrc(value ? DROPDOWN_SELECT_1_IMAGE : DROPDOWN_SELECT_2_IMAGE); + swipviewSelect->Invalidate(); + } + } + + void PullUpDownView::CreateView4() + { + /* ----------------------------- swipviewSelect ----------------------------- */ + if (swipviewSelect == nullptr) + { + swipviewSelect = new UIImageView(); + if (swipviewSelect == nullptr) + { + return; + } + } + swipviewSelect->SetPosition(217, 410, 33, 12); + swipviewSelect->SetSrc(DROPDOWN_SELECT_1_IMAGE); + group[DROPDOWNVIEW]->Add(swipviewSelect); + /* ---------------------------------- line ---------------------------------- */ + if (line == nullptr) + { + line = new UIImageView(); + if (line == nullptr) + { + return; + } + } + line->SetPosition(193, 440, 80, 8); + line->SetSrc(DROPDOWN_LINE_IMAGE); + group[DROPDOWNVIEW]->Add(line); + } + + void PullUpDownView::ClearAll_4(void) + { + if (swipviewSelect != nullptr) + { + delete swipviewSelect; + swipviewSelect = nullptr; + } + if (line != nullptr) + { + delete line; + line = nullptr; + } + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::ClearAll_4 over!!"); + } + + /* -------------------------------------------------------------------------- */ + // 下拉视图初始化 + bool PullUpDownView::PullUpDownViewInit() + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::InitView"); + + group[DROPDOWNVIEW] = new UIViewGroup(); + if (group[DROPDOWNVIEW] == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "group[DROPDOWNVIEW] new fail!!"); + return false; + } + group[DROPDOWNVIEW]->SetPosition(0, 0, 466, 466); + group[DROPDOWNVIEW]->SetStyle(STYLE_BACKGROUND_OPA, OPA_OPAQUE); + group[DROPDOWNVIEW]->SetViewIndex(0); + group[DROPDOWNVIEW]->SetFullScreenBlur(false); /*设置高斯模式*/ + /* ----------------------------------- 1 ----------------------------------- */ + CreateDropDownConnectionStatusImageViwe(); + /* ------------------------------------ 2 ----------------------------------- */ + InitBaseData(); + /* ------------------------------------ 3 ----------------------------------- */ + CreateDropDownswipeViewListView(); + /* ------------------------------------ 4 ----------------------------------- */ + CreateView4(); + /* -------------------------------------------------------------------------- */ + + SetTouchable(true); + SetIntercept(true); + Add(group[DROPDOWNVIEW]); + return true; + } + + void PullUpDownView::PreLoad(void) + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::PreLoad"); + if (!viewiInitStatus) + { + PullUpDownViewInit(); + viewiInitStatus = true; + } + } + + void PullUpDownView::UnLoad(void) + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::UnLoad"); + } + + /*更新勿扰模式状态*/ + void PullUpDownView::UpdateDnotDisturbStatus(int status) + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::UpdateDnotDisturbStatus"); + } + + UIBoxProgress *PullUpDownView::GetProgress() + { + return progress; + } + /* ------------------------------ 下拉界面切换到连接状态视图 ----------------------------- */ + // 切换到"下拉控制中心"视图 + bool PullUpDownView::ChangeDropDownView(int16_t thisView) + { + if (group[thisView] == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PullUpDownView::ChangeDropDownView"); + Add(group[thisView]); + } + return true; + } + + // 切换到"连接状态"视图 + bool PullUpDownView::ChangeConnectedStatusView(int16_t thisView) + { + if (group[thisView] == nullptr) + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::ChangeConnectedStatusView"); + connectedStatusView = new ConnectedStatusView(); + if (connectedStatusView == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PullUpDownView:: new scrollView[%d] fail", thisView); + return false; + } + group[thisView] = connectedStatusView->ConnectedStatusViewInit(); + Add(group[thisView]); + } + return true; + } + + struct PullUpDownViewMapper + { + const int16_t viewId; + bool (PullUpDownView::*func)(int16_t thisView); + }; + + static const PullUpDownViewMapper ViewMapper[] = { + {DROPDOWNVIEW, &PullUpDownView::ChangeDropDownView}, + {CONNECTEDSTATUSVIEW, &PullUpDownView::ChangeConnectedStatusView}, + }; + + bool PullUpDownView::ClickFunc(int16_t interface) + { + int funcSize = sizeof(ViewMapper) / sizeof(ViewMapper[0]); + for (int i = 0; i < funcSize; i++) + { + if (interface == ViewMapper[i].viewId) + { + bool jug = (this->*(ViewMapper[i].func))(interface); + if (jug == false) + { + return false; + } + return true; + } + } + return false; + } + + void PullUpDownView::ChangeView(int16_t hideView, int16_t showView) + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::ChangeView"); + if (hideView > MAX_DROPDOWNVIEWID) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PullUpDownView:: SystemViewId Overstep ones bounds"); + return; + } + group[hideView]->SetVisible(false); + ClickFunc(showView); + group[showView]->SetVisible(true); + curView = showView; + Invalidate(); + } + + /*获取连接状态视图*/ + ConnectedStatusView *PullUpDownView::GetConnectedStatusView(void) + { + return connectedStatusView; + } + + // 处理按键事件回到下拉主页面 + void PullUpDownView::HandOnKeyEventSwitchMainPullDownView(void) + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::HandOnKeyEventSwitchMainPullDownView"); + if (curView == CONNECTEDSTATUSVIEW) /*当前是连接状态视图*/ + { + ChangeView(curView, DROPDOWNVIEW); /*切换到下拉主页面*/ + } + if (nullptr != dropDownswipeViewList && dropDownswipeViewList->GetCurrentPage() != 0) + { + dropDownswipeViewList->SetCurrentPage(0); + } + Invalidate(); + } + /* -------------------------------------------------------------------------- */ } diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/main/src/dropdown/DropDownCardPage1.cpp b/code/sdk/application/wearable/fd230/nativeapp/nativeui/main/src/dropdown/DropDownCardPage1.cpp new file mode 100644 index 000000000..8b81b19b2 --- /dev/null +++ b/code/sdk/application/wearable/fd230/nativeapp/nativeui/main/src/dropdown/DropDownCardPage1.cpp @@ -0,0 +1,306 @@ +/* + * @Author: luozheng 1732036298@qq.com + * @Date: 2024-08-21 11:54:00 + * @LastEditors: luozheng 1732036298@qq.com + * @LastEditTime: 2024-11-05 15:09:04 + * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/main/src/dropdown/DropDownCardPage1.cpp + */ +#include "main/include/dropdown/DropDownCardPage1.h" +#include "wearable_log.h" +#include "iostream" +#include "string" +#include "AppViewIDs.h" +#include "NativeAbility.h" +#include "main/include/MainModel.h" +#include +#include +#include "ConfigModel.h" + +#ifdef FD230_650 +#include "dnotdisturb/include/DnotDisturbModel.h" +#include "sleepmode/include/SleepModeModel.h" +#include "../../../../../../../drivers/peripheral/slip/cat1Service/cat1_ctl.h" +#include "alipay_feature.h" +#endif + +namespace OHOS +{ + // viewId + static constexpr const char *DROPDOWN_BT_TOGGLEBUTTON_VIEWID = "dropdown_bt"; // 蓝牙 + static constexpr const char *DROPDOWN_4G_TOGGLEBUTTON_VIEWID = "dropdown_4g"; // 4g + static constexpr const char *DROPDOWN_ALIPAY_TOGGLEBUTTON_VIEWID = "dropdown_ALIPAY"; // 支付宝 + static constexpr const char *DROPDOWN_SAVEPOWER_TOGGLEBUTTON_VIEWID = "dropdown_savepower"; // 省电模式 + static constexpr const char *DROPDOWN_SLEEP_TOGGLEBUTTON_VIEWID = "dropdown_sleep"; // 睡眠模式 + static constexpr const char *DROPDOWN_DNOTDISTURB_TOGGLEBUTTON_VIEWID = "dropdown_dnotdisturb"; // 勿扰模式 + static constexpr const char *DROPDOWN_SETTING_TOGGLEBUTTON_VIEWID = "dropdown_setting"; // 设置 + + // Image src + static constexpr const char *DROPDOWN_BT_CONNECT_IMAGE = "/user/res/dropdown/DROPDOWN_BT_CONNECT.bin"; + static constexpr const char *DROPDOWN_BT_DISCONNECT_IMAGE = "/user/res/dropdown/DROPDOWN_BT_DISCONNECT.bin"; + static constexpr const char *DROPDOWN_BT_IMAGE = "/user/res/dropdown/DROPDOWN_BT.bin"; + + static constexpr const char *DROPDOWN_4G_ON_IMAGE = "/user/res/dropdown/DROPDOWN_4G_ON.bin"; + static constexpr const char *DROPDOWN_4G_OFF_IMAGE = "/user/res/dropdown/DROPDOWN_4G_OFF.bin"; + + static constexpr const char *DROPDOWN_ALIPAY_IMAGE = "/user/res/dropdown/DROPDOWN_ALIPAY.bin"; + + static constexpr const char *DROPDOWN_SAVEPOWER_ON_IMAGE = "/user/res/dropdown/DROPDOWN_SAVEPOWER_ON.bin"; + static constexpr const char *DROPDOWN_SAVEPOWER_OFF_IMAGE = "/user/res/dropdown/DROPDOWN_SAVEPOWER_OFF.bin"; + + static constexpr const char *DROPDOWN_SLEEP_ON_IMAGE = "/user/res/dropdown/DROPDOWN_SLEEP_ON.bin"; + static constexpr const char *DROPDOWN_SLEEP_OFF_IMAGE = "/user/res/dropdown/DROPDOWN_SLEEP_OFF.bin"; + + static constexpr const char *DROPDOWN_DNOTDISTURB_ON_IMAGE = "/user/res/dropdown/DROPDOWN_DNOTDISTURB_ON.bin"; + static constexpr const char *DROPDOWN_DNOTDISTURB_OFF_IMAGE = "/user/res/dropdown/DROPDOWN_DNOTDISTURB_OFF.bin"; + + static constexpr const char *DROPDOWN_SETTING_IMAGE = "/user/res/dropdown/DROPDOWN_SETTING.bin"; + + static DropDownCardPage1 *g_pDropDownCardPage1{nullptr}; + DropDownCardPage1::DropDownCardPage1() + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "DropDownCardPage1::DropDownCardPage1"); + SetPosition(0, 0, 430, 210); + g_pDropDownCardPage1 = this; + } + + DropDownCardPage1::~DropDownCardPage1() + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "DropDownCardPage1::~DropDownCardPage1"); + ClearAll(); + g_pDropDownCardPage1 = nullptr; + } + + DropDownCardPage1 *DropDownCardPage1::GetInstance(void) + { + return g_pDropDownCardPage1; + } + + bool DropDownCardPage1::OnClick(UIView &view, const ClickEvent &event) + { + std::string viewId = view.GetViewId(); + bool state; + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "DropDownCardPage1::OnClick %s ", view.GetViewId()); + if (viewId == DROPDOWN_BT_TOGGLEBUTTON_VIEWID) // 蓝牙开关 + { + NativeAbility::GetInstance().EnterSlice(VIEW_CLASSIC_BLUETOOTH); + } + else if (viewId == DROPDOWN_4G_TOGGLEBUTTON_VIEWID) // 4G开关 + { + if (ConfigModel::GetInstance()->GetCat1_4Gability() == false) + { + NativeAbility::GetInstance().EnterSlice(VIEW_NETWORKANDCALL); + } + else + { +#if defined(A5133_DEMO_CLIENT) || defined(A5133_DEMO_SERVER) + uapi_set4GCapability(true); +#else + uapi_set4GCapability(false); +#endif + state = toggleButton[DropDownCardPage1::toggleButton_4G]->GetState(); +#ifdef FD230_650 + Updat4GState(uapi_cat1_get_power_stat()); + ConfigModel::GetInstance()->SetCat1_4Gability(uapi_cat1_get_power_stat()); +#endif + } + } + else if (viewId == DROPDOWN_ALIPAY_TOGGLEBUTTON_VIEWID) // 支付宝 + { +#ifdef FD230_650 +#ifdef SUPPORT_ALIPAY_SEC + if (Alipay_is_init() == false) + { + return false; + } + NativeAbility::GetInstance().EnterSlice(VIEW_MAIN_ALIPAY); +#endif +#endif + } + else if (viewId == DROPDOWN_SAVEPOWER_TOGGLEBUTTON_VIEWID) // 省电模式开关 + { +#ifdef FD230_650 + state = toggleButton[DropDownCardPage1::toggleButton_SAVEPOWER]->GetState(); + NativeAbility::GetInstance().EnterSlice(VIEW_SAVEELE); +#endif + } + else if (viewId == DROPDOWN_SLEEP_TOGGLEBUTTON_VIEWID) // 睡眠开关 + { +#ifdef FD230_650 + if (uapi_sleep_mode_flag_get()) + { + state = toggleButton[DropDownCardPage1::toggleButton_SLEEP]->GetState(); + SleepModeModel::GetInstance().SetSleepModeDisabled(); + } + else + { + NativeAbility::GetInstance().EnterSlice(VIEW_SLEEPMODE); + } +#endif + } + else if (viewId == DROPDOWN_DNOTDISTURB_TOGGLEBUTTON_VIEWID) // 勿扰开关 + { +#ifdef FD230_650 + if (DnotDisturbModel::GetInstance().GetDoNotDisturbModeEnabled() == false) + { + NativeAbility::GetInstance().EnterSlice(VIEW_DNOTDISTURB); + } + else + { + state = toggleButton[DropDownCardPage1::toggleButton_DNOTDISTURB]->GetState(); + UpdateDnotdisturbState(state); + DnotDisturbModel::GetInstance().SetDoNotDisturbModeEnabled(state); + } +#endif + } + else if (viewId == DROPDOWN_SETTING_TOGGLEBUTTON_VIEWID) // 设置 + { + NativeAbility::GetInstance().EnterSlice(VIEW_SETTING); + } + return true; + } + + void DropDownCardPage1::ClearAll() + { + RemoveAll(); + int size = sizeof(toggleButton) / sizeof(toggleButton[0]); + for (int i = 0; i < size; i++) + { + if (toggleButton[i] != nullptr) + { + delete toggleButton[i]; + toggleButton[i] = nullptr; + } + } + } + + UIToggleButton *DropDownCardPage1::ToggleButtonInit(ToggleButtonConfig &toggleButtonConfig) + { + UIToggleButton *toggleButton = new UIToggleButton(); + if (toggleButton == nullptr) + { + return nullptr; + } + toggleButton->SetPosition(toggleButtonConfig.left, toggleButtonConfig.top, toggleButtonConfig.width, toggleButtonConfig.height); + toggleButton->SetViewId(toggleButtonConfig.viewId); + toggleButton->SetStyle(STYLE_BACKGROUND_OPA, 0x00); + toggleButton->SetStyle(STYLE_BORDER_RADIUS, 200); + toggleButton->SetImages(toggleButtonConfig.selectImg, toggleButtonConfig.unselectImg); + toggleButton->SetState(toggleButtonConfig.state); + + toggleButton->SetTouchable(toggleButtonConfig.isTouchable); + toggleButton->SetOnClickListener(this); + return toggleButton; + } + + bool DropDownCardPage1::InitPage(void) + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "DropDownCardPage1::InitPage"); + bool state_bt = true; + bool state_4g = true; + bool state_savepower = true; + bool state_sleep = true; + bool state_dnotdisturb = true; +#ifdef FD230_650 + bool state_bt = ConfigModel::GetInstance()->GetClassicBlueToothState(); // 传统蓝牙开关 + bool state_4g = uapi_cat1_get_power_stat(); + bool state_savepower = uapi_dev_runtime_get_saveele_status(); + bool state_sleep = uapi_sleep_mode_flag_get(); + bool state_dnotdisturb = DnotDisturbModel::GetInstance().GetDoNotDisturbModeEnabled(); +#endif + + ToggleButtonConfig toggleButtonConfig[] = { + // {0, 0, 100, 100, DROPDOWN_BT_TOGGLEBUTTON_VIEWID, state_bt ? DROPDOWN_BT_CONNECT_IMAGE : DROPDOWN_BT_DISCONNECT_IMAGE, state_bt ? DROPDOWN_BT_CONNECT_IMAGE : DROPDOWN_BT_DISCONNECT_IMAGE, true, state_bt}, + {0, 0, 100, 100, DROPDOWN_BT_TOGGLEBUTTON_VIEWID, DROPDOWN_BT_IMAGE, DROPDOWN_BT_IMAGE, true, state_bt}, + {110, 0, 100, 100, DROPDOWN_4G_TOGGLEBUTTON_VIEWID, state_4g ? DROPDOWN_4G_ON_IMAGE : DROPDOWN_4G_OFF_IMAGE, state_4g ? DROPDOWN_4G_ON_IMAGE : DROPDOWN_4G_OFF_IMAGE, true, state_4g}, + {220, 0, 100, 100, DROPDOWN_ALIPAY_TOGGLEBUTTON_VIEWID, DROPDOWN_ALIPAY_IMAGE, DROPDOWN_ALIPAY_IMAGE, true, true}, + {330, 0, 100, 100, DROPDOWN_SAVEPOWER_TOGGLEBUTTON_VIEWID, state_savepower ? DROPDOWN_SAVEPOWER_ON_IMAGE : DROPDOWN_SAVEPOWER_OFF_IMAGE, state_savepower ? DROPDOWN_SAVEPOWER_ON_IMAGE : DROPDOWN_SAVEPOWER_OFF_IMAGE, true, state_savepower}, + {55, 100, 100, 100, DROPDOWN_SLEEP_TOGGLEBUTTON_VIEWID, state_sleep ? DROPDOWN_SLEEP_ON_IMAGE : DROPDOWN_SLEEP_OFF_IMAGE, state_sleep ? DROPDOWN_SLEEP_ON_IMAGE : DROPDOWN_SLEEP_OFF_IMAGE, true, state_sleep}, + {165, 100, 100, 100, DROPDOWN_DNOTDISTURB_TOGGLEBUTTON_VIEWID, state_dnotdisturb ? DROPDOWN_DNOTDISTURB_ON_IMAGE : DROPDOWN_DNOTDISTURB_OFF_IMAGE, state_dnotdisturb ? DROPDOWN_DNOTDISTURB_ON_IMAGE : DROPDOWN_DNOTDISTURB_OFF_IMAGE, true, state_dnotdisturb}, + {275, 100, 100, 100, DROPDOWN_SETTING_TOGGLEBUTTON_VIEWID, DROPDOWN_SETTING_IMAGE, DROPDOWN_SETTING_IMAGE, true, true}, + }; + + for (int i = 0; i < toggleButton_MAX; i++) + { + if (toggleButton[i] == nullptr) + { + toggleButton[i] = ToggleButtonInit(toggleButtonConfig[i]); + if (toggleButton[i] == nullptr) + { + return false; + } + Add(toggleButton[i]); + } + } + return true; + } + + bool DropDownCardPage1::InitView(void *caller) + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "DropDownCardPage1::InitView %p", caller); + if (InitPage() == false) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "DropDownCardPage1::InitPage fail"); + return false; + } + SetDraggable(true); + SetTouchable(true); + return true; + } + + UIToggleButton *DropDownCardPage1::GetDropDownCardPage1_ToggleButton(int index) + { + return toggleButton[index]; + } + + void DropDownCardPage1::UpdateBTState(bool state) + { + if (toggleButton[DropDownCardPage1::toggleButton_BT] != nullptr) + { + const char *ImageSrc = state ? DROPDOWN_BT_CONNECT_IMAGE : DROPDOWN_BT_DISCONNECT_IMAGE; + toggleButton[DropDownCardPage1::toggleButton_BT]->SetImages(ImageSrc, ImageSrc); + } + } + + void DropDownCardPage1::Updat4GState(bool state) + { + if (toggleButton[DropDownCardPage1::toggleButton_4G] != nullptr) + { + const char *ImageSrc = state ? DROPDOWN_4G_ON_IMAGE : DROPDOWN_4G_OFF_IMAGE; + toggleButton[DropDownCardPage1::toggleButton_4G]->SetImages(ImageSrc, ImageSrc); + } + } + + // 刷新4g开关显示 + void DropDownCardPage1::Refresh4GState() + { +#ifdef FD230_650 + Updat4GState(uapi_cat1_get_power_stat()); +#endif + } + + void DropDownCardPage1::UpdateDnotdisturbState(bool state) + { + if (toggleButton[DropDownCardPage1::toggleButton_DNOTDISTURB] != nullptr) + { + const char *ImageSrc = state ? DROPDOWN_DNOTDISTURB_ON_IMAGE : DROPDOWN_DNOTDISTURB_OFF_IMAGE; + toggleButton[DropDownCardPage1::toggleButton_DNOTDISTURB]->SetImages(ImageSrc, ImageSrc); + } + } + + // 更新睡眠模式开关 + void DropDownCardPage1::UpdateSleepModelState(bool state) + { + // 睡眠icon + if (toggleButton[DropDownCardPage1::toggleButton_SLEEP] != nullptr) + { + const char *ImageSrc = state ? DROPDOWN_SLEEP_ON_IMAGE : DROPDOWN_SLEEP_OFF_IMAGE; + toggleButton[DropDownCardPage1::toggleButton_SLEEP]->SetImages(ImageSrc, ImageSrc); + } + // //勿扰icon + // if (toggleButton[DropDownCardPage1::toggleButton_DNOTDISTURB] != nullptr) + // { + // const char *ImageSrc = state ? DROPDOWN_DNOTDISTURB_ON_IMAGE : DROPDOWN_DNOTDISTURB_OFF_IMAGE; + // toggleButton[DropDownCardPage1::toggleButton_DNOTDISTURB]->SetImages(ImageSrc, ImageSrc); + // } + } +} \ No newline at end of file diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/main/src/dropdown/DropDownCardPage2.cpp b/code/sdk/application/wearable/fd230/nativeapp/nativeui/main/src/dropdown/DropDownCardPage2.cpp new file mode 100644 index 000000000..c14c51cc4 --- /dev/null +++ b/code/sdk/application/wearable/fd230/nativeapp/nativeui/main/src/dropdown/DropDownCardPage2.cpp @@ -0,0 +1,132 @@ +/* + * @Author: luozheng 1732036298@qq.com + * @Date: 2024-08-21 11:54:00 + * @LastEditors: luozheng 1732036298@qq.com + * @LastEditTime: 2024-11-05 15:09:26 + * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/main/src/dropdown/DropDownCardPage2.cpp + */ +#include "main/include/dropdown/DropDownCardPage2.h" +#include "wearable_log.h" +#include "iostream" +#include "string" +#include "AppViewIDs.h" +#include "NativeAbility.h" +namespace OHOS +{ + // viewId + static constexpr const char *DROPDOWN_FINDPHONE_TOGGLEBUTTON_VIEWID = "dropdown_bt"; // 查找手机 + static constexpr const char *DROPDOWN_LIGHTING_TOGGLEBUTTON_VIEWID = "dropdown_4g"; // 手电筒 + + // Image src + static constexpr const char *DROPDOWN_FINDPHONE_IMAGE = "/user/res/dropdown/DROPDOWN_FINDPHONE.bin"; + + static constexpr const char *DROPDOWN_LIGHTING_IMAGE = "/user/res/dropdown/DROPDOWN_LIGHTING.bin"; + + static DropDownCardPage2 *g_pDropDownCardPage2{nullptr}; + DropDownCardPage2::DropDownCardPage2() + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "DropDownCardPage2::DropDownCardPage2"); + SetPosition(0, 0, 430, 210); + g_pDropDownCardPage2 = this; + } + + DropDownCardPage2::~DropDownCardPage2() + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "DropDownCardPage2::~DropDownCardPage2"); + ClearAll(); + g_pDropDownCardPage2 = nullptr; + } + + DropDownCardPage2 *DropDownCardPage2::GetInstance(void) + { + return g_pDropDownCardPage2; + } + + bool DropDownCardPage2::OnClick(UIView &view, const ClickEvent &event) + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "DropDownCardPage2::OnClick"); + std::string viewId = view.GetViewId(); + if (viewId == DROPDOWN_FINDPHONE_TOGGLEBUTTON_VIEWID) + { + NativeAbility::GetInstance().EnterSlice(VIEW_FIND_PHONE); + } + else if (viewId == DROPDOWN_LIGHTING_TOGGLEBUTTON_VIEWID) + { + NativeAbility::GetInstance().EnterSlice(VIEW_FLASHLIGHT); + } + return true; + } + + void DropDownCardPage2::ClearAll() + { + RemoveAll(); + int size = sizeof(toggleButton) / sizeof(toggleButton[0]); + for (int i = 0; i < size; i++) + { + if (toggleButton[i] != nullptr) + { + delete toggleButton[i]; + toggleButton[i] = nullptr; + } + } + } + + UIToggleButton *DropDownCardPage2::ToggleButtonInit(ToggleButtonConfig &toggleButtonConfig) + { + UIToggleButton *toggleButton = new UIToggleButton(); + if (toggleButton == nullptr) + { + return nullptr; + } + toggleButton->SetPosition(toggleButtonConfig.left, toggleButtonConfig.top, toggleButtonConfig.width, toggleButtonConfig.height); + toggleButton->SetViewId(toggleButtonConfig.viewId); + toggleButton->SetStyle(STYLE_BACKGROUND_OPA, 0x00); + toggleButton->SetStyle(STYLE_BORDER_RADIUS, 200); + toggleButton->SetImages(toggleButtonConfig.selectImg, toggleButtonConfig.unselectImg); + + toggleButton->SetTouchable(toggleButtonConfig.isTouchable); + toggleButton->SetOnClickListener(this); + return toggleButton; + } + + bool DropDownCardPage2::InitPage(void) + { + int size = sizeof(toggleButton) / sizeof(toggleButton[0]); + ToggleButtonConfig toggleButtonConfig[] = { + {0, 0, 100, 100, DROPDOWN_FINDPHONE_TOGGLEBUTTON_VIEWID, DROPDOWN_FINDPHONE_IMAGE, DROPDOWN_FINDPHONE_IMAGE, true}, + {110, 0, 100, 100, DROPDOWN_LIGHTING_TOGGLEBUTTON_VIEWID, DROPDOWN_LIGHTING_IMAGE, DROPDOWN_LIGHTING_IMAGE, true}, + }; + + for (int i = 0; i < size; i++) + { + if (toggleButton[i] == nullptr) + { + toggleButton[i] = ToggleButtonInit(toggleButtonConfig[i]); + if (toggleButton[i] == nullptr) + { + return false; + } + Add(toggleButton[i]); + } + } + return true; + } + + bool DropDownCardPage2::InitView(void *caller) + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "DropDownCardPage2::InitView %p", caller); + if (InitPage() == false) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "DropDownCardPage2::InitPage fail"); + return false; + } + SetDraggable(true); + SetTouchable(true); + return true; + } + + UIToggleButton *DropDownCardPage2::GetDropDownCardPage2_ToggleButton(int index) + { + return toggleButton[index]; + } +} \ No newline at end of file -- 2.17.1