Use IBinder as key of scanTypeScanListenerRecordMap

There is a bug that scanner cannot be stopped because the IScanListener is
different

Test: Built and stopScan() properly.
Bug: 215528063
Change-Id: I4d58a25ac308a03bf089e737ae8b669645f99764
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 fb1afb0..72c4b75 100644
--- a/nearby/service/java/com/android/server/nearby/provider/DiscoveryProviderManager.java
+++ b/nearby/service/java/com/android/server/nearby/provider/DiscoveryProviderManager.java
@@ -22,6 +22,7 @@
 import android.nearby.IScanListener;
 import android.nearby.NearbyDeviceParcelable;
 import android.nearby.ScanRequest;
+import android.os.IBinder;
 import android.os.RemoteException;
 import android.util.Log;
 
@@ -43,13 +44,13 @@
     private @ScanRequest.ScanMode int mScanMode;
 
     @GuardedBy("mLock")
-    private Map<IScanListener, ScanListenerRecord> mScanTypeScanListenerRecordMap;
+    private Map<IBinder, ScanListenerRecord> mScanTypeScanListenerRecordMap;
 
     @Override
     public void onNearbyDeviceDiscovered(NearbyDeviceParcelable nearbyDevice) {
         synchronized (mLock) {
-            for (IScanListener listener : mScanTypeScanListenerRecordMap.keySet()) {
-                ScanListenerRecord record = mScanTypeScanListenerRecordMap.get(listener);
+            for (IBinder listenerBinder : mScanTypeScanListenerRecordMap.keySet()) {
+                ScanListenerRecord record = mScanTypeScanListenerRecordMap.get(listenerBinder);
                 if (record == null) {
                     Log.w(TAG, "DiscoveryProviderManager cannot find the scan record.");
                     continue;
@@ -76,9 +77,10 @@
      */
     public void registerScanListener(ScanRequest scanRequest, IScanListener listener) {
         synchronized (mLock) {
-            if (mScanTypeScanListenerRecordMap.containsKey(listener)) {
-                ScanRequest savedScanRequest = mScanTypeScanListenerRecordMap.get(
-                        listener).getScanRequest();
+            IBinder listenerBinder = listener.asBinder();
+            if (mScanTypeScanListenerRecordMap.containsKey(listener.asBinder())) {
+                ScanRequest savedScanRequest = mScanTypeScanListenerRecordMap
+                        .get(listenerBinder).getScanRequest();
                 if (scanRequest.equals(savedScanRequest)) {
                     Log.d(TAG, "Already registered the scanRequest: " + scanRequest);
                     return;
@@ -87,7 +89,7 @@
 
             startProviders(scanRequest);
 
-            mScanTypeScanListenerRecordMap.put(listener,
+            mScanTypeScanListenerRecordMap.put(listenerBinder,
                     new ScanListenerRecord(scanRequest, listener));
             if (mScanMode < scanRequest.getScanMode()) {
                 mScanMode = scanRequest.getScanMode();
@@ -100,15 +102,17 @@
      * Unregisters the listener in the manager and adjusts the scan mode if necessary afterwards.
      */
     public void unregisterScanListener(IScanListener listener) {
+        IBinder listenerBinder = listener.asBinder();
         synchronized (mLock) {
-            if (!mScanTypeScanListenerRecordMap.containsKey(listener)) {
+            if (!mScanTypeScanListenerRecordMap.containsKey(listenerBinder)) {
                 Log.w(TAG,
-                        "Cannot unregister the scanRequest %s because the request is never "
+                        "Cannot unregister the scanRequest because the request is never "
                                 + "registered.");
                 return;
             }
 
-            ScanListenerRecord removedRecord = mScanTypeScanListenerRecordMap.remove(listener);
+            ScanListenerRecord removedRecord = mScanTypeScanListenerRecordMap
+                    .remove(listenerBinder);
             if (mScanTypeScanListenerRecordMap.isEmpty()) {
                 stopProviders();
                 return;