[android] Added paid bookmark deeplink handling

This commit is contained in:
Александр Зацепин 2018-11-16 19:40:02 +03:00 committed by yoksnod
parent 0b3644d491
commit a2835ee870
7 changed files with 108 additions and 51 deletions

View file

@ -43,7 +43,6 @@ import com.mapswithme.maps.base.BaseMwmFragmentActivity;
import com.mapswithme.maps.base.OnBackPressListener;
import com.mapswithme.maps.bookmarks.BookmarkCategoriesActivity;
import com.mapswithme.maps.bookmarks.BookmarksCatalogActivity;
import com.mapswithme.maps.bookmarks.BookmarksDownloadManager;
import com.mapswithme.maps.bookmarks.BookmarksPageFactory;
import com.mapswithme.maps.bookmarks.data.BookmarkCategory;
import com.mapswithme.maps.bookmarks.data.BookmarkManager;
@ -131,7 +130,6 @@ import com.mapswithme.util.statistics.PlacePageTracker;
import com.mapswithme.util.statistics.Statistics;
import java.io.Serializable;
import java.net.MalformedURLException;
import java.util.List;
import java.util.Locale;
import java.util.Stack;
@ -1707,16 +1705,8 @@ public class MwmActivity extends BaseMwmFragmentActivity
@Override
public boolean run(@NonNull MwmActivity target)
{
try
{
BookmarksDownloadManager.from(target).enqueueRequest(mUrl);
BookmarkCategoriesActivity.startForResult(target, BookmarksPageFactory.DOWNLOADED.ordinal());
}
catch (MalformedURLException e)
{
LOGGER.e(TAG,"Failed to download catalogue by '" + mUrl + "'", e);
}
return false;
BookmarkCategoriesActivity.startForResult(target, BookmarksPageFactory.DOWNLOADED.ordinal(), mUrl);
return true;
}
}

View file

@ -6,6 +6,7 @@ import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.CallSuper;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.annotation.StyleRes;
import android.support.v4.app.Fragment;
@ -19,7 +20,7 @@ public class BookmarkCategoriesActivity extends BaseToolbarActivity
{
public static final int REQ_CODE_DOWNLOAD_BOOKMARK_CATEGORY = 102;
public static void start(@NonNull Context context, int initialPage)
public static void start(@NonNull Context context)
{
context.startActivity(new Intent(context, BookmarkCategoriesActivity.class));
}
@ -65,10 +66,12 @@ public class BookmarkCategoriesActivity extends BaseToolbarActivity
return R.layout.bookmarks_activity;
}
public static void startForResult(@NonNull Activity context, int initialPage)
public static void startForResult(@NonNull Activity context, int initialPage,
@Nullable String catalogDeeplink)
{
Bundle args = new Bundle();
args.putInt(BookmarkCategoriesPagerFragment.ARG_CATEGORIES_PAGE, initialPage);
args.putString(BookmarkCategoriesPagerFragment.ARG_CATALOG_DEEPLINK, catalogDeeplink);
Intent intent = new Intent(context, BookmarkCategoriesActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP).putExtras(args);
context.startActivityForResult(intent, REQ_CODE_DOWNLOAD_BOOKMARK_CATEGORY);
@ -77,6 +80,6 @@ public class BookmarkCategoriesActivity extends BaseToolbarActivity
public static void startForResult(@NonNull Activity context)
{
int initialPage = SharedPropertiesUtils.getLastVisibleBookmarkCategoriesPage(context);
startForResult(context, initialPage);
startForResult(context, initialPage, null);
}
}

View file

