From 30fbb02c9b8f793dca3efc81f5a905078be4fb4e Mon Sep 17 00:00:00 2001 From: Caisking Date: Thu, 24 Jul 2025 18:17:00 +0800 Subject: [PATCH] =?utf8?q?=E5=A2=9E=E5=8A=A0=E5=AE=89=E5=85=A8=E6=A8=A1?= =?utf8?q?=E5=BC=8FSlice?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../safemodemanager/include/RepairView.h | 47 ++ .../include/ResourceCheckAdapter.h | 49 ++ .../include/ResourceCheckItemView.h | 42 ++ .../include/ResourceCheckView.h | 44 ++ .../include/SafeModeManagerModel.h | 127 +++++ .../include/SafeModeManagerModelC.h | 24 + .../include/SafeModeManagerPresenter.h | 50 ++ .../include/SafeModeManagerView.h | 137 ++++++ .../safemodemanager/src/RepairView.cpp | 324 +++++++++++++ .../src/ResourceCheckAdapter.cpp | 106 ++++ .../src/ResourceCheckItemView.cpp | 47 ++ .../safemodemanager/src/ResourceCheckView.cpp | 242 ++++++++++ .../src/SafeModeManagerModel.cpp | 455 ++++++++++++++++++ .../src/SafeModeManagerPresenter.cpp | 278 +++++++++++ .../src/SafeModeManagerView.cpp | 378 +++++++++++++++ 15 files changed, 2350 insertions(+) create mode 100644 code/sdk/application/wearable/fd230/nativeapp/nativeui/safemodemanager/include/RepairView.h create mode 100644 code/sdk/application/wearable/fd230/nativeapp/nativeui/safemodemanager/include/ResourceCheckAdapter.h create mode 100644 code/sdk/application/wearable/fd230/nativeapp/nativeui/safemodemanager/include/ResourceCheckItemView.h create mode 100644 code/sdk/application/wearable/fd230/nativeapp/nativeui/safemodemanager/include/ResourceCheckView.h create mode 100644 code/sdk/application/wearable/fd230/nativeapp/nativeui/safemodemanager/include/SafeModeManagerModel.h create mode 100644 code/sdk/application/wearable/fd230/nativeapp/nativeui/safemodemanager/include/SafeModeManagerModelC.h create mode 100644 code/sdk/application/wearable/fd230/nativeapp/nativeui/safemodemanager/include/SafeModeManagerPresenter.h create mode 100644 code/sdk/application/wearable/fd230/nativeapp/nativeui/safemodemanager/include/SafeModeManagerView.h create mode 100644 code/sdk/application/wearable/fd230/nativeapp/nativeui/safemodemanager/src/RepairView.cpp create mode 100644 code/sdk/application/wearable/fd230/nativeapp/nativeui/safemodemanager/src/ResourceCheckAdapter.cpp create mode 100644 code/sdk/application/wearable/fd230/nativeapp/nativeui/safemodemanager/src/ResourceCheckItemView.cpp create mode 100644 code/sdk/application/wearable/fd230/nativeapp/nativeui/safemodemanager/src/ResourceCheckView.cpp create mode 100644 code/sdk/application/wearable/fd230/nativeapp/nativeui/safemodemanager/src/SafeModeManagerModel.cpp create mode 100644 code/sdk/application/wearable/fd230/nativeapp/nativeui/safemodemanager/src/SafeModeManagerPresenter.cpp create mode 100644 code/sdk/application/wearable/fd230/nativeapp/nativeui/safemodemanager/src/SafeModeManagerView.cpp diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/safemodemanager/include/RepairView.h b/code/sdk/application/wearable/fd230/nativeapp/nativeui/safemodemanager/include/RepairView.h new file mode 100644 index 000000000..5c8d79813 --- /dev/null +++ b/code/sdk/application/wearable/fd230/nativeapp/nativeui/safemodemanager/include/RepairView.h @@ -0,0 +1,47 @@ +#if 0 + +#ifndef Repair_VIEW_H +#define Repair_VIEW_H + + +#include "View.h" + +#include "components/ui_button.h" +#include "components/ui_image_view.h" +#include "components/ui_label_button_ext.h" +#include "components/ui_label_ext.h" +#include "components/ui_scroll_view.h" +namespace OHOS { +class RepairView { +public: + RepairView(); + virtual ~RepairView(); + static RepairView *GetInstance(void); + + UIScrollView *RepairViewInit(void); + void ClearAll(void); + + void UpdateView(void); + void InitScrollView(void); + void InitLabels(void); + void InitButtons(void); + void InitBasicdata(void); + void UpdateView(int date); + void UpdateSginandOperate(void); + +private: + UIScrollView *scrollView_{nullptr}; + UILabel *signalLabel_{nullptr}; + UILabel *operationLabel_{nullptr}; + UILabel *instructionLabel_{nullptr}; + UILabelButtonExt *repairButton_{nullptr}; + UILabelButtonExt *wakeUpButton_{nullptr}; + UILabel *downLabel_{nullptr}; + UILabel *totalLabel_{nullptr}; + UILabel *versionLabel_{nullptr}; + UILabel *downingLabel_{nullptr}; +}; +} // namespace OHOS +#endif + +#endif \ No newline at end of file diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/safemodemanager/include/ResourceCheckAdapter.h b/code/sdk/application/wearable/fd230/nativeapp/nativeui/safemodemanager/include/ResourceCheckAdapter.h new file mode 100644 index 000000000..adddba04b --- /dev/null +++ b/code/sdk/application/wearable/fd230/nativeapp/nativeui/safemodemanager/include/ResourceCheckAdapter.h @@ -0,0 +1,49 @@ +#if 0 +#ifndef ResourceCheck_ADAPTER_H +#define ResourceCheck_ADAPTER_H +#include +#include +#include "components/ui_list.h" +#include "components/abstract_adapter.h" +#include "components/ui_label.h" +#include "components/ui_label_ext.h" +#include "components/ui_checkbox.h" +#include "components/ui_label_button_ext.h" + +namespace OHOS +{ + typedef struct + { + int index; + std::string filename; + } ResourceCheckItem; + + class ResourceCheckAdapter : public AbstractAdapter + { + public: + explicit ResourceCheckAdapter(); + virtual ~ResourceCheckAdapter(); + + void SetData(std::list &data); + + virtual uint16_t GetCount(void) override; + + virtual UIView *GetView(UIView *inView, int16_t index) override; + + virtual void AddListItem(const ResourceCheckItem &item); + + void SetItemClickListener(UIView::OnClickListener *itemclicklistener) + { + itemClickListener = itemclicklistener; + } + + private: + std::list listData; + UIView::OnClickListener *itemClickListener{nullptr}; + UILabelButtonExt *DeleteButton{nullptr}; + }; +} + +#endif + +#endif \ No newline at end of file diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/safemodemanager/include/ResourceCheckItemView.h b/code/sdk/application/wearable/fd230/nativeapp/nativeui/safemodemanager/include/ResourceCheckItemView.h new file mode 100644 index 000000000..c18369eee --- /dev/null +++ b/code/sdk/application/wearable/fd230/nativeapp/nativeui/safemodemanager/include/ResourceCheckItemView.h @@ -0,0 +1,42 @@ +/*** + * @Date: 2024-09-10 09:53:16 + * @LastEditors: Caisking 3449750381@qq.com + * @LastEditTime: 2024-09-10 10:31:06 + * @FilePath: /XTS_FD230/FD230/code/sdk/application/wearable/fd230app/nativeui/safemodemanager/src/ResourceCheckItemView.cpp + */ + + +#ifndef ResourceCheck_ITEM_VIEW_H +#define ResourceCheck_ITEM_VIEW_H + +#include "components/ui_label.h" +#include "components/ui_label_ext.h" +#include "components/ui_view_group.h" +#include "components/ui_checkbox.h" +#include "components/ui_image_view.h" +#include "components/ui_label_button.h" + +#include "safemodemanager/include/ResourceCheckAdapter.h" +#include "safemodemanager/include/ResourceCheckItemView.h" + + +namespace OHOS +{ + class ResourceCheckItemView : public UIViewGroup + { + public: + explicit ResourceCheckItemView(); + virtual ~ResourceCheckItemView(); + virtual void SetItemInfo(const ResourceCheckItem itemInfo); + virtual void SetUpChild(); + void TearDownChild(); + int GetResourceCheckListIndex(); + + private: + ResourceCheckItemView(const ResourceCheckItem &); + UILabel filenamelabel; + ResourceCheckItem sItemInfo = {0, nullptr}; + bool isSetupChild{false}; + }; +} +#endif \ No newline at end of file diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/safemodemanager/include/ResourceCheckView.h b/code/sdk/application/wearable/fd230/nativeapp/nativeui/safemodemanager/include/ResourceCheckView.h new file mode 100644 index 000000000..cacbd39ff --- /dev/null +++ b/code/sdk/application/wearable/fd230/nativeapp/nativeui/safemodemanager/include/ResourceCheckView.h @@ -0,0 +1,44 @@ + +#if 0 + +#ifndef ResourceCheck_VIEW_H +#define ResourceCheck_VIEW_H + + +#include "View.h" + +#include "components/ui_button.h" +#include "components/ui_image_view.h" +#include "components/ui_label_ext.h" +#include "components/ui_scroll_view.h" +#include "safemodemanager/include/ResourceCheckAdapter.h" +#include "safemodemanager/include/ResourceCheckItemView.h" +namespace OHOS { +class ResourceCheckView { +public: + ResourceCheckView(); + virtual ~ResourceCheckView(); + static ResourceCheckView *GetInstance(void); + + UIScrollView *ResourceCheckViewInit(void); + void ClearAll(void); + + void UpdateView(int date); + void UpdateView(); + void AddFilenameToList(const ResourceCheckItem &item); + void InitScrollView(void); + void InitFilenameList(void); + void InitNoteLabel(void); + void SetViewState(void); + +private: + UIScrollView *scrollView{nullptr}; + UILabel *notelabel{nullptr}; + ResourceCheckAdapter *p_ResourceCheckAdapter{nullptr}; + UIList *FilenameList = nullptr; + bool initViewStatus{false}; +}; +} // namespace OHOS +#endif + +#endif \ No newline at end of file diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/safemodemanager/include/SafeModeManagerModel.h b/code/sdk/application/wearable/fd230/nativeapp/nativeui/safemodemanager/include/SafeModeManagerModel.h new file mode 100644 index 000000000..ea7b45279 --- /dev/null +++ b/code/sdk/application/wearable/fd230/nativeapp/nativeui/safemodemanager/include/SafeModeManagerModel.h @@ -0,0 +1,127 @@ +/*** + * @Date: 2024-08-21 16:18:26 + * @LastEditors: Caisking 3449750381@qq.com + * @LastEditTime: 2024-09-06 18:19:25 + * @FilePath: + * /FD230/code/sdk/application/wearable/fd230app/nativeui/SafeModeManager/include/SafeModeManagerModel.h + */ + +#ifndef SAFE_MODE_MANAGER_MODEL_H +#define SAFE_MODE_MANAGER_MODEL_H + +#include "safemodemanager/include/ResourceCheckAdapter.h" +#include "safemodemanager/include/ResourceCheckItemView.h" +#include +#include +#include +#include + +namespace OHOS { + +// 定义状态类型 +enum class Safe_State { + BLE_OTA, // BLE OTA + AUTO_OTA, // Auto OTA + FACTORY_RESET, // 恢复出厂 + RESOURCE_CHECK, // 资源检查 + REPAIR_FILE // 修复 +}; +enum CheckState { + NO_OPERATION = 0, // 未操作 + CHECKING = 1, // 校验中 + CHECK_SUCCESS = 2, // 校验成功 + FILE_NOT_FOUND = 3, // 文件未找到 + FILE_CORRUPTED = 4 // 文件损坏 +}; +struct SafeStateInfo { + Safe_State state; + bool active; // 是否激活 +}; +static const int SAFE_STATE_COUNT = 5; // 安全状态数量 +class SafeModeManagerModel { +public: + // 获取单例实例 + static SafeModeManagerModel *GetInstance(); + + // 恢复出厂 + bool FactorySet(); + /* ---------------------------------- 校验文件 + * ---------------------------------- */ + // 初始化列表项 + void InitFilenamesListItems(); + // 获取列表项 + const ResourceCheckItem *GetFilenamesListItems() const; + // 获取数量 + uint16_t GetFilenamesCount() const; + // 资源检查和读取差异文件 + bool ResourceCheck(); + bool ReadCheckFile(); + // 获取校验状态 + bool GetResourceCheckState() const; + void SetResourceCheckState(bool state); + // 获取检查文件列表 + const std::vector &GetCheckDifferentialFiles() const; + size_t GetCheckFileCount() const; + // 更新检查视图 + void UpdateCheckView(int date); + /* ---------------------------------- 文件修复 + * ---------------------------------- */ + //获取信号值 + uint8_t GetSignal() const; + //获取运营商 + std::string GetOperator() const; + //获取版本号 + std::string GetVersion() const; + //获取下载地址 + std::string GetRepairUrl() const; + //唤醒Cat1 + void uapi_cat1_wakeup_cat1(bool wakeupstate); + //进行修复开始 + bool RepairStart(); + // 进行修复结束 + bool RepairEnd(); + //更新修复界面 + void UpdateRepairView(int date); + //更新信号与运营商 + void UpdateSginOperate(); + //获取下载数 + uint16_t GetRepairCount() const; + //设置下载数 + void SetRepairCount(uint16_t count); + //增加下载数 + void AddRepairCount(); + + /* ---------------------------------- map管理 + * --------------------------------- */ + // 设置状态 + void SetState(Safe_State state, bool executeAction); + // 获取状态 + bool IsState(Safe_State state) const; + // 输出当前状态 + void PrintState() const; + + /* ---------------------------------- 手表信息 + * ---------------------------------- */ + std::string get_voltage_and_version_string(); + std::string get_bluetooth_name(); + +private: + SafeModeManagerModel() = default; // 默认构造函数 + ~SafeModeManagerModel() = default; // 默认析构函数 + + // 禁止拷贝构造和赋值操作 + SafeModeManagerModel(const SafeModeManagerModel &) = delete; + SafeModeManagerModel &operator=(const SafeModeManagerModel &) = delete; + + std::vector resource_check_files; // 存储检查的资源文件列表 + uint16_t numberOfItems = 0; // 初始化文件项数为 0 + static const uint16_t MAX_RESOURCE_CHECK_FILE_NUM = 500; // 列表最大数量 + ResourceCheckItem Filenames[MAX_RESOURCE_CHECK_FILE_NUM] = {0, + nullptr}; // 列表 + bool resource_check_state{false}; // 资源检查状态 + uint16_t repair_count{0}; //下载数 +}; + +} // namespace OHOS + +#endif // SAFE_MODE_MANAGER_MODEL_H \ No newline at end of file diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/safemodemanager/include/SafeModeManagerModelC.h b/code/sdk/application/wearable/fd230/nativeapp/nativeui/safemodemanager/include/SafeModeManagerModelC.h new file mode 100644 index 000000000..6717e0d32 --- /dev/null +++ b/code/sdk/application/wearable/fd230/nativeapp/nativeui/safemodemanager/include/SafeModeManagerModelC.h @@ -0,0 +1,24 @@ + +#ifndef SAFE_MODE_MANAGER_MODEL_C_H +#define SAFE_MODE_MANAGER_MODEL_C_H + +#ifdef __cplusplus +extern "C" { +#endif + +//进行修复开始 +void repair_file_start(void); +//进行运动存储 +void store_sport_data(void); +//进行心率存储 +void save_heart_rate_data(void); +//进行血氧存储 +void save_blood_oxygen_data(void); +//进行心率列表存储 +void save_heart_rate_data(void); + +#ifdef __cplusplus +} +#endif + +#endif \ No newline at end of file diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/safemodemanager/include/SafeModeManagerPresenter.h b/code/sdk/application/wearable/fd230/nativeapp/nativeui/safemodemanager/include/SafeModeManagerPresenter.h new file mode 100644 index 000000000..7af8ea908 --- /dev/null +++ b/code/sdk/application/wearable/fd230/nativeapp/nativeui/safemodemanager/include/SafeModeManagerPresenter.h @@ -0,0 +1,50 @@ +#if 0 + +#ifndef _SafeModeManager_PRESENTER_H +#define _SafeModeManager_PRESENTER_H + +#include "Presenter.h" +#include "SafeModeManagerView.h" +#include "ModelListenerSample.h" + +namespace OHOS { +static constexpr const char *BLE_OTA = "ble_ota"; +static constexpr const char *AUTO_OTA = "auto_ota"; +static constexpr const char *FACTORY_RESET_SAFE = "factory_reset"; +static constexpr const char *RESOURCE_CHECK = "resource_check"; +static constexpr const char *REPAIR_ALL = "repair_all"; +static constexpr const char *RE_START = "restart"; +static constexpr const char *CHECK_FILE_LIST = "check_file_list"; +static constexpr const char *WAKE_UP = "wake_up"; +static constexpr const char *REPAIR_FILE_START = "repair_file"; + +class SafeModeManagerView; +class SafeModeManagerPresenter : public Presenter, + public UIView::OnClickListener, + public UIView::OnDragListener, + public ModelListenerSample, + public RootView::OnKeyActListener { +public: + SafeModeManagerPresenter(); + virtual ~SafeModeManagerPresenter(); + + void OnStart() override; + void OnPause() override; + void OnResume() override; + void OnStop() override; + void OnTickEvent() override; + void Notify() override {} + + static SafeModeManagerPresenter *GetInstance(); + +private: + // 因为继承了OnClickListener,所以有OnClick属性,至于参数,原函数也这样直接继承; + bool OnClick(UIView &view, const ClickEvent &event) override; + bool OnDrag(UIView &view, const DragEvent &event) override; + bool OnKeyAct(UIView &view, const KeyEvent &event) override; // 增加按键事件 +}; +} // namespace OHOS + +#endif // SLEEPDETAIL_PRESENTER_H + +#endif \ No newline at end of file diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/safemodemanager/include/SafeModeManagerView.h b/code/sdk/application/wearable/fd230/nativeapp/nativeui/safemodemanager/include/SafeModeManagerView.h new file mode 100644 index 000000000..24c673f36 --- /dev/null +++ b/code/sdk/application/wearable/fd230/nativeapp/nativeui/safemodemanager/include/SafeModeManagerView.h @@ -0,0 +1,137 @@ +#if 0 + +#ifndef _SafeModeManager_VIEW_H +#define _SafeModeManager_VIEW_H + + +#include "View.h" + +#include "components/ui_button.h" +#include "components/ui_image_view.h" +#include "components/ui_label.h" +#include "components/ui_label_ext.h" +#include "components/ui_scroll_view.h" +#include "components/ui_toggle_button.h" +#include "components/ui_view_group.h" + +#include "SafeModeManagerPresenter.h" +#include "safemodemanager/include/RepairView.h" +#include "safemodemanager/include/ResourceCheckView.h" +#include "safemodemanager/include/SafeModeManagerModel.h" + +namespace OHOS { +typedef enum { + VIEW_SAFE_LIST, // Safe Mode List + VIEW_BLE_OTA, // BLE OTA Update + VIEW_AUTO_OTA, // Automatic OTA Update + VIEW_FACTORY_RESET, // Factory Reset + VIEW_RESOURCE_CHECK, // Resource Check + VIEW_REPAIR_FILE, // File Repair + MAX_VIEW_ID, // Maximum View ID +} SafeViewID; + +// 定义结构体用于位置设置 +struct Position { + int x; + int y; +}; + +// 初始化背景项及其位置 +struct BackgroundItem { + UIImageView *background; + Position position; +}; +// 定义按钮 +struct ButtonItem { + UIToggleButton *button; + Position position; + const char *viewId; +}; + +// 定义功能状态标签 +struct StatusLabelItem { + UILabel *label; + std::string text; + Position position; +}; + +struct SafeViewItem { + BackgroundItem background; + ButtonItem button; + StatusLabelItem statusLabel; +}; + +class SafeModeManagerPresenter; +class ResourceCheckView; + +class SafeModeManagerView : public View { +public: + SafeModeManagerView(); + virtual ~SafeModeManagerView(); + static SafeModeManagerView *GetInstance(void); + + void OnStart() override; + void OnSetUpView() override; + void OnTearDownView() override; + void OnStop() override; + void InitView(); + void DeInit(); + + bool ClickFunc(int16_t interface); + bool CheckViewParam(int16_t hideView, int16_t showView); + void ChangeView(int16_t hideView, int16_t showView); + + bool ChangeToSafeModelistView(int16_t thisView); + bool ChangeToBleOTAView(int16_t thisView); + bool ChangeToAutoOTAView(int16_t thisView); + bool ChangeToFactoryView(int16_t thisView); + bool ChangeToResourceCheckView(int16_t thisView); + bool ChangeToRepairView(int16_t thisView); + UIScrollView *GetSafeScrollView(int ViewId); + + void UpdateToggleButState(); + void UpdateButtonState(UIToggleButton button, Safe_State state); + +private: + SafeModeManagerView *p_BleOTAView{nullptr}; // BLE OTA View + SafeModeManagerView *p_AutoOTAView{nullptr}; // Automatic OTA View + SafeModeManagerView *p_FactoryView{nullptr}; // Factory Reset View + ResourceCheckView *p_ResourceCheckView{nullptr}; // Resource Check View + RepairView *p_RepairView{nullptr}; // File Repair View + +private: + SafeModeManagerView(SafeModeManagerView &&) = delete; + SafeModeManagerView &operator=(SafeModeManagerView &&) = delete; + + // UI Components + UILabel labelTitle_; // Title Label + UILabel labelInfo_; + + // Background Images for Features + UIImageView backgroundBLE_; // BLE OTA Background Image + UIImageView backgroundAutoOTA_; // Auto OTA Background Image + UIImageView backgroundFactoryReset_; // Factory Reset Background Image + UIImageView backgroundResourceCheck_; // Resource Check Background Image + UIImageView backgroundRestart_; // Restart Background Image + + // Toggle Buttons + UIToggleButton btnBLE_; // BLE OTA Toggle Button + UIToggleButton btnAutoOTA_; // Auto OTA Toggle Button + UIToggleButton btnFactoryReset_; // Factory Reset Toggle Button + UIToggleButton btnResourceCheck_; // Resource Check Toggle Button + UIToggleButton btnRestart_; // Restart Toggle Button + + // Status Labels + UILabel labelBLEStatus_; // BLE OTA Status Label + UILabel labelAutoOTAStatus_; // Auto OTA Status Label + UILabel labelFactoryResetStatus_; // Factory Reset Status Label + UILabel labelResourceCheckStatus_; // Resource Check Status Label + UILabel labelRestart_; // Restart Status Label + + UIScrollView *SafeModeScrollView[MAX_VIEW_ID]{nullptr}; +}; +} // namespace OHOS + +#endif // _SafeModeManager_VIEW_H + +#endif \ No newline at end of file diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/safemodemanager/src/RepairView.cpp b/code/sdk/application/wearable/fd230/nativeapp/nativeui/safemodemanager/src/RepairView.cpp new file mode 100644 index 000000000..095dee955 --- /dev/null +++ b/code/sdk/application/wearable/fd230/nativeapp/nativeui/safemodemanager/src/RepairView.cpp @@ -0,0 +1,324 @@ +#if 0 + +#include "safemodemanager/include/RepairView.h" +#include "safemodemanager/include/SafeModeManagerModel.h" +#include "safemodemanager/include/SafeModeManagerPresenter.h" + +#include "UiConfig.h" +#include "ui_resource_string.h" +#include "wearable_log.h" + +namespace OHOS { + +static RepairView *g_pRepairView{nullptr}; + +RepairView::RepairView() { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RepairView::RepairView"); + g_pRepairView = this; +} + +RepairView::~RepairView() { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RepairView::~RepairView"); + ClearAll(); + g_pRepairView = nullptr; +} + +RepairView *RepairView::GetInstance() { return g_pRepairView; } + +void RepairView::ClearAll() { + scrollView_->RemoveAll(); + delete signalLabel_; + signalLabel_ = nullptr; + delete operationLabel_; + operationLabel_ = nullptr; + delete instructionLabel_; + instructionLabel_ = nullptr; + delete versionLabel_; + versionLabel_ = nullptr; + delete wakeUpButton_; + wakeUpButton_ = nullptr; + delete repairButton_; + repairButton_ = nullptr; + delete downLabel_; + downLabel_ = nullptr; + delete totalLabel_; + totalLabel_ = nullptr; + delete downingLabel_; + downingLabel_ = nullptr; + delete scrollView_; + scrollView_ = nullptr; +} + +void RepairView::InitScrollView() { + if (scrollView_ == nullptr) { + scrollView_ = new UIScrollView(); + scrollView_->SetPosition(0, 0, Screen::GetInstance().GetWidth(), + Screen::GetInstance().GetHeight()); + scrollView_->SetStyle(STYLE_BACKGROUND_OPA, 0xff); + scrollView_->SetScrollBlankSize(100); + scrollView_->SetMaxScrollDistance(1000); + scrollView_->SetThrowDrag(true); + scrollView_->SetHorizontalScrollState(false); + } +} + +void RepairView::InitLabels() { + // Signal Label + if (signalLabel_ == nullptr) { + signalLabel_ = new UILabel(); + signalLabel_->SetPosition(133, 130); + signalLabel_->Resize(200, 60); + signalLabel_->SetViewId("signalLabel"); + signalLabel_->SetText("Signal: --"); + signalLabel_->SetLineBreakMode(UILabel::LINE_BREAK_WRAP); + signalLabel_->SetAlign(TEXT_ALIGNMENT_CENTER); + signalLabel_->SetFont(GILROY_BOLD_FONT, + 30); // Updated font size + signalLabel_->SetTextColor( + Color::GetColorFromRGBA(0x15, 0xcb, 0x06, 0xff)); // Updated text color + scrollView_->Add(signalLabel_); + signalLabel_->SetVisible(true); + } + + // Operation Label + if (operationLabel_ == nullptr) { + operationLabel_ = new UILabel(); + operationLabel_->SetPosition(83, 80); + operationLabel_->Resize(300, 60); + operationLabel_->SetViewId("operationLabel"); + operationLabel_->SetText("Operation: --"); + operationLabel_->SetLineBreakMode(UILabel::LINE_BREAK_WRAP); + operationLabel_->SetAlign(TEXT_ALIGNMENT_CENTER); + operationLabel_->SetFont(GILROY_BOLD_FONT, + 30); // Updated font size + scrollView_->Add(operationLabel_); + operationLabel_->SetVisible(true); + } + + // Instruction Label + if (instructionLabel_ == nullptr) { + instructionLabel_ = new UILabel(); + instructionLabel_->SetPosition(20, 180); + instructionLabel_->Resize(400, 60); + instructionLabel_->SetViewId("instructionLabel"); + instructionLabel_->SetText("If the signal is outside the range of 0 to 30, " + "please click 'Wake Up' and wait for a moment."); + instructionLabel_->SetLineBreakMode(UILabel::LINE_BREAK_WRAP); + instructionLabel_->SetAlign(TEXT_ALIGNMENT_CENTER); + instructionLabel_->SetTextColor( + Color::GetColorFromRGBA(0xeb, 0x05, 0x05, 0xff)); + instructionLabel_->SetFont(GILROY_BOLD_FONT, + 20); // Updated font size + // scrollView_->Add(instructionLabel_); + // instructionLabel_->SetVisible(true); + } + + // Version Label + if (versionLabel_ == nullptr) { + versionLabel_ = new UILabel(); + versionLabel_->SetPosition(133, 180); + versionLabel_->Resize(200, 60); + versionLabel_->SetViewId("versionLabel"); + versionLabel_->SetText("Version: --"); + versionLabel_->SetLineBreakMode(UILabel::LINE_BREAK_WRAP); + versionLabel_->SetAlign(TEXT_ALIGNMENT_CENTER); + versionLabel_->SetFont(GILROY_BOLD_FONT, + 30); // Updated font size + scrollView_->Add(versionLabel_); + versionLabel_->SetVisible(true); + } + + // down Label + if (downingLabel_ == nullptr) { + downingLabel_ = new UILabel(); + downingLabel_->SetPosition(133, 406); + downingLabel_->Resize(200, 60); + downingLabel_->SetViewId("label11"); + downingLabel_->SetStyle(STYLE_TEXT_FONT, 26); + downingLabel_->SetText("downing..."); + downingLabel_->SetLineBreakMode(UILabel::LINE_BREAK_OSCILLATION); + downingLabel_->SetTextColor( + Color::GetColorFromRGBA(0xef, 0x0e, 0x0e, 0xff)); + downingLabel_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); + downingLabel_->SetRollSpeed(23); + downingLabel_->SetFont(GILROY_BOLD_FONT, 26); + scrollView_->Add(downingLabel_); + downingLabel_->SetVisible(false); + } +} + +void RepairView::InitButtons() { + // Repair Button + if (repairButton_ == nullptr) { + repairButton_ = new UILabelButtonExt(); + repairButton_->SetPosition(265, 245); + repairButton_->Resize(160, 80); // Updated size + repairButton_->SetViewId(REPAIR_FILE_START); + repairButton_->SetText("Repair File"); + repairButton_->SetFont(GILROY_BOLD_FONT, + 26); // Updated font size + repairButton_->SetStyle(STYLE_BACKGROUND_COLOR, 0xff14ff00); + scrollView_->Add(repairButton_); + repairButton_->SetVisible(true); + // 设置点击事件监听器 + UIView::OnClickListener *repairclickListener = (UIView::OnClickListener *) + OHOS::SafeModeManagerPresenter::GetInstance(); + if (repairclickListener == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "repairclickListener is null"); + return; + } + repairButton_->SetOnClickListener(repairclickListener); + } + + // Wake Up Button + if (wakeUpButton_ == nullptr) { + wakeUpButton_ = new UILabelButtonExt(); + wakeUpButton_->SetPosition(45, 245); + wakeUpButton_->Resize(160, 80); // Updated size + wakeUpButton_->SetViewId(WAKE_UP); + wakeUpButton_->SetText("Wake Up"); + wakeUpButton_->SetFont(GILROY_BOLD_FONT, + 26); // Updated font size + wakeUpButton_->SetStyle(STYLE_BACKGROUND_COLOR, 0xff0c77e6); + scrollView_->Add(wakeUpButton_); + wakeUpButton_->SetVisible(true); + // 设置点击事件监听器 + UIView::OnClickListener *wakeclickListener = (UIView::OnClickListener *) + OHOS::SafeModeManagerPresenter::GetInstance(); + if (wakeclickListener == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "wakeclickListener is null"); + return; + } + wakeUpButton_->SetOnClickListener(wakeclickListener); + } +} +UIScrollView *RepairView::RepairViewInit() { + + InitScrollView(); + // 设置拖拽监听器 + UIView::OnDragListener *dragListener = static_cast( + SafeModeManagerPresenter::GetInstance()); + if (!dragListener) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, + "SafeModeManagerPresenter::获取实例失败!"); + return nullptr; // 获取失败,返回空指针 + } + scrollView_->SetOnDragListener(dragListener); + + InitLabels(); + InitButtons(); + + // Adding other labels + if (downLabel_ == nullptr) { + downLabel_ = new UILabel(); + downLabel_->SetPosition(26, 366); + downLabel_->Resize(200, 60); + downLabel_->SetViewId("downLabel"); + downLabel_->SetText("down: --"); + downLabel_->SetLineBreakMode(UILabel::LINE_BREAK_WRAP); + downLabel_->SetAlign(TEXT_ALIGNMENT_CENTER); + downLabel_->SetFont(GILROY_BOLD_FONT, + 30); // Updated font size + downLabel_->SetTextColor( + Color::GetColorFromRGBA(0x15, 0xcb, 0x06, 0xff)); // Updated text color + scrollView_->Add(downLabel_); + downLabel_->SetVisible(true); + } + + if (totalLabel_ == nullptr) { + totalLabel_ = new UILabel(); + totalLabel_->SetPosition(230, 366); + totalLabel_->Resize(200, 60); + totalLabel_->SetViewId("totalLabel"); + totalLabel_->SetText("total: --"); + totalLabel_->SetLineBreakMode(UILabel::LINE_BREAK_WRAP); + totalLabel_->SetAlign(TEXT_ALIGNMENT_CENTER); + totalLabel_->SetFont(GILROY_BOLD_FONT, + 30); // Updated font size + scrollView_->Add(totalLabel_); + totalLabel_->SetVisible(true); + } + + // 初始化基本数据 + InitBasicdata(); + + return scrollView_; +} + +//初始化版本号与下载总数 +void RepairView::InitBasicdata() { + if (versionLabel_ != nullptr) { + // 获取版本号 + std::string version = SafeModeManagerModel::GetInstance()->GetVersion(); + versionLabel_->SetText(version.c_str()); + } + if (downLabel_ != nullptr) { + // 获取文件总数 + int totalcount = SafeModeManagerModel::GetInstance()->GetFilenamesCount(); + std::string total = "total: " + std::to_string(totalcount); + totalLabel_->SetText(total.c_str()); + } + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "versionstr: %s, totalstr:%s", + versionLabel_->GetText(), totalLabel_->GetText()); +} + +//更新信号值与运营商 +void RepairView::UpdateSginandOperate(void) { + + if (signalLabel_ != nullptr) { + //获取信号值 + uint8_t signal = SafeModeManagerModel::GetInstance()->GetSignal(); + std::string signalStr = "Signal: " + std::to_string(signal); + signalLabel_->SetText(signalStr.c_str()); + } + if (operationLabel_ != nullptr) { + //获取运营商 + std::string operate = + "Operation" + SafeModeManagerModel::GetInstance()->GetOperator(); + operationLabel_->SetText(operate.c_str()); + } + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "signalstr: %s, operate:%s", + signalLabel_->GetText(), operationLabel_->GetText()); +} + +//更新下载进度 +void RepairView::UpdateView(int date) { + if (downingLabel_ == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, + "ResourceCheckView::downingLabel_ is null"); + return; + } + //显示下载中 + if (downingLabel_->IsVisible() == false) { + downingLabel_->SetVisible(true); + } + std::string display = "downing"; + //下载文件数 + uint16_t count = SafeModeManagerModel::GetInstance()->GetRepairCount(); + std::string downcount = "down: " + std::to_string(count); + if (downLabel_ != nullptr) + downLabel_->SetText(downcount.c_str()); + // 检查状态并更新提示文本 + if (date >= 0 && date <= 60) { + int progress = date % 4; + display.append(progress, '.'); // 添加进度标记点 + downingLabel_->SetText(display.c_str()); + } else { + switch (date) { + //下载修复文件成功 + case 61: + downingLabel_->SetText("Repair file download success!"); + break; + case -1: + //下载修复文件失败 + downingLabel_->SetText("Repair file download failed!"); + break; + default: + downingLabel_->SetText("Unknown status..."); + break; + } + } +} +} // namespace OHOS + +#endif \ No newline at end of file diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/safemodemanager/src/ResourceCheckAdapter.cpp b/code/sdk/application/wearable/fd230/nativeapp/nativeui/safemodemanager/src/ResourceCheckAdapter.cpp new file mode 100644 index 000000000..cbae43653 --- /dev/null +++ b/code/sdk/application/wearable/fd230/nativeapp/nativeui/safemodemanager/src/ResourceCheckAdapter.cpp @@ -0,0 +1,106 @@ +#if 0 +#include "safemodemanager/include/ResourceCheckItemView.h" +#include "safemodemanager/include/ResourceCheckView.h" +#include "safemodemanager/include/SafeModeManagerModel.h" +#include "safemodemanager/include/SafeModeManagerPresenter.h" + +#include "uicomponents/UIComponents.h" +#include "wearable_log.h" + +namespace OHOS { + +ResourceCheckAdapter::ResourceCheckAdapter() {} + +ResourceCheckAdapter::~ResourceCheckAdapter() { listData.clear(); } + +uint16_t ResourceCheckAdapter::GetCount(void) { return listData.size() + 1; } + +void ResourceCheckAdapter::SetData(std::list &data) { + if (!listData.empty()) { + listData.clear(); + } + for (auto &item : data) { // 使用范围for循环简化代码 + listData.push_back(item); + } +} + +UIView *ResourceCheckAdapter::GetView(UIView *inView, int16_t index) { + // 1.先检查列表数据是否为空,若为空则返回空指针 + if (listData.empty()) { + return nullptr; + } + // 2.接着检查索引是否小于0,若小于0则返回空指针 + if (index < 0) { + return nullptr; + } + // 3.检查是否超出列表数据大小,若超出则返回空指针 + size_t uindex = static_cast(index); // 明确转换为size_t + if (uindex > listData.size()) { + return nullptr; + } + + ResourceCheckItemView *item = nullptr; + if (uindex == listData.size()) { + if (inView == nullptr) { + item = new ResourceCheckItemView(); + } else { + item = static_cast(inView); + item->RemoveAll(); + } + + // Initialize DeleteButton lazily + if (DeleteButton == nullptr) { + DeleteButton = new UILabelButtonExt(); + if (DeleteButton == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "InitButtonExt is error"); + return nullptr; // 内存分配失败,返回nullptr + } + DeleteButton->SetPosition(0, 0); + DeleteButton->Resize(380, 100); + DeleteButton->SetViewId(REPAIR_ALL); + DeleteButton->SetText("repair_all"); + DeleteButton->SetStyle(STYLE_TEXT_FONT, 30); + DeleteButton->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30); + DeleteButton->SetStyle(STYLE_BACKGROUND_COLOR, + Color::Green().full); // 确保设置一个有效的颜色值 + DeleteButton->SetVisible(true); + } + // 设置点击事件监听器 + UIView::OnClickListener *clickListener = (UIView::OnClickListener *) + OHOS::SafeModeManagerPresenter::GetInstance(); + DeleteButton->SetOnClickListener(clickListener); + + item->Add(DeleteButton); + item->SetViewIndex(index); + item->SetOnClickListener(nullptr); + + return item; + } + + // 4.通过迭代器访问列表中指定索引位置的元素 + std::list::iterator it = listData.begin(); + std::advance(it, index); // 使用 std::advance 简化迭代器变动 + ResourceCheckItem itemData = *it; + + // 5.根据传入的 inView 参数处理 + if (inView == nullptr) { + item = new ResourceCheckItemView(); + } else { + item = static_cast(inView); + item->RemoveAll(); + } + item->SetUpChild(); + item->SetItemInfo(itemData); + item->SetViewIndex(index); + item->SetOnClickListener(itemClickListener); + + return item; // 结束 GetView 函数 +} + +void ResourceCheckAdapter::AddListItem(const ResourceCheckItem &item) { + listData.push_back(item); +} + +} // namespace OHOS + +#endif \ No newline at end of file diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/safemodemanager/src/ResourceCheckItemView.cpp b/code/sdk/application/wearable/fd230/nativeapp/nativeui/safemodemanager/src/ResourceCheckItemView.cpp new file mode 100644 index 000000000..789367715 --- /dev/null +++ b/code/sdk/application/wearable/fd230/nativeapp/nativeui/safemodemanager/src/ResourceCheckItemView.cpp @@ -0,0 +1,47 @@ +#if 0 + +#include "safemodemanager/include/ResourceCheckItemView.h" +#include "safemodemanager/include/ResourceCheckAdapter.h" + +namespace OHOS { + +ResourceCheckItemView::ResourceCheckItemView() { + SetPosition(0, 0, 380, 120); + SetStyle(STYLE_BACKGROUND_OPA, 255); + SetStyle(STYLE_BORDER_RADIUS, 20); + SetTouchable(true); +} + +ResourceCheckItemView::~ResourceCheckItemView() { RemoveAll(); } + +void ResourceCheckItemView::SetItemInfo(const ResourceCheckItem itemInfo) { + + sItemInfo = itemInfo; + filenamelabel.SetText(sItemInfo.filename.c_str()); +} +void ResourceCheckItemView::TearDownChild() { + if (!isSetupChild) + return; + + Remove(&filenamelabel); + + isSetupChild = false; +} +void ResourceCheckItemView::SetUpChild() { + if (isSetupChild) + return; + + filenamelabel.SetPosition(0, 0, 380, 120); + filenamelabel.SetTextColor(Color::White()); + filenamelabel.SetFont(GILROY_BOLD_FONT, 30); + filenamelabel.SetLineBreakMode(UILabel::LINE_BREAK_WRAP); + + Add(&filenamelabel); + isSetupChild = false; +} +int ResourceCheckItemView::GetResourceCheckListIndex() { + return sItemInfo.index; +} +} // namespace OHOS + +#endif \ No newline at end of file diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/safemodemanager/src/ResourceCheckView.cpp b/code/sdk/application/wearable/fd230/nativeapp/nativeui/safemodemanager/src/ResourceCheckView.cpp new file mode 100644 index 000000000..12b2d4970 --- /dev/null +++ b/code/sdk/application/wearable/fd230/nativeapp/nativeui/safemodemanager/src/ResourceCheckView.cpp @@ -0,0 +1,242 @@ +#if 0 + +#include "safemodemanager/include/ResourceCheckView.h" +#include "safemodemanager/include/SafeModeManagerModel.h" +#include "safemodemanager/include/SafeModeManagerPresenter.h" + +#include "UiConfig.h" +#include "ui_resource_string.h" +#include "wearable_log.h" + +namespace OHOS { + +// 静态指针,用于获取单例实例 +static ResourceCheckView *g_pResourceCheckView{nullptr}; + +ResourceCheckView::ResourceCheckView() { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, + "ResourceCheckView::ResourceCheckView"); + g_pResourceCheckView = this; // 设置单例指针 +} + +ResourceCheckView::~ResourceCheckView() { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, + "ResourceCheckView::~ResourceCheckView"); + ClearAll(); // 清理资源 + g_pResourceCheckView = nullptr; // 释放单例指针 +} + +ResourceCheckView *ResourceCheckView::GetInstance() { + return g_pResourceCheckView; // 返回单例实例 +} + +void ResourceCheckView::ClearAll() { + + scrollView->RemoveAll(); + FilenameList->RemoveAll(); + + delete notelabel; // 删除提示标签 + notelabel = nullptr; + delete FilenameList; // 删除提示标签 + FilenameList = nullptr; + + delete scrollView; // 删除滚动视图 + scrollView = nullptr; + delete p_ResourceCheckAdapter; + p_ResourceCheckAdapter = nullptr; + g_pResourceCheckView = nullptr; +} + +UIScrollView *ResourceCheckView::ResourceCheckViewInit() { + scrollView = new UIScrollView(); + if (!scrollView) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, + "ResourceCheckView::新建滚动视图失败!"); + return nullptr; // 创建失败,返回空指针 + } + + // 初始化滚动视图属性 + InitScrollView(); + + // 设置拖拽监听器 + UIView::OnDragListener *dragListener = static_cast( + SafeModeManagerPresenter::GetInstance()); + if (!dragListener) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, + "SafeModeManagerPresenter::获取实例失败!"); + return nullptr; // 获取失败,返回空指针 + } + scrollView->SetOnDragListener(dragListener); + + // 初始化提示标签 + InitNoteLabel(); + + // 初始化文件名列表 + InitFilenameList(); + + // 添加视图到滚动视图中 + scrollView->Add(FilenameList); + scrollView->Add(notelabel); + + return scrollView; // 返回初始化后的滚动视图 +} + +void ResourceCheckView::InitScrollView() { + // 设置滚动视图的初始位置和样式 + scrollView->SetPosition(0, 0, Screen::GetInstance().GetWidth(), + Screen::GetInstance().GetHeight()); + scrollView->SetStyle(STYLE_BACKGROUND_OPA, 0xff); + scrollView->SetScrollBlankSize(100); + scrollView->SetMaxScrollDistance(1000); + scrollView->SetThrowDrag(true); + scrollView->SetHorizontalScrollState(false); // 禁止水平滑动 + // scrollView->SetVerticalScrollState(false); // 禁止垂直滑动 +} +void ResourceCheckView::InitNoteLabel() { + notelabel = new UILabel(); + if (!notelabel) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ResourceCheckView::新建标题失败!"); + return; // + } + // 设置标签的基本属性 + notelabel->SetPosition(83, 217); + notelabel->Resize(300, 60); + notelabel->SetViewId(CHECK_FILE_LIST); + notelabel->SetStyle(STYLE_TEXT_FONT, 50); + notelabel->SetText("File verification..."); // 保持为英语 + notelabel->SetLineBreakMode(UILabel::LINE_BREAK_WRAP); + notelabel->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); + notelabel->SetFont(GILROY_BOLD_FONT, 30); + notelabel->SetTouchable(true); + // 设置点击事件监听器 + UIView::OnClickListener *clickListener = + (UIView::OnClickListener *)OHOS::SafeModeManagerPresenter::GetInstance(); + notelabel->SetOnClickListener(clickListener); +} + +void ResourceCheckView::InitFilenameList() { + // 如果适配器未初始化则创建 + if (!p_ResourceCheckAdapter) { + p_ResourceCheckAdapter = new ResourceCheckAdapter(); + } + // 如果文件名列表未初始化则创建 + if (!FilenameList) { + FilenameList = new UIList(); + FilenameList->SetPosition(43, 0, 466, 466); + // FilenameList->SetReboundSize(100); + FilenameList->SetScrollBlankSize(50); + FilenameList->SetThrowDrag(true); + // FilenameList->SetScrollStateListener(this); + FilenameList->SetStyle(STYLE_BACKGROUND_OPA, OPA_TRANSPARENT); + FilenameList->SetMaxScrollDistance(1000); + FilenameList->SetSwipeACCLevel(200); + FilenameList->SetDragACCLevel(5); + FilenameList->SetVisible(false); // 初始隐藏界面 + } +} + +//更新提示语 +void ResourceCheckView::UpdateView(int date) { + if (notelabel == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, + "ResourceCheckView::notelabel is null"); + return; + } + std::string display = "File verification"; + // 检查状态并更新提示文本 + if (date >= 0 && date <= 60) { + int progress = date % 5; + display.append(progress, '.'); // 添加进度标记点 + notelabel->SetText(display.c_str()); + } else { + // 处理特定状态 + switch (date) { + case 61: + notelabel->SetText("File verification is ok..."); + break; + case -1: + //校验文件缺少 + notelabel->SetText("File verification is not exsist..."); + break; + case -2: + //校验文件失败 + notelabel->SetText("File verification is failed..."); + break; + default: + notelabel->SetText("Unknown status..."); + break; + } + } +} + +void ResourceCheckView::UpdateView() { + printf("开始显示验证结果。\r\n"); + // 读取文件检查结果 + if (SafeModeManagerModel::GetInstance()->ReadCheckFile()) { + std::vector filenames = + SafeModeManagerModel::GetInstance()->GetCheckDifferentialFiles(); + int num = SafeModeManagerModel::GetInstance()->GetCheckFileCount(); + std::string allFilenames = + "This verification result is successful. Number of verified files: " + + std::to_string(num) + ". Please click the screen to view the data."; + + notelabel->SetText(allFilenames.c_str()); + printf("验证的文件数量为 %d\r\n", num); + if (num != 0) { + SafeModeManagerModel::GetInstance()->SetState(Safe_State::RESOURCE_CHECK, + true); + } + } else { + notelabel->SetText("File verification is the same."); // 保持为英语 + SafeModeManagerModel::GetInstance()->SetState(Safe_State::RESOURCE_CHECK, + false); + printf("验证结果为失败。\r\n"); + } + printf("验证结果已完成。\r\n"); +} + +void ResourceCheckView::AddFilenameToList(const ResourceCheckItem &item) { + p_ResourceCheckAdapter->AddListItem(item); +} + +void ResourceCheckView::SetViewState() { + //检查组件状态 + if (notelabel == nullptr || FilenameList == nullptr) + return; + + int filenums = SafeModeManagerModel::GetInstance()->GetCheckFileCount(); + bool check_state = + SafeModeManagerModel::GetInstance()->IsState(Safe_State::RESOURCE_CHECK); + printf("filenums %d check_state %d \r\n", filenums, check_state); + /* + 检查校验文件数量以及校验状态 + 如果校验是成功的话,则显示文件名列表 + 如果校验失败的话,则显示提示标签 + 校验成功之后,隐藏了提示标签则不能再次点击 + */ + if (filenums != 0 && check_state) { + notelabel->SetVisible(false); // 隐藏提示标签 + FilenameList->SetVisible(true); // 显示文件名列表 + SafeModeManagerModel *p_SafeModeManagerModel = + SafeModeManagerModel::GetInstance(); + if (!p_SafeModeManagerModel) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "p_SafeModeManagerModel fail"); + return; // + } + // 加载消息列表 + p_SafeModeManagerModel->InitFilenamesListItems(); + const ResourceCheckItem *itemInfo = + p_SafeModeManagerModel->GetFilenamesListItems(); + int count = p_SafeModeManagerModel->GetFilenamesCount(); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "count %d", count); + for (int i = 0; i < count; i++) { + AddFilenameToList(itemInfo[i]); // 将消息添加到视图中 + } + // 设置适配器 + FilenameList->SetAdapter(p_ResourceCheckAdapter); + } +} + +} // namespace OHOS + +#endif \ No newline at end of file diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/safemodemanager/src/SafeModeManagerModel.cpp b/code/sdk/application/wearable/fd230/nativeapp/nativeui/safemodemanager/src/SafeModeManagerModel.cpp new file mode 100644 index 000000000..bc7cfd691 --- /dev/null +++ b/code/sdk/application/wearable/fd230/nativeapp/nativeui/safemodemanager/src/SafeModeManagerModel.cpp @@ -0,0 +1,455 @@ +#if 0 +#include +#include +#include +#include +#include +#include +#include + +#include "safemodemanager/include/RepairView.h" +#include "safemodemanager/include/ResourceCheckView.h" +#include "safemodemanager/include/SafeModeManagerModel.h" +#include "safemodemanager/include/SafeModeManagerModelC.h" +#include "safemodemanager/include/SafeModeManagerView.h" + +#include "broadcast_feature.h" +#include "broadcast_service.h" +#include "cat1_ctl.h" +#include "cat1_server.h" +#include "custom_runtime.h" +#include "custom_utils.h" +#include "graphic_service.h" +#include "iostream" +#include "lwip/apps/http_client.h" +#include "string" +#include "tcxo.h" +#include "thread_adapter.h" +#include "thread_init.h" +#include "ui_resource_string.h" +#include "wearable_log.h" +#include +#include +#include +#include + +extern "C" { +// #include "build_version.h" +// const char *get_version_string(void); + +#include "battery_hal.h" +#include "build_version.h" +extern uint8_t battery_get_voltage(float *voltage); +// const char *get_version_string(void); + +bool resfile_checksum_thread(void); +} + +static const char *CHECK_DIFFERENTIAL_FILE = "/user/check_differential.txt"; + +void repair_file_start() { + OHOS::SafeModeManagerModel::GetInstance()->RepairStart(); +} + +namespace OHOS { + +SafeModeManagerModel *SafeModeManagerModel::GetInstance(void) { + static SafeModeManagerModel instance; + return &instance; +} + +extern "C" { + +#include "custom_http_download.h" +errcode_t http_single_download_stop(void); +static bool download_repair_file(const char *uristr); + +static uint32_t file_total_len = 0; +static void httpc_download_result(void *arg, httpc_result_t httpc_result, + u32_t rx_content_len, u32_t srv_res, + err_t err) { + printf("httpc_download_result , httpc_result_t %d, rx_content_len %d , " + "srv_res %d, err %d\n", + httpc_result, rx_content_len, srv_res, err); + if (httpc_result == HTTPC_RESULT_OK) { + OHOS::SafeModeManagerModel::GetInstance()->AddRepairCount(); + //发消息进行重新开始 + do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_DOWNLOAD_RES, nullptr, 0); + } else { + //结束 + OHOS::SafeModeManagerModel::GetInstance()->RepairEnd(); + } + http_single_download_stop(); + file_total_len = 0; + return; +} +static err_t httpc_download_headers_done(httpc_state_t *connection, void *arg, + struct pbuf *hdr, u16_t hdr_len, + u32_t content_len) { + printf("httpc_download_headers_done , hdr_len %d ,content_len %d\n", hdr_len, + content_len); + file_total_len = content_len; + return 0; +} +static err_t httpc_download_file_recv_ui(httpc_state_t *connection, + u32_t rx_len, u32_t rx_total_len) { + printf("httpc_download_file_recv_ui recv %d bytes total received %d " + "filelen %d\r\n", + rx_len, rx_total_len, file_total_len); + return 0; +} + +// uir: +// http://snicker.com.cn:8089/FD230/V1.1.49/user/res/font_bin/ja.bin +// 服务器:snicker.com.cn:8089 +// 端口:8089 +// 保存路径:/user/res/settings/SETTINGS_SAVEELE.bin +// 下载文件 +static char *my_strndup(const char *s, size_t n) { + char *p = new char[n + 1]; + if (p) { + strncpy(p, s, n); + p[n] = '\0'; + } + return p; +} + +static bool download_repair_file(const char *uristr) { + if (!uristr) { + printf("Error: No repair URL provided.\r\n"); + return false; + } + + char *server = NULL; + uint16_t port = 0; + char *uri = NULL; + char *filepath = NULL; + + // 解析 uristr + const char *pos = strstr(uristr, "://"); + if (pos == NULL) { + printf("Error: Invalid URL format.\r\n"); + return false; + } + + pos += 3; // 跳过 "://" + const char *port_pos = strchr(pos, ':'); + const char *uri_pos = strchr(pos, '/'); + + if (port_pos && uri_pos) { + server = my_strndup(pos, port_pos - pos); + port = (uint16_t)atoi(port_pos + 1); + uri = strdup(uristr); + } else { + printf("Error: Missing URI in the URL.\r\n"); + return false; + } + + if (!server || !uri) { + printf("Error: Failed to allocate memory for server or uri.\r\n"); + delete[] server; + delete[] uri; + return false; + } + + // 查找以 'V' 开头的版本号 + const char *version_pos = strstr(uri, "/V"); + if (version_pos) { + const char *first_slash_after_v = strchr(version_pos + 2, '/'); + if (first_slash_after_v) { + filepath = + my_strndup(first_slash_after_v + 1, strlen(first_slash_after_v + 1)); + } else { + filepath = strdup(""); + } + } else { + filepath = strdup(""); + } + + // 打印解析结果 + printf("download_repair_file called with parameters:\n"); + printf(" Server: %s\n", server); + printf(" Port: %d\n", port); + printf(" URI: %s\n", uri); + printf(" Filepath: %s\n", filepath); + + // // 拼接服务器域名 + // size_t server_with_port_len = strlen(server) + 6; // + // 考虑端口号长度加上分隔符长度 char *server_with_port = new + // char[server_with_port_len]; snprintf(server_with_port, + // server_with_port_len, "%s:%d", server, port); + + // 通讯开始,唤醒 cat1 + uapi_cat1_keep_wakeup(1); + // 开始下载 + errcode_t rett = http_single_download_start( + (uint8_t *)server, port, (uint8_t *)uri, (uint8_t *)filepath, + httpc_download_result, httpc_download_headers_done, + httpc_download_file_recv_ui); + printf("download_repair_file: %d \r\n", rett); + + // 释放内存 + delete[] server; + delete[] uri; + delete[] filepath; + if (rett != ERRCODE_SUCC) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "download_repair_file: %d \r\n", + rett); + return false; + } + + return true; +} +} +/* ---------------------------------- map修改 --------------------------------- + */ +/*显示状态map*/ +std::array safestateInfo = {{ + {Safe_State::BLE_OTA, false}, + {Safe_State::AUTO_OTA, false}, + {Safe_State::FACTORY_RESET, false}, + {Safe_State::RESOURCE_CHECK, false}, + {Safe_State::REPAIR_FILE, false}, +}}; +//设置某个配置状态 +void SafeModeManagerModel::SetState(Safe_State state, bool executeAction) { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SetState: %d", state); + //将状态赋值 + int stateIndex = static_cast(state); + if (stateIndex > 0 && stateIndex < SAFE_STATE_COUNT) { + //检查状态是否一致 + if (safestateInfo[stateIndex].active != executeAction) { + safestateInfo[stateIndex].active = executeAction; + safestateInfo[stateIndex].state = state; + } else { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "state is same"); + } + } else { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "state is invalid"); + } +} +//获取某个配置状态 +bool SafeModeManagerModel::IsState(Safe_State state) const { + int stateIndex = static_cast(state); + if (stateIndex > 0 && stateIndex < SAFE_STATE_COUNT) { + return safestateInfo[stateIndex].active; + } else { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "state is invalid"); + return false; + } +} +//打印所有配置状态 +void SafeModeManagerModel::PrintState() const { + for (int i = 0; i < SAFE_STATE_COUNT; i++) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "state[%d]: %d", i, + safestateInfo[i].active); + } +} +/* --------------------------------- 恢复出厂相关 + * --------------------------------- */ +// 恢复出厂 +bool SafeModeManagerModel::FactorySet() { + do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_TYPE_RESTORE_FACTORY_SETTING, + nullptr, 0); + return true; +} + +/*-----------------------------资源校验相关-----------------------------*/ +// 资源校验 +bool SafeModeManagerModel::ResourceCheck() { + do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_CHECK_RES, nullptr, 0); + return true; +} + +// 进行文件读取 +bool SafeModeManagerModel::ReadCheckFile() { + resource_check_files.clear(); // 清空数组原内容 + std::ifstream infile(CHECK_DIFFERENTIAL_FILE); // 打开差异文件 + + if (!infile.is_open()) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "无法打开文件: %s", + CHECK_DIFFERENTIAL_FILE); + return false; + } + + std::string filename; + while (std::getline(infile, filename)) { // 逐行读取文件 + if (!filename.empty()) { // 确保文件名不为空 + resource_check_files.push_back(filename); // 将文件名添加到向量中 + } + } + + infile.close(); // 关闭文件 + return true; +} +// 获取校验状态 +bool SafeModeManagerModel::GetResourceCheckState() const { + return resource_check_state; +} +// 设置校验状态 +void SafeModeManagerModel::SetResourceCheckState(bool state) { + resource_check_state = state; +} +// 获取校验数组 +const std::vector & +SafeModeManagerModel::GetCheckDifferentialFiles() const { + return resource_check_files; // 返回资源检查文件列表 +} +// 获取文件个数 +size_t SafeModeManagerModel::GetCheckFileCount() const { + return resource_check_files.size(); // 返回文件个数 +} +// 更新文件校对界面 +void SafeModeManagerModel::UpdateCheckView(int date) { + auto safeModeView = SafeModeManagerView::GetInstance(); + if (safeModeView != nullptr) { + auto resourceCheckView = ResourceCheckView::GetInstance(); + if (safeModeView->GetSafeScrollView(VIEW_RESOURCE_CHECK) != nullptr) { + resourceCheckView->UpdateView(date); + if (date == 61) { + LOS_Msleep(1000); // 暂停1秒 + resourceCheckView->UpdateView(); + } + } + } +} + +/* --------------------------------- 配置列表相关 + * --------------------------------- */ +// 初始化消息列表项 +void SafeModeManagerModel::InitFilenamesListItems() { + numberOfItems = resource_check_files.size(); // 获取大小 + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "numberOfItems: %d", numberOfItems); + + for (size_t i = 0; i < numberOfItems && i < MAX_RESOURCE_CHECK_FILE_NUM; + i++) { + Filenames[i] = {static_cast(i), resource_check_files[i].c_str()}; + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Filenames[%d].filename: %s", i, + Filenames[i].filename); + } +} +// 获取消息列表项 +const ResourceCheckItem *SafeModeManagerModel::GetFilenamesListItems() const { + return Filenames; +} +// 获取消息数量 +uint16_t SafeModeManagerModel::GetFilenamesCount() const { + return numberOfItems; +} + +/* ---------------------------------- 下载修复文件 + * ---------------------------------- */ +//下载数 +uint16_t SafeModeManagerModel::GetRepairCount() const { return repair_count; } +void SafeModeManagerModel::SetRepairCount(uint16_t count) { + repair_count = count; +} +//获取版本号 +std::string SafeModeManagerModel::GetVersion() const { + std::string version = std::string("V") + get_version_string(); + return version; +} +//增加下载数 +void SafeModeManagerModel::AddRepairCount() { repair_count++; } +//获取信号值sign +uint8_t SafeModeManagerModel::GetSignal() const { + return uapi_dev_runtime_get_cat1_signal(); +} +//获取运营商 +std::string SafeModeManagerModel::GetOperator() const { + std::string operator_name = uapi_dev_runtime_get_cat1_operator(); + return operator_name; +} +/*获取下载http地址 + http://snicker.com.cn:8089/FD230/V1.1.14_20240706_182936_CT/filename +*/ +std::string SafeModeManagerModel::GetRepairUrl() const { + std::string filename = GetFilenamesListItems()[repair_count].filename; + std::string url = + "http://snicker.com.cn:8089/FD230/" + GetVersion() + filename; + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GetRepairUrl url: %s", url.c_str()); + return url; +} +//控制cat1 +void SafeModeManagerModel::uapi_cat1_wakeup_cat1(bool wakeupstate) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "wakeupstate: %d", wakeupstate); + uapi_set4GCapability(wakeupstate); + return; +} +//开始修复 +bool SafeModeManagerModel::RepairStart() { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Repair"); + if (download_repair_file(GetRepairUrl().c_str()) == false) { + RepairEnd(); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RepairEnd"); + return false; + } + return true; +} +// 0.下载失败 +// 1.下载成功 +bool SafeModeManagerModel::RepairEnd() { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RepairEnd"); + if (GetRepairCount() != GetFilenamesCount()) { + //下载失败 + SetState(Safe_State::REPAIR_FILE, false); + http_single_download_stop(); + uapi_dev_runtime_set_repair_download_status(3); + return false; + } else { + //下载成功 + SetState(Safe_State::REPAIR_FILE, true); + uapi_dev_runtime_set_repair_download_status(2); + } + repair_count = 0; + return true; +} +// 更新文件下载 +void SafeModeManagerModel::UpdateRepairView(int date) { + auto safeModeView = SafeModeManagerView::GetInstance(); + if (safeModeView != nullptr) { + auto RepairView = RepairView::GetInstance(); + if (safeModeView->GetSafeScrollView(VIEW_REPAIR_FILE) != nullptr) { + RepairView->UpdateView(date); + } + } +} +//更新信号与运营商 +void SafeModeManagerModel::UpdateSginOperate() { + auto safeModeView = SafeModeManagerView::GetInstance(); + if (safeModeView != nullptr) { + auto RepairView = RepairView::GetInstance(); + if (safeModeView->GetSafeScrollView(VIEW_REPAIR_FILE) != nullptr) { + RepairView->UpdateSginandOperate(); + } + } +} + +//手表信息 +std::string SafeModeManagerModel::get_voltage_and_version_string(void) { + // 电量 + float voltage = 0.0F; + uint8_t value = battery_get_voltage(&voltage); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "battery_get_voltage = %d", value); + + // 版本号 + std::string version_string = + std::string("V") + get_version_string(); // 修正字符串拼接 + + // 拼接字符串 + std::ostringstream oss; + oss << "bat: " << static_cast(value) << "% " << version_string; + + return oss.str(); +} + +// 蓝牙名称 +std::string SafeModeManagerModel::get_bluetooth_name(void) { + uint8_t ble_name[30] = {0}; + uint32_t ble_name_len = sizeof(ble_name); + errcode_t ret = uapi_get_nv_btname(ble_name, &ble_name_len); + + return std::string(reinterpret_cast(ble_name)); +} +} // namespace OHOS +#endif \ No newline at end of file diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/safemodemanager/src/SafeModeManagerPresenter.cpp b/code/sdk/application/wearable/fd230/nativeapp/nativeui/safemodemanager/src/SafeModeManagerPresenter.cpp new file mode 100644 index 000000000..7890a98ec --- /dev/null +++ b/code/sdk/application/wearable/fd230/nativeapp/nativeui/safemodemanager/src/SafeModeManagerPresenter.cpp @@ -0,0 +1,278 @@ +#if 0 +#include "AppViewIDs.h" +#include "KeyInputListener.h" +#include "NativeAbility.h" +#include "common/key_code.h" +#include "components/ui_label_ext.h" +#include "custom_utils.h" +#include "ui_resource_string.h" + +#include "broadcast_service.h" + +#include "custom_runtime.h" +#include "custom_utils.h" +#include "gfx_utils/mem_check.h" +#include "graphic_service.h" +#include "safemodemanager/include/SafeModeManagerModel.h" +#include "safemodemanager/include/SafeModeManagerPresenter.h" +namespace OHOS { + +// 当前Presenter属性实例化的内存指针 +static SafeModeManagerPresenter *g_pSafeModeManagerPresenter = nullptr; +SafeModeManagerPresenter::SafeModeManagerPresenter() { + // 设置常亮 + ScreenAlwaysOnCtr(0); + ScreenAlwaysOnCtr(1); + + g_pSafeModeManagerPresenter = this; +} + +SafeModeManagerPresenter::~SafeModeManagerPresenter() { + + g_pSafeModeManagerPresenter = nullptr; +} + +SafeModeManagerPresenter *SafeModeManagerPresenter::GetInstance() { + + return g_pSafeModeManagerPresenter; +} + +void SafeModeManagerPresenter::OnStart() { + + Presenter::OnStart(); +} + +void SafeModeManagerPresenter::OnPause(void) { + + Presenter::OnPause(); +} + +void SafeModeManagerPresenter::OnResume(void) { + + Presenter::OnResume(); +} + +void SafeModeManagerPresenter::OnStop(void) { + + Presenter::OnStop(); +} + +bool SafeModeManagerPresenter::OnDrag(UIView &view, const DragEvent &event) { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SafeModeManagerPresenter::OnDrag"); + SafeModeManagerView *p_SafeModeManagerView = + SafeModeManagerView::GetInstance(); + if (p_SafeModeManagerView == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, + " SafeModeManagerView::GetInstance fail!"); + return false; + } + if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT && + (event.GetDeltaX() > 20) && + (event.GetDeltaX() > (2 * MATH_ABS(event.GetDeltaY())))) { + if (&view == + p_SafeModeManagerView->GetSafeScrollView(VIEW_RESOURCE_CHECK)) { + p_SafeModeManagerView->ChangeView(VIEW_RESOURCE_CHECK, VIEW_SAFE_LIST); + } + if (&view == p_SafeModeManagerView->GetSafeScrollView(VIEW_REPAIR_FILE)) { + p_SafeModeManagerView->ChangeView(VIEW_REPAIR_FILE, VIEW_RESOURCE_CHECK); + } + } + return true; +} + +bool SafeModeManagerPresenter::OnClick(UIView &view, const ClickEvent &event) { + + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SafeModeManagerPresenter::OnClick %s", + view.GetViewId()); + SafeModeManagerView *p_SafeModeManagerView = + SafeModeManagerView::GetInstance(); + if (p_SafeModeManagerView == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, + " SafeModeManagerView::GetInstance fail!"); + return false; + } + + if (strcmp(view.GetViewId(), BLE_OTA) == 0) { + /*蓝牙ota*/ + } + if (strcmp(view.GetViewId(), AUTO_OTA) == 0) { + /*auto ota*/ + static int sppinit=0; + if (sppinit == 0) + { + //BtInitSpp(); + + sppinit = 1; + } + } + if (strcmp(view.GetViewId(), FACTORY_RESET_SAFE) == 0) { + /*恢复出厂*/ + SafeModeManagerModel::GetInstance()->FactorySet(); + } + if (strcmp(view.GetViewId(), RESOURCE_CHECK) == 0) { + /*资源校验*/ + p_SafeModeManagerView->ChangeView(VIEW_SAFE_LIST, VIEW_RESOURCE_CHECK); + if (SafeModeManagerModel::GetInstance()->IsState( + Safe_State::RESOURCE_CHECK) == false) { + SafeModeManagerModel::GetInstance()->ResourceCheck(); + } + } + if (strcmp(view.GetViewId(), RE_START) == 0) { + /*重启*/ + uapi_reboot_device(); // 重启 + } + //点击查看列表 + if (strcmp(view.GetViewId(), CHECK_FILE_LIST) == 0) { + if (SafeModeManagerModel::GetInstance()->IsState( + Safe_State::RESOURCE_CHECK) == true) { + ResourceCheckView::GetInstance()->SetViewState(); + } + } + // 点击修复 + if (strcmp(view.GetViewId(), REPAIR_ALL) == 0) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, + "SafeModeManagerPresenter::OnClick REPAIR_ALL"); + /*修复 */ + p_SafeModeManagerView->ChangeView(VIEW_RESOURCE_CHECK, VIEW_REPAIR_FILE); + } + //点击下载修复文件 + if (strcmp(view.GetViewId(), REPAIR_FILE_START) == 0) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, + "SafeModeManagerPresenter::OnClick REPAIR_FILE_START"); + if (SafeModeManagerModel::GetInstance()->IsState(Safe_State::REPAIR_FILE) == + false && + uapi_dev_runtime_get_repair_download_status() == 0) { + //将状态置为正在下载 + uapi_dev_runtime_set_repair_download_status(1); + //开始修复 + SafeModeManagerModel::GetInstance()->RepairStart(); + } + } + //点击唤醒cat1 + if (strcmp(view.GetViewId(), WAKE_UP) == 0) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, + "SafeModeManagerPresenter::OnClick WAKE_CAT1"); + // 唤醒cat1 + SafeModeManagerModel::GetInstance()->uapi_cat1_wakeup_cat1(true); + } + return true; +} + +// 安全模式界面定时器 +void SafeModeManagerPresenter::OnTickEvent() { + // 开始校验文件 + uint8_t check_state = uapi_dev_runtime_get_checkres_status(); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, + "SafeModeManagerPresenter::OnTickEvent %d", check_state); + switch (check_state) { + case CHECKING: { + // 处理正在校验的状态 + time_t t = time(NULL); + tm curTime = *localtime(&t); + GraphicService::GetInstance()->PostGraphicEvent( + std::bind(&OHOS::SafeModeManagerModel::UpdateCheckView, + OHOS::SafeModeManagerModel::GetInstance(), curTime.tm_sec)); + break; + } + case CHECK_SUCCESS: { + // 校验成功 + GraphicService::GetInstance()->PostGraphicEvent( + std::bind(&OHOS::SafeModeManagerModel::UpdateCheckView, + OHOS::SafeModeManagerModel::GetInstance(), 61)); + // 状态归位 + uapi_dev_runtime_set_checkres_status(NO_OPERATION); + break; + } + case FILE_NOT_FOUND: { + // 校验失败: 文件不存在 + GraphicService::GetInstance()->PostGraphicEvent( + std::bind(&OHOS::SafeModeManagerModel::UpdateCheckView, + OHOS::SafeModeManagerModel::GetInstance(), -1)); + uapi_dev_runtime_set_checkres_status(NO_OPERATION); + break; + } + case FILE_CORRUPTED: { + // 校验失败: 文件损坏 + GraphicService::GetInstance()->PostGraphicEvent( + std::bind(&OHOS::SafeModeManagerModel::UpdateCheckView, + OHOS::SafeModeManagerModel::GetInstance(), -2)); + uapi_dev_runtime_set_checkres_status(NO_OPERATION); + break; + } + default: + break; + } + + //下载状态 + uint8_t download_state = uapi_dev_runtime_get_repair_download_status(); + + //如果下载数等于总数 -> 下载成功 + if (SafeModeManagerModel::GetInstance()->GetRepairCount() == + SafeModeManagerModel::GetInstance()->GetCheckFileCount() && + download_state == 1) { + // 下载完成 标志位设置为 2 + download_state = 2; + SafeModeManagerModel::GetInstance()->RepairEnd(); + } + + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "download state %d", download_state); + switch (download_state) { + case 1: + //下载中 + { + time_t t = time(NULL); + tm curTime = *localtime(&t); + GraphicService::GetInstance()->PostGraphicEvent( + std::bind(&OHOS::SafeModeManagerModel::UpdateRepairView, + OHOS::SafeModeManagerModel::GetInstance(), curTime.tm_sec)); + } + break; + case 2: + //下载成功 + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "download success"); + GraphicService::GetInstance()->PostGraphicEvent( + std::bind(&OHOS::SafeModeManagerModel::UpdateRepairView, + OHOS::SafeModeManagerModel::GetInstance(), 61)); + uapi_dev_runtime_set_repair_download_status(0); + } + break; + case 3: + //下载失败 + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "download failed"); + GraphicService::GetInstance()->PostGraphicEvent( + std::bind(&OHOS::SafeModeManagerModel::UpdateRepairView, + OHOS::SafeModeManagerModel::GetInstance(), -1)); + uapi_dev_runtime_set_repair_download_status(0); + } + break; + default: + break; + } + //处于修复界面,更新信号 + SafeModeManagerView *p_SafeModeManagerView = + SafeModeManagerView::GetInstance(); + if (p_SafeModeManagerView == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, + " SafeModeManagerView::GetInstance fail!"); + return; + } + if (p_SafeModeManagerView->GetSafeScrollView(VIEW_REPAIR_FILE)->IsVisible()) { + GraphicService::GetInstance()->PostGraphicEvent( + std::bind(&OHOS::SafeModeManagerModel::UpdateSginOperate, + OHOS::SafeModeManagerModel::GetInstance())); + } +} +bool SafeModeManagerPresenter::OnKeyAct(UIView &view, const KeyEvent &event) { + unsigned short keyID = event.GetKeyId(); + unsigned short keyState = event.GetState(); + // 如果是power键,且是亮屏状态,按键释放就返回上一级 + if (keyID == static_cast(ZliteKeyCode::ZLITE_KEY_POWER) && + keyState == 1 && uapi_get_screen_state() == 0) { + // NativeAbility::GetInstance().Back(); + } + return true; +} +} // namespace OHOS +#endif \ No newline at end of file diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/safemodemanager/src/SafeModeManagerView.cpp b/code/sdk/application/wearable/fd230/nativeapp/nativeui/safemodemanager/src/SafeModeManagerView.cpp new file mode 100644 index 000000000..a3f9001b0 --- /dev/null +++ b/code/sdk/application/wearable/fd230/nativeapp/nativeui/safemodemanager/src/SafeModeManagerView.cpp @@ -0,0 +1,378 @@ +#if 0 +#include "safemodemanager/include/SafeModeManagerView.h" +#include "safemodemanager/include/RepairView.h" +#include "safemodemanager/include/ResourceCheckView.h" +#include "safemodemanager/include/SafeModeManagerModel.h" +#include "safemodemanager/include/SafeModeManagerPresenter.h" + +#include "UiConfig.h" +#include "common/image_cache_manager.h" +#include "components/ui_button.h" +#include "components/ui_scroll_view.h" +#include "custom_utils.h" +#include "ui_resource_image.h" +#include "ui_resource_string.h" +#include "uicomponents/UIComponents.h" +#include + +extern "C" bool resfile_checksum_thread(void); +extern "C" void uapi_enter_power_saving_mode(void); +namespace OHOS { + +static SafeModeManagerView *g_pSafeModeManagerView{nullptr}; +static const uint32_t BACK_GROUND_COLOR = 0xfff6f6f6; + +SafeModeManagerView::SafeModeManagerView() { + // /*开启省电模式*/ + // uapi_enter_power_saving_mode(); + g_pSafeModeManagerView = this; +} + +SafeModeManagerView::~SafeModeManagerView() { + /*删除变量*/ + + container_->RemoveAll(); + + delete p_BleOTAView; + p_BleOTAView = nullptr; + delete p_AutoOTAView; + p_AutoOTAView = nullptr; + delete p_FactoryView; + p_FactoryView = nullptr; + delete p_ResourceCheckView; + p_ResourceCheckView = nullptr; + delete p_RepairView; + p_RepairView = nullptr; + for (int i = VIEW_SAFE_LIST; i < MAX_VIEW_ID; i++) { + SafeModeScrollView[i] = nullptr; + } + + UIViewGroup *tmpGroup = dynamic_cast(container_); + UIViewGroup::RemoveAndDeleteAllRecursively(tmpGroup); + + g_pSafeModeManagerView = nullptr; +} + +SafeModeManagerView *SafeModeManagerView::GetInstance() { + return g_pSafeModeManagerView; +} + +void SafeModeManagerView::InitView() { + // 初始化 SafeModeScrollView + if (SafeModeScrollView[VIEW_SAFE_LIST] == nullptr) { + SafeModeScrollView[VIEW_SAFE_LIST] = new UIScrollView(); + if (SafeModeScrollView[VIEW_SAFE_LIST] == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, + "SafeModeScrollView[VIEW_SAFE_LIST] new fail"); + return; + } + SafeModeScrollView[VIEW_SAFE_LIST]->SetScrollBlankSize(35); + SafeModeScrollView[VIEW_SAFE_LIST]->SetReboundSize(50); + SafeModeScrollView[VIEW_SAFE_LIST]->SetPosition( + 0, 0, Screen::GetInstance().GetWidth(), + Screen::GetInstance().GetHeight()); + SafeModeScrollView[VIEW_SAFE_LIST]->SetHorizontalScrollState(false); + SafeModeScrollView[VIEW_SAFE_LIST]->SetOnDragListener(presenter_); + SafeModeScrollView[VIEW_SAFE_LIST]->SetTouchable(true); + SafeModeScrollView[VIEW_SAFE_LIST]->SetDraggable(true); + SafeModeScrollView[VIEW_SAFE_LIST]->SetStyle(STYLE_BACKGROUND_COLOR, + Color::Black().full); + SafeModeScrollView[VIEW_SAFE_LIST]->SetStyle(STYLE_BACKGROUND_OPA, 0xff); + } + + // 初始化标题 + labelTitle_.SetPosition(83, 50, 300, 60); + labelTitle_.SetFont(GILROY_BOLD_FONT, 30); + labelTitle_.SetText("Safe Mode"); + labelTitle_.SetLineBreakMode(UILabel::LINE_BREAK_ELLIPSIS); + labelTitle_.SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); + SafeModeScrollView[VIEW_SAFE_LIST]->Add(&labelTitle_); + + // 初始化信息标签 + std::string infostr = + SafeModeManagerModel::GetInstance()->get_voltage_and_version_string() + + "\n" + SafeModeManagerModel::GetInstance()->get_bluetooth_name(); + labelInfo_.SetPosition(43, 100, 380, 60); + labelInfo_.SetFont(GILROY_BOLD_FONT, 26); + labelInfo_.SetText(infostr.c_str()); + labelInfo_.SetLineBreakMode(UILabel::LINE_BREAK_WRAP); + labelInfo_.SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); + SafeModeScrollView[VIEW_SAFE_LIST]->Add(&labelInfo_); + + // 定义安全视图项 + SafeViewItem safeItems[] = { + {{&backgroundBLE_, {43, 120}}, + {&btnBLE_, {245, 120}, BLE_OTA}, + {&labelBLEStatus_, "BLE OTA", {90, 153}}}, + // {{&backgroundAutoOTA_, {43, 0}}, + // {&btnAutoOTA_, {245, 0}, AUTO_OTA}, + // {&labelAutoOTAStatus_, "Auto OTA", {90, 0}}}, + {{&backgroundFactoryReset_, {43, 0}}, + {&btnFactoryReset_, {245, 0}, FACTORY_RESET_SAFE}, + {&labelFactoryResetStatus_, "Factory Reset", {90, 0}}}, + {{&backgroundResourceCheck_, {43, 0}}, + {&btnResourceCheck_, {245, 0}, RESOURCE_CHECK}, + {&labelResourceCheckStatus_, "Resource Check", {90, 0}}}, + {{&backgroundRestart_, {43, 0}}, + {&btnRestart_, {245, 0}, RE_START}, + {&labelRestart_, "Restart", {90, 0}}}}; + + // 初始 Y 坐标 + int initialY = 180; + int itemHeight = 120; // 每个 item 的高度,包括背景和按钮的高度 + + // 遍历安全视图项并设置UI元素 + for (const auto &item : safeItems) { + // 设置背景 + item.background.background->SetPosition(item.background.position.x, + initialY, 380, 100); + item.background.background->SetStyle(STYLE_BACKGROUND_COLOR, 0xff191919); + item.background.background->SetStyle(STYLE_BACKGROUND_OPA, 0xff); + item.background.background->SetStyle(STYLE_BORDER_RADIUS, 100); + SafeModeScrollView[VIEW_SAFE_LIST]->Add(item.background.background); + + // 设置状态标签 + item.statusLabel.label->SetPosition(item.statusLabel.position.x, + initialY + 33, 200, 60); + item.statusLabel.label->SetFont(GILROY_BOLD_FONT, 30); + item.statusLabel.label->SetText(item.statusLabel.text.c_str()); + if (item.statusLabel.text == "Resource Check") { + item.statusLabel.label->SetLineBreakMode(UILabel::LINE_BREAK_MARQUEE); + item.statusLabel.label->SetAlign(TEXT_ALIGNMENT_CENTER); + item.statusLabel.label->SetRollSpeed(23); + } + SafeModeScrollView[VIEW_SAFE_LIST]->Add(item.statusLabel.label); + + // 设置按钮 + item.button.button->SetPosition(item.button.position.x, initialY, 200, 100); + item.button.button->SetViewId(item.button.viewId); + item.button.button->SetOnClickListener(presenter_); + SafeModeScrollView[VIEW_SAFE_LIST]->Add(item.button.button); + + // 更新 Y 坐标 + initialY += itemHeight; + } +} +/* -------------------------------------------------------------------------- */ +// 主视图 +bool SafeModeManagerView::ChangeToSafeModelistView(int16_t thisView) { + if (SafeModeScrollView[thisView] == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, + "SafeModeManagerView::ChangeToSafeModelistView"); + container_->Add(SafeModeScrollView[thisView]); + } + return true; +} + +// BleOTA +bool SafeModeManagerView::ChangeToBleOTAView(int16_t thisView) { + if (SafeModeScrollView[thisView] == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, + "SafeModeManagerView::ChangeToBleOTAView"); +#if 0 + p_BleOTAView = new SystemAboutTheWatchView(); + if (p_BleOTAView == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SafeModeManagerView:: new scrollView[%d] fail", thisView); + return false; + } + SafeModeScrollView[thisView] = p_BleOTAView->SystemAbouTheWatchtInitIView(); + container_->Add(SafeModeScrollView[thisView]); +#endif + } + return true; +} + +// 自动OTA +bool SafeModeManagerView::ChangeToAutoOTAView(int16_t thisView) { + if (SafeModeScrollView[thisView] == nullptr) { +#if 0 + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SafeModeManagerView::ChangeToAutoOTAView"); + p_AutoOTAView = new SystemFactoryResetView(); + if (p_AutoOTAView == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SafeModeManagerView:: new scrollView[%d] fail", thisView); + return false; + } + SafeModeScrollView[thisView] = p_AutoOTAView->SystemFactoryResetViewInit(); + container_->Add(SafeModeScrollView[thisView]); +#endif + } + return true; +} + +// 恢复出厂 +bool SafeModeManagerView::ChangeToFactoryView(int16_t thisView) { + if (SafeModeScrollView[thisView] == nullptr) { +#if 0 + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SafeModeManagerView::ChangeToFactoryView"); + p_FactoryView = new SystemRestart(); + if (p_FactoryView == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SafeModeManagerView:: new scrollView[%d] fail", thisView); + return false; + } + SafeModeScrollView[thisView] = p_FactoryView->SystemRestartViewInit(); + container_->Add(SafeModeScrollView[thisView]); +#endif + } + return true; +} + +// 资源校验 +bool SafeModeManagerView::ChangeToResourceCheckView(int16_t thisView) { + if (SafeModeScrollView[thisView] == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, + "SafeModeManagerView::ChangeToResourceCheckView"); + p_ResourceCheckView = new ResourceCheckView(); + if (p_ResourceCheckView == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, + "SafeModeManagerView:: new scrollView[%d] fail", thisView); + return false; + } + SafeModeScrollView[thisView] = p_ResourceCheckView->ResourceCheckViewInit(); + container_->Add(SafeModeScrollView[thisView]); + } + return true; +} + +// 修复文件 +bool SafeModeManagerView::ChangeToRepairView(int16_t thisView) { + if (SafeModeScrollView[thisView] == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, + "SafeModeManagerView::ChangeToRepairView"); + p_RepairView = new RepairView(); + if (p_RepairView == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, + "SafeModeManagerView:: new scrollView[%d] fail", thisView); + return false; + } + SafeModeScrollView[thisView] = p_RepairView->RepairViewInit(); + container_->Add(SafeModeScrollView[thisView]); + } + return true; +} + +struct SafeModeManagerViewMapper { + const int16_t viewId; + bool (SafeModeManagerView::*func)(int16_t thisView); +}; + +static const SafeModeManagerViewMapper ViewMapper[] = { + {VIEW_SAFE_LIST, &SafeModeManagerView::ChangeToSafeModelistView}, + {VIEW_BLE_OTA, &SafeModeManagerView::ChangeToBleOTAView}, + {VIEW_AUTO_OTA, &SafeModeManagerView::ChangeToAutoOTAView}, + {VIEW_FACTORY_RESET, &SafeModeManagerView::ChangeToFactoryView}, + {VIEW_RESOURCE_CHECK, &SafeModeManagerView::ChangeToResourceCheckView}, + {VIEW_REPAIR_FILE, &SafeModeManagerView::ChangeToRepairView}}; + +// 根据传入的interface参数执行相应视图ID关联的成员函数。 +bool SafeModeManagerView::ClickFunc(int16_t interface) { + int funcSize = sizeof(ViewMapper) / sizeof(ViewMapper[VIEW_SAFE_LIST]); + 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; +} + +/*检查传入的两个视图参数 hideView 和 showView 的有效性。*/ +bool SafeModeManagerView::CheckViewParam(int16_t hideView, int16_t showView) { + if (showView < 0 || showView >= MAX_VIEW_ID) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, + "SafeModeManagerView::CheckViewParam showView err."); + return false; + } + + if (hideView < 0 || hideView > MAX_VIEW_ID) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, + "SafeModeManagerView::CheckViewParam hideView err."); + return false; + } + + return true; +} + +// 切换视图 +void SafeModeManagerView::ChangeView(int16_t hideView, int16_t showView) { + if (!CheckViewParam(hideView, showView)) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, + "SafeModeManagerView::CheckViewParam failed."); + return; + } + SafeModeScrollView[hideView]->SetVisible(false); + ClickFunc(showView); + SafeModeScrollView[showView]->SetVisible(true); + Draw(); +} +UIScrollView *SafeModeManagerView::GetSafeScrollView(int ViewId) { + if (SafeModeScrollView[ViewId] == nullptr) { + return nullptr; + } + return SafeModeScrollView[ViewId]; +} + +// 按键状态更新 +void SafeModeManagerView::UpdateToggleButState(void) { + // 更新按钮状态 + UpdateButtonState(btnBLE_, Safe_State::BLE_OTA); + UpdateButtonState(btnAutoOTA_, Safe_State::AUTO_OTA); + UpdateButtonState(btnResourceCheck_, Safe_State::RESOURCE_CHECK); + UpdateButtonState(btnFactoryReset_, Safe_State::FACTORY_RESET); +} + +// 更新单个按钮状态的辅助函数 +void SafeModeManagerView::UpdateButtonState(UIToggleButton button, + Safe_State state) { + if (SafeModeManagerModel::GetInstance()->IsState(state)) { + button.SetState(true); + } else { + button.SetState(false); + } +} +/* -------------------------------------------------------------------------- */ +void SafeModeManagerView::OnStart() { + View::OnStart(); + SetContainerView(new UIViewGroup()); + if (GetContainer() == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SetContainerView fail!!"); + return; + } + container_->SetPosition(0, 0, Screen::GetInstance().GetWidth(), + Screen::GetInstance().GetHeight()); + + InitView(); + + // SetContainerView(container_); + // RootView::GetInstance()->SetOnKeyActListener(presenter_); +} + +void SafeModeManagerView::OnSetUpView() { + View::OnSetUpView(); + container_->Add(SafeModeScrollView[VIEW_SAFE_LIST]); + Draw(); +} + +void SafeModeManagerView::OnTearDownView() { + View::OnTearDownView(); + return; +} + +void SafeModeManagerView::OnStop() { + View::OnStop(); + if (container_ != nullptr) { + container_->RemoveAll(); + delete container_; + container_ = nullptr; + } + RootView::GetInstance()->RemoveAll(); + return; +} + +} // namespace OHOS +#endif \ No newline at end of file -- 2.17.1