Bluetooth: Always scan while on pairing or DevicePicker page
* Modified DeviceListPreferenceFragment to have enable/disable scanning methods. In ENABLE state, each onScanningStateChanged(false) will restart another round of scanning * Subclasses of DeviceListPreferenceFragment should call enable/disable scanning when scanning is needed for long period of time * Currently, BluetoothPairingDetail and DevicePickerFragment call enableScanning() when Bluetooth is turned ON and call disableScanning when some device is picked in their lists * Both BluetoothPairingDetail and DevicePickerFragment will re-enable scanning if pairing failed for selected device * Added associated unit tests as well Bug: 32172815 Test: make, pair Bluetooth device, send file over Bluetooth Opp Change-Id: I99325e06aadd7b00e7a7ba6d6c282a6831859d8b
This commit is contained in:
@@ -82,7 +82,7 @@ public class BluetoothPairingDetail extends DeviceListPreferenceFragment impleme
|
||||
|
||||
// Make the device only visible to connected devices.
|
||||
mLocalAdapter.setScanMode(BluetoothAdapter.SCAN_MODE_CONNECTABLE);
|
||||
mLocalAdapter.stopScanning();
|
||||
disableScanning();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -98,25 +98,29 @@ public class BluetoothPairingDetail extends DeviceListPreferenceFragment impleme
|
||||
return MetricsEvent.BLUETOOTH;
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
void startScanning() {
|
||||
if (mAvailableDevicesCategory != null) {
|
||||
removeAllDevices();
|
||||
@Override
|
||||
void enableScanning() {
|
||||
// Clear all device states before first scan
|
||||
if (!mInitialScanStarted) {
|
||||
if (mAvailableDevicesCategory != null) {
|
||||
removeAllDevices();
|
||||
}
|
||||
mLocalManager.getCachedDeviceManager().clearNonBondedDevices();
|
||||
mInitialScanStarted = true;
|
||||
}
|
||||
|
||||
mLocalManager.getCachedDeviceManager().clearNonBondedDevices();
|
||||
mInitialScanStarted = true;
|
||||
mLocalAdapter.startScanning(true);
|
||||
super.enableScanning();
|
||||
}
|
||||
|
||||
@Override
|
||||
void onDevicePreferenceClick(BluetoothDevicePreference btPreference) {
|
||||
mLocalAdapter.stopScanning();
|
||||
disableScanning();
|
||||
super.onDevicePreferenceClick(btPreference);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onScanningStateChanged(boolean started) {
|
||||
super.onScanningStateChanged(started);
|
||||
started |= mScanEnabled;
|
||||
mAvailableDevicesCategory.setProgress(started);
|
||||
}
|
||||
|
||||
@@ -131,14 +135,10 @@ public class BluetoothPairingDetail extends DeviceListPreferenceFragment impleme
|
||||
R.string.bluetooth_preference_found_devices,
|
||||
BluetoothDeviceFilter.UNBONDED_DEVICE_FILTER, mInitialScanStarted);
|
||||
updateFooterPreference(mFooterPreference);
|
||||
|
||||
if (!mInitialScanStarted) {
|
||||
startScanning();
|
||||
}
|
||||
|
||||
// mLocalAdapter.setScanMode is internally synchronized so it is okay for multiple
|
||||
// threads to execute.
|
||||
mLocalAdapter.setScanMode(BluetoothAdapter.SCAN_MODE_CONNECTABLE_DISCOVERABLE);
|
||||
enableScanning();
|
||||
break;
|
||||
|
||||
case BluetoothAdapter.STATE_OFF:
|
||||
@@ -158,6 +158,15 @@ public class BluetoothPairingDetail extends DeviceListPreferenceFragment impleme
|
||||
if (bondState == BluetoothDevice.BOND_BONDED) {
|
||||
// If one device is connected(bonded), then close this fragment.
|
||||
finish();
|
||||
return;
|
||||
}
|
||||
if (mSelectedDevice != null && cachedDevice != null) {
|
||||
BluetoothDevice device = cachedDevice.getDevice();
|
||||
if (device != null && mSelectedDevice.equals(device)
|
||||
&& bondState == BluetoothDevice.BOND_NONE) {
|
||||
// If currently selected device failed to bond, restart scanning
|
||||
enableScanning();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user