From c0bea249429e6e6f42de3ba9aea466b54105cea1 Mon Sep 17 00:00:00 2001 From: geeksville Date: Tue, 9 Jun 2020 10:09:25 -0700 Subject: [PATCH] show placeholder entries for disconnected USB devices #38 --- .../mesh/service/SerialInterface.kt | 2 +- .../geeksville/mesh/ui/SettingsFragment.kt | 31 +++++++++++++++---- 2 files changed, 26 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/com/geeksville/mesh/service/SerialInterface.kt b/app/src/main/java/com/geeksville/mesh/service/SerialInterface.kt index 23c87e1aa..784b98745 100644 --- a/app/src/main/java/com/geeksville/mesh/service/SerialInterface.kt +++ b/app/src/main/java/com/geeksville/mesh/service/SerialInterface.kt @@ -169,7 +169,7 @@ class SerialInterface(private val service: RadioInterfaceService, val address: S override fun close() { debug("Closing serial port") - ioManager?.let { it.stop() } + ignoreException { ioManager?.let { it.stop() } } ioManager = null ignoreException { uart?.close() // This will cause the reader thread to exit diff --git a/app/src/main/java/com/geeksville/mesh/ui/SettingsFragment.kt b/app/src/main/java/com/geeksville/mesh/ui/SettingsFragment.kt index e039d0acb..03f8ba274 100644 --- a/app/src/main/java/com/geeksville/mesh/ui/SettingsFragment.kt +++ b/app/src/main/java/com/geeksville/mesh/ui/SettingsFragment.kt @@ -152,6 +152,15 @@ class BTScanModel(app: Application) : AndroidViewModel(app), Logging { null } + /// If this address is for a USB device, return the macaddr portion, else null + val selectedUSB: String? + get() = selectedAddress?.let { a -> + if (a[0] == 's') + a.substring(1) + else + null + } + /// Use the string for the NopInterface val selectedNotNull: String get() = selectedAddress ?: "n" @@ -618,14 +627,24 @@ class SettingsFragment : ScreenFragment("Settings"), Logging { // The device the user is already paired with is offline currently, still show it // it in the list, but greyed out - if (!hasShownOurDevice && scanModel.selectedBluetooth != null) { - val bDevice = - scanModel.bluetoothAdapter!!.getRemoteDevice(scanModel.selectedBluetooth) - if (bDevice.name != null) { // ignore nodes that node have a name, that means we've lost them since they appeared + if (!hasShownOurDevice) { + if (scanModel.selectedBluetooth != null) { + val bDevice = + scanModel.bluetoothAdapter!!.getRemoteDevice(scanModel.selectedBluetooth) + if (bDevice.name != null) { // ignore nodes that node have a name, that means we've lost them since they appeared + val curDevice = BTScanModel.DeviceListEntry( + bDevice.name, + scanModel.selectedAddress!!, + bDevice.bondState == BOND_BONDED + ) + addDeviceButton(curDevice, false) + } + } else if (scanModel.selectedUSB != null) { + // Must be a USB device, show a placeholder disabled entry val curDevice = BTScanModel.DeviceListEntry( - bDevice.name, + scanModel.selectedUSB!!, scanModel.selectedAddress!!, - bDevice.bondState == BOND_BONDED + false ) addDeviceButton(curDevice, false) }