From 7a31edff53d2dbebda81f8a078b6ed31ea7ab330 Mon Sep 17 00:00:00 2001 From: Alexander Braunreuther Date: Thu, 19 May 2016 18:19:32 +0200 Subject: [PATCH 1/2] added latest rxJava as Dependency, added asObservable() and asCompletable() to the Task class which execute the task and converts the result to an observable --- bolts-tasks/build.gradle | 2 ++ bolts-tasks/src/main/java/bolts/Task.java | 43 +++++++++++++++++++++++ 2 files changed, 45 insertions(+) diff --git a/bolts-tasks/build.gradle b/bolts-tasks/build.gradle index 5731294..f40a7d5 100644 --- a/bolts-tasks/build.gradle +++ b/bolts-tasks/build.gradle @@ -16,6 +16,8 @@ sourceSets { dependencies { provided 'com.google.android:android:4.1.1.4' + compile 'io.reactivex:rxjava:1.1.5' + testCompile 'junit:junit:4.12' } diff --git a/bolts-tasks/src/main/java/bolts/Task.java b/bolts-tasks/src/main/java/bolts/Task.java index d6bf6a2..b294c3b 100644 --- a/bolts-tasks/src/main/java/bolts/Task.java +++ b/bolts-tasks/src/main/java/bolts/Task.java @@ -23,6 +23,11 @@ import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicInteger; +import rx.Completable; +import rx.Observable; +import rx.Subscriber; +import rx.functions.Func0; + /** * Represents the result of an asynchronous operation. * @@ -1015,6 +1020,44 @@ private void runContinuations() { } } + private Observable asObservable(boolean isNullable) { + return Observable.defer(new Func0>() { + @Override + public Observable call() { + return Observable.create(new Observable.OnSubscribe() { + @Override + public void call(Subscriber subscriber) { + continueWith(new Continuation() { + @Override + public Object then(Task task) throws Exception { + if (task.isCancelled()) { +// NOTICE: doOnUnsubscribe(() -> Observable.just(query) in outside + subscriber.unsubscribe(); //sub.onCompleted();? + } else if (task.isFaulted()) { + Throwable error = task.getError(); + subscriber.onError(error); + } else { + TResult result = task.getResult(); + if (isNullable || result != null) subscriber.onNext(result); + subscriber.onCompleted(); + } + return null; + } + }); + } + }); + } + }); + } + + public Observable asObservable() { + return asObservable(false); + } + + public Completable asCompletable() { + return asObservable(true).toCompletable(); + } + /** * @deprecated Please use {@link bolts.TaskCompletionSource} instead. */ From 5c8eb8896ecfba4bb94fb3cf1cc93b762200181b Mon Sep 17 00:00:00 2001 From: Alexander Braunreuther Date: Thu, 19 May 2016 18:24:55 +0200 Subject: [PATCH 2/2] added docs --- bolts-tasks/src/main/java/bolts/Task.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/bolts-tasks/src/main/java/bolts/Task.java b/bolts-tasks/src/main/java/bolts/Task.java index b294c3b..2105a99 100644 --- a/bolts-tasks/src/main/java/bolts/Task.java +++ b/bolts-tasks/src/main/java/bolts/Task.java @@ -1020,6 +1020,12 @@ private void runContinuations() { } } + /** + * creates an Rx Observable or Rx Completable from a Parse Task + * + * @param isNullable if the task is nullable this will get used to generate an {@link Completable} + * @return {@link Observable} + */ private Observable asObservable(boolean isNullable) { return Observable.defer(new Func0>() { @Override @@ -1050,10 +1056,20 @@ public Object then(Task task) throws Exception { }); } + /** + * creates an Rx Observable from a Parse Task + * + * @return {@link Observable} + */ public Observable asObservable() { return asObservable(false); } + /** + * creates an Rx Completable from a Parse Task + * + * @return {@link Completable} + */ public Completable asCompletable() { return asObservable(true).toCompletable(); }