You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@taverna.apache.org by sa...@apache.org on 2018/02/20 05:11:13 UTC

[1/6] incubator-taverna-mobile git commit: Adding RxJava 2.0 dependencies

Repository: incubator-taverna-mobile
Updated Branches:
  refs/heads/master eaa93fdd1 -> a716e2ffc


Adding RxJava 2.0 dependencies


Project: http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/commit/573cc4a4
Tree: http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/tree/573cc4a4
Diff: http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/diff/573cc4a4

Branch: refs/heads/master
Commit: 573cc4a4721bb09797bced075f3b60c9a41111ec
Parents: 004abcd
Author: Hitesh Gautam <ga...@gmail.com>
Authored: Fri Feb 16 01:22:07 2018 +0530
Committer: Hitesh Gautam <ga...@gmail.com>
Committed: Fri Feb 16 01:22:07 2018 +0530

----------------------------------------------------------------------
 app/build.gradle | 3 +++
 1 file changed, 3 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/573cc4a4/app/build.gradle
----------------------------------------------------------------------
diff --git a/app/build.gradle b/app/build.gradle
index 938b8dc..ef7a8bf 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -88,6 +88,9 @@ dependencies {
 // explicitly depend on RxJava's latest version for bug fixes and new features.
     compile "io.reactivex:rxjava:1.1.5"
 
+    compile "io.reactivex.rxjava2:rxjava:2.1.9"
+    compile "io.reactivex.rxjava2:rxandroid:2.0.2"
+
     compile("org.simpleframework:simple-xml:2.7.+") {
         exclude module: 'stax'
         exclude module: 'stax-api'


[5/6] incubator-taverna-mobile git commit: fixed: review changes

Posted by sa...@apache.org.
fixed: review changes


Project: http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/commit/55a8d965
Tree: http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/tree/55a8d965
Diff: http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/diff/55a8d965

Branch: refs/heads/master
Commit: 55a8d965fb4512df87cde2b3ec712a8809b773f6
Parents: 1e8f57b
Author: Hitesh Gautam <ga...@gmail.com>
Authored: Tue Feb 20 10:08:41 2018 +0530
Committer: Hitesh Gautam <ga...@gmail.com>
Committed: Tue Feb 20 10:08:41 2018 +0530

----------------------------------------------------------------------
 .../apache/taverna/mobile/ui/workflow/WorkflowPresenter.java | 8 ++++----
 .../mobile/ui/workflowdetail/WorkflowDetailPresenter.java    | 4 ++--
 2 files changed, 6 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/55a8d965/app/src/main/java/org/apache/taverna/mobile/ui/workflow/WorkflowPresenter.java
----------------------------------------------------------------------
diff --git a/app/src/main/java/org/apache/taverna/mobile/ui/workflow/WorkflowPresenter.java b/app/src/main/java/org/apache/taverna/mobile/ui/workflow/WorkflowPresenter.java
index f73c83f..0856f63 100644
--- a/app/src/main/java/org/apache/taverna/mobile/ui/workflow/WorkflowPresenter.java
+++ b/app/src/main/java/org/apache/taverna/mobile/ui/workflow/WorkflowPresenter.java
@@ -98,10 +98,10 @@ public class WorkflowPresenter extends BasePresenter<WorkflowMvpView> {
                 .subscribeOn(Schedulers.io())
                 .subscribeWith(new DisposableObserver<String>() {
                     @Override
-                    public void onNext(String s) {
-                        getMvpView().performSearch(s);
-                        if (!TextUtils.isEmpty(s)) {
-                            searchWorkflow(1, s);
+                    public void onNext(String searchText) {
+                        getMvpView().performSearch(searchText);
+                        if (!TextUtils.isEmpty(searchText)) {
+                            searchWorkflow(1, searchText);
                         }
                     }
 

http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/55a8d965/app/src/main/java/org/apache/taverna/mobile/ui/workflowdetail/WorkflowDetailPresenter.java
----------------------------------------------------------------------
diff --git a/app/src/main/java/org/apache/taverna/mobile/ui/workflowdetail/WorkflowDetailPresenter.java b/app/src/main/java/org/apache/taverna/mobile/ui/workflowdetail/WorkflowDetailPresenter.java
index 2af95af..a19bec1 100644
--- a/app/src/main/java/org/apache/taverna/mobile/ui/workflowdetail/WorkflowDetailPresenter.java
+++ b/app/src/main/java/org/apache/taverna/mobile/ui/workflowdetail/WorkflowDetailPresenter.java
@@ -168,8 +168,8 @@ public class WorkflowDetailPresenter extends BasePresenter<WorkflowDetailMvpView
                 .subscribeOn(Schedulers.io())
                 .subscribeWith(new DisposableObserver<Boolean>() {
                     @Override
-                    public void onNext(Boolean b) {
-                        getMvpView().getFavouriteIcon(b);
+                    public void onNext(Boolean favoriteStatus) {
+                        getMvpView().getFavouriteIcon(favoriteStatus);
                     }
 
                     @Override


[2/6] incubator-taverna-mobile git commit: Feat: Migrating to RxJava2

Posted by sa...@apache.org.
Feat: Migrating to RxJava2


Project: http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/commit/3e921aca
Tree: http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/tree/3e921aca
Diff: http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/diff/3e921aca

Branch: refs/heads/master
Commit: 3e921aca92dee1f69adcd82d43484bf6255ddd7a
Parents: 573cc4a
Author: Hitesh Gautam <ga...@gmail.com>
Authored: Sat Feb 17 19:08:26 2018 +0530
Committer: Hitesh Gautam <ga...@gmail.com>
Committed: Mon Feb 19 14:53:27 2018 +0530

----------------------------------------------------------------------
 app/build.gradle                                |  18 +--
 .../apache/taverna/mobile/data/DataManager.java |  24 ++--
 .../taverna/mobile/data/local/DBHelper.java     |  79 +++++---------
 .../mobile/data/local/PreferencesHelper.java    |  18 ++-
 .../mobile/data/remote/BaseApiManager.java      |   6 +-
 .../data/remote/TavernaPlayerService.java       |   3 +-
 .../mobile/data/remote/TavernaService.java      |   2 +-
 .../ui/anouncements/AnnouncementPresenter.java  |  59 +++++-----
 .../FavouriteWorkflowsPresenter.java            |  48 ++++----
 .../FavouriteWorkflowDetailPresenter.java       | 109 ++++++++-----------
 .../taverna/mobile/ui/login/LoginPresenter.java |  38 +++----
 .../ui/myworkflows/MyWorkflowPresenter.java     |  58 +++++-----
 .../ui/playerlogin/PlayerLoginPresenter.java    |  37 +++----
 .../mobile/ui/workflow/WorkflowPresenter.java   |  89 +++++++--------
 .../workflowdetail/WorkflowDetailPresenter.java | 109 ++++++++-----------
 .../ui/workflowrun/WorkflowRunPresenter.java    |  60 +++++-----
 .../apache/taverna/mobile/utils/RxSearch.java   |   8 +-
 .../mobile/AnnouncementPresenterTest.java       |   2 +-
 .../mobile/FavouriteWorkflowsPresenterTest.java |   2 +-
 .../mobile/utils/RxSchedulersOverrideRule.java  |  67 ++++++------
 20 files changed, 387 insertions(+), 449 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/3e921aca/app/build.gradle
----------------------------------------------------------------------
diff --git a/app/build.gradle b/app/build.gradle
index ef7a8bf..699dccd 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -43,10 +43,15 @@ android {
             debuggable true
         }
     }
+
     testOptions {
         unitTests.returnDefaultValues = true
     }
 
+    packagingOptions {
+        exclude 'META-INF/rxjava.properties'
+    }
+
     buildToolsVersion rootProject.ext.buildToolsVersion
 }
 repositories {
@@ -61,6 +66,7 @@ dependencies {
     compile "com.android.support:cardview-v7:$rootProject.supportLibraryVersion"
     compile "com.android.support:recyclerview-v7:$rootProject.supportLibraryVersion"
     compile "com.android.support:support-v4:$rootProject.supportLibraryVersion"
+    compile "com.android.support:support-annotations:$rootProject.supportLibraryVersion"
 
     compile "com.android.support:design:$rootProject.supportLibraryVersion"
     compile "com.android.support:preference-v7:$rootProject.supportLibraryVersion"
@@ -68,7 +74,7 @@ dependencies {
 
     //Dependencies for retofit and okhhtp3
     compile "com.squareup.retrofit2:retrofit:$rootProject.retrofitVersionLatest"
-    compile "com.squareup.retrofit2:adapter-rxjava:$rootProject.retrofitVersionLatest"
+    compile "com.squareup.retrofit2:adapter-rxjava2:$rootProject.retrofitVersionLatest"
     compile "com.squareup.okhttp3:logging-interceptor:$rootProject.okHttp3Version"
     compile "com.squareup.retrofit2:converter-gson:$rootProject.retrofitVersionLatest"
 
@@ -82,14 +88,8 @@ dependencies {
     compile "com.jakewharton:butterknife:$rootProject.butterKnifeVersion"
     annotationProcessor "com.jakewharton:butterknife-compiler:$rootProject.butterKnifeVersion"
 
-
-    compile "io.reactivex:rxandroid:1.2.0"
-// Because RxAndroid releases are few and far between, it is recommended you also
-// explicitly depend on RxJava's latest version for bug fixes and new features.
-    compile "io.reactivex:rxjava:1.1.5"
-
-    compile "io.reactivex.rxjava2:rxjava:2.1.9"
-    compile "io.reactivex.rxjava2:rxandroid:2.0.2"
+    compile "io.reactivex.rxjava2:rxjava:2.0.1"
+    compile "io.reactivex.rxjava2:rxandroid:2.0.1"
 
     compile("org.simpleframework:simple-xml:2.7.+") {
         exclude module: 'stax'

http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/3e921aca/app/src/main/java/org/apache/taverna/mobile/data/DataManager.java
----------------------------------------------------------------------
diff --git a/app/src/main/java/org/apache/taverna/mobile/data/DataManager.java b/app/src/main/java/org/apache/taverna/mobile/data/DataManager.java
index c872362..b28e06d 100644
--- a/app/src/main/java/org/apache/taverna/mobile/data/DataManager.java
+++ b/app/src/main/java/org/apache/taverna/mobile/data/DataManager.java
@@ -34,11 +34,11 @@ import org.apache.taverna.mobile.data.remote.BaseApiManager;
 import java.util.List;
 import java.util.Map;
 
+import io.reactivex.Observable;
+import io.reactivex.ObservableSource;
+import io.reactivex.functions.Function;
 import okhttp3.RequestBody;
 import okhttp3.ResponseBody;
-import rx.Observable;
-import rx.functions.Func1;
-
 
 public class DataManager {
 
@@ -81,9 +81,10 @@ public class DataManager {
      */
     public Observable<Workflows> getAllWorkflow(Map<String, String> options) {
         return mBaseApiManager.getTavernaApi().getAllWorkflows(options)
-                .concatMap(new Func1<Workflows, Observable<? extends Workflows>>() {
+                .concatMap(new Function<Workflows, ObservableSource<? extends Workflows>>() {
                     @Override
-                    public Observable<? extends Workflows> call(Workflows workflows) {
+                    public ObservableSource<? extends Workflows> apply(Workflows workflows)
+                            throws Exception {
                         return mDBHelper.syncWorkflows(workflows);
                     }
                 });
@@ -95,9 +96,10 @@ public class DataManager {
 
     public Observable<Workflow> getDetailWorkflow(String id, Map<String, String> options) {
         return mBaseApiManager.getTavernaApi().getDetailWorkflow(id, options)
-                .concatMap(new Func1<Workflow, Observable<? extends Workflow>>() {
+                .concatMap(new Function<Workflow, ObservableSource<? extends Workflow>>() {
                     @Override
-                    public Observable<? extends Workflow> call(Workflow workflow) {
+                    public ObservableSource<? extends Workflow> apply(Workflow workflow)
+                            throws Exception {
                         return mDBHelper.syncWorkflow(workflow);
                     }
                 });
@@ -159,13 +161,11 @@ public class DataManager {
      */
 
     public Observable<User> getLoginUserDetail(String credentials, final boolean flagLogin) {
-
         return mBaseApiManager.getTavernaApi().getLoginUserDetail(credentials)
-                .concatMap(new Func1<User, Observable<? extends User>>() {
+                .concatMap(new Function<User, ObservableSource<? extends User>>() {
                     @Override
-                    public Observable<? extends User> call(User user) {
+                    public ObservableSource<? extends User> apply(User user) throws Exception {
                         mPreferencesHelper.setLoggedInFlag(flagLogin);
-
                         return mPreferencesHelper.saveUserDetail(user);
                     }
                 });
@@ -205,7 +205,7 @@ public class DataManager {
     }
 
     public Observable<User> getMyWorkflows(String userID, Map<String, String> options) {
-        return mBaseApiManager.getTavernaApi().getUserDetail(userID , options);
+        return mBaseApiManager.getTavernaApi().getUserDetail(userID, options);
     }
 
     public Observable<Search> getSearchWorkflowResult(Map<String, String> options) {

http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/3e921aca/app/src/main/java/org/apache/taverna/mobile/data/local/DBHelper.java
----------------------------------------------------------------------
diff --git a/app/src/main/java/org/apache/taverna/mobile/data/local/DBHelper.java b/app/src/main/java/org/apache/taverna/mobile/data/local/DBHelper.java
index f50c3fa..8fc053a 100644
--- a/app/src/main/java/org/apache/taverna/mobile/data/local/DBHelper.java
+++ b/app/src/main/java/org/apache/taverna/mobile/data/local/DBHelper.java
@@ -28,10 +28,10 @@ import org.apache.taverna.mobile.data.model.Workflow_Table;
 import org.apache.taverna.mobile.data.model.Workflows;
 
 import java.util.List;
+import java.util.concurrent.Callable;
 
-import rx.Observable;
-import rx.Subscriber;
-import rx.functions.Func0;
+import io.reactivex.Observable;
+import io.reactivex.ObservableSource;
 
 
 public class DBHelper {
@@ -46,23 +46,21 @@ public class DBHelper {
 
     @Nullable
     public Observable<Workflows> syncWorkflows(final Workflows workflows) {
-        return Observable.create(new Observable.OnSubscribe<Workflows>() {
+        return Observable.defer(new Callable<ObservableSource<? extends Workflows>>() {
             @Override
-            public void call(Subscriber<? super Workflows> subscriber) {
-                if (subscriber.isUnsubscribed()) return;
+            public ObservableSource<? extends Workflows> call() throws Exception {
+
                 for (Workflow workflow : workflows.getWorkflowList()) {
                     if (!workflow.exists()) {
                         workflow.setFavourite(false);
                         workflow.save();
-
                     } else {
 
                         updateWorkflow(workflow).save();
                     }
-
                 }
-                subscriber.onNext(workflows);
-                subscriber.onCompleted();
+
+                return Observable.just(workflows);
             }
         });
     }
@@ -118,58 +116,43 @@ public class DBHelper {
         return workflow1;
     }
 
-
     public Observable<Workflow> syncWorkflow(final Workflow workflow) {
-        return Observable.create(new Observable.OnSubscribe<Workflow>() {
+        return Observable.defer(new Callable<ObservableSource<? extends Workflow>>() {
             @Override
-            public void call(Subscriber<? super Workflow> subscriber) {
-                if (subscriber.isUnsubscribed()) return;
+            public ObservableSource<? extends Workflow> call() throws Exception {
                 if (!workflow.exists()) {
                     workflow.save();
-
                 } else {
-
                     updateWorkflow(workflow).save();
                 }
-                subscriber.onNext(workflow);
-                subscriber.onCompleted();
+                return Observable.just(workflow);
             }
         });
     }
 
-
     public Observable<Boolean> setFavouriteWorkflow(final String id) {
-        return Observable.create(new Observable.OnSubscribe<Boolean>() {
+        return Observable.defer(new Callable<ObservableSource<? extends Boolean>>() {
             @Override
-            public void call(Subscriber<? super Boolean> subscriber) {
-                if (subscriber.isUnsubscribed()) return;
-                subscriber.onNext(updateFavouriteWorkflow(id));
-                subscriber.onCompleted();
+            public ObservableSource<? extends Boolean> call() throws Exception {
+                return Observable.just(updateFavouriteWorkflow(id));
             }
         });
     }
 
 
     public Observable<Boolean> getFavouriteWorkflow(final String id) {
-        return Observable.create(new Observable.OnSubscribe<Boolean>() {
+        return Observable.defer(new Callable<ObservableSource<? extends Boolean>>() {
             @Override
-            public void call(Subscriber<? super Boolean> subscriber) {
-                if (subscriber.isUnsubscribed()) return;
-                Workflow workflow1 = SQLite.select()
+            public ObservableSource<? extends Boolean> call() throws Exception {
+                Workflow workflow = SQLite.select()
                         .from(Workflow.class)
                         .where(Workflow_Table.id.eq(id))
                         .querySingle();
-
-                if (workflow1 != null) {
-
-                    subscriber.onNext(workflow1.isFavourite());
-                    subscriber.onCompleted();
+                if (workflow != null) {
+                    return Observable.just(workflow.isFavourite());
                 } else {
-
-                    subscriber.onError(null);
+                    return Observable.just(null);
                 }
-
-
             }
         });
     }
@@ -191,35 +174,27 @@ public class DBHelper {
     }
 
     public Observable<List<Workflow>> getFavouriteWorkflow() {
-        return Observable.create(new Observable.OnSubscribe<List<Workflow>>() {
+        return Observable.defer(new Callable<ObservableSource<? extends List<Workflow>>>() {
             @Override
-            public void call(Subscriber<? super List<Workflow>> subscriber) {
-                if (subscriber.isUnsubscribed()) return;
-                List<Workflow> workflows = SQLite.select()
+            public ObservableSource<? extends List<Workflow>> call() throws Exception {
+                return Observable.just(SQLite.select()
                         .from(Workflow.class)
                         .where(Workflow_Table.favourite.eq(true))
-                        .queryList();
-
-                subscriber.onNext(workflows);
-                subscriber.onCompleted();
-
+                        .queryList());
             }
         });
-
     }
 
     public Observable<Workflow> getFavouriteWorkflowDetail(final String id) {
-        return Observable.defer(new Func0<Observable<Workflow>>() {
+        return Observable.defer(new Callable<ObservableSource<? extends Workflow>>() {
             @Override
-            public Observable<Workflow> call() {
-                return Observable
-                        .just(SQLite.select()
+            public ObservableSource<? extends Workflow> call() throws Exception {
+                return Observable.just(SQLite.select()
                                 .from(Workflow.class)
                                 .where(Workflow_Table.id.eq(id))
                                 .querySingle());
             }
         });
-
     }
 
 

http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/3e921aca/app/src/main/java/org/apache/taverna/mobile/data/local/PreferencesHelper.java
----------------------------------------------------------------------
diff --git a/app/src/main/java/org/apache/taverna/mobile/data/local/PreferencesHelper.java b/app/src/main/java/org/apache/taverna/mobile/data/local/PreferencesHelper.java
index c38137b..6593e0b 100644
--- a/app/src/main/java/org/apache/taverna/mobile/data/local/PreferencesHelper.java
+++ b/app/src/main/java/org/apache/taverna/mobile/data/local/PreferencesHelper.java
@@ -26,8 +26,11 @@ import android.content.Context;
 import android.content.SharedPreferences;
 import android.preference.PreferenceManager;
 
-import rx.Observable;
-import rx.functions.Func0;
+import java.util.concurrent.Callable;
+
+import io.reactivex.Observable;
+import io.reactivex.ObservableSource;
+
 
 public class PreferencesHelper {
 
@@ -155,9 +158,15 @@ public class PreferencesHelper {
     }
 
     public Observable<User> saveUserDetail(final User user) {
-        return Observable.defer(new Func0<Observable<User>>() {
+        return Observable.defer(new Callable<ObservableSource<? extends User>>() {
+            /**
+             * Computes a result, or throws an exception if unable to do so.
+             *
+             * @return computed result
+             * @throws Exception if unable to compute a result
+             */
             @Override
-            public Observable<User> call() {
+            public ObservableSource<? extends User> call() throws Exception {
                 if (user.getElementId() != null) {
                     setUserID(user.getElementId());
                 }
@@ -186,7 +195,6 @@ public class PreferencesHelper {
                 return Observable.just(user);
             }
         });
-
     }
 
     public boolean isUserPlayerLoggedInFlag() {

http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/3e921aca/app/src/main/java/org/apache/taverna/mobile/data/remote/BaseApiManager.java
----------------------------------------------------------------------
diff --git a/app/src/main/java/org/apache/taverna/mobile/data/remote/BaseApiManager.java b/app/src/main/java/org/apache/taverna/mobile/data/remote/BaseApiManager.java
index c3747e8..84d5aed 100644
--- a/app/src/main/java/org/apache/taverna/mobile/data/remote/BaseApiManager.java
+++ b/app/src/main/java/org/apache/taverna/mobile/data/remote/BaseApiManager.java
@@ -22,7 +22,7 @@ import org.apache.taverna.mobile.TavernaApplication;
 import org.apache.taverna.mobile.data.local.PreferencesHelper;
 
 import retrofit2.Retrofit;
-import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory;
+import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
 import retrofit2.converter.gson.GsonConverterFactory;
 import retrofit2.converter.simplexml.SimpleXmlConverterFactory;
 
@@ -42,7 +42,7 @@ public class BaseApiManager {
         Retrofit retrofit = new Retrofit.Builder()
                 .baseUrl(ENDPOINT)
                 .addConverterFactory(SimpleXmlConverterFactory.create())
-                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
+                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                 .client(new TavernaOkHttpClient().getTavernaOkHttpClient())
                 .build();
 
@@ -58,7 +58,7 @@ public class BaseApiManager {
         Retrofit retrofit = new Retrofit.Builder()
                 .baseUrl(ENDPOINT)
                 .addConverterFactory(GsonConverterFactory.create())
-                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
+                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                 .client(new TavernaOkHttpClient().getTavernaOkHttpClient())
                 .build();
 

http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/3e921aca/app/src/main/java/org/apache/taverna/mobile/data/remote/TavernaPlayerService.java
----------------------------------------------------------------------
diff --git a/app/src/main/java/org/apache/taverna/mobile/data/remote/TavernaPlayerService.java b/app/src/main/java/org/apache/taverna/mobile/data/remote/TavernaPlayerService.java
index e71ea38..24eeee9 100644
--- a/app/src/main/java/org/apache/taverna/mobile/data/remote/TavernaPlayerService.java
+++ b/app/src/main/java/org/apache/taverna/mobile/data/remote/TavernaPlayerService.java
@@ -22,6 +22,7 @@ package org.apache.taverna.mobile.data.remote;
 import org.apache.taverna.mobile.data.model.PlayerWorkflow;
 import org.apache.taverna.mobile.data.model.PlayerWorkflowDetail;
 
+import io.reactivex.Observable;
 import okhttp3.RequestBody;
 import okhttp3.ResponseBody;
 import retrofit2.http.Body;
@@ -30,7 +31,7 @@ import retrofit2.http.Header;
 import retrofit2.http.Headers;
 import retrofit2.http.POST;
 import retrofit2.http.Query;
-import rx.Observable;
+
 
 public interface TavernaPlayerService {
 

http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/3e921aca/app/src/main/java/org/apache/taverna/mobile/data/remote/TavernaService.java
----------------------------------------------------------------------
diff --git a/app/src/main/java/org/apache/taverna/mobile/data/remote/TavernaService.java b/app/src/main/java/org/apache/taverna/mobile/data/remote/TavernaService.java
index 54c3dd5..adddb6c 100644
--- a/app/src/main/java/org/apache/taverna/mobile/data/remote/TavernaService.java
+++ b/app/src/main/java/org/apache/taverna/mobile/data/remote/TavernaService.java
@@ -28,6 +28,7 @@ import org.apache.taverna.mobile.data.model.Workflows;
 
 import java.util.Map;
 
+import io.reactivex.Observable;
 import okhttp3.ResponseBody;
 import retrofit2.http.GET;
 import retrofit2.http.Header;
@@ -35,7 +36,6 @@ import retrofit2.http.Headers;
 import retrofit2.http.Query;
 import retrofit2.http.QueryMap;
 import retrofit2.http.Url;
-import rx.Observable;
 
 
 public interface TavernaService {

http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/3e921aca/app/src/main/java/org/apache/taverna/mobile/ui/anouncements/AnnouncementPresenter.java
----------------------------------------------------------------------
diff --git a/app/src/main/java/org/apache/taverna/mobile/ui/anouncements/AnnouncementPresenter.java b/app/src/main/java/org/apache/taverna/mobile/ui/anouncements/AnnouncementPresenter.java
index 029a758..43a7bdb 100644
--- a/app/src/main/java/org/apache/taverna/mobile/ui/anouncements/AnnouncementPresenter.java
+++ b/app/src/main/java/org/apache/taverna/mobile/ui/anouncements/AnnouncementPresenter.java
@@ -26,23 +26,21 @@ import org.apache.taverna.mobile.data.model.Announcements;
 import org.apache.taverna.mobile.data.model.DetailAnnouncement;
 import org.apache.taverna.mobile.ui.base.BasePresenter;
 
-import rx.Observer;
-import rx.android.schedulers.AndroidSchedulers;
-import rx.schedulers.Schedulers;
-import rx.subscriptions.CompositeSubscription;
-
+import io.reactivex.android.schedulers.AndroidSchedulers;
+import io.reactivex.observers.DisposableObserver;
+import io.reactivex.schedulers.Schedulers;
+import io.reactivex.disposables.CompositeDisposable;
 
 public class AnnouncementPresenter extends BasePresenter<AnnouncementMvpView> {
 
     public final String LOG_TAG = getClass().getSimpleName();
-    private DataManager mDataManager;
-    private CompositeSubscription mSubscriptions;
 
+    private DataManager mDataManager;
+    private CompositeDisposable compositeDisposable;
 
     public AnnouncementPresenter(DataManager dataManager) {
         mDataManager = dataManager;
-
-        mSubscriptions = new CompositeSubscription();
+        compositeDisposable = new CompositeDisposable();
     }
 
     @Override
@@ -53,18 +51,24 @@ public class AnnouncementPresenter extends BasePresenter<AnnouncementMvpView> {
     @Override
     public void detachView() {
         super.detachView();
-        if (mSubscriptions != null) mSubscriptions.unsubscribe();
+        compositeDisposable.clear();
     }
 
     public void loadAllAnnouncement(int pageNumber) {
-
-        mSubscriptions.add(mDataManager.getAllAnnouncement(pageNumber)
+        checkViewAttached();
+        compositeDisposable.add(mDataManager.getAllAnnouncement(pageNumber)
                 .observeOn(AndroidSchedulers.mainThread())
                 .subscribeOn(Schedulers.io())
-                .subscribe(new Observer<Announcements>() {
+                .subscribeWith(new DisposableObserver<Announcements>() {
+
                     @Override
-                    public void onCompleted() {
-                        getMvpView().showProgressbar(false);
+                    public void onNext(Announcements announcements) {
+                        if (announcements.getAnnouncement() != null) {
+                            getMvpView().showAllAnnouncement(announcements);
+                        } else {
+                            getMvpView().showSnackBar(R.string.no_more_announcement_available);
+                            getMvpView().removeLoadMoreProgressBar();
+                        }
                     }
 
                     @Override
@@ -74,26 +78,22 @@ public class AnnouncementPresenter extends BasePresenter<AnnouncementMvpView> {
                     }
 
                     @Override
-                    public void onNext(Announcements announcement) {
-                        if (announcement.getAnnouncement() != null) {
-                            getMvpView().showAllAnnouncement(announcement);
-                        } else {
-                            getMvpView().showSnackBar(R.string.no_more_announcement_available);
-                            getMvpView().removeLoadMoreProgressBar();
-                        }
+                    public void onComplete() {
+                        getMvpView().showProgressbar(false);
                     }
                 }));
     }
 
     public void loadAnnouncementDetails(String id) {
-
-        mSubscriptions.add(mDataManager.getAnnouncementDetail(id)
+        checkViewAttached();
+        compositeDisposable.add(mDataManager.getAnnouncementDetail(id)
                 .observeOn(AndroidSchedulers.mainThread())
                 .subscribeOn(Schedulers.io())
-                .subscribe(new Observer<DetailAnnouncement>() {
+                .subscribeWith(new DisposableObserver<DetailAnnouncement>() {
+
                     @Override
-                    public void onCompleted() {
-                        getMvpView().showWaitProgress(false);
+                    public void onNext(DetailAnnouncement detailAnnouncement) {
+                        getMvpView().showAnnouncementDetail(detailAnnouncement);
                     }
 
                     @Override
@@ -104,9 +104,8 @@ public class AnnouncementPresenter extends BasePresenter<AnnouncementMvpView> {
                     }
 
                     @Override
-                    public void onNext(DetailAnnouncement detailAnnouncement) {
-                        getMvpView().showAnnouncementDetail(detailAnnouncement);
-
+                    public void onComplete() {
+                        getMvpView().showWaitProgress(false);
                     }
                 }));
     }

http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/3e921aca/app/src/main/java/org/apache/taverna/mobile/ui/favouriteworkflow/FavouriteWorkflowsPresenter.java
----------------------------------------------------------------------
diff --git a/app/src/main/java/org/apache/taverna/mobile/ui/favouriteworkflow/FavouriteWorkflowsPresenter.java b/app/src/main/java/org/apache/taverna/mobile/ui/favouriteworkflow/FavouriteWorkflowsPresenter.java
index 1a5c062..886d84b 100644
--- a/app/src/main/java/org/apache/taverna/mobile/ui/favouriteworkflow/FavouriteWorkflowsPresenter.java
+++ b/app/src/main/java/org/apache/taverna/mobile/ui/favouriteworkflow/FavouriteWorkflowsPresenter.java
@@ -18,31 +18,32 @@
  */
 package org.apache.taverna.mobile.ui.favouriteworkflow;
 
+import android.support.v7.widget.SearchView;
+
 import org.apache.taverna.mobile.data.DataManager;
 import org.apache.taverna.mobile.data.model.Workflow;
 import org.apache.taverna.mobile.ui.base.BasePresenter;
 import org.apache.taverna.mobile.utils.RxSearch;
 
-import android.support.v7.widget.SearchView;
-
 import java.util.List;
 import java.util.concurrent.TimeUnit;
 
-import rx.Observer;
-import rx.Subscriber;
-import rx.Subscription;
-import rx.android.schedulers.AndroidSchedulers;
-import rx.schedulers.Schedulers;
+import io.reactivex.android.schedulers.AndroidSchedulers;
+import io.reactivex.disposables.CompositeDisposable;
+import io.reactivex.observers.DisposableObserver;
+import io.reactivex.schedulers.Schedulers;
+
 
 public class FavouriteWorkflowsPresenter extends BasePresenter<FavouriteWorkflowsMvpView> {
 
     public final String LOG_TAG = getClass().getSimpleName();
-    private DataManager mDataManager;
-    private Subscription mSubscriptions;
 
+    private DataManager mDataManager;
+    private CompositeDisposable compositeDisposable;
 
     public FavouriteWorkflowsPresenter(DataManager dataManager) {
         mDataManager = dataManager;
+        compositeDisposable = new CompositeDisposable();
     }
 
     @Override
@@ -53,20 +54,19 @@ public class FavouriteWorkflowsPresenter extends BasePresenter<FavouriteWorkflow
     @Override
     public void detachView() {
         super.detachView();
-        if (mSubscriptions != null) mSubscriptions.unsubscribe();
+        compositeDisposable.clear();
     }
 
     public void loadAllWorkflow() {
-
+        checkViewAttached();
         getMvpView().showProgressbar(true);
-
-        if (mSubscriptions != null) mSubscriptions.unsubscribe();
-        mSubscriptions = mDataManager.getFavoriteWorkflowList()
+        compositeDisposable.add(mDataManager.getFavoriteWorkflowList()
                 .observeOn(AndroidSchedulers.mainThread())
                 .subscribeOn(Schedulers.io())
-                .subscribe(new Observer<List<Workflow>>() {
+                .subscribeWith(new DisposableObserver<List<Workflow>>() {
+
                     @Override
-                    public void onCompleted() {
+                    public void onComplete() {
                         getMvpView().showProgressbar(false);
                     }
 
@@ -84,19 +84,18 @@ public class FavouriteWorkflowsPresenter extends BasePresenter<FavouriteWorkflow
                             getMvpView().showEmptyWorkflow();
                         }
                     }
-                });
-
+                }));
     }
 
-
     public void attachSearchHandler(SearchView searchView) {
+        checkViewAttached();
         RxSearch.fromSearchView(searchView)
                 .debounce(300, TimeUnit.MILLISECONDS)
                 .observeOn(AndroidSchedulers.mainThread())
-                .subscribe(new Subscriber<String>() {
+                .subscribeWith(new DisposableObserver<String>() {
                     @Override
-                    public void onCompleted() {
-
+                    public void onNext(String s) {
+                        getMvpView().performSearch(s);
                     }
 
                     @Override
@@ -105,11 +104,10 @@ public class FavouriteWorkflowsPresenter extends BasePresenter<FavouriteWorkflow
                     }
 
                     @Override
-                    public void onNext(String s) {
-                        getMvpView().performSearch(s);
+                    public void onComplete() {
+
                     }
                 });
     }
 
-
 }

http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/3e921aca/app/src/main/java/org/apache/taverna/mobile/ui/favouriteworkflowdetail/FavouriteWorkflowDetailPresenter.java
----------------------------------------------------------------------
diff --git a/app/src/main/java/org/apache/taverna/mobile/ui/favouriteworkflowdetail/FavouriteWorkflowDetailPresenter.java b/app/src/main/java/org/apache/taverna/mobile/ui/favouriteworkflowdetail/FavouriteWorkflowDetailPresenter.java
index 91905d1..ca747e9 100644
--- a/app/src/main/java/org/apache/taverna/mobile/ui/favouriteworkflowdetail/FavouriteWorkflowDetailPresenter.java
+++ b/app/src/main/java/org/apache/taverna/mobile/ui/favouriteworkflowdetail/FavouriteWorkflowDetailPresenter.java
@@ -27,10 +27,10 @@ import org.apache.taverna.mobile.ui.base.BasePresenter;
 import java.util.HashMap;
 import java.util.Map;
 
-import rx.Observer;
-import rx.android.schedulers.AndroidSchedulers;
-import rx.schedulers.Schedulers;
-import rx.subscriptions.CompositeSubscription;
+import io.reactivex.android.schedulers.AndroidSchedulers;
+import io.reactivex.observers.DisposableObserver;
+import io.reactivex.schedulers.Schedulers;
+import io.reactivex.disposables.CompositeDisposable;
 
 public class FavouriteWorkflowDetailPresenter extends
         BasePresenter<FavouriteWorkflowDetailMvpView> {
@@ -39,14 +39,12 @@ public class FavouriteWorkflowDetailPresenter extends
 
     private DataManager mDataManager;
 
-    private CompositeSubscription mCompositeSubscription;
+    private CompositeDisposable compositeDisposable;
 
 
     public FavouriteWorkflowDetailPresenter(DataManager dataManager) {
-
         mDataManager = dataManager;
-
-        mCompositeSubscription = new CompositeSubscription();
+        compositeDisposable = new CompositeDisposable();
     }
 
     @Override
@@ -57,19 +55,21 @@ public class FavouriteWorkflowDetailPresenter extends
     @Override
     public void detachView() {
         super.detachView();
-        if (mCompositeSubscription != null) mCompositeSubscription.unsubscribe();
+        compositeDisposable.clear();
     }
 
     public void loadWorkflowDetail(String id) {
+        checkViewAttached();
         getMvpView().showProgressbar(true);
-
-        mCompositeSubscription.add(mDataManager.getFavoriteDetailWorkflow(id)
+        compositeDisposable.add(mDataManager.getFavoriteDetailWorkflow(id)
                 .observeOn(AndroidSchedulers.mainThread())
                 .subscribeOn(Schedulers.io())
-                .subscribe(new Observer<Workflow>() {
+                .subscribeWith(new DisposableObserver<Workflow>() {
                     @Override
-                    public void onCompleted() {
-                        getMvpView().showProgressbar(false);
+                    public void onNext(Workflow workflow) {
+                        getMvpView().showWorkflowDetail(workflow);
+                        loadUserDetail(workflow.getUploader().getId());
+                        getFavourite(workflow.getId());
                     }
 
                     @Override
@@ -78,26 +78,22 @@ public class FavouriteWorkflowDetailPresenter extends
                     }
 
                     @Override
-                    public void onNext(Workflow workflow) {
-                        getMvpView().showWorkflowDetail(workflow);
-                        loadUserDetail(workflow.getUploader().getId());
-                        getFavourite(workflow.getId());
+                    public void onComplete() {
+                        getMvpView().showProgressbar(false);
                     }
                 }));
-
     }
 
     private void loadUserDetail(String id) {
-
+        checkViewAttached();
         getMvpView().showProgressbar(true);
-
-        mCompositeSubscription.add(mDataManager.getUserDetail(id, getUserQueryOptions())
+        compositeDisposable.add(mDataManager.getUserDetail(id, getUserQueryOptions())
                 .observeOn(AndroidSchedulers.mainThread())
                 .subscribeOn(Schedulers.io())
-                .subscribe(new Observer<User>() {
+                .subscribeWith(new DisposableObserver<User>() {
                     @Override
-                    public void onCompleted() {
-                        getMvpView().showProgressbar(false);
+                    public void onNext(User user) {
+                        getMvpView().setImage(user);
                     }
 
                     @Override
@@ -108,23 +104,22 @@ public class FavouriteWorkflowDetailPresenter extends
                     }
 
                     @Override
-                    public void onNext(User user) {
-                        getMvpView().setImage(user);
+                    public void onComplete() {
+                        getMvpView().showProgressbar(false);
                     }
                 }));
     }
 
     public void loadLicenseDetail(String id) {
-
+        checkViewAttached();
         getMvpView().showLicenseProgress(true);
-
-        mCompositeSubscription.add(mDataManager.getLicenseDetail(id, getLicenceQueryOptions())
+        compositeDisposable.add(mDataManager.getLicenseDetail(id, getLicenceQueryOptions())
                 .observeOn(AndroidSchedulers.mainThread())
                 .subscribeOn(Schedulers.io())
-                .subscribe(new Observer<License>() {
+                .subscribeWith(new DisposableObserver<License>() {
                     @Override
-                    public void onCompleted() {
-                        getMvpView().showLicenseProgress(false);
+                    public void onNext(License license) {
+                        getMvpView().showLicense(license);
                     }
 
                     @Override
@@ -135,22 +130,26 @@ public class FavouriteWorkflowDetailPresenter extends
                     }
 
                     @Override
-                    public void onNext(License license) {
-                        getMvpView().showLicense(license);
+                    public void onComplete() {
+                        getMvpView().showLicenseProgress(false);
                     }
                 }));
     }
 
     public void setFavourite(String id) {
-
-
-        mCompositeSubscription.add(mDataManager.setFavoriteWorkflow(id)
+        checkViewAttached();
+        compositeDisposable.add(mDataManager.setFavoriteWorkflow(id)
                 .observeOn(AndroidSchedulers.mainThread())
                 .subscribeOn(Schedulers.io())
-                .subscribe(new Observer<Boolean>() {
+                .subscribeWith(new DisposableObserver<Boolean>() {
                     @Override
-                    public void onCompleted() {
-
+                    public void onNext(Boolean b) {
+                        if (b) {
+                            getMvpView().setFavouriteIcon();
+                        } else {
+                            getMvpView().showErrorSnackBar("Something went wrong please try after" +
+                                    "sometime");
+                        }
                     }
 
                     @Override
@@ -160,28 +159,21 @@ public class FavouriteWorkflowDetailPresenter extends
                     }
 
                     @Override
-                    public void onNext(Boolean b) {
-                        if (b) {
-                            getMvpView().setFavouriteIcon();
-                        } else {
-                            getMvpView().showErrorSnackBar("Something went wrong please try after" +
-                                    "sometime");
-                        }
+                    public void onComplete() {
 
                     }
                 }));
     }
 
     public void getFavourite(String id) {
-
-
-        mCompositeSubscription.add(mDataManager.getFavoriteWorkflow(id)
+        checkViewAttached();
+        compositeDisposable.add(mDataManager.getFavoriteWorkflow(id)
                 .observeOn(AndroidSchedulers.mainThread())
                 .subscribeOn(Schedulers.io())
-                .subscribe(new Observer<Boolean>() {
+                .subscribeWith(new DisposableObserver<Boolean>() {
                     @Override
-                    public void onCompleted() {
-
+                    public void onNext(Boolean b) {
+                        getMvpView().getFavouriteIcon(b);
                     }
 
                     @Override
@@ -191,26 +183,21 @@ public class FavouriteWorkflowDetailPresenter extends
                     }
 
                     @Override
-                    public void onNext(Boolean b) {
-                        getMvpView().getFavouriteIcon(b);
+                    public void onComplete() {
+
                     }
                 }));
     }
 
-
     private Map<String, String> getUserQueryOptions() {
-
         Map<String, String> option = new HashMap<>();
         option.put("elements", "avatar");
         return option;
     }
 
     private Map<String, String> getLicenceQueryOptions() {
-
         Map<String, String> option = new HashMap<>();
         option.put("elements", "title,description,url,created-at");
         return option;
     }
-
-
 }

http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/3e921aca/app/src/main/java/org/apache/taverna/mobile/ui/login/LoginPresenter.java
----------------------------------------------------------------------
diff --git a/app/src/main/java/org/apache/taverna/mobile/ui/login/LoginPresenter.java b/app/src/main/java/org/apache/taverna/mobile/ui/login/LoginPresenter.java
index 56339ac..ad47cc0 100644
--- a/app/src/main/java/org/apache/taverna/mobile/ui/login/LoginPresenter.java
+++ b/app/src/main/java/org/apache/taverna/mobile/ui/login/LoginPresenter.java
@@ -25,10 +25,11 @@ import org.apache.taverna.mobile.data.DataManager;
 import org.apache.taverna.mobile.data.model.User;
 import org.apache.taverna.mobile.ui.base.BasePresenter;
 
-import rx.Observer;
-import rx.Subscription;
-import rx.android.schedulers.AndroidSchedulers;
-import rx.schedulers.Schedulers;
+import io.reactivex.android.schedulers.AndroidSchedulers;
+import io.reactivex.disposables.CompositeDisposable;
+import io.reactivex.observers.DisposableObserver;
+import io.reactivex.schedulers.Schedulers;
+
 
 public class LoginPresenter extends BasePresenter<LoginMvpView> {
 
@@ -36,10 +37,11 @@ public class LoginPresenter extends BasePresenter<LoginMvpView> {
 
     private DataManager mDataManager;
 
-    private Subscription mSubscriptions;
+    private CompositeDisposable compositeDisposable;
 
     public LoginPresenter(DataManager dataManager) {
         mDataManager = dataManager;
+        compositeDisposable = new CompositeDisposable();
     }
 
     @Override
@@ -50,23 +52,20 @@ public class LoginPresenter extends BasePresenter<LoginMvpView> {
     @Override
     public void detachView() {
         super.detachView();
-        if (mSubscriptions != null) mSubscriptions.unsubscribe();
+        compositeDisposable.clear();
     }
 
     public void login(String username, String password, boolean flagLogin) {
-        if (mSubscriptions != null) mSubscriptions.unsubscribe();
-
+        checkViewAttached();
         getMvpView().showProgressDialog(true);
-
-        mSubscriptions = mDataManager.getLoginUserDetail(getEncodedCredential(username, password)
-                , flagLogin)
+        compositeDisposable.add(mDataManager
+                .getLoginUserDetail(getEncodedCredential(username, password), flagLogin)
                 .observeOn(AndroidSchedulers.mainThread())
                 .subscribeOn(Schedulers.io())
-                .subscribe(new Observer<User>() {
+                .subscribeWith(new DisposableObserver<User>() {
                     @Override
-                    public void onCompleted() {
-                        getMvpView().showDashboardActivity();
-                        getMvpView().showProgressDialog(false);
+                    public void onNext(User value) {
+
                     }
 
                     @Override
@@ -76,16 +75,15 @@ public class LoginPresenter extends BasePresenter<LoginMvpView> {
                     }
 
                     @Override
-                    public void onNext(User user) {
-
+                    public void onComplete() {
+                        getMvpView().showDashboardActivity();
+                        getMvpView().showProgressDialog(false);
                     }
-                });
+                }));
     }
 
     private String getEncodedCredential(String username, String password) {
-
         return "Basic " + Base64.encodeToString((username + ":" + password).getBytes(), Base64
                 .NO_WRAP);
     }
-
 }

http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/3e921aca/app/src/main/java/org/apache/taverna/mobile/ui/myworkflows/MyWorkflowPresenter.java
----------------------------------------------------------------------
diff --git a/app/src/main/java/org/apache/taverna/mobile/ui/myworkflows/MyWorkflowPresenter.java b/app/src/main/java/org/apache/taverna/mobile/ui/myworkflows/MyWorkflowPresenter.java
index 3661ea6..2fea21c 100644
--- a/app/src/main/java/org/apache/taverna/mobile/ui/myworkflows/MyWorkflowPresenter.java
+++ b/app/src/main/java/org/apache/taverna/mobile/ui/myworkflows/MyWorkflowPresenter.java
@@ -28,12 +28,13 @@ import org.apache.taverna.mobile.ui.base.BasePresenter;
 import java.util.HashMap;
 import java.util.Map;
 
-import rx.Observable;
-import rx.Observer;
-import rx.Subscription;
-import rx.android.schedulers.AndroidSchedulers;
-import rx.functions.Func1;
-import rx.schedulers.Schedulers;
+import io.reactivex.Observable;
+import io.reactivex.ObservableSource;
+import io.reactivex.android.schedulers.AndroidSchedulers;
+import io.reactivex.disposables.CompositeDisposable;
+import io.reactivex.functions.Function;
+import io.reactivex.observers.DisposableObserver;
+import io.reactivex.schedulers.Schedulers;
 
 public class MyWorkflowPresenter extends BasePresenter<MyWorkflowMvpView> {
 
@@ -41,10 +42,11 @@ public class MyWorkflowPresenter extends BasePresenter<MyWorkflowMvpView> {
 
     private DataManager mDataManager;
 
-    private Subscription mSubscriptions;
+    private CompositeDisposable compositeDisposable;
 
     public MyWorkflowPresenter(DataManager dataManager) {
         mDataManager = dataManager;
+        compositeDisposable = new CompositeDisposable();
     }
 
     @Override
@@ -55,27 +57,26 @@ public class MyWorkflowPresenter extends BasePresenter<MyWorkflowMvpView> {
     @Override
     public void detachView() {
         super.detachView();
-        if (mSubscriptions != null) mSubscriptions.unsubscribe();
+        compositeDisposable.clear();
     }
 
     public void loadMyWorkflows() {
+        checkViewAttached();
         getMvpView().showProgressbar(true);
-        if (mSubscriptions != null) mSubscriptions.unsubscribe();
-
-        mSubscriptions = mDataManager.getMyWorkflows(mDataManager.getPreferencesHelper()
+        compositeDisposable.clear();
+        compositeDisposable.add(mDataManager.getMyWorkflows(mDataManager.getPreferencesHelper()
                 .getUserID(), getQueryOptions())
-                .flatMap(new Func1<User, Observable<Workflow>>() {
+                .flatMap(new Function<User, ObservableSource<Workflow>>() {
                     @Override
-                    public Observable<Workflow> call(User user) {
+                    public ObservableSource<Workflow> apply(User user) throws Exception {
                         if (user.getWorkflows().getWorkflowList() != null && user.getWorkflows()
                                 .getWorkflowList().size() != 0) {
-                            return Observable.from(user.getWorkflows().getWorkflowList())
-                                    .concatMap(new Func1<Workflow, Observable<? extends
-                                            Workflow>>() {
-
+                            return Observable.fromIterable(user.getWorkflows().getWorkflowList())
+                                    .concatMap(new Function<Workflow,
+                                            ObservableSource<Workflow>>() {
                                         @Override
-                                        public Observable<? extends Workflow> call
-                                                (Workflow workflow) {
+                                        public ObservableSource<Workflow> apply(Workflow workflow)
+                                                throws Exception {
                                             return mDataManager.getDetailWorkflow(workflow.getId(),
                                                     getWorkflowQueryOptions());
                                         }
@@ -87,12 +88,10 @@ public class MyWorkflowPresenter extends BasePresenter<MyWorkflowMvpView> {
                 })
                 .observeOn(AndroidSchedulers.mainThread())
                 .subscribeOn(Schedulers.io())
-                .subscribe(new Observer<Workflow>() {
+                .subscribeWith(new DisposableObserver<Workflow>() {
                     @Override
-                    public void onCompleted() {
-
-                        getMvpView().showProgressbar(false);
-                        getMvpView().checkWorkflowSize();
+                    public void onNext(Workflow workflow) {
+                        getMvpView().showWorkflow(workflow);
                     }
 
                     @Override
@@ -102,23 +101,20 @@ public class MyWorkflowPresenter extends BasePresenter<MyWorkflowMvpView> {
                     }
 
                     @Override
-                    public void onNext(Workflow workflow) {
-                        getMvpView().showWorkflow(workflow);
+                    public void onComplete() {
+                        getMvpView().showProgressbar(false);
+                        getMvpView().checkWorkflowSize();
                     }
-                });
-
+                }));
     }
 
     private Map<String, String> getQueryOptions() {
-
         Map<String, String> option = new HashMap<>();
         option.put("elements", "workflows");
         return option;
     }
 
-
     private Map<String, String> getWorkflowQueryOptions() {
-
         Map<String, String> option = new HashMap<>();
         option.put("elements", "title,type,uploader,preview,created-at");
         return option;

http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/3e921aca/app/src/main/java/org/apache/taverna/mobile/ui/playerlogin/PlayerLoginPresenter.java
----------------------------------------------------------------------
diff --git a/app/src/main/java/org/apache/taverna/mobile/ui/playerlogin/PlayerLoginPresenter.java b/app/src/main/java/org/apache/taverna/mobile/ui/playerlogin/PlayerLoginPresenter.java
index 8113cbd..fbc00e4 100644
--- a/app/src/main/java/org/apache/taverna/mobile/ui/playerlogin/PlayerLoginPresenter.java
+++ b/app/src/main/java/org/apache/taverna/mobile/ui/playerlogin/PlayerLoginPresenter.java
@@ -25,13 +25,12 @@ import org.apache.taverna.mobile.R;
 import org.apache.taverna.mobile.data.DataManager;
 import org.apache.taverna.mobile.ui.base.BasePresenter;
 
+import io.reactivex.android.schedulers.AndroidSchedulers;
+import io.reactivex.disposables.CompositeDisposable;
+import io.reactivex.observers.DisposableObserver;
+import io.reactivex.schedulers.Schedulers;
 import okhttp3.ResponseBody;
-import retrofit2.adapter.rxjava.HttpException;
-import rx.Observer;
-import rx.Subscription;
-import rx.android.schedulers.AndroidSchedulers;
-import rx.schedulers.Schedulers;
-
+import retrofit2.HttpException;
 
 public class PlayerLoginPresenter extends BasePresenter<PlayerLoginMvpView> {
 
@@ -39,10 +38,11 @@ public class PlayerLoginPresenter extends BasePresenter<PlayerLoginMvpView> {
 
     private DataManager mDataManager;
 
-    private Subscription mSubscriptions;
+    private CompositeDisposable compositeDisposable;
 
     public PlayerLoginPresenter(DataManager dataManager) {
         mDataManager = dataManager;
+        compositeDisposable = new CompositeDisposable();
     }
 
     @Override
@@ -53,20 +53,19 @@ public class PlayerLoginPresenter extends BasePresenter<PlayerLoginMvpView> {
     @Override
     public void detachView() {
         super.detachView();
-        if (mSubscriptions != null) mSubscriptions.unsubscribe();
+        compositeDisposable.clear();
     }
 
     public void playerLogin(final String username, final String password, final boolean loginFlag) {
-        if (mSubscriptions != null) mSubscriptions.unsubscribe();
-
-        mSubscriptions = mDataManager.authPlayerUserLoginDetail(getEncodedCredential(username,
-                password), loginFlag)
+        compositeDisposable.clear();
+        compositeDisposable.add(mDataManager
+                .authPlayerUserLoginDetail(getEncodedCredential(username, password), loginFlag)
                 .observeOn(AndroidSchedulers.mainThread())
                 .subscribeOn(Schedulers.io())
-                .subscribe(new Observer<ResponseBody>() {
+                .subscribeWith(new DisposableObserver<ResponseBody>() {
                     @Override
-                    public void onCompleted() {
-
+                    public void onNext(ResponseBody responseBody) {
+                        Log.d(TAG, "onCompleted: " + responseBody.byteStream());
                     }
 
                     @Override
@@ -88,15 +87,13 @@ public class PlayerLoginPresenter extends BasePresenter<PlayerLoginMvpView> {
                     }
 
                     @Override
-                    public void onNext(ResponseBody responseBody) {
-                        Log.d(TAG, "onCompleted: " + responseBody.byteStream());
-                    }
-                });
+                    public void onComplete() {
 
+                    }
+                }));
     }
 
     private String getEncodedCredential(String username, String password) {
-
         return "Basic " + Base64.encodeToString((username + ":" + password).getBytes(), Base64
                 .NO_WRAP);
     }

http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/3e921aca/app/src/main/java/org/apache/taverna/mobile/ui/workflow/WorkflowPresenter.java
----------------------------------------------------------------------
diff --git a/app/src/main/java/org/apache/taverna/mobile/ui/workflow/WorkflowPresenter.java b/app/src/main/java/org/apache/taverna/mobile/ui/workflow/WorkflowPresenter.java
index d378d9c..fd5bdcd 100644
--- a/app/src/main/java/org/apache/taverna/mobile/ui/workflow/WorkflowPresenter.java
+++ b/app/src/main/java/org/apache/taverna/mobile/ui/workflow/WorkflowPresenter.java
@@ -32,25 +32,21 @@ import java.util.HashMap;
 import java.util.Map;
 import java.util.concurrent.TimeUnit;
 
-import rx.Observer;
-import rx.Subscriber;
-import rx.Subscription;
-import rx.android.schedulers.AndroidSchedulers;
-import rx.schedulers.Schedulers;
-import rx.subscriptions.CompositeSubscription;
-
+import io.reactivex.android.schedulers.AndroidSchedulers;
+import io.reactivex.disposables.CompositeDisposable;
+import io.reactivex.observers.DisposableObserver;
+import io.reactivex.schedulers.Schedulers;
 
 public class WorkflowPresenter extends BasePresenter<WorkflowMvpView> {
 
     public final String LOG_TAG = WorkflowPresenter.class.getSimpleName();
     private DataManager mDataManager;
-    private Subscription mSearchViewSubscription;
-    private CompositeSubscription mSubscriptions;
+    private CompositeDisposable compositeDisposable;
 
 
     public WorkflowPresenter(DataManager dataManager) {
         mDataManager = dataManager;
-        mSubscriptions = new CompositeSubscription();
+        compositeDisposable = new CompositeDisposable();
     }
 
     @Override
@@ -61,19 +57,21 @@ public class WorkflowPresenter extends BasePresenter<WorkflowMvpView> {
     @Override
     public void detachView() {
         super.detachView();
-        if (mSubscriptions != null) mSubscriptions.unsubscribe();
-
+        compositeDisposable.clear();
     }
 
     public void loadAllWorkflow(int pageNumber) {
+        checkViewAttached();
         getMvpView().showProgressbar(true);
-
-        mSubscriptions.add(mDataManager.getAllWorkflow(getQueryOptions(pageNumber))
+        compositeDisposable.add(mDataManager.getAllWorkflow(getQueryOptions(pageNumber))
                 .observeOn(AndroidSchedulers.mainThread())
                 .subscribeOn(Schedulers.io())
-                .subscribe(new Observer<Workflows>() {
+                .subscribeWith(new DisposableObserver<Workflows>() {
                     @Override
-                    public void onCompleted() {
+                    public void onNext(Workflows workflows) {
+                        getMvpView().showProgressbar(false);
+                        getMvpView().removeLoadMoreProgressbar();
+                        getMvpView().showWorkflows(workflows);
                     }
 
                     @Override
@@ -84,25 +82,27 @@ public class WorkflowPresenter extends BasePresenter<WorkflowMvpView> {
                     }
 
                     @Override
-                    public void onNext(Workflows workflows) {
-                        getMvpView().showProgressbar(false);
-                        getMvpView().removeLoadMoreProgressbar();
-                        getMvpView().showWorkflows(workflows);
+                    public void onComplete() {
+
                     }
                 }));
 
     }
 
     public void attachSearchHandler(final SearchView searchView) {
-        mSearchViewSubscription = RxSearch.fromSearchView(searchView)
+        checkViewAttached();
+        compositeDisposable.add(RxSearch.fromSearchView(searchView)
                 .distinctUntilChanged()
                 .debounce(300, TimeUnit.MILLISECONDS)
                 .observeOn(AndroidSchedulers.mainThread())
                 .subscribeOn(Schedulers.io())
-                .subscribe(new Subscriber<String>() {
+                .subscribeWith(new DisposableObserver<String>() {
                     @Override
-                    public void onCompleted() {
-
+                    public void onNext(String s) {
+                        getMvpView().performSearch(s);
+                        if (!TextUtils.isEmpty(s)) {
+                            searchWorkflow(1, s);
+                        }
                     }
 
                     @Override
@@ -111,33 +111,36 @@ public class WorkflowPresenter extends BasePresenter<WorkflowMvpView> {
                     }
 
                     @Override
-                    public void onNext(String s) {
-                        getMvpView().performSearch(s);
-                        if (!TextUtils.isEmpty(s)) {
-                            searchWorkflow(1, s);
-                        }
+                    public void onComplete() {
+
                     }
-                });
-        mSubscriptions.add(mSearchViewSubscription);
+                }));
+        compositeDisposable.add(compositeDisposable);
     }
 
     public void detachSearchHandler() {
-        if (mSearchViewSubscription != null) mSearchViewSubscription.unsubscribe();
+        compositeDisposable.clear();
     }
 
     public void searchWorkflow(int pageNumber, String query) {
+        checkViewAttached();
         if (!TextUtils.isEmpty(query)) {
             if (pageNumber == 1) {
                 getMvpView().showSwipeRefreshLayout(true);
             }
-            mSubscriptions.add(mDataManager.getSearchWorkflowResult(getSearchQueryOptions
+            compositeDisposable.add(mDataManager.getSearchWorkflowResult(getSearchQueryOptions
                     (pageNumber, query))
                     .observeOn(AndroidSchedulers.mainThread())
                     .subscribeOn(Schedulers.io())
-                    .subscribe(new Subscriber<Search>() {
+                    .subscribeWith(new DisposableObserver<Search>() {
                         @Override
-                        public void onCompleted() {
-                            getMvpView().showSwipeRefreshLayout(false);
+                        public void onNext(Search search) {
+                            getMvpView().removeLoadMoreProgressbar();
+                            if (search.getWorkflowList().size() > 0) {
+                                getMvpView().showSearchResult(search.getWorkflowList());
+                            } else {
+                                getMvpView().showSnackBar(R.string.msg_no_workflow_found);
+                            }
                         }
 
                         @Override
@@ -146,13 +149,8 @@ public class WorkflowPresenter extends BasePresenter<WorkflowMvpView> {
                         }
 
                         @Override
-                        public void onNext(Search search) {
-                            getMvpView().removeLoadMoreProgressbar();
-                            if (search.getWorkflowList().size() > 0) {
-                                getMvpView().showSearchResult(search.getWorkflowList());
-                            } else {
-                                getMvpView().showSnackBar(R.string.msg_no_workflow_found);
-                            }
+                        public void onComplete() {
+                            getMvpView().showSwipeRefreshLayout(false);
                         }
                     }));
         }
@@ -167,13 +165,10 @@ public class WorkflowPresenter extends BasePresenter<WorkflowMvpView> {
         return option;
     }
 
-
     private Map<String, String> getSearchQueryOptions(int pageNumber, String query) {
         Map<String, String> option = getQueryOptions(pageNumber);
         option.put("query", query);
         option.put("type", "workflow");
         return option;
     }
-
-
-}
\ No newline at end of file
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/3e921aca/app/src/main/java/org/apache/taverna/mobile/ui/workflowdetail/WorkflowDetailPresenter.java
----------------------------------------------------------------------
diff --git a/app/src/main/java/org/apache/taverna/mobile/ui/workflowdetail/WorkflowDetailPresenter.java b/app/src/main/java/org/apache/taverna/mobile/ui/workflowdetail/WorkflowDetailPresenter.java
index e3df516..2af95af 100644
--- a/app/src/main/java/org/apache/taverna/mobile/ui/workflowdetail/WorkflowDetailPresenter.java
+++ b/app/src/main/java/org/apache/taverna/mobile/ui/workflowdetail/WorkflowDetailPresenter.java
@@ -27,22 +27,20 @@ import org.apache.taverna.mobile.ui.base.BasePresenter;
 import java.util.HashMap;
 import java.util.Map;
 
-import rx.Observer;
-import rx.android.schedulers.AndroidSchedulers;
-import rx.schedulers.Schedulers;
-import rx.subscriptions.CompositeSubscription;
+import io.reactivex.android.schedulers.AndroidSchedulers;
+import io.reactivex.disposables.CompositeDisposable;
+import io.reactivex.observers.DisposableObserver;
+import io.reactivex.schedulers.Schedulers;
 
 public class WorkflowDetailPresenter extends BasePresenter<WorkflowDetailMvpView> {
 
     public final String LOG_TAG = getClass().getSimpleName();
     private DataManager mDataManager;
-    private CompositeSubscription mCompositeSubscription;
-
+    private CompositeDisposable compositeDisposable;
 
     public WorkflowDetailPresenter(DataManager dataManager) {
-
         mDataManager = dataManager;
-        mCompositeSubscription = new CompositeSubscription();
+        compositeDisposable = new CompositeDisposable();
     }
 
     @Override
@@ -53,19 +51,21 @@ public class WorkflowDetailPresenter extends BasePresenter<WorkflowDetailMvpView
     @Override
     public void detachView() {
         super.detachView();
-        if (mCompositeSubscription != null) mCompositeSubscription.unsubscribe();
+        compositeDisposable.clear();
     }
 
     public void loadWorkflowDetail(String id) {
+        checkViewAttached();
         getMvpView().showProgressbar(true);
-
-        mCompositeSubscription.add(mDataManager.getDetailWorkflow(id, getDetailQueryOptions())
+        compositeDisposable.add(mDataManager.getDetailWorkflow(id, getDetailQueryOptions())
                 .observeOn(AndroidSchedulers.mainThread())
                 .subscribeOn(Schedulers.io())
-                .subscribe(new Observer<Workflow>() {
+                .subscribeWith(new DisposableObserver<Workflow>() {
                     @Override
-                    public void onCompleted() {
-                        getMvpView().showProgressbar(false);
+                    public void onNext(Workflow workflow) {
+                        getMvpView().showWorkflowDetail(workflow);
+                        loadUserDetail(workflow.getUploader().getId());
+                        getFavourite(workflow.getId());
                     }
 
                     @Override
@@ -74,25 +74,22 @@ public class WorkflowDetailPresenter extends BasePresenter<WorkflowDetailMvpView
                     }
 
                     @Override
-                    public void onNext(Workflow workflow) {
-                        getMvpView().showWorkflowDetail(workflow);
-                        loadUserDetail(workflow.getUploader().getId());
-                        getFavourite(workflow.getId());
+                    public void onComplete() {
+                        getMvpView().showProgressbar(false);
                     }
                 }));
     }
 
     private void loadUserDetail(String id) {
-
+        checkViewAttached();
         getMvpView().showProgressbar(true);
-
-        mCompositeSubscription.add(mDataManager.getUserDetail(id, getUserQueryOptions())
+        compositeDisposable.add(mDataManager.getUserDetail(id, getUserQueryOptions())
                 .observeOn(AndroidSchedulers.mainThread())
                 .subscribeOn(Schedulers.io())
-                .subscribe(new Observer<User>() {
+                .subscribeWith(new DisposableObserver<User>() {
                     @Override
-                    public void onCompleted() {
-                        getMvpView().showProgressbar(false);
+                    public void onNext(User user) {
+                        getMvpView().setImage(user);
                     }
 
                     @Override
@@ -103,23 +100,22 @@ public class WorkflowDetailPresenter extends BasePresenter<WorkflowDetailMvpView
                     }
 
                     @Override
-                    public void onNext(User user) {
-                        getMvpView().setImage(user);
+                    public void onComplete() {
+                        getMvpView().showProgressbar(false);
                     }
                 }));
     }
 
     public void loadLicenseDetail(String id) {
-
+        checkViewAttached();
         getMvpView().showLicenseProgress(true);
-
-        mCompositeSubscription.add(mDataManager.getLicenseDetail(id, getLicenceQueryOptions())
+        compositeDisposable.add(mDataManager.getLicenseDetail(id, getLicenceQueryOptions())
                 .observeOn(AndroidSchedulers.mainThread())
                 .subscribeOn(Schedulers.io())
-                .subscribe(new Observer<License>() {
+                .subscribeWith(new DisposableObserver<License>() {
                     @Override
-                    public void onCompleted() {
-                        getMvpView().showLicenseProgress(false);
+                    public void onNext(License license) {
+                        getMvpView().showLicense(license);
                     }
 
                     @Override
@@ -130,22 +126,26 @@ public class WorkflowDetailPresenter extends BasePresenter<WorkflowDetailMvpView
                     }
 
                     @Override
-                    public void onNext(License license) {
-                        getMvpView().showLicense(license);
+                    public void onComplete() {
+                        getMvpView().showLicenseProgress(false);
                     }
                 }));
     }
 
     public void setFavourite(String id) {
-
-
-        mCompositeSubscription.add(mDataManager.setFavoriteWorkflow(id)
+        checkViewAttached();
+        compositeDisposable.add(mDataManager.setFavoriteWorkflow(id)
                 .observeOn(AndroidSchedulers.mainThread())
                 .subscribeOn(Schedulers.io())
-                .subscribe(new Observer<Boolean>() {
+                .subscribeWith(new DisposableObserver<Boolean>() {
                     @Override
-                    public void onCompleted() {
-
+                    public void onNext(Boolean b) {
+                        if (b) {
+                            getMvpView().setFavouriteIcon();
+                        } else {
+                            getMvpView().showErrorSnackBar("Something went wrong please try after" +
+                                    "sometime");
+                        }
                     }
 
                     @Override
@@ -155,28 +155,21 @@ public class WorkflowDetailPresenter extends BasePresenter<WorkflowDetailMvpView
                     }
 
                     @Override
-                    public void onNext(Boolean b) {
-                        if (b) {
-                            getMvpView().setFavouriteIcon();
-                        } else {
-                            getMvpView().showErrorSnackBar("Something went wrong please try after" +
-                                    "sometime");
-                        }
+                    public void onComplete() {
 
                     }
                 }));
     }
 
     public void getFavourite(String id) {
-
-
-        mCompositeSubscription.add(mDataManager.getFavoriteWorkflow(id)
+        checkViewAttached();
+        compositeDisposable.add(mDataManager.getFavoriteWorkflow(id)
                 .observeOn(AndroidSchedulers.mainThread())
                 .subscribeOn(Schedulers.io())
-                .subscribe(new Observer<Boolean>() {
+                .subscribeWith(new DisposableObserver<Boolean>() {
                     @Override
-                    public void onCompleted() {
-
+                    public void onNext(Boolean b) {
+                        getMvpView().getFavouriteIcon(b);
                     }
 
                     @Override
@@ -186,15 +179,14 @@ public class WorkflowDetailPresenter extends BasePresenter<WorkflowDetailMvpView
                     }
 
                     @Override
-                    public void onNext(Boolean b) {
-                        getMvpView().getFavouriteIcon(b);
+                    public void onComplete() {
+
                     }
                 }));
     }
 
 
     private Map<String, String> getDetailQueryOptions() {
-
         Map<String, String> option = new HashMap<>();
         option.put("elements", "id,title,type,uploader,preview,created-at,svg,updated-at," +
                 "description,license-type,tags,content-uri");
@@ -202,25 +194,20 @@ public class WorkflowDetailPresenter extends BasePresenter<WorkflowDetailMvpView
     }
 
     private Map<String, String> getUserQueryOptions() {
-
         Map<String, String> option = new HashMap<>();
         option.put("elements", "avatar");
         return option;
     }
 
     private Map<String, String> getLicenceQueryOptions() {
-
         Map<String, String> option = new HashMap<>();
         option.put("elements", "title,description,url,created-at");
         return option;
     }
 
     private Map<String, String> getUserWorkflowsQueryOptions() {
-
         Map<String, String> option = new HashMap<>();
         option.put("elements", "workflow");
         return option;
     }
-
-
 }

http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/3e921aca/app/src/main/java/org/apache/taverna/mobile/ui/workflowrun/WorkflowRunPresenter.java
----------------------------------------------------------------------
diff --git a/app/src/main/java/org/apache/taverna/mobile/ui/workflowrun/WorkflowRunPresenter.java b/app/src/main/java/org/apache/taverna/mobile/ui/workflowrun/WorkflowRunPresenter.java
index afb8761..cc56c40 100644
--- a/app/src/main/java/org/apache/taverna/mobile/ui/workflowrun/WorkflowRunPresenter.java
+++ b/app/src/main/java/org/apache/taverna/mobile/ui/workflowrun/WorkflowRunPresenter.java
@@ -31,50 +31,48 @@ import java.io.BufferedReader;
 import java.io.IOException;
 import java.io.InputStreamReader;
 
+import io.reactivex.Observable;
+import io.reactivex.ObservableSource;
+import io.reactivex.android.schedulers.AndroidSchedulers;
+import io.reactivex.disposables.CompositeDisposable;
+import io.reactivex.functions.Function;
+import io.reactivex.observers.DisposableObserver;
+import io.reactivex.schedulers.Schedulers;
 import okhttp3.MediaType;
 import okhttp3.RequestBody;
 import okhttp3.ResponseBody;
-import rx.Observable;
-import rx.Observer;
-import rx.Subscription;
-import rx.android.schedulers.AndroidSchedulers;
-import rx.functions.Func1;
-import rx.schedulers.Schedulers;
 
 public class WorkflowRunPresenter extends BasePresenter<WorkflowRunMvpView> {
 
     private static final String TAG = WorkflowRunPresenter.class.getSimpleName();
-    private final DataManager mDataManager;
-    private Subscription mSubscriptions;
 
+    private final DataManager mDataManager;
+    private CompositeDisposable compositeDisposable;
 
     public WorkflowRunPresenter(DataManager dataManager) {
         mDataManager = dataManager;
-
+        compositeDisposable = new CompositeDisposable();
     }
 
     @Override
     public void attachView(WorkflowRunMvpView mvpView) {
-
         super.attachView(mvpView);
-
     }
 
     @Override
     public void detachView() {
         super.detachView();
-        if (mSubscriptions != null) mSubscriptions.unsubscribe();
+        compositeDisposable.clear();
     }
 
-
     public void runWorkflow(String contentURL) {
-        if (mSubscriptions != null) mSubscriptions.unsubscribe();
+        compositeDisposable.clear();
+        compositeDisposable.add(mDataManager.downloadWorkflowContent(contentURL)
+                .concatMap(new Function<ResponseBody, ObservableSource<PlayerWorkflow>>() {
 
-        mSubscriptions = mDataManager.downloadWorkflowContent(contentURL)
-                .concatMap(new Func1<ResponseBody, Observable<PlayerWorkflow>>() {
                     @Override
-                    public Observable<PlayerWorkflow> call(ResponseBody responseBody) {
-
+                    public ObservableSource<PlayerWorkflow> apply(ResponseBody responseBody)
+                            throws Exception {
                         StringBuffer sb = new StringBuffer();
                         String post = "";
 
@@ -111,38 +109,34 @@ public class WorkflowRunPresenter extends BasePresenter<WorkflowRunMvpView> {
                         } else {
                             return Observable.empty();
                         }
-
-
                     }
                 })
-                .concatMap(new Func1<PlayerWorkflow, Observable<PlayerWorkflowDetail>>() {
-                    @Override
-                    public Observable<PlayerWorkflowDetail> call(PlayerWorkflow playerWorkflow) {
+                .concatMap(new Function<PlayerWorkflow, ObservableSource<PlayerWorkflowDetail>>() {
 
+                    @Override
+                    public ObservableSource<PlayerWorkflowDetail> apply(
+                            PlayerWorkflow playerWorkflow) throws Exception {
                         return mDataManager.getWorkflowDetail(playerWorkflow.getId());
                     }
                 })
                 .observeOn(AndroidSchedulers.mainThread())
                 .subscribeOn(Schedulers.io())
-                .subscribe(new Observer<PlayerWorkflowDetail>() {
+                .subscribeWith(new DisposableObserver<PlayerWorkflowDetail>() {
                     @Override
-                    public void onCompleted() {
-                        getMvpView().movetoInputs();
+                    public void onNext(PlayerWorkflowDetail playerWorkflowDetail) {
+                        getMvpView().setInputsAttribute(playerWorkflowDetail.getRun()
+                                .getWorkflowId());
                     }
 
                     @Override
                     public void onError(Throwable e) {
-
                         getMvpView().showError();
                     }
 
                     @Override
-                    public void onNext(PlayerWorkflowDetail playerWorkflowDetail) {
-                        getMvpView().setInputsAttribute(playerWorkflowDetail.getRun()
-                                .getWorkflowId());
+                    public void onComplete() {
+
                     }
-                });
+                }));
     }
-
-
 }

http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/3e921aca/app/src/main/java/org/apache/taverna/mobile/utils/RxSearch.java
----------------------------------------------------------------------
diff --git a/app/src/main/java/org/apache/taverna/mobile/utils/RxSearch.java b/app/src/main/java/org/apache/taverna/mobile/utils/RxSearch.java
index bf5b560..f05d002 100644
--- a/app/src/main/java/org/apache/taverna/mobile/utils/RxSearch.java
+++ b/app/src/main/java/org/apache/taverna/mobile/utils/RxSearch.java
@@ -3,21 +3,21 @@ package org.apache.taverna.mobile.utils;
 import android.support.annotation.NonNull;
 import android.support.v7.widget.SearchView;
 
-import rx.Observable;
-import rx.subjects.BehaviorSubject;
+import io.reactivex.Observable;
+import io.reactivex.subjects.BehaviorSubject;
 
 
 public class RxSearch {
 
     public static Observable<String> fromSearchView(@NonNull final SearchView searchView) {
-        final BehaviorSubject<String> subject = BehaviorSubject.create("");
+        final BehaviorSubject<String> subject = BehaviorSubject.create();
 
         searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
 
             @Override
             public boolean onQueryTextSubmit(String query) {
                 subject.onNext(query);
-                subject.onCompleted();
+                subject.onComplete();
                 searchView.clearFocus();
                 return true;
             }

http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/3e921aca/app/src/test/java/org/apache/taverna/mobile/AnnouncementPresenterTest.java
----------------------------------------------------------------------
diff --git a/app/src/test/java/org/apache/taverna/mobile/AnnouncementPresenterTest.java b/app/src/test/java/org/apache/taverna/mobile/AnnouncementPresenterTest.java
index b61b17c..6150a73 100644
--- a/app/src/test/java/org/apache/taverna/mobile/AnnouncementPresenterTest.java
+++ b/app/src/test/java/org/apache/taverna/mobile/AnnouncementPresenterTest.java
@@ -15,7 +15,7 @@ import org.junit.runner.RunWith;
 import org.mockito.Mock;
 import org.mockito.runners.MockitoJUnitRunner;
 
-import rx.Observable;
+import io.reactivex.Observable;
 
 import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.verify;

http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/3e921aca/app/src/test/java/org/apache/taverna/mobile/FavouriteWorkflowsPresenterTest.java
----------------------------------------------------------------------
diff --git a/app/src/test/java/org/apache/taverna/mobile/FavouriteWorkflowsPresenterTest.java b/app/src/test/java/org/apache/taverna/mobile/FavouriteWorkflowsPresenterTest.java
index 9561475..3a29ec9 100644
--- a/app/src/test/java/org/apache/taverna/mobile/FavouriteWorkflowsPresenterTest.java
+++ b/app/src/test/java/org/apache/taverna/mobile/FavouriteWorkflowsPresenterTest.java
@@ -17,7 +17,7 @@ import org.mockito.runners.MockitoJUnitRunner;
 import java.util.ArrayList;
 import java.util.List;
 
-import rx.Observable;
+import io.reactivex.Observable;
 
 import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.verify;

http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/3e921aca/app/src/test/java/org/apache/taverna/mobile/utils/RxSchedulersOverrideRule.java
----------------------------------------------------------------------
diff --git a/app/src/test/java/org/apache/taverna/mobile/utils/RxSchedulersOverrideRule.java b/app/src/test/java/org/apache/taverna/mobile/utils/RxSchedulersOverrideRule.java
index d1e9142..b6be49f 100644
--- a/app/src/test/java/org/apache/taverna/mobile/utils/RxSchedulersOverrideRule.java
+++ b/app/src/test/java/org/apache/taverna/mobile/utils/RxSchedulersOverrideRule.java
@@ -4,52 +4,55 @@ import org.junit.rules.TestRule;
 import org.junit.runner.Description;
 import org.junit.runners.model.Statement;
 
-import rx.Scheduler;
-import rx.android.plugins.RxAndroidPlugins;
-import rx.android.plugins.RxAndroidSchedulersHook;
-import rx.plugins.RxJavaPlugins;
-import rx.plugins.RxJavaSchedulersHook;
-import rx.schedulers.Schedulers;
+import java.util.concurrent.Callable;
 
+import io.reactivex.Scheduler;
+import io.reactivex.android.plugins.RxAndroidPlugins;
+import io.reactivex.functions.Function;
+import io.reactivex.plugins.RxJavaPlugins;
+import io.reactivex.schedulers.Schedulers;
 
-public class RxSchedulersOverrideRule implements TestRule {
-
-    private final RxJavaSchedulersHook mRxJavaSchedulersHook = new RxJavaSchedulersHook() {
-        @Override
-        public Scheduler getIOScheduler() {
-            return Schedulers.immediate();
-        }
-
-        @Override
-        public Scheduler getNewThreadScheduler() {
-            return Schedulers.immediate();
-        }
-    };
 
-    private final RxAndroidSchedulersHook mRxAndroidSchedulersHook = new RxAndroidSchedulersHook() {
-        @Override
-        public Scheduler getMainThreadScheduler() {
-            return Schedulers.immediate();
-        }
-    };
+public class RxSchedulersOverrideRule implements TestRule {
 
+    private final Function<Callable<Scheduler>, Scheduler> mRxAndroidSchedulersHook =
+            new Function<Callable<Scheduler>, Scheduler>() {
+                @Override
+                public Scheduler apply(Callable<Scheduler> schedulerCallable)
+                        throws Exception {
+                    return getScheduler();
+                }
+            };
+
+    private final Function<Scheduler, Scheduler> mRxJavaImmediateScheduler =
+            new Function<Scheduler, Scheduler>() {
+                @Override
+                public Scheduler apply(Scheduler scheduler) throws Exception {
+                    return getScheduler();
+                }
+            };
 
     @Override
     public Statement apply(final Statement base, Description description) {
         return new Statement() {
             @Override
             public void evaluate() throws Throwable {
+                RxAndroidPlugins.reset();
+                RxAndroidPlugins.setInitMainThreadSchedulerHandler(mRxAndroidSchedulersHook);
 
-                RxAndroidPlugins.getInstance().reset();
-                RxAndroidPlugins.getInstance().registerSchedulersHook(mRxAndroidSchedulersHook);
-                RxJavaPlugins.getInstance().reset();
-                RxJavaPlugins.getInstance().registerSchedulersHook(mRxJavaSchedulersHook);
+                RxJavaPlugins.reset();
+                RxJavaPlugins.setIoSchedulerHandler(mRxJavaImmediateScheduler);
+                RxJavaPlugins.setNewThreadSchedulerHandler(mRxJavaImmediateScheduler);
 
                 base.evaluate();
 
-                RxAndroidPlugins.getInstance().reset();
-                RxJavaPlugins.getInstance().reset();
+                RxAndroidPlugins.reset();
+                RxJavaPlugins.reset();
             }
         };
     }
-}
\ No newline at end of file
+
+    public Scheduler getScheduler() {
+        return Schedulers.trampoline();
+    }
+}


[3/6] incubator-taverna-mobile git commit: fix: Announcement test

Posted by sa...@apache.org.
fix: Announcement test


Project: http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/commit/9ae91865
Tree: http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/tree/9ae91865
Diff: http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/diff/9ae91865

Branch: refs/heads/master
Commit: 9ae9186588297ba90b6697588b6c5862eaed6697
Parents: 3e921ac
Author: Hitesh Gautam <ga...@gmail.com>
Authored: Mon Feb 19 15:58:18 2018 +0530
Committer: Hitesh Gautam <ga...@gmail.com>
Committed: Mon Feb 19 15:58:18 2018 +0530

----------------------------------------------------------------------
 app/src/test/resources/announcement.xml | 1 +
 1 file changed, 1 insertion(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/9ae91865/app/src/test/resources/announcement.xml
----------------------------------------------------------------------
diff --git a/app/src/test/resources/announcement.xml b/app/src/test/resources/announcement.xml
index f71df85..78e9c63 100644
--- a/app/src/test/resources/announcement.xml
+++ b/app/src/test/resources/announcement.xml
@@ -1,5 +1,6 @@
 <?xml version='1.0' encoding='UTF-8'?>
 <announcement uri='http://www.myexperiment.org/announcement.xml?id=6' resource='http://www.myexperiment.org/announcements/6'>
+  <id>1</id>
   <author uri='http://www.myexperiment.org/user.xml?id=16' resource='http://www.myexperiment.org/users/16'>David De Roure</author>
   <title>myExperiment in IEEE Intelligent Systems</title>
   <text>&lt;p&gt;myExperiment is discussed by Jim Hendler in his article &lt;i&gt;Reinventing Academic Publishing, Part 3 &lt;/i&gt;in IEEE Intelligent Systems January/February 2008, page 2-3.&lt;/p&gt;</text>


[6/6] incubator-taverna-mobile git commit: This close #56

Posted by sa...@apache.org.
This close #56


Project: http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/commit/a716e2ff
Tree: http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/tree/a716e2ff
Diff: http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/diff/a716e2ff

Branch: refs/heads/master
Commit: a716e2ffc0209e05d2e89ea91d2a2bc841cbf0df
Parents: eaa93fd 55a8d96
Author: Sagar <ku...@gmail.com>
Authored: Tue Feb 20 10:30:07 2018 +0530
Committer: Sagar <ku...@gmail.com>
Committed: Tue Feb 20 10:30:07 2018 +0530

----------------------------------------------------------------------
 app/build.gradle                                |  15 ++-
 .../apache/taverna/mobile/data/DataManager.java |  24 ++--
 .../taverna/mobile/data/local/DBHelper.java     |  79 +++++--------
 .../mobile/data/local/PreferencesHelper.java    |  12 +-
 .../mobile/data/remote/BaseApiManager.java      |   6 +-
 .../data/remote/TavernaPlayerService.java       |   3 +-
 .../mobile/data/remote/TavernaService.java      |   2 +-
 .../ui/anouncements/AnnouncementPresenter.java  |  59 +++++-----
 .../FavouriteWorkflowsPresenter.java            |  48 ++++----
 .../FavouriteWorkflowDetailPresenter.java       | 111 ++++++++-----------
 .../taverna/mobile/ui/login/LoginPresenter.java |  33 +++---
 .../ui/myworkflows/MyWorkflowPresenter.java     |  58 +++++-----
 .../ui/playerlogin/PlayerLoginPresenter.java    |  38 +++----
 .../mobile/ui/workflow/WorkflowPresenter.java   |  88 +++++++--------
 .../workflowdetail/WorkflowDetailPresenter.java | 109 ++++++++----------
 .../ui/workflowrun/WorkflowRunPresenter.java    |  60 +++++-----
 .../apache/taverna/mobile/utils/RxSearch.java   |   8 +-
 .../mobile/AnnouncementPresenterTest.java       |   2 +-
 .../mobile/FavouriteWorkflowsPresenterTest.java |   2 +-
 .../mobile/utils/RxSchedulersOverrideRule.java  |  67 +++++------
 app/src/test/resources/announcement.xml         |   1 +
 build.gradle                                    |   2 +
 22 files changed, 380 insertions(+), 447 deletions(-)
----------------------------------------------------------------------



[4/6] incubator-taverna-mobile git commit: Migration RxJava1 -> RxJava2 (Updated)

Posted by sa...@apache.org.
Migration RxJava1 -> RxJava2 (Updated)


Project: http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/commit/1e8f57b8
Tree: http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/tree/1e8f57b8
Diff: http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/diff/1e8f57b8

Branch: refs/heads/master
Commit: 1e8f57b8b9ec85995fdced7a538143665dbd66a1
Parents: 9ae9186
Author: Hitesh Gautam <ga...@gmail.com>
Authored: Tue Feb 20 03:20:48 2018 +0530
Committer: Hitesh Gautam <ga...@gmail.com>
Committed: Tue Feb 20 03:20:48 2018 +0530

----------------------------------------------------------------------
 .../apache/taverna/mobile/data/local/PreferencesHelper.java   | 6 ------
 .../ui/favouriteworkflow/FavouriteWorkflowsPresenter.java     | 4 ++--
 .../FavouriteWorkflowDetailPresenter.java                     | 6 ++----
 .../org/apache/taverna/mobile/ui/login/LoginPresenter.java    | 7 +++----
 .../taverna/mobile/ui/playerlogin/PlayerLoginPresenter.java   | 1 -
 .../apache/taverna/mobile/ui/workflow/WorkflowPresenter.java  | 1 -
 .../taverna/mobile/ui/workflowrun/WorkflowRunPresenter.java   | 2 +-
 build.gradle                                                  | 2 ++
 8 files changed, 10 insertions(+), 19 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/1e8f57b8/app/src/main/java/org/apache/taverna/mobile/data/local/PreferencesHelper.java
----------------------------------------------------------------------
diff --git a/app/src/main/java/org/apache/taverna/mobile/data/local/PreferencesHelper.java b/app/src/main/java/org/apache/taverna/mobile/data/local/PreferencesHelper.java
index 6593e0b..ee702ae 100644
--- a/app/src/main/java/org/apache/taverna/mobile/data/local/PreferencesHelper.java
+++ b/app/src/main/java/org/apache/taverna/mobile/data/local/PreferencesHelper.java
@@ -159,12 +159,6 @@ public class PreferencesHelper {
 
     public Observable<User> saveUserDetail(final User user) {
         return Observable.defer(new Callable<ObservableSource<? extends User>>() {
-            /**
-             * Computes a result, or throws an exception if unable to do so.
-             *
-             * @return computed result
-             * @throws Exception if unable to compute a result
-             */
             @Override
             public ObservableSource<? extends User> call() throws Exception {
                 if (user.getElementId() != null) {

http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/1e8f57b8/app/src/main/java/org/apache/taverna/mobile/ui/favouriteworkflow/FavouriteWorkflowsPresenter.java
----------------------------------------------------------------------
diff --git a/app/src/main/java/org/apache/taverna/mobile/ui/favouriteworkflow/FavouriteWorkflowsPresenter.java b/app/src/main/java/org/apache/taverna/mobile/ui/favouriteworkflow/FavouriteWorkflowsPresenter.java
index 886d84b..f0ab7bf 100644
--- a/app/src/main/java/org/apache/taverna/mobile/ui/favouriteworkflow/FavouriteWorkflowsPresenter.java
+++ b/app/src/main/java/org/apache/taverna/mobile/ui/favouriteworkflow/FavouriteWorkflowsPresenter.java
@@ -94,8 +94,8 @@ public class FavouriteWorkflowsPresenter extends BasePresenter<FavouriteWorkflow
                 .observeOn(AndroidSchedulers.mainThread())
                 .subscribeWith(new DisposableObserver<String>() {
                     @Override
-                    public void onNext(String s) {
-                        getMvpView().performSearch(s);
+                    public void onNext(String searchQuery) {
+                        getMvpView().performSearch(searchQuery);
                     }
 
                     @Override

http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/1e8f57b8/app/src/main/java/org/apache/taverna/mobile/ui/favouriteworkflowdetail/FavouriteWorkflowDetailPresenter.java
----------------------------------------------------------------------
diff --git a/app/src/main/java/org/apache/taverna/mobile/ui/favouriteworkflowdetail/FavouriteWorkflowDetailPresenter.java b/app/src/main/java/org/apache/taverna/mobile/ui/favouriteworkflowdetail/FavouriteWorkflowDetailPresenter.java
index ca747e9..fe03548 100644
--- a/app/src/main/java/org/apache/taverna/mobile/ui/favouriteworkflowdetail/FavouriteWorkflowDetailPresenter.java
+++ b/app/src/main/java/org/apache/taverna/mobile/ui/favouriteworkflowdetail/FavouriteWorkflowDetailPresenter.java
@@ -38,10 +38,8 @@ public class FavouriteWorkflowDetailPresenter extends
     public final String LOG_TAG = getClass().getSimpleName();
 
     private DataManager mDataManager;
-
     private CompositeDisposable compositeDisposable;
 
-
     public FavouriteWorkflowDetailPresenter(DataManager dataManager) {
         mDataManager = dataManager;
         compositeDisposable = new CompositeDisposable();
@@ -143,8 +141,8 @@ public class FavouriteWorkflowDetailPresenter extends
                 .subscribeOn(Schedulers.io())
                 .subscribeWith(new DisposableObserver<Boolean>() {
                     @Override
-                    public void onNext(Boolean b) {
-                        if (b) {
+                    public void onNext(Boolean favoriteStatus) {
+                        if (favoriteStatus) {
                             getMvpView().setFavouriteIcon();
                         } else {
                             getMvpView().showErrorSnackBar("Something went wrong please try after" +

http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/1e8f57b8/app/src/main/java/org/apache/taverna/mobile/ui/login/LoginPresenter.java
----------------------------------------------------------------------
diff --git a/app/src/main/java/org/apache/taverna/mobile/ui/login/LoginPresenter.java b/app/src/main/java/org/apache/taverna/mobile/ui/login/LoginPresenter.java
index ad47cc0..4b85914 100644
--- a/app/src/main/java/org/apache/taverna/mobile/ui/login/LoginPresenter.java
+++ b/app/src/main/java/org/apache/taverna/mobile/ui/login/LoginPresenter.java
@@ -36,7 +36,6 @@ public class LoginPresenter extends BasePresenter<LoginMvpView> {
     public final String LOG_TAG = getClass().getSimpleName();
 
     private DataManager mDataManager;
-
     private CompositeDisposable compositeDisposable;
 
     public LoginPresenter(DataManager dataManager) {
@@ -65,7 +64,8 @@ public class LoginPresenter extends BasePresenter<LoginMvpView> {
                 .subscribeWith(new DisposableObserver<User>() {
                     @Override
                     public void onNext(User value) {
-
+                        getMvpView().showDashboardActivity();
+                        getMvpView().showProgressDialog(false);
                     }
 
                     @Override
@@ -76,8 +76,7 @@ public class LoginPresenter extends BasePresenter<LoginMvpView> {
 
                     @Override
                     public void onComplete() {
-                        getMvpView().showDashboardActivity();
-                        getMvpView().showProgressDialog(false);
+
                     }
                 }));
     }

http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/1e8f57b8/app/src/main/java/org/apache/taverna/mobile/ui/playerlogin/PlayerLoginPresenter.java
----------------------------------------------------------------------
diff --git a/app/src/main/java/org/apache/taverna/mobile/ui/playerlogin/PlayerLoginPresenter.java b/app/src/main/java/org/apache/taverna/mobile/ui/playerlogin/PlayerLoginPresenter.java
index fbc00e4..b8a4d65 100644
--- a/app/src/main/java/org/apache/taverna/mobile/ui/playerlogin/PlayerLoginPresenter.java
+++ b/app/src/main/java/org/apache/taverna/mobile/ui/playerlogin/PlayerLoginPresenter.java
@@ -37,7 +37,6 @@ public class PlayerLoginPresenter extends BasePresenter<PlayerLoginMvpView> {
     private static final String TAG = PlayerLoginPresenter.class.getSimpleName();
 
     private DataManager mDataManager;
-
     private CompositeDisposable compositeDisposable;
 
     public PlayerLoginPresenter(DataManager dataManager) {

http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/1e8f57b8/app/src/main/java/org/apache/taverna/mobile/ui/workflow/WorkflowPresenter.java
----------------------------------------------------------------------
diff --git a/app/src/main/java/org/apache/taverna/mobile/ui/workflow/WorkflowPresenter.java b/app/src/main/java/org/apache/taverna/mobile/ui/workflow/WorkflowPresenter.java
index fd5bdcd..f73c83f 100644
--- a/app/src/main/java/org/apache/taverna/mobile/ui/workflow/WorkflowPresenter.java
+++ b/app/src/main/java/org/apache/taverna/mobile/ui/workflow/WorkflowPresenter.java
@@ -115,7 +115,6 @@ public class WorkflowPresenter extends BasePresenter<WorkflowMvpView> {
 
                     }
                 }));
-        compositeDisposable.add(compositeDisposable);
     }
 
     public void detachSearchHandler() {

http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/1e8f57b8/app/src/main/java/org/apache/taverna/mobile/ui/workflowrun/WorkflowRunPresenter.java
----------------------------------------------------------------------
diff --git a/app/src/main/java/org/apache/taverna/mobile/ui/workflowrun/WorkflowRunPresenter.java b/app/src/main/java/org/apache/taverna/mobile/ui/workflowrun/WorkflowRunPresenter.java
index cc56c40..a7ffcb8 100644
--- a/app/src/main/java/org/apache/taverna/mobile/ui/workflowrun/WorkflowRunPresenter.java
+++ b/app/src/main/java/org/apache/taverna/mobile/ui/workflowrun/WorkflowRunPresenter.java
@@ -66,7 +66,7 @@ public class WorkflowRunPresenter extends BasePresenter<WorkflowRunMvpView> {
     }
 
     public void runWorkflow(String contentURL) {
-        compositeDisposable.clear();
+        checkViewAttached();
         compositeDisposable.add(mDataManager.downloadWorkflowContent(contentURL)
                 .concatMap(new Function<ResponseBody, ObservableSource<PlayerWorkflow>>() {
 

http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/1e8f57b8/build.gradle
----------------------------------------------------------------------
diff --git a/build.gradle b/build.gradle
index e0c1c0a..832c021 100644
--- a/build.gradle
+++ b/build.gradle
@@ -39,6 +39,8 @@ ext {
     buildToolsVersion = '27.0.3'
 
     // App dependencies
+    rxJavaVersion = '2.0.1'
+    rxAndroidVersion = '2.0.1'
     supportLibraryVersion = '27.0.2'
     raizLabsDBFlow = '3.1.1'
     retrofitVersionLatest = '2.3.0'