Loading src/com/android/settings/accessibility/AvailableHearingDeviceUpdater.java +3 −6 Original line number Diff line number Diff line Loading @@ -16,7 +16,6 @@ package com.android.settings.accessibility; import android.bluetooth.BluetoothDevice; import android.content.Context; import com.android.settings.bluetooth.AvailableMediaBluetoothDeviceUpdater; Loading @@ -37,11 +36,9 @@ public class AvailableHearingDeviceUpdater extends AvailableMediaBluetoothDevice @Override public boolean isFilterMatched(CachedBluetoothDevice cachedDevice) { final BluetoothDevice device = cachedDevice.getDevice(); final boolean isConnectedHearingAidDevice = (cachedDevice.isConnectedHearingAidDevice() && (device.getBondState() == BluetoothDevice.BOND_BONDED)); return isConnectedHearingAidDevice && isDeviceInCachedDevicesList(cachedDevice); return cachedDevice.isHearingAidDevice() && isDeviceConnected(cachedDevice) && isDeviceInCachedDevicesList(cachedDevice); } @Override Loading src/com/android/settings/bluetooth/DeviceListPreferenceFragment.kt +24 −15 Original line number Diff line number Diff line Loading @@ -191,10 +191,11 @@ abstract class DeviceListPreferenceFragment(restrictedKey: String?) : private suspend fun addDevice(cachedDevice: CachedBluetoothDevice) = withContext(Dispatchers.Default) { // TODO(b/289189853): Replace checking if `filter` is null or not to decide which type // of Bluetooth scanning method will be used val filterMatched = filter == null || filter!!.matches(cachedDevice.device) == true // Prevent updates while the list shows one of the state messages if (mBluetoothAdapter!!.state == BluetoothAdapter.STATE_ON && filter?.matches(cachedDevice.device) == true ) { if (mBluetoothAdapter!!.state == BluetoothAdapter.STATE_ON && filterMatched) { createDevicePreference(cachedDevice) } } Loading Loading @@ -304,17 +305,14 @@ abstract class DeviceListPreferenceFragment(restrictedKey: String?) : } } private val scanCallback = object : ScanCallback() { private val leScanCallback = object : ScanCallback() { override fun onScanResult(callbackType: Int, result: ScanResult) { lifecycleScope?.launch { withContext(Dispatchers.Default) { if (mBluetoothAdapter!!.state == BluetoothAdapter.STATE_ON) { val device = result.device val cachedDevice = mCachedDeviceManager!!.findDevice(device) ?: mCachedDeviceManager!!.addDevice(device) createDevicePreference(cachedDevice) } handleLeScanResult(result) } override fun onBatchScanResults(results: MutableList<ScanResult>?) { for (result in results.orEmpty()) { handleLeScanResult(result) } } Loading @@ -328,12 +326,23 @@ abstract class DeviceListPreferenceFragment(restrictedKey: String?) : val settings = ScanSettings.Builder() .setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY) .build() scanner.startScan(leScanFilters, settings, scanCallback) scanner.startScan(leScanFilters, settings, leScanCallback) } private fun stopLeScanning() { val scanner = mBluetoothAdapter!!.bluetoothLeScanner scanner?.stopScan(scanCallback) scanner?.stopScan(leScanCallback) } private fun handleLeScanResult(result: ScanResult) { lifecycleScope?.launch { withContext(Dispatchers.Default) { val device = result.device val cachedDevice = mCachedDeviceManager!!.findDevice(device) ?: mCachedDeviceManager!!.addDevice(device, leScanFilters) addDevice(cachedDevice) } } } companion object { Loading tests/robotests/src/com/android/settings/accessibility/AvailableHearingDeviceUpdaterTest.java +10 −8 Original line number Diff line number Diff line Loading @@ -18,7 +18,6 @@ package com.android.settings.accessibility; import static com.google.common.truth.Truth.assertThat; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.when; import android.bluetooth.BluetoothDevice; Loading Loading @@ -80,8 +79,9 @@ public class AvailableHearingDeviceUpdaterTest { @Test public void isFilterMatch_connectedHearingDevice_returnTrue() { CachedBluetoothDevice connectedHearingDevice = mCachedBluetoothDevice; when(connectedHearingDevice.isConnectedHearingAidDevice()).thenReturn(true); doReturn(BluetoothDevice.BOND_BONDED).when(mBluetoothDevice).getBondState(); when(connectedHearingDevice.isHearingAidDevice()).thenReturn(true); when(mBluetoothDevice.isConnected()).thenReturn(true); when(mBluetoothDevice.getBondState()).thenReturn(BluetoothDevice.BOND_BONDED); when(mCachedDeviceManager.getCachedDevicesCopy()).thenReturn( new ArrayList<>(List.of(connectedHearingDevice))); Loading @@ -91,8 +91,9 @@ public class AvailableHearingDeviceUpdaterTest { @Test public void isFilterMatch_nonConnectedHearingDevice_returnFalse() { CachedBluetoothDevice nonConnectedHearingDevice = mCachedBluetoothDevice; when(nonConnectedHearingDevice.isConnectedHearingAidDevice()).thenReturn(false); doReturn(BluetoothDevice.BOND_BONDED).when(mBluetoothDevice).getBondState(); when(nonConnectedHearingDevice.isHearingAidDevice()).thenReturn(true); when(mBluetoothDevice.isConnected()).thenReturn(false); when(mBluetoothDevice.getBondState()).thenReturn(BluetoothDevice.BOND_BONDED); when(mCachedDeviceManager.getCachedDevicesCopy()).thenReturn( new ArrayList<>(List.of(nonConnectedHearingDevice))); Loading @@ -103,7 +104,8 @@ public class AvailableHearingDeviceUpdaterTest { public void isFilterMatch_connectedBondingHearingDevice_returnFalse() { CachedBluetoothDevice connectedBondingHearingDevice = mCachedBluetoothDevice; when(connectedBondingHearingDevice.isHearingAidDevice()).thenReturn(true); doReturn(BluetoothDevice.BOND_BONDING).when(mBluetoothDevice).getBondState(); when(mBluetoothDevice.isConnected()).thenReturn(true); when(mBluetoothDevice.getBondState()).thenReturn(BluetoothDevice.BOND_BONDING); when(mCachedDeviceManager.getCachedDevicesCopy()).thenReturn( new ArrayList<>(List.of(connectedBondingHearingDevice))); Loading @@ -114,8 +116,8 @@ public class AvailableHearingDeviceUpdaterTest { public void isFilterMatch_hearingDeviceNotInCachedDevicesList_returnFalse() { CachedBluetoothDevice notInCachedDevicesListDevice = mCachedBluetoothDevice; when(notInCachedDevicesListDevice.isHearingAidDevice()).thenReturn(true); doReturn(BluetoothDevice.BOND_BONDED).when(mBluetoothDevice).getBondState(); doReturn(false).when(mBluetoothDevice).isConnected(); when(mBluetoothDevice.isConnected()).thenReturn(true); when(mBluetoothDevice.getBondState()).thenReturn(BluetoothDevice.BOND_BONDED); when(mCachedDeviceManager.getCachedDevicesCopy()).thenReturn(new ArrayList<>()); assertThat(mUpdater.isFilterMatched(notInCachedDevicesListDevice)).isEqualTo(false); Loading Loading
src/com/android/settings/accessibility/AvailableHearingDeviceUpdater.java +3 −6 Original line number Diff line number Diff line Loading @@ -16,7 +16,6 @@ package com.android.settings.accessibility; import android.bluetooth.BluetoothDevice; import android.content.Context; import com.android.settings.bluetooth.AvailableMediaBluetoothDeviceUpdater; Loading @@ -37,11 +36,9 @@ public class AvailableHearingDeviceUpdater extends AvailableMediaBluetoothDevice @Override public boolean isFilterMatched(CachedBluetoothDevice cachedDevice) { final BluetoothDevice device = cachedDevice.getDevice(); final boolean isConnectedHearingAidDevice = (cachedDevice.isConnectedHearingAidDevice() && (device.getBondState() == BluetoothDevice.BOND_BONDED)); return isConnectedHearingAidDevice && isDeviceInCachedDevicesList(cachedDevice); return cachedDevice.isHearingAidDevice() && isDeviceConnected(cachedDevice) && isDeviceInCachedDevicesList(cachedDevice); } @Override Loading
src/com/android/settings/bluetooth/DeviceListPreferenceFragment.kt +24 −15 Original line number Diff line number Diff line Loading @@ -191,10 +191,11 @@ abstract class DeviceListPreferenceFragment(restrictedKey: String?) : private suspend fun addDevice(cachedDevice: CachedBluetoothDevice) = withContext(Dispatchers.Default) { // TODO(b/289189853): Replace checking if `filter` is null or not to decide which type // of Bluetooth scanning method will be used val filterMatched = filter == null || filter!!.matches(cachedDevice.device) == true // Prevent updates while the list shows one of the state messages if (mBluetoothAdapter!!.state == BluetoothAdapter.STATE_ON && filter?.matches(cachedDevice.device) == true ) { if (mBluetoothAdapter!!.state == BluetoothAdapter.STATE_ON && filterMatched) { createDevicePreference(cachedDevice) } } Loading Loading @@ -304,17 +305,14 @@ abstract class DeviceListPreferenceFragment(restrictedKey: String?) : } } private val scanCallback = object : ScanCallback() { private val leScanCallback = object : ScanCallback() { override fun onScanResult(callbackType: Int, result: ScanResult) { lifecycleScope?.launch { withContext(Dispatchers.Default) { if (mBluetoothAdapter!!.state == BluetoothAdapter.STATE_ON) { val device = result.device val cachedDevice = mCachedDeviceManager!!.findDevice(device) ?: mCachedDeviceManager!!.addDevice(device) createDevicePreference(cachedDevice) } handleLeScanResult(result) } override fun onBatchScanResults(results: MutableList<ScanResult>?) { for (result in results.orEmpty()) { handleLeScanResult(result) } } Loading @@ -328,12 +326,23 @@ abstract class DeviceListPreferenceFragment(restrictedKey: String?) : val settings = ScanSettings.Builder() .setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY) .build() scanner.startScan(leScanFilters, settings, scanCallback) scanner.startScan(leScanFilters, settings, leScanCallback) } private fun stopLeScanning() { val scanner = mBluetoothAdapter!!.bluetoothLeScanner scanner?.stopScan(scanCallback) scanner?.stopScan(leScanCallback) } private fun handleLeScanResult(result: ScanResult) { lifecycleScope?.launch { withContext(Dispatchers.Default) { val device = result.device val cachedDevice = mCachedDeviceManager!!.findDevice(device) ?: mCachedDeviceManager!!.addDevice(device, leScanFilters) addDevice(cachedDevice) } } } companion object { Loading
tests/robotests/src/com/android/settings/accessibility/AvailableHearingDeviceUpdaterTest.java +10 −8 Original line number Diff line number Diff line Loading @@ -18,7 +18,6 @@ package com.android.settings.accessibility; import static com.google.common.truth.Truth.assertThat; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.when; import android.bluetooth.BluetoothDevice; Loading Loading @@ -80,8 +79,9 @@ public class AvailableHearingDeviceUpdaterTest { @Test public void isFilterMatch_connectedHearingDevice_returnTrue() { CachedBluetoothDevice connectedHearingDevice = mCachedBluetoothDevice; when(connectedHearingDevice.isConnectedHearingAidDevice()).thenReturn(true); doReturn(BluetoothDevice.BOND_BONDED).when(mBluetoothDevice).getBondState(); when(connectedHearingDevice.isHearingAidDevice()).thenReturn(true); when(mBluetoothDevice.isConnected()).thenReturn(true); when(mBluetoothDevice.getBondState()).thenReturn(BluetoothDevice.BOND_BONDED); when(mCachedDeviceManager.getCachedDevicesCopy()).thenReturn( new ArrayList<>(List.of(connectedHearingDevice))); Loading @@ -91,8 +91,9 @@ public class AvailableHearingDeviceUpdaterTest { @Test public void isFilterMatch_nonConnectedHearingDevice_returnFalse() { CachedBluetoothDevice nonConnectedHearingDevice = mCachedBluetoothDevice; when(nonConnectedHearingDevice.isConnectedHearingAidDevice()).thenReturn(false); doReturn(BluetoothDevice.BOND_BONDED).when(mBluetoothDevice).getBondState(); when(nonConnectedHearingDevice.isHearingAidDevice()).thenReturn(true); when(mBluetoothDevice.isConnected()).thenReturn(false); when(mBluetoothDevice.getBondState()).thenReturn(BluetoothDevice.BOND_BONDED); when(mCachedDeviceManager.getCachedDevicesCopy()).thenReturn( new ArrayList<>(List.of(nonConnectedHearingDevice))); Loading @@ -103,7 +104,8 @@ public class AvailableHearingDeviceUpdaterTest { public void isFilterMatch_connectedBondingHearingDevice_returnFalse() { CachedBluetoothDevice connectedBondingHearingDevice = mCachedBluetoothDevice; when(connectedBondingHearingDevice.isHearingAidDevice()).thenReturn(true); doReturn(BluetoothDevice.BOND_BONDING).when(mBluetoothDevice).getBondState(); when(mBluetoothDevice.isConnected()).thenReturn(true); when(mBluetoothDevice.getBondState()).thenReturn(BluetoothDevice.BOND_BONDING); when(mCachedDeviceManager.getCachedDevicesCopy()).thenReturn( new ArrayList<>(List.of(connectedBondingHearingDevice))); Loading @@ -114,8 +116,8 @@ public class AvailableHearingDeviceUpdaterTest { public void isFilterMatch_hearingDeviceNotInCachedDevicesList_returnFalse() { CachedBluetoothDevice notInCachedDevicesListDevice = mCachedBluetoothDevice; when(notInCachedDevicesListDevice.isHearingAidDevice()).thenReturn(true); doReturn(BluetoothDevice.BOND_BONDED).when(mBluetoothDevice).getBondState(); doReturn(false).when(mBluetoothDevice).isConnected(); when(mBluetoothDevice.isConnected()).thenReturn(true); when(mBluetoothDevice.getBondState()).thenReturn(BluetoothDevice.BOND_BONDED); when(mCachedDeviceManager.getCachedDevicesCopy()).thenReturn(new ArrayList<>()); assertThat(mUpdater.isFilterMatched(notInCachedDevicesListDevice)).isEqualTo(false); Loading