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