diff options
author | Subramanian Srinivasan <quic_subrsrin@quicinc.com> | 2021-11-23 15:41:05 -0800 |
---|---|---|
committer | Subramanian Srinivasan <quic_subrsrin@quicinc.com> | 2022-01-24 22:07:55 -0800 |
commit | 7efe6b5efa14b5c6d184cb0942ac355742325bba (patch) | |
tree | f89f0bd141d69a98ebe940246a8f593844db5c0c /framework/java/android/bluetooth/le/PeriodicAdvertisingManager.java | |
parent | 04ec65f09625b408866b4724e27cdd2f1ea0e2e3 (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.java | 83 |
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); + } + }); + } }; } } |