Address API review feedback.

* Byte array parameters have no format specification.
* Consider using more appropriate types (e.g. Icon for setImage) or if not possible, specify the format.
* Request javadoc needs to explain what is being requested.
* getModelId has no documentation of the format of the result array.
* FastPairDeviceMetadata: javadoc needs to explain what is being returned by each method

Bug: 218682005
Test: existing CTS/UNIT test
Change-Id: I50ab7835bd366efc32a8548ebfb1855e7b0ba970
diff --git a/nearby/framework/java/android/nearby/FastPairAccountKeyDeviceMetadata.java b/nearby/framework/java/android/nearby/FastPairAccountKeyDeviceMetadata.java
index 8861d90..160ad75 100644
--- a/nearby/framework/java/android/nearby/FastPairAccountKeyDeviceMetadata.java
+++ b/nearby/framework/java/android/nearby/FastPairAccountKeyDeviceMetadata.java
@@ -37,8 +37,12 @@
 
     /**
      * Get Device Account Key, which uniquely identifies a Fast Pair device associated with an
-     * account.
+     * account. AccountKey is 16 bytes: first byte is 0x04. Other 15 bytes are randomly generated.
+     *
+     * @return 16-byte Account Key.
+     * @hide
      */
+    @SystemApi
     @Nullable
     public byte[] getDeviceAccountKey() {
         return mMetadataParcel.deviceAccountKey;
@@ -46,8 +50,12 @@
 
     /**
      * Get a hash value of device's account key and public bluetooth address without revealing the
-     * public bluetooth address.
+     * public bluetooth address. Sha256 hash value is 32 bytes.
+     *
+     * @return 32-byte Sha256 hash value.
+     * @hide
      */
+    @SystemApi
     @Nullable
     public byte[] getSha256DeviceAccountKeyPublicAddress() {
         return mMetadataParcel.sha256DeviceAccountKeyPublicAddress;
@@ -55,7 +63,10 @@
 
     /**
      * Get metadata of a Fast Pair device type.
+     *
+     * @hide
      */
+    @SystemApi
     @Nullable
     public FastPairDeviceMetadata getFastPairDeviceMetadata() {
         if (mMetadataParcel.metadata == null) {
@@ -66,7 +77,10 @@
 
     /**
      * Get Fast Pair discovery item, which is tied to both the device type and the account.
+     *
+     * @hide
      */
+    @SystemApi
     @Nullable
     public FastPairDiscoveryItem getFastPairDiscoveryItem() {
         if (mMetadataParcel.discoveryItem == null) {
@@ -77,14 +91,20 @@
 
     /**
      * Builder used to create FastPairAccountKeyDeviceMetadata.
+     *
+     * @hide
      */
+    @SystemApi
     public static final class Builder {
 
         private final FastPairAccountKeyDeviceMetadataParcel mBuilderParcel;
 
         /**
          * Default constructor of Builder.
+         *
+         * @hide
          */
+        @SystemApi
         public Builder() {
             mBuilderParcel = new FastPairAccountKeyDeviceMetadataParcel();
             mBuilderParcel.deviceAccountKey = null;
@@ -96,9 +116,12 @@
         /**
          * Set Account Key.
          *
-         * @param deviceAccountKey Fast Pair device 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
          */
+        @SystemApi
         @NonNull
         public Builder setDeviceAccountKey(@Nullable byte[] deviceAccountKey) {
             mBuilderParcel.deviceAccountKey = deviceAccountKey;
@@ -106,12 +129,14 @@
         }
 
         /**
-         * Set sha256 account key and  public address.
+         * Set sha256 hash value of account key and public bluetooth address.
          *
-         * @param sha256DeviceAccountKeyPublicAddress Hash value of device's account key and public
-         *                                            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
          */
+        @SystemApi
         @NonNull
         public Builder setSha256DeviceAccountKeyPublicAddress(
                 @Nullable byte[] sha256DeviceAccountKeyPublicAddress) {
@@ -126,7 +151,9 @@
          *
          * @param metadata Fast Pair metadata.
          * @return The builder, to facilitate chaining {@code builder.setXXX(..).setXXX(..)}.
+         * @hide
          */
+        @SystemApi
         @NonNull
         public Builder setFastPairDeviceMetadata(@Nullable FastPairDeviceMetadata metadata) {
             if (metadata == null) {
@@ -142,7 +169,9 @@
          *
          * @param discoveryItem Fast Pair discovery item.
          * @return The builder, to facilitate chaining {@code builder.setXXX(..).setXXX(..)}.
+         * @hide
          */
+        @SystemApi
         @NonNull
         public Builder setFastPairDiscoveryItem(@Nullable FastPairDiscoveryItem discoveryItem) {
             if (discoveryItem == null) {
@@ -155,7 +184,10 @@
 
         /**
          * Build {@link FastPairAccountKeyDeviceMetadata} with the currently set configuration.
+         *
+         * @hide
          */
+        @SystemApi
         @NonNull
         public FastPairAccountKeyDeviceMetadata build() {
             return new FastPairAccountKeyDeviceMetadata(mBuilderParcel);
diff --git a/nearby/framework/java/android/nearby/FastPairAntispoofKeyDeviceMetadata.java b/nearby/framework/java/android/nearby/FastPairAntispoofKeyDeviceMetadata.java
index ace00d4..1837671 100644
--- a/nearby/framework/java/android/nearby/FastPairAntispoofKeyDeviceMetadata.java
+++ b/nearby/framework/java/android/nearby/FastPairAntispoofKeyDeviceMetadata.java
@@ -17,7 +17,6 @@
 
 import android.annotation.NonNull;
 import android.annotation.Nullable;
-import android.annotation.SuppressLint;
 import android.annotation.SystemApi;
 import android.nearby.aidl.FastPairAntispoofKeyDeviceMetadataParcel;
 
@@ -62,14 +61,20 @@
 
     /**
      * Builder used to create FastPairAntispoofkeyDeviceMetadata.
+     *
+     * @hide
      */
+    @SystemApi
     public static final class Builder {
 
         private final FastPairAntispoofKeyDeviceMetadataParcel mBuilderParcel;
 
         /**
          * Default constructor of Builder.
+         *
+         * @hide
          */
+        @SystemApi
         public Builder() {
             mBuilderParcel = new FastPairAntispoofKeyDeviceMetadataParcel();
             mBuilderParcel.antispoofPublicKey = null;
@@ -79,10 +84,11 @@
         /**
          * Set AntiSpoof public key, which uniquely identify a Fast Pair device type.
          *
-         * @param antispoofPublicKey AntiSpoof public key.
+         * @param antispoofPublicKey is 64 bytes, see <a href="https://developers.google.com/nearby/fast-pair/spec#data_format">Data Format</a>.
          * @return The builder, to facilitate chaining {@code builder.setXXX(..).setXXX(..)}.
+         * @hide
          */
-        @SuppressLint("MissingGetterMatchingBuilder")
+        @SystemApi
         @NonNull
         public Builder setAntispoofPublicKey(@Nullable byte[] antispoofPublicKey) {
             mBuilderParcel.antispoofPublicKey = antispoofPublicKey;
@@ -95,8 +101,9 @@
          *
          * @param metadata Fast Pair device meta data.
          * @return The builder, to facilitate chaining {@code builder.setXXX(..).setXXX(..)}.
+         * @hide
          */
-        @SuppressLint("MissingGetterMatchingBuilder")
+        @SystemApi
         @NonNull
         public Builder setFastPairDeviceMetadata(@Nullable FastPairDeviceMetadata metadata) {
             if (metadata != null) {
@@ -109,7 +116,10 @@
 
         /**
          * Build {@link FastPairAntispoofKeyDeviceMetadata} with the currently set configuration.
+         *
+         * @hide
          */
+        @SystemApi
         @NonNull
         public FastPairAntispoofKeyDeviceMetadata build() {
             return new FastPairAntispoofKeyDeviceMetadata(mBuilderParcel);
diff --git a/nearby/framework/java/android/nearby/FastPairDataProviderBase.java b/nearby/framework/java/android/nearby/FastPairDataProviderBase.java
index abf0857..6aba3e3 100644
--- a/nearby/framework/java/android/nearby/FastPairDataProviderBase.java
+++ b/nearby/framework/java/android/nearby/FastPairDataProviderBase.java
@@ -62,17 +62,27 @@
     /**
      * The action the wrapping service should have in its intent filter to implement the
      * {@link android.nearby.FastPairDataProviderBase}.
+     *
+     * @hide
      */
+    @SystemApi
     public static final String ACTION_FAST_PAIR_DATA_PROVIDER =
             "android.nearby.action.FAST_PAIR_DATA_PROVIDER";
 
     /**
      * Manage request type to add, or opt-in.
+     *
+     * @hide
      */
+    @SystemApi
     public static final int MANAGE_REQUEST_ADD = 0;
+
     /**
      * Manage request type to remove, or opt-out.
+     *
+     * @hide
      */
+    @SystemApi
     public static final int MANAGE_REQUEST_REMOVE = 1;
 
     /**
@@ -84,9 +94,22 @@
             MANAGE_REQUEST_REMOVE})
     @interface ManageRequestType {}
 
-
+    /**
+     * Error code for bad request.
+     *
+     * @hide
+     */
+    @SystemApi
     public static final int ERROR_CODE_BAD_REQUEST = 0;
+
+    /**
+     * Error code for internal error.
+     *
+     * @hide
+     */
+    @SystemApi
     public static final int ERROR_CODE_INTERNAL_ERROR = 1;
+
     /**
      * @hide
      */
@@ -103,7 +126,9 @@
      * Constructor of FastPairDataProviderBase.
      *
      * @param tag TAG for on device logging.
+     * @hide
      */
+    @SystemApi
     public FastPairDataProviderBase(@NonNull String tag) {
         mBinder = new Service();
         mTag = tag;
@@ -111,61 +136,110 @@
 
     /**
      * Callback to be invoked when an AntispoofKeyed device metadata is loaded.
+     *
+     * @hide
      */
+    @SystemApi
     public interface FastPairAntispoofKeyDeviceMetadataCallback {
 
         /**
          * Invoked once the meta data is loaded.
+         *
+         * @hide
          */
+        @SystemApi
         void onFastPairAntispoofKeyDeviceMetadataReceived(
                 @NonNull FastPairAntispoofKeyDeviceMetadata metadata);
-        /** Invoked in case of error. */
+
+        /** Invoked in case of error.
+         *
+         * @hide
+         */
+        @SystemApi
         void onError(@ErrorCode int code, @Nullable String message);
     }
 
     /**
      * Callback to be invoked when Fast Pair devices of a given account is loaded.
+     *
+     * @hide
      */
+    @SystemApi
     public interface FastPairAccountDevicesMetadataCallback {
 
         /**
          * Should be invoked once the metadatas are loaded.
+         *
+         * @hide
          */
+        @SystemApi
         void onFastPairAccountDevicesMetadataReceived(
                 @NonNull Collection<FastPairAccountKeyDeviceMetadata> metadatas);
-        /** Invoked in case of error. */
+        /**
+         * Invoked in case of error.
+         *
+         * @hide
+         */
+        @SystemApi
         void onError(@ErrorCode int code, @Nullable String message);
     }
 
-    /** Callback to be invoked when FastPair eligible accounts are loaded. */
+    /**
+     * Callback to be invoked when FastPair eligible accounts are loaded.
+     *
+     * @hide
+     */
+    @SystemApi
     public interface FastPairEligibleAccountsCallback {
 
         /**
          * Should be invoked once the eligible accounts are loaded.
+         *
+         * @hide
          */
+        @SystemApi
         void onFastPairEligibleAccountsReceived(
                 @NonNull Collection<FastPairEligibleAccount> accounts);
-        /** Invoked in case of error. */
+        /**
+         * Invoked in case of error.
+         *
+         * @hide
+         */
+        @SystemApi
         void onError(@ErrorCode int code, @Nullable String message);
     }
 
     /**
      * Callback to be invoked when a management action is finished.
+     *
+     * @hide
      */
+    @SystemApi
     public interface FastPairManageActionCallback {
 
         /**
          * Should be invoked once the manage action is successful.
+         *
+         * @hide
          */
+        @SystemApi
         void onSuccess();
-        /** Invoked in case of error. */
+        /**
+         * Invoked in case of error.
+         *
+         * @hide
+         */
+        @SystemApi
         void onError(@ErrorCode int code, @Nullable String message);
     }
 
     /**
      * Fulfills the Fast Pair device metadata request by using callback to send back the
      * device meta data of a given modelId.
+     *
+     * @hide
      */
+    @SystemApi
     public abstract void onLoadFastPairAntispoofKeyDeviceMetadata(
             @NonNull FastPairAntispoofKeyDeviceMetadataRequest request,
             @NonNull FastPairAntispoofKeyDeviceMetadataCallback callback);
@@ -173,28 +247,41 @@
     /**
      * Fulfills the account tied Fast Pair devices metadata request by using callback to send back
      * all Fast Pair device's metadata of a given account.
+     *
+     * @hide
      */
+    @SystemApi
     public abstract void onLoadFastPairAccountDevicesMetadata(
             @NonNull FastPairAccountDevicesMetadataRequest request,
             @NonNull FastPairAccountDevicesMetadataCallback callback);
 
     /**
      * Fulfills the Fast Pair eligible accounts request by using callback to send back Fast Pair
-     * eligible accounts */
+     * eligible accounts.
+     *
+     * @hide
+     */
+    @SystemApi
     public abstract void onLoadFastPairEligibleAccounts(
             @NonNull FastPairEligibleAccountsRequest request,
             @NonNull FastPairEligibleAccountsCallback callback);
 
     /**
      * Fulfills the Fast Pair account management request by using callback to send back result.
+     *
+     * @hide
      */
+    @SystemApi
     public abstract void onManageFastPairAccount(
             @NonNull FastPairManageAccountRequest request,
             @NonNull FastPairManageActionCallback callback);
 
     /**
      * Fulfills the request to manage device-account mapping by using callback to send back result.
+     *
+     * @hide
      */
+    @SystemApi
     public abstract void onManageFastPairAccountDevice(
             @NonNull FastPairManageAccountDeviceRequest request,
             @NonNull FastPairManageActionCallback callback);
@@ -202,14 +289,22 @@
     /**
      * Returns the IBinder instance that should be returned from the {@link
      * android.app.Service#onBind(Intent)} method of the wrapping service.
+     *
+     * @hide
      */
+    @SystemApi
     public final @Nullable IBinder getBinder() {
         return mBinder;
     }
 
     /**
-     * Class for reading FastPairAntispoofKeyDeviceMetadataRequest.
+     * Class for reading FastPairAntispoofKeyDeviceMetadataRequest, which specifies the model ID of
+     * a Fast Pair device. To fulfill this request, corresponding
+     * {@link FastPairAntispoofKeyDeviceMetadata} should be fetched and returned.
+     *
+     * @hide
      */
+    @SystemApi
     public static class FastPairAntispoofKeyDeviceMetadataRequest {
 
         private final FastPairAntispoofKeyDeviceMetadataRequestParcel mMetadataRequestParcel;
@@ -219,7 +314,17 @@
             this.mMetadataRequestParcel = metaDataRequestParcel;
         }
 
-        /** Get modelId, the key for FastPairAntispoofKeyDeviceMetadata. */
+        /**
+         * Get modelId (24 bit), the key for FastPairAntispoofKeyDeviceMetadata in the same format
+         * returned by Google at device registration time.
+         *
+         * ModelId format is defined at device registration time, see
+         * <a href="https://developers.google.com/nearby/fast-pair/spec#model_id">Model ID</a>.
+         * @return raw bytes of modelId in the same format returned by Google at device registration
+         *         time.
+         * @hide
+         */
+        @SystemApi
         public @NonNull byte[] getModelId() {
             return this.mMetadataRequestParcel.modelId;
         }
@@ -238,7 +343,9 @@
      *
      * To retrieve metadata of a selected list of Fast Pair devices saved to an account, the caller
      * needs to set account with a non-empty allow list.
+     * @hide
      */
+    @SystemApi
     public static class FastPairAccountDevicesMetadataRequest {
 
         private final FastPairAccountDevicesMetadataRequestParcel mMetadataRequestParcel;
@@ -252,7 +359,9 @@
          * Get FastPair account, whose Fast Pair devices' metadata is requested.
          *
          * @return a FastPair account.
+         * @hide
          */
+        @SystemApi
         public @NonNull Account getAccount() {
             return this.mMetadataRequestParcel.account;
         }
@@ -262,8 +371,12 @@
          * Note that as a special case, empty list actually means all FastPair devices under the
          * account instead of none.
          *
+         * DeviceAccountKey is 16 bytes: first byte is 0x04. Other 15 bytes are randomly generated.
+         *
          * @return allowlist of Fast Pair devices using a collection of deviceAccountKeys.
+         * @hide
          */
+        @SystemApi
         public @NonNull Collection<byte[]> getDeviceAccountKeys()  {
             if (this.mMetadataRequestParcel.deviceAccountKeys == null) {
                 return new ArrayList<byte[]>(0);
@@ -277,7 +390,13 @@
         }
     }
 
-    /** Class for reading FastPairEligibleAccountsRequest. */
+    /**
+     *  Class for reading FastPairEligibleAccountsRequest. Upon receiving this request, Fast Pair
+     *  eligible accounts should be returned to bind Fast Pair devices.
+     *
+     * @hide
+     */
+    @SystemApi
     public static class FastPairEligibleAccountsRequest {
         @SuppressWarnings("UnusedVariable")
         private final FastPairEligibleAccountsRequestParcel mAccountsRequestParcel;
@@ -288,7 +407,15 @@
         }
     }
 
-    /** Class for reading FastPairManageAccountRequest. */
+    /**
+     * Class for reading FastPairManageAccountRequest. If the request type is MANAGE_REQUEST_ADD,
+     * the account is enabled to bind Fast Pair devices; If the request type is
+     * MANAGE_REQUEST_REMOVE, the account is disabled to bind more Fast Pair devices. Furthermore,
+     * all existing bounded Fast Pair devices are unbounded.
+     *
+     * @hide
+     */
+    @SystemApi
     public static class FastPairManageAccountRequest {
 
         private final FastPairManageAccountRequestParcel mAccountRequestParcel;
@@ -298,17 +425,35 @@
             this.mAccountRequestParcel = accountRequestParcel;
         }
 
-        /** Get request type: MANAGE_REQUEST_ADD, or MANAGE_REQUEST_REMOVE. */
+        /**
+         * Get request type: MANAGE_REQUEST_ADD, or MANAGE_REQUEST_REMOVE.
+         *
+         * @hide
+         */
+        @SystemApi
         public @ManageRequestType int getRequestType() {
             return this.mAccountRequestParcel.requestType;
         }
-        /** Get account. */
+        /**
+         * Get account.
+         *
+         * @hide
+         */
+        @SystemApi
         public @NonNull Account getAccount() {
             return this.mAccountRequestParcel.account;
         }
     }
 
-    /** Class for reading FastPairManageAccountDeviceRequest. */
+    /**
+     *  Class for reading FastPairManageAccountDeviceRequest. If the request type is
+     *  MANAGE_REQUEST_ADD, then a Fast Pair device is bounded to a Fast Pair account. If the
+     *  request type is MANAGE_REQUEST_REMOVE, then a Fast Pair device is removed from a Fast Pair
+     *  account.
+     *
+     * @hide
+     */
+    @SystemApi
     public static class FastPairManageAccountDeviceRequest {
 
         private final FastPairManageAccountDeviceRequestParcel mRequestParcel;
@@ -318,19 +463,39 @@
             this.mRequestParcel = requestParcel;
         }
 
-        /** Get request type: MANAGE_REQUEST_ADD, or MANAGE_REQUEST_REMOVE. */
+        /**
+         * Get request type: MANAGE_REQUEST_ADD, or MANAGE_REQUEST_REMOVE.
+         *
+         * @hide
+         */
+        @SystemApi
         public @ManageRequestType int getRequestType() {
             return this.mRequestParcel.requestType;
         }
-        /** Get account. */
+        /**
+         * Get account.
+         *
+         * @hide
+         */
+        @SystemApi
         public @NonNull Account getAccount() {
             return this.mRequestParcel.account;
         }
-        /** Get BleAddress. */
+        /**
+         * Get BleAddress.
+         *
+         * @hide
+         */
+        @SystemApi
         public @Nullable String getBleAddress() {
             return this.mRequestParcel.bleAddress;
         }
-        /** Get account key device metadata. */
+        /**
+         * Get account key device metadata.
+         *
+         * @hide
+         */
+        @SystemApi
         public @NonNull FastPairAccountKeyDeviceMetadata getAccountKeyDeviceMetadata() {
             return new FastPairAccountKeyDeviceMetadata(
                     this.mRequestParcel.accountKeyDeviceMetadata);
diff --git a/nearby/framework/java/android/nearby/FastPairDeviceMetadata.java b/nearby/framework/java/android/nearby/FastPairDeviceMetadata.java
index c051eb0..ea75271 100644
--- a/nearby/framework/java/android/nearby/FastPairDeviceMetadata.java
+++ b/nearby/framework/java/android/nearby/FastPairDeviceMetadata.java
@@ -37,53 +37,79 @@
     }
 
     /**
-     * Get ImageUlr.
+     * Get ImageUrl, which will be displayed in notification.
+     *
+     * @hide
      */
+    @SystemApi
     @Nullable
     public String getImageUrl() {
         return mMetadataParcel.imageUrl;
     }
 
     /**
-     * Get IntentUri.
+     * Get IntentUri, which will be launched to install companion app.
+     *
+     * @hide
      */
+    @SystemApi
     @Nullable
     public String getIntentUri() {
         return mMetadataParcel.intentUri;
     }
 
     /**
-     * Get ble transmission power.
+     * Get BLE transmit power, as described in Fast Pair spec, see
+     * <a href="https://developers.google.com/nearby/fast-pair/spec#transmit_power">Transmit Power</a>
+     *
+     * @hide
      */
+    @SystemApi
     public int getBleTxPower() {
         return mMetadataParcel.bleTxPower;
     }
 
     /**
-     * Get trigger distance.
+     * Get Fast Pair Half Sheet trigger distance in meters.
+     *
+     * @hide
      */
+    @SystemApi
     public float getTriggerDistance() {
         return mMetadataParcel.triggerDistance;
     }
 
     /**
-     * Get image.
+     * Get Fast Pair device image, which is submitted at device registration time to display on
+     * notification. It is a 32-bit PNG with dimensions of 512px by 512px.
+     *
+     * @return Fast Pair device image in 32-bit PNG with dimensions of 512px by 512px.
+     * @hide
      */
+    @SystemApi
     @Nullable
     public byte[] getImage() {
         return mMetadataParcel.image;
     }
 
     /**
-     * Get device type.
+     * Get Fast Pair device type.
+     * DEVICE_TYPE_UNSPECIFIED = 0;
+     * HEADPHONES = 1;
+     * TRUE_WIRELESS_HEADPHONES = 7;
+     * @hide
      */
+    @SystemApi
     public int getDeviceType() {
         return mMetadataParcel.deviceType;
     }
 
     /**
-     * Get device name.
+     * Get Fast Pair device name. e.g., "Pixel Buds A-Series".
+     *
+     * @hide
      */
+    @SystemApi
     @Nullable
     public String getName() {
         return mMetadataParcel.name;
@@ -91,7 +117,10 @@
 
     /**
      * Get true wireless image url for left bud.
+     *
+     * @hide
      */
+    @SystemApi
     @Nullable
     public String getTrueWirelessImageUrlLeftBud() {
         return mMetadataParcel.trueWirelessImageUrlLeftBud;
@@ -99,7 +128,10 @@
 
     /**
      * Get true wireless image url for right bud.
+     *
+     * @hide
      */
+    @SystemApi
     @Nullable
     public String getTrueWirelessImageUrlRightBud() {
         return mMetadataParcel.trueWirelessImageUrlRightBud;
@@ -107,62 +139,89 @@
 
     /**
      * Get true wireless image url for case.
+     *
+     * @hide
      */
+    @SystemApi
     @Nullable
     public String getTrueWirelessImageUrlCase() {
         return mMetadataParcel.trueWirelessImageUrlCase;
     }
 
     /**
-     * Get Locale.
+     * Get Locale of the device.
+     *
+     * @hide
      */
+    @SystemApi
     @Nullable
     public String getLocale() {
         return mMetadataParcel.locale;
     }
 
     /**
-     * Get InitialNotificationDescription.
+     * Get InitialNotificationDescription, which is a translated string of
+     * "Tap to pair. Earbuds will be tied to %s" based on locale.
+     *
+     * @hide
      */
+    @SystemApi
     @Nullable
     public String getInitialNotificationDescription() {
         return mMetadataParcel.initialNotificationDescription;
     }
 
     /**
-     * Get InitialNotificationDescriptionNoAccount.
+     * Get InitialNotificationDescriptionNoAccount, which is a translated string of
+     * "Tap to pair with this device" based on locale.
+     *
+     * @hide
      */
+    @SystemApi
     @Nullable
     public String getInitialNotificationDescriptionNoAccount() {
         return mMetadataParcel.initialNotificationDescriptionNoAccount;
     }
 
     /**
-     * Get OpenCompanionAppDescription.
+     * Get OpenCompanionAppDescription, which is a translated string of
+     * "Tap to finish setup" based on locale.
+     *
+     * @hide
      */
+    @SystemApi
     @Nullable
     public String getOpenCompanionAppDescription() {
         return mMetadataParcel.openCompanionAppDescription;
     }
 
     /**
-     * Get UpdateCompanionAppDescription.
+     * Get UpdateCompanionAppDescription, which is a translated string of
+     * "Tap to update device settings and finish setup" based on locale.
+     *
+     * @hide
      */
+    @SystemApi
     @Nullable
     public String getUpdateCompanionAppDescription() {
         return mMetadataParcel.updateCompanionAppDescription;
     }
 
     /**
-     * Get DownloadCompanionAppDescription.
+     * Get DownloadCompanionAppDescription, which is a translated string of
+     * "Tap to download device app on Google Play and see all features" based on locale.
+     *
+     * @hide
      */
+    @SystemApi
     @Nullable
     public String getDownloadCompanionAppDescription() {
         return mMetadataParcel.downloadCompanionAppDescription;
     }
 
     /**
-     * Get UnableToConnectTitle.
+     * Get UnableToConnectTitle, which is a translated string of
+     * "Unable to connect" based on locale.
      */
     @Nullable
     public String getUnableToConnectTitle() {
@@ -170,136 +229,201 @@
     }
 
     /**
-     * Get UnableToConnectDescription.
+     * Get UnableToConnectDescription, which is a translated string of
+     * "Try manually pairing to the device" based on locale.
+     *
+     * @hide
      */
+    @SystemApi
     @Nullable
     public String getUnableToConnectDescription() {
         return mMetadataParcel.unableToConnectDescription;
     }
 
     /**
-     * Get InitialPairingDescription.
+     * Get InitialPairingDescription, which is a translated string of
+     * "%s will appear on devices linked with %s" based on locale.
+     *
+     * @hide
      */
+    @SystemApi
     @Nullable
     public String getInitialPairingDescription() {
         return mMetadataParcel.initialPairingDescription;
     }
 
     /**
-     * Get ConnectSuccessCompanionAppInstalled.
+     * Get ConnectSuccessCompanionAppInstalled, which is a translated string of
+     * "Your device is ready to be set up" based on locale.
+     *
+     * @hide
      */
+    @SystemApi
     @Nullable
     public String getConnectSuccessCompanionAppInstalled() {
         return mMetadataParcel.connectSuccessCompanionAppInstalled;
     }
 
     /**
-     * Get ConnectSuccessCompanionAppNotInstalled.
+     * Get ConnectSuccessCompanionAppNotInstalled, which is a translated string of
+     * "Download the device app on Google Play to see all available features" based on locale.
+     *
+     * @hide
      */
+    @SystemApi
     @Nullable
     public String getConnectSuccessCompanionAppNotInstalled() {
         return mMetadataParcel.connectSuccessCompanionAppNotInstalled;
     }
 
     /**
-     * Get SubsequentPairingDescription.
+     * Get SubsequentPairingDescription, which is a translated string of
+     * "Connect %s to this phone" based on locale.
+     *
+     * @hide
      */
+    @SystemApi
     @Nullable
     public String getSubsequentPairingDescription() {
         return mMetadataParcel.subsequentPairingDescription;
     }
 
     /**
-     * Get RetroactivePairingDescription.
+     * Get RetroactivePairingDescription, which is a translated string of
+     * "Save device to %s for faster pairing to your other devices" based on locale.
+     *
+     * @hide
      */
+    @SystemApi
     @Nullable
     public String getRetroactivePairingDescription() {
         return mMetadataParcel.retroactivePairingDescription;
     }
 
     /**
-     * Get WaitLaunchCompanionAppDescription.
+     * Get WaitLaunchCompanionAppDescription, which is a translated string of
+     * "This will take a few moments" based on locale.
+     *
+     * @hide
      */
+    @SystemApi
     @Nullable
     public String getWaitLaunchCompanionAppDescription() {
         return mMetadataParcel.waitLaunchCompanionAppDescription;
     }
 
     /**
-     * Get FailConnectGoToSettingsDescription.
+     * Get FailConnectGoToSettingsDescription, which is a translated string of
+     * "Try manually pairing to the device by going to Settings" based on locale.
+     *
+     * @hide
      */
+    @SystemApi
     @Nullable
     public String getFailConnectGoToSettingsDescription() {
         return mMetadataParcel.failConnectGoToSettingsDescription;
     }
 
     /**
-     * Get ConfirmPinTitle.
+     * Get ConfirmPinTitle, which is a translated string of
+     * based on locale.
+     *
+     * @hide
      */
+    @SystemApi
     @Nullable
     public String getConfirmPinTitle() {
         return mMetadataParcel.confirmPinTitle;
     }
 
     /**
-     * Get ConfirmPinDescription.
+     * Get ConfirmPinDescription, which is a translated string of "confirm pin" based on locale.
+     *
+     * @hide
      */
+    @SystemApi
     @Nullable
     public String getConfirmPinDescription() {
         return mMetadataParcel.confirmPinDescription;
     }
 
     /**
-     * Get SyncContactsTitle.
+     * Get SyncContactsTitle, which is a translated string of "sync contacts title" based on locale.
+     *
+     * @hide
      */
+    @SystemApi
     @Nullable
     public String getSyncContactsTitle() {
         return mMetadataParcel.syncContactsTitle;
     }
 
     /**
-     * Get SyncContactsDescription.
+     * Get SyncContactsDescription, which is a translated string of "sync contacts description"
+     * based on locale.
+     *
+     * @hide
      */
+    @SystemApi
     @Nullable
     public String getSyncContactsDescription() {
         return mMetadataParcel.syncContactsDescription;
     }
 
     /**
-     * Get SyncSmsTitle.
+     * Get SyncSmsTitle, which is a translated string of "sync sms title" based on locale.
+     *
+     * @hide
      */
+    @SystemApi
     @Nullable
     public String getSyncSmsTitle() {
         return mMetadataParcel.syncSmsTitle;
     }
 
     /**
-     * Get SyncSmsDescription.
+     * Get SyncSmsDescription, which is a translated string of "sync sms description" based on
+     * locale.
+     *
+     * @hide
      */
+    @SystemApi
     @Nullable
     public String getSyncSmsDescription() {
         return mMetadataParcel.syncSmsDescription;
     }
 
     /**
-     * Get AssistantSetupHalfSheet.
+     * Get AssistantSetupHalfSheet, which is a translated string of
+     * "Tap to set up your Google Assistant" based on locale.
+     *
+     * @hide
      */
+    @SystemApi
     @Nullable
     public String getAssistantSetupHalfSheet() {
         return mMetadataParcel.assistantSetupHalfSheet;
     }
 
     /**
-     * Get AssistantSetupNotification.
+     * Get AssistantSetupNotification, which is a translated string of
+     * "Tap to set up your Google Assistant" based on locale.
+     *
+     * @hide
      */
+    @SystemApi
     @Nullable
     public String getAssistantSetupNotification() {
         return mMetadataParcel.assistantSetupNotification;
     }
 
     /**
-     * Get FastPairTvConnectDeviceNoAccountDescription.
+     * Get FastPairTvConnectDeviceNoAccountDescription, which is a translated string of
+     * "Select connect to pair your %s with this device" based on locale.
+     *
+     * @hide
      */
+    @SystemApi
     @Nullable
     public String getFastPairTvConnectDeviceNoAccountDescription() {
         return mMetadataParcel.fastPairTvConnectDeviceNoAccountDescription;
@@ -307,14 +431,20 @@
 
     /**
      * Builder used to create FastPairDeviceMetadata.
+     *
+     * @hide
      */
+    @SystemApi
     public static final class Builder {
 
         private final FastPairDeviceMetadataParcel mBuilderParcel;
 
         /**
          * Default constructor of Builder.
+         *
+         * @hide
          */
+        @SystemApi
         public Builder() {
             mBuilderParcel = new FastPairDeviceMetadataParcel();
             mBuilderParcel.imageUrl = null;
@@ -358,7 +488,9 @@
          *
          * @param imageUrl Image Ulr.
          * @return The builder, to facilitate chaining {@code builder.setXXX(..).setXXX(..)}.
+         * @hide
          */
+        @SystemApi
         @NonNull
         public Builder setImageUrl(@Nullable String imageUrl) {
             mBuilderParcel.imageUrl = imageUrl;
@@ -370,7 +502,9 @@
          *
          * @param intentUri Intent uri.
          * @return The builder, to facilitate chaining {@code builder.setXXX(..).setXXX(..)}.
+         * @hide
          */
+        @SystemApi
         @NonNull
         public Builder setIntentUri(@Nullable String intentUri) {
             mBuilderParcel.intentUri = intentUri;
@@ -382,7 +516,9 @@
          *
          * @param name Device name.
          * @return The builder, to facilitate chaining {@code builder.setXXX(..).setXXX(..)}.
+         * @hide
          */
+        @SystemApi
         @NonNull
         public Builder setName(@Nullable String name) {
             mBuilderParcel.name = name;
@@ -394,8 +530,9 @@
          *
          * @param bleTxPower Ble transmission power.
          * @return The builder, to facilitate chaining {@code builder.setXXX(..).setXXX(..)}.
-
+         * @hide
          */
+        @SystemApi
         @NonNull
         public Builder setBleTxPower(int bleTxPower) {
             mBuilderParcel.bleTxPower = bleTxPower;
@@ -407,7 +544,9 @@
          *
          * @param triggerDistance Fast Pair trigger distance.
          * @return The builder, to facilitate chaining {@code builder.setXXX(..).setXXX(..)}.
+         * @hide
          */
+        @SystemApi
         @NonNull
         public Builder setTriggerDistance(float triggerDistance) {
             mBuilderParcel.triggerDistance = triggerDistance;
@@ -417,9 +556,13 @@
         /**
          * Set image.
          *
-         * @param image Fast Pair device image.
+         * @param image Fast Pair device image, which is submitted at device registration time to
+         *              display on notification. It is a 32-bit PNG with dimensions of
+         *              512px by 512px.
          * @return The builder, to facilitate chaining {@code builder.setXXX(..).setXXX(..)}.
+         * @hide
          */
+        @SystemApi
         @NonNull
         public Builder setImage(@Nullable byte[] image) {
             mBuilderParcel.image = image;
@@ -431,7 +574,9 @@
          *
          * @param deviceType Fast Pair device type.
          * @return The builder, to facilitate chaining {@code builder.setXXX(..).setXXX(..)}.
+         * @hide
          */
+        @SystemApi
         @NonNull
         public Builder setDeviceType(int deviceType) {
             mBuilderParcel.deviceType = deviceType;
@@ -443,7 +588,9 @@
          *
          * @param trueWirelessImageUrlLeftBud True wireless image url for left bud.
          * @return The builder, to facilitate chaining {@code builder.setXXX(..).setXXX(..)}.
+         * @hide
          */
+        @SystemApi
         @NonNull
         public Builder setTrueWirelessImageUrlLeftBud(
                 @Nullable String trueWirelessImageUrlLeftBud) {
@@ -456,7 +603,9 @@
          *
          * @param trueWirelessImageUrlRightBud True wireless image url for right bud.
          * @return The builder, to facilitate chaining {@code builder.setXXX(..).setXXX(..)}.
+         * @hide
          */
+        @SystemApi
         @NonNull
         public Builder setTrueWirelessImageUrlRightBud(
                 @Nullable String trueWirelessImageUrlRightBud) {
@@ -469,7 +618,9 @@
          *
          * @param trueWirelessImageUrlCase True wireless image url for case.
          * @return The builder, to facilitate chaining {@code builder.setXXX(..).setXXX(..)}.
+         * @hide
          */
+        @SystemApi
         @NonNull
         public Builder setTrueWirelessImageUrlCase(@Nullable String trueWirelessImageUrlCase) {
             mBuilderParcel.trueWirelessImageUrlCase = trueWirelessImageUrlCase;
@@ -481,7 +632,9 @@
          *
          * @param locale Device locale.
          * @return The builder, to facilitate chaining {@code builder.setXXX(..).setXXX(..)}.
+         * @hide
          */
+        @SystemApi
         @NonNull
         public Builder setLocale(@Nullable String locale) {
             mBuilderParcel.locale = locale;
@@ -493,7 +646,9 @@
          *
          * @param initialNotificationDescription Initial notification description.
          * @return The builder, to facilitate chaining {@code builder.setXXX(..).setXXX(..)}.
+         * @hide
          */
+        @SystemApi
         @NonNull
         public Builder setInitialNotificationDescription(
                 @Nullable String initialNotificationDescription) {
@@ -507,7 +662,9 @@
          * @param initialNotificationDescriptionNoAccount Initial notification description when
          *                                                account is not present.
          * @return The builder, to facilitate chaining {@code builder.setXXX(..).setXXX(..)}.
+         * @hide
          */
+        @SystemApi
         @NonNull
         public Builder setInitialNotificationDescriptionNoAccount(
                 @Nullable String initialNotificationDescriptionNoAccount) {
@@ -521,7 +678,9 @@
          *
          * @param openCompanionAppDescription Description for opening companion app.
          * @return The builder, to facilitate chaining {@code builder.setXXX(..).setXXX(..)}.
+         * @hide
          */
+        @SystemApi
         @NonNull
         public Builder setOpenCompanionAppDescription(
                 @Nullable String openCompanionAppDescription) {
@@ -534,7 +693,9 @@
          *
          * @param updateCompanionAppDescription Description for updating companion app.
          * @return The builder, to facilitate chaining {@code builder.setXXX(..).setXXX(..)}.
+         * @hide
          */
+        @SystemApi
         @NonNull
         public Builder setUpdateCompanionAppDescription(
                 @Nullable String updateCompanionAppDescription) {
@@ -547,7 +708,9 @@
          *
          * @param downloadCompanionAppDescription Description for downloading companion app.
          * @return The builder, to facilitate chaining {@code builder.setXXX(..).setXXX(..)}.
+         * @hide
          */
+        @SystemApi
         @NonNull
         public Builder setDownloadCompanionAppDescription(
                 @Nullable String downloadCompanionAppDescription) {
@@ -560,7 +723,9 @@
          *
          * @param unableToConnectTitle Title when Fast Pair device is unable to be connected to.
          * @return The builder, to facilitate chaining {@code builder.setXXX(..).setXXX(..)}.
+         * @hide
          */
+        @SystemApi
         @NonNull
         public Builder setUnableToConnectTitle(@Nullable String unableToConnectTitle) {
             mBuilderParcel.unableToConnectTitle = unableToConnectTitle;
@@ -573,7 +738,9 @@
          * @param unableToConnectDescription Description when Fast Pair device is unable to be
          *                                   connected to.
          * @return The builder, to facilitate chaining {@code builder.setXXX(..).setXXX(..)}.
+         * @hide
          */
+        @SystemApi
         @NonNull
         public Builder setUnableToConnectDescription(
                 @Nullable String unableToConnectDescription) {
@@ -586,7 +753,9 @@
          *
          * @param initialPairingDescription Description for Fast Pair initial pairing.
          * @return The builder, to facilitate chaining {@code builder.setXXX(..).setXXX(..)}.
+         * @hide
          */
+        @SystemApi
         @NonNull
         public Builder setInitialPairingDescription(@Nullable String initialPairingDescription) {
             mBuilderParcel.initialPairingDescription = initialPairingDescription;
@@ -599,7 +768,9 @@
          * @param connectSuccessCompanionAppInstalled Description that let user open the companion
          *                                            app.
          * @return The builder, to facilitate chaining {@code builder.setXXX(..).setXXX(..)}.
+         * @hide
          */
+        @SystemApi
         @NonNull
         public Builder setConnectSuccessCompanionAppInstalled(
                 @Nullable String connectSuccessCompanionAppInstalled) {
@@ -614,7 +785,9 @@
          * @param connectSuccessCompanionAppNotInstalled Description that let user download the
          *                                               companion app.
          * @return The builder, to facilitate chaining {@code builder.setXXX(..).setXXX(..)}.
+         * @hide
          */
+        @SystemApi
         @NonNull
         public Builder setConnectSuccessCompanionAppNotInstalled(
                 @Nullable String connectSuccessCompanionAppNotInstalled) {
@@ -629,7 +802,9 @@
          * @param subsequentPairingDescription Description that reminds user there is a paired
          *                                     device nearby.
          * @return The builder, to facilitate chaining {@code builder.setXXX(..).setXXX(..)}.
+         * @hide
          */
+        @SystemApi
         @NonNull
         public Builder setSubsequentPairingDescription(
                 @Nullable String subsequentPairingDescription) {
@@ -642,7 +817,9 @@
          *
          * @param retroactivePairingDescription Description that reminds users opt in their device.
          * @return The builder, to facilitate chaining {@code builder.setXXX(..).setXXX(..)}.
+         * @hide
          */
+        @SystemApi
         @NonNull
         public Builder setRetroactivePairingDescription(
                 @Nullable String retroactivePairingDescription) {
@@ -656,7 +833,9 @@
          * @param waitLaunchCompanionAppDescription Description that indicates companion app is
          *                                          about to launch.
          * @return The builder, to facilitate chaining {@code builder.setXXX(..).setXXX(..)}.
+         * @hide
          */
+        @SystemApi
         @NonNull
         public Builder setWaitLaunchCompanionAppDescription(
                 @Nullable String waitLaunchCompanionAppDescription) {
@@ -671,7 +850,9 @@
          * @param failConnectGoToSettingsDescription Description that indicates go to bluetooth
          *                                           settings when connection fail.
          * @return The builder, to facilitate chaining {@code builder.setXXX(..).setXXX(..)}.
+         * @hide
          */
+        @SystemApi
         @NonNull
         public Builder setFailConnectGoToSettingsDescription(
                 @Nullable String failConnectGoToSettingsDescription) {
@@ -685,7 +866,9 @@
          *
          * @param confirmPinTitle Title of the UI to ask the user to confirm the pin code.
          * @return The builder, to facilitate chaining {@code builder.setXXX(..).setXXX(..)}.
+         * @hide
          */
+        @SystemApi
         @NonNull
         public Builder setConfirmPinTitle(@Nullable String confirmPinTitle) {
             mBuilderParcel.confirmPinTitle = confirmPinTitle;
@@ -698,7 +881,9 @@
          * @param confirmPinDescription Description of the UI to ask the user to confirm the pin
          *                              code.
          * @return The builder, to facilitate chaining {@code builder.setXXX(..).setXXX(..)}.
+         * @hide
          */
+        @SystemApi
         @NonNull
         public Builder setConfirmPinDescription(@Nullable String confirmPinDescription) {
             mBuilderParcel.confirmPinDescription = confirmPinDescription;
@@ -710,7 +895,9 @@
          *
          * @param syncContactsTitle Title of the UI to ask the user to confirm to sync contacts.
          * @return The builder, to facilitate chaining {@code builder.setXXX(..).setXXX(..)}.
+         * @hide
          */
+        @SystemApi
         @NonNull
         public Builder setSyncContactsTitle(@Nullable String syncContactsTitle) {
             mBuilderParcel.syncContactsTitle = syncContactsTitle;
@@ -722,7 +909,9 @@
          *
          * @param syncContactsDescription Description of the UI to ask the user to confirm to sync
          *                                contacts.
+         * @hide
          */
+        @SystemApi
         @NonNull
         public Builder setSyncContactsDescription(@Nullable String syncContactsDescription) {
             mBuilderParcel.syncContactsDescription = syncContactsDescription;
@@ -734,7 +923,9 @@
          *
          * @param syncSmsTitle Title of the UI to ask the user to confirm to sync SMS.
          * @return The builder, to facilitate chaining {@code builder.setXXX(..).setXXX(..)}.
+         * @hide
          */
+        @SystemApi
         @NonNull
         public Builder setSyncSmsTitle(@Nullable String syncSmsTitle) {
             mBuilderParcel.syncSmsTitle = syncSmsTitle;
@@ -746,7 +937,9 @@
          *
          * @param syncSmsDescription Description of the UI to ask the user to confirm to sync SMS.
          * @return The builder, to facilitate chaining {@code builder.setXXX(..).setXXX(..)}.
+         * @hide
          */
+        @SystemApi
         @NonNull
         public Builder setSyncSmsDescription(@Nullable String syncSmsDescription) {
             mBuilderParcel.syncSmsDescription = syncSmsDescription;
@@ -759,7 +952,9 @@
          * @param assistantSetupHalfSheet Description in half sheet to ask user setup google
          * assistant.
          * @return The builder, to facilitate chaining {@code builder.setXXX(..).setXXX(..)}.
+         * @hide
          */
+        @SystemApi
         @NonNull
         public Builder setAssistantSetupHalfSheet(@Nullable String assistantSetupHalfSheet) {
             mBuilderParcel.assistantSetupHalfSheet = assistantSetupHalfSheet;
@@ -772,7 +967,9 @@
          * @param assistantSetupNotification Description in notification to ask user setup google
          *                                   assistant.
          * @return The builder, to facilitate chaining {@code builder.setXXX(..).setXXX(..)}.
+         * @hide
          */
+        @SystemApi
         @NonNull
         public Builder setAssistantSetupNotification(
                 @Nullable String assistantSetupNotification) {
@@ -787,7 +984,9 @@
          *                                                    action on TV, when user is not logged
          *                                                    in.
          * @return The builder, to facilitate chaining {@code builder.setXXX(..).setXXX(..)}.
+         * @hide
          */
+        @SystemApi
         @NonNull
         public Builder setFastPairTvConnectDeviceNoAccountDescription(
                 @Nullable String fastPairTvConnectDeviceNoAccountDescription) {
@@ -798,7 +997,10 @@
 
         /**
          * Build {@link FastPairDeviceMetadata} with the currently set configuration.
+         *
+         * @hide
          */
+        @SystemApi
         @NonNull
         public FastPairDeviceMetadata build() {
             return new FastPairDeviceMetadata(mBuilderParcel);
diff --git a/nearby/framework/java/android/nearby/FastPairDiscoveryItem.java b/nearby/framework/java/android/nearby/FastPairDiscoveryItem.java
index e75dca6..bc6a6f8 100644
--- a/nearby/framework/java/android/nearby/FastPairDiscoveryItem.java
+++ b/nearby/framework/java/android/nearby/FastPairDiscoveryItem.java
@@ -38,7 +38,10 @@
 
     /**
      * Get Id.
+     *
+     * @hide
      */
+    @SystemApi
     @Nullable
     public String getId() {
         return mMetadataParcel.id;
@@ -46,14 +49,20 @@
 
     /**
      * Get Type.
+     *
+     * @hide
      */
+    @SystemApi
     public int getType() {
         return mMetadataParcel.type;
     }
 
     /**
      * Get MacAddress.
+     *
+     * @hide
      */
+    @SystemApi
     @Nullable
     public String getMacAddress() {
         return mMetadataParcel.macAddress;
@@ -61,7 +70,10 @@
 
     /**
      * Get ActionUrl.
+     *
+     * @hide
      */
+    @SystemApi
     @Nullable
     public String getActionUrl() {
         return mMetadataParcel.actionUrl;
@@ -69,7 +81,10 @@
 
     /**
      * Get DeviceName.
+     *
+     * @hide
      */
+    @SystemApi
     @Nullable
     public String getDeviceName() {
         return mMetadataParcel.deviceName;
@@ -77,7 +92,10 @@
 
     /**
      * Get Title.
+     *
+     * @hide
      */
+    @SystemApi
     @Nullable
     public String getTitle() {
         return mMetadataParcel.title;
@@ -85,7 +103,10 @@
 
     /**
      * Get Description.
+     *
+     * @hide
      */
+    @SystemApi
     @Nullable
     public String getDescription() {
         return mMetadataParcel.description;
@@ -93,7 +114,10 @@
 
     /**
      * Get DisplayUrl.
+     *
+     * @hide
      */
+    @SystemApi
     @Nullable
     public String getDisplayUrl() {
         return mMetadataParcel.displayUrl;
@@ -101,56 +125,80 @@
 
     /**
      * Get LastObservationTimestampMillis.
+     *
+     * @hide
      */
+    @SystemApi
     public long getLastObservationTimestampMillis() {
         return mMetadataParcel.lastObservationTimestampMillis;
     }
 
     /**
      * Get FirstObservationTimestampMillis.
+     *
+     * @hide
      */
+    @SystemApi
     public long getFirstObservationTimestampMillis() {
         return mMetadataParcel.firstObservationTimestampMillis;
     }
 
     /**
      * Get State.
+     *
+     * @hide
      */
+    @SystemApi
     public int getState() {
         return mMetadataParcel.state;
     }
 
     /**
      * Get ActionUrlType.
+     *
+     * @hide
      */
+    @SystemApi
     public int getActionUrlType() {
         return mMetadataParcel.actionUrlType;
     }
 
     /**
      * Get Rssi.
+     *
+     * @hide
      */
+    @SystemApi
     public int getRssi() {
         return mMetadataParcel.rssi;
     }
 
     /**
      * Get PendingAppInstallTimestampMillis.
+     *
+     * @hide
      */
+    @SystemApi
     public long getPendingAppInstallTimestampMillis() {
         return mMetadataParcel.pendingAppInstallTimestampMillis;
     }
 
     /**
      * Get TxPower.
+     *
+     * @hide
      */
+    @SystemApi
     public int getTxPower() {
         return mMetadataParcel.txPower;
     }
 
     /**
      * Get AppName.
+     *
+     * @hide
      */
+    @SystemApi
     @Nullable
     public String getAppName() {
         return mMetadataParcel.appName;
@@ -158,7 +206,10 @@
 
     /**
      * Get GroupId.
+     *
+     * @hide
      */
+    @SystemApi
     @Nullable
     public String getGroupId() {
         return mMetadataParcel.groupId;
@@ -166,14 +217,20 @@
 
     /**
      * Get AttachmentType.
+     *
+     * @hide
      */
+    @SystemApi
     public int getAttachmentType() {
         return mMetadataParcel.attachmentType;
     }
 
     /**
      * Get PackageName.
+     *
+     * @hide
      */
+    @SystemApi
     @Nullable
     public String getPackageName() {
         return mMetadataParcel.packageName;
@@ -181,7 +238,10 @@
 
     /**
      * Get FeatureGraphicUrl.
+     *
+     * @hide
      */
+    @SystemApi
     @Nullable
     public String getFeatureGraphicUrl() {
         return mMetadataParcel.featureGraphicUrl;
@@ -189,15 +249,23 @@
 
     /**
      * Get TriggerId.
+     *
+     * @hide
      */
+    @SystemApi
     @Nullable
     public String getTriggerId() {
         return mMetadataParcel.triggerId;
     }
 
     /**
-     * Get IconPng.
+     * Get IconPng, which is submitted at device registration time to display on notification. It is
+     * a 32-bit PNG with dimensions of 512px by 512px.
+     *
+     * @return IconPng in 32-bit PNG with dimensions of 512px by 512px.
+     * @hide
      */
+    @SystemApi
     @Nullable
     public byte[] getIconPng() {
         return mMetadataParcel.iconPng;
@@ -205,7 +273,10 @@
 
     /**
      * Get IconFifeUrl.
+     *
+     * @hide
      */
+    @SystemApi
     @Nullable
     public String getIconFfeUrl() {
         return mMetadataParcel.iconFifeUrl;
@@ -213,7 +284,10 @@
 
     /**
      * Get DebugMessage.
+     *
+     * @hide
      */
+    @SystemApi
     @Nullable
     public String getDebugMessage() {
         return mMetadataParcel.debugMessage;
@@ -221,7 +295,10 @@
 
     /**
      * Get DebugCategory.
+     *
+     * @hide
      */
+    @SystemApi
     public int getDebugCategory() {
         return mMetadataParcel.debugCategory;
     }
@@ -235,14 +312,23 @@
 
     /**
      * Get LastUserExperience.
+     *
+     * @hide
      */
+    @SystemApi
     public int getLastUserExperience() {
         return mMetadataParcel.lastUserExperience;
     }
 
     /**
-     * Get BleRecordBytes.
+     * Get BleRecordBytes. Raw bytes of {@link android.bluetooth.le.ScanRecord}.
+     * It is the most recent BLE advertisement related to this item.
+     *
+     * @return the most recent BLE advertisement in raw bytes of
+     *         {@link android.bluetooth.le.ScanRecord}.
+     * @hide
      */
+    @SystemApi
     @Nullable
     public byte[] getBleRecordBytes() {
         return mMetadataParcel.bleRecordBytes;
@@ -250,15 +336,23 @@
 
     /**
      * Get EntityId.
+     *
+     * @hide
      */
+    @SystemApi
     @Nullable
     public String getEntityId() {
         return mMetadataParcel.entityId;
     }
 
     /**
-     * Get authenticationPublicKeySecp256r1.
+     * Get authenticationPublicKeySecp256r1, which is same as AntiSpoof public key, see
+     * <a href="https://developers.google.com/nearby/fast-pair/spec#data_format">Data Format</a>.
+     *
+     * @return 64-byte authenticationPublicKeySecp256r1.
+     * @hide
      */
+    @SystemApi
     @Nullable
     public byte[] getAuthenticationPublicKeySecp256r1() {
         return mMetadataParcel.authenticationPublicKeySecp256r1;
@@ -266,14 +360,20 @@
 
     /**
      * Builder used to create FastPairDiscoveryItem.
+     *
+     * @hide
      */
+    @SystemApi
     public static final class Builder {
 
         private final FastPairDiscoveryItemParcel mBuilderParcel;
 
         /**
          * Default constructor of Builder.
+         *
+         * @hide
          */
+        @SystemApi
         public Builder() {
             mBuilderParcel = new FastPairDiscoveryItemParcel();
         }
@@ -283,7 +383,10 @@
          *
          * @param id Unique id.
          * @return The builder, to facilitate chaining {@code builder.setXXX(..).setXXX(..)}.
+         *
+         * @hide
          */
+        @SystemApi
         @NonNull
         public Builder setId(@Nullable String id) {
             mBuilderParcel.id = id;
@@ -295,7 +398,9 @@
          *
          * @param type Nearby type.
          * @return The builder, to facilitate chaining {@code builder.setXXX(..).setXXX(..)}.
+         * @hide
          */
+        @SystemApi
         @NonNull
         public Builder setType(int type) {
             mBuilderParcel.type = type;
@@ -307,7 +412,9 @@
          *
          * @param macAddress Fast Pair device rotating mac address.
          * @return The builder, to facilitate chaining {@code builder.setXXX(..).setXXX(..)}.
+         * @hide
          */
+        @SystemApi
         @NonNull
         public Builder setMacAddress(@Nullable String macAddress) {
             mBuilderParcel.macAddress = macAddress;
@@ -319,7 +426,9 @@
          *
          * @param actionUrl Action Url of Fast Pair device.
          * @return The builder, to facilitate chaining {@code builder.setXXX(..).setXXX(..)}.
+         * @hide
          */
+        @SystemApi
         @NonNull
         public Builder setActionUrl(@Nullable String actionUrl) {
             mBuilderParcel.actionUrl = actionUrl;
@@ -330,7 +439,9 @@
          * Set DeviceName.
          * @param deviceName Fast Pair device name.
          * @return The builder, to facilitate chaining {@code builder.setXXX(..).setXXX(..)}.
+         * @hide
          */
+        @SystemApi
         @NonNull
         public Builder setDeviceName(@Nullable String deviceName) {
             mBuilderParcel.deviceName = deviceName;
@@ -342,7 +453,9 @@
          *
          * @param title Title of Fast Pair device.
          * @return The builder, to facilitate chaining {@code builder.setXXX(..).setXXX(..)}.
+         * @hide
          */
+        @SystemApi
         @NonNull
         public Builder setTitle(@Nullable String title) {
             mBuilderParcel.title = title;
@@ -354,7 +467,9 @@
          *
          * @param description Description of Fast Pair device.
          * @return The builder, to facilitate chaining {@code builder.setXXX(..).setXXX(..)}.
+         * @hide
          */
+        @SystemApi
         @NonNull
         public Builder setDescription(@Nullable String description) {
             mBuilderParcel.description = description;
@@ -366,7 +481,9 @@
          *
          * @param displayUrl Display Url of Fast Pair device.
          * @return The builder, to facilitate chaining {@code builder.setXXX(..).setXXX(..)}.
+         * @hide
          */
+        @SystemApi
         @NonNull
         public Builder setDisplayUrl(@Nullable String displayUrl) {
             mBuilderParcel.displayUrl = displayUrl;
@@ -379,7 +496,9 @@
          * @param lastObservationTimestampMillis Last observed timestamp of Fast Pair device, keyed
          *                                       by a rotating id.
          * @return The builder, to facilitate chaining {@code builder.setXXX(..).setXXX(..)}.
+         * @hide
          */
+        @SystemApi
         @NonNull
         public Builder setLastObservationTimestampMillis(
                 long lastObservationTimestampMillis) {
@@ -393,7 +512,9 @@
          * @param firstObservationTimestampMillis First observed timestamp of Fast Pair device,
          *                                        keyed by a rotating id.
          * @return The builder, to facilitate chaining {@code builder.setXXX(..).setXXX(..)}.
+         * @hide
          */
+        @SystemApi
         @NonNull
         public Builder setFirstObservationTimestampMillis(
                 long firstObservationTimestampMillis) {
@@ -406,7 +527,9 @@
          *
          * @param state Item's current state. e.g. if the item is blocked.
          * @return The builder, to facilitate chaining {@code builder.setXXX(..).setXXX(..)}.
+         * @hide
          */
+        @SystemApi
         @NonNull
         public Builder setState(int state) {
             mBuilderParcel.state = state;
@@ -418,7 +541,9 @@
          *
          * @param actionUrlType The resolved url type for the action_url.
          * @return The builder, to facilitate chaining {@code builder.setXXX(..).setXXX(..)}.
+         * @hide
          */
+        @SystemApi
         @NonNull
         public Builder setActionUrlType(int actionUrlType) {
             mBuilderParcel.actionUrlType = actionUrlType;
@@ -430,7 +555,9 @@
          *
          * @param rssi Beacon's RSSI value.
          * @return The builder, to facilitate chaining {@code builder.setXXX(..).setXXX(..)}.
+         * @hide
          */
+        @SystemApi
         @NonNull
         public Builder setRssi(int rssi) {
             mBuilderParcel.rssi = rssi;
@@ -443,7 +570,9 @@
          * @param pendingAppInstallTimestampMillis The timestamp when the user is redirected to App
          *                                         Store after clicking on the item.
          * @return The builder, to facilitate chaining {@code builder.setXXX(..).setXXX(..)}.
+         * @hide
          */
+        @SystemApi
         @NonNull
         public Builder setPendingAppInstallTimestampMillis(long pendingAppInstallTimestampMillis) {
             mBuilderParcel.pendingAppInstallTimestampMillis = pendingAppInstallTimestampMillis;
@@ -455,7 +584,9 @@
          *
          * @param txPower Beacon's tx power.
          * @return The builder, to facilitate chaining {@code builder.setXXX(..).setXXX(..)}.
+         * @hide
          */
+        @SystemApi
         @NonNull
         public Builder setTxPower(int txPower) {
             mBuilderParcel.txPower = txPower;
@@ -467,7 +598,9 @@
          *
          * @param appName Human readable name of the app designated to open the uri.
          * @return The builder, to facilitate chaining {@code builder.setXXX(..).setXXX(..)}.
+         * @hide
          */
+        @SystemApi
         @NonNull
         public Builder setAppName(@Nullable String appName) {
             mBuilderParcel.appName = appName;
@@ -480,7 +613,9 @@
          * @param groupId ID used for associating several DiscoveryItems. These items may be
          *                visually displayed together.
          * @return The builder, to facilitate chaining {@code builder.setXXX(..).setXXX(..)}.
+         * @hide
          */
+        @SystemApi
         @NonNull
         public Builder setGroupId(@Nullable String groupId) {
             mBuilderParcel.groupId = groupId;
@@ -492,7 +627,9 @@
          *
          * @param attachmentType Whether the attachment is created in debug namespace.
          * @return The builder, to facilitate chaining {@code builder.setXXX(..).setXXX(..)}.
+         * @hide
          */
+        @SystemApi
         @NonNull
         public Builder setAttachmentType(int attachmentType) {
             mBuilderParcel.attachmentType = attachmentType;
@@ -504,7 +641,9 @@
          *
          * @param packageName Package name of the App that owns this item.
          * @return The builder, to facilitate chaining {@code builder.setXXX(..).setXXX(..)}.
+         * @hide
          */
+        @SystemApi
         @NonNull
         public Builder setPackageName(@Nullable String packageName) {
             mBuilderParcel.packageName = packageName;
@@ -517,7 +656,9 @@
          * @param featureGraphicUrl The "feature" graphic image url used for large sized list view
          *                          entries.
          * @return The builder, to facilitate chaining {@code builder.setXXX(..).setXXX(..)}.
+         * @hide
          */
+        @SystemApi
         @NonNull
         public Builder setFeatureGraphicUrl(@Nullable String featureGraphicUrl) {
             mBuilderParcel.featureGraphicUrl = featureGraphicUrl;
@@ -529,7 +670,9 @@
          *
          * @param triggerId TriggerId identifies the trigger/beacon that is attached with a message.
          * @return The builder, to facilitate chaining {@code builder.setXXX(..).setXXX(..)}.
+         * @hide
          */
+        @SystemApi
         @NonNull
         public Builder setTriggerId(@Nullable String triggerId) {
             mBuilderParcel.triggerId = triggerId;
@@ -541,7 +684,9 @@
          *
          * @param iconPng Bytes of item icon in PNG format displayed in Discovery item list.
          * @return The builder, to facilitate chaining {@code builder.setXXX(..).setXXX(..)}.
+         * @hide
          */
+        @SystemApi
         @NonNull
         public Builder setIconPng(@Nullable byte[] iconPng) {
             mBuilderParcel.iconPng = iconPng;
@@ -553,7 +698,9 @@
          *
          * @param iconFifeUrl A FIFE URL of the item icon displayed in Discovery item list.
          * @return The builder, to facilitate chaining {@code builder.setXXX(..).setXXX(..)}.
+         * @hide
          */
+        @SystemApi
         @NonNull
         public Builder setIconFfeUrl(@Nullable String iconFifeUrl) {
             mBuilderParcel.iconFifeUrl = iconFifeUrl;
@@ -565,7 +712,9 @@
          *
          * @param debugMessage Message written to bugreport for 3P developers.(No sensitive info)
          * @return The builder, to facilitate chaining {@code builder.setXXX(..).setXXX(..)}.
+         * @hide
          */
+        @SystemApi
         @NonNull
         public Builder setDebugMessage(@Nullable String debugMessage) {
             mBuilderParcel.debugMessage = debugMessage;
@@ -577,7 +726,9 @@
          *
          * @param debugCategory Weather the item is filtered out on server.
          * @return The builder, to facilitate chaining {@code builder.setXXX(..).setXXX(..)}.
+         * @hide
          */
+        @SystemApi
         @NonNull
         public Builder setDebugCategory(int debugCategory) {
             mBuilderParcel.debugCategory = debugCategory;
@@ -590,7 +741,9 @@
          * @param lostMillis Client timestamp when the trigger (e.g. beacon) was last lost
          *                   (e.g. when Messages told us the beacon's no longer nearby).
          * @return The builder, to facilitate chaining {@code builder.setXXX(..).setXXX(..)}.
+         * @hide
          */
+        @SystemApi
         @NonNull
         public Builder setLostMillis(long lostMillis) {
             mBuilderParcel.lostMillis = lostMillis;
@@ -604,7 +757,9 @@
          *                           they dismissed the notification, that's bad; but if they tapped
          *                           it, that's good).
          * @return The builder, to facilitate chaining {@code builder.setXXX(..).setXXX(..)}.
+         * @hide
          */
+        @SystemApi
         @NonNull
         public Builder setLastUserExperience(int lastUserExperience) {
             mBuilderParcel.lastUserExperience = lastUserExperience;
@@ -614,9 +769,12 @@
         /**
          * Set BleRecordBytes.
          *
-         * @param bleRecordBytes The most recent BLE advertisement related to this item.
+         * @param bleRecordBytes The most recent BLE advertisement related to this item. Raw bytes
+         *                       of {@link android.bluetooth.le.ScanRecord}.
          * @return The builder, to facilitate chaining {@code builder.setXXX(..).setXXX(..)}.
+         * @hide
          */
+        @SystemApi
         @NonNull
         public Builder setBleRecordBytes(@Nullable byte[] bleRecordBytes) {
             mBuilderParcel.bleRecordBytes = bleRecordBytes;
@@ -628,7 +786,9 @@
          *
          * @param entityId An ID generated on the server to uniquely identify content.
          * @return The builder, to facilitate chaining {@code builder.setXXX(..).setXXX(..)}.
+         * @hide
          */
+        @SystemApi
         @NonNull
         public Builder setEntityId(@Nullable String entityId) {
             mBuilderParcel.entityId = entityId;
@@ -636,11 +796,14 @@
         }
 
         /**
-         * Set authenticationPublicKeySecp256r1.
+         * Set authenticationPublicKeySecp256r1, which is same as AntiSpoof public key, see
+         * <a href="https://developers.google.com/nearby/fast-pair/spec#data_format">Data Format</a>
          *
-         * @param authenticationPublicKeySecp256r1 Fast Pair device public key.
+         * @param authenticationPublicKeySecp256r1 64-byte Fast Pair device public key.
          * @return The builder, to facilitate chaining {@code builder.setXXX(..).setXXX(..)}.
+         * @hide
          */
+        @SystemApi
         @NonNull
         public Builder setAuthenticationPublicKeySecp256r1(
                 @Nullable byte[] authenticationPublicKeySecp256r1) {
@@ -650,7 +813,10 @@
 
         /**
          * Build {@link FastPairDiscoveryItem} with the currently set configuration.
+         *
+         * @hide
          */
+        @SystemApi
         @NonNull
         public FastPairDiscoveryItem build() {
             return new FastPairDiscoveryItem(mBuilderParcel);
diff --git a/nearby/framework/java/android/nearby/FastPairEligibleAccount.java b/nearby/framework/java/android/nearby/FastPairEligibleAccount.java
index 1cc4ce8..e6c3047 100644
--- a/nearby/framework/java/android/nearby/FastPairEligibleAccount.java
+++ b/nearby/framework/java/android/nearby/FastPairEligibleAccount.java
@@ -19,7 +19,6 @@
 import android.accounts.Account;
 import android.annotation.NonNull;
 import android.annotation.Nullable;
-import android.annotation.SuppressLint;
 import android.annotation.SystemApi;
 import android.nearby.aidl.FastPairEligibleAccountParcel;
 
@@ -60,14 +59,20 @@
 
     /**
      * Builder used to create FastPairEligibleAccount.
+     *
+     * @hide
      */
+    @SystemApi
     public static final class Builder {
 
         private final FastPairEligibleAccountParcel mBuilderParcel;
 
         /**
          * Default constructor of Builder.
+         *
+         * @hide
          */
+        @SystemApi
         public Builder() {
             mBuilderParcel = new FastPairEligibleAccountParcel();
             mBuilderParcel.account = null;
@@ -79,8 +84,9 @@
          *
          * @param account Fast Pair eligible account.
          * @return The builder, to facilitate chaining {@code builder.setXXX(..).setXXX(..)}.
+         * @hide
          */
-        @SuppressLint("MissingGetterMatchingBuilder")
+        @SystemApi
         @NonNull
         public Builder setAccount(@Nullable Account account) {
             mBuilderParcel.account = account;
@@ -92,8 +98,9 @@
          *
          * @param optIn Whether the Fast Pair eligible account opts into Fast Pair.
          * @return The builder, to facilitate chaining {@code builder.setXXX(..).setXXX(..)}.
+         * @hide
          */
-        @SuppressLint("MissingGetterMatchingBuilder")
+        @SystemApi
         @NonNull
         public Builder setOptIn(boolean optIn) {
             mBuilderParcel.optIn = optIn;
@@ -102,7 +109,10 @@
 
         /**
          * Build {@link FastPairEligibleAccount} with the currently set configuration.
+         *
+         * @hide
          */
+        @SystemApi
         @NonNull
         public FastPairEligibleAccount build() {
             return new FastPairEligibleAccount(mBuilderParcel);