[android] Added handling of catalog callbacks on all bookmark screens

This commit is contained in:
Alexander Zatsepin 2018-08-02 00:30:11 +03:00 committed by Vlad Mihaylenko
parent bfc9d049d3
commit f2cc77f334
7 changed files with 131 additions and 106 deletions

View file

@ -44,6 +44,9 @@ public abstract class BaseBookmarkCategoriesFragment extends BaseMwmRecyclerFrag
private KmlImportController mKmlImportController;
@NonNull
private Runnable mImportKmlTask = new ImportKmlTask();
@SuppressWarnings("NullableProblems")
@NonNull
private BookmarkManager.BookmarksCatalogListener mCatalogListener;
@Override
@LayoutRes
@ -77,6 +80,7 @@ public abstract class BaseBookmarkCategoriesFragment extends BaseMwmRecyclerFrag
RecyclerView.ItemDecoration decor = ItemDecoratorFactory
.createVerticalDefaultDecorator(getContext());
rw.addItemDecoration(decor);
mCatalogListener = new CatalogListenerDecorator(createCatalogListener(), this);
}
protected void onPrepareControllers(@NonNull View view)
@ -101,6 +105,7 @@ public abstract class BaseBookmarkCategoriesFragment extends BaseMwmRecyclerFrag
super.onStart();
BookmarkManager.INSTANCE.addLoadingListener(this);
BookmarkManager.INSTANCE.addSharingListener(this);
BookmarkManager.INSTANCE.addCatalogListener(mCatalogListener);
if (mKmlImportController != null)
mKmlImportController.onStart();
}
@ -111,6 +116,7 @@ public abstract class BaseBookmarkCategoriesFragment extends BaseMwmRecyclerFrag
super.onStop();
BookmarkManager.INSTANCE.removeLoadingListener(this);
BookmarkManager.INSTANCE.removeSharingListener(this);
BookmarkManager.INSTANCE.removeCatalogListener(mCatalogListener);
if (mKmlImportController != null)
mKmlImportController.onStop();
}
@ -295,6 +301,12 @@ public abstract class BaseBookmarkCategoriesFragment extends BaseMwmRecyclerFrag
getAdapter().notifyDataSetChanged();
}
@NonNull
BookmarkManager.BookmarksCatalogListener createCatalogListener()
{
return new BookmarkManager.DefaultBookmarksCatalogListener();
}
interface CategoryEditor
{
void commit(@NonNull String newName);

View file

@ -20,6 +20,7 @@ public class BookmarkCategoriesActivity extends BaseToolbarActivity
public static void startForResult(@NonNull Activity context, int initialPage)
{
Intent intent = new Intent(context, BookmarkCategoriesActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
Bundle args = new Bundle();
args.putInt(BookmarkCategoriesPagerFragment.ARG_CATEGORIES_PAGE, initialPage);
intent.putExtras(args);

View file

@ -7,8 +7,6 @@ import android.os.Build;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@ -22,10 +20,8 @@ import android.widget.Toast;
import com.mapswithme.maps.R;
import com.mapswithme.maps.auth.BaseWebViewMwmFragment;
import com.mapswithme.maps.bookmarks.data.BookmarkCategory;
import com.mapswithme.maps.bookmarks.data.BookmarkManager;
import com.mapswithme.util.ConnectionState;
import com.mapswithme.util.DialogUtils;
import com.mapswithme.util.UiUtils;
import com.mapswithme.util.Utils;
import com.mapswithme.util.log.Logger;
@ -60,30 +56,28 @@ public class BookmarksCatalogFragment extends BaseWebViewMwmFragment
@SuppressWarnings("NullableProblems")
@NonNull
private ImportCategoryListener mImportCategoryListener;
private CatalogListenerDecorator mCatalogListener;
@Override
public void onCreate(@Nullable Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
mCatalogUrl = getCatalogUrlOrThrow();
mImportCategoryListener = new ImportCategoryListener(this);
mCatalogListener = new CatalogListenerDecorator(this);
}
@Override
public void onStart()
{
super.onStart();
mImportCategoryListener.attach(this);
BookmarkManager.INSTANCE.addCatalogListener(mImportCategoryListener);
BookmarkManager.INSTANCE.addCatalogListener(mCatalogListener);
}
@Override
public void onStop()
{
super.onStop();
mImportCategoryListener.detach();
BookmarkManager.INSTANCE.removeCatalogListener(mImportCategoryListener);
BookmarkManager.INSTANCE.removeCatalogListener(mCatalogListener);
}
@Override
@ -251,60 +245,4 @@ public class BookmarksCatalogFragment extends BaseWebViewMwmFragment
mReference.clear();
}
}
private static class ImportCategoryListener extends BookmarkManager.DefaultBookmarksCatalogListener
{
@Nullable
private Fragment mFragment;
ImportCategoryListener(@NonNull Fragment fragment)
{
mFragment = fragment;
}
@Override
public void onImportFinished(@NonNull String serverId, long catId, boolean successful)
{
if (mFragment == null)
return;
if (successful)
onSuccess(mFragment, catId);
else
onError(mFragment);
}
private static void onSuccess(@NonNull Fragment fragment, long catId)
{
BookmarkCategory category = BookmarkManager.INSTANCE.getCategoryById(catId);
FragmentManager fm = fragment.getActivity().getSupportFragmentManager();
ShowOnMapCatalogCategoryFragment frag =
(ShowOnMapCatalogCategoryFragment) fm.findFragmentByTag(ShowOnMapCatalogCategoryFragment.TAG);
if (frag == null)
{
ShowOnMapCatalogCategoryFragment.newInstance(category)
.show(fm, ShowOnMapCatalogCategoryFragment.TAG);
return;
}
frag.setCategory(category);
}
private static void onError(@NonNull Fragment fragment)
{
DialogUtils.showAlertDialog(fragment.getActivity(),
R.string.title_error_downloading_bookmarks,
R.string.subtitle_error_downloading_bookmarks);
}
public void detach()
{
mFragment = null;
}
public void attach(@NonNull BookmarksCatalogFragment fragment)
{
mFragment = fragment;
}
}
}

