aboutsummaryrefslogtreecommitdiffstats
path: root/main/src/cgeo/geocaching
diff options
context:
space:
mode:
Diffstat (limited to 'main/src/cgeo/geocaching')
-rw-r--r--main/src/cgeo/geocaching/NavigateAnyPointActivity.java17
-rw-r--r--main/src/cgeo/geocaching/settings/SettingsActivity.java30
-rw-r--r--main/src/cgeo/geocaching/utils/DatabaseBackupUtils.java71
-rw-r--r--main/src/cgeo/geocaching/utils/RxUtils.java20
4 files changed, 81 insertions, 57 deletions
diff --git a/main/src/cgeo/geocaching/NavigateAnyPointActivity.java b/main/src/cgeo/geocaching/NavigateAnyPointActivity.java
index d735a60..e75d6b1 100644
--- a/main/src/cgeo/geocaching/NavigateAnyPointActivity.java
+++ b/main/src/cgeo/geocaching/NavigateAnyPointActivity.java
@@ -19,14 +19,17 @@ import cgeo.geocaching.ui.dialog.CoordinatesInputDialog;
import cgeo.geocaching.ui.dialog.Dialogs;
import cgeo.geocaching.utils.Formatter;
import cgeo.geocaching.utils.Log;
+import cgeo.geocaching.utils.RxUtils;
import org.apache.commons.lang3.StringUtils;
import org.eclipse.jdt.annotation.Nullable;
+import rx.functions.Action0;
+import rx.schedulers.Schedulers;
+
import android.app.Activity;
import android.content.Context;
import android.content.res.Configuration;
-import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.view.MenuItemCompat;
import android.view.ContextMenu;
@@ -385,22 +388,20 @@ public class NavigateAnyPointActivity extends AbstractActionBarActivity implemen
if (!getHistoryOfSearchedLocations().contains(loc)) {
getHistoryOfSearchedLocations().add(0, loc);
-
- new AsyncTask<Void, Void, Void>() {
+ RxUtils.andThenOnUi(Schedulers.io(), new Action0() {
@Override
- protected Void doInBackground(final Void... params) {
+ public void call() {
// Save location
DataStore.saveSearchedDestination(loc);
- return null;
}
-
+ }, new Action0() {
@Override
- protected void onPostExecute(final Void v) {
+ public void call() {
// Ensure to remove the footer
historyListView.removeFooterView(getEmptyHistoryFooter());
destinationHistoryAdapter.notifyDataSetChanged();
}
- }.execute();
+ });
}
}
diff --git a/main/src/cgeo/geocaching/settings/SettingsActivity.java b/main/src/cgeo/geocaching/settings/SettingsActivity.java
index 6354278..b6b681d 100644
--- a/main/src/cgeo/geocaching/settings/SettingsActivity.java
+++ b/main/src/cgeo/geocaching/settings/SettingsActivity.java
@@ -15,10 +15,14 @@ import cgeo.geocaching.maps.interfaces.MapSource;
import cgeo.geocaching.utils.DatabaseBackupUtils;
import cgeo.geocaching.utils.DebugUtils;
import cgeo.geocaching.utils.Log;
+import cgeo.geocaching.utils.RxUtils;
import org.apache.commons.lang3.StringUtils;
import org.openintents.intents.FileManagerIntents;
+import rx.functions.Action0;
+import rx.schedulers.Schedulers;
+
import android.app.ProgressDialog;
import android.app.backup.BackupManager;
import android.content.ActivityNotFoundException;
@@ -296,7 +300,7 @@ public class SettingsActivity extends PreferenceActivity {
dirChooser.putExtra(FileManagerIntents.EXTRA_BUTTON_TEXT,
getString(android.R.string.ok));
startActivityForResult(dirChooser, dct.requestCode);
- } catch (final android.content.ActivityNotFoundException ignored) {
+ } catch (final ActivityNotFoundException ignored) {
// OI file manager not available
final Intent dirChooser = new Intent(this, SimpleDirChooser.class);
dirChooser.putExtra(Intents.EXTRA_START_DIR, startDirectory);
@@ -353,22 +357,20 @@ public class SettingsActivity extends PreferenceActivity {
final Resources res = getResources();
final SettingsActivity activity = SettingsActivity.this;
final ProgressDialog dialog = ProgressDialog.show(activity, res.getString(R.string.init_maintenance), res.getString(R.string.init_maintenance_directories), true, false);
- new Thread() {
+ RxUtils.andThenOnUi(Schedulers.io(), new Action0() {
@Override
- public void run() {
+ public void call() {
DataStore.removeObsoleteCacheDirectories();
- activity.runOnUiThread(new Runnable() {
- @Override
- public void run() {
- dialog.dismiss();
- }
- });
}
- }.start();
-
+ }, new Action0() {
+ @Override
+ public void call() {
+ dialog.dismiss();
+ }
+ });
return true;
- }
- });
+ }
+ });
final Preference memoryDumpPref = getPreference(R.string.pref_memory_dump);
memoryDumpPref
.setOnPreferenceClickListener(new OnPreferenceClickListener() {
@@ -702,8 +704,6 @@ public class SettingsActivity extends PreferenceActivity {
/**
* auto-care for the summary of the preference of string type with this key
- *
- * @param key
*/
private void bindSummaryToStringValue(final int key) {
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();
+ }
+ });
+ }
+
}