1package com.bumptech.glide.manager; 2 3import android.content.BroadcastReceiver; 4import android.content.Context; 5import android.content.Intent; 6import android.content.IntentFilter; 7import android.net.ConnectivityManager; 8import android.net.NetworkInfo; 9 10class DefaultConnectivityMonitor implements ConnectivityMonitor { 11 private final Context context; 12 private final ConnectivityListener listener; 13 14 private boolean isConnected; 15 private boolean isRegistered; 16 17 private final BroadcastReceiver connectivityReceiver = new BroadcastReceiver() { 18 @Override 19 public void onReceive(Context context, Intent intent) { 20 boolean wasConnected = isConnected; 21 isConnected = isConnected(context); 22 if (wasConnected != isConnected) { 23 listener.onConnectivityChanged(isConnected); 24 } 25 } 26 }; 27 28 public DefaultConnectivityMonitor(Context context, ConnectivityListener listener) { 29 this.context = context.getApplicationContext(); 30 this.listener = listener; 31 } 32 33 @Override 34 public void register() { 35 if (isRegistered) { 36 return; 37 } 38 39 isConnected = isConnected(context); 40 context.registerReceiver(connectivityReceiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION)); 41 isRegistered = true; 42 } 43 44 @Override 45 public void unregister() { 46 if (!isRegistered) { 47 return; 48 } 49 50 context.unregisterReceiver(connectivityReceiver); 51 isRegistered = false; 52 } 53 54 private boolean isConnected(Context context) { 55 ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 56 NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo(); 57 return networkInfo != null && networkInfo.isConnected(); 58 } 59} 60