fun updatePremiumViews()

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.
            }

        }
    }
}