kopia lustrzana https://github.com/ryukoposting/Signal-Android
Allow restricted users to update or cancel their subscription.
rodzic
1dc29fda12
commit
c3063b721d
|
@ -14,7 +14,6 @@ import org.thoughtcrime.securesms.components.settings.DSLSettingsIcon
|
||||||
import org.thoughtcrime.securesms.components.settings.DSLSettingsText
|
import org.thoughtcrime.securesms.components.settings.DSLSettingsText
|
||||||
import org.thoughtcrime.securesms.components.settings.PreferenceModel
|
import org.thoughtcrime.securesms.components.settings.PreferenceModel
|
||||||
import org.thoughtcrime.securesms.components.settings.PreferenceViewHolder
|
import org.thoughtcrime.securesms.components.settings.PreferenceViewHolder
|
||||||
import org.thoughtcrime.securesms.components.settings.app.subscription.InAppDonations
|
|
||||||
import org.thoughtcrime.securesms.components.settings.configure
|
import org.thoughtcrime.securesms.components.settings.configure
|
||||||
import org.thoughtcrime.securesms.keyvalue.SignalStore
|
import org.thoughtcrime.securesms.keyvalue.SignalStore
|
||||||
import org.thoughtcrime.securesms.phonenumbers.PhoneNumberFormatter
|
import org.thoughtcrime.securesms.phonenumbers.PhoneNumberFormatter
|
||||||
|
@ -70,7 +69,7 @@ class AppSettingsFragment : DSLSettingsFragment(R.string.text_secure_normal__men
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
if (InAppDonations.hasAtLeastOnePaymentMethodAvailable()) {
|
if (state.allowUserToGoToDonationManagementScreen) {
|
||||||
clickPref(
|
clickPref(
|
||||||
title = DSLSettingsText.from(R.string.preferences__donate_to_signal),
|
title = DSLSettingsText.from(R.string.preferences__donate_to_signal),
|
||||||
icon = DSLSettingsIcon.from(R.drawable.ic_heart_24),
|
icon = DSLSettingsIcon.from(R.drawable.ic_heart_24),
|
||||||
|
|
|
@ -5,5 +5,6 @@ import org.thoughtcrime.securesms.recipients.Recipient
|
||||||
data class AppSettingsState(
|
data class AppSettingsState(
|
||||||
val self: Recipient,
|
val self: Recipient,
|
||||||
val unreadPaymentsCount: Int,
|
val unreadPaymentsCount: Int,
|
||||||
val hasExpiredGiftBadge: Boolean
|
val hasExpiredGiftBadge: Boolean,
|
||||||
|
val allowUserToGoToDonationManagementScreen: Boolean
|
||||||
)
|
)
|
||||||
|
|
|
@ -2,23 +2,51 @@ package org.thoughtcrime.securesms.components.settings.app
|
||||||
|
|
||||||
import androidx.lifecycle.LiveData
|
import androidx.lifecycle.LiveData
|
||||||
import androidx.lifecycle.ViewModel
|
import androidx.lifecycle.ViewModel
|
||||||
|
import io.reactivex.rxjava3.disposables.CompositeDisposable
|
||||||
|
import io.reactivex.rxjava3.kotlin.plusAssign
|
||||||
|
import io.reactivex.rxjava3.kotlin.subscribeBy
|
||||||
|
import org.thoughtcrime.securesms.components.settings.app.subscription.InAppDonations
|
||||||
|
import org.thoughtcrime.securesms.components.settings.app.subscription.MonthlyDonationRepository
|
||||||
import org.thoughtcrime.securesms.conversationlist.model.UnreadPaymentsLiveData
|
import org.thoughtcrime.securesms.conversationlist.model.UnreadPaymentsLiveData
|
||||||
|
import org.thoughtcrime.securesms.dependencies.ApplicationDependencies
|
||||||
import org.thoughtcrime.securesms.keyvalue.SignalStore
|
import org.thoughtcrime.securesms.keyvalue.SignalStore
|
||||||
import org.thoughtcrime.securesms.recipients.Recipient
|
import org.thoughtcrime.securesms.recipients.Recipient
|
||||||
import org.thoughtcrime.securesms.util.livedata.Store
|
import org.thoughtcrime.securesms.util.livedata.Store
|
||||||
|
|
||||||
class AppSettingsViewModel : ViewModel() {
|
class AppSettingsViewModel(
|
||||||
|
monthlyDonationRepository: MonthlyDonationRepository = MonthlyDonationRepository(ApplicationDependencies.getDonationsService())
|
||||||
|
) : ViewModel() {
|
||||||
|
|
||||||
private val store = Store(AppSettingsState(Recipient.self(), 0, SignalStore.donationsValues().getExpiredGiftBadge() != null))
|
private val store = Store(
|
||||||
|
AppSettingsState(
|
||||||
|
Recipient.self(),
|
||||||
|
0,
|
||||||
|
SignalStore.donationsValues().getExpiredGiftBadge() != null,
|
||||||
|
SignalStore.donationsValues().isLikelyASustainer() || InAppDonations.hasAtLeastOnePaymentMethodAvailable()
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
private val unreadPaymentsLiveData = UnreadPaymentsLiveData()
|
private val unreadPaymentsLiveData = UnreadPaymentsLiveData()
|
||||||
private val selfLiveData: LiveData<Recipient> = Recipient.self().live().liveData
|
private val selfLiveData: LiveData<Recipient> = Recipient.self().live().liveData
|
||||||
|
private val disposables = CompositeDisposable()
|
||||||
|
|
||||||
val state: LiveData<AppSettingsState> = store.stateLiveData
|
val state: LiveData<AppSettingsState> = store.stateLiveData
|
||||||
|
|
||||||
init {
|
init {
|
||||||
store.update(unreadPaymentsLiveData) { payments, state -> state.copy(unreadPaymentsCount = payments.map { it.unreadCount }.orElse(0)) }
|
store.update(unreadPaymentsLiveData) { payments, state -> state.copy(unreadPaymentsCount = payments.map { it.unreadCount }.orElse(0)) }
|
||||||
store.update(selfLiveData) { self, state -> state.copy(self = self) }
|
store.update(selfLiveData) { self, state -> state.copy(self = self) }
|
||||||
|
|
||||||
|
disposables += monthlyDonationRepository.getActiveSubscription().subscribeBy(
|
||||||
|
onSuccess = { activeSubscription ->
|
||||||
|
store.update { state ->
|
||||||
|
state.copy(allowUserToGoToDonationManagementScreen = activeSubscription.isActive || InAppDonations.hasAtLeastOnePaymentMethodAvailable())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onCleared() {
|
||||||
|
disposables.clear()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun refreshExpiredGiftBadge() {
|
fun refreshExpiredGiftBadge() {
|
||||||
|
|
|
@ -300,7 +300,7 @@ class DonateToSignalFragment : DSLSettingsFragment(
|
||||||
if (state.donateToSignalType == DonateToSignalType.MONTHLY && state.monthlyDonationState.isSubscriptionActive) {
|
if (state.donateToSignalType == DonateToSignalType.MONTHLY && state.monthlyDonationState.isSubscriptionActive) {
|
||||||
primaryButton(
|
primaryButton(
|
||||||
text = DSLSettingsText.from(R.string.SubscribeFragment__update_subscription),
|
text = DSLSettingsText.from(R.string.SubscribeFragment__update_subscription),
|
||||||
isEnabled = state.canContinue,
|
isEnabled = state.canUpdate,
|
||||||
onClick = {
|
onClick = {
|
||||||
MaterialAlertDialogBuilder(requireContext())
|
MaterialAlertDialogBuilder(requireContext())
|
||||||
.setTitle(R.string.SubscribeFragment__update_subscription_question)
|
.setTitle(R.string.SubscribeFragment__update_subscription_question)
|
||||||
|
|
|
@ -2,6 +2,7 @@ package org.thoughtcrime.securesms.components.settings.app.subscription.donate
|
||||||
|
|
||||||
import org.signal.core.util.money.FiatMoney
|
import org.signal.core.util.money.FiatMoney
|
||||||
import org.thoughtcrime.securesms.badges.models.Badge
|
import org.thoughtcrime.securesms.badges.models.Badge
|
||||||
|
import org.thoughtcrime.securesms.components.settings.app.subscription.InAppDonations
|
||||||
import org.thoughtcrime.securesms.components.settings.app.subscription.boost.Boost
|
import org.thoughtcrime.securesms.components.settings.app.subscription.boost.Boost
|
||||||
import org.thoughtcrime.securesms.keyvalue.SignalStore
|
import org.thoughtcrime.securesms.keyvalue.SignalStore
|
||||||
import org.thoughtcrime.securesms.subscription.Subscription
|
import org.thoughtcrime.securesms.subscription.Subscription
|
||||||
|
@ -54,7 +55,13 @@ data class DonateToSignalState(
|
||||||
|
|
||||||
val canContinue: Boolean
|
val canContinue: Boolean
|
||||||
get() = when (donateToSignalType) {
|
get() = when (donateToSignalType) {
|
||||||
DonateToSignalType.ONE_TIME -> areFieldsEnabled && oneTimeDonationState.isSelectionValid
|
DonateToSignalType.ONE_TIME -> areFieldsEnabled && oneTimeDonationState.isSelectionValid && InAppDonations.hasAtLeastOnePaymentMethodAvailable()
|
||||||
|
DonateToSignalType.MONTHLY -> areFieldsEnabled && monthlyDonationState.isSelectionValid && InAppDonations.hasAtLeastOnePaymentMethodAvailable()
|
||||||
|
}
|
||||||
|
|
||||||
|
val canUpdate: Boolean
|
||||||
|
get() = when (donateToSignalType) {
|
||||||
|
DonateToSignalType.ONE_TIME -> false
|
||||||
DonateToSignalType.MONTHLY -> areFieldsEnabled && monthlyDonationState.isSelectionValid
|
DonateToSignalType.MONTHLY -> areFieldsEnabled && monthlyDonationState.isSelectionValid
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Ładowanie…
Reference in New Issue