blob: d42fbf4054104ed10e0efbbeea9479fb7b0ef53c [file] [log] [blame]
/*
* Copyright (C) 2021 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.NonNull;
import android.annotation.Nullable;
import android.nearby.aidl.FastPairAccountKeyDeviceMetadataParcel;
/**
* Class for metadata of a Fast Pair device associated with an account.
*
* @hide
*/
public class FastPairAccountKeyDeviceMetadata {
FastPairAccountKeyDeviceMetadataParcel mMetadataParcel;
FastPairAccountKeyDeviceMetadata(FastPairAccountKeyDeviceMetadataParcel metadataParcel) {
this.mMetadataParcel = metadataParcel;
}
/**
* Get Device Account Key, which uniquely identifies a Fast Pair device associated with an
* account. AccountKey is 16 bytes: first byte is 0x04. Other 15 bytes are randomly generated.
*
* @return 16-byte Account Key.
* @hide
*/
@Nullable
public byte[] getDeviceAccountKey() {
return mMetadataParcel.deviceAccountKey;
}
/**
* Get a hash value of device's account key and public bluetooth address without revealing the
* public bluetooth address. Sha256 hash value is 32 bytes.
*
* @return 32-byte Sha256 hash value.
* @hide
*/
@Nullable
public byte[] getSha256DeviceAccountKeyPublicAddress() {
return mMetadataParcel.sha256DeviceAccountKeyPublicAddress;
}
/**
* Get metadata of a Fast Pair device type.
*
* @hide
*/
@Nullable
public FastPairDeviceMetadata getFastPairDeviceMetadata() {
if (mMetadataParcel.metadata == null) {
return null;
}
return new FastPairDeviceMetadata(mMetadataParcel.metadata);
}
/**
* Get Fast Pair discovery item, which is tied to both the device type and the account.
*
* @hide
*/
@Nullable
public FastPairDiscoveryItem getFastPairDiscoveryItem() {
if (mMetadataParcel.discoveryItem == null) {
return null;
}
return new FastPairDiscoveryItem(mMetadataParcel.discoveryItem);
}
/**
* Builder used to create FastPairAccountKeyDeviceMetadata.
*
* @hide
*/
public static final class Builder {
private final FastPairAccountKeyDeviceMetadataParcel mBuilderParcel;
/**
* Default constructor of Builder.
*
* @hide
*/
public Builder() {
mBuilderParcel = new FastPairAccountKeyDeviceMetadataParcel();
mBuilderParcel.deviceAccountKey = null;
mBuilderParcel.sha256DeviceAccountKeyPublicAddress = null;
mBuilderParcel.metadata = null;
mBuilderParcel.discoveryItem = null;
}
/**
* Set Account Key.
*
* @param deviceAccountKey Fast Pair device account key, which is 16 bytes: first byte is
* 0x04. Next 15 bytes are randomly generated.
* @return The builder, to facilitate chaining {@code builder.setXXX(..).setXXX(..)}.
* @hide
*/
@NonNull
public Builder setDeviceAccountKey(@Nullable byte[] deviceAccountKey) {
mBuilderParcel.deviceAccountKey = deviceAccountKey;
return this;
}
/**
* Set sha256 hash value of account key and public bluetooth address.
*
* @param sha256DeviceAccountKeyPublicAddress 32-byte sha256 hash value of account key and
* public bluetooth address.
* @return The builder, to facilitate chaining {@code builder.setXXX(..).setXXX(..)}.
* @hide
*/
@NonNull
public Builder setSha256DeviceAccountKeyPublicAddress(
@Nullable byte[] sha256DeviceAccountKeyPublicAddress) {
mBuilderParcel.sha256DeviceAccountKeyPublicAddress =
sha256DeviceAccountKeyPublicAddress;
return this;
}
/**
* Set Fast Pair metadata.
*
* @param metadata Fast Pair metadata.
* @return The builder, to facilitate chaining {@code builder.setXXX(..).setXXX(..)}.
* @hide
*/
@NonNull
public Builder setFastPairDeviceMetadata(@Nullable FastPairDeviceMetadata metadata) {
if (metadata == null) {
mBuilderParcel.metadata = null;
} else {
mBuilderParcel.metadata = metadata.mMetadataParcel;
}
return this;
}
/**
* Set Fast Pair discovery item.
*
* @param discoveryItem Fast Pair discovery item.
* @return The builder, to facilitate chaining {@code builder.setXXX(..).setXXX(..)}.
* @hide
*/
@NonNull
public Builder setFastPairDiscoveryItem(@Nullable FastPairDiscoveryItem discoveryItem) {
if (discoveryItem == null) {
mBuilderParcel.discoveryItem = null;
} else {
mBuilderParcel.discoveryItem = discoveryItem.mMetadataParcel;
}
return this;
}
/**
* Build {@link FastPairAccountKeyDeviceMetadata} with the currently set configuration.
*
* @hide
*/
@NonNull
public FastPairAccountKeyDeviceMetadata build() {
return new FastPairAccountKeyDeviceMetadata(mBuilderParcel);
}
}
}