mirror of
https://github.com/signalapp/Signal-Android.git
synced 2025-12-24 13:08:46 +00:00
Disable current tier from being selected.
This commit is contained in:
committed by
Cody Henthorne
parent
5e0aa830bf
commit
a60f3a26fb
@@ -46,23 +46,26 @@ import org.thoughtcrime.securesms.keyvalue.SignalStore
|
||||
import org.thoughtcrime.securesms.recipients.Recipient
|
||||
import org.thoughtcrime.securesms.storage.StorageSyncHelper
|
||||
import org.thoughtcrime.securesms.util.RemoteConfig
|
||||
import org.thoughtcrime.securesms.util.next
|
||||
import org.whispersystems.signalservice.api.storage.IAPSubscriptionId
|
||||
import org.whispersystems.signalservice.internal.push.SubscriptionsConfiguration
|
||||
import kotlin.time.Duration.Companion.seconds
|
||||
|
||||
class MessageBackupsFlowViewModel(
|
||||
initialTierSelection: MessageBackupTier?,
|
||||
private val initialTierSelection: MessageBackupTier?,
|
||||
startScreen: MessageBackupsStage = if (SignalStore.backup.backupTier == null) MessageBackupsStage.EDUCATION else MessageBackupsStage.TYPE_SELECTION
|
||||
) : ViewModel(), BackupKeyCredentialManagerHandler {
|
||||
|
||||
companion object {
|
||||
private val TAG = Log.tag(MessageBackupsFlowViewModel::class)
|
||||
private val DEFAULT_BACKUP_TIER: MessageBackupTier = MessageBackupTier.FREE
|
||||
}
|
||||
|
||||
private val internalStateFlow = MutableStateFlow(
|
||||
MessageBackupsFlowState(
|
||||
availableBackupTypes = emptyList(),
|
||||
selectedMessageBackupTier = initialTierSelection ?: SignalStore.backup.backupTier ?: MessageBackupTier.FREE,
|
||||
currentMessageBackupTier = SignalStore.backup.backupTier,
|
||||
selectedMessageBackupTier = resolveSelectedTier(initialTierSelection, SignalStore.backup.backupTier),
|
||||
startScreen = startScreen
|
||||
)
|
||||
)
|
||||
@@ -166,19 +169,49 @@ class MessageBackupsFlowViewModel(
|
||||
activeSubscription.onSuccess { subscription ->
|
||||
if (subscription.isCanceled) {
|
||||
Log.d(TAG, "Active subscription is cancelled. Clearing tier.")
|
||||
internalStateFlow.update { it.copy(currentMessageBackupTier = null) }
|
||||
internalStateFlow.update {
|
||||
it.copy(
|
||||
currentMessageBackupTier = null,
|
||||
selectedMessageBackupTier = resolveSelectedTier(initialTierSelection, null)
|
||||
)
|
||||
}
|
||||
} else if (subscription.isActive) {
|
||||
Log.d(TAG, "Active subscription is active. Setting tier.")
|
||||
internalStateFlow.update { it.copy(currentMessageBackupTier = SignalStore.backup.backupTier) }
|
||||
internalStateFlow.update {
|
||||
it.copy(
|
||||
currentMessageBackupTier = SignalStore.backup.backupTier,
|
||||
selectedMessageBackupTier = resolveSelectedTier(initialTierSelection, SignalStore.backup.backupTier)
|
||||
)
|
||||
}
|
||||
} else {
|
||||
Log.w(TAG, "Subscription is inactive. Clearing tier.")
|
||||
internalStateFlow.update { it.copy(currentMessageBackupTier = null) }
|
||||
internalStateFlow.update {
|
||||
it.copy(
|
||||
currentMessageBackupTier = null,
|
||||
selectedMessageBackupTier = resolveSelectedTier(initialTierSelection, null)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
Log.d(TAG, "User is on tier: $tier")
|
||||
internalStateFlow.update { it.copy(currentMessageBackupTier = tier) }
|
||||
internalStateFlow.update {
|
||||
it.copy(
|
||||
currentMessageBackupTier = tier,
|
||||
selectedMessageBackupTier = resolveSelectedTier(initialTierSelection, SignalStore.backup.backupTier)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun resolveSelectedTier(desiredTier: MessageBackupTier?, currentTier: MessageBackupTier?): MessageBackupTier {
|
||||
return when {
|
||||
desiredTier == null && currentTier == null -> DEFAULT_BACKUP_TIER
|
||||
desiredTier == null && currentTier != null -> currentTier.next()
|
||||
desiredTier != null && currentTier == null -> desiredTier
|
||||
desiredTier != null && currentTier == desiredTier -> currentTier.next()
|
||||
else -> desiredTier ?: DEFAULT_BACKUP_TIER
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -148,6 +148,7 @@ fun MessageBackupsTypeSelectionScreen(
|
||||
{ _, item -> item.tier }
|
||||
) { index, item ->
|
||||
MessageBackupsTypeBlock(
|
||||
enabled = selectedBackupTier != item.tier,
|
||||
messageBackupsType = item,
|
||||
isCurrent = item.tier == currentBackupTier,
|
||||
isSelected = item.tier == selectedBackupTier,
|
||||
|
||||
Reference in New Issue
Block a user