forked from organicmaps/organicmaps
Check and display warning if download size is > 50 MB on cellular connection.
This commit is contained in:
parent
95a7a725f8
commit
45ddd3714c
3 changed files with 93 additions and 42 deletions
|
@ -24,6 +24,7 @@ import com.mapswithme.maps.BuildConfig;
|
|||
import com.mapswithme.maps.MWMApplication;
|
||||
import com.mapswithme.maps.MapStorage;
|
||||
import com.mapswithme.maps.R;
|
||||
import com.mapswithme.maps.downloader.DownloadHelper;
|
||||
import com.mapswithme.maps.widget.WheelProgressView;
|
||||
import com.mapswithme.util.Constants;
|
||||
import com.mapswithme.util.UiUtils;
|
||||
|
@ -142,11 +143,19 @@ abstract class BaseDownloadAdapter extends BaseAdapter
|
|||
@Override
|
||||
public abstract CountryItem getItem(int position);
|
||||
|
||||
protected void processNotDownloaded(final String name, int position, int newOptions, ViewHolder holder)
|
||||
protected void processNotDownloaded(final String name, final int position, final int status, final int newOptions, final ViewHolder holder)
|
||||
{
|
||||
// TODO if download is greater then 50MB check 3g/WIFI connection
|
||||
startItemDownloading(holder, position, newOptions);
|
||||
Statistics.INSTANCE.trackCountryDownload(MWMApplication.get().nativeGetBoolean(MWMApplication.IS_PREINSTALLED, false), BuildConfig.FLAVOR);
|
||||
final long[] remoteSizes = getRemoteItemSizes(position);
|
||||
final long size = newOptions > StorageOptions.MAP_OPTION_MAP_ONLY ? remoteSizes[0] : remoteSizes[1];
|
||||
DownloadHelper.downloadWithCellularCheck(mFragment.getActivity(), size, name, new DownloadHelper.OnDownloadListener()
|
||||
{
|
||||
@Override
|
||||
public void onDownload()
|
||||
{
|
||||
startItemDownloading(holder, position, newOptions);
|
||||
Statistics.INSTANCE.trackCountryDownload(MWMApplication.get().nativeGetBoolean(MWMApplication.IS_PREINSTALLED, false), BuildConfig.FLAVOR);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
protected void confirmDownloadCancelation(final ViewHolder holder, final int position, final String name)
|
||||
|
@ -168,11 +177,19 @@ abstract class BaseDownloadAdapter extends BaseAdapter
|
|||
dlg.show();
|
||||
}
|
||||
|
||||
protected void processOutOfDate(final String name, int position, int newOptions)
|
||||
protected void processOutOfDate(final String name, final int position, int status, final int newOptions)
|
||||
{
|
||||
// TODO if download is greater then 50MB check 3g/WIFI connection
|
||||
updateCountry(position, newOptions);
|
||||
Statistics.INSTANCE.trackCountryUpdate();
|
||||
final long[] remoteSizes = getRemoteItemSizes(position);
|
||||
final long size = newOptions > StorageOptions.MAP_OPTION_MAP_ONLY ? remoteSizes[0] : remoteSizes[1];
|
||||
DownloadHelper.downloadWithCellularCheck(mFragment.getActivity(), size, name, new DownloadHelper.OnDownloadListener()
|
||||
{
|
||||
@Override
|
||||
public void onDownload()
|
||||
{
|
||||
updateCountry(position, newOptions);
|
||||
Statistics.INSTANCE.trackCountryUpdate();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
protected void processOnDisk(final String name, final int position, final int newOptions)
|
||||
|
@ -750,10 +767,10 @@ abstract class BaseDownloadAdapter extends BaseAdapter
|
|||
processOnDisk(name, position, StorageOptions.MAP_OPTION_MAP_ONLY);
|
||||
break;
|
||||
case MENU_UPDATE:
|
||||
processOutOfDate(name, position, StorageOptions.MAP_OPTION_MAP_ONLY);
|
||||
processOutOfDate(name, position, status, StorageOptions.MAP_OPTION_MAP_ONLY);
|
||||
break;
|
||||
case MENU_DOWNLOAD:
|
||||
processNotDownloaded(name, position, StorageOptions.MAP_OPTION_MAP_ONLY, holder);
|
||||
processNotDownloaded(name, position, status, StorageOptions.MAP_OPTION_MAP_ONLY, holder);
|
||||
break;
|
||||
case MENU_CANCEL:
|
||||
confirmDownloadCancelation(holder, position, name);
|
||||
|
@ -765,16 +782,16 @@ abstract class BaseDownloadAdapter extends BaseAdapter
|
|||
processOnDisk(name, position, StorageOptions.MAP_OPTION_CAR_ROUTING);
|
||||
break;
|
||||
case MENU_DOWNLOAD_ROUTING:
|
||||
processNotDownloaded(name, position, StorageOptions.MAP_OPTION_CAR_ROUTING, holder);
|
||||
processNotDownloaded(name, position, status, StorageOptions.MAP_OPTION_CAR_ROUTING, holder);
|
||||
break;
|
||||
case MENU_DOWNLOAD_MAP_AND_ROUTING:
|
||||
processNotDownloaded(name, position, StorageOptions.MAP_OPTION_MAP_AND_CAR_ROUTING, holder);
|
||||
processNotDownloaded(name, position, status, StorageOptions.MAP_OPTION_MAP_AND_CAR_ROUTING, holder);
|
||||
break;
|
||||
case MENU_UPDATE_MAP_DOWNLOAD_ROUTING:
|
||||
processNotDownloaded(name, position, StorageOptions.MAP_OPTION_MAP_AND_CAR_ROUTING, holder);
|
||||
processNotDownloaded(name, position, status, StorageOptions.MAP_OPTION_MAP_AND_CAR_ROUTING, holder);
|
||||
break;
|
||||
case MENU_UPDATE_MAP_AND_ROUTING:
|
||||
processOutOfDate(name, position, StorageOptions.MAP_OPTION_MAP_AND_CAR_ROUTING);
|
||||
processOutOfDate(name, position, status, StorageOptions.MAP_OPTION_MAP_AND_CAR_ROUTING);
|
||||
break;
|
||||
case MENU_RETRY:
|
||||
processFailed(holder, position);
|
||||
|
|
|
@ -60,6 +60,7 @@ import com.mapswithme.maps.bookmarks.data.BookmarkManager;
|
|||
import com.mapswithme.maps.bookmarks.data.MapObject;
|
||||
import com.mapswithme.maps.bookmarks.data.MapObject.ApiPoint;
|
||||
import com.mapswithme.maps.bookmarks.data.ParcelablePoint;
|
||||
import com.mapswithme.maps.downloader.DownloadHelper;
|
||||
import com.mapswithme.maps.location.LocationHelper;
|
||||
import com.mapswithme.maps.location.LocationPredictor;
|
||||
import com.mapswithme.maps.search.SearchActivity;
|
||||
|
@ -217,6 +218,7 @@ public class MWMActivity extends NvEventQueueActivity
|
|||
LocationState.INSTANCE.invalidatePosition();
|
||||
}
|
||||
|
||||
@SuppressWarnings("UnusedDeclaration")
|
||||
public void OnDownloadCountryClicked(final int group, final int country, final int region, final int options)
|
||||
{
|
||||
runOnUiThread(new Runnable()
|
||||
|
@ -230,35 +232,14 @@ public class MWMActivity extends NvEventQueueActivity
|
|||
else
|
||||
{
|
||||
long size = MapStorage.INSTANCE.countryRemoteSizeInBytes(index, options);
|
||||
if (size > 50 * 1024 * 1024 && !ConnectionState.isWifiConnected())
|
||||
DownloadHelper.downloadWithCellularCheck(MWMActivity.this, size, MapStorage.INSTANCE.countryName(index), new DownloadHelper.OnDownloadListener()
|
||||
{
|
||||
new AlertDialog.Builder(MWMActivity.this)
|
||||
.setCancelable(true)
|
||||
.setMessage(String.format(getString(R.string.no_wifi_ask_cellular_download), MapStorage.INSTANCE.countryName(index)))
|
||||
.setPositiveButton(getString(R.string.ok), new DialogInterface.OnClickListener()
|
||||
{
|
||||
@Override
|
||||
public void onClick(DialogInterface dlg, int which)
|
||||
{
|
||||
nativeDownloadCountry(index, options);
|
||||
dlg.dismiss();
|
||||
}
|
||||
})
|
||||
.setNegativeButton(getString(R.string.close), new DialogInterface.OnClickListener()
|
||||
{
|
||||
@Override
|
||||
public void onClick(DialogInterface dlg, int which)
|
||||
{
|
||||
dlg.dismiss();
|
||||
}
|
||||
})
|
||||
.create()
|
||||
.show();
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
nativeDownloadCountry(index, options);
|
||||
@Override
|
||||
public void onDownload()
|
||||
{
|
||||
nativeDownloadCountry(index, options);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
|
|
|
@ -0,0 +1,53 @@
|
|||
package com.mapswithme.maps.downloader;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.app.AlertDialog;
|
||||
import android.content.DialogInterface;
|
||||
|
||||
import com.mapswithme.maps.R;
|
||||
import com.mapswithme.util.ConnectionState;
|
||||
import com.mapswithme.util.Constants;
|
||||
|
||||
public class DownloadHelper
|
||||
{
|
||||
private DownloadHelper() {}
|
||||
|
||||
public interface OnDownloadListener
|
||||
{
|
||||
void onDownload();
|
||||
}
|
||||
|
||||
public static boolean canDownloadWithoutWarning(long size)
|
||||
{
|
||||
return size < 50 * Constants.MB || ConnectionState.isWifiConnected();
|
||||
}
|
||||
|
||||
public static void downloadWithCellularCheck(Activity activity, long size, String name, final OnDownloadListener listener)
|
||||
{
|
||||
if (canDownloadWithoutWarning(size))
|
||||
listener.onDownload();
|
||||
else
|
||||
new AlertDialog.Builder(activity)
|
||||
.setCancelable(true)
|
||||
.setMessage(String.format(activity.getString(R.string.no_wifi_ask_cellular_download), name))
|
||||
.setPositiveButton(activity.getString(R.string.ok), new DialogInterface.OnClickListener()
|
||||
{
|
||||
@Override
|
||||
public void onClick(DialogInterface dlg, int which)
|
||||
{
|
||||
listener.onDownload();
|
||||
dlg.dismiss();
|
||||
}
|
||||
})
|
||||
.setNegativeButton(activity.getString(R.string.close), new DialogInterface.OnClickListener()
|
||||
{
|
||||
@Override
|
||||
public void onClick(DialogInterface dlg, int which)
|
||||
{
|
||||
dlg.dismiss();
|
||||
}
|
||||
})
|
||||
.create()
|
||||
.show();
|
||||
}
|
||||
}
|
Loading…
Add table
Reference in a new issue