diff options
| author | Bananeweizen <Bananeweizen@gmx.de> | 2013-07-31 14:42:11 +0200 |
|---|---|---|
| committer | Bananeweizen <Bananeweizen@gmx.de> | 2013-07-31 14:42:11 +0200 |
| commit | 4a806d990a678e20a09c893f65c8cabff2aefbd5 (patch) | |
| tree | e5532783ad75891bc96c6fad43b922d73c2f7e20 /main/src/cgeo/geocaching/utils/DatabaseBackupUtils.java | |
| parent | 4cef30e041e27634f56be70d5694d83663bc1d68 (diff) | |
| download | cgeo-4a806d990a678e20a09c893f65c8cabff2aefbd5.zip cgeo-4a806d990a678e20a09c893f65c8cabff2aefbd5.tar.gz cgeo-4a806d990a678e20a09c893f65c8cabff2aefbd5.tar.bz2 | |
refactoring: move DB backup into new utils class
Diffstat (limited to 'main/src/cgeo/geocaching/utils/DatabaseBackupUtils.java')
| -rw-r--r-- | main/src/cgeo/geocaching/utils/DatabaseBackupUtils.java | 115 |
1 files changed, 115 insertions, 0 deletions
diff --git a/main/src/cgeo/geocaching/utils/DatabaseBackupUtils.java b/main/src/cgeo/geocaching/utils/DatabaseBackupUtils.java new file mode 100644 index 0000000..24f375d --- /dev/null +++ b/main/src/cgeo/geocaching/utils/DatabaseBackupUtils.java @@ -0,0 +1,115 @@ +package cgeo.geocaching.utils; + +import cgeo.geocaching.MainActivity; +import cgeo.geocaching.R; +import cgeo.geocaching.cgData; +import cgeo.geocaching.activity.ActivityMixin; +import cgeo.geocaching.ui.Formatter; + +import org.apache.commons.lang3.StringUtils; + +import android.app.Activity; +import android.app.ProgressDialog; +import android.content.Context; +import android.content.res.Resources; +import android.os.Handler; +import android.os.Message; + +import java.io.File; +import java.util.concurrent.atomic.AtomicBoolean; + +public class DatabaseBackupUtils { + + private DatabaseBackupUtils() { + // utility class + } + + /** + * restore the database in a new thread, showing a progress window + * + * @param activity + * calling activity + */ + public static void restoreDatabase(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); + Thread restoreThread = new Thread() { + final Handler handler = new Handler() { + @Override + public void handleMessage(Message msg) { + dialog.dismiss(); + boolean restored = restoreSuccessful.get(); + String message = restored ? res.getString(R.string.init_restore_success) : res.getString(R.string.init_restore_failed); + ActivityMixin.helpDialog(activity, res.getString(R.string.init_backup_restore), message); + if (activity instanceof MainActivity) { + ((MainActivity) activity).updateCacheCounter(); + } + } + }; + + @Override + public void run() { + restoreSuccessful.set(cgData.restoreDatabaseInternal()); + handler.sendMessage(handler.obtainMessage()); + } + }; + restoreThread.start(); + } + + public static boolean createBackup(final Activity activity, final Runnable runAfterwards) { + final Context context = activity; + // avoid overwriting an existing backup with an empty database + // (can happen directly after reinstalling the app) + if (cgData.getAllCachesCount() == 0) { + ActivityMixin.helpDialog(activity, + context.getString(R.string.init_backup), + context.getString(R.string.init_backup_unnecessary)); + return false; + } + + final ProgressDialog dialog = ProgressDialog.show(context, + context.getString(R.string.init_backup), + context.getString(R.string.init_backup_running), true, false); + new Thread() { + @Override + public void run() { + final String backupFileName = cgData.backupDatabaseInternal(); + activity.runOnUiThread(new Runnable() { + @Override + public void run() { + dialog.dismiss(); + ActivityMixin.helpDialog(activity, + context.getString(R.string.init_backup_backup), + backupFileName != null + ? context.getString(R.string.init_backup_success) + + "\n" + backupFileName + : context.getString(R.string.init_backup_failed)); + if (runAfterwards != null) { + runAfterwards.run(); + } + } + }); + } + }.start(); + return true; + } + + public static File getRestoreFile() { + final File fileSourceFile = cgData.getBackupFileInternal(); + return fileSourceFile.exists() ? fileSourceFile : null; + } + + public static boolean hasBackup() { + return getRestoreFile() != null; + } + + public static String getBackupDateTime() { + final File restoreFile = getRestoreFile(); + if (restoreFile == null) { + return StringUtils.EMPTY; + } + return Formatter.formatShortDateTime(restoreFile.lastModified()); + } + +} |
