Updated on 2026-08-14

This commit is contained in:
Tangem 2023-01-08 20:34:56 +03:00
parent fa41036fca
commit 8f6200b7d5
7 changed files with 57 additions and 38 deletions

View file

@ -10,18 +10,17 @@ sealed class DisclaimerAction : Action {
) : DisclaimerAction()
data class Show(
val onAcceptCallback: VoidCallback? = null,
val onDismissCallback: VoidCallback? = null,
val callback: DisclaimerCallback? = null,
) : DisclaimerAction()
data class AcceptDisclaimer(val type: DisclaimerType) : DisclaimerAction()
internal data class UpdateState(val type: DisclaimerType, val accepted: Boolean) : DisclaimerAction()
internal data class SetCallbacks(
val onAcceptCallback: VoidCallback? = null,
val onDismissCallback: VoidCallback? = null,
) : DisclaimerAction()
object OnBackPressed : DisclaimerAction()
}
}
data class DisclaimerCallback(
val onAccept: VoidCallback? = null,
val onDismiss: VoidCallback? = null,
)

View file

@ -28,33 +28,31 @@ private fun handleDisclaimerMiddleware(action: Action, appState: AppState) {
}
is DisclaimerAction.Show -> {
handleUpdateState = state.type.createUpdateState()
store.dispatch(DisclaimerAction.SetCallbacks(action.onAcceptCallback, action.onDismissCallback))
store.dispatch(NavigationAction.NavigateTo(AppScreen.Disclaimer))
}
is DisclaimerAction.AcceptDisclaimer -> {
action.type.accept()
handleUpdateState = action.type.createUpdateState()
store.dispatch(NavigationAction.PopBackTo())
state.onAcceptCallback?.invoke()
store.dispatch(DisclaimerAction.SetCallbacks(null, null))
state.callback?.onAccept?.invoke()
}
is DisclaimerAction.OnBackPressed -> {
state.onDismissCallback?.invoke()
store.dispatch(DisclaimerAction.SetCallbacks(null, null))
store.dispatch(NavigationAction.PopBackTo())
state.callback?.onDismiss?.invoke()
}
}
}
private fun DisclaimerType.accept() = when (this) {
DisclaimerType.SaltPay -> preferencesStorage.disclaimerPrefStorage.hasSaltPayTosAccepted = true
DisclaimerType.Tangem -> preferencesStorage.disclaimerPrefStorage.hasTangemTosAccepted = true
DisclaimerType.Start2Coin -> preferencesStorage.disclaimerPrefStorage.hasStart2CoinTosAccepted = true
DisclaimerType.SaltPay -> preferencesStorage.disclaimerPrefStorage.hasSaltPayTosAccepted = true
}
fun DisclaimerType.isAccepted(): Boolean = when (this) {
DisclaimerType.SaltPay -> preferencesStorage.disclaimerPrefStorage.hasSaltPayTosAccepted
DisclaimerType.Tangem -> preferencesStorage.disclaimerPrefStorage.hasTangemTosAccepted
DisclaimerType.Start2Coin -> preferencesStorage.disclaimerPrefStorage.hasStart2CoinTosAccepted
DisclaimerType.SaltPay -> preferencesStorage.disclaimerPrefStorage.hasSaltPayTosAccepted
}
private fun DisclaimerType.createUpdateState(): DisclaimerAction.UpdateState {

View file

@ -15,13 +15,15 @@ private fun internalReduce(action: Action, state: AppState): DisclaimerState {
val disclaimerState = state.disclaimerState
return when (action) {
is DisclaimerAction.Show -> disclaimerState.copy(
callback = action.callback,
)
is DisclaimerAction.UpdateState -> disclaimerState.copy(
type = action.type,
accepted = action.accepted,
)
is DisclaimerAction.SetCallbacks -> disclaimerState.copy(
onAcceptCallback = action.onAcceptCallback,
onDismissCallback = action.onDismissCallback,
is DisclaimerAction.AcceptDisclaimer, is DisclaimerAction.OnBackPressed -> disclaimerState.copy(
callback = null,
)
else -> disclaimerState
}

View file

@ -1,23 +1,23 @@
package com.tangem.tap.features.disclaimer.redux
import android.net.Uri
import com.tangem.common.extensions.VoidCallback
import com.tangem.domain.common.CardDTO
import com.tangem.domain.common.ScanResponse
import com.tangem.domain.common.TapWorkarounds.isSaltPay
import com.tangem.domain.common.TapWorkarounds.isStart2Coin
import org.rekotlin.StateType
data class DisclaimerState(
val accepted: Boolean = false,
val type: DisclaimerType = DisclaimerType.Tangem,
val onAcceptCallback: VoidCallback? = null,
val onDismissCallback: VoidCallback? = null,
val callback: DisclaimerCallback? = null,
) : StateType
sealed class DisclaimerType(
val uri: Uri,
) {
object Tangem : DisclaimerType(Uri.parse("https://tangem.com/tangem_tos.html"))
object Start2Coin : DisclaimerType(Uri.parse("https://tangem.com/tangem_tos.html"))
object SaltPay : DisclaimerType(Uri.parse("https://tangem.com/soltpay_tos.html"))
companion object {
@ -25,6 +25,7 @@ sealed class DisclaimerType(
fun get(card: CardDTO): DisclaimerType = when {
card.isSaltPay -> SaltPay
card.isStart2Coin -> Start2Coin
else -> Tangem
}
}