diff --git a/app/src/main/java/eu/darken/capod/common/upgrade/UpgradeRepoExtensions.kt b/app/src/main/java/eu/darken/capod/common/upgrade/UpgradeRepoExtensions.kt new file mode 100644 index 00000000..c75286ca --- /dev/null +++ b/app/src/main/java/eu/darken/capod/common/upgrade/UpgradeRepoExtensions.kt @@ -0,0 +1,6 @@ +package eu.darken.capod.common.upgrade + +import kotlinx.coroutines.flow.first + + +suspend fun UpgradeRepo.isPro(): Boolean = upgradeInfo.first().isPro \ No newline at end of file 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 75c2f8ad..05e33960 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 @@ -4,15 +4,19 @@ import android.os.Bundle import android.view.View import androidx.annotation.Keep import androidx.fragment.app.viewModels +import androidx.preference.CheckBoxPreference import androidx.preference.ListPreference import androidx.preference.Preference import dagger.hilt.android.AndroidEntryPoint import eu.darken.capod.R import eu.darken.capod.common.preferences.PercentSliderPreference import eu.darken.capod.common.uix.PreferenceFragment2 +import eu.darken.capod.common.upgrade.UpgradeRepo +import eu.darken.capod.common.upgrade.isPro import eu.darken.capod.main.core.GeneralSettings import eu.darken.capod.main.core.MonitorMode import eu.darken.capod.main.core.ScannerMode +import kotlinx.coroutines.runBlocking import javax.inject.Inject @Keep @@ -22,6 +26,7 @@ class GeneralSettingsFragment : PreferenceFragment2() { private val vm: GeneralSettingsFragmentVM by viewModels() @Inject lateinit var generalSettings: GeneralSettings + @Inject lateinit var upgradeRepo: UpgradeRepo override val settings: GeneralSettings get() = generalSettings @@ -61,6 +66,18 @@ class GeneralSettingsFragment : PreferenceFragment2() { super.onViewCreated(view, savedInstanceState) } + override fun onPreferenceTreeClick(preference: Preference): Boolean { + val isPro = runBlocking { upgradeRepo.isPro() } + if (!isPro && preference.key == generalSettings.showAll.key) { + upgradeRepo.launchBillingFlow(requireActivity()) + preference as CheckBoxPreference + preference.isChecked = false + return true + } + + return super.onPreferenceTreeClick(preference) + } + override fun onDisplayPreferenceDialog(preference: Preference) { if (PercentSliderPreference.onDisplayPreferenceDialog(this, preference)) return diff --git a/app/src/main/java/eu/darken/capod/reaction/ui/settings/ReactionSettingsFragment.kt b/app/src/main/java/eu/darken/capod/reaction/ui/settings/ReactionSettingsFragment.kt index b7a2c8a0..d70c641a 100644 --- a/app/src/main/java/eu/darken/capod/reaction/ui/settings/ReactionSettingsFragment.kt +++ b/app/src/main/java/eu/darken/capod/reaction/ui/settings/ReactionSettingsFragment.kt @@ -11,11 +11,14 @@ import androidx.preference.Preference import dagger.hilt.android.AndroidEntryPoint import eu.darken.capod.R import eu.darken.capod.common.uix.PreferenceFragment2 +import eu.darken.capod.common.upgrade.UpgradeRepo +import eu.darken.capod.common.upgrade.isPro import eu.darken.capod.main.core.GeneralSettings import eu.darken.capod.main.core.MonitorMode import eu.darken.capod.main.ui.settings.general.DeviceSelectionDialogFactory import eu.darken.capod.reaction.core.ReactionSettings import eu.darken.capod.reaction.core.autoconnect.AutoConnectCondition +import kotlinx.coroutines.runBlocking import javax.inject.Inject @Keep @@ -26,6 +29,7 @@ class ReactionSettingsFragment : PreferenceFragment2() { @Inject lateinit var generalSettings: GeneralSettings @Inject lateinit var reactionSettings: ReactionSettings + @Inject lateinit var upgradeRepo: UpgradeRepo override val settings: ReactionSettings get() = reactionSettings @@ -44,20 +48,39 @@ class ReactionSettingsFragment : PreferenceFragment2() { } override fun onPreferenceTreeClick(preference: Preference): Boolean { - if (preference.key == reactionSettings.autoConnect.key && generalSettings.mainDeviceAddress.value == null) { - preference as CheckBoxPreference + val isPro = runBlocking { upgradeRepo.isPro() } - val devices = vm.bondedDevices - DeviceSelectionDialogFactory(requireContext()).create( - devices = devices, - current = devices.firstOrNull { it.address == generalSettings.mainDeviceAddress.value } - ) { selected -> - generalSettings.mainDeviceAddress.value = selected?.address - if (selected != null) preference.isChecked = true - }.show() + if (preference.key == reactionSettings.autoPlay.key && !isPro) { + preference as CheckBoxPreference + upgradeRepo.launchBillingFlow(requireActivity()) preference.isChecked = false return true + } else if (preference.key == reactionSettings.autoPause.key && !isPro) { + preference as CheckBoxPreference + upgradeRepo.launchBillingFlow(requireActivity()) + preference.isChecked = false + return true + } else if (preference.key == reactionSettings.autoConnect.key) { + preference as CheckBoxPreference + + if (!isPro) { + upgradeRepo.launchBillingFlow(requireActivity()) + preference.isChecked = false + return true + } else if (generalSettings.mainDeviceAddress.value == null) { + val devices = vm.bondedDevices + DeviceSelectionDialogFactory(requireContext()).create( + devices = devices, + current = devices.firstOrNull { it.address == generalSettings.mainDeviceAddress.value } + ) { selected -> + generalSettings.mainDeviceAddress.value = selected?.address + if (selected != null) preference.isChecked = true + }.show() + preference.isChecked = false + return true + } } + return super.onPreferenceTreeClick(preference) }