优化蓝牙上报逻辑
authorxue <2144439972@qq.com>
Tue, 13 Jan 2026 12:35:51 +0000 (20:35 +0800)
committerxue <2144439972@qq.com>
Tue, 13 Jan 2026 12:35:51 +0000 (20:35 +0800)
code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/include/ThunderBirdModel.h
code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdMainView.cpp
code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdModel.cpp
code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdPresenter.cpp

index e8eb593..afbc62a 100644 (file)
@@ -435,6 +435,7 @@ namespace OHOS
         bool close_battery_flag = false;    // 电量过低即将关机标志位
 
         int downloadFileType = -1;
+        bool m_wasInDownloadView = false;  // 是否进入过下载界面(OTA视图),用于从下载界面返回时上报
         
         // 故事模式相关标志
         bool m_storyModeFinished = false;    // 故事模式是否已finished(收到finished=true)
index 7056588..bc58fd1 100644 (file)
@@ -478,12 +478,22 @@ namespace OHOS
         // }
 
         //下载文件被打断的恢复操作
-        if(ThunderBirdModel::GetInstance()->GetDownloadFile() != -1)
+        bool wasInDownloadView = (ThunderBirdModel::GetInstance()->GetDownloadFile() != -1);
+        if(wasInDownloadView)
         {
             ThunderBirdModel::GetInstance()->HandleDownloadFile(ThunderBirdModel::GetInstance()->GetDownloadFile());
         }
 
         WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ThunderBirdMainView::OnStart");
+        
+        // 从下载界面(OTA视图)返回时,上报蓝牙连接状态
+        ThunderBirdModel* model = ThunderBirdModel::GetInstance();
+        if (model != nullptr && model->m_wasInDownloadView)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdMainView::OnStart: 从下载界面返回,上报蓝牙连接状态");
+            ln_bt_report_earphone_connection_status();
+            model->m_wasInDownloadView = false;  // 清除标志位
+        }
         View<ThunderBirdPresenter>::OnStart();
         GetRootContainer()->SetTouchable(true);
         GetRootContainer()->SetDraggable(true);
@@ -1150,7 +1160,8 @@ namespace OHOS
             }
             // 如果屏保模式未开启,才调用InvalidateGroup1(false)隐藏iconView
             // 如果屏保模式已开启,不应该隐藏iconView,否则会关闭屏保模式
-                InvalidateGroup1(false);
+            InvalidateGroup1(false);
+            ln_bt_report_earphone_connection_status();
         }
         if(showView == THUNDERBIRD_BLUEVIEW )
         {
index 009c0d1..7433974 100644 (file)
@@ -2346,7 +2346,7 @@ extern "C" {
                     WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HandleScheduleReminder: in BLUEVIEW, stop scan/connect and switch to reminder");
                     ln_bt_scan_stop();
                     ln_bt_disconnect(); // 确保中断连接流程
-                    ln_bt_report_earphone_connection_status(); // 上报当前连接状态
+                    // 上报操作在ChangeView中统一处理
                     ThunderBirdMainView::GetInstance()->ChangeView(currentView, THUNDERBIRD_REMINDERVIEW, ThunderBirdReminderView::THUNDERBIRD_REMINDERVIEW_TASK_REMINDER);
                     if (ThunderBirdReminderView::GetInstance()) {
                         ThunderBirdReminderView::GetInstance()->IsIcon(false);
@@ -3245,6 +3245,7 @@ extern "C" {
         do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_AUDIO_DEINIT, NULL, 0);
         AI_ForceInterrupt();
         ln_ws_send_voice_chat_interrupt("下载表情");
+        m_wasInDownloadView = true;  // 标记已进入下载界面
         NativeAbility::GetInstance().ChangeSlice(VIEW_OTA);
         // 根据下载类型进行不同的处理
         switch (type) {
index 6c27111..fa2350c 100644 (file)
@@ -1022,9 +1022,8 @@ namespace OHOS
                     break;
                 case ThunderBirdBlueView::THUNDERBIRD_BULEVIEW_DISCONNECT_SUCCESS_NEW:
                     //解绑成功,返回主界面,提示用户解绑成功
-                    //上报解绑成功
+                    //上报解绑成功(在ChangeView中统一处理)
                     ThunderBirdMainView::GetInstance()->ChangeView(currentView, THUNDERBIRD_DIALOGUEVIEW, ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_STATUS_SHOW);
-                    ln_bt_report_earphone_connection_status();
                     break;
                 case ThunderBirdBlueView::THUNDERBIRD_BULEVIEW_EXIT_OR_RETRY:
                     //退出配对或重新搜索
@@ -1041,8 +1040,8 @@ namespace OHOS
                     break;
                 case ThunderBirdBlueView::THUNDERBIRD_BULEVIEW_ENTER:
                     //配对中,中途退出,返回配对准备中页面
+                    //上报操作在ChangeView中统一处理
                     ThunderBirdMainView::GetInstance()->ChangeView(currentView, THUNDERBIRD_DIALOGUEVIEW, ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_STATUS_SHOW);
-                    ln_bt_report_earphone_connection_status();
                     break;
                 case ThunderBirdBlueView::THUNDERBIRD_BULEVIEW_CONNECT_SUCCESS:
                     //返回设备列表
@@ -1050,8 +1049,8 @@ namespace OHOS
                     break;
                 case ThunderBirdBlueView::THUNDERBIRD_BULEVIEW_DISCONNECT_SUCCESS: 
                     //蓝牙已断开,返回搜索界面,提示用户重新搜索
+                    //上报操作在ChangeView中统一处理
                     ThunderBirdMainView::GetInstance()->ChangeView(currentView, THUNDERBIRD_DIALOGUEVIEW, ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_STATUS_SHOW);
-                    ln_bt_report_earphone_connection_status();
                     break;
                 case ThunderBirdBlueView::THUNDERBIRD_BULEVIEW_DISCONNECT_CONFIRM:
                     //断连询问界面,按下音量-,退到连接成功界面
@@ -1319,12 +1318,12 @@ namespace OHOS
                     case ThunderBirdBlueView::THUNDERBIRD_BULEVIEW_DISCONNECT_FAILED:
                     case ThunderBirdBlueView::THUNDERBIRD_BULEVIEW_EXIT_OR_RETRY:
                     //搜索中页面长按对话按键退出到主页面
+                    ln_bt_scan_stop();
                     ThunderBirdMainView::GetInstance()->ChangeView(
                         currentView, 
                         THUNDERBIRD_DIALOGUEVIEW, 
                         ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_STATUS_SHOW);
-                        ln_bt_scan_stop();
-                        ln_bt_report_earphone_connection_status();
+                    //上报操作在ChangeView中统一处理
                     break;
                     case ThunderBirdBlueView::THUNDERBIRD_BULEVIEW_DEVICE_LIST:
                     ThunderBirdMainView::GetInstance()->ChangeView(currentView, THUNDERBIRD_BLUEVIEW, ThunderBirdBlueView::THUNDERBIRD_BULEVIEW_EXIT_OR_RETRY);