From f56772a18cca5a32b05ea2845205d309aec77f7b Mon Sep 17 00:00:00 2001 From: Alexander Zatsepin Date: Tue, 18 Sep 2018 21:20:03 +0300 Subject: [PATCH] [android] Extracted ads removal payment state to separate class --- .../maps/purchase/AdsRemovalPaymentState.java | 64 +++++++++++++++++ .../purchase/AdsRemovalPurchaseDialog.java | 69 ++++--------------- 2 files changed, 77 insertions(+), 56 deletions(-) create mode 100644 android/src/com/mapswithme/maps/purchase/AdsRemovalPaymentState.java diff --git a/android/src/com/mapswithme/maps/purchase/AdsRemovalPaymentState.java b/android/src/com/mapswithme/maps/purchase/AdsRemovalPaymentState.java new file mode 100644 index 0000000000..3c7d220f12 --- /dev/null +++ b/android/src/com/mapswithme/maps/purchase/AdsRemovalPaymentState.java @@ -0,0 +1,64 @@ +package com.mapswithme.maps.purchase; + +import android.support.annotation.NonNull; +import android.support.v4.app.DialogFragment; +import android.view.View; +import android.widget.TextView; + +import com.mapswithme.maps.R; +import com.mapswithme.util.UiUtils; + +enum AdsRemovalPaymentState +{ + NONE + { + @Override + void activate(@NonNull AdsRemovalPurchaseDialog dialog) + { + throw new UnsupportedOperationException("This state can't be used!"); + } + }, + LOADING + { + @Override + void activate(@NonNull AdsRemovalPurchaseDialog dialog) + { + View view = AdsRemovalPaymentState.getDialogViewOrThrow(dialog); + UiUtils.hide(view, R.id.title, R.id.image, R.id.pay_button_container); + UiUtils.show(view, R.id.progress_layout); + dialog.queryPurchaseDetails(); + } + }, + PRICE_SELECTION + { + @Override + void activate(@NonNull AdsRemovalPurchaseDialog dialog) + { + View view = AdsRemovalPaymentState.getDialogViewOrThrow(dialog); + UiUtils.hide(view, R.id.progress_layout); + UiUtils.show(view, R.id.title, R.id.image, R.id.pay_button_container); + TextView title = view.findViewById(R.id.title); + title.setText(R.string.remove_ads_title); + dialog.updateYearlyButton(); + } + }, + EXPLANATION + { + @Override + void activate(@NonNull AdsRemovalPurchaseDialog dialog) + { + + } + }; + + @NonNull + private static View getDialogViewOrThrow(@NonNull DialogFragment dialog) + { + View view = dialog.getView(); + if (view == null) + throw new IllegalStateException("Before call this method make sure that the dialog exists"); + return view; + } + + abstract void activate(@NonNull AdsRemovalPurchaseDialog dialog); +} diff --git a/android/src/com/mapswithme/maps/purchase/AdsRemovalPurchaseDialog.java b/android/src/com/mapswithme/maps/purchase/AdsRemovalPurchaseDialog.java index 89bb39525b..8ad1619607 100644 --- a/android/src/com/mapswithme/maps/purchase/AdsRemovalPurchaseDialog.java +++ b/android/src/com/mapswithme/maps/purchase/AdsRemovalPurchaseDialog.java @@ -14,7 +14,6 @@ import com.mapswithme.maps.R; import com.mapswithme.maps.base.BaseMwmDialogFragment; import com.mapswithme.maps.dialog.AlertDialog; import com.mapswithme.maps.dialog.AlertDialogCallback; -import com.mapswithme.util.UiUtils; import com.mapswithme.util.Utils; import com.mapswithme.util.log.Logger; import com.mapswithme.util.log.LoggerFactory; @@ -35,7 +34,7 @@ public class AdsRemovalPurchaseDialog extends BaseMwmDialogFragment implements A @Nullable private ProductDetails[] mProductDetails; @NonNull - private State mState = State.NONE; + private AdsRemovalPaymentState mState = AdsRemovalPaymentState.NONE; @SuppressWarnings("NullableProblems") @NonNull private PurchaseController mController; @@ -77,19 +76,21 @@ public class AdsRemovalPurchaseDialog extends BaseMwmDialogFragment implements A LOGGER.d(TAG, "onViewCreated savedInstanceState = " + savedInstanceState); if (savedInstanceState != null) { - State savedState = State.values()[savedInstanceState.getInt(EXTRA_CURRENT_STATE)]; + AdsRemovalPaymentState savedState = AdsRemovalPaymentState.values()[savedInstanceState.getInt(EXTRA_CURRENT_STATE)]; ProductDetails[] productDetails = (ProductDetails[]) savedInstanceState.getParcelableArray(EXTRA_PRODUCT_DETAILS); if (productDetails != null) - { mProductDetails = productDetails; - updateYearlyButton(); - } + activateState(savedState); return; } - activateState(State.LOADING); + activateState(AdsRemovalPaymentState.LOADING); + } + + void queryPurchaseDetails() + { mController.queryPurchaseDetails(); } @@ -99,10 +100,10 @@ public class AdsRemovalPurchaseDialog extends BaseMwmDialogFragment implements A mController.launchPurchaseFlow(details.getProductId()); } - private void activateState(@NonNull State state) + private void activateState(@NonNull AdsRemovalPaymentState state) { mState = state; - mState.activate(getViewOrThrow()); + mState.activate(this); } @Override @@ -122,7 +123,7 @@ public class AdsRemovalPurchaseDialog extends BaseMwmDialogFragment implements A mController.removeCallback(); } - private void updateYearlyButton() + void updateYearlyButton() { ProductDetails details = getProductDetailsForPeriod(Period.P1Y); String price = Utils.formatCurrencyString(details.getPrice(), details.getCurrencyCode()); @@ -175,54 +176,11 @@ public class AdsRemovalPurchaseDialog extends BaseMwmDialogFragment implements A dismissAllowingStateLoss(); break; case REQ_CODE_PAYMENT_FAILURE: - activateState(State.PRICE_SELECTION); - updateYearlyButton(); + activateState(AdsRemovalPaymentState.PRICE_SELECTION); break; } } - public enum State - { - NONE - { - @Override - void activate(@NonNull View view) - { - throw new UnsupportedOperationException("This state can't be used!"); - } - }, - LOADING - { - @Override - void activate(@NonNull View view) - { - UiUtils.hide(view, R.id.title, R.id.image, R.id.pay_button_container); - UiUtils.show(view, R.id.progress_layout); - } - }, - PRICE_SELECTION - { - @Override - void activate(@NonNull View view) - { - UiUtils.hide(view, R.id.progress_layout); - UiUtils.show(view, R.id.title, R.id.image, R.id.pay_button_container); - TextView title = view.findViewById(R.id.title); - title.setText(R.string.remove_ads_title); - } - }, - EXPLANATION - { - @Override - void activate(@NonNull View view) - { - - } - }; - - abstract void activate(@NonNull View view); - } - private class PurchaseCallback implements AdsRemovalPurchaseCallback { @Override @@ -237,8 +195,7 @@ public class AdsRemovalPurchaseDialog extends BaseMwmDialogFragment implements A mProductDetails[period.ordinal()] = new ProductDetails(sku.getSku(), price, currencyCode); } - updateYearlyButton(); - activateState(State.PRICE_SELECTION); + activateState(AdsRemovalPaymentState.PRICE_SELECTION); } @Override