Do not create Associtions in CompanionDeviceDiscoveryService

Since and T Associations objects will have the ID feilds. These IDs
must be unique, and will be assigned by the CdmService. To make this
possible all new Associations objects (records) should be created by the
CdmService. At the moment, however, CompanionDeviceDiscoveryService also
creates Associations objects.
Change ICompanionDeviceDiscoveryService interface, so that when it
discovers a device reports back to the CdmService only the mac address
of the device, instead of a fully constructed Association object.
CdmService will take the address and creates an Association itself.

Bug: 197933995
Test: make
Change-Id: I4af928a7bc1c690bc7c3c7c50ec896884e10e3bd
diff --git a/core/java/android/companion/ICompanionDeviceDiscoveryService.aidl b/core/java/android/companion/ICompanionDeviceDiscoveryService.aidl
index a630873..37bd6d1 100644
--- a/core/java/android/companion/ICompanionDeviceDiscoveryService.aidl
+++ b/core/java/android/companion/ICompanionDeviceDiscoveryService.aidl
@@ -16,7 +16,6 @@
 
 package android.companion;
 
-import android.companion.Association;
 import android.companion.AssociationRequest;
 import android.companion.IFindDeviceCallback;
 import com.android.internal.infra.AndroidFuture;
@@ -28,5 +27,5 @@
         in AssociationRequest request,
         in String callingPackage,
         in IFindDeviceCallback findCallback,
-        in AndroidFuture<Association> serviceCallback);
+        in AndroidFuture<String> serviceCallback);
 }
diff --git a/packages/CompanionDeviceManager/src/com/android/companiondevicemanager/CompanionDeviceDiscoveryService.java b/packages/CompanionDeviceManager/src/com/android/companiondevicemanager/CompanionDeviceDiscoveryService.java
index c24782e..3636f8f 100644
--- a/packages/CompanionDeviceManager/src/com/android/companiondevicemanager/CompanionDeviceDiscoveryService.java
+++ b/packages/CompanionDeviceManager/src/com/android/companiondevicemanager/CompanionDeviceDiscoveryService.java
@@ -38,7 +38,6 @@
 import android.bluetooth.le.ScanFilter;
 import android.bluetooth.le.ScanResult;
 import android.bluetooth.le.ScanSettings;
-import android.companion.Association;
 import android.companion.AssociationRequest;
 import android.companion.BluetoothDeviceFilter;
 import android.companion.BluetoothLeDeviceFilter;
@@ -95,7 +94,7 @@
     DeviceFilterPair mSelectedDevice;
     IFindDeviceCallback mFindCallback;
 
-    AndroidFuture<Association> mServiceCallback;
+    AndroidFuture<String> mServiceCallback;
     boolean mIsScanning = false;
     @Nullable
     CompanionDeviceActivity mActivity = null;
@@ -106,7 +105,7 @@
         public void startDiscovery(AssociationRequest request,
                 String callingPackage,
                 IFindDeviceCallback findCallback,
-                AndroidFuture serviceCallback) {
+                AndroidFuture<String> serviceCallback) {
             Log.i(LOG_TAG,
                     "startDiscovery() called with: filter = [" + request
                             + "], findCallback = [" + findCallback + "]"
@@ -320,9 +319,7 @@
         if (callingPackage == null || deviceAddress == null) {
             return;
         }
-        mServiceCallback.complete(new Association(
-                getUserId(), deviceAddress, callingPackage, mRequest.getDeviceProfile(), false,
-                System.currentTimeMillis()));
+        mServiceCallback.complete(deviceAddress);
     }
 
     void onCancel() {
diff --git a/services/companion/java/com/android/server/companion/CompanionDeviceManagerService.java b/services/companion/java/com/android/server/companion/CompanionDeviceManagerService.java
index 44a4997..34d9c8a 100644
--- a/services/companion/java/com/android/server/companion/CompanionDeviceManagerService.java
+++ b/services/companion/java/com/android/server/companion/CompanionDeviceManagerService.java
@@ -208,7 +208,7 @@
     private ScanCallback mBleScanCallback = new BleScanCallback();
     private AssociationRequest mRequest;
     private String mCallingPackage;
-    private AndroidFuture<Association> mOngoingDeviceDiscovery;
+    private AndroidFuture<?> mOngoingDeviceDiscovery;
     private PermissionControllerManager mPermissionControllerManager;
 
     private BluetoothDeviceConnectedListener mBluetoothDeviceConnectedListener =
@@ -383,7 +383,7 @@
         Slog.d(LOG_TAG, "cleanup(); discovery = "
                 + mOngoingDeviceDiscovery + ", request = " + mRequest);
         synchronized (mLock) {
-            AndroidFuture<Association> ongoingDeviceDiscovery = mOngoingDeviceDiscovery;
+            AndroidFuture<?> ongoingDeviceDiscovery = mOngoingDeviceDiscovery;
             if (ongoingDeviceDiscovery != null && !ongoingDeviceDiscovery.isDone()) {
                 ongoingDeviceDiscovery.cancel(true);
             }
@@ -458,13 +458,16 @@
                 return mServiceConnectors.forUser(userId).postAsync(service -> {
                     Slog.d(LOG_TAG, "Connected to CDM service; starting discovery for " + request);
 
-                    AndroidFuture<Association> future = new AndroidFuture<>();
+                    AndroidFuture<String> future = new AndroidFuture<>();
                     service.startDiscovery(request, callingPackage, callback, future);
                     return future;
                 }).cancelTimeout();
 
-            }, FgThread.getExecutor()).whenComplete(uncheckExceptions((association, err) -> {
+            }, FgThread.getExecutor()).whenComplete(uncheckExceptions((deviceAddress, err) -> {
                 if (err == null) {
+                    Association association = new Association(userId, deviceAddress, callingPackage,
+                            mRequest.getDeviceProfile(), false,
+                            System.currentTimeMillis());
                     addAssociation(association, userId);
                 } else {
                     Slog.e(LOG_TAG, "Failed to discover device(s)", err);