Merge changes Ife1279ca,Ib1eb78c4 into tm-dev

* changes:
  Add new e2e test case: seeker_show_halfsheet_test.
  Extract FastPairTestDataProviderService out from the snippet.
diff --git a/nearby/framework/java/android/nearby/FastPairDataProviderBase.java b/nearby/framework/java/android/nearby/FastPairDataProviderService.java
similarity index 97%
rename from nearby/framework/java/android/nearby/FastPairDataProviderBase.java
rename to nearby/framework/java/android/nearby/FastPairDataProviderService.java
index 6aba3e3..c6a1a65 100644
--- a/nearby/framework/java/android/nearby/FastPairDataProviderBase.java
+++ b/nearby/framework/java/android/nearby/FastPairDataProviderService.java
@@ -21,6 +21,8 @@
 import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.annotation.SystemApi;
+import android.app.Service;
+import android.content.Intent;
 import android.nearby.aidl.ByteArrayParcel;
 import android.nearby.aidl.FastPairAccountDevicesMetadataRequestParcel;
 import android.nearby.aidl.FastPairAccountKeyDeviceMetadataParcel;
@@ -46,7 +48,7 @@
 import java.util.List;
 
 /**
- * Base class for fast pair providers outside the system server.
+ * A service class for fast pair data providers outside the system server.
  *
  * Fast pair providers should be wrapped in a non-exported service which returns the result of
  * {@link #getBinder()} from the service's {@link android.app.Service#onBind(Intent)} method. The
@@ -58,7 +60,7 @@
  * @hide
  */
 @SystemApi
