Address API council review comments.

Bug:222291473
Bug:222291491
Bug:222291420
Bug:222291565

Test: atest CtsNearbyFastPairTestCases
Test: atest NearbyUnitTests

Change-Id: Ib9dc5e3c7f123ab757cabb6d926d47e54c8c7dfd
diff --git a/nearby/framework/java/android/nearby/BroadcastRequest.java b/nearby/framework/java/android/nearby/BroadcastRequest.java
index 71d51d2..3273ea1 100644
--- a/nearby/framework/java/android/nearby/BroadcastRequest.java
+++ b/nearby/framework/java/android/nearby/BroadcastRequest.java
@@ -19,10 +19,8 @@
 import android.annotation.IntDef;
 import android.annotation.IntRange;
 import android.annotation.NonNull;
-import android.annotation.SuppressLint;
 import android.annotation.SystemApi;
 import android.os.Parcel;
-import android.os.Parcelable;
 
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
@@ -35,8 +33,7 @@
  * @hide
  */
 @SystemApi
-@SuppressLint("ParcelNotFinal")  // BroadcastRequest constructor is not public
-public abstract class BroadcastRequest implements Parcelable {
+public abstract class BroadcastRequest {
 
     /** An unknown nearby broadcast request type. */
     public static final int BROADCAST_TYPE_UNKNOWN = -1;
@@ -91,25 +88,22 @@
         int MDNS = 2;
     }
 
-    public static final @NonNull Creator<BroadcastRequest> CREATOR =
-            new Creator<BroadcastRequest>() {
-                @Override
-                public 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.");
-                    }
-                }
-
-                @Override
-                public BroadcastRequest[] newArray(int size) {
-                    return new BroadcastRequest[size];
-                }
-            };
+    /**
+     * 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;
@@ -163,16 +157,15 @@
         return mMediums;
     }
 
-    @Override
+    /**
+     * 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);
     }
-
-    @Override
-    public int describeContents() {
-        return 0;
-    }
 }
diff --git a/nearby/framework/java/android/nearby/BroadcastRequest.aidl b/nearby/framework/java/android/nearby/BroadcastRequestParcelable.aidl
similarity index 93%
rename from nearby/framework/java/android/nearby/BroadcastRequest.aidl
rename to nearby/framework/java/android/nearby/BroadcastRequestParcelable.aidl
index 53f7d42..818f8d5 100644
--- a/nearby/framework/java/android/nearby/BroadcastRequest.aidl
+++ b/nearby/framework/java/android/nearby/BroadcastRequestParcelable.aidl
@@ -16,4 +16,4 @@
 
 package android.nearby;
 
-parcelable BroadcastRequest;
+parcelable BroadcastRequestParcelable;
diff --git a/nearby/framework/java/android/nearby/BroadcastRequestParcelable.java b/nearby/framework/java/android/nearby/BroadcastRequestParcelable.java
new file mode 100644
index 0000000..4a2ff6d
--- /dev/null
+++ b/nearby/framework/java/android/nearby/BroadcastRequestParcelable.java
@@ -0,0 +1,64 @@
+/*
+ * 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.NonNull;
+import android.os.Parcel;
+import android.os.Parcelable;
+
+/**
+ * A wrapper of {@link BroadcastRequest} that is parcelable.
+ *
+ * @hide
+ */
+public class BroadcastRequestParcelable implements Parcelable {
+    private final BroadcastRequest mBroadcastRequest;
+
+    public static final Creator<BroadcastRequestParcelable> CREATOR =
+            new Creator<BroadcastRequestParcelable>() {
+                @Override
+                public BroadcastRequestParcelable createFromParcel(Parcel in) {
+                    return new BroadcastRequestParcelable(BroadcastRequest.createFromParcel(in));
+                }
+
+                @Override
+                public BroadcastRequestParcelable[] newArray(int size) {
+                    return new BroadcastRequestParcelable[size];
+                }
+            };
+
+    BroadcastRequestParcelable(BroadcastRequest broadcastRequest) {
+        mBroadcastRequest = broadcastRequest;
+    }
+
+    /**
+     * Returns the broadcastRequest.
+     */
+    public BroadcastRequest getBroadcastRequest() {
+        return mBroadcastRequest;
+    }
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    @Override
+    public void writeToParcel(@NonNull Parcel dest, int flags) {
+        mBroadcastRequest.writeToParcel(dest, flags);
+    }
+}
diff --git a/nearby/framework/java/android/nearby/INearbyManager.aidl b/nearby/framework/java/android/nearby/INearbyManager.aidl
index 91dd485..e5c4102 100644
--- a/nearby/framework/java/android/nearby/INearbyManager.aidl
+++ b/nearby/framework/java/android/nearby/INearbyManager.aidl
@@ -18,7 +18,7 @@
 
 import android.nearby.IBroadcastListener;
 import android.nearby.IScanListener;
