summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Treehugger Robot <treehugger-gerrit@google.com> 2017-05-05 23:28:39 +0000
committer Gerrit Code Review <noreply-gerritcodereview@google.com> 2017-05-05 23:28:40 +0000
commit612b8bef0cdaa8b0354ba356a071a60f675e5ce2 (patch)
treef8abf780947c1ee79a10a97ce7b81e56b95a5cf1
parent9d9aab48fa832b60b56f3c905017da1ef2737ff3 (diff)
parentc131051e2866bb01ac3bda0a0a6a8b5cae3ff676 (diff)
Merge "Fix Bluetooth GATT API default handler assignment"
-rw-r--r--core/java/android/bluetooth/BluetoothDevice.java5
-rw-r--r--core/java/android/bluetooth/BluetoothGatt.java44
2 files changed, 31 insertions, 18 deletions
diff --git a/core/java/android/bluetooth/BluetoothDevice.java b/core/java/android/bluetooth/BluetoothDevice.java
index e0b03d22abe9..f158f5f29ecd 100644
--- a/core/java/android/bluetooth/BluetoothDevice.java
+++ b/core/java/android/bluetooth/BluetoothDevice.java
@@ -1714,7 +1714,7 @@ public final class BluetoothDevice implements Parcelable {
* an d{@link BluetoothDevice#PHY_LE_CODED_MASK}. This option does not take effect
* if {@code autoConnect} is set to true.
* @param handler The handler to use for the callback. If {@code null}, callbacks will happen
- * on the service's main thread.
+ * on an un-specified background thread.
* @throws NullPointerException if callback is null
*/
public BluetoothGatt connectGatt(Context context, boolean autoConnect,
@@ -1723,9 +1723,6 @@ public final class BluetoothDevice implements Parcelable {
if (callback == null)
throw new NullPointerException("callback is null");
- if (handler == null)
- handler = new Handler(Looper.getMainLooper());
-
// TODO(Bluetooth) check whether platform support BLE
// Do the check here or in GattServer?
BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
diff --git a/core/java/android/bluetooth/BluetoothGatt.java b/core/java/android/bluetooth/BluetoothGatt.java
index 40f10a8edd22..3135b30ebcc8 100644
--- a/core/java/android/bluetooth/BluetoothGatt.java
+++ b/core/java/android/bluetooth/BluetoothGatt.java
@@ -156,7 +156,7 @@ public final class BluetoothGatt implements BluetoothProfile {
}
mClientIf = clientIf;
if (status != GATT_SUCCESS) {
- mHandler.post(new Runnable() {
+ runOrQueueCallback(new Runnable() {
@Override
public void run() {
if (mCallback != null) {
@@ -191,7 +191,7 @@ public final class BluetoothGatt implements BluetoothProfile {
return;
}
- mHandler.post(new Runnable() {
+ runOrQueueCallback(new Runnable() {
@Override
public void run() {
if (mCallback != null) {
@@ -213,7 +213,7 @@ public final class BluetoothGatt implements BluetoothProfile {
return;
}
- mHandler.post(new Runnable() {
+ runOrQueueCallback(new Runnable() {
@Override
public void run() {
if (mCallback != null) {
@@ -238,7 +238,7 @@ public final class BluetoothGatt implements BluetoothProfile {
int profileState = connected ? BluetoothProfile.STATE_CONNECTED :
BluetoothProfile.STATE_DISCONNECTED;
- mHandler.post(new Runnable() {
+ runOrQueueCallback(new Runnable() {
@Override
public void run() {
if (mCallback != null) {
@@ -300,7 +300,7 @@ public final class BluetoothGatt implements BluetoothProfile {
}
}
- mHandler.post(new Runnable() {
+ runOrQueueCallback(new Runnable() {
@Override
public void run() {
if (mCallback != null) {
@@ -352,7 +352,7 @@ public final class BluetoothGatt implements BluetoothProfile {
if (status == 0) characteristic.setValue(value);
- mHandler.post(new Runnable() {
+ runOrQueueCallback(new Runnable() {
@Override
public void run() {
if (mCallback != null) {
@@ -401,7 +401,7 @@ public final class BluetoothGatt implements BluetoothProfile {
mAuthRetryState = AUTH_RETRY_STATE_IDLE;
- mHandler.post(new Runnable() {
+ runOrQueueCallback(new Runnable() {
@Override
public void run() {
if (mCallback != null) {
@@ -430,7 +430,7 @@ public final class BluetoothGatt implements BluetoothProfile {
characteristic.setValue(value);
- mHandler.post(new Runnable() {
+ runOrQueueCallback(new Runnable() {
@Override
public void run() {
if (mCallback != null) {
@@ -477,7 +477,7 @@ public final class BluetoothGatt implements BluetoothProfile {
mAuthRetryState = AUTH_RETRY_STATE_IDLE;
- mHandler.post(new Runnable() {
+ runOrQueueCallback(new Runnable() {
@Override
public void run() {
if (mCallback != null) {
@@ -523,7 +523,7 @@ public final class BluetoothGatt implements BluetoothProfile {
mAuthRetryState = AUTH_RETRY_STATE_IDLE;
- mHandler.post(new Runnable() {
+ runOrQueueCallback(new Runnable() {
@Override
public void run() {
if (mCallback != null) {
@@ -549,7 +549,7 @@ public final class BluetoothGatt implements BluetoothProfile {
mDeviceBusy = false;
}
- mHandler.post(new Runnable() {
+ runOrQueueCallback(new Runnable() {
@Override
public void run() {
if (mCallback != null) {
@@ -570,7 +570,7 @@ public final class BluetoothGatt implements BluetoothProfile {
if (!address.equals(mDevice.getAddress())) {
return;
}
- mHandler.post(new Runnable() {
+ runOrQueueCallback(new Runnable() {
@Override
public void run() {
if (mCallback != null) {
@@ -592,7 +592,7 @@ public final class BluetoothGatt implements BluetoothProfile {
return;
}
- mHandler.post(new Runnable() {
+ runOrQueueCallback(new Runnable() {
@Override
public void run() {
if (mCallback != null) {
@@ -616,7 +616,7 @@ public final class BluetoothGatt implements BluetoothProfile {
return;
}
- mHandler.post(new Runnable() {
+ runOrQueueCallback(new Runnable() {
@Override
public void run() {
if (mCallback != null) {
@@ -703,6 +703,22 @@ public final class BluetoothGatt implements BluetoothProfile {
}
/**
+ * Queue the runnable on a {@link Handler} provided by the user, or execute the runnable
+ * immediately if no Handler was provided.
+ */
+ private void runOrQueueCallback(final Runnable cb) {
+ if (mHandler == null) {
+ try {
+ cb.run();
+ } catch (Exception ex) {
+ Log.w(TAG, "Unhandled exception in callback", ex);
+ }
+ } else {
+ mHandler.post(cb);
+ }
+ }
+
+ /**
* Register an application callback to start using GATT.
*
* <p>This is an asynchronous call. The callback {@link BluetoothGattCallback#onAppRegistered}