[android] Added invalid subscription dialog - Catalog Fragment, Categories Pager Fragment

This commit is contained in:
Dmitry Donskoy 2019-07-08 11:57:48 +03:00 committed by Aleksandr Zatsepin
parent 1937234152
commit 8f3db3145f
7 changed files with 210 additions and 11 deletions

View file

@ -40,7 +40,7 @@
android:layout_marginTop="@dimen/margin_half"/>
<Button
android:id="@+id/accept_btn"
android:layout_width="wrap_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/margin_base_plus"
style="@style/MwmWidget.Button.Primary"/>

View file

@ -15,6 +15,7 @@ import android.view.ViewGroup;
import com.mapswithme.maps.R;
import com.mapswithme.maps.auth.TargetFragmentCallback;
import com.mapswithme.maps.base.BaseMwmFragment;
import com.mapswithme.maps.dialog.AlertDialogCallback;
import com.mapswithme.util.SharedPropertiesUtils;
import com.mapswithme.util.statistics.Statistics;
@ -22,7 +23,7 @@ import java.util.Arrays;
import java.util.List;
public class BookmarkCategoriesPagerFragment extends BaseMwmFragment
implements TargetFragmentCallback
implements TargetFragmentCallback, AlertDialogCallback
{
final static String ARG_CATEGORIES_PAGE = "arg_categories_page";
final static String ARG_CATALOG_DEEPLINK = "arg_catalog_deeplink";
@ -37,6 +38,10 @@ public class BookmarkCategoriesPagerFragment extends BaseMwmFragment
@NonNull
private BookmarksDownloadFragmentDelegate mDelegate;
@SuppressWarnings("NullableProblems")
@NonNull
private AlertDialogCallback mDialogClickDelegate;
@Override
public void onCreate(@Nullable Bundle savedInstanceState)
{
@ -49,6 +54,7 @@ public class BookmarkCategoriesPagerFragment extends BaseMwmFragment
return;
mCatalogDeeplink = args.getString(ARG_CATALOG_DEEPLINK);
mDialogClickDelegate = new InvalidSubscriptionAlertDialogCallback(this);
}
@Override
@ -104,6 +110,13 @@ public class BookmarkCategoriesPagerFragment extends BaseMwmFragment
mDelegate.onStop();
}
@Override
public void onDestroyView()
{
super.onDestroyView();
mDelegate.onDestroyView();
}
private int saveAndGetInitialPage()
{
Bundle args = getArguments();
@ -135,6 +148,24 @@ public class BookmarkCategoriesPagerFragment extends BaseMwmFragment
return mDelegate.isTargetAdded();
}
@Override
public void onAlertDialogPositiveClick(int requestCode, int which)
{
mDialogClickDelegate.onAlertDialogPositiveClick(requestCode, which);
}
@Override
public void onAlertDialogNegativeClick(int requestCode, int which)
{
mDialogClickDelegate.onAlertDialogPositiveClick(requestCode,which);
}
@Override
public void onAlertDialogCancel(int requestCode)
{
mDialogClickDelegate.onAlertDialogCancel(requestCode);
}
private class PageChangeListener extends ViewPager.SimpleOnPageChangeListener
{
@Override

View file

@ -31,6 +31,8 @@ import com.mapswithme.maps.R;
import com.mapswithme.maps.auth.BaseWebViewMwmFragment;
import com.mapswithme.maps.auth.TargetFragmentCallback;
import com.mapswithme.maps.dialog.AlertDialog;
import com.mapswithme.maps.dialog.AlertDialogCallback;
import com.mapswithme.maps.dialog.ConfirmationDialogFactory;
import com.mapswithme.maps.metrics.UserActionsLogger;
import com.mapswithme.maps.purchase.AbstractProductDetailsLoadingCallback;
import com.mapswithme.maps.purchase.BillingManager;
@ -58,7 +60,7 @@ import java.util.List;
import java.util.Map;
public class BookmarksCatalogFragment extends BaseWebViewMwmFragment
implements TargetFragmentCallback
implements TargetFragmentCallback, AlertDialogCallback
{
public static final String EXTRA_BOOKMARKS_CATALOG_URL = "bookmarks_catalog_url";
private static final String FAILED_PURCHASE_DIALOG_TAG = "failed_purchase_dialog_tag";
@ -91,6 +93,9 @@ public class BookmarksCatalogFragment extends BaseWebViewMwmFragment
@SuppressWarnings("NullableProblems")
@NonNull
private BookmarksDownloadFragmentDelegate mDelegate;
@SuppressWarnings("NullableProblems")
@NonNull
private AlertDialogCallback mDialogClickDelegate;
@Override
public void onCreate(@Nullable Bundle savedInstanceState)
@ -98,6 +103,7 @@ public class BookmarksCatalogFragment extends BaseWebViewMwmFragment
super.onCreate(savedInstanceState);
mDelegate = new BookmarksDownloadFragmentDelegate(this);
mDelegate.onCreate(savedInstanceState);
mDialogClickDelegate = new InvalidSubscriptionAlertDialogCallback(this);
}
@Override
@ -122,6 +128,7 @@ public class BookmarksCatalogFragment extends BaseWebViewMwmFragment
public void onDestroyView()
{
super.onDestroyView();
mDelegate.onDestroyView();
mWebViewClient.clear();
mFailedPurchaseController.destroy();
mProductDetailsLoadingManager.destroy();
@ -247,6 +254,24 @@ public class BookmarksCatalogFragment extends BaseWebViewMwmFragment
UserActionsLogger.logBookmarksCatalogShownEvent();
}
@Override
public void onAlertDialogPositiveClick(int requestCode, int which)
{
mDialogClickDelegate.onAlertDialogPositiveClick(requestCode, which);
}
@Override
public void onAlertDialogNegativeClick(int requestCode, int which)
{
mDialogClickDelegate.onAlertDialogPositiveClick(requestCode,which);
}
@Override
public void onAlertDialogCancel(int requestCode)
{
mDialogClickDelegate.onAlertDialogCancel(requestCode);
}
private static class WebViewBookmarksCatalogClient extends WebViewClient
{
private static final String SUBSCRIBE_PATH_SEGMENT = "subscribe";

View file

@ -14,14 +14,22 @@ import android.widget.Toast;
import com.mapswithme.maps.R;
import com.mapswithme.maps.auth.Authorizer;
import com.mapswithme.maps.auth.TargetFragmentCallback;
import com.mapswithme.maps.base.Detachable;
import com.mapswithme.maps.bookmarks.data.BookmarkManager;
import com.mapswithme.maps.bookmarks.data.PaymentData;
import com.mapswithme.maps.dialog.AlertDialog;
import com.mapswithme.maps.dialog.ConfirmationDialogFactory;
import com.mapswithme.maps.dialog.ProgressDialogFragment;
import com.mapswithme.maps.purchase.BookmarkPaymentActivity;
class BookmarksDownloadFragmentDelegate implements Authorizer.Callback, BookmarkDownloadCallback,
TargetFragmentCallback
{
public static final int REQ_CODE_SUBSCRIPTION_ACTIVITY = 301;
private final static int REQ_CODE_PAY_BOOKMARK = 1;
private static final int REQ_CODE_CHECK_INVALID_SUBS_DIALOG = 300;
private static final String CHECK_INVALID_SUBS_DIALOG_TAG = "check_invalid_subs_dialog_tag";
@SuppressWarnings("NullableProblems")
@NonNull
private Authorizer mAuthorizer;
@ -33,9 +41,13 @@ class BookmarksDownloadFragmentDelegate implements Authorizer.Callback, Bookmark
@Nullable
private Runnable mAuthCompletionRunnable;
@NonNull
private final InvalidCategoriesListener mInvalidCategoriesListener;
BookmarksDownloadFragmentDelegate(@NonNull Fragment fragment)
{
mFragment = fragment;
mInvalidCategoriesListener = new InvalidCategoriesListener(fragment);
}
void onCreate(@Nullable Bundle savedInstanceState)
@ -46,18 +58,33 @@ class BookmarksDownloadFragmentDelegate implements Authorizer.Callback, Bookmark
new CatalogListenerDecorator(mFragment));
if (savedInstanceState != null)
mDownloadController.onRestore(savedInstanceState);
checkInvalidCategories();
}
private void checkInvalidCategories()
{
BookmarkManager.INSTANCE.addInvalidCategoriesListener(mInvalidCategoriesListener);
BookmarkManager.INSTANCE.checkInvalidCategories();
}
void onStart()
{
mAuthorizer.attach(this);
mDownloadController.attach(this);
mInvalidCategoriesListener.attach(mFragment);
}
void onStop()
{
mAuthorizer.detach();
mDownloadController.detach();
mInvalidCategoriesListener.detach();
}
void onDestroyView()
{
BookmarkManager.INSTANCE.removeInvalidCategoriesListener(mInvalidCategoriesListener);
}
void onSaveInstanceState(@NonNull Bundle outState)
@ -67,16 +94,13 @@ class BookmarksDownloadFragmentDelegate implements Authorizer.Callback, Bookmark
public void onActivityResult(int requestCode, int resultCode, Intent data)
{
if (requestCode != REQ_CODE_PAY_BOOKMARK)
return;
if (resultCode == Activity.RESULT_OK && requestCode == REQ_CODE_SUBSCRIPTION_ACTIVITY)
BookmarkManager.INSTANCE.resetInvalidCategories();
if (resultCode == Activity.RESULT_OK)
{
if (resultCode == Activity.RESULT_OK && requestCode == REQ_CODE_PAY_BOOKMARK)
mDownloadController.retryDownloadBookmark();
return;
}
mFragment.requireActivity().finish();
else if (requestCode == REQ_CODE_PAY_BOOKMARK)
mFragment.requireActivity().finish();
}
private void showAuthorizationProgress()
@ -170,4 +194,51 @@ class BookmarksDownloadFragmentDelegate implements Authorizer.Callback, Bookmark
mAuthCompletionRunnable = completionRunnable;
mAuthorizer.authorize();
}
private static class InvalidCategoriesListener implements BookmarkManager.BookmarksInvalidCategoriesListener, Detachable<Fragment>
{
@Nullable
private Fragment mFrag;
public InvalidCategoriesListener(@NonNull Fragment fragment)
{
mFrag = fragment;
}
@Override
public void onCheckInvalidCategories(boolean hasInvalidCategories)
{
BookmarkManager.INSTANCE.removeInvalidCategoriesListener(this);
if (mFrag == null || !hasInvalidCategories)
return;
AlertDialog dialog = new AlertDialog.Builder()
.setTitleId(R.string.renewal_screen_title)
.setMessageId(R.string.renewal_screen_message)
.setPositiveBtnId(R.string.renewal_screen_button_restore)
.setNegativeBtnId(R.string.renewal_screen_button_cancel)
.setReqCode(REQ_CODE_CHECK_INVALID_SUBS_DIALOG)
.setImageResId(R.drawable.ic_error_red)
.setFragManagerStrategyType(AlertDialog.FragManagerStrategyType.ACTIVITY_FRAGMENT_MANAGER)
.setDialogViewStrategyType(AlertDialog.DialogViewStrategyType.CONFIRMATION_DIALOG)
.setDialogFactory(new ConfirmationDialogFactory())
.setNegativeBtnTextColor(R.color.rating_horrible)
.build();
dialog.setTargetFragment(mFrag, REQ_CODE_CHECK_INVALID_SUBS_DIALOG);
dialog.show(mFrag, CHECK_INVALID_SUBS_DIALOG_TAG);
}
@Override
public void attach(@NonNull Fragment object)
{
mFrag = object;
}
@Override
public void detach()
{
mFrag = null;
}
}
}

