OSDN Git Service

Handle unbonding in Hearing Aid profile
authorJakub Pawlowski <jpawlowski@google.com>
Tue, 8 May 2018 14:44:43 +0000 (07:44 -0700)
committerJakub Pawlowski <jpawlowski@google.com>
Tue, 8 May 2018 19:29:12 +0000 (19:29 +0000)
Bug: 69623109
Change-Id: I3b1f778e414511a3748cebd2b0e233d638cd4d43
Fixes: 79207134
Test: unbond from Hearing Aid when connected or disconnected from it

bta/hearing_aid/hearing_aid.cc
bta/include/bta_hearing_aid_api.h
btif/src/btif_dm.cc
btif/src/btif_hearing_aid.cc
include/hardware/bt_hearing_aid.h

index c278cbd..268f125 100644 (file)
@@ -951,6 +951,7 @@ class HearingAidImpl : public HearingAid {
 
     VLOG(2) << __func__ << ": " << address;
 
+    bool connected = hearingDevice->accepting_audio;
     hearingDevice->accepting_audio = false;
 
     if (hearingDevice->connecting_actively) {
@@ -972,7 +973,8 @@ class HearingAidImpl : public HearingAid {
 
     hearingDevices.Remove(address);
 
-    callbacks->OnConnectionState(ConnectionState::DISCONNECTED, address);
+    if (connected)
+      callbacks->OnConnectionState(ConnectionState::DISCONNECTED, address);
   }
 
   void OnGattDisconnected(tGATT_STATUS status, uint16_t conn_id,
index afe08ae..c3eca1a 100644 (file)
@@ -21,7 +21,6 @@
 #include <base/callback_forward.h>
 #include <hardware/bt_hearing_aid.h>
 
-using bluetooth::Uuid;
 
 /** Implementations of HearingAid will also implement this interface */
 class HearingAidAudioReceiver {
index ad78022..66268ca 100644 (file)
@@ -43,6 +43,7 @@
 
 #include <bluetooth/uuid.h>
 #include <hardware/bluetooth.h>
+#include <hardware/bt_hearing_aid.h>
 
 #include "advertise_data_parser.h"
 #include "bt_common.h"
@@ -244,6 +245,8 @@ extern bt_status_t btif_hf_client_execute_service(bool b_enable);
 extern bt_status_t btif_sdp_execute_service(bool b_enable);
 extern int btif_hh_connect(const RawAddress* bd_addr);
 extern bt_status_t btif_hd_execute_service(bool b_enable);
+extern bluetooth::hearing_aid::HearingAidInterface*
+btif_hearing_aid_get_interface();
 
 /******************************************************************************
  *  Functions
@@ -1648,6 +1651,7 @@ static void btif_dm_upstreams_evt(uint16_t event, char* p_param) {
 #if (defined(BTA_HD_INCLUDED) && (BTA_HD_INCLUDED == TRUE))
       btif_hd_remove_device(bd_addr);
 #endif
+      btif_hearing_aid_get_interface()->RemoveDevice(bd_addr);
       btif_storage_remove_bonded_device(&bd_addr);
       bond_state_changed(BT_STATUS_SUCCESS, bd_addr, BT_BOND_STATE_NONE);
       break;
index ef91369..d78725c 100644 (file)
@@ -101,6 +101,14 @@ class HearingAidInterfaceImpl
                                      Unretained(HearingAid::Get()), volume));
   }
 
+  void RemoveDevice(const RawAddress& address) override {
+    DVLOG(2) << __func__ << " address: " << address;
+    do_in_bta_thread(FROM_HERE, Bind(&HearingAid::Disconnect,
+                                     Unretained(HearingAid::Get()), address));
+    do_in_jni_thread(FROM_HERE,
+                     Bind(&btif_storage_remove_hearing_aid, address));
+  }
+
   void Cleanup(void) {
     DVLOG(2) << __func__;
     do_in_bta_thread(FROM_HERE, Bind(&HearingAid::CleanUp));
index 3b53d37..a54f82a 100644 (file)
@@ -64,6 +64,9 @@ class HearingAidInterface {
 
   /** Closes the interface. */
   virtual void Cleanup(void) = 0;
+
+  /* Called when Hearing Aid is unbonded. */
+  virtual void RemoveDevice(const RawAddress& address) = 0;
 };
 
 }  // namespace hearing_aid