From: Caisking <3449750381@qq.com> Date: Thu, 12 Sep 2024 12:09:53 +0000 (+0800) Subject: 安全模式:优化资源校验列表显示 X-Git-Tag: release_V1.2.70_20241020_135402~485^2~5^2~6 X-Git-Url: http://git.snicker.com.cn/css/static/gitweb.css?a=commitdiff_plain;h=24f4eddc5e5a2434c58487d9d16de7536d521b28;p=mirrors%2FFD230.git 安全模式:优化资源校验列表显示 --- diff --git a/code/sdk/application/wearable/fd230app/nativeui/safemodemanager/include/SafeModeManagerView.h b/code/sdk/application/wearable/fd230app/nativeui/safemodemanager/include/SafeModeManagerView.h index 4af100635..3a9617033 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/safemodemanager/include/SafeModeManagerView.h +++ b/code/sdk/application/wearable/fd230app/nativeui/safemodemanager/include/SafeModeManagerView.h @@ -4,91 +4,98 @@ #include "BaseView.h" #include "View.h" -#include "components/ui_view_group.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_image_view.h" -#include "components/ui_button.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" -namespace OHOS -{ - typedef enum - { - VIEW_SAFE_LIST, // 安全模式列表 - VIEW_BLE_OTA, // BLE OTA 更新 - VIEW_AUTO_OTA, // 自动 OTA 更新 - VIEW_FACTORY_RESET, // 恢复出厂设置 - VIEW_RESOURCE_CHECK, // 资源校验 - MAX_VIEW_ID, // 最大视图 ID - } SafeViewID; - - 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); - UIScrollView *GetSafeScrollView(int ViewId); - - private: - SafeModeManagerView *p_BleOTAView{nullptr}; // BleOTA - SafeModeManagerView *p_AutoOTAView{nullptr}; // 自动OTA - SafeModeManagerView *p_FactoryView{nullptr}; // 恢复出厂 - ResourceCheckView *p_ResourceCheckView{nullptr}; // 资源校验 - - private: - SafeModeManagerView(SafeModeManagerView &&) = delete; - SafeModeManagerView &operator=(SafeModeManagerView &&) = delete; - - // UI 组件 - UILabelExt labelTitle_; // 标题标签 - - // 功能的背景图像 - UIImageView backgroundBLE_; // BLE OTA 背景图像 - UIImageView backgroundAutoOTA_; // Auto OTA 背景图像 - UIImageView backgroundFactoryReset_; // 恢复出厂设置背景图像 - UIImageView backgroundResourceCheck_; // 资源校验背景图像 - UIImageView backgroundRestart_; // 重启背景图像 - - // 切换按钮 - UIToggleButton btnBLE_; // BLE OTA 切换按钮 - UIToggleButton btnAutoOTA_; // Auto OTA 切换按钮 - UIToggleButton btnFactoryReset_; // 恢复出厂设置切换按钮 - UIToggleButton btnResourceCheck_; // 资源校验切换按钮 - UIToggleButton btnRestart_; // 重启切换按钮 - - // 标签显示功能状态 - UILabelExt labelBLEStatus_; // BLE OTA 状态标签 - UILabelExt labelAutoOTAStatus_; // Auto OTA 状态标签 - UILabelExt labelFactoryResetStatus_; // 恢复出厂设置状态标签 - UILabelExt labelResourceCheckStatus_; // 资源校验状态标签 - UILabelExt labelRestart_; // 重启状态标签 - - UIScrollView *SafeModeScrollView[MAX_VIEW_ID]{nullptr}; - }; +#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; + +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 + UILabelExt labelTitle_; // Title Label + + // 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 + UILabelExt labelBLEStatus_; // BLE OTA Status Label + UILabelExt labelAutoOTAStatus_; // Auto OTA Status Label + UILabelExt labelFactoryResetStatus_; // Factory Reset Status Label + UILabelExt labelResourceCheckStatus_; // Resource Check Status Label + UILabelExt labelRestart_; // Restart Status Label + + UIScrollView *SafeModeScrollView[MAX_VIEW_ID]{nullptr}; +}; } // namespace OHOS #endif // _SafeModeManager_VIEW_H \ No newline at end of file diff --git a/code/sdk/application/wearable/fd230app/nativeui/safemodemanager/src/ResourceCheckAdapter.cpp b/code/sdk/application/wearable/fd230app/nativeui/safemodemanager/src/ResourceCheckAdapter.cpp index 1c4f6daf8..01e3d2b8b 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/safemodemanager/src/ResourceCheckAdapter.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/safemodemanager/src/ResourceCheckAdapter.cpp @@ -1,5 +1,3 @@ - - #include "safemodemanager/include/ResourceCheckItemView.h" #include "safemodemanager/include/ResourceCheckView.h" #include "safemodemanager/include/SafeModeManagerModel.h" @@ -9,6 +7,7 @@ #include "wearable_log.h" namespace OHOS { + ResourceCheckAdapter::ResourceCheckAdapter() {} ResourceCheckAdapter::~ResourceCheckAdapter() { listData.clear(); } @@ -19,16 +18,11 @@ void ResourceCheckAdapter::SetData(std::list &data) { if (!listData.empty()) { listData.clear(); } - std::list::iterator it; - for (it = data.begin(); it != data.end(); it++) { - listData.push_back(*it); + for (auto &item : data) { // 使用范围for循环简化代码 + listData.push_back(item); } } -/// @brief -/// @param inView 一个指向已存在的视图对象的指 -/// @param index 要创建的视图在列表中的索引l。 -/// @return 返回该视图对象 UIView *ResourceCheckAdapter::GetView(UIView *inView, int16_t index) { // 1.先检查列表数据是否为空,若为空则返回空指针 if (listData.empty()) { @@ -38,11 +32,11 @@ UIView *ResourceCheckAdapter::GetView(UIView *inView, int16_t index) { if (index < 0) { return nullptr; } - // printf("GetView : index %d\r\n", index); // 3.检查是否超出列表数据大小,若超出则返回空指针 - size_t uindex = index; - if (uindex > listData.size()) + size_t uindex = static_cast(index); // 明确转换为size_t + if (uindex > listData.size()) { return nullptr; + } ResourceCheckItemView *item = nullptr; if (uindex == listData.size()) { @@ -50,38 +44,44 @@ UIView *ResourceCheckAdapter::GetView(UIView *inView, int16_t index) { item = new ResourceCheckItemView(); } else { item = static_cast(inView); - // item->TearDownChild(); 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; // 内存分配失败,返回false + return nullptr; // 内存分配失败,返回nullptr } DeleteButton->SetPosition(0, 0); DeleteButton->Resize(380, 100); - DeleteButton->SetViewId("repair_all"); + 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, STYLE_BACKGROUND_COLOR); + DeleteButton->SetStyle(STYLE_BACKGROUND_COLOR, + Color::Green().full); // 确保设置一个有效的颜色值 DeleteButton->SetVisible(true); } - DeleteButton->SetOnClickListener(itemClickListener); + // 设置点击事件监听器 + UIView::OnClickListener *clickListener = (UIView::OnClickListener *) + OHOS::SafeModeManagerPresenter::GetInstance(); + DeleteButton->SetOnClickListener(clickListener); + item->Add(DeleteButton); item->SetViewIndex(index); item->SetOnClickListener(nullptr); return item; } - // 4.通过迭代器访问列表中指定索引位置的元素,将其赋值给itemData变量 + + // 4.通过迭代器访问列表中指定索引位置的元素 std::list::iterator it = listData.begin(); - for (int i = 0; i < index; i++) { - it++; - } + std::advance(it, index); // 使用 std::advance 简化迭代器变动 ResourceCheckItem itemData = *it; - // 5.根据传入的inView参数是否已经存在一个视图对象,若为空则创建一个新的ResourceCheckItem对象,否则将inView转换成ResourceCheckItem类型的指针 + + // 5.根据传入的 inView 参数处理 if (inView == nullptr) { item = new ResourceCheckItemView(); } else { @@ -92,10 +92,12 @@ UIView *ResourceCheckAdapter::GetView(UIView *inView, int16_t index) { item->SetItemInfo(itemData); item->SetViewIndex(index); item->SetOnClickListener(itemClickListener); - return item; + + return item; // 结束 GetView 函数 } void ResourceCheckAdapter::AddListItem(const ResourceCheckItem &item) { listData.push_back(item); } -} // namespace OHOS + +} // namespace OHOS \ No newline at end of file diff --git a/code/sdk/application/wearable/fd230app/nativeui/safemodemanager/src/ResourceCheckItemView.cpp b/code/sdk/application/wearable/fd230app/nativeui/safemodemanager/src/ResourceCheckItemView.cpp index bb69a4ce2..7ed685cc4 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/safemodemanager/src/ResourceCheckItemView.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/safemodemanager/src/ResourceCheckItemView.cpp @@ -29,7 +29,7 @@ void ResourceCheckItemView::SetUpChild() { if (isSetupChild) return; - filenamelabel.SetPosition(0, 0, 466, 180); + filenamelabel.SetPosition(0, 0, 380, 120); filenamelabel.SetTextColor(Color::White()); filenamelabel.SetFont(GILROY_BOLD_FONT, 30); filenamelabel.SetLineBreakMode(UILabel::LINE_BREAK_WRAP); diff --git a/code/sdk/application/wearable/fd230app/nativeui/safemodemanager/src/ResourceCheckView.cpp b/code/sdk/application/wearable/fd230app/nativeui/safemodemanager/src/ResourceCheckView.cpp index 9cbd151c9..fb31abb92 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/safemodemanager/src/ResourceCheckView.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/safemodemanager/src/ResourceCheckView.cpp @@ -29,12 +29,20 @@ ResourceCheckView *ResourceCheckView::GetInstance() { } void ResourceCheckView::ClearAll() { - delete scrollView; // 删除滚动视图 - scrollView = nullptr; + + 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() { @@ -112,8 +120,8 @@ void ResourceCheckView::InitFilenameList() { // 如果文件名列表未初始化则创建 if (!FilenameList) { FilenameList = new UIList(); - FilenameList->SetPosition(43, 120, 466, 466); - FilenameList->SetReboundSize(100); + FilenameList->SetPosition(43, 0, 466, 466); + // FilenameList->SetReboundSize(100); FilenameList->SetScrollBlankSize(50); FilenameList->SetThrowDrag(true); // FilenameList->SetScrollStateListener(this); @@ -125,23 +133,37 @@ void ResourceCheckView::InitFilenameList() { } } +//更新提示语 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 == -1) { - notelabel->SetText("File verification error..."); // 保持为英语 - } else if (date >= 0 && date <= 60) { + if (date >= 0 && date <= 60) { int progress = date % 5; display.append(progress, '.'); // 添加进度标记点 - } else if (date == 61) { - notelabel->SetText("File verification is ok..."); // 保持为英语 - } else { - notelabel->SetText("File verification is unknown..."); // 保持为英语 - } - // 更新标签文本 - if (date >= 0) { 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; + } } } @@ -159,11 +181,13 @@ void ResourceCheckView::UpdateView() { notelabel->SetText(allFilenames.c_str()); printf("验证的文件数量为 %d\r\n", num); if (num != 0) { - SafeModeManagerModel::GetInstance()->SetResourceCheckState(true); + SafeModeManagerModel::GetInstance()->SetState(Safe_State::RESOURCE_CHECK, + true); } } else { notelabel->SetText("File verification is the same."); // 保持为英语 - SafeModeManagerModel::GetInstance()->SetResourceCheckState(false); + SafeModeManagerModel::GetInstance()->SetState(Safe_State::RESOURCE_CHECK, + false); printf("验证结果为失败。\r\n"); } printf("验证结果已完成。\r\n"); @@ -174,12 +198,20 @@ void ResourceCheckView::AddFilenameToList(const ResourceCheckItem &item) { } void ResourceCheckView::SetViewState() { + //检查组件状态 if (notelabel == nullptr || FilenameList == nullptr) return; + int filenums = SafeModeManagerModel::GetInstance()->GetCheckFileCount(); bool check_state = - SafeModeManagerModel::GetInstance()->GetResourceCheckState(); + 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); // 显示文件名列表 @@ -193,14 +225,13 @@ void ResourceCheckView::SetViewState() { p_SafeModeManagerModel->InitFilenamesListItems(); const ResourceCheckItem *itemInfo = p_SafeModeManagerModel->GetFilenamesListItems(); - for (int i = 0; i < p_SafeModeManagerModel->GetFilenamesCount(); i++) { + 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); - SafeModeManagerModel::GetInstance()->SetResourceCheckState(false); } - } else { - FilenameList->SetVisible(false); // 隐藏文件名列表 - notelabel->SetVisible(true); // 显示提示标签 + // 设置适配器 + FilenameList->SetAdapter(p_ResourceCheckAdapter); } } diff --git a/code/sdk/application/wearable/fd230app/nativeui/safemodemanager/src/SafeModeManagerPresenter.cpp b/code/sdk/application/wearable/fd230app/nativeui/safemodemanager/src/SafeModeManagerPresenter.cpp index a6c88ffe4..299800ac4 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/safemodemanager/src/SafeModeManagerPresenter.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/safemodemanager/src/SafeModeManagerPresenter.cpp @@ -8,6 +8,8 @@ #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" @@ -71,6 +73,9 @@ bool SafeModeManagerPresenter::OnDrag(UIView &view, const DragEvent &event) { 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; } @@ -100,8 +105,10 @@ bool SafeModeManagerPresenter::OnClick(UIView &view, const ClickEvent &event) { if (strcmp(view.GetViewId(), RESOURCE_CHECK) == 0) { /*资源校验*/ p_SafeModeManagerView->ChangeView(VIEW_SAFE_LIST, VIEW_RESOURCE_CHECK); - if (SafeModeManagerModel::GetInstance()->GetResourceCheckState() == false) + if (SafeModeManagerModel::GetInstance()->IsState( + Safe_State::RESOURCE_CHECK) == false) { SafeModeManagerModel::GetInstance()->ResourceCheck(); + } } if (strcmp(view.GetViewId(), RE_START) == 0) { /*重启*/ @@ -109,12 +116,110 @@ bool SafeModeManagerPresenter::OnClick(UIView &view, const ClickEvent &event) { } //点击查看列表 if (strcmp(view.GetViewId(), CHECK_FILE_LIST) == 0) { - if (SafeModeManagerModel::GetInstance()->GetResourceCheckState() == true) { + 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) == 0) { + 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()->RepairFile(); + } + } return true; } + +// 安全模式界面定时器 +void SafeModeManagerPresenter::OnTickEvent() { + // 开始校验文件 + uint8_t check_state = uapi_dev_runtime_get_checkres_status(); + 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(); + 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_LOGD(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_LOGD(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; + } +} bool SafeModeManagerPresenter::OnKeyAct(UIView &view, const KeyEvent &event) { unsigned short keyID = event.GetKeyId(); unsigned short keyState = event.GetState(); diff --git a/code/sdk/application/wearable/fd230app/nativeui/safemodemanager/src/SafeModeManagerView.cpp b/code/sdk/application/wearable/fd230app/nativeui/safemodemanager/src/SafeModeManagerView.cpp index e9d65a42f..13f7ee379 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/safemodemanager/src/SafeModeManagerView.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/safemodemanager/src/SafeModeManagerView.cpp @@ -1,191 +1,190 @@ #include "safemodemanager/include/SafeModeManagerView.h" -#include "safemodemanager/include/SafeModeManagerPresenter.h" +#include "safemodemanager/include/RepairView.h" #include "safemodemanager/include/ResourceCheckView.h" +#include "safemodemanager/include/SafeModeManagerModel.h" +#include "safemodemanager/include/SafeModeManagerPresenter.h" -#include "common/image_cache_manager.h" #include "UiConfig.h" -#include "ui_resource_image.h" -#include +#include "common/image_cache_manager.h" #include "components/ui_button.h" -#include "uicomponents/UIComponents.h" -#include "ui_resource_string.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() - { - /*删除变量*/ - delete p_BleOTAView; - p_BleOTAView = nullptr; - delete p_AutoOTAView; - p_AutoOTAView = nullptr; - delete p_FactoryView; - p_FactoryView = nullptr; - delete p_ResourceCheckView; - p_ResourceCheckView = 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() - { - 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, BACK_GROUND_COLOR); - SafeModeScrollView[VIEW_SAFE_LIST]->SetStyle(STYLE_BACKGROUND_COLOR, Color::Black().full); - } - - // 初始化背景图和按钮的位置 - backgroundBLE_.SetPosition(43, 120, 380, 100); // BLE OTA 背景 - backgroundBLE_.SetStyle(STYLE_BACKGROUND_COLOR, 0xff191919); - backgroundBLE_.SetStyle(STYLE_BACKGROUND_OPA, 0xff); - backgroundBLE_.SetStyle(STYLE_BORDER_RADIUS, 100); - SafeModeScrollView[VIEW_SAFE_LIST]->Add(&backgroundBLE_); - - backgroundAutoOTA_.SetPosition(43, 240, 380, 100); // Auto OTA 背景 - backgroundAutoOTA_.SetStyle(STYLE_BACKGROUND_COLOR, 0xff191919); - backgroundAutoOTA_.SetStyle(STYLE_BACKGROUND_OPA, 0xff); - backgroundAutoOTA_.SetStyle(STYLE_BORDER_RADIUS, 100); - SafeModeScrollView[VIEW_SAFE_LIST]->Add(&backgroundAutoOTA_); - - backgroundFactoryReset_.SetPosition(43, 360, 380, 100); // 恢复出厂设置背景 - backgroundFactoryReset_.SetStyle(STYLE_BACKGROUND_COLOR, 0xff191919); - backgroundFactoryReset_.SetStyle(STYLE_BACKGROUND_OPA, 0xff); - backgroundFactoryReset_.SetStyle(STYLE_BORDER_RADIUS, 100); - SafeModeScrollView[VIEW_SAFE_LIST]->Add(&backgroundFactoryReset_); - - backgroundResourceCheck_.SetPosition(43, 480, 380, 100); // 资源校验背景 - backgroundResourceCheck_.SetStyle(STYLE_BACKGROUND_COLOR, 0xff191919); - backgroundResourceCheck_.SetStyle(STYLE_BACKGROUND_OPA, 0xff); - backgroundResourceCheck_.SetStyle(STYLE_BORDER_RADIUS, 100); - SafeModeScrollView[VIEW_SAFE_LIST]->Add(&backgroundResourceCheck_); - - backgroundRestart_.SetPosition(43, 600, 380, 100); // 资源校验背景 - backgroundRestart_.SetStyle(STYLE_BACKGROUND_COLOR, 0xff191919); - backgroundRestart_.SetStyle(STYLE_BACKGROUND_OPA, 0xff); - backgroundRestart_.SetStyle(STYLE_BORDER_RADIUS, 100); - SafeModeScrollView[VIEW_SAFE_LIST]->Add(&backgroundRestart_); - - 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_); - - // 设置四个功能状态标签 - labelBLEStatus_.SetPosition(90, 153, 200, 60); - labelBLEStatus_.SetFont(GILROY_BOLD_FONT, 30); - labelBLEStatus_.SetText("BLE OTA"); - SafeModeScrollView[VIEW_SAFE_LIST]->Add(&labelBLEStatus_); - - labelAutoOTAStatus_.SetPosition(90, 273, 200, 60); - labelAutoOTAStatus_.SetFont(GILROY_BOLD_FONT, 30); - labelAutoOTAStatus_.SetText("Auto OTA"); - SafeModeScrollView[VIEW_SAFE_LIST]->Add(&labelAutoOTAStatus_); - - labelFactoryResetStatus_.SetPosition(90, 393, 200, 60); - labelFactoryResetStatus_.SetFont(GILROY_BOLD_FONT, 30); - labelFactoryResetStatus_.SetText("Factory Reset"); - SafeModeScrollView[VIEW_SAFE_LIST]->Add(&labelFactoryResetStatus_); - - labelResourceCheckStatus_.SetPosition(90, 513, 200, 60); - labelResourceCheckStatus_.SetFont(GILROY_BOLD_FONT, 30); - labelResourceCheckStatus_.SetText("Resource Check"); - labelResourceCheckStatus_.SetLineBreakMode(UILabel::LINE_BREAK_MARQUEE); - labelResourceCheckStatus_.SetAlign(TEXT_ALIGNMENT_CENTER); - labelResourceCheckStatus_.SetRollSpeed(30); - SafeModeScrollView[VIEW_SAFE_LIST]->Add(&labelResourceCheckStatus_); - - labelRestart_.SetPosition(90, 633, 200, 60); - labelRestart_.SetFont(GILROY_BOLD_FONT, 30); - labelRestart_.SetText("Restart"); - SafeModeScrollView[VIEW_SAFE_LIST]->Add(&labelRestart_); - - // 设置四个切换按钮 - btnBLE_.SetPosition(245, 120, 200, 100); // BLE OTA 切换按钮 - btnBLE_.SetViewId(BLE_OTA); // 设置按钮的ViewId - btnBLE_.SetOnClickListener(presenter_); - SafeModeScrollView[VIEW_SAFE_LIST]->Add(&btnBLE_); - - btnAutoOTA_.SetPosition(245, 240, 200, 100); // Auto OTA 切换按钮 - btnAutoOTA_.SetViewId(AUTO_OTA); // 设置按钮的ViewId - btnAutoOTA_.SetOnClickListener(presenter_); - SafeModeScrollView[VIEW_SAFE_LIST]->Add(&btnAutoOTA_); - - btnFactoryReset_.SetPosition(245, 360, 200, 100); // 恢复出厂设置切换按钮 - btnFactoryReset_.SetViewId(FACTORY_RESET_SAFE); // 设置按钮的ViewId - btnFactoryReset_.SetOnClickListener(presenter_); - SafeModeScrollView[VIEW_SAFE_LIST]->Add(&btnFactoryReset_); - - btnResourceCheck_.SetPosition(245, 480, 200, 100); // 资源校验切换按钮 - btnResourceCheck_.SetViewId(RESOURCE_CHECK); // 设置按钮的ViewId - btnResourceCheck_.SetOnClickListener(presenter_); - SafeModeScrollView[VIEW_SAFE_LIST]->Add(&btnResourceCheck_); - - btnRestart_.SetPosition(245, 600, 200, 100); // 资源校验切换按钮 - btnRestart_.SetViewId(RE_START); // 设置按钮的ViewId - btnRestart_.SetOnClickListener(presenter_); - SafeModeScrollView[VIEW_SAFE_LIST]->Add(&btnRestart_); +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() { + /*删除变量*/ + 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() { + 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; } - /* -------------------------------------------------------------------------- */ - // 主视图 - 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"); + 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, + BACK_GROUND_COLOR); + SafeModeScrollView[VIEW_SAFE_LIST]->SetStyle(STYLE_BACKGROUND_COLOR, + Color::Black().full); + } + + // 初始化背景图和按钮的位置 + backgroundBLE_.SetPosition(43, 120, 380, 100); // BLE OTA 背景 + backgroundBLE_.SetStyle(STYLE_BACKGROUND_COLOR, 0xff191919); + backgroundBLE_.SetStyle(STYLE_BACKGROUND_OPA, 0xff); + backgroundBLE_.SetStyle(STYLE_BORDER_RADIUS, 100); + SafeModeScrollView[VIEW_SAFE_LIST]->Add(&backgroundBLE_); + + backgroundAutoOTA_.SetPosition(43, 240, 380, 100); // Auto OTA 背景 + backgroundAutoOTA_.SetStyle(STYLE_BACKGROUND_COLOR, 0xff191919); + backgroundAutoOTA_.SetStyle(STYLE_BACKGROUND_OPA, 0xff); + backgroundAutoOTA_.SetStyle(STYLE_BORDER_RADIUS, 100); + SafeModeScrollView[VIEW_SAFE_LIST]->Add(&backgroundAutoOTA_); + + backgroundFactoryReset_.SetPosition(43, 360, 380, 100); // 恢复出厂设置背景 + backgroundFactoryReset_.SetStyle(STYLE_BACKGROUND_COLOR, 0xff191919); + backgroundFactoryReset_.SetStyle(STYLE_BACKGROUND_OPA, 0xff); + backgroundFactoryReset_.SetStyle(STYLE_BORDER_RADIUS, 100); + SafeModeScrollView[VIEW_SAFE_LIST]->Add(&backgroundFactoryReset_); + + backgroundResourceCheck_.SetPosition(43, 480, 380, 100); // 资源校验背景 + backgroundResourceCheck_.SetStyle(STYLE_BACKGROUND_COLOR, 0xff191919); + backgroundResourceCheck_.SetStyle(STYLE_BACKGROUND_OPA, 0xff); + backgroundResourceCheck_.SetStyle(STYLE_BORDER_RADIUS, 100); + SafeModeScrollView[VIEW_SAFE_LIST]->Add(&backgroundResourceCheck_); + + backgroundRestart_.SetPosition(43, 600, 380, 100); // 资源校验背景 + backgroundRestart_.SetStyle(STYLE_BACKGROUND_COLOR, 0xff191919); + backgroundRestart_.SetStyle(STYLE_BACKGROUND_OPA, 0xff); + backgroundRestart_.SetStyle(STYLE_BORDER_RADIUS, 100); + SafeModeScrollView[VIEW_SAFE_LIST]->Add(&backgroundRestart_); + + 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_); + + // 设置四个功能状态标签 + labelBLEStatus_.SetPosition(90, 153, 200, 60); + labelBLEStatus_.SetFont(GILROY_BOLD_FONT, 30); + labelBLEStatus_.SetText("BLE OTA"); + SafeModeScrollView[VIEW_SAFE_LIST]->Add(&labelBLEStatus_); + + labelAutoOTAStatus_.SetPosition(90, 273, 200, 60); + labelAutoOTAStatus_.SetFont(GILROY_BOLD_FONT, 30); + labelAutoOTAStatus_.SetText("Auto OTA"); + SafeModeScrollView[VIEW_SAFE_LIST]->Add(&labelAutoOTAStatus_); + + labelFactoryResetStatus_.SetPosition(90, 393, 200, 60); + labelFactoryResetStatus_.SetFont(GILROY_BOLD_FONT, 30); + labelFactoryResetStatus_.SetText("Factory Reset"); + SafeModeScrollView[VIEW_SAFE_LIST]->Add(&labelFactoryResetStatus_); + + labelResourceCheckStatus_.SetPosition(90, 513, 200, 60); + labelResourceCheckStatus_.SetFont(GILROY_BOLD_FONT, 30); + labelResourceCheckStatus_.SetText("Resource Check"); + labelResourceCheckStatus_.SetLineBreakMode(UILabel::LINE_BREAK_MARQUEE); + labelResourceCheckStatus_.SetAlign(TEXT_ALIGNMENT_CENTER); + labelResourceCheckStatus_.SetRollSpeed(30); + SafeModeScrollView[VIEW_SAFE_LIST]->Add(&labelResourceCheckStatus_); + + labelRestart_.SetPosition(90, 633, 200, 60); + labelRestart_.SetFont(GILROY_BOLD_FONT, 30); + labelRestart_.SetText("Restart"); + SafeModeScrollView[VIEW_SAFE_LIST]->Add(&labelRestart_); + + // 设置四个切换按钮 + btnBLE_.SetPosition(245, 120, 200, 100); // BLE OTA 切换按钮 + btnBLE_.SetViewId(BLE_OTA); // 设置按钮的ViewId + btnBLE_.SetOnClickListener(presenter_); + SafeModeScrollView[VIEW_SAFE_LIST]->Add(&btnBLE_); + + btnAutoOTA_.SetPosition(245, 240, 200, 100); // Auto OTA 切换按钮 + btnAutoOTA_.SetViewId(AUTO_OTA); // 设置按钮的ViewId + btnAutoOTA_.SetOnClickListener(presenter_); + SafeModeScrollView[VIEW_SAFE_LIST]->Add(&btnAutoOTA_); + + btnFactoryReset_.SetPosition(245, 360, 200, 100); // 恢复出厂设置切换按钮 + btnFactoryReset_.SetViewId(FACTORY_RESET_SAFE); // 设置按钮的ViewId + btnFactoryReset_.SetOnClickListener(presenter_); + SafeModeScrollView[VIEW_SAFE_LIST]->Add(&btnFactoryReset_); + + btnResourceCheck_.SetPosition(245, 480, 200, 100); // 资源校验切换按钮 + btnResourceCheck_.SetViewId(RESOURCE_CHECK); // 设置按钮的ViewId + btnResourceCheck_.SetOnClickListener(presenter_); + SafeModeScrollView[VIEW_SAFE_LIST]->Add(&btnResourceCheck_); + + btnRestart_.SetPosition(245, 600, 200, 100); // 资源校验切换按钮 + btnRestart_.SetViewId(RE_START); // 设置按钮的ViewId + btnRestart_.SetOnClickListener(presenter_); + SafeModeScrollView[VIEW_SAFE_LIST]->Add(&btnRestart_); +} +/* -------------------------------------------------------------------------- */ +// 主视图 +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) @@ -196,15 +195,13 @@ namespace OHOS SafeModeScrollView[thisView] = p_BleOTAView->SystemAbouTheWatchtInitIView(); container_->Add(SafeModeScrollView[thisView]); #endif - } - return true; - } + } + return true; +} - // 自动OTA - bool SafeModeManagerView::ChangeToAutoOTAView(int16_t thisView) - { - if (SafeModeScrollView[thisView] == nullptr) - { +// 自动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(); @@ -216,15 +213,13 @@ namespace OHOS SafeModeScrollView[thisView] = p_AutoOTAView->SystemFactoryResetViewInit(); container_->Add(SafeModeScrollView[thisView]); #endif - } - return true; - } + } + return true; +} - // 恢复出厂 - bool SafeModeManagerView::ChangeToFactoryView(int16_t thisView) - { - if (SafeModeScrollView[thisView] == nullptr) - { +// 恢复出厂 +bool SafeModeManagerView::ChangeToFactoryView(int16_t thisView) { + if (SafeModeScrollView[thisView] == nullptr) { #if 0 WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SafeModeManagerView::ChangeToFactoryView"); p_FactoryView = new SystemRestart(); @@ -236,142 +231,163 @@ namespace OHOS SafeModeScrollView[thisView] = p_FactoryView->SystemRestartViewInit(); container_->Add(SafeModeScrollView[thisView]); #endif - } - return true; + } + 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; } - - // 资源校验 - 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; + 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; } - - 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}, - }; - - // 根据传入的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; - } - } + 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; } - - /*检查传入的两个视图参数 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::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; - } - -} \ No newline at end of file + } + 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 \ No newline at end of file