--- /dev/null
+#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
--- /dev/null
+#if 0
+#ifndef ResourceCheck_ADAPTER_H
+#define ResourceCheck_ADAPTER_H
+#include <list>
+#include <string>
+#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<ResourceCheckItem> &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<ResourceCheckItem> listData;
+ UIView::OnClickListener *itemClickListener{nullptr};
+ UILabelButtonExt *DeleteButton{nullptr};
+ };
+}
+
+#endif
+
+#endif
\ No newline at end of file
--- /dev/null
+/***
+ * @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
--- /dev/null
+
+#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
--- /dev/null
+/***
+ * @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 <functional>
+#include <map>
+#include <string>
+#include <vector>
+
+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<std::string> &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<std::string> 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
--- /dev/null
+
+#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
--- /dev/null
+#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<SafeModeManagerView>,
+ 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
--- /dev/null
+#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<SafeModeManagerPresenter> {
+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
--- /dev/null
+#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<UIView::OnDragListener *>(
+ 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
--- /dev/null
+#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<ResourceCheckItem> &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<size_t>(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<ResourceCheckItemView *>(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<ResourceCheckItem>::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<ResourceCheckItemView *>(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
--- /dev/null
+#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
--- /dev/null
+#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<UIView::OnDragListener *>(
+ 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<std::string> 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
--- /dev/null
+#if 0
+#include <array>
+#include <cstdint>
+#include <fstream>
+#include <iostream>
+#include <map>
+#include <string>
+#include <vector>
+
+#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 <cmsis_os.h>
+#include <cmsis_os2.h>
+#include <sstream>
+#include <string>
+
+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_COUNT> 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<int>(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<int>(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<std::string> &
+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<uint16_t>(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<int>(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<char *>(ble_name));
+}
+} // namespace OHOS
+#endif
\ No newline at end of file
--- /dev/null
+#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<SafeModeManagerView>::OnStart();
+}
+
+void SafeModeManagerPresenter::OnPause(void) {
+
+ Presenter<SafeModeManagerView>::OnPause();
+}
+
+void SafeModeManagerPresenter::OnResume(void) {
+
+ Presenter<SafeModeManagerView>::OnResume();
+}
+
+void SafeModeManagerPresenter::OnStop(void) {
+
+ Presenter<SafeModeManagerView>::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<uint16_t>(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
--- /dev/null
+#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 <ui_scroll_view.h>
+
+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<UIViewGroup *>(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<SafeModeManagerPresenter>::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<SafeModeManagerPresenter>::OnSetUpView();
+ container_->Add(SafeModeScrollView[VIEW_SAFE_LIST]);
+ Draw();
+}
+
+void SafeModeManagerView::OnTearDownView() {
+ View<SafeModeManagerPresenter>::OnTearDownView();
+ return;
+}
+
+void SafeModeManagerView::OnStop() {
+ View<SafeModeManagerPresenter>::OnStop();
+ if (container_ != nullptr) {
+ container_->RemoveAll();
+ delete container_;
+ container_ = nullptr;
+ }
+ RootView::GetInstance()->RemoveAll();
+ return;
+}
+
+} // namespace OHOS
+#endif
\ No newline at end of file