aboutsummaryrefslogtreecommitdiffstats
path: root/main/src/cgeo/geocaching/utils
diff options
context:
space:
mode:
authorSamuel Tardieu <sam@rfc1149.net>2014-11-26 14:43:20 +0100
committerSamuel Tardieu <sam@rfc1149.net>2014-11-28 01:36:24 +0100
commit671c5f587f0f5da85193bd9edac6a750c8dc0cb9 (patch)
tree83e75707925d2313801a7d9d68ca6ea7d3cdd982 /main/src/cgeo/geocaching/utils
parent2c9bc25f35668e49dc8610ec889c3dc2f8f9bfed (diff)
downloadcgeo-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.java71
-rw-r--r--main/src/cgeo/geocaching/utils/RxUtils.java20
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();
+ }
+ });
+ }
+
}