[android] show convert bookmarks dialog only one time

This commit is contained in:
Alexey Osminin 2020-11-19 13:10:30 +03:00 committed by Alexander Boriskov
parent cd2f929b3a
commit 6e481ec3c6
5 changed files with 84 additions and 40 deletions

View file

@ -56,10 +56,6 @@ public abstract class BaseBookmarkCategoriesFragment extends BaseMwmRecyclerFrag
private BookmarkCategory mSelectedCategory;
@Nullable
private CategoryEditor mCategoryEditor;
@Nullable
private KmlImportController mKmlImportController;
@NonNull
private Runnable mImportKmlTask = new ImportKmlTask();
@SuppressWarnings("NullableProblems")
@NonNull
private BookmarkManager.BookmarksCatalogListener mCatalogListener;
@ -110,7 +106,7 @@ public abstract class BaseBookmarkCategoriesFragment extends BaseMwmRecyclerFrag
protected void onPrepareControllers(@NonNull View view)
{
mKmlImportController = new KmlImportController(getActivity(), this);
// No op
}
protected void updateLoadingPlaceholder()
@ -131,8 +127,6 @@ public abstract class BaseBookmarkCategoriesFragment extends BaseMwmRecyclerFrag
BookmarkManager.INSTANCE.addLoadingListener(this);
BookmarkManager.INSTANCE.addSharingListener(this);
BookmarkManager.INSTANCE.addCatalogListener(mCatalogListener);
if (mKmlImportController != null)
mKmlImportController.onStart();
}
@Override
@ -142,8 +136,6 @@ public abstract class BaseBookmarkCategoriesFragment extends BaseMwmRecyclerFrag
BookmarkManager.INSTANCE.removeLoadingListener(this);
BookmarkManager.INSTANCE.removeSharingListener(this);
BookmarkManager.INSTANCE.removeCatalogListener(mCatalogListener);
if (mKmlImportController != null)
mKmlImportController.onStop();
}
@Override
@ -152,8 +144,6 @@ public abstract class BaseBookmarkCategoriesFragment extends BaseMwmRecyclerFrag
super.onResume();
updateLoadingPlaceholder();
getAdapter().notifyDataSetChanged();
if (!BookmarkManager.INSTANCE.isAsyncBookmarksLoadingInProgress())
mImportKmlTask.run();
}
@Override
@ -234,7 +224,6 @@ public abstract class BaseBookmarkCategoriesFragment extends BaseMwmRecyclerFrag
{
updateLoadingPlaceholder();
getAdapter().notifyDataSetChanged();
mImportKmlTask.run();
}
@Override
@ -243,12 +232,6 @@ public abstract class BaseBookmarkCategoriesFragment extends BaseMwmRecyclerFrag
// Do nothing here.
}
private void importKml()
{
if (mKmlImportController != null)
mKmlImportController.importKml();
}
@Override
public void onPreparedFileForSharing(@NonNull BookmarkSharingResult result)
{
@ -373,20 +356,6 @@ public abstract class BaseBookmarkCategoriesFragment extends BaseMwmRecyclerFrag
void commit(@NonNull String newName);
}
private class ImportKmlTask implements Runnable
{
private boolean alreadyDone;
@Override
public void run()
{
if (alreadyDone)
return;
importKml();
alreadyDone = true;
}
}
protected enum MenuItemClickProcessorWrapper
{

View file

@ -24,7 +24,6 @@ public class BookmarkCategoriesFragment extends BaseBookmarkCategoriesFragment
@Override
protected void onPrepareControllers(@NonNull View view)
{
super.onPrepareControllers(view);
Authorizer authorizer = new Authorizer(this);
BookmarkBackupView backupView = view.findViewById(R.id.backup);

View file

@ -9,6 +9,7 @@ import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.viewpager.widget.ViewPager;
import com.google.android.material.tabs.TabLayout;
@ -16,16 +17,19 @@ import com.mapswithme.maps.R;
import com.mapswithme.maps.auth.TargetFragmentCallback;
import com.mapswithme.maps.base.BaseMwmFragment;
import com.mapswithme.maps.bookmarks.data.BookmarkCategory;
import com.mapswithme.maps.bookmarks.data.BookmarkManager;
import com.mapswithme.maps.dialog.AlertDialogCallback;
import com.mapswithme.maps.purchase.PurchaseUtils;
import com.mapswithme.util.SharedPropertiesUtils;
import com.mapswithme.util.statistics.Statistics;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class BookmarkCategoriesPagerFragment extends BaseMwmFragment
implements TargetFragmentCallback, AlertDialogCallback, AuthCompleteListener
implements TargetFragmentCallback, AlertDialogCallback, AuthCompleteListener,
KmlImportController.ImportKmlCallback, BookmarkManager.BookmarksLoadingListener
{
final static String ARG_CATEGORIES_PAGE = "arg_categories_page";
final static String ARG_CATALOG_DEEPLINK = "arg_catalog_deeplink";
@ -47,6 +51,10 @@ public class BookmarkCategoriesPagerFragment extends BaseMwmFragment
@SuppressWarnings("NullableProblems")
@NonNull
private ViewPager mViewPager;
@NonNull
private final Runnable mImportKmlTask = new ImportKmlTask();
@Nullable
private KmlImportController mKmlImportController;
@Override
public void onCreate(@Nullable Bundle savedInstanceState)
@ -86,14 +94,15 @@ public class BookmarkCategoriesPagerFragment extends BaseMwmFragment
mViewPager = root.findViewById(R.id.viewpager);
TabLayout tabLayout = root.findViewById(R.id.sliding_tabs_layout);
FragmentManager fm = getActivity().getSupportFragmentManager();
FragmentManager fm = requireActivity().getSupportFragmentManager();
List<BookmarksPageFactory> dataSet = getAdapterDataSet();
mAdapter = new BookmarksPagerAdapter(getContext(), fm, dataSet);
mAdapter = new BookmarksPagerAdapter(requireContext(), fm, dataSet);
mViewPager.setAdapter(mAdapter);
mViewPager.setCurrentItem(saveAndGetInitialPage());
tabLayout.setupWithViewPager(mViewPager);
mViewPager.addOnPageChangeListener(new PageChangeListener());
mDelegate.onCreateView(savedInstanceState);
mKmlImportController = new KmlImportController(requireActivity(), this);
return root;
}
@ -116,6 +125,9 @@ public class BookmarkCategoriesPagerFragment extends BaseMwmFragment
public void onStart()
{
super.onStart();
if (mKmlImportController != null)
mKmlImportController.onStart();
BookmarkManager.INSTANCE.addLoadingListener(this);
mDelegate.onStart();
if (TextUtils.isEmpty(mCatalogDeeplink))
return;
@ -129,6 +141,8 @@ public class BookmarkCategoriesPagerFragment extends BaseMwmFragment
{
super.onResume();
mDelegate.onResume();
if (!BookmarkManager.INSTANCE.isAsyncBookmarksLoadingInProgress())
mImportKmlTask.run();
}
@Override
@ -142,7 +156,10 @@ public class BookmarkCategoriesPagerFragment extends BaseMwmFragment
public void onStop()
{
super.onStop();
if (mKmlImportController != null)
mKmlImportController.onStop();
mDelegate.onStop();
BookmarkManager.INSTANCE.removeLoadingListener(this);
}
@Override
@ -158,11 +175,11 @@ public class BookmarkCategoriesPagerFragment extends BaseMwmFragment
if (args != null && args.containsKey(ARG_CATEGORIES_PAGE))
{
int page = args.getInt(ARG_CATEGORIES_PAGE);
SharedPropertiesUtils.setLastVisibleBookmarkCategoriesPage(getActivity(), page);
SharedPropertiesUtils.setLastVisibleBookmarkCategoriesPage(requireActivity(), page);
return page;
}
return SharedPropertiesUtils.getLastVisibleBookmarkCategoriesPage(getActivity());
return SharedPropertiesUtils.getLastVisibleBookmarkCategoriesPage(requireActivity());
}
@NonNull
@ -210,14 +227,65 @@ public class BookmarkCategoriesPagerFragment extends BaseMwmFragment
mViewPager.setAdapter(mAdapter);
}
@Override
public void onFinishKmlImport()
{
if (getFragmentManager() == null)
return;
for (Fragment fragment : getFragmentManager().getFragments())
{
if (fragment != this && fragment instanceof KmlImportController.ImportKmlCallback)
((KmlImportController.ImportKmlCallback) fragment).onFinishKmlImport();
}
}
@Override
public void onBookmarksLoadingStarted()
{
// No op
}
@Override
public void onBookmarksLoadingFinished()
{
mImportKmlTask.run();
}
@Override
public void onBookmarksFileLoaded(boolean success)
{
// No op
}
private class PageChangeListener extends ViewPager.SimpleOnPageChangeListener
{
@Override
public void onPageSelected(int position)
{
SharedPropertiesUtils.setLastVisibleBookmarkCategoriesPage(getActivity(), position);
SharedPropertiesUtils.setLastVisibleBookmarkCategoriesPage(requireActivity(), position);
BookmarksPageFactory factory = mAdapter.getItemFactory(position);
Statistics.INSTANCE.trackBookmarksTabEvent(factory.getAnalytics().getName());
}
}
private void importKml()
{
if (mKmlImportController != null)
mKmlImportController.importKml();
}
private class ImportKmlTask implements Runnable
{
private boolean alreadyDone;
@Override
public void run()
{
if (alreadyDone)
return;
importKml();
alreadyDone = true;
}
}
}

View file

@ -1,6 +1,7 @@
package com.mapswithme.maps.bookmarks;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import android.text.TextUtils;
@ -93,7 +94,7 @@ public enum BookmarksPageFactory
}
@NonNull
public abstract Fragment instantiateFragment();
protected abstract Fragment instantiateFragment();
public abstract int getTitle();

View file

@ -194,6 +194,13 @@ public class CachedBookmarkCategoriesFragment extends BaseBookmarkCategoriesFrag
}
}
@Override
public void onFinishKmlImport()
{
updateLoadingPlaceholder();
super.onFinishKmlImport();
}
private class BookmarkCategoriesCatalogListener implements BookmarkManager.BookmarksCatalogListener
{
@Override