View file

@ -0,0 +1,39 @@
package com.mapswithme.maps.bookmarks;
import android.content.Intent;
import android.support.annotation.NonNull;
import android.support.v4.app.Fragment;
import com.mapswithme.maps.bookmarks.data.BookmarkManager;
import com.mapswithme.maps.dialog.AlertDialogCallback;
import com.mapswithme.maps.purchase.BookmarkSubscriptionActivity;
class InvalidSubscriptionAlertDialogCallback implements AlertDialogCallback
{
@NonNull
private final Fragment mFragment;
public InvalidSubscriptionAlertDialogCallback(@NonNull Fragment fragment)
{
mFragment = fragment;
}
@Override
public void onAlertDialogPositiveClick(int requestCode, int which)
{
Intent intent = new Intent(mFragment.requireActivity(),
BookmarkSubscriptionActivity.class);
mFragment.startActivityForResult(intent, BookmarksDownloadFragmentDelegate.REQ_CODE_SUBSCRIPTION_ACTIVITY);
}
@Override
public void onAlertDialogNegativeClick(int requestCode, int which)
{
BookmarkManager.INSTANCE.deleteInvalidCategories();
}
@Override
public void onAlertDialogCancel(int requestCode)
{
}
}

View file

@ -161,6 +161,16 @@ public enum BookmarkManager
mCatalogListeners.remove(listener);
}
public void addInvalidCategoriesListener(@NonNull BookmarksInvalidCategoriesListener listener)
{
mInvalidCategoriesListeners.add(listener);
}
public void removeInvalidCategoriesListener(@NonNull BookmarksInvalidCategoriesListener listener)
{
mInvalidCategoriesListeners.remove(listener);
}
public void addCatalogPingListener(@NonNull BookmarksCatalogPingListener listener)
{
mCatalogPingListeners.add(listener);

View file

@ -32,6 +32,7 @@ public class AlertDialog extends BaseMwmDialogFragment
private static final String ARG_POSITIVE_BUTTON_ID = "arg_positive_button_id";
private static final String ARG_NEGATIVE_BUTTON_ID = "arg_negative_button_id";
private static final String ARG_IMAGE_RES_ID = "arg_image_res_id";
private static final String ARG_NEGATIVE_BTN_TEXT_COLOR_RES_ID = "arg_neg_btn_text_color_res_id";
private static final String ARG_REQ_CODE = "arg_req_code";
private static final String ARG_FRAGMENT_MANAGER_STRATEGY_INDEX = "arg_fragment_manager_strategy_index";
private static final String ARG_DIALOG_VIEW_STRATEGY_INDEX = "arg_dialog_view_strategy_index";
@ -169,6 +170,7 @@ public class AlertDialog extends BaseMwmDialogFragment
args.putInt(ARG_NEGATIVE_BUTTON_ID, builder.getNegativeBtnId());
args.putInt(ARG_REQ_CODE, builder.getReqCode());
args.putInt(ARG_IMAGE_RES_ID, builder.getImageResId());
args.putInt(ARG_NEGATIVE_BTN_TEXT_COLOR_RES_ID, builder.getNegativeBtnTextColor());
FragManagerStrategyType fragManagerStrategyType = builder.getFragManagerStrategyType();
args.putInt(ARG_FRAGMENT_MANAGER_STRATEGY_INDEX, fragManagerStrategyType.ordinal());
@ -214,6 +216,8 @@ public class AlertDialog extends BaseMwmDialogFragment
@NonNull
private DialogFactory mDialogFactory = new DefaultDialogFactory();
private int mNegativeBtnTextColor = INVALID_ID;
@NonNull
public Builder setReqCode(int reqCode)
{
@ -221,6 +225,13 @@ public class AlertDialog extends BaseMwmDialogFragment
return this;
}
@NonNull
public Builder setNegativeBtnTextColor(int negativeBtnTextColor)
{
mNegativeBtnTextColor = negativeBtnTextColor;
return this;
}
int getReqCode()
{
return mReqCode;
@ -278,6 +289,11 @@ public class AlertDialog extends BaseMwmDialogFragment
return mNegativeBtn;
}
int getNegativeBtnTextColor()
{
return mNegativeBtnTextColor;
}
@NonNull
public Builder setImageResId(@DrawableRes int imageResId)
{
@ -425,6 +441,13 @@ public class AlertDialog extends BaseMwmDialogFragment
imageView.setImageDrawable(hasImage ? fragment.getResources().getDrawable(imageResId)
: null);
int negativeBtnTextColor = args.getInt(ARG_NEGATIVE_BTN_TEXT_COLOR_RES_ID);
boolean hasNegativeBtnCustomColor = negativeBtnTextColor != INVALID_ID;
if (hasNegativeBtnCustomColor)
declineBtn.setTextColor(fragment.getResources().getColor(negativeBtnTextColor));
UiUtils.showIf(hasImage, imageView);
appCompatDialog.setContentView(root);
return appCompatDialog;