176 lines
5.0 KiB
Java
176 lines
5.0 KiB
Java
/*
|
|
* Copyright (C) 2022 The Android Open Source Project
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
package android.nearby;
|
|
|
|
import android.annotation.IntDef;
|
|
import android.annotation.IntRange;
|
|
import android.annotation.NonNull;
|
|
import android.annotation.SystemApi;
|
|
import android.os.Parcel;
|
|
|
|
import java.lang.annotation.Retention;
|
|
import java.lang.annotation.RetentionPolicy;
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
|
|
/**
|
|
* Represents a {@link BroadcastRequest}.
|
|
*
|
|
* @hide
|
|
*/
|
|
@SystemApi
|
|
public abstract class BroadcastRequest {
|
|
|
|
/** An unknown nearby broadcast request type. */
|
|
public static final int BROADCAST_TYPE_UNKNOWN = -1;
|
|
|
|
/** Broadcast type for advertising using nearby presence protocol. */
|
|
public static final int BROADCAST_TYPE_NEARBY_PRESENCE = 3;
|
|
|
|
/** @hide **/
|
|
// Currently, only Nearby Presence broadcast is supported, in the future
|
|
// broadcasting using other nearby specifications will be added.
|
|
@Retention(RetentionPolicy.SOURCE)
|
|
@IntDef({BROADCAST_TYPE_UNKNOWN, BROADCAST_TYPE_NEARBY_PRESENCE})
|
|
public @interface BroadcastType {
|
|
}
|
|
|
|
/**
|
|
* Tx Power when the value is not set in the broadcast.
|
|
*/
|
|
public static final int UNKNOWN_TX_POWER = -127;
|
|
|
|
/**
|
|
* An unknown version of presence broadcast request.
|
|
*/
|
|
public static final int PRESENCE_VERSION_UNKNOWN = -1;
|
|
|
|
/**
|
|
* A legacy presence version that is only suitable for legacy (31 bytes) BLE advertisements.
|
|
* This exists to support legacy presence version, and not recommended for use.
|
|
*/
|
|
public static final int PRESENCE_VERSION_V0 = 0;
|
|
|
|
/**
|
|
* V1 of Nearby Presence Protocol. This version supports both legacy (31 bytes) BLE
|
|
* advertisements, and extended BLE advertisements.
|
|
*/
|
|
public static final int PRESENCE_VERSION_V1 = 1;
|
|
|
|
/** @hide **/
|
|
@Retention(RetentionPolicy.SOURCE)
|
|
@IntDef({PRESENCE_VERSION_UNKNOWN, PRESENCE_VERSION_V0, PRESENCE_VERSION_V1})
|
|
public @interface BroadcastVersion {
|
|
}
|
|
|
|
/**
|
|
* Broadcast the request using the Bluetooth Low Energy (BLE) medium.
|
|
*/
|
|
public static final int MEDIUM_BLE = 1;
|
|
|
|
/**
|
|
* The medium where the broadcast request should be sent.
|
|
*
|
|
* @hide
|
|
*/
|
|
@IntDef({MEDIUM_BLE})
|
|
@Retention(RetentionPolicy.SOURCE)
|
|
public @interface Medium {}
|
|
|
|
/**
|
|
* Creates a {@link BroadcastRequest} from parcel.
|
|
*
|
|
* @hide
|
|
*/
|
|
@NonNull
|
|
public static BroadcastRequest createFromParcel(Parcel in) {
|
|
int type = in.readInt();
|
|
switch (type) {
|
|
case BroadcastRequest.BROADCAST_TYPE_NEARBY_PRESENCE:
|
|
return PresenceBroadcastRequest.createFromParcelBody(in);
|
|
default:
|
|
throw new IllegalStateException(
|
|
"Unexpected broadcast type (value " + type + ") in parcel.");
|
|
}
|
|
}
|
|
|
|
private final @BroadcastType int mType;
|
|
private final @BroadcastVersion int mVersion;
|
|
private final int mTxPower;
|
|
private final @Medium List<Integer> mMediums;
|
|
|
|
BroadcastRequest(@BroadcastType int type, @BroadcastVersion int version, int txPower,
|
|
@Medium List<Integer> mediums) {
|
|
this.mType = type;
|
|
this.mVersion = version;
|
|
this.mTxPower = txPower;
|
|
this.mMediums = mediums;
|
|
}
|
|
|
|
BroadcastRequest(@BroadcastType int type, Parcel in) {
|
|
mType = type;
|
|
mVersion = in.readInt();
|
|
mTxPower = in.readInt();
|
|
mMediums = new ArrayList<>();
|
|
in.readList(mMediums, Integer.class.getClassLoader(), Integer.class);
|
|
}
|
|
|
|
/**
|
|
* Returns the type of the broadcast.
|
|
*/
|
|
public @BroadcastType int getType() {
|
|
return mType;
|
|
}
|
|
|
|
/**
|
|
* Returns the version of the broadcast.
|
|
*/
|
|
public @BroadcastVersion int getVersion() {
|
|
return mVersion;
|
|
}
|
|
|
|
/**
|
|
* Returns the calibrated TX power when this request is broadcast.
|
|
*/
|
|
@IntRange(from = -127, to = 126)
|
|
public int getTxPower() {
|
|
return mTxPower;
|
|
}
|
|
|
|
/**
|
|
* Returns the list of broadcast mediums. A medium represents the channel on which the broadcast
|
|
* request is sent.
|
|
*/
|
|
@NonNull
|
|
@Medium
|
|
public List<Integer> getMediums() {
|
|
return mMediums;
|
|
}
|
|
|
|
/**
|
|
* Writes the BroadcastRequest to the parcel.
|
|
*
|
|
* @hide
|
|
*/
|
|
public void writeToParcel(@NonNull Parcel dest, int flags) {
|
|
dest.writeInt(mType);
|
|
dest.writeInt(mVersion);
|
|
dest.writeInt(mTxPower);
|
|
dest.writeList(mMediums);
|
|
}
|
|
}
|