@Override public CompletableSource apply(Completable c) throws Exception { return c.observeOn(Schedulers.single()); } });
@Test(expected = NullPointerException.class) public void observeOnNull() { normal.completable.observeOn(null); }
private void saveImmediate() { if (playlistManager == null || itemListAdapter == null) return; // List must be loaded and modified in order to save if (isLoadingComplete == null || isModified == null || !isLoadingComplete.get() || !isModified.get()) { Log.w(TAG, "Attempting to save playlist when local playlist " + "is not loaded or not modified: playlist id=[" + playlistId + "]"); return; } final List<LocalItem> items = itemListAdapter.getItemsList(); List<Long> streamIds = new ArrayList<>(items.size()); for (final LocalItem item : items) { if (item instanceof PlaylistStreamEntry) { streamIds.add(((PlaylistStreamEntry) item).streamId); } } Log.d(TAG, "Updating playlist id=[" + playlistId + "] with [" + streamIds.size() + "] items"); final Disposable disposable = playlistManager.updateJoin(playlistId, streamIds) .observeOn(AndroidSchedulers.mainThread()) .subscribe( () -> { if (isModified != null) isModified.set(false); }, this::onError ); disposables.add(disposable); }
private void doSomeWork() { Completable completable = Completable.timer(1000, TimeUnit.MILLISECONDS); completable .subscribeOn(Schedulers.io()) // Be notified on the main thread .observeOn(AndroidSchedulers.mainThread()) .subscribe(getCompletableObserver()); }
public void downloadFile(View view) { disposables.add(getCompletable() .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribeWith(getDisposableObserver())); } }
@Test(timeout = 5000) public void observeOnNormal() throws InterruptedException { final AtomicReference<String> name = new AtomicReference<String>(); final AtomicReference<Throwable> err = new AtomicReference<Throwable>(); final CountDownLatch cdl = new CountDownLatch(1); Completable c = normal.completable.observeOn(Schedulers.computation()); c.subscribe(new CompletableObserver() { @Override public void onSubscribe(Disposable d) { } @Override public void onComplete() { name.set(Thread.currentThread().getName()); cdl.countDown(); } @Override public void onError(Throwable e) { err.set(e); cdl.countDown(); } }); cdl.await(); Assert.assertNull(err.get()); Assert.assertTrue(name.get().startsWith("RxComputation")); }
@Test(timeout = 5000) public void observeOnError() throws InterruptedException { final AtomicReference<String> name = new AtomicReference<String>(); final AtomicReference<Throwable> err = new AtomicReference<Throwable>(); final CountDownLatch cdl = new CountDownLatch(1); Completable c = error.completable.observeOn(Schedulers.computation()); c.subscribe(new CompletableObserver() { @Override public void onSubscribe(Disposable d) { } @Override public void onComplete() { name.set(Thread.currentThread().getName()); cdl.countDown(); } @Override public void onError(Throwable e) { name.set(Thread.currentThread().getName()); err.set(e); cdl.countDown(); } }); cdl.await(); Assert.assertTrue(err.get() instanceof TestException); Assert.assertTrue(name.get().startsWith("RxComputation")); }
@Override protected void doSomething() { mRxOperatorsText.append("Completable\n"); Log.e(TAG, "Completable\n"); Completable.timer(1, TimeUnit.SECONDS) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new CompletableObserver() { @Override public void onSubscribe(@NonNull Disposable d) { mRxOperatorsText.append("onSubscribe : d :" + d.isDisposed() + "\n"); Log.e(TAG, "onSubscribe : d :" + d.isDisposed() + "\n"); } @Override public void onComplete() { mRxOperatorsText.append("onComplete\n"); Log.e(TAG, "onComplete\n"); } @Override public void onError(@NonNull Throwable e) { mRxOperatorsText.append("onError :" + e.getMessage() + "\n"); Log.e(TAG, "onError :" + e.getMessage() + "\n"); } }); } }
private void updateSubscription(final ChannelInfo info) { if (DEBUG) Log.d(TAG, "updateSubscription() called with: info = [" + info + "]"); final Action onComplete = () -> { if (DEBUG) Log.d(TAG, "Updated subscription: " + info.getUrl()); }; final Consumer<Throwable> onError = (@NonNull Throwable throwable) -> onUnrecoverableError(throwable, UserAction.SUBSCRIPTION, NewPipe.getNameOfService(info.getServiceId()), "Updating Subscription for " + info.getUrl(), R.string.subscription_update_failed); disposables.add(subscriptionService.updateChannelInfo(info) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(onComplete, onError)); }
@Test public void dispose() { TestHelper.checkDisposed(Completable.complete().observeOn(Schedulers.single())); }
.prepare() .asRxCompletable() .observeOn(mainThread()) // The default scheduler is Schedulers.io(), all rx operations in StorIO already subscribed on this scheduler, you just need to set observeOn() .subscribe(new Action() { @Override
Completable.concat(Arrays.asList(Completable.complete() .subscribeOn(Schedulers.io()) .observeOn(Schedulers.io()), c0)
.prepare() .asRxCompletable() .observeOn(mainThread()) // The default scheduler is Schedulers.io(), all rx operators in StorIO already subscribed on this scheduler, you just need to set observeOn() .subscribe( new Action() {
Completable.complete() .subscribeOn(Schedulers.io()) .observeOn(Schedulers.io()) .andThen(Completable.fromAction(new Action() { @Override
@Test public void noWinnerCompleteDispose() throws Exception { for (int i = 0; i < TestHelper.RACE_LONG_LOOPS; i++) { final AtomicBoolean interrupted = new AtomicBoolean(); final CountDownLatch cdl = new CountDownLatch(1); Completable.ambArray( Completable.complete() .subscribeOn(Schedulers.single()) .observeOn(Schedulers.computation()), Completable.never() ) .subscribe(new Action() { @Override public void run() throws Exception { interrupted.set(Thread.currentThread().isInterrupted()); cdl.countDown(); } }); assertTrue(cdl.await(500, TimeUnit.SECONDS)); assertFalse("Interrupted!", interrupted.get()); } } }
@Test public void noWinnerErrorDispose() throws Exception { final TestException ex = new TestException(); for (int i = 0; i < TestHelper.RACE_LONG_LOOPS; i++) { final AtomicBoolean interrupted = new AtomicBoolean(); final CountDownLatch cdl = new CountDownLatch(1); Completable.ambArray( Completable.error(ex) .subscribeOn(Schedulers.single()) .observeOn(Schedulers.computation()), Completable.never() ) .subscribe(Functions.EMPTY_ACTION, new Consumer<Throwable>() { @Override public void accept(Throwable e) throws Exception { interrupted.set(Thread.currentThread().isInterrupted()); cdl.countDown(); } }); assertTrue(cdl.await(500, TimeUnit.SECONDS)); assertFalse("Interrupted!", interrupted.get()); } }
.getDownloadCompletable() .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new CompletableObserver() { @Override
.getDownloadCompletable() .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new CompletableObserver() { @Override
private Disposable loadImage(final Uri uri) { mSourceUri = uri; return new RxPermissions(getActivity()).request(Manifest.permission.WRITE_EXTERNAL_STORAGE) .filter(new Predicate<Boolean>() { @Override public boolean test(@io.reactivex.annotations.NonNull Boolean granted) throws Exception { return granted; } }) .flatMapCompletable(new Function<Boolean, CompletableSource>() { @Override public CompletableSource apply(@io.reactivex.annotations.NonNull Boolean aBoolean) throws Exception { return mCropView.load(uri) .useThumbnail(true) .initialFrameRect(mFrameRect) .executeAsCompletable(); } }) .subscribeOn(Schedulers.newThread()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Action() { @Override public void run() throws Exception { } }, new Consumer<Throwable>() { @Override public void accept(@NonNull Throwable throwable) throws Exception { } }); }
public void loadData (final boolean force) { final ArrayList<User> originalUserList = new ArrayList<>(); originalUserList.addAll(sourceUsers); Disposable d = reloadUsers().observeOn(AndroidSchedulers.mainThread()).subscribe(() -> { if (!originalUserList.equals(sourceUsers) || force) { adapter.setUsers(UserListItemConverter.toUserItemList(sourceUsers), true); Timber.v("Update Contact List"); } setupListClickMode(); }, throwable -> ChatSDK.logError(throwable)); }