package at.tugraz.examreminder.service;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.preference.PreferenceManager;
import android.util.Log;
import com.commonsware.cwac.wakeful.WakefulIntentService;
public class ConnectivityReceiver extends BroadcastReceiver {
public static final String TAG = "ConnectivityReceiver";
@Override
public void onReceive(Context context, Intent intent) {
if (!intent.getAction().equals(ConnectivityManager.CONNECTIVITY_ACTION))
return;
Log.d(TAG, "ConnectivityReceiver invoked...");
int update_interval = Integer.parseInt(PreferenceManager.getDefaultSharedPreferences(context).getString("pref_update_frequency", "-1"));
if(update_interval <= 0)
return;
Log.d(TAG, "Update check daily is enabled!");
boolean noConnectivity = intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, false);
if(!noConnectivity)
return;
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netInfo = cm.getActiveNetworkInfo();
// only when connected or while connecting...
if (netInfo != null && netInfo.isConnectedOrConnecting()) {
boolean updateOnlyOnWifi = PreferenceManager.getDefaultSharedPreferences(context).getBoolean("pref_update_wifi_only", false);
// if we have mobile or wifi connectivity...
if (((netInfo.getType() == ConnectivityManager.TYPE_MOBILE) && updateOnlyOnWifi == false)
|| (netInfo.getType() == ConnectivityManager.TYPE_WIFI)) {
Log.d("ConnectivityReceiver", "We have internet, start update check and disable receiver!");
// Start service with wakelock by using WakefulIntentService
Intent backgroundIntent = new Intent(context, UpdateService.class);
WakefulIntentService.sendWakefulWork(context, backgroundIntent);
// disable receiver after we started the service
disableReceiver(context);
}
}
}
/**
* Enables ConnectivityReceiver
*
* @param context
*/
public static void enableReceiver(Context context) {
ComponentName component = new ComponentName(context, ConnectivityReceiver.class);
context.getPackageManager().setComponentEnabledSetting(component,
PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);
}
/**
* Disables ConnectivityReceiver
*
* @param context
*/
public static void disableReceiver(Context context) {
ComponentName component = new ComponentName(context, ConnectivityReceiver.class);
context.getPackageManager().setComponentEnabledSetting(component,
PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
}
}