diff --git a/core/java/android/companion/ICompanionDeviceDiscoveryService.aidl b/core/java/android/companion/ICompanionDeviceDiscoveryService.aidl index 37bd6d1c5843a..71e5b246e8ecb 100644 --- a/core/java/android/companion/ICompanionDeviceDiscoveryService.aidl +++ b/core/java/android/companion/ICompanionDeviceDiscoveryService.aidl @@ -28,4 +28,6 @@ oneway interface ICompanionDeviceDiscoveryService { in String callingPackage, in IFindDeviceCallback findCallback, in AndroidFuture serviceCallback); + + void onAssociationCreated(); } diff --git a/packages/CompanionDeviceManager/src/com/android/companiondevicemanager/CompanionDeviceActivity.java b/packages/CompanionDeviceManager/src/com/android/companiondevicemanager/CompanionDeviceActivity.java index b4cafd8548f43..edbfd2a8f03eb 100644 --- a/packages/CompanionDeviceManager/src/com/android/companiondevicemanager/CompanionDeviceActivity.java +++ b/packages/CompanionDeviceManager/src/com/android/companiondevicemanager/CompanionDeviceActivity.java @@ -254,8 +254,14 @@ public class CompanionDeviceActivity extends Activity { Log.i(LOG_TAG, "onDeviceConfirmed(selectedDevice = " + selectedDevice + ")"); getService().onDeviceSelected( getCallingPackage(), getDeviceMacAddress(selectedDevice.device)); + } + + void setResultAndFinish() { + Log.i(LOG_TAG, "setResultAndFinish(selectedDevice = " + + getService().mSelectedDevice.device + ")"); setResult(RESULT_OK, - new Intent().putExtra(CompanionDeviceManager.EXTRA_DEVICE, selectedDevice.device)); + new Intent().putExtra( + CompanionDeviceManager.EXTRA_DEVICE, getService().mSelectedDevice.device)); finish(); } diff --git a/packages/CompanionDeviceManager/src/com/android/companiondevicemanager/CompanionDeviceDiscoveryService.java b/packages/CompanionDeviceManager/src/com/android/companiondevicemanager/CompanionDeviceDiscoveryService.java index 3636f8f5c10e2..4ac217a7fe0f8 100644 --- a/packages/CompanionDeviceManager/src/com/android/companiondevicemanager/CompanionDeviceDiscoveryService.java +++ b/packages/CompanionDeviceManager/src/com/android/companiondevicemanager/CompanionDeviceDiscoveryService.java @@ -116,6 +116,11 @@ public class CompanionDeviceDiscoveryService extends Service { CompanionDeviceDiscoveryService::startDiscovery, CompanionDeviceDiscoveryService.this, request)); } + + @Override + public void onAssociationCreated() { + Handler.getMain().post(CompanionDeviceDiscoveryService.this::onAssociationCreated); + } }; private ScanCallback mBLEScanCallback; @@ -221,6 +226,11 @@ public class CompanionDeviceDiscoveryService extends Service { SCAN_TIMEOUT); } + @MainThread + private void onAssociationCreated() { + mActivity.setResultAndFinish(); + } + private boolean shouldScan(List mediumSpecificFilters) { return !isEmpty(mediumSpecificFilters) || isEmpty(mFilters); } diff --git a/services/companion/java/com/android/server/companion/AssociationRequestsProcessor.java b/services/companion/java/com/android/server/companion/AssociationRequestsProcessor.java index 2a0adeb715592..28dd94d475b74 100644 --- a/services/companion/java/com/android/server/companion/AssociationRequestsProcessor.java +++ b/services/companion/java/com/android/server/companion/AssociationRequestsProcessor.java @@ -154,6 +154,9 @@ class AssociationRequestsProcessor { if (err == null) { mService.createAssociationInternal( userId, deviceAddress, callingPackage, deviceProfile); + mServiceConnectors.forUser(userId).post(service -> { + service.onAssociationCreated(); + }); } else { Slog.e(TAG, "Failed to discover device(s)", err); callback.onFailure("No devices found: " + err.getMessage());