Add checks for features that require the pro version.

This commit is contained in:
darken
2022-01-17 21:36:07 +01:00
parent 3512254694
commit 6dd65ce13f
3 changed files with 56 additions and 10 deletions
@@ -0,0 +1,6 @@
package eu.darken.capod.common.upgrade
import kotlinx.coroutines.flow.first
suspend fun UpgradeRepo.isPro(): Boolean = upgradeInfo.first().isPro
@@ -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
@@ -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)
}