package cl.monsoon.s1next.widget; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.net.wifi.WifiManager; import com.google.common.base.Preconditions; import javax.inject.Inject; import cl.monsoon.s1next.App; import cl.monsoon.s1next.data.Wifi; import cl.monsoon.s1next.data.pref.DownloadPreferencesManager; import cl.monsoon.s1next.util.NetworkUtil; /** * A helper class for registering broadcast receiver to check whether Wi-Fi * is enabled when we need to download images. */ public final class WifiBroadcastReceiver { @Inject Wifi mWifi; @Inject DownloadPreferencesManager mDownloadPreferencesManager; private final Context mContext; private BroadcastReceiver mBroadcastReceiver; public WifiBroadcastReceiver(Context context) { this.mContext = context; App.getAppComponent(context).inject(this); } public void registerIfNeeded() { Preconditions.checkState(mBroadcastReceiver == null); if (mDownloadPreferencesManager.needMonitorWifi()) { mWifi.setWifiEnabled(NetworkUtil.isWifiConnected(mContext)); mBroadcastReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { mWifi.setWifiEnabled(NetworkUtil.isWifiConnected(context)); } }; IntentFilter intentFilter = new IntentFilter(WifiManager.NETWORK_STATE_CHANGED_ACTION); mContext.registerReceiver(mBroadcastReceiver, intentFilter); } } public void unregisterIfNeeded() { if (mBroadcastReceiver != null) { mContext.unregisterReceiver(mBroadcastReceiver); mBroadcastReceiver = null; } } /** * A marker interface that any {@link android.app.Activity} * implements this interface would be registered to monitor * wifi status (if needed) automatically. */ public interface NeedMonitorWifi {} }