package co.smartreceipts.android.ocr.push; import android.support.annotation.NonNull; import com.google.common.base.Preconditions; import com.google.firebase.messaging.RemoteMessage; import java.util.concurrent.TimeUnit; import co.smartreceipts.android.push.PushMessageReceiver; import io.reactivex.Observable; import io.reactivex.Scheduler; import io.reactivex.schedulers.Schedulers; import io.reactivex.subjects.PublishSubject; import io.reactivex.subjects.Subject; public class OcrPushMessageReceiver implements PushMessageReceiver { private static final int TIMEOUT_SECONDS = 13; private final Subject<Object> pushResultSubject = PublishSubject.create(); private final Scheduler subscribeOnScheduler; public OcrPushMessageReceiver() { this(Schedulers.io()); } public OcrPushMessageReceiver(@NonNull Scheduler subscribeOnScheduler) { this.subscribeOnScheduler = Preconditions.checkNotNull(subscribeOnScheduler); } @Override public void onMessageReceived(@NonNull RemoteMessage remoteMessage) { Observable.just(remoteMessage) .subscribeOn(subscribeOnScheduler) .map(message -> new Object()) .subscribe(next -> { pushResultSubject.onNext(next); pushResultSubject.onComplete(); }); } public Observable<Object> getOcrPushResponse() { return pushResultSubject .timeout(TIMEOUT_SECONDS, TimeUnit.SECONDS); } }