-import android.nearby.BroadcastRequest;
+import android.nearby.BroadcastRequestParcelable;
 import android.nearby.ScanRequest;
 
 /**
@@ -32,7 +32,8 @@
 
     void unregisterScanListener(in IScanListener listener);
 
-    void startBroadcast(in BroadcastRequest broadcastRequest, in IBroadcastListener callback);
+    void startBroadcast(in BroadcastRequestParcelable broadcastRequest,
+            in IBroadcastListener callback);
 
     void stopBroadcast(in IBroadcastListener callback);
 }
\ No newline at end of file
diff --git a/nearby/framework/java/android/nearby/NearbyManager.java b/nearby/framework/java/android/nearby/NearbyManager.java
index eb34e00..1f6edd3 100644
--- a/nearby/framework/java/android/nearby/NearbyManager.java
+++ b/nearby/framework/java/android/nearby/NearbyManager.java
@@ -157,7 +157,7 @@
      *
      * @param broadcastRequest Request for the nearby broadcast.
      * @param executor Executor for running the callback.
-     * @param callback Callback for notifying the client..
+     * @param callback Callback for notifying the client.
      */
     public void startBroadcast(@NonNull BroadcastRequest broadcastRequest,
             @CallbackExecutor @NonNull Executor executor, @NonNull BroadcastCallback callback) {
@@ -172,7 +172,8 @@
                     Preconditions.checkState(transport.isRegistered());
                     transport.setExecutor(executor);
                 }
-                mService.startBroadcast(broadcastRequest, transport);
+                mService.startBroadcast(new BroadcastRequestParcelable(broadcastRequest),
+                        transport);
                 sBroadcastListeners.put(callback, new WeakReference<>(transport));
             }
         } catch (RemoteException e) {
diff --git a/nearby/framework/java/android/nearby/PresenceCredential.java b/nearby/framework/java/android/nearby/PresenceCredential.java
index fae3603..7ad6ae9 100644
--- a/nearby/framework/java/android/nearby/PresenceCredential.java
+++ b/nearby/framework/java/android/nearby/PresenceCredential.java
@@ -18,10 +18,8 @@
 
 import android.annotation.IntDef;
 import android.annotation.NonNull;
-import android.annotation.SuppressLint;
 import android.annotation.SystemApi;
 import android.os.Parcel;
-import android.os.Parcelable;
 
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
@@ -34,8 +32,7 @@
  * @hide
  */
 @SystemApi
-@SuppressLint("ParcelNotFinal")  // PresenceCredential constructor is not public
-public abstract class PresenceCredential implements Parcelable {
+public abstract class PresenceCredential {
     /**
      * Private credential type.
      */
@@ -108,29 +105,6 @@
                 CredentialElement.class);
     }
 
-
-    @NonNull
-    public static final Creator<PresenceCredential> CREATOR = new Creator<PresenceCredential>() {
-        @Override
-        public PresenceCredential createFromParcel(Parcel in) {
-            int type = in.readInt();
-            switch (type) {
-                case CREDENTIAL_TYPE_PRIVATE:
-                    return PrivateCredential.createFromParcelBody(in);
-                case CREDENTIAL_TYPE_PUBLIC:
-                    return PublicCredential.createFromParcelBody(in);
-                default:
-                    throw new IllegalStateException(
-                            "Unexpected credential type (value " + type + ") in parcel.");
-            }
-        }
-
-        @Override
-        public PresenceCredential[] newArray(int size) {
-            return new PresenceCredential[size];
-        }
-    };
-
     /**
      * Returns the type of the credential.
      */
@@ -169,12 +143,11 @@
         return mCredentialElements;
     }
 
