From: Caisking <3449750381@qq.com> Date: Mon, 9 Sep 2024 09:53:22 +0000 (+0800) Subject: 增加安全模式Slice X-Git-Tag: release_V1.2.70_20241020_135402~522 X-Git-Url: http://git.snicker.com.cn/css/static/gitweb.css?a=commitdiff_plain;h=62a580b3f3b6d52d7dfaac10824e482914e07d75;p=mirrors%2FFD230.git 增加安全模式Slice --- diff --git a/code/sdk/application/wearable/fd230app/CMakeLists.txt b/code/sdk/application/wearable/fd230app/CMakeLists.txt index 3bac64586..06c9715fc 100644 --- a/code/sdk/application/wearable/fd230app/CMakeLists.txt +++ b/code/sdk/application/wearable/fd230app/CMakeLists.txt @@ -700,6 +700,12 @@ set(SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/codedlock/src/CodedLockPresenter.cpp ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/codedlock/src/CodedLockModel.cpp + #安全模式 + ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/safemodemanager/src/SafeModeManagerView.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/safemodemanager/src/SafeModeManagerPresenter.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/safemodemanager/src/SafeModeManagerModel.cpp + + ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/phone/src/PhoneCallView.cpp ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/phone/src/PhoneCallPresenter.cpp ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/phone/src/PhoneDirView.cpp diff --git a/code/sdk/application/wearable/fd230app/nativelauncher/include/AppViewIDs.h b/code/sdk/application/wearable/fd230app/nativelauncher/include/AppViewIDs.h index 8ba8419dc..200735a6c 100644 --- a/code/sdk/application/wearable/fd230app/nativelauncher/include/AppViewIDs.h +++ b/code/sdk/application/wearable/fd230app/nativelauncher/include/AppViewIDs.h @@ -121,7 +121,7 @@ typedef enum : uint16_t VIEW_GOAL, // 每日目标 VIEW_CALCULATOR, // 计算器 VIEW_SCHEDULE, // schedule - VIEW_SLEEPMODE, // sleep mode + VIEW_SLEEPMODE, // sleep mode /*屏蔽Slice*/ VIEW_PHONERING, // 拨号界面 VIEW_PHONECALLING, // 来电 @@ -136,6 +136,7 @@ typedef enum : uint16_t VIEW_MAIN_ALIPAY, #endif /*请在最末添加新的viewID*/ + VIEW_SAFE_MODE, // 安全模式 VIEW_MAX_INTER_APP, // 在此之前添加native应用ID. VIEW_EXTERN_APP = 0xFFFE, // 三方应用 VIEW_INVALIDE_APP = 0xFFFF, diff --git a/code/sdk/application/wearable/fd230app/nativelauncher/include/NativeLauncher.h b/code/sdk/application/wearable/fd230app/nativelauncher/include/NativeLauncher.h index 607843798..f267a2536 100644 --- a/code/sdk/application/wearable/fd230app/nativelauncher/include/NativeLauncher.h +++ b/code/sdk/application/wearable/fd230app/nativelauncher/include/NativeLauncher.h @@ -6,11 +6,16 @@ namespace OHOS { + enum class LaunchMode + { + NORMAL_MODE, // 普通模式 + SAFE_MODE // 安全模式 + }; class NativeLauncher { public: static NativeLauncher &GetInstance(void); - void InitNativeLauncher(void); + void InitNativeLauncher(LaunchMode mode); void InitMainSlice(void); void InitSetCardSlice(void); void InitAddCardSlice(void); @@ -109,6 +114,7 @@ namespace OHOS void InitFastTrainingSlice(void); void InitFastTrainingAttentionSlice(void); void InitCodedlockSlice(void); + void InitSafeModeSlice(void); /* -------------------------------------------------------------------------- */ // void InitPhoneSlice(void); void InitPhoneCallSlice(void); diff --git a/code/sdk/application/wearable/fd230app/nativelauncher/src/NativeLauncher.cpp b/code/sdk/application/wearable/fd230app/nativelauncher/src/NativeLauncher.cpp index b9ffdedba..82779db3e 100644 --- a/code/sdk/application/wearable/fd230app/nativelauncher/src/NativeLauncher.cpp +++ b/code/sdk/application/wearable/fd230app/nativelauncher/src/NativeLauncher.cpp @@ -114,6 +114,9 @@ /*密码锁*/ #include "codedlock/include/CodedLockView.h" #include "codedlock/include/CodedLockPresenter.h" +/*安全模式*/ +#include "safemodemanager/include/SafeModeManagerView.h" +#include "safemodemanager/include/SafeModeManagerPresenter.h" /* -------------------------------------------------------------------------- */ #include "secondaryfunction/include/SecondaryFunctionPresenter.h" #include "secondaryfunction/include/SecondaryFunctionView.h" @@ -411,6 +414,8 @@ namespace OHOS //{VIEW_SET_HEART, &NativeLauncher::InitSetHeartSlice}, /*密码锁*/ {VIEW_CODED_LOCK, &NativeLauncher::InitCodedlockSlice}, + /*安全模式*/ + {VIEW_SAFE_MODE, &NativeLauncher::InitSafeModeSlice}, /* -------------------------------------------------------------------------- */ /*智能助手*/ {VIEW_OFFLINEVOICE, &NativeLauncher::InitOfflineVoice}, @@ -451,62 +456,79 @@ namespace OHOS return instance; } - void NativeLauncher::InitNativeLauncher() + void NativeLauncher::InitNativeLauncher(LaunchMode mode) { #ifdef JS_ENABLE ACELite::ProductAdapter::SetScreenSize(HORIZONTAL_RESOLUTION, VERTICAL_RESOLUTION); #endif - // ConfigModel::GetInstance()->Init(); - // 初始化语言 - GraphicStartUp::InitFontEngine(MEM_POOL_UI_FONT, MEM_POOL_UI_FONT_SIZE, OHOS::VECTOR_FONT_DIR, HARMONYOS_VECTOR_FONT_FILENAME); - //GraphicStartUp::InitFontEngine(MEM_POOL_UI_FONT, MEM_POOL_UI_FONT_SIZE, OHOS::NEW_FONT_DIR, HARMONYOS_VECTOR_ARABIC_FILENAME); - GraphicStartUp::InitFontEngine(MEM_POOL_UI_FONT, MEM_POOL_UI_FONT_SIZE, OHOS::NEW_FONT_DIR, GILROY_BOLD_FONT); // 注册字体 - GraphicStartUp::InitFontEngine(MEM_POOL_UI_FONT, MEM_POOL_UI_FONT_SIZE, OHOS::NEW_FONT_DIR, AUDIOWIDE_REGULAR_FONT); // 注册字体 - - - // 默认设置全局字体为HarmonyOSFont,其他时候根据语言选择字体名字 - set_current_global_font_name(HARMONYOS_VECTOR_FONT_FILENAME); - - WEARABLE_LOGI(WEARABLE_LOG_MODULE_LAUNCHER_FWK, "NativeLauncher::InitNativeLauncher fontname %s", DEFAULT_VECTOR_FONT_FILENAME); - /* -------------------------------------------------------------------------- */ - // 从语言json配置里面读取语言包 - if (language::GetInstance()->InitLangues() == false) - { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "InitLangues error"); - } - // 初始化所有预加载slice - InitBtHeadsetEvent(); // 蓝牙ct和tg适配初始化 - InitAllNativeSlices(); - CallerLogModel::GetInstance()->InitPhoneService(); - PresenterTask::GetInstance()->Init(); - PlayersModel::GetInstance()->AudioInit(); - ActivityModel::GetInstance()->Init(); - ScreenModels::GetInstance()->InitKvStorage(); - VocassistModel::GetInstance()->Init(); - HeartModel::GetInstance()->Init(); - BluetoothModel::GetInstance()->Init(); - TraingModel::GetInstance()->Init(); // 训练消息订阅 - TakephotosModel::GetInstance()->Init(); // 拍照消息订阅 - MessageModel::GetInstance().Init(); // 消息订阅监听 - - // 初始化默认首页 - ScreenModels::GetInstance()->PreLoadAppimages(); - // NativeAbility::GetInstance().SetDefaultSliceId(VIEW_MAIN); - // 注册按键事件 - RebootAndShutdownModel::GetInstance().RegisterAllKeyEvents(); - - // 开机检测充电状态 - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "get_charge_stat is %d", get_charge_stat()); - if (get_charge_stat()) - { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Power is Charging!"); - DialModelCharge::GetInstance()->UpdatechargeStatus(1); - } - /*开机读取天气历史数据*/ - read_jsonHistory_weather(); - - C_ScheduleDataReadFromFile(); - mmi_sleep_mode_switch_read(); + WEARABLE_LOGI(WEARABLE_LOG_MODULE_LAUNCHER_FWK, "LaunchMode mode is %d", mode); + if (mode == LaunchMode::SAFE_MODE) + { + GraphicStartUp::InitFontEngine(MEM_POOL_UI_FONT, MEM_POOL_UI_FONT_SIZE, OHOS::NEW_FONT_DIR, GILROY_BOLD_FONT); // 注册字体 + set_current_global_font_name(GILROY_BOLD_FONT); + /*加载安全模式Slice*/ + (this->*(SLICE_MAPPER[VIEW_SAFE_MODE].func))(); + NativeAbility::GetInstance().SetDefaultSliceId(VIEW_SAFE_MODE); + InitBtHeadsetEvent(); // 蓝牙ct和tg适配初始化 + CallerLogModel::GetInstance()->InitPhoneService(); + PresenterTask::GetInstance()->Init(); + PlayersModel::GetInstance()->AudioInit(); + ScreenModels::GetInstance()->InitKvStorage(); + BluetoothModel::GetInstance()->Init(); + } + else if (mode == LaunchMode::NORMAL_MODE) + { + // ConfigModel::GetInstance()->Init(); + // 初始化语言 + GraphicStartUp::InitFontEngine(MEM_POOL_UI_FONT, MEM_POOL_UI_FONT_SIZE, OHOS::VECTOR_FONT_DIR, HARMONYOS_VECTOR_FONT_FILENAME); + // GraphicStartUp::InitFontEngine(MEM_POOL_UI_FONT, MEM_POOL_UI_FONT_SIZE, OHOS::NEW_FONT_DIR, HARMONYOS_VECTOR_ARABIC_FILENAME); + GraphicStartUp::InitFontEngine(MEM_POOL_UI_FONT, MEM_POOL_UI_FONT_SIZE, OHOS::NEW_FONT_DIR, GILROY_BOLD_FONT); // 注册字体 + GraphicStartUp::InitFontEngine(MEM_POOL_UI_FONT, MEM_POOL_UI_FONT_SIZE, OHOS::NEW_FONT_DIR, AUDIOWIDE_REGULAR_FONT); // 注册字体 + + // 默认设置全局字体为HarmonyOSFont,其他时候根据语言选择字体名字 + set_current_global_font_name(HARMONYOS_VECTOR_FONT_FILENAME); + + WEARABLE_LOGI(WEARABLE_LOG_MODULE_LAUNCHER_FWK, "NativeLauncher::InitNativeLauncher fontname %s", DEFAULT_VECTOR_FONT_FILENAME); + /* -------------------------------------------------------------------------- */ + // 从语言json配置里面读取语言包 + if (language::GetInstance()->InitLangues() == false) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "InitLangues error"); + } + // 初始化所有预加载slice + InitBtHeadsetEvent(); // 蓝牙ct和tg适配初始化 + InitAllNativeSlices(); + CallerLogModel::GetInstance()->InitPhoneService(); + PresenterTask::GetInstance()->Init(); + PlayersModel::GetInstance()->AudioInit(); + ActivityModel::GetInstance()->Init(); + ScreenModels::GetInstance()->InitKvStorage(); + VocassistModel::GetInstance()->Init(); + HeartModel::GetInstance()->Init(); + BluetoothModel::GetInstance()->Init(); + TraingModel::GetInstance()->Init(); // 训练消息订阅 + TakephotosModel::GetInstance()->Init(); // 拍照消息订阅 + MessageModel::GetInstance().Init(); // 消息订阅监听 + + // 初始化默认首页 + ScreenModels::GetInstance()->PreLoadAppimages(); + // NativeAbility::GetInstance().SetDefaultSliceId(VIEW_MAIN); + // 注册按键事件 + RebootAndShutdownModel::GetInstance().RegisterAllKeyEvents(); + + // 开机检测充电状态 + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "get_charge_stat is %d", get_charge_stat()); + if (get_charge_stat()) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Power is Charging!"); + DialModelCharge::GetInstance()->UpdatechargeStatus(1); + } + /*开机读取天气历史数据*/ + read_jsonHistory_weather(); + + C_ScheduleDataReadFromFile(); + mmi_sleep_mode_switch_read(); + } } void NativeLauncher::InitAllNativeSlices(void) @@ -1246,6 +1268,18 @@ namespace OHOS } NativeAbility::GetInstance().AddSliceProxy(VIEW_CODED_LOCK, codedlockView); } + // 安全模式 + void NativeLauncher::InitSafeModeSlice(void) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "NativeLauncher::InitSafeModeSlice"); + SliceProxy *safemodeView = new AbilitySliceProxy; + if (safemodeView == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "safemodeView is nullptr"); + return; + } + NativeAbility::GetInstance().AddSliceProxy(VIEW_SAFE_MODE, safemodeView); + } /* -------------------------------------------------------------------------- */ // 查找手机 void NativeLauncher::InitFindPhoneSlice(void) diff --git a/code/sdk/application/wearable/fd230app/nativeui/rebootandshutdown/include/RebootAndShutdownModel.h b/code/sdk/application/wearable/fd230app/nativeui/rebootandshutdown/include/RebootAndShutdownModel.h index d1393fdbf..c830bc074 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/rebootandshutdown/include/RebootAndShutdownModel.h +++ b/code/sdk/application/wearable/fd230app/nativeui/rebootandshutdown/include/RebootAndShutdownModel.h @@ -1,3 +1,9 @@ +/*** + * @Date: 2024-07-24 09:43:53 + * @LastEditors: Caisking 3449750381@qq.com + * @LastEditTime: 2024-09-09 10:45:53 + * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/rebootandshutdown/include/RebootAndShutdownModel.h + */ /* * @Author: luozheng 1732036298@qq.com * @Date: 2024-07-18 14:55:21 @@ -17,6 +23,8 @@ namespace OHOS static RebootAndShutdownModel &GetInstance(void); void HandFirstTimeStartJumpToMainView(void); void RegisterAllKeyEvents(void); + bool GetPowerKey(); + void SetPowerKey(bool state); private: RebootAndShutdownModel(); @@ -30,7 +38,9 @@ namespace OHOS bool RegisterFuncKeyLongPressEvent(void); bool RegisterFuncKeyClickEvent(void); bool RegisterFuncKeyDoubleClickEvent(void); - + bool RegisterPowerAndFuncKeyPressEvent(void); + bool powerKeyPressed{false}; + bool funcKeyPressed{false}; }; } diff --git a/code/sdk/application/wearable/fd230app/nativeui/rebootandshutdown/src/RebootAndShutdownModel.cpp b/code/sdk/application/wearable/fd230app/nativeui/rebootandshutdown/src/RebootAndShutdownModel.cpp index d320562e6..5f0a7d645 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/rebootandshutdown/src/RebootAndShutdownModel.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/rebootandshutdown/src/RebootAndShutdownModel.cpp @@ -442,7 +442,95 @@ namespace OHOS } return true; } + bool RebootAndShutdownModel::GetPowerKey() + { + return powerKeyPressed; + } + void RebootAndShutdownModel::SetPowerKey(bool state) + { + powerKeyPressed = state; + } + static void PowerAndFuncKeyPressCallBack(void) + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PowerAndFuncKeyPressCallBack"); + /*关闭动画*/ + ShutDownImageAnimatorView *shutDownImageAnimatorView = ShutDownImageAnimatorView::GetInstance(); + if (shutDownImageAnimatorView != nullptr && true == shutDownImageAnimatorView->GetShutDownImageAnimatorIsStart()) + { + return; + } + /*第一次启动*/ + if (true == ConfigModel::GetInstance()->GetisFirstTimeStart()) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PowerAndFuncKeyPressCallBack: first time power on"); + return; + } + /*是否亮屏*/ + const power_display_svr_api_t *display_api = power_display_svr_get_api(); + if (!display_api) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "power_display_svr_get_api returned nullptr"); + return; + } + if (display_api->get_screen_state() == SCREEN_ON) + { + uint16_t curSliceId = NativeAbility::GetInstance().GetCurSliceId(); + /*处于主界面锁屏 或者密码锁界面*/ + if (curSliceId == VIEW_MAIN || curSliceId == VIEW_CODED_LOCK) + { + /*被锁*/ + if (uapi_dev_runtime_get_lock_status()) + { + if (curSliceId != VIEW_CODED_LOCK) + { + NativeAbility::GetInstance().EnterSlice(VIEW_CODED_LOCK); + } + return; + } + } + // 全局切换安全模式界面 + NativeAbility::GetInstance().EnterSlice(VIEW_SAFE_MODE); + } + } + + // 处理同时按下电源键和功能键的事件 + static void HandlePowerAndFuncKeySetPress(void) + { + RebootAndShutdownModel::GetInstance().SetPowerKey(true); + } + static void HandlePowerAndFuncKeyPress(void) + { + GraphicService::GetInstance()->PostGraphicEvent(std::bind(PowerAndFuncKeyPressCallBack)); + } + // 注册同时按下电源键和功能键的事件 + bool RebootAndShutdownModel::RegisterPowerAndFuncKeyPressEvent(void) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RebootAndShutdownModel::RegisterPowerAndFuncKeyPressEvent"); +#if 0 + int32_t ret = uapi_button_register_double_event_cb(HandlePowerAndFuncKeyPress, BUTTON_PWR_PRESS, BUTTON1_PRESS); + if (ret != ERRCODE_SUCC) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Register FuncKey or Power Click Event error, ret = %d", ret); + return false; + } + + int32_t funcret = uapi_button_register_event_cb(HandlePowerAndFuncKeyPress, BUTTON1_PRESS); + if (funcret != ERRCODE_SUCC) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to register Function Button Press Event, ret = %d", funcret); + return false; + } +#endif + // 注册按键按下事件 2秒 + int32_t powerret = uapi_button_register_event_cb(HandlePowerAndFuncKeyPress, BUTTON_PWR_LONGPRESS_2S); + if (powerret != ERRCODE_SUCC) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to register Power Button Press Event, ret = %d", powerret); + return false; + } + return true; + } /*注册所有按键事件*/ void RebootAndShutdownModel::RegisterAllKeyEvents(void) { @@ -452,5 +540,6 @@ namespace OHOS RegisterFuncKeyLongPressEvent(); // RegisterFuncKeyClickEvent(); RegisterFuncKeyDoubleClickEvent(); + RegisterPowerAndFuncKeyPressEvent(); } } diff --git a/code/sdk/application/wearable/fd230app/nativeui/safemodemanager/include/SafeModeManagerModel.h b/code/sdk/application/wearable/fd230app/nativeui/safemodemanager/include/SafeModeManagerModel.h new file mode 100644 index 000000000..476963174 --- /dev/null +++ b/code/sdk/application/wearable/fd230app/nativeui/safemodemanager/include/SafeModeManagerModel.h @@ -0,0 +1,39 @@ +/*** + * @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 +#include + +namespace OHOS +{ + class SafeModeManagerModel + { + public: + // 获取单例实例 + static SafeModeManagerModel *GetInstance(); + + // 资源检查和读取差异文件 + bool ResourceCheck(); + bool ReadCheckFile(); + // 获取检查文件列表 + const std::vector &GetCheckDifferentialFiles() const; + size_t GetCheckFileCount() const; + + private: + SafeModeManagerModel() = default; // 默认构造函数 + ~SafeModeManagerModel() = default; // 默认析构函数 + SafeModeManagerModel(const SafeModeManagerModel &) = delete; // 禁止拷贝构造 + SafeModeManagerModel &operator=(const SafeModeManagerModel &) = delete; // 禁止赋值操作 + + std::vector resource_check_files; // 存储检查的资源文件列表 + }; +} + +#endif // SAFE_MODE_MANAGER_MODEL_H \ No newline at end of file diff --git a/code/sdk/application/wearable/fd230app/nativeui/safemodemanager/include/SafeModeManagerPresenter.h b/code/sdk/application/wearable/fd230app/nativeui/safemodemanager/include/SafeModeManagerPresenter.h new file mode 100644 index 000000000..6672c4f63 --- /dev/null +++ b/code/sdk/application/wearable/fd230app/nativeui/safemodemanager/include/SafeModeManagerPresenter.h @@ -0,0 +1,47 @@ +/*** + * @Date: 2024-09-09 09:48:47 + * @LastEditors: Caisking 3449750381@qq.com + * @LastEditTime: 2024-09-09 09:52:39 + * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/safemodemanager/include/SafeModeManagerPresenter.h + */ + +#ifndef _SafeModeManager_PRESENTER_H +#define _SafeModeManager_PRESENTER_H + +#include "Presenter.h" +#include "SafeModeManagerView.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 *RE_START = "restart"; + + class SafeModeManagerView; + class SafeModeManagerPresenter : public Presenter, + public UIView::OnClickListener, + public UIView::OnDragListener, + public RootView::OnKeyActListener + { + public: + SafeModeManagerPresenter(); + virtual ~SafeModeManagerPresenter(); + + void OnStart() override; + void OnPause() override; + void OnResume() override; + void OnStop() 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 \ No newline at end of file diff --git a/code/sdk/application/wearable/fd230app/nativeui/safemodemanager/include/SafeModeManagerView.h b/code/sdk/application/wearable/fd230app/nativeui/safemodemanager/include/SafeModeManagerView.h new file mode 100644 index 000000000..0de6463bf --- /dev/null +++ b/code/sdk/application/wearable/fd230app/nativeui/safemodemanager/include/SafeModeManagerView.h @@ -0,0 +1,92 @@ +#ifndef _SafeModeManager_VIEW_H +#define _SafeModeManager_VIEW_H + +#include "BaseView.h" +#include "View.h" + +#include "components/ui_view_group.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 "SafeModeManagerPresenter.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 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); + + private: + SafeModeManagerView *p_BleOTAView{nullptr}; // BleOTA + SafeModeManagerView *p_AutoOTAView{nullptr}; // 自动OTA + SafeModeManagerView *p_FactoryView{nullptr}; // 恢复出厂 + SafeModeManagerView *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}; + }; +} // namespace OHOS + +#endif // _SafeModeManager_VIEW_H \ No newline at end of file diff --git a/code/sdk/application/wearable/fd230app/nativeui/safemodemanager/src/SafeModeManagerModel.cpp b/code/sdk/application/wearable/fd230app/nativeui/safemodemanager/src/SafeModeManagerModel.cpp new file mode 100644 index 000000000..d491231c3 --- /dev/null +++ b/code/sdk/application/wearable/fd230app/nativeui/safemodemanager/src/SafeModeManagerModel.cpp @@ -0,0 +1,69 @@ +#include +#include +#include +#include +#include "safemodemanager/include/SafeModeManagerModel.h" +#include "custom_utils.h" +#include "wearable_log.h" + +extern "C" bool resfile_checksum_thread(void); + +static const char *CHECK_DIFFERENTIAL_FILE = "/system/check_differential.txt"; +namespace OHOS +{ + SafeModeManagerModel *SafeModeManagerModel::GetInstance(void) + { + static SafeModeManagerModel instance; + return &instance; + } + + /*-----------------------------资源校验相关-----------------------------*/ + bool SafeModeManagerModel::ResourceCheck() + { + bool checkstate{false}; + if (resfile_checksum_thread()) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "文件校验成功"); + checkstate = true; + } + else + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "文件校验失败"); + } + return checkstate; + } + // 进行文件读取 + 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; + } + // 获取校验数组 + const std::vector &SafeModeManagerModel::GetCheckDifferentialFiles() const // 返回常量引用以避免复制 + { + return resource_check_files; // 返回资源检查文件列表 + } + // 获取文件个数 + size_t SafeModeManagerModel::GetCheckFileCount() const + { + return resource_check_files.size(); // 返回文件个数 + } +} \ No newline at end of file diff --git a/code/sdk/application/wearable/fd230app/nativeui/safemodemanager/src/SafeModeManagerPresenter.cpp b/code/sdk/application/wearable/fd230app/nativeui/safemodemanager/src/SafeModeManagerPresenter.cpp new file mode 100644 index 000000000..722d09715 --- /dev/null +++ b/code/sdk/application/wearable/fd230app/nativeui/safemodemanager/src/SafeModeManagerPresenter.cpp @@ -0,0 +1,115 @@ + +#include "AppViewIDs.h" +#include "components/ui_label_ext.h" +#include "ui_resource_string.h" +#include "NativeAbility.h" +#include "KeyInputListener.h" +#include "custom_utils.h" +#include "common/key_code.h" + +#include "safemodemanager/include/SafeModeManagerPresenter.h" +#include "safemodemanager/include/SafeModeManagerModel.h" +#include "gfx_utils/mem_check.h" +#include "custom_utils.h" +namespace OHOS +{ + + // 当前Presenter属性实例化的内存指针 + static SafeModeManagerPresenter *g_pSafeModeManagerPresenter = nullptr; + + SafeModeManagerPresenter::SafeModeManagerPresenter() + { +#ifdef MEM_CHECK + MemCheck::GetInstance()->EnableLeakCheck(true); +#endif + g_pSafeModeManagerPresenter = this; + } + + SafeModeManagerPresenter::~SafeModeManagerPresenter() + { +#ifdef MEM_CHECK + MemCheck::GetInstance()->EnableLeakCheck(false); +#endif + g_pSafeModeManagerPresenter = nullptr; + } + + SafeModeManagerPresenter *SafeModeManagerPresenter::GetInstance() + { + + return g_pSafeModeManagerPresenter; + } + + void SafeModeManagerPresenter::OnStart() + { + + Presenter::OnStart(); + } + + void SafeModeManagerPresenter::OnPause(void) + { + + Presenter::OnPause(); + } + + void SafeModeManagerPresenter::OnResume(void) + { + + Presenter::OnResume(); + } + + void SafeModeManagerPresenter::OnStop(void) + { + + Presenter::OnStop(); + } + + bool SafeModeManagerPresenter::OnDrag(UIView &view, const DragEvent &event) + { + if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT && + (event.GetDeltaX() > 20) && (event.GetDeltaX() > (2 * MATH_ABS(event.GetDeltaY())))) + { + // NativeAbility::GetInstance().Back(); + } + UNUSED(view); + return true; + } + + bool SafeModeManagerPresenter::OnClick(UIView &view, const ClickEvent &event) + { + if (strcmp(view.GetViewId(), BLE_OTA) == 0) + { + /*蓝牙ota*/ + } + if (strcmp(view.GetViewId(), AUTO_OTA) == 0) + { + /*auto ota*/ + } + if (strcmp(view.GetViewId(), FACTORY_RESET_SAFE) == 0) + { + /*恢复出厂*/ + } + if (strcmp(view.GetViewId(), RESOURCE_CHECK) == 0) + { + /*资源校验*/ + GraphicService::GetInstance()->PostGraphicEvent(std::bind(&SafeModeManagerModel::ResourceCheck, + SafeModeManagerModel::GetInstance())); + } + if (strcmp(view.GetViewId(), RE_START) == 0) + { + /*重启*/ + uapi_reboot_device(); // 重启 + } + return true; + } + bool SafeModeManagerPresenter::OnKeyAct(UIView &view, const KeyEvent &event) + { + unsigned short keyID = event.GetKeyId(); + unsigned short keyState = event.GetState(); + // 如果是power键,且是亮屏状态,按键释放就返回上一级 + if (keyID == static_cast(ZliteKeyCode::ZLITE_KEY_POWER) && keyState == 1 && uapi_get_screen_state() == 0) + { + // NativeAbility::GetInstance().Back(); + } + return true; + } +} \ No newline at end of file diff --git a/code/sdk/application/wearable/fd230app/nativeui/safemodemanager/src/SafeModeManagerView.cpp b/code/sdk/application/wearable/fd230app/nativeui/safemodemanager/src/SafeModeManagerView.cpp new file mode 100644 index 000000000..130955dfd --- /dev/null +++ b/code/sdk/application/wearable/fd230app/nativeui/safemodemanager/src/SafeModeManagerView.cpp @@ -0,0 +1,365 @@ +#include "safemodemanager/include/SafeModeManagerView.h" +#include "safemodemanager/include/SafeModeManagerPresenter.h" + +#include "common/image_cache_manager.h" +#include "UiConfig.h" +#include "ui_resource_image.h" +#include +#include "components/ui_button.h" +#include "uicomponents/UIComponents.h" +#include "ui_resource_string.h" +#include "components/ui_scroll_view.h" + +namespace OHOS +{ + + static SafeModeManagerView *g_pSafeModeManagerView{nullptr}; + static const uint32_t BACK_GROUND_COLOR = 0xfff6f6f6; + + SafeModeManagerView::SafeModeManagerView() + { + 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_); + } + /* -------------------------------------------------------------------------- */ + // 主视图 + 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) + { +#if 0 + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SafeModeManagerView::ChangeToResourceCheckView"); + p_ResourceCheckView = new SystemShutdown(); + if (p_ResourceCheckView == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SafeModeManagerView:: new scrollView[%d] fail", thisView); + return false; + } + SafeModeScrollView[thisView] = p_ResourceCheckView->SystemShutdownViewInit(); + container_->Add(SafeModeScrollView[thisView]); +#endif + } + 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}, + }; + + // 根据传入的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(); + } + /* -------------------------------------------------------------------------- */ + 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 diff --git a/code/sdk/application/wearable/nativeabilityfwk/src/NativeAbility.cpp b/code/sdk/application/wearable/nativeabilityfwk/src/NativeAbility.cpp index 0f2cd97e7..601d64e79 100755 --- a/code/sdk/application/wearable/nativeabilityfwk/src/NativeAbility.cpp +++ b/code/sdk/application/wearable/nativeabilityfwk/src/NativeAbility.cpp @@ -1,3 +1,9 @@ +/*** + * @Date: 2024-04-15 10:55:58 + * @LastEditors: Caisking 3449750381@qq.com + * @LastEditTime: 2024-09-09 15:48:54 + * @FilePath: /FD230/code/sdk/application/wearable/nativeabilityfwk/src/NativeAbility.cpp + */ /* * Copyright (c) CompanyNameMagicTag. * Licensed under the Apache License, Version 2.0 (the "License"); @@ -51,7 +57,7 @@ void NativeAbility::InstallAbility(void) InstallNativeAbility(nullptr, this); // 初始化Launcher - NativeLauncher::GetInstance().InitNativeLauncher(); + NativeLauncher::GetInstance().InitNativeLauncher(LaunchMode::NORMAL_MODE); return; } #endif diff --git a/code/sdk/application/wearable/nativeabilityfwk/src/StartNative.cpp b/code/sdk/application/wearable/nativeabilityfwk/src/StartNative.cpp index d25d83e53..3395a7f92 100755 --- a/code/sdk/application/wearable/nativeabilityfwk/src/StartNative.cpp +++ b/code/sdk/application/wearable/nativeabilityfwk/src/StartNative.cpp @@ -4,8 +4,9 @@ #include "graphic_service_wrapper.h" #include "adapter.h" -void StartNative() { - OHOS::NativeLauncher::GetInstance().InitNativeLauncher(); +void StartNative() +{ + OHOS::NativeLauncher::GetInstance().InitNativeLauncher(OHOS::LaunchMode::NORMAL_MODE); HideGraphicLogo(); HideGraphicOtaLogo(); Want *info = static_cast(AdapterMalloc(sizeof(Want))); diff --git a/code/sdk/drivers/peripheral/utils/custom_resfile_check.c b/code/sdk/drivers/peripheral/utils/custom_resfile_check.c index 0255b3d5b..761f207c1 100644 --- a/code/sdk/drivers/peripheral/utils/custom_resfile_check.c +++ b/code/sdk/drivers/peripheral/utils/custom_resfile_check.c @@ -28,7 +28,6 @@ #include "custom_runtime.h" #include "pm_definition.h" - #include "sys/time.h" #include "time.h" @@ -37,198 +36,230 @@ #include "mbedtls/md5.h" #include "mbedtls/error.h" - #define MAX_FILE_NAME_LEN 256 -#define MAX_FILE_CHECKSUM_STR_LEN (256+64) +#define MAX_FILE_CHECKSUM_STR_LEN (256 + 64) #define RESFILE_CHECKSUM_FILE "/system/fileschecksum.txt" - +#define CHECK_DIFFERENTER_FILE "/system/check_differential.txt" // #define ENABLE_RESFILECHECK_LOG #ifdef ENABLE_RESFILECHECK_LOG -#define LOG_RESCHECK printf +#define LOG_RESCHECK printf #else #define LOG_RESCHECK #endif /** - * 输入: + * 输入: * /music/ring/ring.mp3,523621,8c0b93aae3b2ee12e6cf58336a092c43 -*/ -static bool split_argument(char* buf,int inputlen , char* outfilename, int max_outfile_namelen,uint32_t *outfilesize ,char *md5sum_buf, uint32_t nax_md5sum_buf_len) + */ +static bool split_argument(char *buf, int inputlen, char *outfilename, int max_outfile_namelen, uint32_t *outfilesize, char *md5sum_buf, uint32_t nax_md5sum_buf_len) { - char *tokbuf=NULL; + char *tokbuf = NULL; char *pchStrTmpIn = NULL; - tokbuf=strtok_r(buf,",",&pchStrTmpIn); - if(tokbuf!=NULL) + tokbuf = strtok_r(buf, ",", &pchStrTmpIn); + if (tokbuf != NULL) + { + int filenamelen = strlen(tokbuf); + memcpy_s(outfilename, max_outfile_namelen, tokbuf, filenamelen); + outfilename[filenamelen] = 0; + } + else { - int filenamelen=strlen(tokbuf); - memcpy_s(outfilename,max_outfile_namelen,tokbuf,filenamelen); - outfilename[filenamelen]=0; - }else{ return false; } - tokbuf=strtok_r(NULL,",",&pchStrTmpIn); - if(tokbuf!=NULL) + tokbuf = strtok_r(NULL, ",", &pchStrTmpIn); + if (tokbuf != NULL) + { + *outfilesize = atoi(tokbuf); + } + else { - *outfilesize=atoi(tokbuf); - }else{ return false; } - tokbuf=strtok_r(NULL,",",&pchStrTmpIn); - if(tokbuf!=NULL) + tokbuf = strtok_r(NULL, ",", &pchStrTmpIn); + if (tokbuf != NULL) { - int md5sum_size=strlen(tokbuf); - memcpy_s(md5sum_buf,nax_md5sum_buf_len,tokbuf,md5sum_size); - md5sum_buf[md5sum_size]=0; + int md5sum_size = strlen(tokbuf); + memcpy_s(md5sum_buf, nax_md5sum_buf_len, tokbuf, md5sum_size); + md5sum_buf[md5sum_size] = 0; // printf("checksum %s ,size %d \n",tokbuf,md5sum_size); - }else{ + } + else + { return false; } - + return true; } /** * 资源文件校验码保存在文件 /system/fileschecksum.txt 中 * 读出每一行,输入本函数,检测文件是否正常。 - * 输入: + * 输入: * /music/ring/ring.mp3,523621,8c0b93aae3b2ee12e6cf58336a092c43 * 输出: * outputfile 显示到UI中使用 ,文件错误或者缺失的时候用到。 * return true 正确 - * false 文件错误,或者缺失 -*/ -bool check_file(char* buffer,int inputlen,char* outputfile,int outputsize) + * false 文件错误,或者缺失 + */ +bool check_file(char *buffer, int inputlen, char *outputfile, int outputsize) { - unsigned char md5sum_str[64]={0}; - unsigned char current_md5sum_str[64]={0}; - unsigned char current_md5sum[16]={0}; + unsigned char md5sum_str[64] = {0}; + unsigned char current_md5sum_str[64] = {0}; + unsigned char current_md5sum[16] = {0}; int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; mbedtls_md5_context ctx; - char* filename=malloc(MAX_FILE_NAME_LEN); - char* checksumbuf=malloc(MAX_FILE_NAME_LEN); + char *filename = malloc(MAX_FILE_NAME_LEN); + char *checksumbuf = malloc(MAX_FILE_NAME_LEN); - uint32_t filesize=0; - uint32_t current_filesize=0; - if ( buffer == NULL || outputfile == NULL) + uint32_t filesize = 0; + uint32_t current_filesize = 0; + if (buffer == NULL || outputfile == NULL) { return false; } // printf("check %s\n",buffer); - if (false == split_argument(buffer,inputlen,(char*)filename,MAX_FILE_NAME_LEN,&filesize,(char*)md5sum_str,64)) + if (false == split_argument(buffer, inputlen, (char *)filename, MAX_FILE_NAME_LEN, &filesize, (char *)md5sum_str, 64)) { - printf("splite_argument %s failed !\r\n",buffer); + printf("splite_argument %s failed !\r\n", buffer); goto freebuf; } - memcpy_s(outputfile,outputsize,filename,strlen((char*)filename)); + memcpy_s(outputfile, outputsize, filename, strlen((char *)filename)); // printf("===---filename %s, size %d,checksum %s\n",filename,filesize,md5sum_str); FILE *file = NULL; - file = fopen((char*)filename, "rb"); - if (file == NULL) { + file = fopen((char *)filename, "rb"); + if (file == NULL) + { goto freebuf; } - mbedtls_md5_init( &ctx ); - if( ( ret = mbedtls_md5_starts( &ctx ) ) != 0 ) + mbedtls_md5_init(&ctx); + if ((ret = mbedtls_md5_starts(&ctx)) != 0) goto fileread_error; - - uint32_t filesize_readed = fread(checksumbuf,1,sizeof(checksumbuf),file); - while (filesize_readed > 0 ) + + uint32_t filesize_readed = fread(checksumbuf, 1, sizeof(checksumbuf), file); + while (filesize_readed > 0) { - current_filesize+=filesize_readed; - if( ( ret = mbedtls_md5_update( &ctx,(unsigned char*) checksumbuf, filesize_readed ) ) != 0 ) + current_filesize += filesize_readed; + if ((ret = mbedtls_md5_update(&ctx, (unsigned char *)checksumbuf, filesize_readed)) != 0) goto fileread_error; - filesize_readed = fread(checksumbuf,1,sizeof(checksumbuf),file); + filesize_readed = fread(checksumbuf, 1, sizeof(checksumbuf), file); } fclose(file); - if( ( ret = mbedtls_md5_finish( &ctx, (unsigned char*)current_md5sum ) ) != 0 ) + if ((ret = mbedtls_md5_finish(&ctx, (unsigned char *)current_md5sum)) != 0) goto md5_error; - sprintf((char*)current_md5sum_str,"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x", - current_md5sum[0],current_md5sum[1],current_md5sum[2],current_md5sum[3], - current_md5sum[4],current_md5sum[5],current_md5sum[6],current_md5sum[7], - current_md5sum[8],current_md5sum[9],current_md5sum[10],current_md5sum[11], - current_md5sum[12],current_md5sum[13],current_md5sum[14],current_md5sum[15]); + sprintf((char *)current_md5sum_str, "%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x", + current_md5sum[0], current_md5sum[1], current_md5sum[2], current_md5sum[3], + current_md5sum[4], current_md5sum[5], current_md5sum[6], current_md5sum[7], + current_md5sum[8], current_md5sum[9], current_md5sum[10], current_md5sum[11], + current_md5sum[12], current_md5sum[13], current_md5sum[14], current_md5sum[15]); // printf("===+++filename %s, current_filesize %d,current_md5sum %s\n",filename,current_filesize,current_md5sum_str); - int cmpret=memcmp(md5sum_str,current_md5sum_str,32); - int cmpsize=(filesize == current_filesize); + int cmpret = memcmp(md5sum_str, current_md5sum_str, 32); + int cmpsize = (filesize == current_filesize); LOG_RESCHECK("filename %s, filesize=compare(%d,%d)=%d,md5sum compare(%s,%s)=%d\n", - filename, - filesize,current_filesize,cmpsize, - md5sum_str,current_md5sum_str,cmpret); - if ( cmpret != 0 || cmpsize != 1 ) + filename, + filesize, current_filesize, cmpsize, + md5sum_str, current_md5sum_str, cmpret); + if (cmpret != 0 || cmpsize != 1) { LOG_RESCHECK("check failed!\r\n"); return false; - }else{ + } + else + { LOG_RESCHECK("check pass\n"); return true; } fileread_error: fclose(file); md5_error: - mbedtls_md5_free( &ctx ); + mbedtls_md5_free(&ctx); freebuf: free(filename); free(checksumbuf); return false; } -void resfile_checksum_thread(void) +bool resfile_checksum_thread(void) { - printf("resfile start check\r\n"); - char* readbuf=malloc(MAX_FILE_CHECKSUM_STR_LEN); - if (readbuf == NULL ) + char *readbuf = malloc(MAX_FILE_CHECKSUM_STR_LEN); + if (readbuf == NULL) { printf("malloc fail, skip resfile check\r\n"); - return ; + return false; } - char* filename=malloc(MAX_FILE_NAME_LEN); - if (filename == NULL ) + char *filename = malloc(MAX_FILE_NAME_LEN); + if (filename == NULL) { free(readbuf); printf("malloc fail, skip resfile check\r\n"); - return ; + return false; } - FILE * file=fopen(RESFILE_CHECKSUM_FILE,"rb"); - + FILE *file = fopen(RESFILE_CHECKSUM_FILE, "rb"); if (file == NULL) { - printf("checksum list file %s not exist,skip resfile check\r\n",RESFILE_CHECKSUM_FILE); + printf("checksum list file %s not exist, skip resfile check\r\n", RESFILE_CHECKSUM_FILE); free(readbuf); free(filename); - return ; + return false; } - memset(readbuf,0,MAX_FILE_CHECKSUM_STR_LEN); + + memset(readbuf, 0, MAX_FILE_CHECKSUM_STR_LEN); char tmp; - int i=0; - while(fread(&tmp,1,1,file)>0) + int i = 0; + FILE *diff_file = fopen(CHECK_DIFFERENTER_FILE, "a"); + if (diff_file == NULL) + { + printf("Failed to open differential file %s\r\n", CHECK_DIFFERENTER_FILE); + fclose(file); + free(readbuf); + free(filename); + return false; + } + + while (fread(&tmp, 1, 1, file) > 0) { - if(i>=MAX_FILE_CHECKSUM_STR_LEN) + if (i >= MAX_FILE_CHECKSUM_STR_LEN - 1) // 保留一个字符用于 '\0' { break; } - if(tmp == '\n') + if (tmp == '\n') { - readbuf[i]=tmp; - memset(filename,0,MAX_FILE_NAME_LEN); - if (check_file(readbuf,i+1,filename,MAX_FILE_NAME_LEN) == false) + readbuf[i] = '\0'; // 结束字符串 + memset(filename, 0, MAX_FILE_NAME_LEN); + if (check_file(readbuf, i + 1, filename, MAX_FILE_NAME_LEN) == false) { - printf("resfile %s is modified or deleted!\r\n",filename); + printf("resfile %s is modified or deleted!\r\n", filename); + fprintf(diff_file, "%s\n", filename); // 写文件并换行 } - i=0; - memset(readbuf,0,MAX_FILE_CHECKSUM_STR_LEN); + i = 0; + memset(readbuf, 0, MAX_FILE_CHECKSUM_STR_LEN); continue; - - }else{ - readbuf[i]=tmp; + } + else + { + readbuf[i] = tmp; } i++; } - + + // 处理最后一行 + if (i > 0 && i < MAX_FILE_CHECKSUM_STR_LEN) + { + readbuf[i] = '\0'; // 结束字符串 + memset(filename, 0, MAX_FILE_NAME_LEN); + if (check_file(readbuf, i + 1, filename, MAX_FILE_NAME_LEN) == false) + { + printf("resfile %s is modified or deleted!\r\n", filename); + fprintf(diff_file, "%s\n", filename); // 写文件并换行 + } + } + + fclose(diff_file); fclose(file); free(readbuf); free(filename); printf("resfile check done\r\n"); - + return true; } \ No newline at end of file