aboutsummaryrefslogtreecommitdiffstats
path: root/main/src/cgeo/geocaching/cgeoinit.java
diff options
context:
space:
mode:
Diffstat (limited to 'main/src/cgeo/geocaching/cgeoinit.java')
-rw-r--r--main/src/cgeo/geocaching/cgeoinit.java64
1 files changed, 48 insertions, 16 deletions
diff --git a/main/src/cgeo/geocaching/cgeoinit.java b/main/src/cgeo/geocaching/cgeoinit.java
index ce0217c..9d930be 100644
--- a/main/src/cgeo/geocaching/cgeoinit.java
+++ b/main/src/cgeo/geocaching/cgeoinit.java
@@ -32,6 +32,8 @@ import android.widget.Spinner;
import android.widget.TextView;
import java.io.File;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.atomic.AtomicReference;
public class cgeoinit extends AbstractActivity {
@@ -487,7 +489,7 @@ public class cgeoinit extends AbstractActivity {
}
});
- showBackupDate();
+ refreshBackupLabel();
}
@@ -506,21 +508,36 @@ public class cgeoinit extends AbstractActivity {
public void backup(View view) {
// avoid overwriting an existing backup with an empty database (can happen directly after reinstalling the app)
if (app.getAllStoredCachesCount(true, null, null) == 0) {
+ helpDialog(res.getString(R.string.init_backup), res.getString(R.string.init_backup_unnecessary));
return;
}
- final String file = app.backupDatabase();
-
- if (file != null) {
- helpDialog(res.getString(R.string.init_backup_backup), res.getString(R.string.init_backup_success) + "\n" + file);
- } else {
- helpDialog(res.getString(R.string.init_backup_backup), res.getString(R.string.init_backup_failed));
- }
+ final AtomicReference<String> fileRef = new AtomicReference<String>(null);
+ final ProgressDialog dialog = ProgressDialog.show(this, res.getString(R.string.init_backup), res.getString(R.string.init_backup_running), true, false);
+ Thread backupThread = new Thread() {
+ final Handler handler = new Handler() {
+ public void handleMessage(Message msg) {
+ dialog.dismiss();
+ final String file = fileRef.get();
+ if (file != null) {
+ helpDialog(res.getString(R.string.init_backup_backup), res.getString(R.string.init_backup_success) + "\n" + file);
+ } else {
+ helpDialog(res.getString(R.string.init_backup_backup), res.getString(R.string.init_backup_failed));
+ }
+ refreshBackupLabel();
+ }
+ };
- showBackupDate();
+ @Override
+ public void run() {
+ fileRef.set(app.backupDatabase());
+ handler.sendMessage(handler.obtainMessage());
+ }
+ };
+ backupThread.start();
}
- private void showBackupDate() {
+ private void refreshBackupLabel() {
TextView lastBackup = (TextView) findViewById(R.id.backup_last);
File lastBackupFile = cgeoapplication.isRestoreFile();
if (lastBackupFile != null) {
@@ -535,13 +552,28 @@ public class cgeoinit extends AbstractActivity {
* unused here but needed since this method is referenced from XML layout
*/
public void restore(View view) {
- final boolean status = app.restoreDatabase();
+ final ProgressDialog dialog = ProgressDialog.show(this, res.getString(R.string.init_backup_restore), res.getString(R.string.init_restore_running), true, false);
+ final AtomicBoolean atomic = new AtomicBoolean(false);
+ Thread restoreThread = new Thread() {
+ final Handler handler = new Handler() {
+ public void handleMessage(Message msg) {
+ dialog.dismiss();
+ boolean restored = atomic.get();
+ if (restored) {
+ helpDialog(res.getString(R.string.init_backup_restore), res.getString(R.string.init_restore_success));
+ } else {
+ helpDialog(res.getString(R.string.init_backup_restore), res.getString(R.string.init_restore_failed));
+ }
+ }
+ };
- if (status) {
- helpDialog(res.getString(R.string.init_backup_restore), res.getString(R.string.init_restore_success));
- } else {
- helpDialog(res.getString(R.string.init_backup_restore), res.getString(R.string.init_restore_failed));
- }
+ @Override
+ public void run() {
+ atomic.set(app.restoreDatabase());
+ handler.sendMessage(handler.obtainMessage());
+ }
+ };
+ restoreThread.start();
}
public boolean saveValues() {