From 172a82b201365255115cf61d5baa5b3dccea0ccc Mon Sep 17 00:00:00 2001 From: darken Date: Tue, 18 Jan 2022 14:13:07 +0100 Subject: [PATCH] Allow selecting the device model to help the app detect the main device. --- .../darken/capod/main/core/GeneralSettings.kt | 7 ++++ .../general/GeneralSettingsFragment.kt | 12 +++++++ .../general/ModelSelectionDialogFactory.kt | 36 +++++++++++++++++++ .../darken/capod/monitor/core/PodMonitor.kt | 9 +++-- app/src/main/res/values/strings.xml | 7 ++-- app/src/main/res/xml/preferences_general.xml | 6 ++++ 6 files changed, 73 insertions(+), 4 deletions(-) create mode 100644 app/src/main/java/eu/darken/capod/main/ui/settings/general/ModelSelectionDialogFactory.kt diff --git a/app/src/main/java/eu/darken/capod/main/core/GeneralSettings.kt b/app/src/main/java/eu/darken/capod/main/core/GeneralSettings.kt index 5812a757..b8bf214b 100644 --- a/app/src/main/java/eu/darken/capod/main/core/GeneralSettings.kt +++ b/app/src/main/java/eu/darken/capod/main/core/GeneralSettings.kt @@ -9,6 +9,7 @@ import eu.darken.androidstarter.common.preferences.Settings import eu.darken.capod.common.debug.autoreport.DebugSettings import eu.darken.capod.common.preferences.PreferenceStoreMapper import eu.darken.capod.common.preferences.createFlowPreference +import eu.darken.capod.pods.core.PodDevice import javax.inject.Inject import javax.inject.Singleton @@ -48,6 +49,12 @@ class GeneralSettings @Inject constructor( null ) + val mainDeviceModel = preferences.createFlowPreference( + "core.maindevice.model", + PodDevice.Model.UNKNOWN, + moshi + ) + override val preferenceDataStore: PreferenceDataStore = PreferenceStoreMapper( monitorMode, scannerMode, 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 f10aef95..8980b331 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 @@ -14,6 +14,7 @@ import eu.darken.capod.common.upgrade.UpgradeRepo import eu.darken.capod.main.core.GeneralSettings import eu.darken.capod.main.core.MonitorMode import eu.darken.capod.main.core.ScannerMode +import eu.darken.capod.pods.core.PodDevice import javax.inject.Inject @Keep @@ -33,6 +34,7 @@ class GeneralSettingsFragment : PreferenceFragment2() { private val monitorModePref by lazy { findPreference(generalSettings.monitorMode.key)!! } private val scanModePref by lazy { findPreference(generalSettings.scannerMode.key)!! } private val mainDeviceAddressPref by lazy { findPreference(generalSettings.mainDeviceAddress.key)!! } + private val mainDeviceModelPref by lazy { findPreference(generalSettings.mainDeviceModel.key)!! } override fun onPreferencesCreated() { monitorModePref.apply { @@ -59,6 +61,16 @@ class GeneralSettingsFragment : PreferenceFragment2() { true } } + mainDeviceModelPref.setOnPreferenceClickListener { + val dialog = ModelSelectionDialogFactory(requireContext()).create( + PodDevice.Model.values().toList(), + generalSettings.mainDeviceModel.value + ) { selected -> + generalSettings.mainDeviceModel.value = selected + } + dialog.show() + true + } super.onViewCreated(view, savedInstanceState) } diff --git a/app/src/main/java/eu/darken/capod/main/ui/settings/general/ModelSelectionDialogFactory.kt b/app/src/main/java/eu/darken/capod/main/ui/settings/general/ModelSelectionDialogFactory.kt new file mode 100644 index 00000000..3ec55628 --- /dev/null +++ b/app/src/main/java/eu/darken/capod/main/ui/settings/general/ModelSelectionDialogFactory.kt @@ -0,0 +1,36 @@ +package eu.darken.capod.main.ui.settings.general + +import android.content.Context +import android.content.DialogInterface +import androidx.appcompat.app.AlertDialog +import com.google.android.material.dialog.MaterialAlertDialogBuilder +import eu.darken.capod.R +import eu.darken.capod.pods.core.PodDevice + + +class ModelSelectionDialogFactory constructor(private val context: Context) { + + fun create( + models: List, + current: PodDevice.Model, + callback: (PodDevice.Model) -> Unit + ): AlertDialog { + return MaterialAlertDialogBuilder(context).apply { + setTitle(R.string.settings_maindevice_model_label) + + val pairing = models + .map { it.label to it } + + setSingleChoiceItems( + pairing.map { it.first }.toTypedArray(), + pairing.indexOfFirst { it.second == current }, + DialogInterface.OnClickListener { dialog, which -> + val selected = pairing[which].second + callback(selected) + dialog.dismiss() + } + ) + + }.create() + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/darken/capod/monitor/core/PodMonitor.kt b/app/src/main/java/eu/darken/capod/monitor/core/PodMonitor.kt index 9a5897ad..99f413e4 100644 --- a/app/src/main/java/eu/darken/capod/monitor/core/PodMonitor.kt +++ b/app/src/main/java/eu/darken/capod/monitor/core/PodMonitor.kt @@ -83,9 +83,14 @@ class PodMonitor @Inject constructor( val mainDevice: Flow get() = devices.map { devices -> - devices.maxByOrNull { it.rssi }?.let { + devices.maxByOrNull { it.rssi }?.let filter@{ device -> val minimumSignalQuality = generalSettings.minimumSignalQuality.value - if (it.signalQuality > minimumSignalQuality) it else null + + generalSettings.mainDeviceModel.value.let { + if (device.model != it && it != PodDevice.Model.UNKNOWN) return@filter null + } + + if (device.signalQuality > minimumSignalQuality) device else null } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 4ac0e092..c0fe60ce 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -131,9 +131,12 @@ Reactions React to events and behaviors. Your device - Main device - The paired pod device to which this app should react. + Your device address + The address of your paired device. The app uses this to determine when it is connected to your phone. None + Your device model + The model of your main device. This helps the app recognize your device when it is not connected to your phone. + When seen Case is open In ear diff --git a/app/src/main/res/xml/preferences_general.xml b/app/src/main/res/xml/preferences_general.xml index ff509dea..340e8af3 100644 --- a/app/src/main/res/xml/preferences_general.xml +++ b/app/src/main/res/xml/preferences_general.xml @@ -35,6 +35,12 @@ android:key="core.maindevice.address" android:summary="@string/settings_maindevice_address_description" android:title="@string/settings_maindevice_address_label" /> + +