Skip to content

Instantly share code, notes, and snippets.

@mgdiez
Created October 10, 2017 10:39
Show Gist options
  • Save mgdiez/14e0ce4c5892fd6a8f4cd0e21ad43d54 to your computer and use it in GitHub Desktop.
Save mgdiez/14e0ce4c5892fd6a8f4cd0e21ad43d54 to your computer and use it in GitHub Desktop.
public class NetworkConnectivity {
@VisibleForTesting public static final String SYSTEM_SERVICE = Context.CONNECTIVITY_SERVICE;
@VisibleForTesting public Subscription networkSubscription = Subscriptions.empty();
public void addConnectivityCallback(Context context, ConnectivityCallback callback) {
networkSubscription =
createConnectivityObserver(context).observeOn(new MainThread().getScheduler())
.subscribe(callback);
}
private Observable<Void> createConnectivityObserver(Context context) {
ConnectivityManager connectivityManager = getConnectivityManager(context);
return Observable.create(emitter -> {
ConnectivityManager.NetworkCallback networkCallback =
new ConnectivityManager.NetworkCallback() {
@Override public void onAvailable(Network network) {
emitter.onCompleted();
}
};
connectivityManager.registerNetworkCallback(new NetworkRequest.Builder().build(),
networkCallback);
emitter.setCancellation(() -> connectivityManager.unregisterNetworkCallback(networkCallback));
}, Emitter.BackpressureMode.BUFFER);
}
public void removeConnectivityCallback() {
if (!networkSubscription.isUnsubscribed()) {
networkSubscription.unsubscribe();
}
}
private ConnectivityManager getConnectivityManager(Context context) {
return (ConnectivityManager) context.getSystemService(SYSTEM_SERVICE);
}
public abstract static class ConnectivityCallback extends Subscriber<Void> {
public abstract void onConnected();
@Override public void onCompleted() {
unsubscribe();
onConnected();
}
@Override public void onError(Throwable e) {
unsubscribe();
}
@Override public void onNext(Void aVoid) {
// Empty events
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment