Skip to content
This repository has been archived by the owner on Aug 8, 2023. It is now read-only.

Commit

Permalink
[android] connectivity receiver - remove weak references and context …
Browse files Browse the repository at this point in the history
…reference
  • Loading branch information
ivovandongen committed Sep 9, 2016
1 parent f6b4606 commit 7a1c9f9
Showing 1 changed file with 9 additions and 20 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ public class ConnectivityReceiver extends BroadcastReceiver {
public static synchronized ConnectivityReceiver instance(Context context) {
if (INSTANCE == null) {
//Register new instance
INSTANCE = new ConnectivityReceiver(context);
INSTANCE = new ConnectivityReceiver();
context.registerReceiver(INSTANCE, new IntentFilter("android.net.conn.CONNECTIVITY_CHANGE"));

//Add default listeners
Expand All @@ -33,39 +33,28 @@ public static synchronized ConnectivityReceiver instance(Context context) {
return INSTANCE;
}

private final Context context;
private List<WeakReference<ConnectivityListener>> listeners = new CopyOnWriteArrayList<>();
private List<ConnectivityListener> listeners = new CopyOnWriteArrayList<>();


private ConnectivityReceiver(Context context) {
this.context = context;
private ConnectivityReceiver() {
}

@Override
public void onReceive(Context context, Intent intent) {
boolean connected = isConnected();
boolean connected = isConnected(context);
Log.v(TAG, "Connected: " + connected);

//Loop over listeners, collecting stale references as we go
List<WeakReference<ConnectivityListener>> removals = new ArrayList<>();
for (WeakReference<ConnectivityListener> ref : listeners) {
ConnectivityListener listener = ref.get();
if (listener != null) {
listener.onNetworkStateChanged(connected);
} else {
removals.add(ref);
}
//Loop over listeners
for (ConnectivityListener listener : listeners) {
listener.onNetworkStateChanged(connected);
}

//Cleanup
listeners.removeAll(removals);
}

public void addListener(ConnectivityListener listener) {
listeners.add(new WeakReference<>(listener));
listeners.add(listener);
}

public boolean isConnected() {
public boolean isConnected(Context context) {
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
return (activeNetwork != null && activeNetwork.isConnected());
Expand Down

0 comments on commit 7a1c9f9

Please sign in to comment.