雷鸟:
authorluozheng <1732036298@qq.com>
Thu, 4 Dec 2025 09:00:21 +0000 (17:00 +0800)
committerluozheng <1732036298@qq.com>
Thu, 4 Dec 2025 09:00:21 +0000 (17:00 +0800)
1.解决蓝牙页面开启扫描定时器后退出未停止定时器bug,2.优化连接新设备ui处理,优化开机连接耳机后,
3.等待网络连接后上报状态

code/sdk/application/wearable/ln/nativeapp/nativeui/bluetooth/src/BluetoothModel.cpp
code/sdk/application/wearable/ln/nativeapp/nativeui/bluetooth/src/Ln_Bluetooth_apiC.cpp
code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/include/ThunderBirdBlueView.h
code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdModel.cpp
code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdPresenter.cpp

index c34c3e3..2137417 100644 (file)
@@ -454,6 +454,7 @@ bool BluetoothModel::IsTagConnectNew(void)
     return tagConnectNew;\r
 }\r
 \r
+// 设置是否已点击设备请求连接\r
 void BluetoothModel::SetTagScanDeviceClicked(bool tag)\r
 {\r
     WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BluetoothModel::SetTagScanDeviceClicked:%d", tag);\r
@@ -818,12 +819,25 @@ void BluetoothModel::BtGapDiscoveryResultCallbakHandle(const bd_addr_t &bdAddr)
     WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BtGapDiscoveryResultCallback end");\r
 }\r
 \r
+//蓝牙取消配对ui处理\r
+static void UnpairDevice(const bd_addr_t *bdAddr)\r
+{\r
+    if(ThunderBirdMainView::GetInstance()) {\r
+            int currentView = ThunderBirdMainView::GetInstance()->GetCurrentView();\r
+            ThunderBirdMainView::GetInstance()->ChangeView(currentView, \r
+                THUNDERBIRD_BLUEVIEW, \r
+                ThunderBirdBlueView::THUNDERBIRD_BULEVIEW_DISCONNECT_SUCCESS_NEW);\r
+    }\r
+    return;\r
+}\r
+\r
 void BtGapPairStatusChangedCallback(const bd_addr_t *bdAddr, int status)\r
 {\r
     WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "配对状态变化 addr: ****%02x%02x%02x%02x status: %d\n",\r
         bdAddr->addr[3], bdAddr->addr[2], bdAddr->addr[1], bdAddr->addr[0], status); /* addr下标 0 1 2 3 */\r
     if(status == GAP_PAIR_NONE){\r
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "取消配对");\r
+        GraphicService::GetInstance()->PostGraphicEvent(std::bind(UnpairDevice, bdAddr));\r
     } else if(status == GAP_PAIR_PAIRING){\r
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "正在配对");\r
     } else if(status == GAP_PAIR_PAIRED){\r
@@ -938,6 +952,17 @@ static void ACLConnectionSuss(const bd_addr_t &bdAddr)
 // 回调:ACL连接失败\r
 static void ACLConnectionFail(const bd_addr_t &bdAddr)\r
 {\r
+    // 如果当前正处于“切换到新耳机”的流程中(用户点了另一台设备准备自动重连),\r
+    // 就不要弹出“连接已断开”页面,直接走后续新设备连接流程,避免多余页面跳转。\r
+    BluetoothModel* btModel = BluetoothModel::GetInstance();\r
+    if (btModel != nullptr && (btModel->IsTagConnectNew() || btModel->IsTagScanDeviceClicked())) {\r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,\r
+            "ACLConnectionFail: in switch-device flow, skip DISCONNECT_SUCCESS page");\r
+        // 清掉“需要自动连接新设备”的标记,由后续连接结果负责更新界面\r
+        btModel->SetTagConnectNew(false);\r
+        return;\r
+    }\r
+\r
     BluetoothCaseInfo caseInfo;\r
     (void)memcpy_s(caseInfo.addr, BD_ADDR_LEN, bdAddr.addr, BD_ADDR_LEN);\r
     unsigned char nameLen = BD_NAME_LEN;\r
index 71b104c..1775da7 100644 (file)
@@ -266,7 +266,7 @@ extern "C"
         if (ln_ws_get_connection_state() != 2)
         {
             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ln_bt_report_earphone_connection_status: ws not connected");
-            return 0;
+            return -1;
         }
 
         OHOS::BluetoothModel *bluetoothModel = OHOS::BluetoothModel::GetInstance();
index e1c3e5c..775d264 100644 (file)
@@ -88,7 +88,7 @@ namespace OHOS
             THUNDERBIRD_BULEVIEW_CONNECT_SUCCESS,    // 连接成功
             THUNDERBIRD_BULEVIEW_DISCONNECT_CONFIRM, // 断连询问
             THUNDERBIRD_BULEVIEW_DISCONNECT_SUCCESS, // 断连成功
-            THUNDERBIRD_BULEVIEW_DISCONNECT_SUCCESS_NEW, // 断连成功(新)
+            THUNDERBIRD_BULEVIEW_DISCONNECT_SUCCESS_NEW, // 解绑(新)
             THUNDERBIRD_BULEVIEW_DISCONNECT_FAILED   // 断连失败
         };
 
index 3c006fd..3d8c95d 100644 (file)
@@ -1652,6 +1652,16 @@ extern "C" {
                     #endif
                     
                     do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_VAD_AUTH, NULL, 0);
+
+
+                    //上报一次耳机状态
+                    if(ln_bt_report_earphone_connection_status() != 0)
+                    {
+                        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ln_bt_report_earphone_connection_status failed");
+                        LOS_Msleep(200);
+                        ln_bt_report_earphone_connection_status();//上报耳机状态
+                    }
+
                     init_falg = true;
                 }
                
index eacebdd..820410d 100644 (file)
@@ -925,6 +925,10 @@ namespace OHOS
                     ThunderBirdBlueView::GetInstance()->OnConnectFailed();
                     ThunderBirdMainView::GetInstance()->ChangeView(currentView, THUNDERBIRD_BLUEVIEW, ThunderBirdBlueView::THUNDERBIRD_BULEVIEW_DEVICE_LIST);
                     break;
+                case ThunderBirdBlueView::THUNDERBIRD_BULEVIEW_DISCONNECT_SUCCESS_NEW:
+                    //解绑成功,返回主界面,提示用户解绑成功
+                    ThunderBirdMainView::GetInstance()->ChangeView(currentView, THUNDERBIRD_DIALOGUEVIEW, ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_STATUS_SHOW);
+                    break;
             }
         }
         else if(keyType == KEY_TYPE_VENDOR_DOWN)
@@ -1182,6 +1186,7 @@ namespace OHOS
                         ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_STATUS_SHOW);
                     break;
                 }
+                ln_bt_scan_stop();
                 ln_bt_report_earphone_connection_status();
             }
         }