summaryrefslogtreecommitdiff
path: root/NavitRestoreTask.java
diff options
context:
space:
mode:
authorjandegr <jandegr@users.noreply.github.com>2018-05-29 13:18:06 +0200
committerGitHub <noreply@github.com>2018-05-29 13:18:06 +0200
commit1febaa8815cdb7ad5c1d9e2f3cfd5a1094994881 (patch)
treed0ce17bdcce413e14fdca1eadba6dab926f305b8 /NavitRestoreTask.java
parent382ed8ed0be4ce6eb8684bc3cac2ec244a76ba56 (diff)
downloadnavit-1febaa8815cdb7ad5c1d9e2f3cfd5a1094994881.tar.gz
cleanup
Diffstat (limited to 'NavitRestoreTask.java')
-rw-r--r--NavitRestoreTask.java142
1 files changed, 142 insertions, 0 deletions
diff --git a/NavitRestoreTask.java b/NavitRestoreTask.java
new file mode 100644
index 000000000..849b2466d
--- /dev/null
+++ b/NavitRestoreTask.java
@@ -0,0 +1,142 @@
+
+package org.navitproject.navit;
+
+import android.app.NotificationManager;
+import android.app.ProgressDialog;
+import android.content.Context;
+import android.content.SharedPreferences.Editor;
+import android.os.AsyncTask;
+import android.os.Environment;
+import android.widget.Toast;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.util.Map;
+import java.util.Map.Entry;
+
+public class NavitRestoreTask extends AsyncTask<Void, Void, String> {
+
+ private Navit mActivity;
+
+ private ProgressDialog mDialog;
+
+ private String mTimestamp;
+
+ NavitRestoreTask(Navit context, String timestamp) {
+ mActivity = context;
+ mTimestamp = timestamp;
+ }
+
+ @Override
+ protected void onPreExecute() {
+ super.onPreExecute();
+
+ /* Create a Wait Progress Dialog to inform the User that we are working */
+ mDialog = new ProgressDialog(mActivity);
+ mDialog.setIndeterminate(true);
+ mDialog.setMessage(mActivity.getString(R.string.restoring));
+ mDialog.show();
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ protected String doInBackground(Void... v) {
+
+ /* This is the Directory where all Subdirectories are stored by date */
+ File backupDir = new File(Environment.getExternalStorageDirectory().getPath() + "/navit/backup/" + mTimestamp);
+
+ /* Check if there is a Backup Directory */
+ if (!backupDir.isDirectory())
+ return mActivity.getString(R.string.backup_not_found);
+
+ ObjectInputStream prefObjInStream = null;
+ try {
+ /* Delete all old Files in Home */
+ mActivity.removeFileIfExists(Navit.NAVIT_DATA_DIR + "/home/bookmark.txt");
+ mActivity.removeFileIfExists(Navit.NAVIT_DATA_DIR + "/home/destination.txt");
+ mActivity.removeFileIfExists(Navit.NAVIT_DATA_DIR + "/home/gui_internal.txt");
+
+
+ /* Restore Files in home */
+ mActivity.copyFileIfExists(backupDir.getPath() + "/bookmark.txt", Navit.NAVIT_DATA_DIR + "/home/bookmark.txt");
+ mActivity.copyFileIfExists(backupDir.getPath() + "/destination.txt", Navit.NAVIT_DATA_DIR + "/home/destination.txt");
+ mActivity.copyFileIfExists(backupDir.getPath() + "/gui_internal.txt", Navit.NAVIT_DATA_DIR + "/home/gui_internal.txt");
+
+ /* Restore Shared Preferences */
+ prefObjInStream = new ObjectInputStream(new FileInputStream(backupDir.getPath() + "/preferences.bak"));
+ Map<String, ?> entries = (Map<String, ?>) prefObjInStream.readObject();
+
+ Editor prefEditor = mActivity.getSharedPreferences(Navit.NAVIT_PREFS, Context.MODE_PRIVATE).edit();
+
+ /* Remove all old Preferences */
+ prefEditor.clear();
+
+ /* Iterate through all Entries and add them to our Preferences */
+ for (Entry<String, ?> entry : entries.entrySet()) {
+ Object value = entry.getValue();
+ String key = entry.getKey();
+
+ if (value instanceof Boolean)
+ prefEditor.putBoolean(key, (Boolean) value);
+ else if (value instanceof Float)
+ prefEditor.putFloat(key, (Float) value);
+ else if (value instanceof Integer)
+ prefEditor.putInt(key, (Integer) value);
+ else if (value instanceof Long)
+ prefEditor.putLong(key, (Long) value);
+ else if (value instanceof String)
+ prefEditor.putString(key, (String) value);
+ }
+
+ if (!prefEditor.commit())
+ return mActivity.getString(R.string.failed_to_restore);
+
+ }
+ catch (Exception e) {
+ e.printStackTrace();
+ return mActivity.getString(R.string.failed_to_restore);
+ }
+ finally {
+ try {
+ /* Close Stream to prevent Resource leak */
+ if (prefObjInStream != null)
+ prefObjInStream.close();
+ }
+ catch (IOException e) {
+
+ }
+ }
+
+ return null;
+ }
+
+ @Override
+ protected void onPostExecute(String result) {
+ super.onPostExecute(result);
+
+ /* Dismiss the Wait Progress Dialog */
+ mDialog.dismiss();
+
+ /* If result is non null an Error occured */
+ if (result != null) {
+ Toast.makeText(mActivity, result, Toast.LENGTH_LONG).show();
+ return;
+ }
+
+ /* Navit needs to be restarted. Currently the User has to restart it by himself */
+ Toast.makeText(mActivity, mActivity.getString(R.string.restore_successful_please_restart_navit), Toast.LENGTH_LONG).show();
+ NotificationManager nm = (NotificationManager) mActivity.getSystemService(Context.NOTIFICATION_SERVICE);
+ nm.cancel(R.string.app_name);
+ NavitVehicle.removeListener();
+ mActivity.finish();
+ }
+
+ @Override
+ protected void onCancelled() {
+ super.onCancelled();
+ Toast.makeText(mActivity, mActivity.getString(R.string.restore_failed), Toast.LENGTH_LONG).show();
+ mDialog.dismiss();
+ }
+}