增加屏保功能
authorxue <2144439972@qq.com>
Mon, 29 Sep 2025 07:54:28 +0000 (15:54 +0800)
committerxue <2144439972@qq.com>
Mon, 29 Sep 2025 07:54:28 +0000 (15:54 +0800)
code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdMainView.cpp
code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdModel.cpp

index b144617..25f3f48 100644 (file)
@@ -28,7 +28,7 @@
 #include "battery_service.h"
 #include "custom_runtime.h"
 #include <service/graphic_service.h>
-//#include "ln_api.h"
+#include "ln_api.h"
 namespace OHOS
 {
     static constexpr int16_t VIDEO_WIDTH = 360;
@@ -277,7 +277,7 @@ namespace OHOS
             iconView->SetStyle(STYLE_BACKGROUND_OPA, 0xff);
             iconView->SetResizeMode(UIImageView::COVER);
             iconView->SetSrc("/user/res/1.bin");
-            iconView->SetVisible(false);
+            //iconView->SetVisible(false);
             ScrollView_->Add(iconView);
 
             backGroundView = new UIImageView(); //(黑色遮罩)需要遮罩时启用,预先增加在对应图层
@@ -285,7 +285,7 @@ namespace OHOS
             backGroundView->SetPosition(0, 0, 360, 360);
             backGroundView->SetStyle(STYLE_BACKGROUND_COLOR, 0xff000000);
             backGroundView->SetStyle(STYLE_BACKGROUND_OPA, 0xD0);
-            backGroundView->SetVisible(false);
+            //backGroundView->SetVisible(false);
             ScrollView_->Add(backGroundView);
 
             // 默认显示主界面
@@ -548,7 +548,10 @@ namespace OHOS
             group[hideView]->SetVisible(false);
         }
         // 同用遮罩,部分界面在内部自行开启,其余界面关闭
-        iconView->SetVisible(false);
+        if(GetIsOpenScreenImageModel() == false)
+        {
+            iconView->SetVisible(false);
+        }
         backGroundView->SetVisible(false);
         if(showView != THUNDERBIRD_DIALOGUEVIEW && showView != THUNDERBIRD_LULLABYVIEW)
         {
@@ -566,12 +569,7 @@ namespace OHOS
         ClickFunc(showView);
         group[showView]->SetVisible(true);
         group[showView]->SetStyle(STYLE_BACKGROUND_OPA, 0x00);
-        // 关键:把状态栏重新加到末尾,确保最上层
-        if (group1)
-        {
-            ScrollView_->Remove(group1);
-            ScrollView_->Add(group1);
-        }
+
         // 进入大界面后,根据 subView 跳转到其子界面
         if (subView != -1)
         {
@@ -632,6 +630,29 @@ namespace OHOS
         return currentSubView_;
     }
 
+    // 跳转到上一个界面
+    bool ThunderBirdMainView::GoBackToPreviousView()
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ThunderBirdMainView::GoBackToPreviousView");
+        
+        // 检查是否有上一个界面可以返回
+        if (prevView_ == -1 || prevView_ >= MAXVIEW)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdMainView::GoBackToPreviousView: No previous view to return to");
+            return false;
+        }
+        
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ThunderBirdMainView::GoBackToPreviousView: prevView_=%d, prevSubView_=%d, currentView_=%d, currentSubView_=%d", 
+                     prevView_, prevSubView_, currentView_, currentSubView_);
+        
+        
+        // 跳转到上一个界面
+        ChangeView(currentView_, prevView_, prevSubView_);
+        
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ThunderBirdMainView::GoBackToPreviousView: Successfully returned to previous view");
+        return true;
+    }
+
     void ThunderBirdMainView::Initback()
     {
         curFace = new UIImageView();
@@ -700,6 +721,63 @@ namespace OHOS
         curFace->SetSrc(hairPath);
         curFace->Invalidate();
     }
+    
+   //获取是否开启屏保模式
+   bool ThunderBirdMainView::GetIsOpenScreenImageModel(void)
+   {
+        return IsOpenScreenImageModel_;
+   }
+   //切换屏保图片的接口
+    void ThunderBirdMainView::SwitchIconImage(const char *imagePath)
+    {
+        if (iconView == nullptr || imagePath == nullptr) {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdMainView::SwitchIconImage: Invalid parameters");
+            return;
+        }
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ThunderBirdMainView::SwitchIconImage: Switching to image: %s", imagePath);
+        iconView->SetSrc(imagePath);
+        iconView->Invalidate();
+    }
+    //切换屏保模式接口
+    bool ThunderBirdMainView::OpenScreenImageModel(void)
+    {
+        if(GetIsOpenScreenImageModel()==true)
+        {
+            return false;
+        }
+        IsOpenScreenImageModel_ = true;
+        //暂停视频播放
+        if (videoPlay_ != nullptr) {
+            videoPlay_->PauseVideoPlay();
+        }
+        //切换屏保图片
+        SwitchIconImage(LN_DEVICE_SCREEN_IMAGE_FILE);
+        //设置iconView为可见状态
+        if (iconView != nullptr) {
+            iconView->SetVisible(true);
+        }
+        return true;
+    }
+    //关闭屏保模式接口
+    bool ThunderBirdMainView::CloseScreenImageModel(void)
+    {
+        if(GetIsOpenScreenImageModel()==false)
+        {
+            return false;
+        }
+        IsOpenScreenImageModel_ = false;
+        //恢复视频播放
+        if (videoPlay_ != nullptr) {
+            videoPlay_->ResumeVideoPlay();
+        }
+        //恢复默认屏保图片
+        SwitchIconImage("/user/res/1.bin");
+        //设置iconView可见状态恢复跟着backGroundView走
+        if (backGroundView->IsVisible() == false) {
+            iconView->SetVisible(false);
+        }
+        return true;
+    }
     UIViewGroup *ThunderBirdMainView::InitBaseData()
     {
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PullUpDownView::InitBaseData");
index a70c731..d523439 100644 (file)
             }
         }
     }
+    //切换屏保图片
+    void ThunderBirdModel::HandleScreenImageDownloadSuccess()
+    {
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::HandleScreenImageDownloadSuccess");
+        uapi_set_screen_on_api(); // 亮屏
+        //启用屏保图片
+        if (access(LN_DEVICE_SCREEN_IMAGE_FILE, F_OK) != -1)
+        {
+            ThunderBirdMainView::GetInstance()->OpenScreenImageModel();
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "屏保图片存在,直接发送切换屏保通知");
+        }
+    }
+
+    void ThunderBirdModel::HandleApiError(const char* message)
+    {
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::HandleApiError");
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Error message: %s", message ? message : "null");
+        int currentView = ThunderBirdMainView::GetInstance()->GetCurrentView();
+        ThunderBirdMainView::GetInstance()->ChangeView(currentView, THUNDERBIRD_ADJUSTVIEW, ThunderBirdAdjustView::THUNDERBIRD_ADJUSTVIEW_WARNING);
+        if (ThunderBirdAdjustView::GetInstance()) {
+            ThunderBirdAdjustView::GetInstance()->UpdateTaskReminderText(message);
+        }
+    }
 
     //减低视频帧率 开启对话调用开启
    void ThunderBirdModel::LowFrequence()