Check and display warning if download size is > 50 MB on cellular connection.

This commit is contained in:
Dmitry Yunitsky 2015-01-21 14:32:03 +03:00 committed by Alex Zolotarev
parent 95a7a725f8
commit 45ddd3714c
3 changed files with 93 additions and 42 deletions

View file

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

View file

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

View file

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