package co.smartreceipts.android.sync.network;
import android.support.annotation.NonNull;
import com.google.common.base.Preconditions;
import java.util.concurrent.CopyOnWriteArraySet;
import io.reactivex.Observable;
import io.reactivex.subjects.PublishSubject;
class NetworkStateChangeListenerTracker {
private final PublishSubject<Boolean> mSubject = PublishSubject.create();
private final CopyOnWriteArraySet<NetworkStateChangeListener> mListeners = new CopyOnWriteArraySet<>();
@NonNull
public final Observable<Boolean> getNetworkStateChangeObservable() {
return mSubject;
}
public final void registerListener(@NonNull NetworkStateChangeListener listener) {
mListeners.add(Preconditions.checkNotNull(listener));
}
public final void unregisterListener(@NonNull NetworkStateChangeListener listener) {
mListeners.remove(Preconditions.checkNotNull(listener));
}
public void clear() {
mListeners.clear();
}
public final void notifyNetworkConnectivityGained() {
mSubject.onNext(true);
for (final NetworkStateChangeListener listener : mListeners) {
listener.onNetworkConnectivityGained();
}
}
public final void notifyNetworkConnectivityLost() {
mSubject.onNext(false);
for (final NetworkStateChangeListener listener : mListeners) {
listener.onNetworkConnectivityLost();
}
}
}