[android] Added progress dialog while bookmark categigory is being zipped

This commit is contained in:
Александр Зацепин 2018-03-27 19:58:06 +03:00 committed by Arsentiy Milchakov
parent af125ebee6
commit 1e2f02ae37
4 changed files with 58 additions and 63 deletions

View file

@ -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() {

View file

@ -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

View file

@ -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;
}

View file

@ -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<String, SharingTarget> 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<SharingTarget>()
{
@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<SharingTarget> 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())