-    @Override
-    public int describeContents() {
-        return 0;
-    }
-
-    @Override
+    /**
+     * Writes the presence credential to the parcel.
+     *
+     * @hide
+     */
     public void writeToParcel(@NonNull Parcel dest, int flags) {
         dest.writeInt(mType);
         dest.writeInt(mIdentityType);
diff --git a/nearby/framework/java/android/nearby/PrivateCredential.java b/nearby/framework/java/android/nearby/PrivateCredential.java
index 8db49fa..d915cc6 100644
--- a/nearby/framework/java/android/nearby/PrivateCredential.java
+++ b/nearby/framework/java/android/nearby/PrivateCredential.java
@@ -107,18 +107,26 @@
         private final List<CredentialElement> mCredentialElements;
 
         private @IdentityType int mIdentityType;
-        private byte[] mSecretId;
-        private byte[] mAuthenticityKey;
-        private byte[] mMetadataEncryptionKey;
-        private String mDeviceName;
+        private final byte[] mSecretId;
+        private final byte[] mAuthenticityKey;
+        private final byte[] mMetadataEncryptionKey;
+        private final String mDeviceName;
 
-        public Builder(@NonNull byte[] secretId, @NonNull byte[] authenticityKey) {
+        public Builder(@NonNull byte[] secretId, @NonNull byte[] authenticityKey,
+                @NonNull byte[] metadataEncryptionKey, @NonNull String deviceName) {
             Preconditions.checkState(secretId != null && secretId.length > 0,
                     "secret id cannot be empty");
             Preconditions.checkState(authenticityKey != null && authenticityKey.length > 0,
                     "authenticity key cannot be empty");
+            Preconditions.checkState(
+                    metadataEncryptionKey != null && metadataEncryptionKey.length > 0,
+                    "metadataEncryptionKey cannot be empty");
+            Preconditions.checkState(deviceName != null && deviceName.length() > 0,
+                    "deviceName cannot be empty");
             mSecretId = secretId;
             mAuthenticityKey = authenticityKey;
+            mMetadataEncryptionKey = metadataEncryptionKey;
+            mDeviceName = deviceName;
             mCredentialElements = new ArrayList<>();
         }
 
@@ -132,24 +140,6 @@
         }
 
         /**
-         * Sets the metadata encryption key to the credential.
-         */
-        @NonNull
-        public Builder setMetadataEncryptionKey(@NonNull byte[] metadataEncryptionKey) {
-            mMetadataEncryptionKey = metadataEncryptionKey;
-            return this;
-        }
-
-        /**
-         * Sets the device name of the credential.
-         */
-        @NonNull
-        public Builder setDeviceName(@NonNull String deviceName) {
-            mDeviceName = deviceName;
-            return this;
-        }
-
-        /**
          * Adds an element to the credential.
          */
         @NonNull
diff --git a/nearby/framework/java/android/nearby/PublicCredential.java b/nearby/framework/java/android/nearby/PublicCredential.java
index 715e7fd..8aac323 100644
--- a/nearby/framework/java/android/nearby/PublicCredential.java
+++ b/nearby/framework/java/android/nearby/PublicCredential.java
@@ -21,6 +21,8 @@
 import android.os.Parcel;
 import android.os.Parcelable;
 
+import com.android.internal.util.Preconditions;
+
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Objects;
@@ -120,17 +122,33 @@
         private final List<CredentialElement> mCredentialElements;
 
         private @IdentityType int mIdentityType;
-        private byte[] mSecretId;
-        private byte[] mAuthenticityKey;
-        private byte[] mPublicKey;
-        private byte[] mEncryptedMetadata;
-        private byte[] mEncryptedMetadataKeyTag;
+        private final byte[] mSecretId;
+        private final byte[] mAuthenticityKey;
+        private final byte[] mPublicKey;
+        private final byte[] mEncryptedMetadata;
+        private final byte[] mEncryptedMetadataKeyTag;
 
-        public Builder(@NonNull byte[] secretId, @NonNull byte[] authenticityKey) {
-            Objects.requireNonNull(secretId);
-            Objects.requireNonNull(authenticityKey);
+        public Builder(@NonNull byte[] secretId, @NonNull byte[] authenticityKey,
+                @NonNull byte[] publicKey, @NonNull byte[] encryptedMetadata,
+                @NonNull byte[] encryptedMetadataKeyTag) {
+            Preconditions.checkState(secretId != null && secretId.length > 0,
+                    "secret id cannot be empty");
+            Preconditions.checkState(authenticityKey != null && authenticityKey.length > 0,
+                    "authenticity key cannot be empty");
+            Preconditions.checkState(
+                    publicKey != null && publicKey.length > 0,
+                    "publicKey cannot be empty");
+            Preconditions.checkState(encryptedMetadata != null && encryptedMetadata.length > 0,
+                    "encryptedMetadata cannot be empty");
+            Preconditions.checkState(
+                    encryptedMetadataKeyTag != null && encryptedMetadataKeyTag.length > 0,
+                    "encryptedMetadataKeyTag cannot be empty");
+
             mSecretId = secretId;
             mAuthenticityKey = authenticityKey;
+            mPublicKey = publicKey;
+            mEncryptedMetadata = encryptedMetadata;
+            mEncryptedMetadataKeyTag = encryptedMetadataKeyTag;
             mCredentialElements = new ArrayList<>();
         }
 
@@ -154,36 +172,6 @@
         }
 
         /**
-         * Sets the public key for the credential.
-         */
-        @NonNull
-        public Builder setPublicKey(@NonNull byte[] publicKey) {
-            Objects.requireNonNull(publicKey);
-            mPublicKey = publicKey;
-            return this;
-        }
-
-        /**
-         * Sets the encrypted metadata.
-         */
-        @NonNull
-        public Builder setEncryptedMetadata(@NonNull byte[] encryptedMetadata) {
-            Objects.requireNonNull(encryptedMetadata);
-            mEncryptedMetadata = encryptedMetadata;
-            return this;
-        }
-
-        /**
-         * Sets the encrypted metadata key tag.
-         */
-        @NonNull
-        public Builder setEncryptedMetadataKeyTag(@NonNull byte[] encryptedMetadataKeyTag) {
-            Objects.requireNonNull(encryptedMetadataKeyTag);
-            mEncryptedMetadataKeyTag = encryptedMetadataKeyTag;
-            return this;
-        }
-
-        /**
          * Builds the {@link PresenceCredential}.
          */
         @NonNull
diff --git a/nearby/framework/java/android/nearby/ScanFilter.java b/nearby/framework/java/android/nearby/ScanFilter.java
index e16c6a0..1409426 100644
--- a/nearby/framework/java/android/nearby/ScanFilter.java
+++ b/nearby/framework/java/android/nearby/ScanFilter.java
@@ -18,10 +18,8 @@
 
 import android.annotation.IntRange;
 import android.annotation.NonNull;
-import android.annotation.SuppressLint;
 import android.annotation.SystemApi;
 import android.os.Parcel;
-import android.os.Parcelable;
 
 /**
  * Filter for scanning a nearby device.
@@ -29,28 +27,24 @@
  * @hide
  */
 @SystemApi
-@SuppressLint("ParcelNotFinal")  // ScanFilter constructor is not public
-public abstract class ScanFilter implements Parcelable {
-    public static final @NonNull Creator<ScanFilter> CREATOR = new Creator<ScanFilter>() {
-        @Override
-        public ScanFilter createFromParcel(Parcel in) {
-            int type = in.readInt();
-            switch (type) {
-                // Currently, only Nearby Presence filtering is supported, in the future
-                // filtering other nearby specifications will be added.
-                case ScanRequest.SCAN_TYPE_NEARBY_PRESENCE:
-                    return PresenceScanFilter.createFromParcelBody(in);
-                default:
-                    throw new IllegalStateException(
-                            "Unexpected scan type (value " + type + ") in parcel.");
-            }
+public abstract class ScanFilter {
+    /**
+     * Creates a {@link ScanFilter} from the parcel.
+     *
+     * @hide
+     */
+    public static ScanFilter createFromParcel(Parcel in) {
+        int type = in.readInt();
+        switch (type) {
+            // Currently, only Nearby Presence filtering is supported, in the future
+            // filtering other nearby specifications will be added.
+            case ScanRequest.SCAN_TYPE_NEARBY_PRESENCE:
+                return PresenceScanFilter.createFromParcelBody(in);
+            default:
+                throw new IllegalStateException(
+                        "Unexpected scan type (value " + type + ") in parcel.");
         }
-
-        @Override
-        public ScanFilter[] newArray(int size) {
-            return new ScanFilter[size];
-        }
-    };
+    }
 
     private final @ScanRequest.ScanType int mType;
     private final int mMaxPathLoss;
@@ -92,17 +86,14 @@
         return mMaxPathLoss;
     }
 
-    @Override
+    /**
+     *
+     * Writes the scan filter to the parcel.
+     *
+     * @hide
+     */
     public void writeToParcel(@NonNull Parcel dest, int flags) {
         dest.writeInt(mType);
         dest.writeInt(mMaxPathLoss);
     }
-
-    /**
-     * No special parcel contents.
-     */
-    @Override
-    public int describeContents() {
-        return 0;
-    }
 }
diff --git a/nearby/framework/java/android/nearby/ScanRequest.java b/nearby/framework/java/android/nearby/ScanRequest.java
index 37285d5..a90b72d 100644
--- a/nearby/framework/java/android/nearby/ScanRequest.java
+++ b/nearby/framework/java/android/nearby/ScanRequest.java
@@ -72,13 +72,15 @@
     public static final Creator<ScanRequest> CREATOR = new Creator<ScanRequest>() {
         @Override
         public ScanRequest createFromParcel(Parcel in) {
-            return new ScanRequest(
-                    /* scanType= */ in.readInt(),
-                    /* scanMode= */ in.readInt(),
-                    /* enableBle= */ in.readBoolean(),
-                    /* workSource= */ in.readTypedObject(WorkSource.CREATOR),
-                    /* scanFilters= */
-                    in.readArrayList(ScanFilter.class.getClassLoader(), ScanFilter.class));
+            ScanRequest.Builder builder = new ScanRequest.Builder()
+                    .setScanType(in.readInt())
+                    .setScanMode(in.readInt())
+                    .setBleEnabled(in.readBoolean())
+                    .setWorkSource(in.readTypedObject(WorkSource.CREATOR));
+            for (int i = 0; i < in.readInt(); i++) {
+                builder.addScanFilter(ScanFilter.createFromParcel(in));
+            }
+            return builder.build();
         }
 
         @Override
@@ -213,7 +215,10 @@
         dest.writeInt(mScanMode);
         dest.writeBoolean(mBleEnabled);
         dest.writeTypedObject(mWorkSource, /* parcelableFlags= */0);
-        dest.writeTypedList(mScanFilters);
+        dest.writeInt(mScanFilters.size());
+        for (int i = 0; i < mScanFilters.size(); ++i) {
+            mScanFilters.get(i).writeToParcel(dest, flags);
+        }
     }
 
     @Override
diff --git a/nearby/service/java/com/android/server/nearby/NearbyService.java b/nearby/service/java/com/android/server/nearby/NearbyService.java
index 74b327a..ca9bca3 100644
--- a/nearby/service/java/com/android/server/nearby/NearbyService.java
+++ b/nearby/service/java/com/android/server/nearby/NearbyService.java
@@ -27,7 +27,7 @@
 import android.content.Intent;
 import android.content.IntentFilter;
 import android.hardware.location.ContextHubManager;
-import android.nearby.BroadcastRequest;
+import android.nearby.BroadcastRequestParcelable;
 import android.nearby.IBroadcastListener;
 import android.nearby.INearbyManager;
 import android.nearby.IScanListener;
@@ -109,8 +109,11 @@
     }
 
     @Override
-    public void startBroadcast(BroadcastRequest broadcastRequest, IBroadcastListener listener) {
-        mBroadcastProviderManager.startBroadcast(broadcastRequest, listener);
+    public void startBroadcast(BroadcastRequestParcelable broadcastRequestParcelable,
+            IBroadcastListener listener) {
+        mBroadcastProviderManager.startBroadcast(
+                broadcastRequestParcelable.getBroadcastRequest(),
+                listener);
     }
 
     @Override
diff --git a/nearby/tests/cts/fastpair/src/android/nearby/cts/NearbyManagerTest.java b/nearby/tests/cts/fastpair/src/android/nearby/cts/NearbyManagerTest.java
index dcc40a3..cd61cad 100644
--- a/nearby/tests/cts/fastpair/src/android/nearby/cts/NearbyManagerTest.java
+++ b/nearby/tests/cts/fastpair/src/android/nearby/cts/NearbyManagerTest.java
@@ -65,6 +65,7 @@
     private static final byte[] SECRETE_ID = new byte[]{1, 2, 3, 4};
     private static final byte[] META_DATA_ENCRYPTION_KEY = new byte[14];
     private static final byte[] AUTHENTICITY_KEY = new byte[]{0, 1, 1, 1};
+    private static final String DEVICE_NAME = "test_device";
     private static final int BLE_MEDIUM = 1;
 
     private Context mContext;
@@ -114,9 +115,9 @@
     @Test
     @SdkSuppress(minSdkVersion = 32, codeName = "T")
     public void testStartStopBroadcast() throws InterruptedException {
-        PrivateCredential credential = new PrivateCredential.Builder(SECRETE_ID, AUTHENTICITY_KEY)
+        PrivateCredential credential = new PrivateCredential.Builder(SECRETE_ID, AUTHENTICITY_KEY,
+                META_DATA_ENCRYPTION_KEY, DEVICE_NAME)
                 .setIdentityType(IDENTITY_TYPE_PRIVATE)
-                .setMetadataEncryptionKey(META_DATA_ENCRYPTION_KEY)
                 .build();
         BroadcastRequest broadcastRequest =
                 new PresenceBroadcastRequest.Builder(
diff --git a/nearby/tests/cts/fastpair/src/android/nearby/cts/PresenceBroadcastRequestTest.java b/nearby/tests/cts/fastpair/src/android/nearby/cts/PresenceBroadcastRequestTest.java
index 3c831a2..1daa410 100644
--- a/nearby/tests/cts/fastpair/src/android/nearby/cts/PresenceBroadcastRequestTest.java
+++ b/nearby/tests/cts/fastpair/src/android/nearby/cts/PresenceBroadcastRequestTest.java
@@ -56,14 +56,15 @@
     private static final byte[] METADATA_ENCRYPTION_KEY = new byte[]{1, 1, 3, 4, 5};
     private static final int KEY = 1234;
     private static final byte[] VALUE = new byte[]{1, 1, 1, 1};
+    private static final String DEVICE_NAME = "test_device";
 
     private PresenceBroadcastRequest.Builder mBuilder;
 
     @Before
     public void setUp() {
-        PrivateCredential credential = new PrivateCredential.Builder(SECRETE_ID, AUTHENTICITY_KEY)
+        PrivateCredential credential = new PrivateCredential.Builder(SECRETE_ID, AUTHENTICITY_KEY,
+                METADATA_ENCRYPTION_KEY, DEVICE_NAME)
                 .setIdentityType(IDENTITY_TYPE_PRIVATE)
-                .setMetadataEncryptionKey(METADATA_ENCRYPTION_KEY)
                 .build();
         DataElement element = new DataElement(KEY, VALUE);
         mBuilder = new PresenceBroadcastRequest.Builder(Collections.singletonList(BLE_MEDIUM), SALT,
diff --git a/nearby/tests/cts/fastpair/src/android/nearby/cts/PresenceScanFilterTest.java b/nearby/tests/cts/fastpair/src/android/nearby/cts/PresenceScanFilterTest.java
index 6b7c43b..b7fe40a 100644
--- a/nearby/tests/cts/fastpair/src/android/nearby/cts/PresenceScanFilterTest.java
+++ b/nearby/tests/cts/fastpair/src/android/nearby/cts/PresenceScanFilterTest.java
@@ -53,10 +53,10 @@
 
 
     private PublicCredential mPublicCredential =
-            new PublicCredential.Builder(SECRETE_ID, AUTHENTICITY_KEY)
+            new PublicCredential.Builder(SECRETE_ID, AUTHENTICITY_KEY, PUBLIC_KEY,
+                    ENCRYPTED_METADATA, METADATA_ENCRYPTION_KEY_TAG)
                     .setIdentityType(IDENTITY_TYPE_PRIVATE)
-                    .setPublicKey(PUBLIC_KEY).setEncryptedMetadata(ENCRYPTED_METADATA)
-                    .setEncryptedMetadataKeyTag(METADATA_ENCRYPTION_KEY_TAG).build();
+                    .build();
     private PresenceScanFilter.Builder mBuilder = new PresenceScanFilter.Builder()
             .setMaxPathLoss(RSSI)
             .addCredential(mPublicCredential)
diff --git a/nearby/tests/cts/fastpair/src/android/nearby/cts/PrivateCredentialTest.java b/nearby/tests/cts/fastpair/src/android/nearby/cts/PrivateCredentialTest.java
index 1cd6d9c..10b3cf2 100644
--- a/nearby/tests/cts/fastpair/src/android/nearby/cts/PrivateCredentialTest.java
+++ b/nearby/tests/cts/fastpair/src/android/nearby/cts/PrivateCredentialTest.java
@@ -53,10 +53,9 @@
 
     @Before
     public void setUp() {
-        mBuilder = new PrivateCredential.Builder(SECRETE_ID, AUTHENTICITY_KEY)
+        mBuilder = new PrivateCredential.Builder(
+                SECRETE_ID, AUTHENTICITY_KEY, METADATA_ENCRYPTION_KEY, DEVICE_NAME)
                 .setIdentityType(IDENTITY_TYPE_PRIVATE)
-                .setDeviceName(DEVICE_NAME)
-                .setMetadataEncryptionKey(METADATA_ENCRYPTION_KEY)
                 .addCredentialElement(new CredentialElement(KEY, VALUE));
     }
 
diff --git a/nearby/tests/cts/fastpair/src/android/nearby/cts/PublicCredentialTest.java b/nearby/tests/cts/fastpair/src/android/nearby/cts/PublicCredentialTest.java
index 7756669..b4a34cc 100644
--- a/nearby/tests/cts/fastpair/src/android/nearby/cts/PublicCredentialTest.java
+++ b/nearby/tests/cts/fastpair/src/android/nearby/cts/PublicCredentialTest.java
@@ -56,11 +56,10 @@
 
     @Before
     public void setUp() {
-        mBuilder = new PublicCredential.Builder(SECRETE_ID, AUTHENTICITY_KEY)
+        mBuilder = new PublicCredential.Builder(SECRETE_ID, AUTHENTICITY_KEY, PUBLIC_KEY,
+                ENCRYPTED_METADATA, METADATA_ENCRYPTION_KEY_TAG)
                 .addCredentialElement(new CredentialElement(KEY, VALUE))
-                .setIdentityType(IDENTITY_TYPE_PRIVATE)
-                .setPublicKey(PUBLIC_KEY).setEncryptedMetadata(ENCRYPTED_METADATA)
-                .setEncryptedMetadataKeyTag(METADATA_ENCRYPTION_KEY_TAG);
+                .setIdentityType(IDENTITY_TYPE_PRIVATE);
     }
 
     @Test
diff --git a/nearby/tests/cts/fastpair/src/android/nearby/cts/ScanRequestTest.java b/nearby/tests/cts/fastpair/src/android/nearby/cts/ScanRequestTest.java
index 11de5ae..019f8ec 100644
--- a/nearby/tests/cts/fastpair/src/android/nearby/cts/ScanRequestTest.java
+++ b/nearby/tests/cts/fastpair/src/android/nearby/cts/ScanRequestTest.java
@@ -173,11 +173,10 @@
         final byte[] encryptedMetadata = new byte[]{1, 2, 3, 4, 5};
         final byte[] metadataEncryptionKeyTag = new byte[]{1, 1, 3, 4, 5};
 
-        PublicCredential credential = new PublicCredential.Builder(secretId, authenticityKey)
+        PublicCredential credential = new PublicCredential.Builder(
+                secretId, authenticityKey, publicKey, encryptedMetadata, metadataEncryptionKeyTag)
                 .setIdentityType(IDENTITY_TYPE_PRIVATE)
-                .setEncryptedMetadata(encryptedMetadata)
-                .setPublicKey(publicKey)
-                .setEncryptedMetadataKeyTag(metadataEncryptionKeyTag).build();
+                .build();
 
         final int rssi = -40;
         final int action = 123;
diff --git a/nearby/tests/unit/src/com/android/server/nearby/presence/FastAdvertisementTest.java b/nearby/tests/unit/src/com/android/server/nearby/presence/FastAdvertisementTest.java
index 73d7695..5e0ccbe 100644
--- a/nearby/tests/unit/src/com/android/server/nearby/presence/FastAdvertisementTest.java
+++ b/nearby/tests/unit/src/com/android/server/nearby/presence/FastAdvertisementTest.java
@@ -43,6 +43,7 @@
     private static final byte[] AUTHENTICITY_KEY = new byte[]{12, 13, 14};
     private static final byte[] EXPECTED_ADV_BYTES =
             new byte[]{2, 2, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 123};
+    private static final String DEVICE_NAME = "test_device";
 
     private PresenceBroadcastRequest.Builder mBuilder;
     private PrivateCredential mCredential;
@@ -50,9 +51,8 @@
     @Before
     public void setUp() {
         mCredential =
-                new PrivateCredential.Builder(SECRET_ID, AUTHENTICITY_KEY)
+                new PrivateCredential.Builder(SECRET_ID, AUTHENTICITY_KEY, IDENTITY, DEVICE_NAME)
                         .setIdentityType(PresenceCredential.IDENTITY_TYPE_PRIVATE)
-                        .setMetadataEncryptionKey(IDENTITY)
                         .build();
         mBuilder =
                 new PresenceBroadcastRequest.Builder(Collections.singletonList(MEDIUM_TYPE_BLE),
diff --git a/nearby/tests/unit/src/com/android/server/nearby/presence/PresenceDiscoveryResultTest.java b/nearby/tests/unit/src/com/android/server/nearby/presence/PresenceDiscoveryResultTest.java
index dd94778..39cab94 100644
--- a/nearby/tests/unit/src/com/android/server/nearby/presence/PresenceDiscoveryResultTest.java
+++ b/nearby/tests/unit/src/com/android/server/nearby/presence/PresenceDiscoveryResultTest.java
@@ -40,6 +40,9 @@
     private static final byte[] SALT = new byte[]{12, 34};
     private static final byte[] SECRET_ID = new byte[]{1, 2, 3, 4};
     private static final byte[] AUTHENTICITY_KEY = new byte[]{12, 13, 14};
+    private static final byte[] PUBLIC_KEY = new byte[]{1, 1, 2, 2};
+    private static final byte[] ENCRYPTED_METADATA = new byte[]{1, 2, 3, 4, 5};
+    private static final byte[] METADATA_ENCRYPTION_KEY_TAG = new byte[]{1, 1, 3, 4, 5};
 
     private PresenceDiscoveryResult.Builder mBuilder;
     private PublicCredential mCredential;
@@ -47,7 +50,8 @@
     @Before
     public void setUp() {
         mCredential =
-                new PublicCredential.Builder(SECRET_ID, AUTHENTICITY_KEY)
+                new PublicCredential.Builder(SECRET_ID, AUTHENTICITY_KEY, PUBLIC_KEY,
+                        ENCRYPTED_METADATA, METADATA_ENCRYPTION_KEY_TAG)
                         .setIdentityType(PresenceCredential.IDENTITY_TYPE_PRIVATE)
                         .build();
         mBuilder = new PresenceDiscoveryResult.Builder()
diff --git a/nearby/tests/unit/src/com/android/server/nearby/provider/BroadcastProviderManagerTest.java b/nearby/tests/unit/src/com/android/server/nearby/provider/BroadcastProviderManagerTest.java
index 71ece63..d45d570 100644
--- a/nearby/tests/unit/src/com/android/server/nearby/provider/BroadcastProviderManagerTest.java
+++ b/nearby/tests/unit/src/com/android/server/nearby/provider/BroadcastProviderManagerTest.java
@@ -61,6 +61,7 @@
     private static final int PRESENCE_ACTION = 123;
     private static final byte[] SECRET_ID = new byte[]{1, 2, 3, 4};
     private static final byte[] AUTHENTICITY_KEY = new byte[]{12, 13, 14};
+    private static final String DEVICE_NAME = "test_device";
 
     @Rule
     public final MockitoRule mocks = MockitoJUnit.rule();
@@ -86,9 +87,8 @@
                 mBleBroadcastProvider);
 
         PrivateCredential privateCredential =
-                new PrivateCredential.Builder(SECRET_ID, AUTHENTICITY_KEY)
+                new PrivateCredential.Builder(SECRET_ID, AUTHENTICITY_KEY, IDENTITY, DEVICE_NAME)
                         .setIdentityType(PresenceCredential.IDENTITY_TYPE_PRIVATE)
-                        .setMetadataEncryptionKey(IDENTITY)
                         .build();
         mBroadcastRequest =
                 new PresenceBroadcastRequest.Builder(Collections.singletonList(MEDIUM_TYPE_BLE),