diff options
| -rw-r--r-- | main/res/values/strings.xml | 3 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/cgeoinit.java | 64 |
2 files changed, 51 insertions, 16 deletions
diff --git a/main/res/values/strings.xml b/main/res/values/strings.xml index 02be43d..ba23d89 100644 --- a/main/res/values/strings.xml +++ b/main/res/values/strings.xml @@ -434,12 +434,15 @@ <string name="init_cleared">c:geo cleared login information.</string> <string name="init_backup">Backup</string> <string name="init_backup_backup">Backup</string> + <string name="init_backup_running">Creating backup of cache database…</string> <string name="init_backup_note">Please note this option will backup/restore the database containing caches and waypoints, not settings. Your login information (passwords) will not leave this application.</string> <string name="init_backup_restore">Restore</string> <string name="init_backup_success">Database of c:geo was successfully copied to the file</string> <string name="init_backup_failed">Backup of database of c:geo failed.</string> + <string name="init_backup_unnecessary">Database is empty, no backup necessary.</string> <string name="init_restore_success">Restoration completed.</string> <string name="init_restore_failed">Restoration failed.</string> + <string name="init_restore_running">Restoring cache database…</string> <string name="init_backup_last">Available backup from</string> <string name="init_backup_last_no">There is no file with backup.</string> <string name="init_mapsources">Map Sources</string> <!-- since: 2.26 RC3 --> 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() { |
