diff --git a/OsmAnd-java/src/main/java/net/osmand/Period.java b/OsmAnd-java/src/main/java/net/osmand/Period.java index d6bd911257..b529fdb6db 100644 --- a/OsmAnd-java/src/main/java/net/osmand/Period.java +++ b/OsmAnd-java/src/main/java/net/osmand/Period.java @@ -1,20 +1,23 @@ package net.osmand; import java.text.ParseException; +import java.util.Calendar; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Period { public enum PeriodUnit { - YEAR("Y"), - MONTH("M"), - WEEK("W"), - DAY("D"); + YEAR("Y", Calendar.YEAR), + MONTH("M", Calendar.MONTH), + WEEK("W", Calendar.WEEK_OF_YEAR), + DAY("D", Calendar.DATE); private String unitStr; + private int calendarIdx; - PeriodUnit(String unitStr) { + PeriodUnit(String unitStr, int calendarIdx) { + this.calendarIdx = calendarIdx; this.unitStr = unitStr; } @@ -22,6 +25,10 @@ public class Period { return unitStr; } + public int getCalendarIdx() { + return calendarIdx; + } + public double getMonthsValue() { switch (this) { case YEAR: diff --git a/OsmAnd/res/layout/purchases_layout.xml b/OsmAnd/res/layout/purchases_layout.xml index 2140d2cc5c..d4bb5a3465 100644 --- a/OsmAnd/res/layout/purchases_layout.xml +++ b/OsmAnd/res/layout/purchases_layout.xml @@ -4,7 +4,7 @@ xmlns:osmand="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" - android:layout_height="wrap_content" + android:layout_height="match_parent" android:background="?attr/bg_color" android:orientation="vertical"> diff --git a/OsmAnd/res/layout/subscription_layout.xml b/OsmAnd/res/layout/subscription_layout.xml index de35b80f4a..411e49db31 100644 --- a/OsmAnd/res/layout/subscription_layout.xml +++ b/OsmAnd/res/layout/subscription_layout.xml @@ -7,7 +7,6 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" - android:background="@android:drawable/list_selector_background" android:paddingStart="@dimen/content_padding" android:paddingLeft="@dimen/content_padding" android:paddingRight="@dimen/content_padding" diff --git a/OsmAnd/src-google/net/osmand/plus/inapp/InAppPurchasesImpl.java b/OsmAnd/src-google/net/osmand/plus/inapp/InAppPurchasesImpl.java index a2a0f8d680..9c7ee92758 100644 --- a/OsmAnd/src-google/net/osmand/plus/inapp/InAppPurchasesImpl.java +++ b/OsmAnd/src-google/net/osmand/plus/inapp/InAppPurchasesImpl.java @@ -2,15 +2,15 @@ package net.osmand.plus.inapp; import android.content.Context; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; - import com.android.billingclient.api.SkuDetails; import net.osmand.plus.OsmandApplication; import net.osmand.plus.R; import net.osmand.plus.Version; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + public class InAppPurchasesImpl extends InAppPurchases { private static final InAppPurchase FULL_VERSION = new InAppPurchaseFullVersion(); @@ -285,6 +285,11 @@ public class InAppPurchasesImpl extends InAppPurchases { this.details = details; } + @Override + public int getPeriodTypeString() { + return R.string.monthly_subscription; + } + @Override public String getDefaultPrice(Context ctx) { return ""; diff --git a/OsmAnd/src/net/osmand/plus/chooseplan/ChoosePlanDialogFragment.java b/OsmAnd/src/net/osmand/plus/chooseplan/ChoosePlanDialogFragment.java index 8488daf0f5..814fe15871 100644 --- a/OsmAnd/src/net/osmand/plus/chooseplan/ChoosePlanDialogFragment.java +++ b/OsmAnd/src/net/osmand/plus/chooseplan/ChoosePlanDialogFragment.java @@ -22,17 +22,6 @@ import android.widget.ProgressBar; import android.widget.TextView; import android.widget.Toast; -import androidx.annotation.ColorRes; -import androidx.annotation.DrawableRes; -import androidx.annotation.LayoutRes; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.appcompat.widget.AppCompatImageView; -import androidx.core.content.ContextCompat; -import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentActivity; -import androidx.fragment.app.FragmentManager; - import net.osmand.AndroidUtils; import net.osmand.PlatformUtil; import net.osmand.plus.OsmandApplication; @@ -59,6 +48,17 @@ import org.apache.commons.logging.Log; import java.util.List; +import androidx.annotation.ColorRes; +import androidx.annotation.DrawableRes; +import androidx.annotation.LayoutRes; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.appcompat.widget.AppCompatImageView; +import androidx.core.content.ContextCompat; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentActivity; +import androidx.fragment.app.FragmentManager; + public abstract class ChoosePlanDialogFragment extends BaseOsmAndDialogFragment implements InAppPurchaseListener { public static final String TAG = ChoosePlanDialogFragment.class.getSimpleName(); private static final Log LOG = PlatformUtil.getLog(ChoosePlanDialogFragment.class); @@ -489,14 +489,18 @@ public abstract class ChoosePlanDialogFragment extends BaseOsmAndDialogFragment buttonView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { - subscribe(s.getSku()); + if (getActivity() != null) { + subscribe(app, getActivity(), purchaseHelper, s.getSku()); + } } }); } else { buttonExView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { - subscribe(s.getSku()); + if (getActivity() != null) { + subscribe(app, getActivity(), purchaseHelper, s.getSku()); + } } }); } @@ -526,14 +530,14 @@ public abstract class ChoosePlanDialogFragment extends BaseOsmAndDialogFragment } } - private void subscribe(String sku) { + public static void subscribe(@NonNull OsmandApplication app, Activity activity, + InAppPurchaseHelper purchaseHelper, String sku) { if (!app.getSettings().isInternetConnectionAvailable(true)) { Toast.makeText(app, R.string.internet_not_available, Toast.LENGTH_LONG).show(); } else { - FragmentActivity ctx = getActivity(); - if (ctx != null && purchaseHelper != null) { + if (activity != null && purchaseHelper != null) { OsmandSettings settings = app.getSettings(); - purchaseHelper.purchaseLiveUpdates(ctx, sku, + purchaseHelper.purchaseLiveUpdates(activity, sku, settings.BILLING_USER_EMAIL.get(), settings.BILLING_USER_NAME.get(), settings.BILLING_USER_COUNTRY_DOWNLOAD_NAME.get(), diff --git a/OsmAnd/src/net/osmand/plus/inapp/InAppPurchaseHelper.java b/OsmAnd/src/net/osmand/plus/inapp/InAppPurchaseHelper.java index dfa3f55c84..5136cd1f73 100644 --- a/OsmAnd/src/net/osmand/plus/inapp/InAppPurchaseHelper.java +++ b/OsmAnd/src/net/osmand/plus/inapp/InAppPurchaseHelper.java @@ -8,9 +8,6 @@ import android.os.AsyncTask; import android.text.TextUtils; import android.util.Log; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; - import net.osmand.AndroidNetworkUtils; import net.osmand.AndroidNetworkUtils.OnRequestResultListener; import net.osmand.AndroidNetworkUtils.OnRequestsResultListener; @@ -43,6 +40,9 @@ import java.util.List; import java.util.Map; import java.util.Set; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + public abstract class InAppPurchaseHelper { // Debug tag, for logging protected static final org.apache.commons.logging.Log LOG = PlatformUtil.getLog(InAppPurchaseHelper.class); @@ -203,7 +203,7 @@ public abstract class InAppPurchaseHelper { List subscriptions = new ArrayList<>(); for (InAppSubscription subscription : getLiveUpdates().getVisibleSubscriptions()) { SubscriptionState state = subscription.getState(); - if (state != null && !SubscriptionState.UNDEFINED.equals(state)) { + if (state != SubscriptionState.UNDEFINED) { subscriptions.add(subscription); } } diff --git a/OsmAnd/src/net/osmand/plus/inapp/InAppPurchases.java b/OsmAnd/src/net/osmand/plus/inapp/InAppPurchases.java index 8a6d5a0128..27d359630e 100644 --- a/OsmAnd/src/net/osmand/plus/inapp/InAppPurchases.java +++ b/OsmAnd/src/net/osmand/plus/inapp/InAppPurchases.java @@ -7,12 +7,6 @@ import android.text.Spannable; import android.text.SpannableStringBuilder; import android.text.style.ForegroundColorSpan; -import androidx.annotation.ColorInt; -import androidx.annotation.DrawableRes; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.annotation.StringRes; - import net.osmand.AndroidUtils; import net.osmand.Period; import net.osmand.Period.PeriodUnit; @@ -34,6 +28,12 @@ import java.util.Locale; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; +import androidx.annotation.ColorInt; +import androidx.annotation.DrawableRes; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.annotation.StringRes; + public abstract class InAppPurchases { protected InAppPurchase fullVersion; @@ -645,6 +645,9 @@ public abstract class InAppPurchases { this.skuNoVersion = sku; } + @StringRes + public abstract int getPeriodTypeString(); + @NonNull private List getUpgrades() { return new ArrayList<>(upgrades.values()); @@ -835,6 +838,11 @@ public abstract class InAppPurchases { this(sku, false); } + @Override + public int getPeriodTypeString() { + return R.string.monthly_subscription; + } + @Override public void setPriceValue(double priceValue) { super.setPriceValue(priceValue); @@ -883,6 +891,11 @@ public abstract class InAppPurchases { super(sku, false); } + @Override + public int getPeriodTypeString() { + return R.string.three_months_subscription; + } + @Override public void setPriceValue(double priceValue) { super.setPriceValue(priceValue); @@ -926,6 +939,11 @@ public abstract class InAppPurchases { super(sku, false); } + @Override + public int getPeriodTypeString() { + return R.string.annual_subscription; + } + @Override public void setPriceValue(double priceValue) { super.setPriceValue(priceValue); diff --git a/OsmAnd/src/net/osmand/plus/settings/fragments/PurchasesFragment.java b/OsmAnd/src/net/osmand/plus/settings/fragments/PurchasesFragment.java index af834f73b8..00a15b3071 100644 --- a/OsmAnd/src/net/osmand/plus/settings/fragments/PurchasesFragment.java +++ b/OsmAnd/src/net/osmand/plus/settings/fragments/PurchasesFragment.java @@ -24,6 +24,7 @@ import android.widget.TextView; import com.google.android.material.appbar.AppBarLayout; import net.osmand.AndroidUtils; +import net.osmand.PlatformUtil; import net.osmand.plus.OsmandApplication; import net.osmand.plus.R; import net.osmand.plus.UiUtilities; @@ -44,6 +45,8 @@ import net.osmand.plus.settings.backend.OsmandSettings; import net.osmand.plus.wikipedia.WikipediaDialogFragment; import net.osmand.util.Algorithms; +import org.apache.commons.logging.Log; + import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.fragment.app.FragmentActivity; @@ -51,10 +54,17 @@ import androidx.fragment.app.FragmentManager; public class PurchasesFragment extends BaseOsmAndFragment implements InAppPurchaseListener, OnFragmentInteractionListener { + private static final Log log = PlatformUtil.getLog(PurchasesFragment.class); public static final String TAG = PurchasesFragment.class.getName(); + public static final String KEY_IS_SUBSCRIBER = "action_is_new"; + private static final String PLAY_STORE_SUBSCRIPTION_URL = "https://play.google.com/store/account/subscriptions"; private static final String PLAY_STORE_SUBSCRIPTION_DEEPLINK_URL = "https://play.google.com/store/account/subscriptions?sku=%s&package=%s"; + private static final String EMAIL_DEEPLINK_URI = "mailto:support@osmand.net"; + private static final String OSMAND_EMAIL = "support@osmand.net"; + private static final String OSMAND_NEW_DEVICE_URL = "https://docs.osmand.net/en/main@latest/osmand/purchases#new-device--new-account"; + private static final String OSMAND_PURCHASES_URL = "https://docs.osmand.net/en/main@latest/osmand/purchases"; private OsmandApplication app; private Context context; @@ -66,17 +76,18 @@ public class PurchasesFragment extends BaseOsmAndFragment implements InAppPurcha private CountrySelectionFragment countrySelectionFragment = new CountrySelectionFragment(); private String url; - private Boolean isSubscriber; + private Boolean isPaidVersion; public static boolean showInstance(FragmentManager fragmentManager) { try { PurchasesFragment fragment = new PurchasesFragment(); fragmentManager.beginTransaction() - .add(R.id.fragmentContainer, fragment, TAG) + .replace(R.id.fragmentContainer, fragment, TAG) .addToBackStack(TAG) .commitAllowingStateLoss(); return true; } catch (Exception e) { + log.error(e); return false; } } @@ -90,12 +101,12 @@ public class PurchasesFragment extends BaseOsmAndFragment implements InAppPurcha public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { app = getMyApplication(); context = requireContext(); - isSubscriber = Version.isPaidVersion(app); + isPaidVersion = Version.isPaidVersion(app); final MapActivity mapActivity = getMapActivity(); final boolean nightMode = !app.getSettings().isLightContent(); LayoutInflater themedInflater = UiUtilities.getInflater(context, nightMode); - if (isSubscriber) { + if (isPaidVersion) { mainView = themedInflater.inflate(R.layout.purchases_layout, container, false); setSubscriptionClick(mapActivity); } else { @@ -117,11 +128,6 @@ public class PurchasesFragment extends BaseOsmAndFragment implements InAppPurcha } AndroidUtils.addStatusBarPadding21v(getActivity(), mainView); createToolbar(mainView, nightMode); - mainView.setOnTouchListener(new View.OnTouchListener() { - public boolean onTouch(View v, MotionEvent event) { - return true; - } - }); LinearLayout purchasesRestore = mainView.findViewById(R.id.restore_purchases); purchasesRestore.setOnClickListener(new View.OnClickListener() { @Override @@ -135,7 +141,7 @@ public class PurchasesFragment extends BaseOsmAndFragment implements InAppPurcha newDeviceAccountContainer.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - WikipediaDialogFragment.showFullArticle(context, Uri.parse("https://docs.osmand.net/en/main@latest/osmand/purchases#new-device--new-account"), nightMode); + WikipediaDialogFragment.showFullArticle(context, Uri.parse(OSMAND_NEW_DEVICE_URL), nightMode); } }); @@ -147,10 +153,11 @@ public class PurchasesFragment extends BaseOsmAndFragment implements InAppPurcha public void onResume() { super.onResume(); purchaseHelper = getInAppPurchaseHelper(); - if (isSubscriber) { + if (isPaidVersion) { MapActivity mapActivity = getMapActivity(); if (getMapActivity() != null && purchaseHelper != null) { ViewGroup subscriptionsCardContainer = mainView.findViewById(R.id.subscriptions_card_container); + subscriptionsCardContainer.removeAllViews(); subscriptionsCard = new SubscriptionsCard(mapActivity, purchaseHelper); subscriptionsCardContainer.addView(subscriptionsCard.build(mapActivity)); } @@ -161,7 +168,7 @@ public class PurchasesFragment extends BaseOsmAndFragment implements InAppPurcha @Override public void onSaveInstanceState(@NonNull Bundle outState) { super.onSaveInstanceState(outState); - outState.putBoolean(KEY_IS_SUBSCRIBER, isSubscriber); + outState.putBoolean(KEY_IS_SUBSCRIBER, isPaidVersion); } @Override @@ -277,7 +284,7 @@ public class PurchasesFragment extends BaseOsmAndFragment implements InAppPurcha icon.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - WikipediaDialogFragment.showFullArticle(context, Uri.parse("https://docs.osmand.net/en/main@latest/osmand/purchases"), nightMode); + WikipediaDialogFragment.showFullArticle(context, Uri.parse(OSMAND_PURCHASES_URL), nightMode); } }); ImageButton backButton = toolbar.findViewById(R.id.close_button); @@ -301,14 +308,12 @@ public class PurchasesFragment extends BaseOsmAndFragment implements InAppPurcha TextView supportDescription = mainView.findViewById(R.id.support_link_title); SpannableString spannableStringSupport = new SpannableString(getString(R.string.contact_support)); - String urlSupport = "mailto:support@osmand.net"; - spannableStringSupport.setSpan(new URLSpan(urlSupport), 0, spannableStringSupport.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + spannableStringSupport.setSpan(new URLSpan(EMAIL_DEEPLINK_URI), 0, spannableStringSupport.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); - String emailString = "support@osmand.net"; - String supportDescriptionString = getString(R.string.contact_support_description, emailString); + String supportDescriptionString = getString(R.string.contact_support_description, OSMAND_EMAIL); SpannableString spannableStringMail = new SpannableString(supportDescriptionString); - int startIndex = supportDescriptionString.indexOf(emailString); - int endIndex = startIndex + emailString.length(); + int startIndex = supportDescriptionString.indexOf(OSMAND_EMAIL); + int endIndex = startIndex + OSMAND_EMAIL.length(); StyleSpan boldSpan = new StyleSpan(Typeface.BOLD); spannableStringMail.setSpan(boldSpan, startIndex, endIndex, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); @@ -322,7 +327,7 @@ public class PurchasesFragment extends BaseOsmAndFragment implements InAppPurcha private void getSkuAppId() { InAppPurchaseHelper purchaseHelper = app.getInAppPurchaseHelper(); - if (purchaseHelper != null) { + if (purchaseHelper != null && purchaseHelper.getFullVersion() != null) { String sku = purchaseHelper.getFullVersion().getSku(); url = String.format(PLAY_STORE_SUBSCRIPTION_DEEPLINK_URL, sku, context.getPackageName()); diff --git a/OsmAnd/src/net/osmand/plus/settings/fragments/SubscriptionsCard.java b/OsmAnd/src/net/osmand/plus/settings/fragments/SubscriptionsCard.java index c8c0d5202b..1cc422b3ff 100644 --- a/OsmAnd/src/net/osmand/plus/settings/fragments/SubscriptionsCard.java +++ b/OsmAnd/src/net/osmand/plus/settings/fragments/SubscriptionsCard.java @@ -5,34 +5,34 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; -import android.widget.Toast; import net.osmand.AndroidUtils; import net.osmand.Period; import net.osmand.plus.R; +import net.osmand.plus.UiUtilities; import net.osmand.plus.activities.MapActivity; +import net.osmand.plus.chooseplan.ChoosePlanDialogFragment; import net.osmand.plus.helpers.AndroidUiHelper; import net.osmand.plus.inapp.InAppPurchaseHelper; import net.osmand.plus.inapp.InAppPurchases.InAppSubscription; import net.osmand.plus.inapp.InAppPurchases.InAppSubscription.SubscriptionState; import net.osmand.plus.routepreparationmenu.cards.BaseCard; -import net.osmand.plus.settings.backend.OsmandSettings; import net.osmand.util.Algorithms; import java.text.SimpleDateFormat; -import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.List; +import java.util.Locale; import androidx.annotation.NonNull; -import androidx.appcompat.view.ContextThemeWrapper; -import androidx.core.content.ContextCompat; public class SubscriptionsCard extends BaseCard { private final InAppPurchaseHelper purchaseHelper; + private final SimpleDateFormat dateFormat; + @Override public int getCardLayoutId() { return R.layout.subscriptions_card; @@ -41,33 +41,29 @@ public class SubscriptionsCard extends BaseCard { public SubscriptionsCard(@NonNull MapActivity mapActivity, @NonNull InAppPurchaseHelper purchaseHelper) { super(mapActivity); this.purchaseHelper = purchaseHelper; + this.dateFormat = new SimpleDateFormat("MMM d, yyyy", Locale.getDefault()); } @Override protected void updateContent() { - if (mapActivity == null || purchaseHelper == null) { + if (purchaseHelper == null || Algorithms.isEmpty(purchaseHelper.getEverMadeSubscriptions())) { return; } - List subscriptions = purchaseHelper.getEverMadeSubscriptions(); - if (Algorithms.isEmpty(subscriptions)) { - return; - } - - ContextThemeWrapper ctx = new ContextThemeWrapper(mapActivity, !nightMode ? R.style.OsmandLightTheme : R.style.OsmandDarkTheme); - LayoutInflater inflater = LayoutInflater.from(ctx); + LayoutInflater inflater = UiUtilities.getInflater(mapActivity, nightMode); ((ViewGroup) view).removeAllViews(); + List subscriptions = purchaseHelper.getEverMadeSubscriptions(); for (int i = 0; i < subscriptions.size(); i++) { InAppSubscription subscription = subscriptions.get(i); SubscriptionState state = subscription.getState(); - boolean autoRenewed = SubscriptionState.ACTIVE.equals(state) || SubscriptionState.IN_GRACE_PERIOD.equals(state); + boolean autoRenewed = state == SubscriptionState.ACTIVE || state == SubscriptionState.IN_GRACE_PERIOD; View card = inflater.inflate(R.layout.subscription_layout, null, false); ((ViewGroup) view).addView(card); TextView subscriptionPeriod = card.findViewById(R.id.subscription_type); - String period = getSubscriptionPeriod(subscription.getSubscriptionPeriod()); + String period = app.getString(subscription.getPeriodTypeString()); if (!Algorithms.isEmpty(period)) { subscriptionPeriod.setText(period); AndroidUiHelper.updateVisibility(subscriptionPeriod, true); @@ -80,33 +76,31 @@ public class SubscriptionsCard extends BaseCard { nextBillingDate.setText(app.getString(R.string.next_billing_date, date)); AndroidUiHelper.updateVisibility(nextBillingDate, true); } - } - - TextView status = card.findViewById(R.id.status); - status.setText(app.getString(state.getStringRes())); - status.setBackgroundDrawable(ContextCompat.getDrawable(mapActivity, state.getBackgroundRes())); - - if (!autoRenewed) { + } else { View renewContainer = card.findViewById(R.id.renewContainer); AndroidUiHelper.updateVisibility(renewContainer, true); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - AndroidUtils.setBackground(ctx, renewContainer, nightMode, R.drawable.ripple_light, R.drawable.ripple_dark); + AndroidUtils.setBackground(mapActivity, renewContainer, nightMode, R.drawable.ripple_light, R.drawable.ripple_dark); } else { - AndroidUtils.setBackground(ctx, renewContainer, nightMode, R.drawable.btn_unstroked_light, R.drawable.btn_unstroked_dark); + AndroidUtils.setBackground(mapActivity, renewContainer, nightMode, R.drawable.btn_unstroked_light, R.drawable.btn_unstroked_dark); } final String sku = subscription.getSku(); renewContainer.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - subscribe(sku); + ChoosePlanDialogFragment.subscribe(app, mapActivity, purchaseHelper, sku); } }); View renew = card.findViewById(R.id.renew); - AndroidUtils.setBackground(ctx, renew, nightMode, + AndroidUtils.setBackground(mapActivity, renew, nightMode, R.drawable.btn_solid_border_light, R.drawable.btn_solid_border_dark); } + TextView status = card.findViewById(R.id.status); + status.setText(app.getString(state.getStringRes())); + AndroidUtils.setBackground(status, app.getUIUtilities().getIcon(state.getBackgroundRes())); + int dividerLayout = i + 1 == subscriptions.size() ? R.layout.simple_divider_item : R.layout.divider_half_item; View divider = inflater.inflate(dividerLayout, (ViewGroup) view, false); ((ViewGroup) view).addView(divider); @@ -114,52 +108,14 @@ public class SubscriptionsCard extends BaseCard { } private String getHumanDate(long time, Period period) { - Date date = new Date(time); - int monthsCount; if (period == null || period.getUnit() == null) { return ""; - } else if (period.getUnit().equals(Period.PeriodUnit.YEAR)) { - monthsCount = 12; - } else { - monthsCount = period.getNumberOfUnits(); } + Date date = new Date(time); Calendar calendar = Calendar.getInstance(); calendar.setTime(date); - calendar.add(Calendar.MONTH, monthsCount); + calendar.add(period.getUnit().getCalendarIdx(), period.getNumberOfUnits()); date = calendar.getTime(); - SimpleDateFormat format = new SimpleDateFormat("MMM d, yyyy", app.getLocaleHelper().getPreferredLocale()); - return format.format(date); - } - - private void subscribe(String sku) { - if (app == null) { - return; - } - if (!app.getSettings().isInternetConnectionAvailable(true)) { - Toast.makeText(app, R.string.internet_not_available, Toast.LENGTH_LONG).show(); - } else if (mapActivity != null && purchaseHelper != null) { - OsmandSettings settings = app.getSettings(); - purchaseHelper.purchaseLiveUpdates(mapActivity, sku, - settings.BILLING_USER_EMAIL.get(), - settings.BILLING_USER_NAME.get(), - settings.BILLING_USER_COUNTRY_DOWNLOAD_NAME.get(), - settings.BILLING_HIDE_USER_NAME.get()); - } - } - - private String getSubscriptionPeriod(Period period) { - if (period == null || period.getUnit() == null) { - return ""; - } else if (period.getUnit().equals(Period.PeriodUnit.YEAR)) { - return app.getString(R.string.annual_subscription); - } else if (period.getUnit().equals(Period.PeriodUnit.MONTH)) { - int unitsNumber = period.getNumberOfUnits(); - if (unitsNumber == 1) { - return app.getString(R.string.monthly_subscription); - } else if (unitsNumber == 3) { - return app.getString(R.string.three_months_subscription); - } - } - return ""; + return dateFormat.format(date); } } \ No newline at end of file diff --git a/OsmAnd/src/net/osmand/plus/track/GpxEditDescriptionDialogFragment.java b/OsmAnd/src/net/osmand/plus/track/GpxEditDescriptionDialogFragment.java index 52536316b8..0d8e91e26c 100644 --- a/OsmAnd/src/net/osmand/plus/track/GpxEditDescriptionDialogFragment.java +++ b/OsmAnd/src/net/osmand/plus/track/GpxEditDescriptionDialogFragment.java @@ -130,7 +130,7 @@ public class GpxEditDescriptionDialogFragment extends BaseOsmAndDialogFragment { View btnSave = view.findViewById(R.id.btn_save); int drawableRes = isNightMode(true) ? R.drawable.btn_solid_border_dark : R.drawable.btn_solid_border_light; - btnSave.setBackgroundDrawable(ContextCompat.getDrawable(ctx, drawableRes)); + AndroidUtils.setBackground(btnSave, getMyApplication().getUIUtilities().getIcon(drawableRes)); } private void showDismissDialog() {