diff --git a/android/src/com/mapswithme/maps/MwmActivity.java b/android/src/com/mapswithme/maps/MwmActivity.java index 84a87e0fc5..be9a150afa 100644 --- a/android/src/com/mapswithme/maps/MwmActivity.java +++ b/android/src/com/mapswithme/maps/MwmActivity.java @@ -527,7 +527,7 @@ public class MwmActivity extends BaseMwmFragmentActivity mSearchController.setVisibilityListener(this); SearchEngine.INSTANCE.addListener(this); - SharingHelper.prepare(); + SharingHelper.INSTANCE.initialize(); //TODO: uncomment after correct visible rect calculation. //mVisibleRectMeasurer = new VisibleRectMeasurer(new VisibleRectListener() { diff --git a/android/src/com/mapswithme/maps/bookmarks/BookmarkCategoriesFragment.java b/android/src/com/mapswithme/maps/bookmarks/BookmarkCategoriesFragment.java index abb5fad7d0..d7bdb47931 100644 --- a/android/src/com/mapswithme/maps/bookmarks/BookmarkCategoriesFragment.java +++ b/android/src/com/mapswithme/maps/bookmarks/BookmarkCategoriesFragment.java @@ -190,7 +190,7 @@ public class BookmarkCategoriesFragment extends BaseMwmRecyclerFragment break; case R.id.set_share: - BookmarkManager.INSTANCE.prepareCategoryForSharing(mSelectedCatId); + SharingHelper.INSTANCE.prepareBookmarkCategoryForSharing(getActivity(), mSelectedCatId); break; case R.id.set_delete: @@ -283,7 +283,7 @@ public class BookmarkCategoriesFragment extends BaseMwmRecyclerFragment @Override public void onPreparedFileForSharing(@NonNull BookmarkSharingResult result) { - SharingHelper.shareBookmarksCategory(getActivity(), result); + SharingHelper.INSTANCE.onPreparedFileForSharing(getActivity(), result); } @Override diff --git a/android/src/com/mapswithme/maps/bookmarks/BookmarksListFragment.java b/android/src/com/mapswithme/maps/bookmarks/BookmarksListFragment.java index a63d5120ff..db43f02c99 100644 --- a/android/src/com/mapswithme/maps/bookmarks/BookmarksListFragment.java +++ b/android/src/com/mapswithme/maps/bookmarks/BookmarksListFragment.java @@ -190,7 +190,7 @@ public class BookmarksListFragment extends BaseMwmListFragment @Override public void onPreparedFileForSharing(@NonNull BookmarkSharingResult result) { - SharingHelper.shareBookmarksCategory(getActivity(), result); + SharingHelper.INSTANCE.onPreparedFileForSharing(getActivity(), result); } @Override @@ -246,7 +246,7 @@ public class BookmarksListFragment extends BaseMwmListFragment { if (item.getItemId() == R.id.set_share) { - BookmarkManager.INSTANCE.prepareCategoryForSharing(mCategoryId); + SharingHelper.INSTANCE.prepareBookmarkCategoryForSharing(getActivity(), mCategoryId); return true; } diff --git a/android/src/com/mapswithme/util/sharing/SharingHelper.java b/android/src/com/mapswithme/util/sharing/SharingHelper.java index ed5ed85e1f..00e50e94d5 100644 --- a/android/src/com/mapswithme/util/sharing/SharingHelper.java +++ b/android/src/com/mapswithme/util/sharing/SharingHelper.java @@ -1,8 +1,8 @@ package com.mapswithme.util.sharing; import android.app.Activity; +import android.app.ProgressDialog; import android.content.Context; -import android.content.DialogInterface; import android.content.Intent; import android.content.SharedPreferences; import android.content.pm.ActivityInfo; @@ -10,6 +10,7 @@ import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.support.annotation.DrawableRes; import android.support.annotation.NonNull; +import android.support.annotation.Nullable; import android.support.annotation.StringRes; import android.text.TextUtils; @@ -29,50 +30,43 @@ import com.mapswithme.util.log.LoggerFactory; import java.io.File; import java.util.ArrayList; import java.util.Collections; -import java.util.Comparator; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; -public final class SharingHelper +public enum SharingHelper { + INSTANCE; + private static final Logger LOGGER = LoggerFactory.INSTANCE.getLogger(LoggerFactory.Type.MISC); private static final String TAG = SharingHelper.class.getSimpleName(); private static final String PREFS_STORAGE = "sharing"; private static final String PREFS_KEY_ITEMS = "items"; - private static boolean sInitialized; - private static final SharingHelper sInstance = new SharingHelper(); - - private final SharedPreferences mPrefs = MwmApplication.get().getSharedPreferences(PREFS_STORAGE, Context.MODE_PRIVATE); + private final SharedPreferences mPrefs + = MwmApplication.get().getSharedPreferences(PREFS_STORAGE, Context.MODE_PRIVATE); private final Map mItems = new HashMap<>(); - private SharingHelper() - {} + @Nullable + private ProgressDialog mProgressDialog; - public static void prepare() + public void initialize() { - if (sInitialized) - return; + ThreadPool.getStorage().execute( + () -> + { + SharingTarget[] items; + String json = INSTANCE.mPrefs.getString(PREFS_KEY_ITEMS, null); + items = parse(json); - sInitialized = true; - - ThreadPool.getStorage().execute(new Runnable() - { - @Override - public void run() - { - SharingTarget[] items; - String json = sInstance.mPrefs.getString(PREFS_KEY_ITEMS, null); - items = parse(json); - - if (items != null) - for (SharingTarget item : items) - sInstance.mItems.put(item.packageName, item); - } - }); + if (items != null) + { + for (SharingTarget item : items) + INSTANCE.mItems.put(item.packageName, item); + } + }); } private static SharingTarget[] parse(String json) @@ -139,14 +133,7 @@ public final class SharingHelper res.add(target); } - Collections.sort(res, new Comparator() - { - @Override - public int compare(SharingTarget left, SharingTarget right) - { - return left.compareTo(right); - } - }); + Collections.sort(res, SharingTarget::compareTo); for (String item : missed) mItems.remove(item); @@ -164,7 +151,7 @@ public final class SharingHelper public static void shareOutside(final BaseShareable data, @StringRes int titleRes) { - shareInternal(data, titleRes, sInstance.findItems(data)); + shareInternal(data, titleRes, INSTANCE.findItems(data)); } private static void shareInternal(final BaseShareable data, int titleRes, final List items) @@ -176,29 +163,18 @@ public final class SharingHelper for (SharingTarget item : items) builder.sheet(i++, item.drawableIcon, item.name); - builder.listener(new DialogInterface.OnClickListener() - { - @Override - public void onClick(DialogInterface dialog, int which) - { - if (which < 0) - return; + builder.listener((dialog, which) -> + { + if (which < 0) + return; - SharingTarget target = items.get(which); - sInstance.updateItem(target); + SharingTarget target = items.get(which); + INSTANCE.updateItem(target); - data.share(target); - } - }); + data.share(target); + }); - UiThread.runLater(new Runnable() - { - @Override - public void run() - { - builder.show(); - } - }, 500); + UiThread.runLater(builder::show, 500); } private void updateItem(SharingTarget item) @@ -214,7 +190,26 @@ public final class SharingHelper save(); } - public static void shareBookmarksCategory(@NonNull Activity context, + public void prepareBookmarkCategoryForSharing(@NonNull Activity context, long catId) + { + mProgressDialog = new ProgressDialog(context); + mProgressDialog.setMessage(context.getString(R.string.please_wait)); + mProgressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); + mProgressDialog.setIndeterminate(true); + mProgressDialog.setCancelable(false); + mProgressDialog.show(); + BookmarkManager.INSTANCE.prepareCategoryForSharing(catId); + } + + public void onPreparedFileForSharing(@NonNull Activity context, + @NonNull BookmarkSharingResult result) + { + if (mProgressDialog != null && mProgressDialog.isShowing()) + mProgressDialog.dismiss(); + shareBookmarksCategory(context, result); + } + + private static void shareBookmarksCategory(@NonNull Activity context, @NonNull BookmarkSharingResult result) { switch (result.getCode())