From 41483f244c3e5b303a1181d1c99fcf38f13c9376 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B0=D0=BD=D0=B4=D1=80=20?= =?UTF-8?q?=D0=97=D0=B0=D1=86=D0=B5=D0=BF=D0=B8=D0=BD?= Date: Wed, 6 Nov 2019 18:54:25 +0300 Subject: [PATCH] [android] Extracted ping subscription service logic in a abstraction fragment --- .../AbstractBookmarkSubscriptionFragment.java | 103 ++++++++++++++++++ .../BookmarkSubscriptionFragment.java | 74 ++----------- 2 files changed, 114 insertions(+), 63 deletions(-) create mode 100644 android/src/com/mapswithme/maps/purchase/AbstractBookmarkSubscriptionFragment.java diff --git a/android/src/com/mapswithme/maps/purchase/AbstractBookmarkSubscriptionFragment.java b/android/src/com/mapswithme/maps/purchase/AbstractBookmarkSubscriptionFragment.java new file mode 100644 index 0000000000..4aaec61f5a --- /dev/null +++ b/android/src/com/mapswithme/maps/purchase/AbstractBookmarkSubscriptionFragment.java @@ -0,0 +1,103 @@ +package com.mapswithme.maps.purchase; + +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import androidx.annotation.CallSuper; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import com.mapswithme.maps.base.BaseAuthFragment; +import com.mapswithme.maps.bookmarks.data.BookmarkManager; +import com.mapswithme.util.log.Logger; +import com.mapswithme.util.log.LoggerFactory; + +abstract class AbstractBookmarkSubscriptionFragment extends BaseAuthFragment + implements PurchaseStateActivator, SubscriptionUiChangeListener +{ + private static final Logger LOGGER = LoggerFactory.INSTANCE.getLogger(LoggerFactory.Type.BILLING); + private static final String TAG = AbstractBookmarkSubscriptionFragment.class.getSimpleName(); + + private boolean mPingingResult; + @NonNull + private final PingCallback mPingCallback = new PingCallback(); + + @Nullable + @Override + public final View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, + @Nullable Bundle savedInstanceState) + { + mPingCallback.attach(this); + BookmarkManager.INSTANCE.addCatalogPingListener(mPingCallback); + return onSubscriptionCreateView(inflater, container, savedInstanceState); + } + + @Override + public final void onDestroyView() + { + super.onDestroyView(); + mPingCallback.detach(); + BookmarkManager.INSTANCE.removeCatalogPingListener(mPingCallback); + onSubscriptionDestroyView(); + } + + @Nullable + abstract View onSubscriptionCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, + @Nullable Bundle savedInstanceState); + + abstract void onSubscriptionDestroyView(); + + private void handlePingingResult(boolean result) + { + mPingingResult = result; + } + + private void finishPinging() + { + if (!mPingingResult) + { + PurchaseUtils.showPingFailureDialog(this); + return; + } + + authorize(); + } + + @Override + @CallSuper + public void onPingFinish() + { + finishPinging(); + } + + private static class PingCallback + extends StatefulPurchaseCallback implements BookmarkManager.BookmarksCatalogPingListener + + { + private Boolean mPendingPingingResult; + + @Override + public void onPingFinished(boolean isServiceAvailable) + { + LOGGER.i(TAG, "Ping finished, isServiceAvailable: " + isServiceAvailable); + if (getUiObject() == null) + mPendingPingingResult = isServiceAvailable; + else + getUiObject().handlePingingResult(isServiceAvailable); + + activateStateSafely(BookmarkSubscriptionPaymentState.PINGING_FINISH); + } + + @Override + void onAttach(@NonNull AbstractBookmarkSubscriptionFragment fragment) + { + if (mPendingPingingResult != null) + { + fragment.handlePingingResult(mPendingPingingResult); + mPendingPingingResult = null; + } + } + } +} diff --git a/android/src/com/mapswithme/maps/purchase/BookmarkSubscriptionFragment.java b/android/src/com/mapswithme/maps/purchase/BookmarkSubscriptionFragment.java index 78b3f3a7f7..2e87bf9afd 100644 --- a/android/src/com/mapswithme/maps/purchase/BookmarkSubscriptionFragment.java +++ b/android/src/com/mapswithme/maps/purchase/BookmarkSubscriptionFragment.java @@ -17,7 +17,6 @@ import com.android.billingclient.api.SkuDetails; import com.mapswithme.maps.Framework; import com.mapswithme.maps.PrivateVariables; import com.mapswithme.maps.R; -import com.mapswithme.maps.base.BaseAuthFragment; import com.mapswithme.maps.bookmarks.data.BookmarkManager; import com.mapswithme.maps.dialog.AlertDialog; import com.mapswithme.maps.dialog.AlertDialogCallback; @@ -33,7 +32,7 @@ import com.mapswithme.util.statistics.Statistics; import java.util.Collections; import java.util.List; -public class BookmarkSubscriptionFragment extends BaseAuthFragment +public class BookmarkSubscriptionFragment extends AbstractBookmarkSubscriptionFragment implements AlertDialogCallback, PurchaseStateActivator, SubscriptionUiChangeListener { @@ -51,25 +50,21 @@ public class BookmarkSubscriptionFragment extends BaseAuthFragment @NonNull private final BookmarkSubscriptionCallback mPurchaseCallback = new BookmarkSubscriptionCallback(); @NonNull - private final PingCallback mPingCallback = new PingCallback(); - @NonNull private BookmarkSubscriptionPaymentState mState = BookmarkSubscriptionPaymentState.NONE; @Nullable private ProductDetails[] mProductDetails; private boolean mValidationResult; - private boolean mPingingResult; @Nullable @Override - public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, - @Nullable Bundle savedInstanceState) + View onSubscriptionCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, + @Nullable Bundle savedInstanceState) { mPurchaseController = PurchaseFactory.createBookmarksSubscriptionPurchaseController(requireContext()); if (savedInstanceState != null) mPurchaseController.onRestore(savedInstanceState); mPurchaseController.initialize(requireActivity()); - mPingCallback.attach(this); - BookmarkManager.INSTANCE.addCatalogPingListener(mPingCallback); + View root = inflater.inflate(R.layout.bookmark_subscription_fragment, container, false); CardView annualPriceCard = root.findViewById(R.id.annual_price_card); CardView monthlyPriceCard = root.findViewById(R.id.monthly_price_card); @@ -102,6 +97,12 @@ public class BookmarkSubscriptionFragment extends BaseAuthFragment return root; } + @Override + void onSubscriptionDestroyView() + { + // Do nothing by default. + } + @Nullable private String getExtraFrom() { @@ -111,13 +112,6 @@ public class BookmarkSubscriptionFragment extends BaseAuthFragment return getArguments().getString(EXTRA_FROM, null); } - @Override - public void onDestroyView() - { - super.onDestroyView(); - mPingCallback.detach(); - BookmarkManager.INSTANCE.removeCatalogPingListener(mPingCallback); - } private void openSubscriptionManagementSettings() { @@ -268,11 +262,6 @@ public class BookmarkSubscriptionFragment extends BaseAuthFragment mValidationResult = result; } - private void handlePingingResult(boolean result) - { - mPingingResult = result; - } - private void finishValidation() { if (mValidationResult) @@ -281,17 +270,6 @@ public class BookmarkSubscriptionFragment extends BaseAuthFragment requireActivity().finish(); } - private void finishPinging() - { - if (!mPingingResult) - { - PurchaseUtils.showPingFailureDialog(this); - return; - } - - authorize(); - } - @Override public boolean onBackPressed() { @@ -419,8 +397,8 @@ public class BookmarkSubscriptionFragment extends BaseAuthFragment @Override public void onPingFinish() { + super.onPingFinish(); hideButtonProgress(); - finishPinging(); } @Override @@ -609,34 +587,4 @@ public class BookmarkSubscriptionFragment extends BaseAuthFragment } } } - - private static class PingCallback - extends StatefulPurchaseCallback implements BookmarkManager.BookmarksCatalogPingListener - - { - private Boolean mPendingPingingResult; - - @Override - public void onPingFinished(boolean isServiceAvailable) - { - LOGGER.i(TAG, "Ping finished, isServiceAvailable: " + isServiceAvailable); - if (getUiObject() == null) - mPendingPingingResult = isServiceAvailable; - else - getUiObject().handlePingingResult(isServiceAvailable); - - activateStateSafely(BookmarkSubscriptionPaymentState.PINGING_FINISH); - } - - @Override - void onAttach(@NonNull BookmarkSubscriptionFragment fragment) - { - if (mPendingPingingResult != null) - { - fragment.handlePingingResult(mPendingPingingResult); - mPendingPingingResult = null; - } - } - } }