diff options
author | Deyao Ren <deyaoren@google.com> | 2022-03-07 19:26:56 +0000 |
---|---|---|
committer | Deyao Ren <deyaoren@google.com> | 2022-03-07 19:39:27 +0000 |
commit | a26bda4d37221f2f7ef750b413502091e3bcddd4 (patch) | |
tree | 3b525e14dd767931b5f004e6b694a83ced2dc28d /framework/java/android/bluetooth/DeviceGroup.java | |
parent | 813ac5fee4ed39e947e041c9a161f60f9ace49b0 (diff) | |
parent | 260f34b984915be6f8bea511be1f0bbd22c933d9 (diff) |
Merge TP1A.220209.001
Change-Id: Id0e2895d3220831d2c617a243047e8229af8acc9
Diffstat (limited to 'framework/java/android/bluetooth/DeviceGroup.java')
-rw-r--r-- | framework/java/android/bluetooth/DeviceGroup.java | 177 |
1 files changed, 177 insertions, 0 deletions
diff --git a/framework/java/android/bluetooth/DeviceGroup.java b/framework/java/android/bluetooth/DeviceGroup.java new file mode 100644 index 0000000000..0dac87f3d8 --- /dev/null +++ b/framework/java/android/bluetooth/DeviceGroup.java @@ -0,0 +1,177 @@ +/****************************************************************************** + * Copyright (c) 2020, The Linux Foundation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. + * * Neither the name of The Linux Foundation nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR + * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN + * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +package android.bluetooth; + +import android.os.Parcel; +import android.os.Parcelable; +import android.os.ParcelUuid; + +import java.util.Arrays; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.UUID; +import java.util.concurrent.CopyOnWriteArrayList; + +/** + * Provides Device Group details. + * + * {@see BluetoothDeviceGroup} + * @hide + * + */ + +public final class DeviceGroup implements Parcelable { + /** Identifier of the Device Group */ + private int mGroupId; + /** Size of the Device Group. */ + private int mSize; + /** List of all group devices {@link BluetoothDevice} */ + private CopyOnWriteArrayList <BluetoothDevice> mGroupDevices + = new CopyOnWriteArrayList<BluetoothDevice>(); + /** Primary Service UUID which has included required Device Group service*/ + private final ParcelUuid mIncludingSrvcUUID; + /** Suggests whether exclusive access can be taken for this device group */ + private final boolean mExclusiveAccessSupport; + + /** + * Constructor. + * @hide + */ + public DeviceGroup(int groupId, int size, List<BluetoothDevice> groupDevices, + ParcelUuid includingSrvcUUID, boolean exclusiveAccessSupport) { + mGroupId = groupId; + mSize = size; + mGroupDevices.addAll(groupDevices); + mIncludingSrvcUUID = includingSrvcUUID; + mExclusiveAccessSupport = exclusiveAccessSupport; + } + + public DeviceGroup(Parcel in) { + mGroupId = in.readInt(); + mSize = in.readInt(); + in.readList(mGroupDevices, BluetoothDevice.class.getClassLoader()); + mIncludingSrvcUUID = in.readParcelable(ParcelUuid.class.getClassLoader()); + mExclusiveAccessSupport = in.readBoolean(); + } + + /** + * Used to retrieve identifier of the Device Group. + * + * @return Identifier of the Device Group. + */ + public int getDeviceGroupId() { + return mGroupId; + } + + /** + * Used to know total number group devices which are part of this Device Group. + * + * @return size of the Device Group + */ + public int getDeviceGroupSize() { + return mSize; + } + + /** + * Indicates total number of group devices discovered in Group Discovery procedure. + * + * @return total group devices discovered in the Device Group. + */ + public int getTotalDiscoveredGroupDevices() { + return mGroupDevices.size(); + } + + + /** + * Used to fetch group devices of the Device Group. + * + *@return List of group devices {@link BluetoothDevice} in the Device Group. + */ + public List<BluetoothDevice> getDeviceGroupMembers() { + return mGroupDevices; + } + + /** + * Suggests primary GATT service which has included this DeviceGroup Service + * for this device group. If remote device is part of multiple Device Groups then + * this uuid cant be null. If remote device is part of only one device froup + * then this returned parameter can be null. + * + *@return UUID of the GATT primary Service which has included this device group. + */ + public ParcelUuid getIncludingServiceUUID() { + return mIncludingSrvcUUID; + } + + /** + * Suggests whether exclusive access is supported by this Device Group. + * + * @return true, if exclusive access operation is supported by this Device Group. + * Otherwise, false. + */ + public boolean isExclusiveAccessSupported() { + return mExclusiveAccessSupport; + } + + /** + * Indicates whether all devices of this Device Group are discovered. + * + * @return true, if all group devices are discovered. Otherwise, false. + */ + public boolean isGroupDiscoveredCompleted() { + return (mSize == getTotalDiscoveredGroupDevices()); + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + dest.writeInt(mGroupId); + dest.writeInt(mSize); + dest.writeList(mGroupDevices); + dest.writeParcelable(mIncludingSrvcUUID, 0); + dest.writeBoolean(mExclusiveAccessSupport); + } + + @Override + public int describeContents() { + return 0; + } + + public static final Parcelable.Creator<DeviceGroup> CREATOR = + new Parcelable.Creator<DeviceGroup>() { + public DeviceGroup createFromParcel(Parcel in) { + return new DeviceGroup(in); + } + + public DeviceGroup[] newArray(int size) { + return new DeviceGroup[size]; + } + }; +} |