View file

@ -48,6 +48,9 @@ public class BookmarksListFragment extends BaseMwmRecyclerFragment<BookmarkListA
@NonNull
private CategoryDataSource mCategoryDataSource;
private int mSelectedPosition;
@SuppressWarnings("NullableProblems")
@NonNull
private BookmarkManager.BookmarksCatalogListener mCatalogListener;
@CallSuper
@Override
@ -57,6 +60,7 @@ public class BookmarksListFragment extends BaseMwmRecyclerFragment<BookmarkListA
Crashlytics.log("onCreate");
BookmarkCategory category = getCategoryOrThrow();
mCategoryDataSource = new CategoryDataSource(category);
mCatalogListener = new CatalogListenerDecorator(this);
}
@NonNull
@ -113,6 +117,7 @@ public class BookmarksListFragment extends BaseMwmRecyclerFragment<BookmarkListA
super.onStart();
Crashlytics.log("onStart");
BookmarkManager.INSTANCE.addSharingListener(this);
BookmarkManager.INSTANCE.addCatalogListener(mCatalogListener);
}
@Override
@ -138,6 +143,7 @@ public class BookmarksListFragment extends BaseMwmRecyclerFragment<BookmarkListA
super.onStop();
Crashlytics.log("onStop");
BookmarkManager.INSTANCE.removeSharingListener(this);
BookmarkManager.INSTANCE.removeCatalogListener(mCatalogListener);
}
private void configureAdapter()

View file

