Skip to content

Commit

Permalink
displays error or completion dialog
Browse files Browse the repository at this point in the history
  • Loading branch information
vegaro committed Sep 13, 2023
1 parent 799614a commit 6f3d8ae
Show file tree
Hide file tree
Showing 3 changed files with 83 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,9 @@ package com.revenuecat.paywallstester.ui.screens.paywall
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.material.AlertDialog
import androidx.compose.material.Text
import androidx.compose.material.TextButton
import androidx.compose.runtime.Composable
import androidx.compose.runtime.collectAsState
import androidx.compose.ui.Alignment
Expand All @@ -29,8 +31,42 @@ fun PaywallScreen(
Text(text = "Error: ${state.errorMessage}")
}
is PaywallScreenState.Loaded -> {
PaywallView(PaywallViewOptions.Builder().setOffering(state.offering).build())
PaywallView(
PaywallViewOptions.Builder()
.setOffering(state.offering)
.setListener(viewModel)
.build(),
)
if (state.displayCompletedPurchaseMessage) {
PurchaseAlertDialog(viewModel, "Purchase was successful")
} else if (state.displayErrorPurchasingMessage) {
PurchaseAlertDialog(viewModel, "There was a purchasing error")
}
}
}
}
}

@Composable
private fun PurchaseAlertDialog(
viewModel: PaywallScreenViewModel,
text: String,
) {
AlertDialog(
onDismissRequest = {
viewModel.onDismissed()
},
buttons = {
TextButton(
onClick = {
viewModel.onDismissed()
},
) {
Text("Ok")
}
},
text = {
Text(text)
},
)
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,9 @@ import com.revenuecat.purchases.Offering
sealed class PaywallScreenState {
object Loading : PaywallScreenState()
data class Error(val errorMessage: String) : PaywallScreenState()
data class Loaded(val offering: Offering) : PaywallScreenState()
data class Loaded(
val offering: Offering,
val displayCompletedPurchaseMessage: Boolean = false,
val displayErrorPurchasingMessage: Boolean = false,
) : PaywallScreenState()
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,20 @@ import android.app.Application
import androidx.lifecycle.AndroidViewModel
import androidx.lifecycle.SavedStateHandle
import androidx.lifecycle.viewModelScope
import com.revenuecat.purchases.CustomerInfo
import com.revenuecat.purchases.Purchases
import com.revenuecat.purchases.PurchasesError
import com.revenuecat.purchases.PurchasesException
import com.revenuecat.purchases.awaitOfferings
import com.revenuecat.purchases.models.StoreTransaction
import com.revenuecat.purchases.ui.revenuecatui.PaywallViewListener
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.flow.update
import kotlinx.coroutines.launch

interface PaywallScreenViewModel {
interface PaywallScreenViewModel : PaywallViewListener {
companion object {
const val OFFERING_ID_KEY = "offering_id"
}
Expand All @@ -35,6 +39,42 @@ class PaywallScreenViewModelImpl(
updateOffering()
}

override fun onPurchaseCompleted(customerInfo: CustomerInfo, storeTransaction: StoreTransaction) {
val value = _state.value
if (value is PaywallScreenState.Loaded) {
_state.update {
value.copy(
displayCompletedPurchaseMessage = true,
displayErrorPurchasingMessage = false,
)
}
}
}

override fun onPurchaseError(error: PurchasesError) {
val value = _state.value
if (value is PaywallScreenState.Loaded) {
_state.update {
value.copy(
displayCompletedPurchaseMessage = false,
displayErrorPurchasingMessage = true,
)
}
}
}

override fun onDismissed() {
val value = _state.value
if (value is PaywallScreenState.Loaded) {
_state.update {
value.copy(
displayCompletedPurchaseMessage = false,
displayErrorPurchasingMessage = false,
)
}
}
}

private fun updateOffering() {
viewModelScope.launch {
try {
Expand Down

0 comments on commit 6f3d8ae

Please sign in to comment.