aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--main/src/cgeo/geocaching/CgeoApplication.java33
-rw-r--r--main/src/cgeo/geocaching/DataStore.java71
-rw-r--r--main/src/cgeo/geocaching/settings/SettingsActivity.java5
3 files changed, 50 insertions, 59 deletions
diff --git a/main/src/cgeo/geocaching/CgeoApplication.java b/main/src/cgeo/geocaching/CgeoApplication.java
index bb74b52..ef224ff 100644
--- a/main/src/cgeo/geocaching/CgeoApplication.java
+++ b/main/src/cgeo/geocaching/CgeoApplication.java
@@ -3,19 +3,13 @@ package cgeo.geocaching;
import cgeo.geocaching.sensors.DirectionProvider;
import cgeo.geocaching.sensors.GeoDataProvider;
import cgeo.geocaching.sensors.IGeoData;
-import cgeo.geocaching.ui.dialog.Dialogs;
import cgeo.geocaching.utils.Log;
import org.apache.commons.lang3.tuple.ImmutablePair;
import rx.Observable;
import rx.functions.Func2;
-import android.app.Activity;
import android.app.Application;
-import android.app.ProgressDialog;
-import android.content.res.Resources;
-
-import java.util.concurrent.atomic.AtomicBoolean;
public class CgeoApplication extends Application {
@@ -43,33 +37,6 @@ public class CgeoApplication extends Application {
DataStore.removeAllFromCache();
}
- /**
- * Move the database to/from external cgdata in a new thread,
- * showing a progress window
- *
- * @param fromActivity
- */
- public void moveDatabase(final Activity fromActivity) {
- final Resources res = this.getResources();
- final ProgressDialog dialog = ProgressDialog.show(fromActivity, res.getString(R.string.init_dbmove_dbmove), res.getString(R.string.init_dbmove_running), true, false);
- final AtomicBoolean atomic = new AtomicBoolean(false);
- new Thread() {
- @Override
- public void run() {
- atomic.set(DataStore.moveDatabase());
- fromActivity.runOnUiThread(new Runnable() {
- @Override
- public void run() {
- dialog.dismiss();
- boolean success = atomic.get();
- String message = success ? res.getString(R.string.init_dbmove_success) : res.getString(R.string.init_dbmove_failed);
- Dialogs.message(fromActivity, R.string.init_dbmove_dbmove, message);
- }
- });
- }
- }.start();
- }
-
public synchronized Observable<ImmutablePair<IGeoData, Float>> geoDirObservable() {
if (geoDir == null) {
geoDir = Observable.combineLatest(GeoDataProvider.create(this), DirectionProvider.create(this), new Func2<IGeoData, Float, ImmutablePair<IGeoData, Float>>() {
diff --git a/main/src/cgeo/geocaching/DataStore.java b/main/src/cgeo/geocaching/DataStore.java
index e219e1b..0585923 100644
--- a/main/src/cgeo/geocaching/DataStore.java
+++ b/main/src/cgeo/geocaching/DataStore.java
@@ -17,6 +17,7 @@ import cgeo.geocaching.list.AbstractList;
import cgeo.geocaching.list.PseudoList;
import cgeo.geocaching.list.StoredList;
import cgeo.geocaching.settings.Settings;
+import cgeo.geocaching.ui.dialog.Dialogs;
import cgeo.geocaching.utils.FileUtils;
import cgeo.geocaching.utils.Log;
@@ -24,8 +25,15 @@ import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.MapUtils;
import org.apache.commons.lang3.StringUtils;
import org.eclipse.jdt.annotation.NonNull;
+import rx.android.observables.AndroidObservable;
+import rx.functions.Action1;
+import rx.functions.Func0;
import rx.functions.Func1;
+import rx.schedulers.Schedulers;
+import rx.util.async.Async;
+import android.app.Activity;
+import android.app.ProgressDialog;
import android.app.SearchManager;
import android.content.ContentValues;
import android.content.Context;
@@ -377,30 +385,47 @@ public class DataStore {
return target.getPath();
}
- public static boolean moveDatabase() {
- if (!LocalStorage.isExternalStorageAvailable()) {
- Log.w("Database was not moved: external memory not available");
- return false;
- }
-
- closeDb();
-
- final File source = databasePath();
- final File target = databaseAlternatePath();
-
- if (!LocalStorage.copy(source, target)) {
- Log.e("Database could not be moved to " + target);
- init();
- return false;
- }
+ /**
+ * Move the database to/from external cgdata in a new thread,
+ * showing a progress window
+ *
+ * @param fromActivity
+ */
+ public static void moveDatabase(final Activity fromActivity) {
+ final ProgressDialog dialog = ProgressDialog.show(fromActivity, fromActivity.getString(R.string.init_dbmove_dbmove), fromActivity.getString(R.string.init_dbmove_running), true, false);
+ AndroidObservable.fromActivity(fromActivity, Async.fromFunc0(new Func0<Boolean>() {
+ @Override
+ public Boolean call() {
+ if (!LocalStorage.isExternalStorageAvailable()) {
+ Log.w("Database was not moved: external memory not available");
+ return false;
+ }
+ closeDb();
+
+ final File source = databasePath();
+ final File target = databaseAlternatePath();
+ if (!LocalStorage.copy(source, target)) {
+ Log.e("Database could not be moved to " + target);
+ init();
+ return false;
+ }
+ if (!FileUtils.delete(source)) {
+ Log.e("Original database could not be deleted during move");
+ }
+ Settings.setDbOnSDCard(!Settings.isDbOnSDCard());
+ Log.i("Database was moved to " + target);
- if (!FileUtils.delete(source)) {
- Log.e("Original database could not be deleted during move");
- }
- Settings.setDbOnSDCard(!Settings.isDbOnSDCard());
- Log.i("Database was moved to " + target);
- init();
- return true;
+ init();
+ return true;
+ }
+ })).subscribeOn(Schedulers.io()).subscribe(new Action1<Boolean>() {
+ @Override
+ public void call(final Boolean success) {
+ dialog.dismiss();
+ final String message = success ? fromActivity.getString(R.string.init_dbmove_success) : fromActivity.getString(R.string.init_dbmove_failed);
+ Dialogs.message(fromActivity, R.string.init_dbmove_dbmove, message);
+ }
+ });
}
private static File databasePath(final boolean internal) {
diff --git a/main/src/cgeo/geocaching/settings/SettingsActivity.java b/main/src/cgeo/geocaching/settings/SettingsActivity.java
index bcf6715..76f48e2 100644
--- a/main/src/cgeo/geocaching/settings/SettingsActivity.java
+++ b/main/src/cgeo/geocaching/settings/SettingsActivity.java
@@ -351,9 +351,8 @@ public class SettingsActivity extends PreferenceActivity {
p.setOnPreferenceClickListener(new OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(final Preference preference) {
- boolean oldValue = Settings.isDbOnSDCard();
- ((CgeoApplication) SettingsActivity.this.getApplication())
- .moveDatabase(SettingsActivity.this);
+ final boolean oldValue = Settings.isDbOnSDCard();
+ DataStore.moveDatabase(SettingsActivity.this);
return oldValue != Settings.isDbOnSDCard();
}
});