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 private void register() { 34 if (isRegistered) { 35 return; 36 } 37 38 isConnected = isConnected(context); 39 context.registerReceiver(connectivityReceiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION)); 40 isRegistered = true; 41 } 42 43 private void unregister() { 44 if (!isRegistered) { 45 return; 46 } 47 48 context.unregisterReceiver(connectivityReceiver); 49 isRegistered = false; 50 } 51 52 private boolean isConnected(Context context) { 53 ConnectivityManager connectivityManager = 54 (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 55 NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo(); 56 return networkInfo != null && networkInfo.isConnected(); 57 } 58 59 @Override 60 public void onStart() { 61 register(); 62 } 63 64 @Override 65 public void onStop() { 66 unregister(); 67 } 68 69 @Override 70 public void onDestroy() { 71 // Do nothing. 72 } 73} 74