aboutsummaryrefslogtreecommitdiffstats
path: root/main/src/cgeo/geocaching/utils/DatabaseBackupUtils.java
diff options
context:
space:
mode:
Diffstat (limited to 'main/src/cgeo/geocaching/utils/DatabaseBackupUtils.java')
-rw-r--r--main/src/cgeo/geocaching/utils/DatabaseBackupUtils.java49
1 files changed, 45 insertions, 4 deletions
diff --git a/main/src/cgeo/geocaching/utils/DatabaseBackupUtils.java b/main/src/cgeo/geocaching/utils/DatabaseBackupUtils.java
index ab27264..a65a9fb 100644
--- a/main/src/cgeo/geocaching/utils/DatabaseBackupUtils.java
+++ b/main/src/cgeo/geocaching/utils/DatabaseBackupUtils.java
@@ -6,6 +6,8 @@ import cgeo.geocaching.R;
import cgeo.geocaching.ui.dialog.Dialogs;
import org.apache.commons.lang3.StringUtils;
+import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.jdt.annotation.Nullable;
import rx.functions.Action0;
import rx.functions.Action1;
@@ -14,6 +16,8 @@ import rx.schedulers.Schedulers;
import android.app.Activity;
import android.app.ProgressDialog;
+import android.content.DialogInterface;
+import android.content.DialogInterface.OnClickListener;
import android.content.res.Resources;
import java.io.File;
@@ -26,7 +30,8 @@ public class DatabaseBackupUtils {
}
/**
- * restore the database in a new thread, showing a progress window
+ * After confirming to overwrite the existing caches on the devices, restore the database in a new thread, showing a
+ * progress window
*
* @param activity
* calling activity
@@ -35,6 +40,23 @@ public class DatabaseBackupUtils {
if (!hasBackup()) {
return;
}
+ final int caches = DataStore.getAllCachesCount();
+ if (caches == 0) {
+ restoreDatabaseInternal(activity);
+ }
+ else {
+ Dialogs.confirm(activity, R.string.init_backup_restore, activity.getString(R.string.restore_confirm_overwrite, activity.getResources().getQuantityString(R.plurals.cache_counts, caches, caches)), new OnClickListener() {
+
+ @Override
+ public void onClick(final DialogInterface dialog, final int which) {
+ restoreDatabaseInternal(activity);
+ }
+ });
+
+ }
+ }
+
+ private static void restoreDatabaseInternal(final Activity activity) {
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);
@@ -57,14 +79,32 @@ public class DatabaseBackupUtils {
});
}
- public static boolean createBackup(final Activity activity, final Runnable runAfterwards) {
+ /**
+ * Create a backup after confirming to overwrite the existing backup.
+ *
+ */
+ public static void createBackup(final Activity activity, final Runnable runAfterwards) {
// avoid overwriting an existing backup with an empty database
// (can happen directly after reinstalling the app)
if (DataStore.getAllCachesCount() == 0) {
Dialogs.message(activity, R.string.init_backup, R.string.init_backup_unnecessary);
- return false;
+ return;
+ }
+ if (hasBackup()) {
+ Dialogs.confirm(activity, R.string.init_backup, activity.getString(R.string.backup_confirm_overwrite, getBackupDateTime()), new OnClickListener() {
+
+ @Override
+ public void onClick(final DialogInterface dialog, final int which) {
+ createBackupInternal(activity, runAfterwards);
+ }
+ });
}
+ else {
+ createBackupInternal(activity, runAfterwards);
+ }
+ }
+ private static void createBackupInternal(final Activity activity, final Runnable runAfterwards) {
final ProgressDialog dialog = ProgressDialog.show(activity,
activity.getString(R.string.init_backup),
activity.getString(R.string.init_backup_running), true, false);
@@ -88,9 +128,9 @@ public class DatabaseBackupUtils {
}
}
});
- return true;
}
+ @Nullable
public static File getRestoreFile() {
final File fileSourceFile = DataStore.getBackupFileInternal();
return fileSourceFile.exists() && fileSourceFile.length() > 0 ? fileSourceFile : null;
@@ -100,6 +140,7 @@ public class DatabaseBackupUtils {
return getRestoreFile() != null;
}
+ @NonNull
public static String getBackupDateTime() {
final File restoreFile = getRestoreFile();
if (restoreFile == null) {