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