package org.droidplanner.android.droneshare;
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 timber.log.Timber;
/**
* When the device's network connectivity is restored, check and see if there's
* anymore data to upload.
*/
public class NetworkConnectivityReceiver extends BroadcastReceiver {
private static final String TAG = NetworkConnectivityReceiver.class.getSimpleName();
@Override
public void onReceive(Context context, Intent intent) {
final String action = intent.getAction();
if (ConnectivityManager.CONNECTIVITY_ACTION.equals(action)) {
final boolean noConnectivity = intent.getBooleanExtra(
ConnectivityManager.EXTRA_NO_CONNECTIVITY, false);
if (noConnectivity) {
// No connectivity. Keep the receiver enabled to listen for
// possible connectivity changes in the future.
return;
}
// There is connectivity! Restart the droneshare uploader service,
// and disable this connectivity receiver.
UploaderService.kickStart(context);
Timber.d("Disabling connectivity receiver.");
enableConnectivityReceiver(context, false);
}
}
public static boolean isNetworkAvailable(Context context) {
ConnectivityManager connectivityManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
return activeNetworkInfo != null && activeNetworkInfo.isConnected();
}
/**
* Toggles the connectivity listener component of the app.
*
* @param context
* application context
* @param enable
* true to enable
*/
public static void enableConnectivityReceiver(Context context, boolean enable) {
final ComponentName receiver = new ComponentName(context, NetworkConnectivityReceiver.class);
final int newState = enable ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED
: PackageManager.COMPONENT_ENABLED_STATE_DISABLED;
context.getPackageManager().setComponentEnabledSetting(receiver, newState,
PackageManager.DONT_KILL_APP);
}
}