-public abstract class FastPairDataProviderBase {
+public abstract class FastPairDataProviderService extends Service {
     /**
      * The action the wrapping service should have in its intent filter to implement the
      * {@link android.nearby.FastPairDataProviderBase}.
@@ -123,17 +125,23 @@
     private final String mTag;
 
     /**
-     * Constructor of FastPairDataProviderBase.
+     * Constructor of FastPairDataProviderService.
      *
      * @param tag TAG for on device logging.
      * @hide
      */
     @SystemApi
-    public FastPairDataProviderBase(@NonNull String tag) {
+    public FastPairDataProviderService(@NonNull String tag) {
         mBinder = new Service();
         mTag = tag;
     }
 
+    @Override
+    @NonNull
+    public final IBinder onBind(@NonNull Intent intent) {
+        return mBinder;
+    }
+
     /**
      * Callback to be invoked when an AntispoofKeyed device metadata is loaded.
      *
@@ -287,17 +295,6 @@
             @NonNull FastPairManageActionCallback callback);
 
     /**
-     * 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, which specifies the model ID of
      * a Fast Pair device. To fulfill this request, corresponding
      * {@link FastPairAntispoofKeyDeviceMetadata} should be fetched and returned.
diff --git a/nearby/framework/java/android/nearby/INearbyManager.aidl b/nearby/framework/java/android/nearby/INearbyManager.aidl
index e5c4102..62e109e 100644
--- a/nearby/framework/java/android/nearby/INearbyManager.aidl
+++ b/nearby/framework/java/android/nearby/INearbyManager.aidl
@@ -28,7 +28,7 @@
  */
 interface INearbyManager {
 
-    void registerScanListener(in ScanRequest scanRequest, in IScanListener listener);
+    int registerScanListener(in ScanRequest scanRequest, in IScanListener listener);
 
     void unregisterScanListener(in IScanListener listener);
 
diff --git a/nearby/framework/java/android/nearby/NearbyManager.java b/nearby/framework/java/android/nearby/NearbyManager.java
index 1f6edd3..2654046 100644
--- a/nearby/framework/java/android/nearby/NearbyManager.java
+++ b/nearby/framework/java/android/nearby/NearbyManager.java
@@ -16,9 +16,12 @@
 
 package android.nearby;
 
+import android.Manifest;
 import android.annotation.CallbackExecutor;
+import android.annotation.IntDef;
 import android.annotation.NonNull;
 import android.annotation.Nullable;
+import android.annotation.RequiresPermission;
 import android.annotation.SuppressLint;
 import android.annotation.SystemApi;
 import android.annotation.SystemService;
@@ -48,6 +51,25 @@
 public class NearbyManager {
 
     /**
+     * Represents the scanning state.
+     *
+     * @hide
+     */
+    @IntDef({
+            ScanStatus.UNKNOWN,
+            ScanStatus.SUCCESS,
+            ScanStatus.ERROR,
+    })
+    public @interface ScanStatus {
+        // Default, invalid state.
+        int UNKNOWN = 0;
+        // The successful state.
+        int SUCCESS = 1;
+        // Failed state.
+        int ERROR = 2;
+    }
+
+    /**
      * Whether allows Fast Pair to scan.
      *
      * (0 = disabled, 1 = enabled)
@@ -68,7 +90,7 @@
     /**
      * Creates a new NearbyManager.
      *
-     * @param service The service object.
+     * @param service the service object
      */
     NearbyManager(@NonNull INearbyManager service) {
         mService = service;
@@ -93,11 +115,16 @@
      * Start scan for nearby devices with given parameters. Devices matching {@link ScanRequest}
      * will be delivered through the given callback.
      *
-     * @param scanRequest Various parameters clients send when requesting scanning.
-     * @param executor Executor where the listener method is called.
-     * @param scanCallback The callback to notify clients when there is a scan result.
+     * @param scanRequest various parameters clients send when requesting scanning
+     * @param executor executor where the listener method is called
+     * @param scanCallback the callback to notify clients when there is a scan result
+     *
+     * @return whether scanning was successfully started
      */
-    public void startScan(@NonNull ScanRequest scanRequest,
+    @RequiresPermission(allOf = {android.Manifest.permission.BLUETOOTH_SCAN,
+            android.Manifest.permission.BLUETOOTH_PRIVILEGED})
+    @ScanStatus
+    public int startScan(@NonNull ScanRequest scanRequest,
             @CallbackExecutor @NonNull Executor executor,
             @NonNull ScanCallback scanCallback) {
         Objects.requireNonNull(scanRequest, "scanRequest must not be null");
@@ -115,8 +142,12 @@
                     Preconditions.checkState(transport.isRegistered());
                     transport.setExecutor(executor);
                 }
-                mService.registerScanListener(scanRequest, transport);
+                @ScanStatus int status = mService.registerScanListener(scanRequest, transport);
+                if (status != ScanStatus.SUCCESS) {
+                    return status;
+                }
                 sScanListeners.put(scanCallback, new WeakReference<>(transport));
+                return ScanStatus.SUCCESS;
             }
         } catch (RemoteException e) {
             throw e.rethrowFromSystemServer();
@@ -131,9 +162,11 @@
      * Suppressed lint: Registration methods should have overload that accepts delivery Executor.
      * Already have executor in startScan() method.
      *
-     * @param scanCallback  The callback that was used to start the scan.
+     * @param scanCallback the callback that was used to start the scan
      */
     @SuppressLint("ExecutorRegistration")
+    @RequiresPermission(allOf = {android.Manifest.permission.BLUETOOTH_SCAN,
+            android.Manifest.permission.BLUETOOTH_PRIVILEGED})
     public void stopScan(@NonNull ScanCallback scanCallback) {
         Preconditions.checkArgument(scanCallback != null,
                 "invalid null scanCallback");
@@ -155,10 +188,12 @@
     /**
      * Start broadcasting the request using nearby specification.
      *
-     * @param broadcastRequest Request for the nearby broadcast.
-     * @param executor Executor for running the callback.
-     * @param callback Callback for notifying the client.
+     * @param broadcastRequest request for the nearby broadcast
+     * @param executor executor for running the callback
+     * @param callback callback for notifying the client
      */
+    @RequiresPermission(allOf = {Manifest.permission.BLUETOOTH_ADVERTISE,
+            android.Manifest.permission.BLUETOOTH_PRIVILEGED})
     public void startBroadcast(@NonNull BroadcastRequest broadcastRequest,
             @CallbackExecutor @NonNull Executor executor, @NonNull BroadcastCallback callback) {
         try {
@@ -184,9 +219,11 @@
     /**
      * Stop the broadcast associated with the given callback.
      *
-     * @param callback The callback that was used for starting the broadcast.
+     * @param callback the callback that was used for starting the broadcast
      */
     @SuppressLint("ExecutorRegistration")
+    @RequiresPermission(allOf = {Manifest.permission.BLUETOOTH_ADVERTISE,
+            android.Manifest.permission.BLUETOOTH_PRIVILEGED})
     public void stopBroadcast(@NonNull BroadcastCallback callback) {
         try {
             synchronized (sBroadcastListeners) {
@@ -206,9 +243,9 @@
     /**
      * Read from {@link Settings} whether Fast Pair scan is enabled.
      *
-     * @param context the {@link Context} to query the setting.
-     * @param def the default value if no setting value.
-     * @return whether the Fast Pair is enabled.
+     * @param context the {@link Context} to query the setting
+     * @param def the default value if no setting value
+     * @return whether the Fast Pair is enabled
      */
     public static boolean getFastPairScanEnabled(@NonNull Context context, boolean def) {
         final int enabled = Settings.Secure.getInt(
@@ -219,8 +256,8 @@
     /**
      * Write into {@link Settings} whether Fast Pair scan is enabled
      *
-     * @param context the {@link Context} to set the setting.
-     * @param enable whether the Fast Pair scan should be enabled.
+     * @param context the {@link Context} to set the setting
+     * @param enable whether the Fast Pair scan should be enabled
      */
     public static void setFastPairScanEnabled(@NonNull Context context, boolean enable) {
         Settings.Secure.putInt(
diff --git a/nearby/service/java/com/android/server/nearby/NearbyService.java b/nearby/service/java/com/android/server/nearby/NearbyService.java
index ca9bca3..d721575 100644
--- a/nearby/service/java/com/android/server/nearby/NearbyService.java
+++ b/nearby/service/java/com/android/server/nearby/NearbyService.java
@@ -31,6 +31,7 @@
 import android.nearby.IBroadcastListener;
 import android.nearby.INearbyManager;
 import android.nearby.IScanListener;
+import android.nearby.NearbyManager;
 import android.nearby.ScanRequest;
 import android.util.Log;
 
@@ -99,8 +100,12 @@
     }
 
     @Override
-    public void registerScanListener(ScanRequest scanRequest, IScanListener listener) {
-        mProviderManager.registerScanListener(scanRequest, listener);
+    @NearbyManager.ScanStatus
+    public int registerScanListener(ScanRequest scanRequest, IScanListener listener) {
+        if (mProviderManager.registerScanListener(scanRequest, listener)) {
+            return NearbyManager.ScanStatus.SUCCESS;
+        }
+        return NearbyManager.ScanStatus.ERROR;
     }
 
     @Override
diff --git a/nearby/service/java/com/android/server/nearby/provider/DiscoveryProviderManager.java b/nearby/service/java/com/android/server/nearby/provider/DiscoveryProviderManager.java
index fbbfae1..7ff3110 100644
--- a/nearby/service/java/com/android/server/nearby/provider/DiscoveryProviderManager.java
+++ b/nearby/service/java/com/android/server/nearby/provider/DiscoveryProviderManager.java
@@ -95,7 +95,7 @@
     /**
      * Registers the listener in the manager and starts scan according to the requested scan mode.
      */
-    public void registerScanListener(ScanRequest scanRequest, IScanListener listener) {
+    public boolean registerScanListener(ScanRequest scanRequest, IScanListener listener) {
         synchronized (mLock) {
             IBinder listenerBinder = listener.asBinder();
             if (mScanTypeScanListenerRecordMap.containsKey(listener.asBinder())) {
@@ -103,11 +103,13 @@
                         .get(listenerBinder).getScanRequest();
                 if (scanRequest.equals(savedScanRequest)) {
                     Log.d(TAG, "Already registered the scanRequest: " + scanRequest);
-                    return;
+                    return true;
                 }
             }
 
-            startProviders(scanRequest);
+            if (!startProviders(scanRequest)) {
+                return false;
+            }
 
             ScanListenerRecord scanListenerRecord = new ScanListenerRecord(scanRequest, listener);
             mScanTypeScanListenerRecordMap.put(listenerBinder, scanListenerRecord);
@@ -116,6 +118,7 @@
                 mScanMode = scanRequest.getScanMode();
                 invalidateProviderScanMode();
             }
+            return true;
         }
     }
 
@@ -159,10 +162,14 @@
         }
     }
 
-    private void startProviders(ScanRequest scanRequest) {
+    // Returns false when fail to start all the providers. Returns true if any one of the provider
+    // starts successfully.
+    private boolean startProviders(ScanRequest scanRequest) {
         if (scanRequest.isBleEnabled()) {
             startBleProvider(scanRequest);
+            return true;
         }
+        return false;
     }
 
     private void startBleProvider(ScanRequest scanRequest) {
diff --git a/nearby/service/java/com/android/server/nearby/provider/FastPairDataProvider.java b/nearby/service/java/com/android/server/nearby/provider/FastPairDataProvider.java
index 8420b60..0f99a2f 100644
--- a/nearby/service/java/com/android/server/nearby/provider/FastPairDataProvider.java
+++ b/nearby/service/java/com/android/server/nearby/provider/FastPairDataProvider.java
@@ -19,7 +19,7 @@
 import android.accounts.Account;
 import android.annotation.Nullable;
 import android.content.Context;
-import android.nearby.FastPairDataProviderBase;
+import android.nearby.FastPairDataProviderService;
 import android.nearby.aidl.ByteArrayParcel;
 import android.nearby.aidl.FastPairAccountDevicesMetadataRequestParcel;
 import android.nearby.aidl.FastPairAntispoofKeyDeviceMetadataRequestParcel;
@@ -72,7 +72,7 @@
 
     private FastPairDataProvider(Context context) {
         mProxyFastPairDataProvider = ProxyFastPairDataProvider.create(
-                context, FastPairDataProviderBase.ACTION_FAST_PAIR_DATA_PROVIDER);
+                context, FastPairDataProviderService.ACTION_FAST_PAIR_DATA_PROVIDER);
         if (mProxyFastPairDataProvider == null) {
             Log.d("FastPairService", "fail to initiate the fast pair proxy provider");
         } else {
@@ -109,7 +109,7 @@
             FastPairManageAccountRequestParcel requestParcel =
                     new FastPairManageAccountRequestParcel();
             requestParcel.account = account;
-            requestParcel.requestType = FastPairDataProviderBase.MANAGE_REQUEST_ADD;
+            requestParcel.requestType = FastPairDataProviderService.MANAGE_REQUEST_ADD;
             mProxyFastPairDataProvider.manageFastPairAccount(requestParcel);
             return;
         }
@@ -126,7 +126,7 @@
             FastPairManageAccountDeviceRequestParcel requestParcel =
                     new FastPairManageAccountDeviceRequestParcel();
             requestParcel.account = account;
-            requestParcel.requestType = FastPairDataProviderBase.MANAGE_REQUEST_ADD;
+            requestParcel.requestType = FastPairDataProviderService.MANAGE_REQUEST_ADD;
             requestParcel.accountKeyDeviceMetadata =
                     Utils.convertToFastPairAccountKeyDeviceMetadata(uploadInfo);
             mProxyFastPairDataProvider.manageFastPairAccountDevice(requestParcel);
diff --git a/nearby/tests/cts/fastpair/src/android/nearby/cts/FastPairDataProviderBaseTest.java b/nearby/tests/cts/fastpair/src/android/nearby/cts/FastPairDataProviderServiceTest.java
similarity index 90%
rename from nearby/tests/cts/fastpair/src/android/nearby/cts/FastPairDataProviderBaseTest.java
rename to nearby/tests/cts/fastpair/src/android/nearby/cts/FastPairDataProviderServiceTest.java
index 17b2e36..171b6e8 100644
--- a/nearby/tests/cts/fastpair/src/android/nearby/cts/FastPairDataProviderBaseTest.java
+++ b/nearby/tests/cts/fastpair/src/android/nearby/cts/FastPairDataProviderServiceTest.java
@@ -24,9 +24,10 @@
 import static org.mockito.MockitoAnnotations.initMocks;
 
 import android.accounts.Account;
+import android.content.Intent;
 import android.nearby.FastPairAccountKeyDeviceMetadata;
 import android.nearby.FastPairAntispoofKeyDeviceMetadata;
-import android.nearby.FastPairDataProviderBase;
+import android.nearby.FastPairDataProviderService;
 import android.nearby.FastPairDeviceMetadata;
 import android.nearby.FastPairDiscoveryItem;
 import android.nearby.FastPairEligibleAccount;
@@ -62,9 +63,9 @@
 import org.mockito.Mock;
 
 @RunWith(AndroidJUnit4.class)
-public class FastPairDataProviderBaseTest {
+public class FastPairDataProviderServiceTest {
 
-    private static final String TAG = "FastPairDataProviderBaseTest";
+    private static final String TAG = "FastPairDataProviderServiceTest";
 
     private static final String ASSISTANT_SETUP_HALFSHEET = "ASSISTANT_SETUP_HALFSHEET";
     private static final String ASSISTANT_SETUP_NOTIFICATION = "ASSISTANT_SETUP_NOTIFICATION";
@@ -89,9 +90,9 @@
     private static final int NUM_ACCOUNT_DEVICES = 2;
 
     private static final int ERROR_CODE_BAD_REQUEST =
-            FastPairDataProviderBase.ERROR_CODE_BAD_REQUEST;
+            FastPairDataProviderService.ERROR_CODE_BAD_REQUEST;
     private static final int MANAGE_ACCOUNT_REQUEST_TYPE =
-            FastPairDataProviderBase.MANAGE_REQUEST_ADD;
+            FastPairDataProviderService.MANAGE_REQUEST_ADD;
     private static final String ERROR_STRING = "ERROR_STRING";
     private static final String FAIL_CONNECT_GOTO_SETTINGS_DESCRIPTION =
             "FAIL_CONNECT_GOTO_SETTINGS_DESCRIPTION";
@@ -202,7 +203,7 @@
     @Captor private ArgumentCaptor<FastPairAccountKeyDeviceMetadataParcel[]>
             mFastPairAccountKeyDeviceMetadataParcelsArgumentCaptor;
 
-    @Mock private FastPairDataProviderBase mMockFastPairDataProviderBase;
+    @Mock private FastPairDataProviderService mMockFastPairDataProviderService;
     @Mock private IFastPairAntispoofKeyDeviceMetadataCallback.Stub
             mAntispoofKeyDeviceMetadataCallback;
     @Mock private IFastPairAccountDevicesMetadataCallback.Stub mAccountDevicesMetadataCallback;
@@ -218,9 +219,9 @@
         initMocks(this);
 
         mHappyPathFastPairDataProvider =
-                new MyHappyPathProvider(TAG, mMockFastPairDataProviderBase);
+                new MyHappyPathProvider(TAG, mMockFastPairDataProviderService);
         mErrorPathFastPairDataProvider =
-                new MyErrorPathProvider(TAG, mMockFastPairDataProviderBase);
+                new MyErrorPathProvider(TAG, mMockFastPairDataProviderService);
     }
 
     @Test
@@ -232,13 +233,14 @@
                 mAntispoofKeyDeviceMetadataCallback);
 
         // OEM receives request and verifies that it is as expected.
-        final ArgumentCaptor<FastPairDataProviderBase.FastPairAntispoofKeyDeviceMetadataRequest>
+        final ArgumentCaptor<FastPairDataProviderService.FastPairAntispoofKeyDeviceMetadataRequest>
                 fastPairAntispoofKeyDeviceMetadataRequestCaptor =
                 ArgumentCaptor.forClass(
-                        FastPairDataProviderBase.FastPairAntispoofKeyDeviceMetadataRequest.class);
-        verify(mMockFastPairDataProviderBase).onLoadFastPairAntispoofKeyDeviceMetadata(
+                        FastPairDataProviderService.FastPairAntispoofKeyDeviceMetadataRequest.class
+                );
+        verify(mMockFastPairDataProviderService).onLoadFastPairAntispoofKeyDeviceMetadata(
                 fastPairAntispoofKeyDeviceMetadataRequestCaptor.capture(),
-                any(FastPairDataProviderBase.FastPairAntispoofKeyDeviceMetadataCallback.class));
+                any(FastPairDataProviderService.FastPairAntispoofKeyDeviceMetadataCallback.class));
         ensureHappyPathAsExpected(fastPairAntispoofKeyDeviceMetadataRequestCaptor.getValue());
 
         // AOSP receives responses and verifies that it is as expected.
@@ -259,13 +261,13 @@
                 mAccountDevicesMetadataCallback);
 
         // OEM receives request and verifies that it is as expected.
-        final ArgumentCaptor<FastPairDataProviderBase.FastPairAccountDevicesMetadataRequest>
+        final ArgumentCaptor<FastPairDataProviderService.FastPairAccountDevicesMetadataRequest>
                 fastPairAccountDevicesMetadataRequestCaptor =
                 ArgumentCaptor.forClass(
-                        FastPairDataProviderBase.FastPairAccountDevicesMetadataRequest.class);
-        verify(mMockFastPairDataProviderBase).onLoadFastPairAccountDevicesMetadata(
+                        FastPairDataProviderService.FastPairAccountDevicesMetadataRequest.class);
+        verify(mMockFastPairDataProviderService).onLoadFastPairAccountDevicesMetadata(
                 fastPairAccountDevicesMetadataRequestCaptor.capture(),
-                any(FastPairDataProviderBase.FastPairAccountDevicesMetadataCallback.class));
+                any(FastPairDataProviderService.FastPairAccountDevicesMetadataCallback.class));
         ensureHappyPathAsExpected(fastPairAccountDevicesMetadataRequestCaptor.getValue());
 
         // AOSP receives responses and verifies that it is as expected.
@@ -284,13 +286,13 @@
                 mEligibleAccountsCallback);
 
         // OEM receives request and verifies that it is as expected.
-        final ArgumentCaptor<FastPairDataProviderBase.FastPairEligibleAccountsRequest>
+        final ArgumentCaptor<FastPairDataProviderService.FastPairEligibleAccountsRequest>
                 fastPairEligibleAccountsRequestCaptor =
                 ArgumentCaptor.forClass(
-                        FastPairDataProviderBase.FastPairEligibleAccountsRequest.class);
-        verify(mMockFastPairDataProviderBase).onLoadFastPairEligibleAccounts(
+                        FastPairDataProviderService.FastPairEligibleAccountsRequest.class);
+        verify(mMockFastPairDataProviderService).onLoadFastPairEligibleAccounts(
                 fastPairEligibleAccountsRequestCaptor.capture(),
-                any(FastPairDataProviderBase.FastPairEligibleAccountsCallback.class));
+                any(FastPairDataProviderService.FastPairEligibleAccountsCallback.class));
         ensureHappyPathAsExpected(fastPairEligibleAccountsRequestCaptor.getValue());
 
         // AOSP receives responses and verifies that it is as expected.
@@ -308,13 +310,13 @@
                 mManageAccountCallback);
 
         // OEM receives request and verifies that it is as expected.
-        final ArgumentCaptor<FastPairDataProviderBase.FastPairManageAccountRequest>
+        final ArgumentCaptor<FastPairDataProviderService.FastPairManageAccountRequest>
                 fastPairManageAccountRequestCaptor =
                 ArgumentCaptor.forClass(
-                        FastPairDataProviderBase.FastPairManageAccountRequest.class);
-        verify(mMockFastPairDataProviderBase).onManageFastPairAccount(
+                        FastPairDataProviderService.FastPairManageAccountRequest.class);
+        verify(mMockFastPairDataProviderService).onManageFastPairAccount(
                 fastPairManageAccountRequestCaptor.capture(),
-                any(FastPairDataProviderBase.FastPairManageActionCallback.class));
+                any(FastPairDataProviderService.FastPairManageActionCallback.class));
         ensureHappyPathAsExpected(fastPairManageAccountRequestCaptor.getValue());
 
         // AOSP receives SUCCESS response.
@@ -330,13 +332,13 @@
                 mManageAccountDeviceCallback);
 
         // OEM receives request and verifies that it is as expected.
-        final ArgumentCaptor<FastPairDataProviderBase.FastPairManageAccountDeviceRequest>
+        final ArgumentCaptor<FastPairDataProviderService.FastPairManageAccountDeviceRequest>
                 fastPairManageAccountDeviceRequestCaptor =
                 ArgumentCaptor.forClass(
-                        FastPairDataProviderBase.FastPairManageAccountDeviceRequest.class);
-        verify(mMockFastPairDataProviderBase).onManageFastPairAccountDevice(
+                        FastPairDataProviderService.FastPairManageAccountDeviceRequest.class);
+        verify(mMockFastPairDataProviderService).onManageFastPairAccountDevice(
                 fastPairManageAccountDeviceRequestCaptor.capture(),
-                any(FastPairDataProviderBase.FastPairManageActionCallback.class));
+                any(FastPairDataProviderService.FastPairManageActionCallback.class));
         ensureHappyPathAsExpected(fastPairManageAccountDeviceRequestCaptor.getValue());
 
         // AOSP receives SUCCESS response.
@@ -349,9 +351,9 @@
         mErrorPathFastPairDataProvider.asProvider().loadFastPairAntispoofKeyDeviceMetadata(
                 FAST_PAIR_ANTI_SPOOF_KEY_DEVICE_METADATA_REQUEST_PARCEL,
                 mAntispoofKeyDeviceMetadataCallback);
-        verify(mMockFastPairDataProviderBase).onLoadFastPairAntispoofKeyDeviceMetadata(
-                any(FastPairDataProviderBase.FastPairAntispoofKeyDeviceMetadataRequest.class),
-                any(FastPairDataProviderBase.FastPairAntispoofKeyDeviceMetadataCallback.class));
+        verify(mMockFastPairDataProviderService).onLoadFastPairAntispoofKeyDeviceMetadata(
+                any(FastPairDataProviderService.FastPairAntispoofKeyDeviceMetadataRequest.class),
+                any(FastPairDataProviderService.FastPairAntispoofKeyDeviceMetadataCallback.class));
         verify(mAntispoofKeyDeviceMetadataCallback).onError(
                 eq(ERROR_CODE_BAD_REQUEST), eq(ERROR_STRING));
     }
@@ -362,9 +364,9 @@
         mErrorPathFastPairDataProvider.asProvider().loadFastPairAccountDevicesMetadata(
                 FAST_PAIR_ACCOUNT_DEVICES_METADATA_REQUEST_PARCEL,
                 mAccountDevicesMetadataCallback);
-        verify(mMockFastPairDataProviderBase).onLoadFastPairAccountDevicesMetadata(
-                any(FastPairDataProviderBase.FastPairAccountDevicesMetadataRequest.class),
-                any(FastPairDataProviderBase.FastPairAccountDevicesMetadataCallback.class));
+        verify(mMockFastPairDataProviderService).onLoadFastPairAccountDevicesMetadata(
+                any(FastPairDataProviderService.FastPairAccountDevicesMetadataRequest.class),
+                any(FastPairDataProviderService.FastPairAccountDevicesMetadataCallback.class));
         verify(mAccountDevicesMetadataCallback).onError(
                 eq(ERROR_CODE_BAD_REQUEST), eq(ERROR_STRING));
     }
@@ -375,9 +377,9 @@
         mErrorPathFastPairDataProvider.asProvider().loadFastPairEligibleAccounts(
                 FAST_PAIR_ELIGIBLE_ACCOUNTS_REQUEST_PARCEL,
                 mEligibleAccountsCallback);
-        verify(mMockFastPairDataProviderBase).onLoadFastPairEligibleAccounts(
-                any(FastPairDataProviderBase.FastPairEligibleAccountsRequest.class),
-                any(FastPairDataProviderBase.FastPairEligibleAccountsCallback.class));
+        verify(mMockFastPairDataProviderService).onLoadFastPairEligibleAccounts(
+                any(FastPairDataProviderService.FastPairEligibleAccountsRequest.class),
+                any(FastPairDataProviderService.FastPairEligibleAccountsCallback.class));
         verify(mEligibleAccountsCallback).onError(
                 eq(ERROR_CODE_BAD_REQUEST), eq(ERROR_STRING));
     }
@@ -388,9 +390,9 @@
         mErrorPathFastPairDataProvider.asProvider().manageFastPairAccount(
                 FAST_PAIR_MANAGE_ACCOUNT_REQUEST_PARCEL,
                 mManageAccountCallback);
-        verify(mMockFastPairDataProviderBase).onManageFastPairAccount(
-                any(FastPairDataProviderBase.FastPairManageAccountRequest.class),
-                any(FastPairDataProviderBase.FastPairManageActionCallback.class));
+        verify(mMockFastPairDataProviderService).onManageFastPairAccount(
+                any(FastPairDataProviderService.FastPairManageAccountRequest.class),
+                any(FastPairDataProviderService.FastPairManageActionCallback.class));
         verify(mManageAccountCallback).onError(eq(ERROR_CODE_BAD_REQUEST), eq(ERROR_STRING));
     }
 
@@ -400,30 +402,31 @@
         mErrorPathFastPairDataProvider.asProvider().manageFastPairAccountDevice(
                 FAST_PAIR_MANAGE_ACCOUNT_DEVICE_REQUEST_PARCEL,
                 mManageAccountDeviceCallback);
-        verify(mMockFastPairDataProviderBase).onManageFastPairAccountDevice(
-                any(FastPairDataProviderBase.FastPairManageAccountDeviceRequest.class),
-                any(FastPairDataProviderBase.FastPairManageActionCallback.class));
+        verify(mMockFastPairDataProviderService).onManageFastPairAccountDevice(
+                any(FastPairDataProviderService.FastPairManageAccountDeviceRequest.class),
+                any(FastPairDataProviderService.FastPairManageActionCallback.class));
         verify(mManageAccountDeviceCallback).onError(eq(ERROR_CODE_BAD_REQUEST), eq(ERROR_STRING));
     }
 
-    public static class MyHappyPathProvider extends FastPairDataProviderBase {
+    public static class MyHappyPathProvider extends FastPairDataProviderService {
 
-        private final FastPairDataProviderBase mMockFastPairDataProviderBase;
+        private final FastPairDataProviderService mMockFastPairDataProviderService;
 
-        public MyHappyPathProvider(@NonNull String tag, FastPairDataProviderBase mock) {
+        public MyHappyPathProvider(@NonNull String tag, FastPairDataProviderService mock) {
             super(tag);
-            mMockFastPairDataProviderBase = mock;
+            mMockFastPairDataProviderService = mock;
         }
 
         public IFastPairDataProvider asProvider() {
-            return IFastPairDataProvider.Stub.asInterface(getBinder());
+            Intent intent = new Intent();
+            return IFastPairDataProvider.Stub.asInterface(onBind(intent));
         }
 
         @Override
         public void onLoadFastPairAntispoofKeyDeviceMetadata(
                 @NonNull FastPairAntispoofKeyDeviceMetadataRequest request,
                 @NonNull FastPairAntispoofKeyDeviceMetadataCallback callback) {
-            mMockFastPairDataProviderBase.onLoadFastPairAntispoofKeyDeviceMetadata(
+            mMockFastPairDataProviderService.onLoadFastPairAntispoofKeyDeviceMetadata(
                     request, callback);
             callback.onFastPairAntispoofKeyDeviceMetadataReceived(
                     HAPPY_PATH_FAST_PAIR_ANTI_SPOOF_KEY_DEVICE_METADATA);
@@ -433,7 +436,7 @@
         public void onLoadFastPairAccountDevicesMetadata(
                 @NonNull FastPairAccountDevicesMetadataRequest request,
                 @NonNull FastPairAccountDevicesMetadataCallback callback) {
-            mMockFastPairDataProviderBase.onLoadFastPairAccountDevicesMetadata(
+            mMockFastPairDataProviderService.onLoadFastPairAccountDevicesMetadata(
                     request, callback);
             callback.onFastPairAccountDevicesMetadataReceived(FAST_PAIR_ACCOUNT_DEVICES_METADATA);
         }
@@ -442,7 +445,7 @@
         public void onLoadFastPairEligibleAccounts(
                 @NonNull FastPairEligibleAccountsRequest request,
                 @NonNull FastPairEligibleAccountsCallback callback) {
-            mMockFastPairDataProviderBase.onLoadFastPairEligibleAccounts(
+            mMockFastPairDataProviderService.onLoadFastPairEligibleAccounts(
                     request, callback);
             callback.onFastPairEligibleAccountsReceived(ELIGIBLE_ACCOUNTS);
         }
@@ -451,7 +454,7 @@
         public void onManageFastPairAccount(
                 @NonNull FastPairManageAccountRequest request,
                 @NonNull FastPairManageActionCallback callback) {
-            mMockFastPairDataProviderBase.onManageFastPairAccount(request, callback);
+            mMockFastPairDataProviderService.onManageFastPairAccount(request, callback);
             callback.onSuccess();
         }
 
@@ -459,29 +462,30 @@
         public void onManageFastPairAccountDevice(
                 @NonNull FastPairManageAccountDeviceRequest request,
                 @NonNull FastPairManageActionCallback callback) {
-            mMockFastPairDataProviderBase.onManageFastPairAccountDevice(request, callback);
+            mMockFastPairDataProviderService.onManageFastPairAccountDevice(request, callback);
             callback.onSuccess();
         }
     }
 
-    public static class MyErrorPathProvider extends FastPairDataProviderBase {
+    public static class MyErrorPathProvider extends FastPairDataProviderService {
 
-        private final FastPairDataProviderBase mMockFastPairDataProviderBase;
+        private final FastPairDataProviderService mMockFastPairDataProviderService;
 
-        public MyErrorPathProvider(@NonNull String tag, FastPairDataProviderBase mock) {
+        public MyErrorPathProvider(@NonNull String tag, FastPairDataProviderService mock) {
             super(tag);
-            mMockFastPairDataProviderBase = mock;
+            mMockFastPairDataProviderService = mock;
         }
 
         public IFastPairDataProvider asProvider() {
-            return IFastPairDataProvider.Stub.asInterface(getBinder());
+            Intent intent = new Intent();
+            return IFastPairDataProvider.Stub.asInterface(onBind(intent));
         }
 
         @Override
         public void onLoadFastPairAntispoofKeyDeviceMetadata(
                 @NonNull FastPairAntispoofKeyDeviceMetadataRequest request,
                 @NonNull FastPairAntispoofKeyDeviceMetadataCallback callback) {
-            mMockFastPairDataProviderBase.onLoadFastPairAntispoofKeyDeviceMetadata(
+            mMockFastPairDataProviderService.onLoadFastPairAntispoofKeyDeviceMetadata(
                     request, callback);
             callback.onError(ERROR_CODE_BAD_REQUEST, ERROR_STRING);
         }
@@ -490,7 +494,8 @@
         public void onLoadFastPairAccountDevicesMetadata(
                 @NonNull FastPairAccountDevicesMetadataRequest request,
                 @NonNull FastPairAccountDevicesMetadataCallback callback) {
-            mMockFastPairDataProviderBase.onLoadFastPairAccountDevicesMetadata(request, callback);
+            mMockFastPairDataProviderService.onLoadFastPairAccountDevicesMetadata(
+                    request, callback);
             callback.onError(ERROR_CODE_BAD_REQUEST, ERROR_STRING);
         }
 
@@ -498,7 +503,7 @@
         public void onLoadFastPairEligibleAccounts(
                 @NonNull FastPairEligibleAccountsRequest request,
                 @NonNull FastPairEligibleAccountsCallback callback) {
-            mMockFastPairDataProviderBase.onLoadFastPairEligibleAccounts(request, callback);
+            mMockFastPairDataProviderService.onLoadFastPairEligibleAccounts(request, callback);
             callback.onError(ERROR_CODE_BAD_REQUEST, ERROR_STRING);
         }
 
@@ -506,7 +511,7 @@
         public void onManageFastPairAccount(
                 @NonNull FastPairManageAccountRequest request,
                 @NonNull FastPairManageActionCallback callback) {
-            mMockFastPairDataProviderBase.onManageFastPairAccount(request, callback);
+            mMockFastPairDataProviderService.onManageFastPairAccount(request, callback);
             callback.onError(ERROR_CODE_BAD_REQUEST, ERROR_STRING);
         }
 
@@ -514,7 +519,7 @@
         public void onManageFastPairAccountDevice(
                 @NonNull FastPairManageAccountDeviceRequest request,
                 @NonNull FastPairManageActionCallback callback) {
-            mMockFastPairDataProviderBase.onManageFastPairAccountDevice(request, callback);
+            mMockFastPairDataProviderService.onManageFastPairAccountDevice(request, callback);
             callback.onError(ERROR_CODE_BAD_REQUEST, ERROR_STRING);
         }
     }
@@ -793,13 +798,13 @@
 
     /* Verifies Happy Path AntispoofKeyDeviceMetadataRequest. */
     private static void ensureHappyPathAsExpected(
-            FastPairDataProviderBase.FastPairAntispoofKeyDeviceMetadataRequest request) {
+            FastPairDataProviderService.FastPairAntispoofKeyDeviceMetadataRequest request) {
         assertThat(request.getModelId()).isEqualTo(REQUEST_MODEL_ID);
     }
 
     /* Verifies Happy Path AccountDevicesMetadataRequest. */
     private static void ensureHappyPathAsExpected(
-            FastPairDataProviderBase.FastPairAccountDevicesMetadataRequest request) {
+            FastPairDataProviderService.FastPairAccountDevicesMetadataRequest request) {
         assertThat(request.getAccount()).isEqualTo(ACCOUNTDEVICES_METADATA_ACCOUNT);
         assertThat(request.getDeviceAccountKeys().size()).isEqualTo(ACCOUNTKEY_DEVICE_NUM);
         assertThat(request.getDeviceAccountKeys()).contains(ACCOUNT_KEY);
@@ -809,20 +814,20 @@
     /* Verifies Happy Path FastPairEligibleAccountsRequest. */
     @SuppressWarnings("UnusedVariable")
     private static void ensureHappyPathAsExpected(
-            FastPairDataProviderBase.FastPairEligibleAccountsRequest request) {
+            FastPairDataProviderService.FastPairEligibleAccountsRequest request) {
         // No fields since FastPairEligibleAccountsRequest is just a place holder now.
     }
 
     /* Verifies Happy Path FastPairManageAccountRequest. */
     private static void ensureHappyPathAsExpected(
-            FastPairDataProviderBase.FastPairManageAccountRequest request) {
+            FastPairDataProviderService.FastPairManageAccountRequest request) {
         assertThat(request.getAccount()).isEqualTo(MANAGE_ACCOUNT);
         assertThat(request.getRequestType()).isEqualTo(MANAGE_ACCOUNT_REQUEST_TYPE);
     }
 
     /* Verifies Happy Path FastPairManageAccountDeviceRequest. */
     private static void ensureHappyPathAsExpected(
-            FastPairDataProviderBase.FastPairManageAccountDeviceRequest request) {
+            FastPairDataProviderService.FastPairManageAccountDeviceRequest request) {
         assertThat(request.getAccount()).isEqualTo(MANAGE_ACCOUNT);
         assertThat(request.getRequestType()).isEqualTo(MANAGE_ACCOUNT_REQUEST_TYPE);
         assertThat(request.getBleAddress()).isEqualTo(BLE_ADDRESS);