Show error messages in purchase screen

pull/3203/head
Alex Baker 12 months ago
parent 1a6f44c4ff
commit efa664dd70

@ -4,10 +4,15 @@ import android.os.Bundle
import androidx.activity.compose.BackHandler import androidx.activity.compose.BackHandler
import androidx.activity.compose.setContent import androidx.activity.compose.setContent
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.compose.material3.SnackbarDuration
import androidx.compose.material3.SnackbarHostState
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.remember
import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext
import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.lifecycle.compose.collectAsStateWithLifecycle
import androidx.lifecycle.viewmodel.compose.viewModel import androidx.lifecycle.viewmodel.compose.viewModel
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
import org.tasks.R
import org.tasks.compose.PurchaseText.SubscriptionScreen import org.tasks.compose.PurchaseText.SubscriptionScreen
import org.tasks.extensions.Context.findActivity import org.tasks.extensions.Context.findActivity
import org.tasks.themes.TasksTheme import org.tasks.themes.TasksTheme
@ -31,6 +36,7 @@ class PurchaseActivity : AppCompatActivity(), OnPurchasesUpdated {
val viewModel: PurchaseActivityViewModel = viewModel() val viewModel: PurchaseActivityViewModel = viewModel()
val state = viewModel.viewState.collectAsStateWithLifecycle().value val state = viewModel.viewState.collectAsStateWithLifecycle().value
val context = LocalContext.current val context = LocalContext.current
val snackbarHostState = remember { SnackbarHostState() }
SubscriptionScreen( SubscriptionScreen(
nameYourPrice = state.nameYourPrice, nameYourPrice = state.nameYourPrice,
sliderPosition = state.price, sliderPosition = state.price,
@ -41,7 +47,18 @@ class PurchaseActivity : AppCompatActivity(), OnPurchasesUpdated {
setPrice = { viewModel.setPrice(it) }, setPrice = { viewModel.setPrice(it) },
setNameYourPrice = { viewModel.setNameYourPrice(it) }, setNameYourPrice = { viewModel.setNameYourPrice(it) },
onBack = { finish() }, onBack = { finish() },
snackbarHostState = snackbarHostState,
) )
LaunchedEffect(state.error) {
if (state.error?.isNotBlank() == true) {
snackbarHostState.showSnackbar(
message = state.error,
actionLabel = context.getString(R.string.dismiss),
duration = SnackbarDuration.Long,
)
viewModel.dismissError()
}
}
} }
} }
} }

@ -102,6 +102,10 @@ class PurchaseActivityViewModel @Inject constructor(
_viewState.update { it.copy(nameYourPrice = nameYourPrice) } _viewState.update { it.copy(nameYourPrice = nameYourPrice) }
} }
fun dismissError() {
_viewState.update { it.copy(error = null) }
}
companion object { companion object {
const val EXTRA_GITHUB = "extra_github" const val EXTRA_GITHUB = "extra_github"
const val EXTRA_NAME_YOUR_PRICE = "extra_name_your_price" const val EXTRA_NAME_YOUR_PRICE = "extra_name_your_price"

@ -35,10 +35,13 @@ import androidx.compose.material3.OutlinedButton
import androidx.compose.material3.Scaffold import androidx.compose.material3.Scaffold
import androidx.compose.material3.Slider import androidx.compose.material3.Slider
import androidx.compose.material3.SliderDefaults import androidx.compose.material3.SliderDefaults
import androidx.compose.material3.SnackbarHost
import androidx.compose.material3.SnackbarHostState
import androidx.compose.material3.Text import androidx.compose.material3.Text
import androidx.compose.material3.TopAppBar import androidx.compose.material3.TopAppBar
import androidx.compose.material3.TopAppBarDefaults import androidx.compose.material3.TopAppBarDefaults
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
@ -138,6 +141,7 @@ object PurchaseText {
nameYourPrice: Boolean, nameYourPrice: Boolean,
sliderPosition: Float, sliderPosition: Float,
github: Boolean = false, github: Boolean = false,
snackbarHostState: SnackbarHostState = remember { SnackbarHostState() },
setPrice: (Float) -> Unit, setPrice: (Float) -> Unit,
setNameYourPrice: (Boolean) -> Unit, setNameYourPrice: (Boolean) -> Unit,
subscribe: (Int, Boolean) -> Unit, subscribe: (Int, Boolean) -> Unit,
@ -166,6 +170,7 @@ object PurchaseText {
) )
) )
}, },
snackbarHost = { SnackbarHost(hostState = snackbarHostState) },
) { paddingValues -> ) { paddingValues ->
Column( Column(
modifier = Modifier modifier = Modifier

Loading…
Cancel
Save