@ -17,8 +17,7 @@ import com.mapswithme.util.UiUtils;
import com.mapswithme.util.sharing.TargetUtils;
import com.mapswithme.util.statistics.Statistics;
public class CachedBookmarkCategoriesFragment extends BaseBookmarkCategoriesFragment implements
BookmarkManager.BookmarksCatalogListener
public class CachedBookmarkCategoriesFragment extends BaseBookmarkCategoriesFragment
{
@SuppressWarnings("NullableProblems")
@NonNull
@ -102,20 +101,6 @@ public class CachedBookmarkCategoriesFragment extends BaseBookmarkCategoriesFrag
}
}
@Override
public void onStart()
{
super.onStart();
BookmarkManager.INSTANCE.addCatalogListener(this);
}
@Override
public void onStop()
{
super.onStop();
BookmarkManager.INSTANCE.removeCatalogListener(this);
}
@Override
protected int getCategoryMenuResId()
{
@ -153,31 +138,37 @@ public class CachedBookmarkCategoriesFragment extends BaseBookmarkCategoriesFrag
showBottomMenu(item);
}
@NonNull
@Override
public void onImportStarted(@NonNull String serverId)
BookmarkManager.BookmarksCatalogListener createCatalogListener()
{
mProgressContainer.setVisibility(View.VISIBLE);
mEmptyViewContainer.setVisibility(View.GONE);
mPayloadContainer.setVisibility(View.GONE);
}
return new BookmarkManager.BookmarksCatalogListener()
{
@Override
public void onImportStarted(@NonNull String serverId)
{
UiUtils.show(mProgressContainer);
UiUtils.hide(mEmptyViewContainer, mPayloadContainer);
}
@Override
public void onImportFinished(@NonNull String serverId, long catId, boolean successful)
{
if (successful)
{
mPayloadContainer.setVisibility(View.VISIBLE);
mProgressContainer.setVisibility(View.GONE);
mEmptyViewContainer.setVisibility(View.GONE);
getAdapter().notifyDataSetChanged();
}
else
{
boolean isEmptyAdapter = getAdapter().getItemCount() == 0;
mProgressContainer.setVisibility(View.GONE);
UiUtils.showIf(isEmptyAdapter, mEmptyViewContainer);
mPayloadContainer.setVisibility(isEmptyAdapter ? View.GONE : View.VISIBLE);
}
@Override
public void onImportFinished(@NonNull String serverId, long catId, boolean successful)
{
if (successful)
{
UiUtils.show(mPayloadContainer);
UiUtils.hide(mProgressContainer, mEmptyViewContainer);
getAdapter().notifyDataSetChanged();
}
else
{
boolean isEmptyAdapter = getAdapter().getItemCount() == 0;
UiUtils.hide(mProgressContainer);
UiUtils.showIf(isEmptyAdapter, mEmptyViewContainer);
UiUtils.hideIf(isEmptyAdapter, mPayloadContainer);
}
}
};
}
@Override

View file

@ -0,0 +1,74 @@
package com.mapswithme.maps.bookmarks;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import com.mapswithme.maps.R;
import com.mapswithme.maps.bookmarks.data.BookmarkCategory;
import com.mapswithme.maps.bookmarks.data.BookmarkManager;
import com.mapswithme.util.DialogUtils;
class CatalogListenerDecorator extends BookmarkManager.DefaultBookmarksCatalogListener
{
@NonNull
private Fragment mFragment;
@Nullable
private BookmarkManager.BookmarksCatalogListener mWrapped;
CatalogListenerDecorator(@NonNull Fragment fragment)
{
this(null, fragment);
}
CatalogListenerDecorator(@Nullable BookmarkManager.BookmarksCatalogListener listener,
@NonNull Fragment fragment)
{
mFragment = fragment;
mWrapped = listener;
}
@Override
public void onImportStarted(@NonNull String serverId)
{
if (mWrapped != null)
mWrapped.onImportStarted(serverId);
}
@Override
public void onImportFinished(@NonNull String serverId, long catId, boolean successful)
{
if (mWrapped != null)
mWrapped.onImportFinished(serverId, catId, successful);
if (successful)
onSuccess(mFragment, catId);
else
onError(mFragment);
}
private static void onSuccess(@NonNull Fragment fragment, long catId)
{
BookmarkCategory category = BookmarkManager.INSTANCE.getCategoryById(catId);
FragmentManager fm = fragment.getActivity().getSupportFragmentManager();
ShowOnMapCatalogCategoryFragment frag =
(ShowOnMapCatalogCategoryFragment) fm.findFragmentByTag(ShowOnMapCatalogCategoryFragment.TAG);
if (frag == null)
{
ShowOnMapCatalogCategoryFragment.newInstance(category)
.show(fm, ShowOnMapCatalogCategoryFragment.TAG);
fm.executePendingTransactions();
return;
}
frag.setCategory(category);
}
private static void onError(@NonNull Fragment fragment)
{
DialogUtils.showAlertDialog(fragment.getActivity(),
R.string.title_error_downloading_bookmarks,
R.string.subtitle_error_downloading_bookmarks);
}
}

View file

@ -8,6 +8,7 @@ import android.database.Cursor;
import android.net.Uri;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.text.TextUtils;
import android.widget.Toast;
import com.mapswithme.maps.MwmApplication;
@ -133,9 +134,11 @@ public class SystemDownloadCompletedService extends IntentService
@Override
public void run()
{
if (mStatus.isOk())
Result result = mStatus.getResult();
if (mStatus.isOk() && result != null && !TextUtils.isEmpty(result.getArchiveId())
&& !TextUtils.isEmpty(result.getFilePath()))
{
Result result = mStatus.getResult();
BookmarkManager.INSTANCE.importFromCatalog(result.getArchiveId(), result.getFilePath());
}
else