Skip to content

Commit

Permalink
Remove deprecated methods and support Signle and Completable
Browse files Browse the repository at this point in the history
  • Loading branch information
yongjhih committed Aug 29, 2017
1 parent e9efae0 commit bf0776e
Show file tree
Hide file tree
Showing 6 changed files with 228 additions and 89 deletions.
47 changes: 31 additions & 16 deletions rxbolts2-applinks/src/main/java/rx/bolts2/AppLinkObservable.java
Expand Up @@ -17,29 +17,44 @@
package rx.bolts2;

import bolts.*;
import io.reactivex.Observable;
import io.reactivex.Single;
import io.reactivex.annotations.CheckReturnValue;
import io.reactivex.annotations.NonNull;

public class AppLinkObservable {
public static Observable<AppLinkNavigation.NavigationResult> navigate(android.content.Context context, java.lang.String destinationUrl) {
return TaskObservable.defer(() -> AppLinkNavigation.navigateInBackground(context, destinationUrl));
@CheckReturnValue
@NonNull
public static Single<AppLinkNavigation.NavigationResult> navigate(android.content.Context context, java.lang.String destinationUrl) {
return RxTask.single(() -> AppLinkNavigation.navigateInBackground(context, destinationUrl));
}
public static Observable<AppLinkNavigation.NavigationResult> navigate(android.content.Context context, java.lang.String destinationUrl, AppLinkResolver resolver) {
return TaskObservable.defer(() -> AppLinkNavigation.navigateInBackground(context, destinationUrl, resolver));
@CheckReturnValue
@NonNull
public static Single<AppLinkNavigation.NavigationResult> navigate(android.content.Context context, java.lang.String destinationUrl, AppLinkResolver resolver) {
return RxTask.single(() -> AppLinkNavigation.navigateInBackground(context, destinationUrl, resolver));
}
public static Observable<AppLinkNavigation.NavigationResult> navigate(android.content.Context context, android.net.Uri destination) {
return TaskObservable.defer(() -> AppLinkNavigation.navigateInBackground(context, destination));
@CheckReturnValue
@NonNull
public static Single<AppLinkNavigation.NavigationResult> navigate(android.content.Context context, android.net.Uri destination) {
return RxTask.single(() -> AppLinkNavigation.navigateInBackground(context, destination));
}
public static Observable<AppLinkNavigation.NavigationResult> navigate(android.content.Context context, android.net.Uri destination, AppLinkResolver resolver) {
return TaskObservable.defer(() -> AppLinkNavigation.navigateInBackground(context, destination, resolver));
@CheckReturnValue
@NonNull
public static Single<AppLinkNavigation.NavigationResult> navigate(android.content.Context context, android.net.Uri destination, AppLinkResolver resolver) {
return RxTask.single(() -> AppLinkNavigation.navigateInBackground(context, destination, resolver));
}
public static Observable<AppLinkNavigation.NavigationResult> navigate(android.content.Context context, java.net.URL destination) {
return TaskObservable.defer(() -> AppLinkNavigation.navigateInBackground(context, destination));
@CheckReturnValue
@NonNull
public static Single<AppLinkNavigation.NavigationResult> navigate(android.content.Context context, java.net.URL destination) {
return RxTask.single(() -> AppLinkNavigation.navigateInBackground(context, destination));
}
public static Observable<AppLinkNavigation.NavigationResult> navigate(android.content.Context context, java.net.URL destination, AppLinkResolver resolver) {
return TaskObservable.defer(() -> AppLinkNavigation.navigateInBackground(context, destination, resolver));
@CheckReturnValue
@NonNull
public static Single<AppLinkNavigation.NavigationResult> navigate(android.content.Context context, java.net.URL destination, AppLinkResolver resolver) {
return RxTask.single(() -> AppLinkNavigation.navigateInBackground(context, destination, resolver));
}

public static Observable<AppLink> getAppLink(AppLinkResolver resolver, android.net.Uri url) {
return TaskObservable.defer(() -> resolver.getAppLinkFromUrlInBackground(url));
@CheckReturnValue
@NonNull
public static Single<AppLink> getAppLink(AppLinkResolver resolver, android.net.Uri url) {
return RxTask.single(() -> resolver.getAppLinkFromUrlInBackground(url));
}
}
2 changes: 1 addition & 1 deletion rxbolts2-tasks/build.gradle
Expand Up @@ -35,7 +35,7 @@ repositories {
}

dependencies {
compile 'io.reactivex.rxjava2:rxjava:2.0.1'
compile 'io.reactivex.rxjava2:rxjava:2.0.8'

compile 'com.parse.bolts:bolts-tasks:1.4.0'

Expand Down
166 changes: 166 additions & 0 deletions rxbolts2-tasks/src/main/java/rx/bolts2/RxTask.java
@@ -0,0 +1,166 @@
/*
* Copyright (C) 2015 8tory, Inc
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package rx.bolts2;

import java.util.concurrent.Callable;

import bolts.Task;
import io.reactivex.Completable;
import io.reactivex.Observable;
import io.reactivex.Single;
import io.reactivex.annotations.CheckReturnValue;
import io.reactivex.annotations.NonNull;

/**
* Bolts2Rx
* Bolts.Task2Observable
* RxBolts
* RxTask
* BoltsObservable
* TaskObservable
*/
public class RxTask {

@CheckReturnValue
@NonNull
public static <R> Task<R> forTask(@NonNull final Observable<R> obs){
return Task.callInBackground(() -> obs.blockingSingle()); // FIXME: null is not acceptable
}

@CheckReturnValue
@NonNull
public static <R> Task<R> forTask(@NonNull final Single<R> single){
return Task.callInBackground(() -> single.blockingGet()); // FIXME: null is not acceptable
}

//@CheckReturnValue
//@NonNull
//public static Task<Void> forTask(@NonNull final Completable completable){
// return Task.callInBackground(() -> Task.forResult(completable.blockingAwait())); // FIXME: null is not acceptable
//}

@CheckReturnValue
@NonNull
public static <R> Observable<R> observable(@NonNull final Task<R> task) {
return Observable.create(emitter -> {
task.continueWith(t -> {
if (emitter.isDisposed()) return null;

if (t.isCancelled()) {
// NOTICE: doOnUnsubscribe(() -> Observable.just(query) in outside
emitter.onComplete();
} else if (t.isFaulted()) {
Throwable error = t.getError();
emitter.onError(error);
} else {
R r = t.getResult();
if (r != null) emitter.onNext(r);
emitter.onComplete();
}
return null;
});
});
// TODO .doOnUnsubscribe(() -> task.setCancelled());
}

@NonNull
public static <R> Completable completable(@NonNull final Task<R> task) {
return Completable.create(emitter -> {
task.continueWith(t -> {
if (emitter.isDisposed()) return null;

if (t.isCancelled()) {
// NOTICE: doOnUnsubscribe(() -> Observable.just(query) in outside
emitter.onComplete();
} else if (t.isFaulted()) {
Throwable error = t.getError();
emitter.onError(error);
} else {
t.getResult();
emitter.onComplete();
}
return null;
});
});
// TODO .doOnUnsubscribe(() -> task.setCancelled());
}

/**
* Please don't put the Task&lt;Void&gt; as parameter
* @param task
* @param <R>
* @return
*/
@CheckReturnValue
@NonNull
public static <R> Single<R> single(@NonNull final Task<R> task) {
return Single.create(emitter -> {
task.continueWith(t -> {
if (emitter.isDisposed()) return null;

if (t.isCancelled()) {
emitter.onError(new RuntimeException("Cancelled task"));
} else if (t.isFaulted()) {
Throwable error = t.getError();
emitter.onError(error);
} else {
R r = t.getResult();
emitter.onSuccess(r);
}
return null;
});
});
// TODO .doOnUnsubscribe(() -> task.setCancelled());
}

/**
* Please use observable(Callable) instead of this for defer unless you know what are you doing
* Please don't put the Task&lt;Void&gt; as parameter
* @param task
* @param <R>
* @return
*/
@CheckReturnValue
@NonNull
public static <R> Observable<R> observable(@NonNull final Callable<Task<R>> task) {
return Single.fromCallable(task).flatMapObservable(RxTask::observable);
}

/**
* Please use single(Callable) instead of this for defer unless you know what are you doing
* Please don't put the Task&lt;Void&gt; as parameter
* @param task
* @param <R>
* @return
*/
@CheckReturnValue
@NonNull
public static <R> Single<R> single(@NonNull final Callable<Task<R>> task) {
return Single.fromCallable(task).flatMap(RxTask::single);
}

/**
* Please use single(Callable) instead of this for defer unless you know what are you doing
* @param task
* @param <R>
* @return
*/
@NonNull
public static <R> Completable completable(@NonNull final Callable<Task<R>> task) {
return Single.fromCallable(task).flatMapCompletable(RxTask::completable);
}
}
67 changes: 0 additions & 67 deletions rxbolts2-tasks/src/main/java/rx/bolts2/TaskObservable.java

This file was deleted.

35 changes: 30 additions & 5 deletions rxbolts2-tasks/src/test/java/rx/bolts2/TaskObservableTests.java
Expand Up @@ -29,21 +29,46 @@
public class TaskObservableTests {

@Test
public void just() {
TaskObservable.just(Task.<String>forResult(null))
public void single() {
RxTask.single(Task.<String>forResult(null))
.test()
.assertError(NullPointerException.class);

TaskObservable.just(Task.forResult("hello"))
RxTask.single(Task.forResult("hello"))
.test()
.assertValue(check(v -> assertThat(v).isEqualTo("hello")))
.assertNoErrors()
.assertComplete();
}

@Test
public void forTask() {
assertThat(TaskObservable.forTask(Observable.empty()).getResult()).isNull();
public void completable() {
RxTask.completable(Task.<String>forResult(null))
.test()
.assertError(NullPointerException.class);

RxTask.completable(Task.forResult("hello"))
.test()
.assertValue(check(v -> assertThat(v).isEqualTo("hello")))
.assertNoErrors()
.assertComplete();
}
@Test
public void observable() {
RxTask.observable(Task.<String>forResult(null))
.test()
.assertError(NullPointerException.class);

RxTask.observable(Task.forResult("hello"))
.test()
.assertValue(check(v -> assertThat(v).isEqualTo("hello")))
.assertNoErrors()
.assertComplete();
}

@Test
public void forTaskObservable() {
assertThat(RxTask.forTask(Observable.empty()).getResult()).isNull();
}

public static <T> Predicate<T> check(Consumer<T> consumer) {
Expand Down
Empty file added sonar-project.properties
Empty file.

0 comments on commit bf0776e

Please sign in to comment.