diff options
author | Samuel Tardieu <sam@rfc1149.net> | 2014-11-26 14:43:20 +0100 |
---|---|---|
committer | Samuel Tardieu <sam@rfc1149.net> | 2014-11-28 01:36:24 +0100 |
commit | 671c5f587f0f5da85193bd9edac6a750c8dc0cb9 (patch) | |
tree | 83e75707925d2313801a7d9d68ca6ea7d3cdd982 /main/src/cgeo/geocaching/utils | |
parent | 2c9bc25f35668e49dc8610ec889c3dc2f8f9bfed (diff) | |
download | cgeo-671c5f587f0f5da85193bd9edac6a750c8dc0cb9.zip cgeo-671c5f587f0f5da85193bd9edac6a750c8dc0cb9.tar.gz cgeo-671c5f587f0f5da85193bd9edac6a750c8dc0cb9.tar.bz2 |
Use Scheduler and helper for consecutive action on different threads
Diffstat (limited to 'main/src/cgeo/geocaching/utils')
-rw-r--r-- | main/src/cgeo/geocaching/utils/DatabaseBackupUtils.java | 71 | ||||
-rw-r--r-- | main/src/cgeo/geocaching/utils/RxUtils.java | 20 |
2 files changed, 57 insertions, 34 deletions
diff --git a/main/src/cgeo/geocaching/utils/DatabaseBackupUtils.java b/main/src/cgeo/geocaching/utils/DatabaseBackupUtils.java index d8aff74..e7e793f 100644 --- a/main/src/cgeo/geocaching/utils/DatabaseBackupUtils.java +++ b/main/src/cgeo/geocaching/utils/DatabaseBackupUtils.java @@ -7,6 +7,11 @@ import cgeo.geocaching.ui.dialog.Dialogs; import org.apache.commons.lang3.StringUtils; +import rx.functions.Action0; +import rx.functions.Action1; +import rx.functions.Func0; +import rx.schedulers.Schedulers; + import android.app.Activity; import android.app.ProgressDialog; import android.content.res.Resources; @@ -30,24 +35,23 @@ public class DatabaseBackupUtils { final Resources res = activity.getResources(); final ProgressDialog dialog = ProgressDialog.show(activity, res.getString(R.string.init_backup_restore), res.getString(R.string.init_restore_running), true, false); final AtomicBoolean restoreSuccessful = new AtomicBoolean(false); - new Thread() { + RxUtils.andThenOnUi(Schedulers.io(), new Action0() { @Override - public void run() { + public void call() { restoreSuccessful.set(DataStore.restoreDatabaseInternal()); - activity.runOnUiThread(new Runnable() { - @Override - public void run() { - dialog.dismiss(); - boolean restored = restoreSuccessful.get(); - String message = restored ? res.getString(R.string.init_restore_success) : res.getString(R.string.init_restore_failed); - Dialogs.message(activity, R.string.init_backup_restore, message); - if (activity instanceof MainActivity) { - ((MainActivity) activity).updateCacheCounter(); - } - } - }); } - }.start(); + }, new Action0() { + @Override + public void call() { + dialog.dismiss(); + boolean restored = restoreSuccessful.get(); + String message = restored ? res.getString(R.string.init_restore_success) : res.getString(R.string.init_restore_failed); + Dialogs.message(activity, R.string.init_backup_restore, message); + if (activity instanceof MainActivity) { + ((MainActivity) activity).updateCacheCounter(); + } + } + }); } public static boolean createBackup(final Activity activity, final Runnable runAfterwards) { @@ -61,27 +65,26 @@ public class DatabaseBackupUtils { final ProgressDialog dialog = ProgressDialog.show(activity, activity.getString(R.string.init_backup), activity.getString(R.string.init_backup_running), true, false); - new Thread() { + RxUtils.andThenOnUi(Schedulers.io(), new Func0<String>() { + @Override + public String call() { + return DataStore.backupDatabaseInternal(); + } + }, new Action1<String>() { @Override - public void run() { - final String backupFileName = DataStore.backupDatabaseInternal(); - activity.runOnUiThread(new Runnable() { - @Override - public void run() { - dialog.dismiss(); - Dialogs.message(activity, - R.string.init_backup_backup, - backupFileName != null - ? activity.getString(R.string.init_backup_success) - + "\n" + backupFileName - : activity.getString(R.string.init_backup_failed)); - if (runAfterwards != null) { - runAfterwards.run(); - } - } - }); + public void call(final String backupFileName) { + dialog.dismiss(); + Dialogs.message(activity, + R.string.init_backup_backup, + backupFileName != null + ? activity.getString(R.string.init_backup_success) + + "\n" + backupFileName + : activity.getString(R.string.init_backup_failed)); + if (runAfterwards != null) { + runAfterwards.run(); + } } - }.start(); + }); return true; } diff --git a/main/src/cgeo/geocaching/utils/RxUtils.java b/main/src/cgeo/geocaching/utils/RxUtils.java index 72e7630..6710105 100644 --- a/main/src/cgeo/geocaching/utils/RxUtils.java +++ b/main/src/cgeo/geocaching/utils/RxUtils.java @@ -16,6 +16,7 @@ import rx.observers.Subscribers; import rx.schedulers.Schedulers; import rx.subjects.PublishSubject; import rx.subscriptions.Subscriptions; +import rx.util.async.Async; import android.os.Handler; import android.os.HandlerThread; @@ -171,4 +172,23 @@ public class RxUtils { })).replay(1).refCount(); } + public static <T> void andThenOnUi(final Scheduler scheduler, final Func0<T> background, final Action1<T> foreground) { + Async.fromCallable(background, scheduler).observeOn(AndroidSchedulers.mainThread()).subscribe(foreground); + } + + public static void andThenOnUi(final Scheduler scheduler, final Action0 background, final Action0 foreground) { + andThenOnUi(scheduler, new Func0<Void>() { + @Override + public Void call() { + background.call(); + return null; + } + }, new Action1<Void>() { + @Override + public void call(final Void ignored) { + foreground.call(); + } + }); + } + } |