forked from organicmaps/organicmaps
[android] Added invalid subscription dialog - Catalog Fragment, Categories Pager Fragment
This commit is contained in:
parent
1937234152
commit
8f3db3145f
7 changed files with 210 additions and 11 deletions
|
@ -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"/>
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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";
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Add table
Reference in a new issue