aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBananeweizen <bananeweizen@gmx.de>2011-10-02 19:51:27 +0200
committerBananeweizen <bananeweizen@gmx.de>2011-10-02 19:51:27 +0200
commitda2d067e715f35353759d377dc142ed1013b539b (patch)
tree6125286ccebbe31b4e4ae07281bed610ff36e7c7
parent1d96bd3eaceeb87c98e51a2e96ce130fd39651b0 (diff)
downloadcgeo-da2d067e715f35353759d377dc142ed1013b539b.zip
cgeo-da2d067e715f35353759d377dc142ed1013b539b.tar.gz
cgeo-da2d067e715f35353759d377dc142ed1013b539b.tar.bz2
fix #80: progress dialog for save/restore database
-rw-r--r--main/res/values/strings.xml3
-rw-r--r--main/src/cgeo/geocaching/cgeoinit.java64
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() {