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.setContent
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.lifecycle.compose.collectAsStateWithLifecycle
import androidx.lifecycle.viewmodel.compose.viewModel
import dagger.hilt.android.AndroidEntryPoint
import org.tasks.R
import org.tasks.compose.PurchaseText.SubscriptionScreen
import org.tasks.extensions.Context.findActivity
import org.tasks.themes.TasksTheme
@ -31,6 +36,7 @@ class PurchaseActivity : AppCompatActivity(), OnPurchasesUpdated {
val viewModel: PurchaseActivityViewModel = viewModel()
val state = viewModel.viewState.collectAsStateWithLifecycle().value
val context = LocalContext.current
val snackbarHostState = remember { SnackbarHostState() }
SubscriptionScreen(
nameYourPrice = state.nameYourPrice,
sliderPosition = state.price,
@ -41,7 +47,18 @@ class PurchaseActivity : AppCompatActivity(), OnPurchasesUpdated {
setPrice = { viewModel.setPrice(it) },
setNameYourPrice = { viewModel.setNameYourPrice(it) },
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) }
}
fun dismissError() {
_viewState.update { it.copy(error = null) }
}
companion object {
const val EXTRA_GITHUB = "extra_github"
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.Slider
import androidx.compose.material3.SliderDefaults
import androidx.compose.material3.SnackbarHost
import androidx.compose.material3.SnackbarHostState
import androidx.compose.material3.Text
import androidx.compose.material3.TopAppBar
import androidx.compose.material3.TopAppBarDefaults
import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
@ -138,6 +141,7 @@ object PurchaseText {
nameYourPrice: Boolean,
sliderPosition: Float,
github: Boolean = false,
snackbarHostState: SnackbarHostState = remember { SnackbarHostState() },
setPrice: (Float) -> Unit,
setNameYourPrice: (Boolean) -> Unit,
subscribe: (Int, Boolean) -> Unit,
@ -166,6 +170,7 @@ object PurchaseText {
)
)
},
snackbarHost = { SnackbarHost(hostState = snackbarHostState) },
) { paddingValues ->
Column(
modifier = Modifier

Loading…
Cancel
Save