package app.fedilab.android.mastodon.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 . */ 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 stackoverflow */ public class NetworkStateReceiver extends BroadcastReceiver { protected Set 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(); } }