diff --git a/nearby/framework/java/android/nearby/aidl/IFastPairClient.aidl b/nearby/framework/java/android/nearby/aidl/IFastPairUiService.aidl
similarity index 79%
rename from nearby/framework/java/android/nearby/aidl/IFastPairClient.aidl
rename to nearby/framework/java/android/nearby/aidl/IFastPairUiService.aidl
index 4f666bc..9200a9d 100644
--- a/nearby/framework/java/android/nearby/aidl/IFastPairClient.aidl
+++ b/nearby/framework/java/android/nearby/aidl/IFastPairUiService.aidl
@@ -25,11 +25,13 @@
  *
  * {@hide}
  */
-interface IFastPairClient {
+interface IFastPairUiService {
 
-    void registerHalfSheet(in IFastPairStatusCallback fastPairStatusCallback);
+    void registerCallback(in IFastPairStatusCallback fastPairStatusCallback);
 
-    void unregisterHalfSheet(in IFastPairStatusCallback fastPairStatusCallback);
+    void unregisterCallback(in IFastPairStatusCallback fastPairStatusCallback);
 
     void connect(in FastPairDevice fastPairDevice);
+
+    void cancel(in FastPairDevice fastPairDevice);
 }
\ No newline at end of file
diff --git a/nearby/framework/java/android/nearby/FastPairClient.java b/nearby/halfsheet/src/com/android/nearby/halfsheet/FastPairUiServiceClient.java
similarity index 67%
rename from nearby/framework/java/android/nearby/FastPairClient.java
rename to nearby/halfsheet/src/com/android/nearby/halfsheet/FastPairUiServiceClient.java
index dc70d71..bec0c0a 100644
--- a/nearby/framework/java/android/nearby/FastPairClient.java
+++ b/nearby/halfsheet/src/com/android/nearby/halfsheet/FastPairUiServiceClient.java
@@ -14,53 +14,60 @@
  * limitations under the License.
  */
 
-package android.nearby;
+package com.android.nearby.halfsheet;
 
-import android.annotation.BinderThread;
 import android.content.Context;
-import android.nearby.aidl.IFastPairClient;
+import android.nearby.FastPairDevice;
+import android.nearby.FastPairStatusCallback;
+import android.nearby.PairStatusMetadata;
 import android.nearby.aidl.IFastPairStatusCallback;
+import android.nearby.aidl.IFastPairUiService;
 import android.os.Handler;
 import android.os.IBinder;
 import android.os.RemoteException;
 import android.util.Log;
 
+import androidx.annotation.BinderThread;
+import androidx.annotation.UiThread;
+
 import java.lang.ref.WeakReference;
 
 /**
- * 0p API for controlling Fast Pair. It communicates between main thread and service.
+ *  A utility class for connecting to the {@link IFastPairUiService} and receive callbacks.
  *
  * @hide
  */
-public class FastPairClient {
+@UiThread
+public class FastPairUiServiceClient {
 
-    private static final String TAG = "FastPairClient";
+    private static final String TAG = "FastPairHalfSheet";
+
     private final IBinder mBinder;
     private final WeakReference<Context> mWeakContext;
-    IFastPairClient mFastPairClient;
+    IFastPairUiService mFastPairUiService;
     PairStatusCallbackIBinder mPairStatusCallbackIBinder;
 
     /**
      * The Ibinder instance should be from
-     * {@link com.android.server.nearby.fastpair.halfsheet.FastPairService} so that the client can
+     * {@link com.android.server.nearby.fastpair.halfsheet.FastPairUiServiceImpl} so that the client can
      * talk with the service.
      */
-    public FastPairClient(Context context, IBinder binder) {
+    public FastPairUiServiceClient(Context context, IBinder binder) {
         mBinder = binder;
-        mFastPairClient = IFastPairClient.Stub.asInterface(mBinder);
+        mFastPairUiService = IFastPairUiService.Stub.asInterface(mBinder);
         mWeakContext = new WeakReference<>(context);
     }
 
     /**
      * Registers a callback at service to get UI updates.
      */
-    public void registerHalfSheet(FastPairStatusCallback fastPairStatusCallback) {
+    public void registerHalfSheetStateCallBack(FastPairStatusCallback fastPairStatusCallback) {
         if (mPairStatusCallbackIBinder != null) {
             return;
         }
         mPairStatusCallbackIBinder = new PairStatusCallbackIBinder(fastPairStatusCallback);
         try {
-            mFastPairClient.registerHalfSheet(mPairStatusCallbackIBinder);
+            mFastPairUiService.registerCallback(mPairStatusCallbackIBinder);
         } catch (RemoteException e) {
             Log.w(TAG, "Failed to register fastPairStatusCallback", e);
         }
@@ -71,7 +78,18 @@
      */
     public void connect(FastPairDevice fastPairDevice) {
         try {
-            mFastPairClient.connect(fastPairDevice);
+            mFastPairUiService.connect(fastPairDevice);
+        } catch (RemoteException e) {
+            Log.w(TAG, "Failed to connect Fast Pair device" + fastPairDevice, e);
+        }
+    }
+
+    /**
+     * Cancels Fast Pair connection and dismisses half sheet.
+     */
+    public void cancel(FastPairDevice fastPairDevice) {
+        try {
+            mFastPairUiService.cancel(fastPairDevice);
         } catch (RemoteException e) {
             Log.w(TAG, "Failed to connect Fast Pair device" + fastPairDevice, e);
         }
diff --git a/nearby/halfsheet/src/com/android/nearby/halfsheet/HalfSheetActivity.java b/nearby/halfsheet/src/com/android/nearby/halfsheet/HalfSheetActivity.java
index 9507b9b..2a38b8a 100644
--- a/nearby/halfsheet/src/com/android/nearby/halfsheet/HalfSheetActivity.java
+++ b/nearby/halfsheet/src/com/android/nearby/halfsheet/HalfSheetActivity.java
@@ -48,7 +48,7 @@
  */
 public class HalfSheetActivity extends FragmentActivity {
 
-    public static final String TAG = "HalfSheetActivity";
+    public static final String TAG = "FastPairHalfSheet";
 
     public static final String EXTRA_HALF_SHEET_CONTENT =
             "com.android.nearby.halfsheet.HALF_SHEET_CONTENT";
diff --git a/nearby/halfsheet/src/com/android/nearby/halfsheet/fragment/DevicePairingFragment.java b/nearby/halfsheet/src/com/android/nearby/halfsheet/fragment/DevicePairingFragment.java
index a62c8cc..320965b 100644
--- a/nearby/halfsheet/src/com/android/nearby/halfsheet/fragment/DevicePairingFragment.java
+++ b/nearby/halfsheet/src/com/android/nearby/halfsheet/fragment/DevicePairingFragment.java
@@ -38,7 +38,6 @@
 import android.content.Intent;
 import android.content.res.Configuration;
 import android.graphics.Bitmap;
-import android.nearby.FastPairClient;
 import android.nearby.FastPairDevice;
 import android.nearby.FastPairStatusCallback;
 import android.nearby.NearbyDevice;
@@ -58,6 +57,7 @@
 
 import androidx.annotation.Nullable;
 
+import com.android.nearby.halfsheet.FastPairUiServiceClient;
 import com.android.nearby.halfsheet.HalfSheetActivity;
 import com.android.nearby.halfsheet.R;
 import com.android.nearby.halfsheet.utils.FastPairUtils;
@@ -92,7 +92,7 @@
     private Bundle mBundle;
 
     private ScanFastPairStoreItem mScanFastPairStoreItem;
-    private FastPairClient mFastPairClient;
+    private FastPairUiServiceClient mFastPairUiServiceClient;
 
     private @PairStatusMetadata.Status int mPairStatus = PairStatusMetadata.Status.UNKNOWN;
     // True when there is a companion app to open.
@@ -179,8 +179,9 @@
         byte[] storeFastPairItemBytesArray = args.getByteArray(EXTRA_HALF_SHEET_INFO);
         mBundle = args.getBundle(EXTRA_BUNDLE);
         if (mBundle != null) {
-            mFastPairClient = new FastPairClient(getContext(), mBundle.getBinder(EXTRA_BINDER));
-            mFastPairClient.registerHalfSheet(this);
+            mFastPairUiServiceClient =
+                    new FastPairUiServiceClient(getContext(), mBundle.getBinder(EXTRA_BINDER));
+            mFastPairUiServiceClient.registerHalfSheetStateCallBack(this);
         }
         if (args.containsKey(ARG_FRAGMENT_STATE)) {
             mFragmentState = (HalfSheetFragmentState) args.getSerializable(ARG_FRAGMENT_STATE);
@@ -293,7 +294,7 @@
         }
         mIsConnecting = true;
         invalidateState();
-        mFastPairClient.connect(
+        mFastPairUiServiceClient.connect(
                 new FastPairDevice.Builder()
                         .addMedium(NearbyDevice.Medium.BLE)
                         .setBluetoothAddress(mScanFastPairStoreItem.getAddress())
diff --git a/nearby/service/java/com/android/server/nearby/fastpair/halfsheet/FastPairHalfSheetManager.java b/nearby/service/java/com/android/server/nearby/fastpair/halfsheet/FastPairHalfSheetManager.java
index 6f79e6e..553d5ce 100644
--- a/nearby/service/java/com/android/server/nearby/fastpair/halfsheet/FastPairHalfSheetManager.java
+++ b/nearby/service/java/com/android/server/nearby/fastpair/halfsheet/FastPairHalfSheetManager.java
@@ -59,7 +59,7 @@
     private String mHalfSheetApkPkgName;
     private final LocatorContextWrapper mLocatorContextWrapper;
 
-    FastPairService mFastPairService;
+    FastPairUiServiceImpl mFastPairUiService;
 
     public FastPairHalfSheetManager(Context context) {
         this(new LocatorContextWrapper(context));
@@ -68,7 +68,7 @@
     @VisibleForTesting
     FastPairHalfSheetManager(LocatorContextWrapper locatorContextWrapper) {
         mLocatorContextWrapper = locatorContextWrapper;
-        mFastPairService = new FastPairService();
+        mFastPairUiService = new FastPairUiServiceImpl();
     }
 
     /**
@@ -83,10 +83,10 @@
                     Log.e(TAG, "package name is null");
                     return;
                 }
-                mFastPairService.setFastPairController(
+                mFastPairUiService.setFastPairController(
                         mLocatorContextWrapper.getLocator().get(FastPairController.class));
                 Bundle bundle = new Bundle();
-                bundle.putBinder(EXTRA_BINDER, mFastPairService);
+                bundle.putBinder(EXTRA_BINDER, mFastPairUiService);
                 mLocatorContextWrapper
                         .startActivityAsUser(new Intent(ACTIVITY_INTENT_ACTION)
                                         .putExtra(EXTRA_HALF_SHEET_INFO,
@@ -107,7 +107,7 @@
      * Shows pairing fail half sheet.
      */
     public void showPairingFailed() {
-        FastPairStatusCallback pairStatusCallback = mFastPairService.getPairStatusCallback();
+        FastPairStatusCallback pairStatusCallback = mFastPairUiService.getPairStatusCallback();
         if (pairStatusCallback != null) {
             Log.v(TAG, "showPairingFailed: pairStatusCallback not NULL");
             pairStatusCallback.onPairUpdate(new FastPairDevice.Builder().build(),
@@ -142,7 +142,7 @@
      * Shows pairing success info.
      */
     public void showPairingSuccessHalfSheet(String address) {
-        FastPairStatusCallback pairStatusCallback = mFastPairService.getPairStatusCallback();
+        FastPairStatusCallback pairStatusCallback = mFastPairUiService.getPairStatusCallback();
         if (pairStatusCallback != null) {
             pairStatusCallback.onPairUpdate(
                     new FastPairDevice.Builder().setBluetoothAddress(address).build(),
diff --git a/nearby/service/java/com/android/server/nearby/fastpair/halfsheet/FastPairService.java b/nearby/service/java/com/android/server/nearby/fastpair/halfsheet/FastPairUiServiceImpl.java
similarity index 86%
rename from nearby/service/java/com/android/server/nearby/fastpair/halfsheet/FastPairService.java
rename to nearby/service/java/com/android/server/nearby/fastpair/halfsheet/FastPairUiServiceImpl.java
index 76eabbf..3bd273e 100644
--- a/nearby/service/java/com/android/server/nearby/fastpair/halfsheet/FastPairService.java
+++ b/nearby/service/java/com/android/server/nearby/fastpair/halfsheet/FastPairUiServiceImpl.java
@@ -21,8 +21,8 @@
 import android.nearby.FastPairDevice;
 import android.nearby.FastPairStatusCallback;
 import android.nearby.PairStatusMetadata;
-import android.nearby.aidl.IFastPairClient;
 import android.nearby.aidl.IFastPairStatusCallback;
+import android.nearby.aidl.IFastPairUiService;
 import android.os.IBinder;
 import android.os.RemoteException;
 import android.util.Log;
@@ -34,7 +34,7 @@
  *
  * @hide
  */
-public class FastPairService extends IFastPairClient.Stub {
+public class FastPairUiServiceImpl extends IFastPairUiService.Stub {
 
     private IBinder mStatusCallbackProxy;
     private FastPairController mFastPairController;
@@ -45,7 +45,7 @@
      * in the server.
      */
     @Override
-    public void registerHalfSheet(IFastPairStatusCallback iFastPairStatusCallback) {
+    public void registerCallback(IFastPairStatusCallback iFastPairStatusCallback) {
         mStatusCallbackProxy = iFastPairStatusCallback.asBinder();
         mFastPairStatusCallback = new FastPairStatusCallback() {
             @Override
@@ -64,7 +64,7 @@
      * Unregisters the Binder call back in the server.
      */
     @Override
-    public void unregisterHalfSheet(IFastPairStatusCallback iFastPairStatusCallback) {
+    public void unregisterCallback(IFastPairStatusCallback iFastPairStatusCallback) {
         mStatusCallbackProxy = null;
         mFastPairStatusCallback = null;
     }
@@ -81,6 +81,13 @@
         }
     }
 
+    /**
+     * Cancels Fast Pair connection and dismisses half sheet.
+     */
+    @Override
+    public void cancel(FastPairDevice fastPairDevice) {
+    }
+
     public FastPairStatusCallback getPairStatusCallback() {
         return mFastPairStatusCallback;
     }
