summaryrefslogtreecommitdiff
path: root/framework/java/android/bluetooth/BluetoothAdapter.java
diff options
context:
space:
mode:
authorEtienne Ruffieux <eruffieux@google.com>2022-03-30 15:13:33 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2022-03-30 15:13:33 +0000
commit45b30f756a004ae85db83c4b41a7aa596fd8b917 (patch)
tree6ffc2baeab8e8afac06fb09e1ea310a74bff6310 /framework/java/android/bluetooth/BluetoothAdapter.java
parentd3bdf0f78d75c4795b91333c7a2741e6032da164 (diff)
parente2f11e80d164ec1aa3aab66dc3f224c29aae675a (diff)
Merge "Store Binder.clearCallingIdentity value as final var" am: e2f11e80d1
Original change: https://android-review.googlesource.com/c/platform/packages/modules/Bluetooth/+/2049285 Change-Id: I5a5016e3620ff82d4f9b6a7034c0d82021ebf841 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
Diffstat (limited to 'framework/java/android/bluetooth/BluetoothAdapter.java')
-rw-r--r--framework/java/android/bluetooth/BluetoothAdapter.java50
1 files changed, 38 insertions, 12 deletions
diff --git a/framework/java/android/bluetooth/BluetoothAdapter.java b/framework/java/android/bluetooth/BluetoothAdapter.java
index 0db80ad786..9d391a03fd 100644
--- a/framework/java/android/bluetooth/BluetoothAdapter.java
+++ b/framework/java/android/bluetooth/BluetoothAdapter.java
@@ -880,16 +880,43 @@ public final class BluetoothAdapter {
}
executor = mExecutor;
callback = mCallback;
- // null out to allow garbage collection, prevent triggering callback more than once
mExecutor = null;
mCallback = null;
}
- Binder.clearCallingIdentity();
- if (info == null) {
+ final long identity = Binder.clearCallingIdentity();
+ try {
+ if (info == null) {
+ executor.execute(() -> callback.onBluetoothActivityEnergyInfoError(
+ BluetoothStatusCodes.FEATURE_NOT_SUPPORTED));
+ } else {
+ executor.execute(() -> callback.onBluetoothActivityEnergyInfoAvailable(info));
+ }
+ } finally {
+ Binder.restoreCallingIdentity(identity);
+ }
+ }
+
+ /**
+ * Framework only method that is called when the service can't be reached.
+ */
+ public void onError(int errorCode) {
+ Executor executor;
+ OnBluetoothActivityEnergyInfoCallback callback;
+ synchronized (mLock) {
+ if (mExecutor == null || mCallback == null) {
+ return;
+ }
+ executor = mExecutor;
+ callback = mCallback;
+ mExecutor = null;
+ mCallback = null;
+ }
+ final long identity = Binder.clearCallingIdentity();
+ try {
executor.execute(() -> callback.onBluetoothActivityEnergyInfoError(
- BluetoothStatusCodes.FEATURE_NOT_SUPPORTED));
- } else {
- executor.execute(() -> callback.onBluetoothActivityEnergyInfoAvailable(info));
+ errorCode));
+ } finally {
+ Binder.restoreCallingIdentity(identity);
}
}
}
@@ -2780,21 +2807,20 @@ public final class BluetoothAdapter {
@NonNull OnBluetoothActivityEnergyInfoCallback callback) {
requireNonNull(executor, "executor cannot be null");
requireNonNull(callback, "callback cannot be null");
+ OnBluetoothActivityEnergyInfoProxy proxy =
+ new OnBluetoothActivityEnergyInfoProxy(executor, callback);
try {
mServiceLock.readLock().lock();
if (mService != null) {
mService.requestActivityInfo(
- new OnBluetoothActivityEnergyInfoProxy(executor, callback),
+ proxy,
mAttributionSource);
} else {
- executor.execute(() -> callback.onBluetoothActivityEnergyInfoError(
- BluetoothStatusCodes.ERROR_PROFILE_SERVICE_NOT_BOUND));
+ proxy.onError(BluetoothStatusCodes.ERROR_PROFILE_SERVICE_NOT_BOUND);
}
} catch (RemoteException e) {
Log.e(TAG, "getControllerActivityEnergyInfoCallback: " + e);
- Binder.clearCallingIdentity();
- executor.execute(() -> callback.onBluetoothActivityEnergyInfoError(
- BluetoothStatusCodes.ERROR_UNKNOWN));
+ proxy.onError(BluetoothStatusCodes.ERROR_UNKNOWN);
} finally {
mServiceLock.readLock().unlock();
}