diff options
author | Eugene Susla <eugenesusla@google.com> | 2017-03-14 10:26:10 -0700 |
---|---|---|
committer | Eugene Susla <eugenesusla@google.com> | 2017-03-24 14:03:17 -0700 |
commit | a38fbf63fd2a29884637a59387643c801ed4f663 (patch) | |
tree | 17a41c27bc5b8d2e3dd296bf49df2911f65285a0 /packages/CompanionDeviceManager | |
parent | cf0341ec5db251ef3030524c7ca8e51cef45cc40 (diff) |
Unbind from service on app killed and dedup association requests
1. Listen to calling package binder death stopping the scanning on that.
2. Don't restart scanning when a request with the same values was made.
Bug: 30932767
Test: 1.:
- Using a test app start scanning and kill the app.
- In debug mode ensure that DeviceDiscoveryService#stopScan gets triggered
2.:
- Start scanning and rotate the device while device chooser is visible
- Ensure no visible loss of state is happening
Change-Id: If126a2c963da90172a956fbd88e6b3dcd7ac8b01
Diffstat (limited to 'packages/CompanionDeviceManager')
-rw-r--r-- | packages/CompanionDeviceManager/src/com/android/companiondevicemanager/DeviceDiscoveryService.java | 36 |
1 files changed, 25 insertions, 11 deletions
diff --git a/packages/CompanionDeviceManager/src/com/android/companiondevicemanager/DeviceDiscoveryService.java b/packages/CompanionDeviceManager/src/com/android/companiondevicemanager/DeviceDiscoveryService.java index e49463f04ec6..1b6aca1ba65e 100644 --- a/packages/CompanionDeviceManager/src/com/android/companiondevicemanager/DeviceDiscoveryService.java +++ b/packages/CompanionDeviceManager/src/com/android/companiondevicemanager/DeviceDiscoveryService.java @@ -58,6 +58,7 @@ import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.TextView; +import com.android.internal.util.ArrayUtils; import com.android.internal.util.CollectionUtils; import com.android.internal.util.Preconditions; @@ -180,15 +181,20 @@ public class DeviceDiscoveryService extends Service { } private void startDiscovery(AssociationRequest request) { - mRequest = request; + if (!request.equals(mRequest)) { + mRequest = request; - mFilters = request.getDeviceFilters(); - mWifiFilters = CollectionUtils.filter(mFilters, WifiDeviceFilter.class); - mBluetoothFilters = CollectionUtils.filter(mFilters, BluetoothDeviceFilter.class); - mBLEFilters = CollectionUtils.filter(mFilters, BluetoothLEDeviceFilter.class); - mBLEScanFilters = CollectionUtils.map(mBLEFilters, BluetoothLEDeviceFilter::getScanFilter); + mFilters = request.getDeviceFilters(); + mWifiFilters = CollectionUtils.filter(mFilters, WifiDeviceFilter.class); + mBluetoothFilters = CollectionUtils.filter(mFilters, BluetoothDeviceFilter.class); + mBLEFilters = CollectionUtils.filter(mFilters, BluetoothLEDeviceFilter.class); + mBLEScanFilters = CollectionUtils.map(mBLEFilters, BluetoothLEDeviceFilter::getScanFilter); - reset(); + reset(); + } + if (!ArrayUtils.isEmpty(mDevicesFound)) { + onReadyToShowUI(); + } if (shouldScan(mBluetoothFilters)) { final IntentFilter intentFilter = new IntentFilter(); @@ -228,10 +234,18 @@ public class DeviceDiscoveryService extends Service { private void stopScan() { if (DEBUG) Log.i(LOG_TAG, "stopScan() called"); - mBluetoothAdapter.cancelDiscovery(); - mBLEScanner.stopScan(mBLEScanCallback); - unregisterReceiver(mBluetoothDeviceFoundBroadcastReceiver); - unregisterReceiver(mWifiDeviceFoundBroadcastReceiver); + + if (shouldScan(mBluetoothFilters)) { + mBluetoothAdapter.cancelDiscovery(); + unregisterReceiver(mBluetoothDeviceFoundBroadcastReceiver); + } + if (shouldScan(mBLEFilters)) { + mBLEScanner.stopScan(mBLEScanCallback); + } + if (shouldScan(mWifiFilters)) { + unregisterReceiver(mWifiDeviceFoundBroadcastReceiver); + } + stopSelf(); } |