blob: f1bd2c310197ca93d4781f62d3f8eef8cacb8179 [file] [log] [blame]
/******************************************************************************
* 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;
/**
* 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 List <BluetoothDevice> mGroupDevices = new ArrayList<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 = 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];
}
};
}