Ticket #1148: android_backup_restore_v2.diff

File android_backup_restore_v2.diff, 25.0 KB (added by kamikaaze, 8 years ago)
  • navit/android/res/values/strings.xml

     
    2828        <string name="optionsmenu_toggle_poi">Toggle POIs</string>
    2929        <string name="optionsmenu_address_search">@string/address_search_title</string>
    3030        <string name="optionsmenu_exit_navit">Exit Navit</string>
    31 
     31        <string name="optionsmenu_backup_restore">Backup / Restore</string>
     32       
    3233        <!-- POSITION POP-UP -->
    3334        <string name="position_popup_title">Position</string>
    3435        <string name="position_popup_drive_here">Route to here</string>
     
    5960        <string name="address_search_set_destination">Setting destination to:</string>
    6061        <string name="address_search_towns">Towns</string>
    6162        <string name="address_search_streets">Streets</string>
     63       
     64        <!--  Backup Restore -->
     65        <string name="choose_an_action">Choose an Action</string>
     66        <string name="please_insert_an_sd_card">Please insert an SD Card</string>
     67        <string name="backing_up">Backing up...</string>
     68        <string name="failed_to_create_backup_directory">Failed to create backup directory</string>
     69        <string name="backup_failed">Backup Failed</string>
     70        <string name="no_backup_found">No Backup found</string>
     71        <string name="failed_to_restore">Failed to restore</string>
     72        <string name="backup_successful">Backup Successful</string>
     73        <string name="restore_successful_please_restart_navit">Restore Successful\nPlease restart Navit</string>
     74        <string name="backup_not_found">Backup not found</string>
     75        <string name="restore_failed">Restore failed</string>
     76        <string name="select_backup">Select Backup</string>
     77        <string-array name="dialog_backup_restore_items">
     78                <item >Backup</item>
     79                <item >Restore</item>
     80        </string-array>
    6281
    6382</resources>
    6483
  • navit/android/res/values-de/strings.xml

     
    2424        <string name="optionsmenu_toggle_poi">POI ein/aus</string>
    2525        <string name="optionsmenu_address_search">@string/address_search_title</string>
    2626        <string name="optionsmenu_exit_navit">Navit beenden</string>
     27        <string name="optionsmenu_backup_restore">Sichern / Wiederherstellen</string>
    2728
    2829        <!-- POSITION POP-UP -->
    2930        <string name="position_popup_title">Position</string>
     
    5556        <string name="address_search_set_destination">Neues Fahrziel:</string>
    5657        <string name="address_search_towns">StÀdte</string>
    5758        <string name="address_search_streets">Straßen</string>
     59       
     60        <!--  Backup Restore -->
     61        <string name="choose_an_action">Bitte auswÀhlen</string>
     62        <string name="please_insert_an_sd_card">Bitte eine SD Karte einlegen</string>
     63        <string name="backing_up">Sichern...</string>
     64        <string name="failed_to_create_backup_directory">Sicherungsverzeichnis konnte nicht erstellt werden</string>
     65        <string name="backup_failed">Sicherung Fehlgeschlagen</string>
     66        <string name="no_backup_found">Keine Sicherung gefunden</string>
     67        <string name="failed_to_restore">Fehler beim Wiederherstellen</string>
     68        <string name="backup_successful">Sicherung erfolgreich</string>
     69        <string name="restore_successful_please_restart_navit">Sicherung Erfolgreich\nNavit bitte neustarten</string>
     70        <string name="backup_not_found">Backup nicht gefunden</string>
     71        <string name="restore_failed">Wiederherstellen fehlgeschlagen</string>
     72        <string name="select_backup">Backup auswÀhlen</string>
     73        <string-array name="dialog_backup_restore_items">
     74                <item >Sichern</item>
     75                <item >Wiederherstellen</item>
     76        </string-array>
     77       
    5878</resources>
    5979
  • navit/android/res/values-fr/strings.xml

     
    2424        <string name="optionsmenu_toggle_poi">POI on/off</string>
    2525        <string name="optionsmenu_address_search">@string/address_search_title</string>
    2626        <string name="optionsmenu_exit_navit">Quitter Navit</string>
     27        <string name="optionsmenu_backup_restore">Backup / Restore</string>
    2728
    2829        <!-- POSITION POP-UP -->
    2930        <string name="position_popup_title">Position</string>
     
    5354        <string name="address_search_set_destination">Destination fixée à:</string>
    5455        <string name="address_search_towns">Villes</string>
    5556        <string name="address_search_streets">Rues</string>
     57       
     58        <!--  Backup Restore -->
     59        <string name="choose_an_action">Choose an Action</string>
     60        <string name="please_insert_an_sd_card">Please insert an SD Card</string>
     61        <string name="backing_up">Backing up...</string>
     62        <string name="failed_to_create_backup_directory">Failed to create backup directory</string>
     63        <string name="backup_failed">Backup Failed</string>
     64        <string name="no_backup_found">No Backup found</string>
     65        <string name="failed_to_restore">Failed to restore</string>
     66        <string name="backup_successful">Backup Successful</string>
     67        <string name="restore_successful_please_restart_navit">Restore Successful\nPlease restart Navit</string>
     68        <string name="backup_not_found">Backup not found</string>
     69        <string name="restore_failed">Restore failed</string>
     70        <string name="select_backup">Select Backup</string>
     71        <string-array name="dialog_backup_restore_items">
     72                <item >Backup</item>
     73                <item >Restore</item>
     74        </string-array>
     75       
    5676</resources>
    5777
  • navit/android/res/values-nl/strings.xml

     
    2424        <string name="optionsmenu_toggle_poi">Schakel POIs</string>
    2525        <string name="optionsmenu_address_search">@string/address_search_title</string>
    2626        <string name="optionsmenu_exit_navit">Verlaat Navit</string>
     27        <string name="optionsmenu_backup_restore">Backup / Restore</string>
    2728
    2829        <!-- POSITION POP-UP -->
    2930        <string name="position_popup_title">Position</string>
     
    5354        <string name="address_search_set_destination">Bestemming ingesteld:</string>
    5455        <string name="address_search_towns">Steden</string>
    5556        <string name="address_search_streets">Straten</string>
     57       
     58        <!--  Backup Restore -->
     59        <string name="choose_an_action">Choose an Action</string>
     60        <string name="please_insert_an_sd_card">Please insert an SD Card</string>
     61        <string name="backing_up">Backing up...</string>
     62        <string name="failed_to_create_backup_directory">Failed to create backup directory</string>
     63        <string name="backup_failed">Backup Failed</string>
     64        <string name="no_backup_found">No Backup found</string>
     65        <string name="failed_to_restore">Failed to restore</string>
     66        <string name="backup_successful">Backup Successful</string>
     67        <string name="restore_successful_please_restart_navit">Restore Successful\nPlease restart Navit</string>
     68        <string name="backup_not_found">Backup not found</string>
     69        <string name="restore_failed">Restore failed</string>
     70        <string name="select_backup">Select Backup</string>
     71        <string-array name="dialog_backup_restore_items">
     72                <item >Backup</item>
     73                <item >Restore</item>
     74        </string-array>
     75       
    5676</resources>
    5777
  • navit/android/src/org/navitproject/navit/Navit.java

     
    418418                menu.add(1, 6, 500, getString(R.string.optionsmenu_address_search)); //TRANS
    419419
    420420                menu.add(1, 99, 900, getString(R.string.optionsmenu_exit_navit)); //TRANS
     421               
     422                /* Only show the Backup to SD-Card Option if we really have one */
     423                if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))
     424                    menu.add(1, 7, 700, getString(R.string.optionsmenu_backup_restore)); //TRANS
     425               
    421426                return true;
    422427        }
    423428
     
    500505                                Intent search_intent = new Intent(this, NavitAddressSearchActivity.class);
    501506                                this.startActivityForResult(search_intent, NavitAddressSearch_id);
    502507                                break;
     508                        case 7 :
     509                            /* Backup / Restore */
     510                            showDialog(NavitDialogs.DIALOG_BACKUP_RESTORE);
     511                            break;
    503512                        case 99 :
    504513                                // exit
    505514                                this.onStop();
     
    550559                }
    551560        }
    552561
    553         protected Dialog onCreateDialog(int id)
     562        @Override
     563    protected void onPrepareDialog(int id, Dialog dialog) {
     564            dialogs.prepareDialog(id, dialog);
     565        super.onPrepareDialog(id, dialog);
     566    }
     567
     568    protected Dialog onCreateDialog(int id)
    554569        {
    555570                return dialogs.createDialog(id);
    556571        }
  • navit/android/src/org/navitproject/navit/NavitBackupTask.java

     
     1
     2package org.navitproject.navit;
     3
     4import android.app.Activity;
     5import android.app.ProgressDialog;
     6import android.content.Context;
     7import android.os.AsyncTask;
     8import android.os.Environment;
     9import android.text.format.Time;
     10import android.widget.Toast;
     11import java.io.File;
     12import java.io.FileInputStream;
     13import java.io.FileOutputStream;
     14import java.io.IOException;
     15import java.io.ObjectOutputStream;
     16
     17public class NavitBackupTask extends AsyncTask<Void, Void, String> {
     18
     19    private Activity mActivity;
     20
     21    private ProgressDialog mDialog;
     22
     23    public NavitBackupTask(Activity context) {
     24        mActivity = context;
     25    }
     26
     27    @Override
     28    protected void onPreExecute() {
     29        super.onPreExecute();
     30
     31        /* Create a Wait Progress Dialog to inform the User that we are working */
     32        mDialog = new ProgressDialog(mActivity);
     33        mDialog.setIndeterminate(true);
     34        mDialog.setMessage(mActivity.getString(R.string.backing_up));
     35        mDialog.show();
     36    }
     37
     38    @Override
     39    protected String doInBackground(Void... v) {
     40        Time now = new Time();
     41        now.setToNow();
     42
     43        /* This is the Directory where all Subdirectories are stored by date */
     44        File mainBackupDir = new File(Environment.getExternalStorageDirectory().getPath() + "/navit/backup/");
     45
     46        /* Create the Main Backup Directory if it doesn't exist */
     47        if (!mainBackupDir.isDirectory()) {
     48            if (!mainBackupDir.mkdirs())
     49                return mActivity.getString(R.string.failed_to_create_backup_directory);
     50        }
     51
     52        /* Create a Timestamp in the format YYYY-MM-DD-Index */
     53        String timestamp = now.year + "-" + String.format("%02d", now.month) + "-" + String.format("%02d", now.monthDay);
     54        /* Get the next free index */
     55        int index = 1;
     56        for (String s : mainBackupDir.list()) {
     57            if (s.contains(timestamp)) {
     58                int newIndex = Integer.parseInt(s.substring(11));
     59                if (newIndex >= index)
     60                    index = newIndex + 1;
     61            }
     62        }
     63        timestamp += "-" + index;
     64
     65        /* This is the Directory in which the Files are copied into */
     66        File backupDir = new File(Environment.getExternalStorageDirectory().getPath() + "/navit/backup/" + timestamp);
     67
     68        /* Create the Backup Directory if it doesn't exist */
     69        if (!backupDir.isDirectory()) {
     70            if (!backupDir.mkdirs())
     71                return mActivity.getString(R.string.failed_to_create_backup_directory);
     72        }
     73
     74        ObjectOutputStream preferencesOOs = null;
     75        try {
     76            /* Backup Files in home */
     77            copyFileIfExists(Navit.NAVIT_DATA_DIR + "/home/bookmark.txt", backupDir.getPath() + "/bookmark.txt");
     78            copyFileIfExists(Navit.NAVIT_DATA_DIR + "/home/destination.txt", backupDir.getPath() + "/destination.txt");
     79            copyFileIfExists(Navit.NAVIT_DATA_DIR + "/home/gui_internal.txt", backupDir.getPath() + "/gui_internal.txt");
     80
     81            /* Backup Shared Preferences */
     82            preferencesOOs = new ObjectOutputStream(new FileOutputStream(backupDir.getPath() + "/preferences.bak"));
     83            preferencesOOs.writeObject(mActivity.getSharedPreferences(Navit.NAVIT_PREFS, Context.MODE_PRIVATE).getAll());
     84        }
     85        catch (IOException e) {
     86            e.printStackTrace();
     87            return mActivity.getString(R.string.backup_failed);
     88        }
     89        finally {
     90            /* Close Stream to prevent Resource Leaks */
     91            try {
     92                if (preferencesOOs != null)
     93                    preferencesOOs.close();
     94            }
     95            catch (IOException e) {
     96                e.printStackTrace();
     97                return mActivity.getString(R.string.backup_failed);
     98            }
     99        }
     100
     101        return null;
     102    }
     103
     104    private void copyFileIfExists(String source, String destination) throws IOException {
     105        File file = new File(source);
     106
     107        if (!file.exists())
     108            return;
     109
     110        FileInputStream is = null;
     111        FileOutputStream os = null;
     112
     113        try {
     114            is = new FileInputStream(source);
     115            os = new FileOutputStream(destination);
     116
     117            int len;
     118            byte buffer[] = new byte[1024];
     119
     120            while ((len = is.read(buffer)) != -1) {
     121                os.write(buffer, 0, len);
     122            }
     123        }
     124        finally {
     125            /* Close the FileStreams to prevent Resource leaks */
     126            if (is != null)
     127                is.close();
     128
     129            if (os != null)
     130                os.close();
     131        }
     132    }
     133
     134    @Override
     135    protected void onPostExecute(String result) {
     136        super.onPostExecute(result);
     137
     138        /* Dismiss the Wait Progress Dialog */
     139        mDialog.dismiss();
     140
     141        /* If result is non null an Error occured */
     142        if (result != null) {
     143            Toast.makeText(mActivity, result, Toast.LENGTH_LONG).show();
     144            return;
     145        }
     146
     147        Toast.makeText(mActivity, mActivity.getString(R.string.backup_successful), Toast.LENGTH_LONG).show();
     148    }
     149
     150    @Override
     151    protected void onCancelled() {
     152        super.onCancelled();
     153        Toast.makeText(mActivity, mActivity.getString(R.string.backup_failed), Toast.LENGTH_LONG).show();
     154        mDialog.dismiss();
     155    }
     156}
  • navit/android/src/org/navitproject/navit/NavitDialogs.java

     
    11package org.navitproject.navit;
    22
    33
     4import java.io.File;
     5import android.app.AlertDialog;
    46import android.app.Dialog;
    57import android.app.ProgressDialog;
    68import android.content.DialogInterface;
     9import android.content.DialogInterface.OnClickListener;
    710import android.os.Bundle;
    811import android.os.Handler;
    912import android.os.Message;
    1013import android.util.Log;
     14import android.widget.ArrayAdapter;
    1115import android.widget.Toast;
     16import android.os.Environment;
    1217
    1318public class NavitDialogs extends Handler{
    1419        // Dialogs
    1520        public static final int           DIALOG_MAPDOWNLOAD               = 1;
    16 
     21        public static final int           DIALOG_BACKUP_RESTORE            = 2;
     22        public static final int           DIALOG_SELECT_BACKUP             = 3;
     23       
    1724        // dialog messages
    1825        static final int MSG_MAP_DOWNLOAD_FINISHED   = 0;
    1926        static final int MSG_PROGRESS_BAR          = 1;
     
    107114
    108115        Dialog createDialog(int id)
    109116        {
     117            AlertDialog.Builder builder = new AlertDialog.Builder(mActivity);
     118           
    110119                switch (id)
    111120                {
    112121                        case DIALOG_MAPDOWNLOAD :
     
    131140                                                Navit.get_text("Map data (c) OpenStreetMap contributors, CC-BY-SA"),
    132141                                                Toast.LENGTH_LONG).show(); //TRANS
    133142                                return mapdownloader_dialog;
     143                               
     144                        case DIALOG_BACKUP_RESTORE :
     145                            /* Create a Dialog that Displays Options wether to Backup or Restore */
     146                            builder.setTitle(mActivity.getString(R.string.choose_an_action)).
     147                                setCancelable(true).
     148                                setItems(R.array.dialog_backup_restore_items,
     149                                        new DialogInterface.OnClickListener() {
     150                                   
     151                                    @Override
     152                                    public void onClick(DialogInterface dialog, int which) {
     153                                        /* Notify User if no SD Card present */
     154                                        if(!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))
     155                                            Toast.makeText(mActivity,mActivity.getString(R.string.please_insert_an_sd_card), Toast.LENGTH_LONG).show();
     156                                       
     157                                        switch (which) {
     158                                            case 0:
     159                                                /* Backup */
     160                                                new NavitBackupTask(mActivity).execute();
     161                                                break;
     162                                            case 1:
     163                                                /* Restore */
     164                                                mActivity.showDialog(DIALOG_SELECT_BACKUP);
     165                                                break;
     166                                        }
     167                                    }});
     168                                    return builder.create();
     169                                   
     170                        case DIALOG_SELECT_BACKUP :
     171                            /* Create a Dialog with a list from which the user selects the Backup to be restored */
     172                            File mainBackupDir = new File(Environment.getExternalStorageDirectory().getPath() + "/navit/backup/");
     173                           
     174                            String[] backups = null;
     175                            if(mainBackupDir.isDirectory())
     176                                backups = mainBackupDir.list();
     177
     178                            if(backups == null || backups.length == 0) {
     179                                /* No Backups were found */
     180                                builder.setTitle(mActivity.getText(R.string.no_backup_found));
     181                                builder.setNegativeButton(mActivity.getText(android.R.string.cancel), null);
     182                                return builder.create();
     183                            }
     184                           
     185                            builder.setTitle(mActivity.getString(R.string.select_backup));
     186                            final ArrayAdapter<String> adapter = new ArrayAdapter<String>(mActivity, android.R.layout.simple_spinner_item, backups);                       
     187                            builder.setAdapter(adapter, new OnClickListener(){
     188
     189                    @Override
     190                    public void onClick(DialogInterface dialog, int which) {
     191                        new NavitRestoreTask(mActivity, adapter.getItem(which)).execute();
     192                    }});
     193                builder.setNegativeButton(mActivity.getString(android.R.string.cancel), null);
     194
     195                return builder.create();
    134196                }
    135197                // should never get here!!
    136198                return null;
    137199        }
     200
     201    public void prepareDialog(int id, Dialog dialog) {
     202       
     203        /* Remove the Dialog to force Android to rerun onCreateDialog */
     204        if(id == DIALOG_SELECT_BACKUP)
     205            mActivity.removeDialog(id);
     206    }
    138207}
  • navit/android/src/org/navitproject/navit/NavitRestoreTask.java

     
     1
     2package org.navitproject.navit;
     3
     4import android.app.Activity;
     5import android.app.NotificationManager;
     6import android.app.ProgressDialog;
     7import android.content.Context;
     8import android.content.SharedPreferences.Editor;
     9import android.os.AsyncTask;
     10import android.os.Environment;
     11import android.widget.Toast;
     12
     13import java.io.File;
     14import java.io.FileInputStream;
     15import java.io.FileOutputStream;
     16import java.io.IOException;
     17import java.io.ObjectInputStream;
     18import java.util.Map;
     19import java.util.Map.Entry;
     20
     21public class NavitRestoreTask extends AsyncTask<Void, Void, String> {
     22
     23    private Activity mActivity;
     24
     25    private ProgressDialog mDialog;
     26
     27    private String mTimestamp;
     28
     29    public NavitRestoreTask(Activity context, String timestamp) {
     30        mActivity = context;
     31        mTimestamp = timestamp;
     32    }
     33
     34    @Override
     35    protected void onPreExecute() {
     36        super.onPreExecute();
     37
     38        /* Create a Wait Progress Dialog to inform the User that we are working */
     39        mDialog = new ProgressDialog(mActivity);
     40        mDialog.setIndeterminate(true);
     41        mDialog.setMessage(mActivity.getString(R.string.backing_up));
     42        mDialog.show();
     43    }
     44
     45    @SuppressWarnings("unchecked")
     46    @Override
     47    protected String doInBackground(Void... v) {
     48
     49        /* This is the Directory where all Subdirectories are stored by date */
     50        File backupDir = new File(Environment.getExternalStorageDirectory().getPath() + "/navit/backup/" + mTimestamp);
     51       
     52        /* Check if there is a Backup Directory */
     53        if (!backupDir.isDirectory())
     54            return mActivity.getString(R.string.backup_not_found);
     55
     56        ObjectInputStream preferenceOIS = null;
     57        try {
     58            /* Delete all old Files in Home */
     59            removeFileIfExists(Navit.NAVIT_DATA_DIR + "/home/bookmark.txt");
     60            removeFileIfExists(Navit.NAVIT_DATA_DIR + "/home/destination.txt");
     61            removeFileIfExists(Navit.NAVIT_DATA_DIR + "/home/gui_internal.txt");
     62
     63           
     64            /* Restore Files in home */
     65            copyFileIfExists(backupDir.getPath() + "/bookmark.txt", Navit.NAVIT_DATA_DIR + "/home/bookmark.txt");
     66            copyFileIfExists(backupDir.getPath() + "/destination.txt", Navit.NAVIT_DATA_DIR + "/home/destination.txt");
     67            copyFileIfExists(backupDir.getPath() + "/gui_internal.txt", Navit.NAVIT_DATA_DIR + "/home/gui_internal.txt");
     68
     69            /* Restore Shared Preferences */
     70            preferenceOIS = new ObjectInputStream(new FileInputStream(backupDir.getPath() + "/preferences.bak"));
     71            Map<String, ?> entries = (Map<String, ?>) preferenceOIS.readObject();
     72
     73            Editor prefEditor = mActivity.getSharedPreferences(Navit.NAVIT_PREFS, Context.MODE_PRIVATE).edit();
     74
     75            /* Remove all old Preferences */
     76            prefEditor.clear();
     77
     78            /* Iterate through all Entries and add them to our Preferences */
     79            for (Entry<String, ?> entry : entries.entrySet()) {
     80                Object value = entry.getValue();
     81                String key = entry.getKey();
     82
     83                if (value instanceof Boolean)
     84                    prefEditor.putBoolean(key, ((Boolean) value).booleanValue());
     85                else if (value instanceof Float)
     86                    prefEditor.putFloat(key, ((Float) value).floatValue());
     87                else if (value instanceof Integer)
     88                    prefEditor.putInt(key, ((Integer) value).intValue());
     89                else if (value instanceof Long)
     90                    prefEditor.putLong(key, ((Long) value).longValue());
     91                else if (value instanceof String)
     92                    prefEditor.putString(key, (String) value);
     93            }
     94
     95            if (!prefEditor.commit())
     96                return mActivity.getString(R.string.failed_to_restore);
     97
     98        }
     99        catch (Exception e) {
     100            e.printStackTrace();
     101            return mActivity.getString(R.string.failed_to_restore);
     102        }
     103        finally {
     104            try {
     105                /* Close Stream to prevent Resource leak */
     106                if (preferenceOIS != null)
     107                    preferenceOIS.close();
     108            }
     109            catch (IOException e) {
     110
     111            }
     112        }
     113
     114        return null;
     115    }
     116
     117    private void removeFileIfExists(String source) {
     118        File file = new File(source);
     119
     120        if (!file.exists())
     121            return;
     122       
     123        file.delete();
     124    }
     125
     126    private void copyFileIfExists(String source, String destination) throws IOException {
     127        File file = new File(source);
     128
     129        if (!file.exists())
     130            return;
     131
     132        FileInputStream is = null;
     133        FileOutputStream os = null;
     134
     135        try {
     136            is = new FileInputStream(source);
     137            os = new FileOutputStream(destination);
     138
     139            int len;
     140            byte buffer[] = new byte[1024];
     141
     142            while ((len = is.read(buffer)) != -1) {
     143                os.write(buffer, 0, len);
     144            }
     145
     146        }
     147        finally {
     148            /* Close the FileStreams to prevent Resource leaks */
     149            if (is != null)
     150                is.close();
     151
     152            if (os != null)
     153                os.close();
     154        }
     155    }
     156
     157    @Override
     158    protected void onPostExecute(String result) {
     159        super.onPostExecute(result);
     160
     161        /* Dismiss the Wait Progress Dialog */
     162        mDialog.dismiss();
     163
     164        /* If result is non null an Error occured */
     165        if (result != null) {
     166            Toast.makeText(mActivity, result, Toast.LENGTH_LONG).show();
     167            return;
     168        }
     169
     170        /* Navit needs to be restarted. Currently the User has to restart it by himself */
     171        Toast.makeText(mActivity, mActivity.getString(R.string.restore_successful_please_restart_navit), Toast.LENGTH_LONG).show();
     172        NotificationManager nm = (NotificationManager) mActivity.getSystemService(Context.NOTIFICATION_SERVICE);
     173        nm.cancel(R.string.app_name);
     174        NavitVehicle.removeListener();
     175        mActivity.finish();
     176    }
     177
     178    @Override
     179    protected void onCancelled() {
     180        super.onCancelled();
     181        Toast.makeText(mActivity, mActivity.getString(R.string.restore_failed), Toast.LENGTH_LONG).show();
     182        mDialog.dismiss();
     183    }   
     184}