diff options
| author | jandegr <jandegr@users.noreply.github.com> | 2018-05-29 13:18:06 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2018-05-29 13:18:06 +0200 |
| commit | 1febaa8815cdb7ad5c1d9e2f3cfd5a1094994881 (patch) | |
| tree | d0ce17bdcce413e14fdca1eadba6dab926f305b8 /NavitRestoreTask.java | |
| parent | 382ed8ed0be4ce6eb8684bc3cac2ec244a76ba56 (diff) | |
| download | navit-1febaa8815cdb7ad5c1d9e2f3cfd5a1094994881.tar.gz | |
cleanup
Diffstat (limited to 'NavitRestoreTask.java')
| -rw-r--r-- | NavitRestoreTask.java | 142 |
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(); + } +} |
