Fix billing and choose plan UI

This commit is contained in:
max-klaus 2019-08-18 22:11:09 +03:00
parent 30056e5dea
commit 4353251067
4 changed files with 38 additions and 19 deletions

View file

@ -70,7 +70,7 @@
android:layout_gravity="center"
android:layout_marginStart="@dimen/list_header_padding"
android:layout_marginLeft="@dimen/list_header_padding"
android:src="@drawable/ic_action_singleselect" />
android:src="@drawable/img_feature_purchased" />
</LinearLayout>

View file

@ -353,7 +353,6 @@ public abstract class ChoosePlanDialogFragment extends BaseOsmAndDialogFragment
for (final InAppSubscription s : visibleSubscriptions) {
InAppSubscriptionIntroductoryInfo introductoryInfo = s.getIntroductoryInfo();
boolean hasIntroductoryInfo = introductoryInfo != null;
CharSequence priceTitle = hasIntroductoryInfo ? introductoryInfo.getFormattedDescription(ctx) : s.getPrice(ctx);
CharSequence descriptionText = hasIntroductoryInfo ?
introductoryInfo.getDescriptionTitle(ctx) : s.getDescription(ctx, purchaseHelper.getMonthlyLiveUpdates());
if (s.isPurchased()) {
@ -366,8 +365,10 @@ public abstract class ChoosePlanDialogFragment extends BaseOsmAndDialogFragment
View buttonView = buttonPurchased.findViewById(R.id.button_view);
View buttonCancelView = buttonPurchased.findViewById(R.id.button_cancel_view);
View div = buttonPurchased.findViewById(R.id.div);
AppCompatImageView rightImage = buttonPurchased.findViewById(R.id.right_image);
AppCompatImageView rightImage = (AppCompatImageView) buttonPurchased.findViewById(R.id.right_image);
CharSequence priceTitle = hasIntroductoryInfo ?
introductoryInfo.getFormattedDescription(ctx, buttonTitle.getCurrentTextColor()) : s.getPrice(ctx);
title.setText(s.getTitle(ctx));
description.setText(descriptionText);
buttonTitle.setText(priceTitle);
@ -395,13 +396,13 @@ public abstract class ChoosePlanDialogFragment extends BaseOsmAndDialogFragment
buttonView = buttonCancel.findViewById(R.id.button_view);
buttonCancelView = buttonCancel.findViewById(R.id.button_cancel_view);
div = buttonCancel.findViewById(R.id.div);
rightImage = buttonPurchased.findViewById(R.id.right_image);
rightImage = (AppCompatImageView) buttonCancel.findViewById(R.id.right_image);
title.setText(getString(R.string.osm_live_payment_current_subscription));
description.setText(s.getRenewDescription(ctx));
buttonView.setVisibility(View.GONE);
buttonCancelView.setVisibility(View.VISIBLE);
buttonCancel.setOnClickListener(new OnClickListener() {
buttonCancelView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
manageSubscription(ctx, s.getSku());
@ -426,9 +427,10 @@ public abstract class ChoosePlanDialogFragment extends BaseOsmAndDialogFragment
boolean showSolidButton = !anyPurchasedOrIntroducted || hasIntroductoryInfo;
buttonView.setVisibility(!showSolidButton ? View.VISIBLE : View.GONE);
buttonExView.setVisibility(showSolidButton ? View.VISIBLE : View.GONE);
View div = button.findViewById(R.id.div);
CharSequence priceTitle = hasIntroductoryInfo ?
introductoryInfo.getFormattedDescription(ctx, buttonExTitle.getCurrentTextColor()) : s.getPrice(ctx);
title.setText(s.getTitle(ctx));
description.setText(descriptionText);
buttonTitle.setText(priceTitle);

View file

@ -240,7 +240,7 @@ public class InAppPurchaseHelper {
}
@Override
public void onPurchasesUpdated(List<Purchase> purchases) {
public void onPurchasesUpdated(final List<Purchase> purchases) {
// Have we been disposed of in the meantime? If so, quit.
if (billingManager == null) {
@ -253,6 +253,9 @@ public class InAppPurchaseHelper {
for (InAppPurchase purchase : getInAppPurchases().getAllInAppPurchases(false)) {
skuInApps.add(purchase.getSku());
}
for (Purchase p : purchases) {
skuInApps.add(p.getSku());
}
billingManager.querySkuDetailsAsync(SkuType.INAPP, skuInApps, new SkuDetailsResponseListener() {
@Override
public void onSkuDetailsResponse(BillingResult billingResult, final List<SkuDetails> skuDetailsListInApps) {
@ -268,6 +271,9 @@ public class InAppPurchaseHelper {
for (InAppSubscription subscription : getInAppPurchases().getAllInAppSubscriptions()) {
skuSubscriptions.add(subscription.getSku());
}
for (Purchase p : purchases) {
skuSubscriptions.add(p.getSku());
}
// Have we been disposed of in the meantime? If so, quit.
if (billingManager == null) {
@ -415,8 +421,7 @@ public class InAppPurchaseHelper {
private List<String> getAllOwnedSubscriptionSkus() {
List<String> result = new ArrayList<>();
for (Purchase p : billingManager.getPurchases()) {
InAppPurchase inAppPurchase = getInAppPurchases().getInAppPurchaseBySku(p.getSku());
if (inAppPurchase instanceof InAppSubscription) {
if (getInAppPurchases().getInAppSubscriptionBySku(p.getSku()) != null) {
result.add(p.getSku());
}
}
@ -451,14 +456,14 @@ public class InAppPurchaseHelper {
*/
List<String> allOwnedSubscriptionSkus = getAllOwnedSubscriptionSkus();
for (InAppPurchase p : getLiveUpdates().getAllSubscriptions()) {
if (hasDetails(p.getSku())) {
Purchase purchase = getPurchase(p.getSku());
SkuDetails liveUpdatesDetails = getSkuDetails(p.getSku());
for (InAppSubscription s : getLiveUpdates().getAllSubscriptions()) {
if (hasDetails(s.getSku())) {
Purchase purchase = getPurchase(s.getSku());
SkuDetails liveUpdatesDetails = getSkuDetails(s.getSku());
if (liveUpdatesDetails != null) {
fetchInAppPurchase(p, liveUpdatesDetails, purchase);
fetchInAppPurchase(s, liveUpdatesDetails, purchase);
}
allOwnedSubscriptionSkus.remove(p.getSku());
allOwnedSubscriptionSkus.remove(s.getSku());
}
}
for (String sku : allOwnedSubscriptionSkus) {

View file

@ -1,10 +1,11 @@
package net.osmand.plus.inapp;
import android.content.Context;
import android.graphics.Color;
import android.graphics.Typeface;
import android.support.annotation.ColorInt;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.content.ContextCompat;
import android.text.Spannable;
import android.text.SpannableStringBuilder;
import android.text.style.ForegroundColorSpan;
@ -146,6 +147,16 @@ public class InAppPurchases {
return liveUpdates.getAllSubscriptions();
}
@Nullable
public InAppSubscription getInAppSubscriptionBySku(@NonNull String sku) {
for (InAppSubscription s : liveUpdates.getAllSubscriptions()) {
if (sku.startsWith(s.getSkuNoVersion())) {
return s;
}
}
return null;
}
public boolean isFullVersion(String sku) {
return FULL_VERSION.getSku().equals(sku);
}
@ -570,7 +581,7 @@ public class InAppPurchases {
return ctx.getString(R.string.get_discount_title, totalPeriods, unitStr, discountPercent + "%");
}
public CharSequence getFormattedDescription(@NonNull Context ctx) {
public CharSequence getFormattedDescription(@NonNull Context ctx, @ColorInt int textColor) {
long totalPeriods = getTotalPeriods();
String singleUnitStr = getUnitString(ctx).toLowerCase();
String unitStr = getTotalUnitsString(ctx, false).toLowerCase();
@ -614,9 +625,10 @@ public class InAppPurchases {
SpannableStringBuilder thenPart = new SpannableStringBuilder(ctx.getString(R.string.get_discount_second_part, originalPricePeriod));
Typeface typefaceRegular = FontCache.getRobotoRegular(ctx);
Typeface typefaceBold = FontCache.getRobotoMedium(ctx);
mainPart.setSpan(new ForegroundColorSpan(textColor), 0, mainPart.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
mainPart.setSpan(new CustomTypefaceSpan(typefaceBold), 0, mainPart.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
int textColor = ContextCompat.getColor(ctx, R.color.white_50_transparent);
thenPart.setSpan(new ForegroundColorSpan(textColor), 0, thenPart.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
int secondaryTextColor = Color.argb(128, Color.red(textColor), Color.green(textColor), Color.blue(textColor));
thenPart.setSpan(new ForegroundColorSpan(secondaryTextColor), 0, thenPart.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
thenPart.setSpan(new CustomTypefaceSpan(typefaceRegular), 0, thenPart.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
return new SpannableStringBuilder(mainPart).append("\n").append(thenPart);