@ -1,16 +1,21 @@
package com.mapswithme.maps.bookmarks;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.design.widget.TabLayout;
import android.support.v4.app.FragmentManager;
import android.support.v4.view.ViewPager;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.mapswithme.maps.R;
import com.mapswithme.maps.auth.Authorizer;
import com.mapswithme.maps.auth.TargetFragmentCallback;
import com.mapswithme.maps.base.BaseMwmFragment;
import com.mapswithme.util.SharedPropertiesUtils;
import com.mapswithme.util.statistics.Statistics;
@ -19,17 +24,47 @@ import java.util.Arrays;
import java.util.List;
public class BookmarkCategoriesPagerFragment extends BaseMwmFragment
implements TargetFragmentCallback
{
final static String ARG_CATEGORIES_PAGE = "arg_categories_page";
final static String ARG_CATALOG_DEEPLINK = "arg_catalog_deeplink";
@SuppressWarnings("NullableProblems")
@NonNull
private BookmarksPagerAdapter mAdapter;
@SuppressWarnings("NullableProblems")
@NonNull
private BookmarkDownloadController mController;
@SuppressWarnings("NullableProblems")
@NonNull
private Authorizer mAuthorizer;
@Override
public void onCreate(@Nullable Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
mAuthorizer = new Authorizer(this);
mController = new DefaultBookmarkDownloadController(mAuthorizer,
new CatalogListenerDecorator(this));
if (savedInstanceState != null)
mController.onRestore(savedInstanceState);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == Activity.RESULT_OK && requestCode == DefaultBookmarkDownloadController.REQ_CODE_PAY_BOOKMARK)
{
mController.retryDownloadBookmark();
}
}
@Override
public void onSaveInstanceState(Bundle outState)
{
super.onSaveInstanceState(outState);
mController.onSave(outState);
}
@Nullable
@ -37,6 +72,7 @@ public class BookmarkCategoriesPagerFragment extends BaseMwmFragment
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
@Nullable Bundle savedInstanceState)
{
mController.attach(this);
View root = inflater.inflate(R.layout.fragment_bookmark_categories_pager, container, false);
ViewPager viewPager = root.findViewById(R.id.viewpager);
TabLayout tabLayout = root.findViewById(R.id.sliding_tabs_layout);
@ -52,6 +88,28 @@ public class BookmarkCategoriesPagerFragment extends BaseMwmFragment
return root;
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState)
{
super.onViewCreated(view, savedInstanceState);
Bundle args = getArguments();
if (args == null)
return;
String deeplink = args.getString(ARG_CATALOG_DEEPLINK);
if (TextUtils.isEmpty(deeplink))
return;
mController.downloadBookmark(deeplink);
}
@Override
public void onDestroyView()
{
mController.detach();
super.onDestroyView();
}
private int saveAndGetInitialPage()
{
Bundle args = getArguments();
@ -71,6 +129,18 @@ public class BookmarkCategoriesPagerFragment extends BaseMwmFragment
return Arrays.asList(BookmarksPageFactory.values());
}
@Override
public void onTargetFragmentResult(int resultCode, @Nullable Intent data)
{
mAuthorizer.onTargetFragmentResult(resultCode, data);
}
@Override
public boolean isTargetAdded()
{
return isAdded();
}
private class PageChangeListener extends ViewPager.SimpleOnPageChangeListener
{
@Override

View file

@ -7,10 +7,8 @@ import android.support.v4.app.Fragment;
import com.mapswithme.maps.base.Detachable;
import com.mapswithme.maps.base.Savable;
import java.net.MalformedURLException;
public interface BookmarkDownloadController extends Detachable<Fragment>, Savable<Bundle>
{
void downloadBookmark(@NonNull String url) throws MalformedURLException;
void retryDownloadBookmark() throws MalformedURLException;
boolean downloadBookmark(@NonNull String url);
void retryDownloadBookmark();
}

View file

@ -38,15 +38,11 @@ import com.mapswithme.util.log.LoggerFactory;
import com.mapswithme.util.statistics.Statistics;
import java.lang.ref.WeakReference;
import java.net.MalformedURLException;
public class BookmarksCatalogFragment extends BaseWebViewMwmFragment
implements TargetFragmentCallback
{
public static final String EXTRA_BOOKMARKS_CATALOG_URL = "bookmarks_catalog_url";
static final int REQ_CODE_PAY_BOOKMARK = 1;
private static final Logger LOGGER = LoggerFactory.INSTANCE.getLogger(LoggerFactory.Type.MISC);
private static final String TAG = BookmarksCatalogFragment.class.getSimpleName();
private static final String FAILED_PURCHASE_DIALOG_TAG = "failed_purchase_dialog_tag";
@SuppressWarnings("NullableProblems")
@ -171,28 +167,12 @@ public class BookmarksCatalogFragment extends BaseWebViewMwmFragment
private boolean downloadBookmark(@NonNull String url)
{
try
{
mController.downloadBookmark(url);
return true;
}
catch (MalformedURLException e)
{
LOGGER.e(TAG, "Failed to download bookmark, url: " + url);
return false;
}
return mController.downloadBookmark(url);
}
private void retryBookmarkDownload()
{
try
{
mController.retryDownloadBookmark();
}
catch (MalformedURLException e)
{
LOGGER.e(TAG, "Failed to retry bookmark downloading");
}
mController.retryDownloadBookmark();
}
@Override
@ -211,7 +191,7 @@ public class BookmarksCatalogFragment extends BaseWebViewMwmFragment
public void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == Activity.RESULT_OK && requestCode == REQ_CODE_PAY_BOOKMARK)
if (resultCode == Activity.RESULT_OK && requestCode == DefaultBookmarkDownloadController.REQ_CODE_PAY_BOOKMARK)
{
retryBookmarkDownload();
}

View file

@ -26,6 +26,7 @@ import java.net.MalformedURLException;
class DefaultBookmarkDownloadController implements BookmarkDownloadController,
BookmarkDownloadHandler, Authorizer.Callback
{
static final int REQ_CODE_PAY_BOOKMARK = 1;
private static final Logger LOGGER = LoggerFactory.INSTANCE.getLogger(LoggerFactory.Type.MISC);
private static final String TAG = DefaultBookmarkDownloadController.class.getSimpleName();
private static final String EXTRA_DOWNLOAD_URL = "extra_download_url";
@ -51,18 +52,35 @@ class DefaultBookmarkDownloadController implements BookmarkDownloadController,
}
@Override
public void downloadBookmark(@NonNull String url) throws MalformedURLException
public boolean downloadBookmark(@NonNull String url)
{
downloadBookmarkInternal(mApplication, url);
mDownloadUrl = url;
try
{
downloadBookmarkInternal(mApplication, url);
mDownloadUrl = url;
return true;
}
catch (MalformedURLException e)
{
LOGGER.e(TAG, "Failed to download bookmark, url: " + url, e);
return false;
}
}
@Override
public void retryDownloadBookmark() throws MalformedURLException
public void retryDownloadBookmark()
{
if (mDownloadUrl == null)
throw new IllegalStateException("Download url must be non-null at this point");
downloadBookmarkInternal(mApplication, mDownloadUrl);
try
{
downloadBookmarkInternal(mApplication, mDownloadUrl);
}
catch (MalformedURLException e)
{
LOGGER.e(TAG, "Failed to retry bookmark downloading, url: " + mDownloadUrl, e);
}
}
@Override
@ -127,8 +145,7 @@ class DefaultBookmarkDownloadController implements BookmarkDownloadController,
throw new IllegalStateException("Download url must be non-null if payment required!");
PaymentData data = parsePaymentData(mDownloadUrl);
BookmarkPaymentActivity.startForResult(getFragmentOrThrow(), data,
BookmarksCatalogFragment.REQ_CODE_PAY_BOOKMARK);
BookmarkPaymentActivity.startForResult(getFragmentOrThrow(), data, REQ_CODE_PAY_BOOKMARK);
}
@NonNull

View file

@ -18,7 +18,6 @@ import com.mapswithme.maps.Framework;
import com.mapswithme.maps.MwmActivity;
import com.mapswithme.maps.R;
import com.mapswithme.maps.bookmarks.BookmarkCategoriesActivity;
import com.mapswithme.maps.bookmarks.BookmarksPageFactory;
import com.mapswithme.maps.bookmarks.data.DistanceAndAzimut;
import com.mapswithme.maps.location.LocationHelper;
import com.mapswithme.maps.maplayer.traffic.TrafficManager;
@ -424,7 +423,7 @@ public class NavigationController implements TrafficManager.TrafficCallback, Vie
switch (v.getId())
{
case R.id.btn_bookmarks:
BookmarkCategoriesActivity.start(mFrame.getContext(), BookmarksPageFactory.PRIVATE.ordinal());
BookmarkCategoriesActivity.start(mFrame.getContext());
Statistics.INSTANCE.trackRoutingEvent(ROUTING_BOOKMARKS_CLICK,
RoutingController.get().isPlanning());
break;