in ClassyTaxiAppKotlin/app/src/main/java/com/example/subscriptions/ui/SubscriptionBindingAdapter.kt [186:262]
fun updatePremiumViews(view: View, subscriptions: List<SubscriptionStatus>?) {
// Set visibility assuming no subscription is available.
// If a subscription is found that meets certain criteria, then the visibility of the paywall
// will be changed to View.GONE.
view.premium_paywall_message.visibility = View.VISIBLE
// The remaining views start hidden. If a subscription is found that meets each criteria,
// then the visibility will be changed to View.VISIBLE.
view.premium_restore_message.visibility = View.GONE
view.premium_grace_period_message.visibility = View.GONE
view.premium_transfer_message.visibility = View.GONE
view.premium_account_hold_message.visibility = View.GONE
view.premium_account_paused_message.visibility = View.GONE
view.premium_premium_content.visibility = View.GONE
view.premium_upgrade_message.visibility = View.GONE
// The Upgrade button should appear if the user has a basic subscription, but does not
// have a premium subscription. This variable keeps track of whether a premium subscription
// has been found when looking through the list of subscriptions.
var hasPremium = false
// Update based on subscription information.
subscriptions?.let {
for (subscription in subscriptions) {
if (isSubscriptionRestore(subscription)) {
Log.d(TAG, "restore VISIBLE")
view.premium_restore_message.run {
visibility = View.VISIBLE
val expiryDate = getHumanReadableDate(subscription.activeUntilMillisec)
text = view.resources.getString(R.string.restore_message_with_date, expiryDate)
}
view.premium_paywall_message.visibility = View.GONE // Paywall gone.
}
if (isGracePeriod(subscription)) {
Log.d(TAG, "grace period VISIBLE")
view.premium_grace_period_message.visibility = View.VISIBLE
view.premium_paywall_message.visibility = View.GONE // Paywall gone.
}
if (isTransferRequired(subscription) && subscription.sku == Constants.PREMIUM_SKU) {
Log.d(TAG, "transfer VISIBLE")
view.premium_transfer_message.visibility = View.VISIBLE
view.premium_paywall_message.visibility = View.GONE // Paywall gone.
}
if (isAccountHold(subscription)) {
Log.d(TAG, "account hold VISIBLE")
view.premium_account_hold_message.visibility = View.VISIBLE
view.premium_paywall_message.visibility = View.GONE // Paywall gone.
}
if (isPaused(subscription)) {
Log.d(TAG, "account paused VISIBLE")
view.premium_account_paused_message_text.run {
val autoResumeDate = getHumanReadableDate(subscription.autoResumeTimeMillis)
text = view.resources.getString(R.string.account_paused_message, autoResumeDate)
}
view.premium_account_paused_message.visibility = View.VISIBLE
view.premium_paywall_message.visibility = View.GONE // Paywall gone.
}
// The upgrade message must be shown if there is a basic subscription
// and there are zero premium subscriptions. We need to keep track of the premium
// subscriptions and hide the upgrade message if we find any.
if (isPremiumContent(subscription)) {
Log.d(TAG, "premium VISIBLE")
view.premium_premium_content.visibility = View.VISIBLE
view.premium_paywall_message.visibility = View.GONE // Paywall gone.
// Make sure we do not ask for an upgrade when user has premium subscription.
hasPremium = true
view.premium_upgrade_message.visibility = View.GONE
}
if (isBasicContent(subscription) && !isPremiumContent(subscription) && !hasPremium) {
Log.d(TAG, "basic VISIBLE")
// Upgrade message will be hidden if a premium subscription is found later.
view.premium_upgrade_message.visibility = View.VISIBLE
view.premium_paywall_message.visibility = View.GONE // Paywall gone.
}
}
}
}