package com.circlegate.liban.base; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.support.v4.content.LocalBroadcastManager; public class BaseBroadcastReceivers { public static abstract class BaseBroadcastReceiverCommon extends BroadcastReceiver { private final IntentFilter intentFilter; private boolean registered = false; public BaseBroadcastReceiverCommon(String action) { this(new IntentFilter(action)); } public BaseBroadcastReceiverCommon(IntentFilter intentFilter) { this.intentFilter = intentFilter; } public IntentFilter getIntentFilter() { return this.intentFilter; } public boolean isRegistered() { return this.registered; } protected boolean register(Context context) { if (!registered) { doRegister(context); registered = true; return true; } else return false; } public boolean unregister(Context context) { if (registered) { doUnregister(context); registered = false; return true; } else return false; } @Override public final void onReceive(Context context, Intent intent) { if (registered) onReceiveRegistered(context, intent); } protected abstract void doRegister(Context context); protected abstract void doUnregister(Context context); protected abstract void onReceiveRegistered(Context context, Intent intent); } public static abstract class BaseLocalReceiverProt extends BaseBroadcastReceiverCommon { public BaseLocalReceiverProt(String action) { super(action); } public BaseLocalReceiverProt(IntentFilter intentFilter) { super(intentFilter); } @Override protected void doRegister(Context context) { LocalBroadcastManager.getInstance(context).registerReceiver(this, getIntentFilter()); } @Override protected void doUnregister(Context context) { LocalBroadcastManager.getInstance(context).unregisterReceiver(this); } public static void sendBroadcast(Context context, Intent intent) { LocalBroadcastManager.getInstance(context).sendBroadcast(intent); } } public static abstract class BaseLocalReceiver extends BaseLocalReceiverProt { public BaseLocalReceiver(String action) { super(action); } public BaseLocalReceiver(IntentFilter intentFilter) { super(intentFilter); } @Override public boolean register(Context context) { return super.register(context); } } public static abstract class BaseGlobalReceiverProt extends BaseBroadcastReceiverCommon { public BaseGlobalReceiverProt(String action) { super(action); } public BaseGlobalReceiverProt(IntentFilter intentFilter) { super(intentFilter); } @Override protected void doRegister(Context context) { context.registerReceiver(this, getIntentFilter()); } @Override protected void doUnregister(Context context) { context.unregisterReceiver(this); } public static void sendBroadcast(Context context, Intent intent) { context.sendBroadcast(intent); } } public static abstract class BaseGlobalReceiver extends BaseGlobalReceiverProt { public BaseGlobalReceiver(String action) { super(action); } public BaseGlobalReceiver(IntentFilter intentFilter) { super(intentFilter); } @Override public boolean register(Context context) { return super.register(context); } } public static abstract class OnMinuteChangeReceiver extends BaseGlobalReceiverProt { public OnMinuteChangeReceiver() { super(Intent.ACTION_TIME_TICK); } public boolean register(Context context, boolean fireCallbackNow) { if (super.register(context)) { if (fireCallbackNow) onMinuteChange(); return true; } else return false; } @Override public final void onReceiveRegistered(Context context, Intent intent) { onMinuteChange(); } public abstract void onMinuteChange(); } public static abstract class OnMinuteChangeOrConnectedReceiver extends BaseGlobalReceiverProt { public OnMinuteChangeOrConnectedReceiver() { super(Intent.ACTION_TIME_TICK); getIntentFilter().addAction(ConnectivityManager.CONNECTIVITY_ACTION); } public boolean register(Context context, boolean fireCallbackNow) { if (super.register(context)) { if (fireCallbackNow) onMinuteChangeOrConnected(true); return true; } else return false; } @Override public final void onReceiveRegistered(Context context, Intent intent) { if (intent != null && intent.getAction().equals(ConnectivityManager.CONNECTIVITY_ACTION)) { ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo info = manager.getActiveNetworkInfo(); if (info != null && info.isConnected()) { onMinuteChangeOrConnected(false); } } else onMinuteChangeOrConnected(true); } public abstract void onMinuteChangeOrConnected(boolean isMinuteChange); } }