package me.xiaopan.sketch.feature;
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 java.lang.ref.WeakReference;
import me.xiaopan.sketch.Sketch;
/**
* 移动网络下全局暂停下载控制器
*/
public class MobileNetworkGlobalPauseDownloadController {
private NetworkChangedBroadcastReceiver receiver;
private boolean opened;
public MobileNetworkGlobalPauseDownloadController(Context context) {
context = context.getApplicationContext();
receiver = new NetworkChangedBroadcastReceiver(context, this);
}
/**
* 已经开启了?
*/
public boolean isOpened() {
return opened;
}
/**
* 开启功能
*
* @param opened 开启
*/
public void setOpened(boolean opened) {
if (this.opened == opened) {
return;
}
this.opened = opened;
if (this.opened) {
updateStatus(receiver.context);
receiver.register();
} else {
Sketch.with(receiver.context).getConfiguration().setGlobalPauseDownload(false);
receiver.unregister();
}
}
/**
* 网络状态变化或初始化时更新全局暂停功能
*
* @param context {@link Context}
*/
private void updateStatus(Context context) {
NetworkInfo networkInfo = ((ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo();
boolean isPause = networkInfo != null && networkInfo.isAvailable() && networkInfo.getType() == ConnectivityManager.TYPE_MOBILE;
Sketch.with(context).getConfiguration().setGlobalPauseDownload(isPause);
}
/**
* 监听网络变化的广播
*/
private static class NetworkChangedBroadcastReceiver extends BroadcastReceiver {
private Context context;
private WeakReference<MobileNetworkGlobalPauseDownloadController> downloadWeakReference;
public NetworkChangedBroadcastReceiver(Context context, MobileNetworkGlobalPauseDownloadController download) {
context = context.getApplicationContext();
this.context = context;
this.downloadWeakReference = new WeakReference<MobileNetworkGlobalPauseDownloadController>(download);
}
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(ConnectivityManager.CONNECTIVITY_ACTION)) {
MobileNetworkGlobalPauseDownloadController download = downloadWeakReference.get();
if (download != null) {
download.updateStatus(context);
}
}
}
private void register() {
try {
context.registerReceiver(this, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
} catch (IllegalArgumentException e) {
e.printStackTrace();
}
}
private void unregister() {
try {
context.unregisterReceiver(this);
} catch (IllegalArgumentException e) {
e.printStackTrace();
}
}
}
}