实现长按四秒关机功能,关机动画还未设置
authorluozheng <1732036298@qq.com>
Tue, 19 Mar 2024 09:24:42 +0000 (17:24 +0800)
committerluozheng <1732036298@qq.com>
Tue, 19 Mar 2024 09:24:42 +0000 (17:24 +0800)
code/sdk/application/wearable/fd230app/nativelauncher/src/NativeLauncher.cpp
code/sdk/application/wearable/fd230app/nativeui/config/src/ConfigModel.cpp
code/sdk/application/wearable/fd230app/nativeui/rebootdevice/include/RebootModel.h
code/sdk/application/wearable/fd230app/nativeui/rebootdevice/src/RebootModel.cpp

index d85469b..89692fe 100644 (file)
 #include "dialupdate/include/DialUpdateView.h"
 
 #include "config/include/ConfigModel.h"
+#include "rebootdevice/include/RebootModel.h"
 
 #include "phone/include/PhoneView.h"
 #include "phone/include/PhonePresenter.h"
@@ -261,6 +262,8 @@ namespace OHOS
         // 初始化默认首页
         ScreenModels::GetInstance()->PreLoadAppimages();
         NativeAbility::GetInstance().SetDefaultSliceId(VIEW_MAIN);
+        //注册长按重启或关机事件
+        RebootModel::GetInstance()->RegisterLongPressEvents();
     }
 
     void NativeLauncher::InitAllNativeSlices(void)
index e14bad8..1a73f16 100644 (file)
@@ -217,9 +217,9 @@ namespace OHOS
     {
         for (int i = 0; i < numImages; i++)
         {
-            free((void *)imagePaths[i]);
+            delete imagePaths[i];
+            imagePaths[i] = nullptr;
         }
-        delete[] imagePaths;
     }
 
 }
\ No newline at end of file
index dd0a6c3..5c14f77 100644 (file)
@@ -25,7 +25,7 @@ public:
     void SetSelectViewId(int16_t value);
     bool GetExitsView(void);
     void SetExitsView(bool value);
-
+    bool RegisterLongPressEvents(void);
 private:
     RebootModel();
     int16_t selectView{0};
index 735064a..1b2c15d 100644 (file)
@@ -4,36 +4,84 @@
  * Create: 2022-04-28
  */
 
-#include "RebootModel.h"
+#include "rebootdevice/include/RebootModel.h"
+#include "wearable_log.h"
+#include "NativeAbility.h"
+#include "errcode.h"
+namespace OHOS
+{
+    RebootModel::RebootModel() {}
 
-namespace OHOS {
-RebootModel::RebootModel() {}
+    RebootModel::~RebootModel() {}
 
-RebootModel::~RebootModel() {}
+    RebootModel *RebootModel::GetInstance(void)
+    {
+        static RebootModel instance;
+        return &instance;
+    }
 
-RebootModel *RebootModel::GetInstance(void)
-{
-    static RebootModel instance;
-    return &instance;
-}
+    int16_t RebootModel::GetSelectView(void)
+    {
+        return selectView;
+    }
 
-int16_t RebootModel::GetSelectView(void)
-{
-    return selectView;
-}
+    void RebootModel::SetSelectViewId(int16_t value)
+    {
+        selectView = value;
+    }
 
-void RebootModel::SetSelectViewId(int16_t value)
-{
-    selectView = value;
-}
+    bool RebootModel::GetExitsView(void)
+    {
+        return exitsView;
+    }
 
-bool RebootModel::GetExitsView(void)
-{
-    return exitsView;
-}
+    void RebootModel::SetExitsView(bool value)
+    {
+        exitsView = value;
+    }
 
-void RebootModel::SetExitsView(bool value)
-{
-    exitsView = value;
-}
+#ifdef __cplusplus
+    extern "C"
+    {
+#endif
+
+#include "input_app.h"
+#ifdef __cplusplus
+    }
+#endif
+#include <NativeAbility.h>
+#include <AppViewIDs.h>
+#include "power_display_service.h"
+    /*
+     * @brief 长按四秒关机回调函数
+     */
+    static void OnKeyLongPress4s_Callback(void)
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "OnKeyLongPress4s_Callback");
+        const power_display_svr_api_t *display_api = power_display_svr_get_api();
+        if (display_api->get_screen_state() != SCREEN_ON)
+        {
+            display_api->turn_on_screen();
+        }
+        //切换到关机/重启卡片
+        NativeAbility::GetInstance().ChangeSlice(VIEW_SHUTDOWN_OR_REBOOT);
+
+        return;
+    }
+
+    /*
+     * @brief 注册长按监听事件
+     * @return 注册成功返回true,反之返回false
+     */
+    bool RebootModel::RegisterLongPressEvents(void)
+    {
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RebootModel::RegisterLongPressEvents");
+        int32_t ret = uapi_button_register_event_cb(OnKeyLongPress4s_Callback, BUTTON_PWR_LONGPRESS_4S);
+        if (ret != ERRCODE_SUCC)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Register LongPress Events err,ret = %d", ret);
+            return false;
+        }
+        return true;
+    }
 }
\ No newline at end of file