83 lines
2.6 KiB
Java
83 lines
2.6 KiB
Java
package app.fedilab.android.broadcastreceiver;
|
|
/* Copyright 2021 Thomas Schneider
|
|
*
|
|
* This file is a part of Fedilab
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify it under the terms of the
|
|
* GNU General Public License as published by the Free Software Foundation; either version 3 of the
|
|
* License, or (at your option) any later version.
|
|
*
|
|
* Fedilab is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
|
|
* the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
|
|
* Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License along with Fedilab; if not,
|
|
* see <http://www.gnu.org/licenses>. */
|
|
|
|
import android.content.BroadcastReceiver;
|
|
import android.content.Context;
|
|
import android.content.Intent;
|
|
import android.net.ConnectivityManager;
|
|
import android.net.NetworkInfo;
|
|
|
|
import java.util.HashSet;
|
|
import java.util.Set;
|
|
|
|
|
|
/**
|
|
* Original work from https://stackoverflow.com/a/25873554
|
|
*/
|
|
public class NetworkStateReceiver extends BroadcastReceiver {
|
|
|
|
protected Set<NetworkStateReceiverListener> listeners;
|
|
protected Boolean connected;
|
|
|
|
public NetworkStateReceiver() {
|
|
listeners = new HashSet<>();
|
|
connected = null;
|
|
}
|
|
|
|
@Override
|
|
public void onReceive(Context context, Intent intent) {
|
|
if (intent == null || intent.getExtras() == null)
|
|
return;
|
|
ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
|
|
NetworkInfo ni = manager.getActiveNetworkInfo();
|
|
if (ni != null && ni.getState() == NetworkInfo.State.CONNECTED) {
|
|
connected = true;
|
|
} else if (intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, Boolean.FALSE)) {
|
|
connected = false;
|
|
}
|
|
notifyStateToAll();
|
|
}
|
|
|
|
|
|
private void notifyStateToAll() {
|
|
for (NetworkStateReceiverListener listener : listeners)
|
|
notifyState(listener);
|
|
}
|
|
|
|
private void notifyState(NetworkStateReceiverListener listener) {
|
|
if (connected == null || listener == null)
|
|
return;
|
|
if (connected)
|
|
listener.networkAvailable();
|
|
else
|
|
listener.networkUnavailable();
|
|
}
|
|
|
|
public void addListener(NetworkStateReceiverListener l) {
|
|
listeners.add(l);
|
|
notifyState(l);
|
|
}
|
|
|
|
public void removeListener(NetworkStateReceiverListener l) {
|
|
listeners.remove(l);
|
|
}
|
|
|
|
public interface NetworkStateReceiverListener {
|
|
void networkAvailable();
|
|
|
|
void networkUnavailable();
|
|
}
|
|
} |