package fr.prcaen.externalresources; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.net.NetworkInfo; import android.support.annotation.NonNull; import static android.content.Intent.ACTION_AIRPLANE_MODE_CHANGED; import static android.net.ConnectivityManager.CONNECTIVITY_ACTION; public class NetworkBroadcastReceiver extends BroadcastReceiver { private static final String EXTRA_AIRPLANE_STATE = "state"; private final Context context; private final Dispatcher dispatcher; public NetworkBroadcastReceiver(@NonNull Context context, @NonNull Dispatcher dispatcher) { this.context = context; this.dispatcher = dispatcher; } public void register() { IntentFilter filter = new IntentFilter(); filter.addAction(ACTION_AIRPLANE_MODE_CHANGED); if (Utils.hasNetworkStatePermission(context)) { filter.addAction(CONNECTIVITY_ACTION); } context.registerReceiver(this, filter); } public void unregister() { context.unregisterReceiver(this); } @Override public void onReceive(Context context, Intent intent) { if (null == intent) { return; } final String action = intent.getAction(); if (ACTION_AIRPLANE_MODE_CHANGED.equals(action) && intent.hasExtra(EXTRA_AIRPLANE_STATE)) { dispatcher.dispatchAirplaneModeChange(intent.getBooleanExtra(EXTRA_AIRPLANE_STATE, false)); } else if (CONNECTIVITY_ACTION.equals(action)) { NetworkInfo networkInfo = Utils.getActiveNetworkInfo(context); if (null != networkInfo) { dispatcher.dispatchNetworkStateChange(networkInfo); } } } }