in ClassyTaxiJava/app/src/main/java/com/sample/android/classytaxijava/ui/SubscriptionBindingAdapter.java [189:275]
public static void updatePremiumViews(View view, List<SubscriptionStatus> subscriptions) {
TextView restoreMsg = view.findViewById(R.id.premium_restore_message);
View paywallMsg = view.findViewById(R.id.premium_paywall_message);
View gracePeriodMsg = view.findViewById(R.id.premium_grace_period_message);
View transferMsg = view.findViewById(R.id.premium_transfer_message);
View accountHoldMsg = view.findViewById(R.id.premium_account_hold_message);
View accountPausedMsg = view.findViewById(R.id.premium_account_paused_message);
TextView accountPausedMsgTxt = view.findViewById(R.id.premium_account_paused_message_text);
View premiumContent = view.findViewById(R.id.premium_premium_content);
View upgradeMsg = view.findViewById(R.id.premium_upgrade_message);
// 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.
paywallMsg.setVisibility(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.
restoreMsg.setVisibility(View.GONE);
gracePeriodMsg.setVisibility(View.GONE);
transferMsg.setVisibility(View.GONE);
accountHoldMsg.setVisibility(View.GONE);
accountPausedMsg.setVisibility(View.GONE);
premiumContent.setVisibility(View.GONE);
upgradeMsg.setVisibility(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 throug the list of subscriptions.
boolean hasPremium = false;
// Update based on subscription information.
if (subscriptions != null) {
for (SubscriptionStatus subscription : subscriptions) {
if (BillingUtilities.isSubscriptionRestore(subscription)) {
Log.d(TAG, "restore VISIBLE");
restoreMsg.setVisibility(View.VISIBLE);
String expiryDate = getHumanReadableDate(subscription.getActiveUntilMillisec());
restoreMsg.setText(view.getResources()
.getString(R.string.restore_message_with_date, expiryDate));
paywallMsg.setVisibility(View.GONE); // Paywall gone.
}
if (BillingUtilities.isGracePeriod(subscription)) {
Log.d(TAG, "grace period VISIBLE");
gracePeriodMsg.setVisibility(View.VISIBLE);
paywallMsg.setVisibility(View.GONE); // Paywall gone.
}
if (BillingUtilities.isTransferRequired(subscription)
&& TextUtils.equals(subscription.getSku(), Constants.PREMIUM_SKU)) {
Log.d(TAG, "transfer VISIBLE");
transferMsg.setVisibility(View.VISIBLE);
paywallMsg.setVisibility(View.GONE); // Paywall gone.
}
if (BillingUtilities.isAccountHold(subscription)) {
Log.d(TAG, "account hold VISIBLE");
accountHoldMsg.setVisibility(View.VISIBLE);
paywallMsg.setVisibility(View.GONE); // Paywall gone.
}
if (BillingUtilities.isPaused(subscription)) {
Log.d(TAG, "account paused VISIBLE");
String autoResumeDate = getHumanReadableDate(subscription.getAutoResumeTimeMillis());
String text = view.getResources()
.getString(R.string.account_paused_message_string, autoResumeDate);
accountPausedMsgTxt.setText(text);
accountPausedMsg.setVisibility(View.VISIBLE);
paywallMsg.setVisibility(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 (BillingUtilities.isPremiumContent(subscription)) {
Log.d(TAG, "premium VISIBLE");
premiumContent.setVisibility(View.VISIBLE);
paywallMsg.setVisibility(View.GONE); // Paywall gone.
// Make sure we do not ask for an upgrade when user has premium subscription.
hasPremium = true;
upgradeMsg.setVisibility(View.GONE);
}
if (BillingUtilities.isBasicContent(subscription)
&& !BillingUtilities.isPremiumContent(subscription)
&& !hasPremium) {
Log.d(TAG, "basic VISIBLE");
// Upgrade message will be hidden if a premium subscription is found later.
upgradeMsg.setVisibility(View.VISIBLE);
paywallMsg.setVisibility(View.GONE); // Paywall gone.
}
}
}
}