From 809476525f5b9449b5b7fc9b0986a815fb7aff22 Mon Sep 17 00:00:00 2001 From: Wei Wang Date: Wed, 19 Mar 2014 15:47:12 -0700 Subject: Move advetise clean up to callback code. fixes b/13289050 Change-Id: Ibf3c772561125821817c947730cf21defafd4cb2 --- core/java/android/bluetooth/BluetoothAdapter.java | 26 ++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/core/java/android/bluetooth/BluetoothAdapter.java b/core/java/android/bluetooth/BluetoothAdapter.java index 8aee4db08cab..a4374b86f1a3 100644 --- a/core/java/android/bluetooth/BluetoothAdapter.java +++ b/core/java/android/bluetooth/BluetoothAdapter.java @@ -590,7 +590,6 @@ public final class BluetoothAdapter { return false; } mAdvertisingGattCallback.stopAdvertising(); - mAdvertisingGattCallback = null; return true; } catch (RemoteException e) { Log.e(TAG, "", e); @@ -1794,15 +1793,12 @@ public final class BluetoothAdapter { try { IBluetoothGatt iGatt = adapter.getBluetoothManager().getBluetoothGatt(); iGatt.stopAdvertising(); - Log.d(TAG, "unregistering client " + mLeHandle); - iGatt.unregisterClient(mLeHandle); } catch (RemoteException e) { - Log.e(TAG, "Failed to stop advertising and unregister" + e); + Log.e(TAG, "Failed to stop advertising" + e); } } else { Log.e(TAG, "stopAdvertising, BluetoothAdapter is null"); } - mLeHandle = -1; notifyAll(); } } @@ -1992,6 +1988,26 @@ public final class BluetoothAdapter { if (advertiseState == STATE_ADVERTISE_STARTED) { mAdvertiseCallback.onAdvertiseStart(status); } else { + synchronized (this) { + if (status == ADVERTISE_CALLBACK_SUCCESS) { + BluetoothAdapter adapter = mBluetoothAdapter.get(); + if (adapter != null) { + try { + IBluetoothGatt iGatt = + adapter.getBluetoothManager().getBluetoothGatt(); + Log.d(TAG, "unregistering client " + mLeHandle); + iGatt.unregisterClient(mLeHandle); + // Reset advertise app handle. + mLeHandle = -1; + adapter.mAdvertisingGattCallback = null; + } catch (RemoteException e) { + Log.e(TAG, "Failed to unregister client" + e); + } + } else { + Log.e(TAG, "cannot unregister client, BluetoothAdapter is null"); + } + } + } mAdvertiseCallback.onAdvertiseStop(status); } } -- cgit v1.2.3-59-g8ed1b