From 98cbbae537632142d0b53c290014268c365de2c0 Mon Sep 17 00:00:00 2001 From: Evan Chen Date: Fri, 14 Jun 2024 17:01:43 +0000 Subject: Fix CDM discovery timeout CDM has a regression preventing activity launches after timeout due to DiscoveryState potentially remaining in FINISHED_TIMEOUT. We must ensure activities are cancelled when timeout occurs while discovery is in progress. Flag: EXEMPT bugfix Bug: 342470917 Test: CTS Change-Id: I531676195e674e2ce52632e5bae6c93fc1d5e1d0 --- .../companiondevicemanager/CompanionAssociationActivity.java | 10 ++++++++-- .../CompanionDeviceDiscoveryService.java | 7 ++++--- 2 files changed, 12 insertions(+), 5 deletions(-) (limited to 'packages/CompanionDeviceManager/src') diff --git a/packages/CompanionDeviceManager/src/com/android/companiondevicemanager/CompanionAssociationActivity.java b/packages/CompanionDeviceManager/src/com/android/companiondevicemanager/CompanionAssociationActivity.java index f98908cf2d56..41ce13a05765 100644 --- a/packages/CompanionDeviceManager/src/com/android/companiondevicemanager/CompanionAssociationActivity.java +++ b/packages/CompanionDeviceManager/src/com/android/companiondevicemanager/CompanionAssociationActivity.java @@ -27,6 +27,8 @@ import static android.view.WindowManager.LayoutParams.SYSTEM_FLAG_HIDE_NON_SYSTE import static com.android.companiondevicemanager.CompanionDeviceDiscoveryService.DiscoveryState; import static com.android.companiondevicemanager.CompanionDeviceDiscoveryService.DiscoveryState.FINISHED_TIMEOUT; +import static com.android.companiondevicemanager.CompanionDeviceDiscoveryService.LOCK; +import static com.android.companiondevicemanager.CompanionDeviceDiscoveryService.sDiscoveryStarted; import static com.android.companiondevicemanager.CompanionDeviceResources.PROFILE_ICONS; import static com.android.companiondevicemanager.CompanionDeviceResources.PROFILE_NAMES; import static com.android.companiondevicemanager.CompanionDeviceResources.PROFILE_PERMISSIONS; @@ -326,8 +328,12 @@ public class CompanionAssociationActivity extends FragmentActivity implements private void onDiscoveryStateChanged(DiscoveryState newState) { if (newState == FINISHED_TIMEOUT && CompanionDeviceDiscoveryService.getScanResult().getValue().isEmpty()) { - cancel(/* discoveryTimeOut */ true, - /* userRejected */ false, /* internalError */ false); + synchronized (LOCK) { + if (sDiscoveryStarted) { + cancel(/* discoveryTimeOut */ true, + /* userRejected */ false, /* internalError */ false); + } + } } } diff --git a/packages/CompanionDeviceManager/src/com/android/companiondevicemanager/CompanionDeviceDiscoveryService.java b/packages/CompanionDeviceManager/src/com/android/companiondevicemanager/CompanionDeviceDiscoveryService.java index e809433a1261..b015f0ac4532 100644 --- a/packages/CompanionDeviceManager/src/com/android/companiondevicemanager/CompanionDeviceDiscoveryService.java +++ b/packages/CompanionDeviceManager/src/com/android/companiondevicemanager/CompanionDeviceDiscoveryService.java @@ -90,9 +90,6 @@ public class CompanionDeviceDiscoveryService extends Service { new MutableLiveData<>(Collections.emptyList()); private static MutableLiveData sStateLiveData = new MutableLiveData<>(DiscoveryState.NOT_STARTED); - private static final Object LOCK = new Object(); - @GuardedBy("LOCK") - private static boolean sDiscoveryStarted = false; private BluetoothManager mBtManager; private BluetoothAdapter mBtAdapter; @@ -109,6 +106,10 @@ public class CompanionDeviceDiscoveryService extends Service { private boolean mStopAfterFirstMatch; + static final Object LOCK = new Object(); + @GuardedBy("LOCK") + static boolean sDiscoveryStarted = false; + /** * A state enum for devices' discovery. */ -- cgit v1.2.3-59-g8ed1b