diff --git a/app/src/main/java/eu/darken/capod/main/ui/settings/general/GeneralSettingsFragment.kt b/app/src/main/java/eu/darken/capod/main/ui/settings/general/GeneralSettingsFragment.kt index a3564f74..c1340c80 100644 --- a/app/src/main/java/eu/darken/capod/main/ui/settings/general/GeneralSettingsFragment.kt +++ b/app/src/main/java/eu/darken/capod/main/ui/settings/general/GeneralSettingsFragment.kt @@ -76,17 +76,18 @@ class GeneralSettingsFragment : PreferenceFragment3() { private fun String.fromHumanReadable(): ByteArray = split("-").map { it.toInt(16).toByte() }.toByteArray() override fun onViewCreated(view: View, savedInstanceState: Bundle?) { - vm.bondedDevices.observe2 { devices -> + vm.state.observe2 { state -> mainDeviceAddressPref.setOnPreferenceClickListener { val dialog = DeviceSelectionDialogFactory(requireContext()).create( - devices, - devices.firstOrNull { it.address == generalSettings.mainDeviceAddress.value } + state.devices, + state.devices.firstOrNull { it.address == generalSettings.mainDeviceAddress.value } ) { selected -> generalSettings.mainDeviceAddress.value = selected?.address } dialog.show() true } + mainDeviceEncryptionKeyPref.isEnabled = state.hasIdentityKey } vm.events.observe2 { diff --git a/app/src/main/java/eu/darken/capod/main/ui/settings/general/GeneralSettingsFragmentVM.kt b/app/src/main/java/eu/darken/capod/main/ui/settings/general/GeneralSettingsFragmentVM.kt index a842d0bd..16da29c7 100644 --- a/app/src/main/java/eu/darken/capod/main/ui/settings/general/GeneralSettingsFragmentVM.kt +++ b/app/src/main/java/eu/darken/capod/main/ui/settings/general/GeneralSettingsFragmentVM.kt @@ -2,6 +2,7 @@ package eu.darken.capod.main.ui.settings.general import androidx.lifecycle.SavedStateHandle import dagger.hilt.android.lifecycle.HiltViewModel +import eu.darken.capod.common.bluetooth.BluetoothDevice2 import eu.darken.capod.common.bluetooth.BluetoothManager2 import eu.darken.capod.common.coroutine.DispatcherProvider import eu.darken.capod.common.debug.logging.logTag @@ -10,9 +11,10 @@ import eu.darken.capod.common.livedata.SingleLiveEvent import eu.darken.capod.common.uix.ViewModel3 import eu.darken.capod.main.core.GeneralSettings import eu.darken.capod.main.core.MonitorMode +import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.filter -import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.onEach +import kotlinx.coroutines.flow.onStart import javax.inject.Inject @HiltViewModel @@ -23,10 +25,6 @@ class GeneralSettingsFragmentVM @Inject constructor( private val generalSettings: GeneralSettings, ) : ViewModel3(dispatcherProvider) { - val bondedDevices = bluetoothManager.bondedDevices() - .map { it.toList() } - .asLiveData2() - val events = SingleLiveEvent() init { @@ -39,6 +37,21 @@ class GeneralSettingsFragmentVM @Inject constructor( .launchInViewModel() } + val state = combine( + bluetoothManager.bondedDevices().onStart { emit(emptySet()) }, + generalSettings.mainDeviceIdentityKey.flow + ) { bondedDevices, identityKey -> + State( + devices = bondedDevices.toList(), + hasIdentityKey = identityKey != null + ) + }.asLiveData2() + + data class State( + val devices: List, + val hasIdentityKey: Boolean + ) + companion object { private val TAG = logTag("Settings", "General", "VM") } diff --git a/app/src/main/res/xml/preferences_general.xml b/app/src/main/res/xml/preferences_general.xml index ff5fe7a5..e0a3fdd4 100644 --- a/app/src/main/res/xml/preferences_general.xml +++ b/app/src/main/res/xml/preferences_general.xml @@ -51,6 +51,7 @@