Created
October 10, 2017 10:39
-
-
Save mgdiez/14e0ce4c5892fd6a8f4cd0e21ad43d54 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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