package de.bsd.zwitscher.helper;
import android.content.Context;
import android.content.SharedPreferences;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.preference.PreferenceManager;
import android.telephony.TelephonyManager;
import android.util.Log;
/**
* Helper that deals with network availability
*
* @author Heiko W. Rupp
*/
public class NetworkHelper {
private ConnectivityManager cManager;
private SharedPreferences preferences;
public NetworkHelper(Context context) {
cManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
preferences = PreferenceManager.getDefaultSharedPreferences(context);
}
public boolean mayDownloadImages() {
String networkConfig = preferences.getString("networkConfig","1");
boolean whenRoaming = preferences.getBoolean("roaming", false);
return downLoadOk(networkConfig, whenRoaming);
}
public boolean mayReloadAdditional() {
String networkConfig = preferences.getString("extraload_networkConfig","1");
boolean whenRoaming = preferences.getBoolean("extraload_roaming", false);
return downLoadOk(networkConfig, whenRoaming);
}
private boolean downLoadOk(String networkConfig, boolean whenRoaming) {
NetworkInfo info = cManager.getActiveNetworkInfo();
if (info==null) {
Log.i("NetworkHelper", "Can't get info about active network, blocking down load");
return false;
}
int type = info.getType();
int subType = info.getSubtype();
int configType;
try {
configType = Integer.parseInt(networkConfig);
} catch (NumberFormatException e) {
Log.w("NetworkHelper",e.getMessage());
configType = 6;
}
if (configType==6) // Never
return false;
if (type== ConnectivityManager.TYPE_MOBILE) {
if (info.isRoaming() && !whenRoaming) {
Log.d("NetworkHelper","Phone is roaming, but download disabled ");
return false;
}
switch (configType) {
case 1: return true; // Always
case 2: return false; // WiFi necessary - but this is a mobile network
case 3: return subType >= TelephonyManager.NETWORK_TYPE_UMTS;
case 4: return subType >= TelephonyManager.NETWORK_TYPE_EDGE;
case 5: return subType >= TelephonyManager.NETWORK_TYPE_GPRS;
case 6: return false; // Never
default:
Log.w("NetworkHelper","Unknown config type: " + configType);
return false;
}
} else if (type==ConnectivityManager.TYPE_WIFI && configType<6) {
return true; // Wifi is 'better' than mobile and 'Never' was caught earlier
} else {
Log.i("NetworkHelper","Unknown connectivity type: " + info.getTypeName());
return false;
}
}
public boolean isOnline() {
NetworkInfo info = cManager.getActiveNetworkInfo();
return info != null;
}
}