summaryrefslogtreecommitdiff
path: root/framework/java/android/bluetooth/le/PeriodicAdvertisingManager.java
diff options
context:
space:
mode:
authorSubramanian Srinivasan <quic_subrsrin@quicinc.com>2021-11-23 15:41:05 -0800
committerSubramanian Srinivasan <quic_subrsrin@quicinc.com>2022-01-24 22:07:55 -0800
commit7efe6b5efa14b5c6d184cb0942ac355742325bba (patch)
treef89f0bd141d69a98ebe940246a8f593844db5c0c /framework/java/android/bluetooth/le/PeriodicAdvertisingManager.java
parent04ec65f09625b408866b4724e27cdd2f1ea0e2e3 (diff)
Periodic sync and PAST implementation
Bug: 208222454 Test: compile Tag: #feature sponsor: siyuanh@ Change-Id: I443958d5fd61fe00f7de5c755aca98c5087b9a1d
Diffstat (limited to 'framework/java/android/bluetooth/le/PeriodicAdvertisingManager.java')
-rw-r--r--framework/java/android/bluetooth/le/PeriodicAdvertisingManager.java83
1 files changed, 83 insertions, 0 deletions
diff --git a/framework/java/android/bluetooth/le/PeriodicAdvertisingManager.java b/framework/java/android/bluetooth/le/PeriodicAdvertisingManager.java
index bbd31170bb..f0ef8b9d11 100644
--- a/framework/java/android/bluetooth/le/PeriodicAdvertisingManager.java
+++ b/framework/java/android/bluetooth/le/PeriodicAdvertisingManager.java
@@ -16,6 +16,7 @@
package android.bluetooth.le;
+import android.annotation.Nullable;
import android.annotation.RequiresPermission;
import android.annotation.SuppressLint;
import android.bluetooth.Attributable;
@@ -215,6 +216,79 @@ public final class PeriodicAdvertisingManager {
}
}
+ /**
+ * Transfer periodic sync
+ *
+ * @hide
+ */
+ public void transferSync(BluetoothDevice bda, int serviceData, int syncHandle) {
+ IBluetoothGatt gatt;
+ try {
+ gatt = mBluetoothManager.getBluetoothGatt();
+ } catch (RemoteException e) {
+ Log.e(TAG, "Failed to get Bluetooth gatt - ", e);
+ PeriodicAdvertisingCallback callback = null;
+ for (PeriodicAdvertisingCallback cb : mCallbackWrappers.keySet()) {
+ callback = cb;
+ }
+ if (callback != null) {
+ callback.onSyncTransferred(bda,
+ PeriodicAdvertisingCallback.SYNC_NO_RESOURCES);
+ }
+ return;
+ }
+ try {
+ gatt.transferSync(bda, serviceData , syncHandle, mAttributionSource);
+ } catch (RemoteException e) {
+ Log.e(TAG, "Failed to register sync - ", e);
+ return;
+ }
+ }
+
+ /**
+ * Transfer set info
+ *
+ * @hide
+ */
+ public void transferSetInfo(BluetoothDevice bda, int serviceData,
+ int advHandle, PeriodicAdvertisingCallback callback) {
+ transferSetInfo(bda, serviceData, advHandle, callback, null);
+ }
+
+ /**
+ * Transfer set info
+ *
+ * @hide
+ */
+ public void transferSetInfo(BluetoothDevice bda, int serviceData,
+ int advHandle, PeriodicAdvertisingCallback callback,
+ @Nullable Handler handler) {
+ if (callback == null) {
+ throw new IllegalArgumentException("callback can't be null");
+ }
+ IBluetoothGatt gatt;
+ try {
+ gatt = mBluetoothManager.getBluetoothGatt();
+ } catch (RemoteException e) {
+ Log.e(TAG, "Failed to get Bluetooth gatt - ", e);
+ return;
+ }
+ if (handler == null) {
+ handler = new Handler(Looper.getMainLooper());
+ }
+ IPeriodicAdvertisingCallback wrapper = wrap(callback, handler);
+ if (wrapper == null) {
+ throw new IllegalArgumentException("callback was not properly registered");
+ }
+ try {
+ gatt.transferSetInfo(bda, serviceData , advHandle, wrapper, mAttributionSource);
+ } catch (RemoteException e) {
+ Log.e(TAG, "Failed to register sync - ", e);
+ return;
+ }
+
+ }
+
@SuppressLint("AndroidFrameworkBluetoothPermission")
private IPeriodicAdvertisingCallback wrap(PeriodicAdvertisingCallback callback,
Handler handler) {
@@ -259,6 +333,15 @@ public final class PeriodicAdvertisingManager {
}
});
}
+
+ public void onSyncTransferred(BluetoothDevice device, int status) {
+ handler.post(new Runnable() {
+ @Override
+ public void run() {
+ callback.onSyncTransferred(device, status);
+ }
+ });
+ }
};
}
}