forked from organicmaps/organicmaps
[android] Added handling of catalog callbacks on all bookmark screens
This commit is contained in:
parent
bfc9d049d3
commit
f2cc77f334
7 changed files with 131 additions and 106 deletions
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
|
@ -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
|
||||
|
|
Loading…
Add table
Reference in a new issue