Merge "DO NOT MERGE show correct backup status" into mnc-dev
diff --git a/src/com/android/settings/backup/ToggleBackupSettingFragment.java b/src/com/android/settings/backup/ToggleBackupSettingFragment.java
index e30266f..bc85bf3 100644
--- a/src/com/android/settings/backup/ToggleBackupSettingFragment.java
+++ b/src/com/android/settings/backup/ToggleBackupSettingFragment.java
@@ -26,7 +26,7 @@
  * disable it.
  */
 public class ToggleBackupSettingFragment extends SettingsPreferenceFragment
-        implements DialogInterface.OnClickListener {
+        implements DialogInterface.OnClickListener, DialogInterface.OnDismissListener {
     private static final String TAG = "ToggleBackupSettingFragment";
 
     private static final String BACKUP_TOGGLE = "toggle_backup";
@@ -40,6 +40,8 @@
 
     private Dialog mConfirmDialog;
 
+    private boolean mWaitingForConfirmationDialog = false;
+
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
@@ -105,9 +107,9 @@
                             ToggleSwitch toggleSwitch, boolean checked) {
                         if (!checked) {
                             // Don't change Switch status until user makes choice in dialog
-                            // so return false here.
+                            // so return true here.
                             showEraseBackupDialog();
-                            return false;
+                            return true;
                         } else {
                             setBackupEnabled(true);
                             mSwitchBar.setCheckedInternal(true);
@@ -132,10 +134,21 @@
     public void onClick(DialogInterface dialog, int which) {
         // Accept turning off backup
         if (which == DialogInterface.BUTTON_POSITIVE) {
+            mWaitingForConfirmationDialog = false;
             setBackupEnabled(false);
             mSwitchBar.setCheckedInternal(false);
         } else if (which == DialogInterface.BUTTON_NEGATIVE) {
             // Reject turning off backup
+            mWaitingForConfirmationDialog = false;
+            setBackupEnabled(true);
+            mSwitchBar.setCheckedInternal(true);
+        }
+    }
+
+    @Override
+    public void onDismiss(DialogInterface dialog) {
+        if (mWaitingForConfirmationDialog) {
+            // dismiss turning off backup
             setBackupEnabled(true);
             mSwitchBar.setCheckedInternal(true);
         }
@@ -143,11 +156,15 @@
 
     private void showEraseBackupDialog() {
         CharSequence msg = getResources().getText(R.string.fullbackup_erase_dialog_message);
+
+        mWaitingForConfirmationDialog = true;
+
         // TODO: DialogFragment?
         mConfirmDialog = new AlertDialog.Builder(getActivity()).setMessage(msg)
                 .setTitle(R.string.backup_erase_dialog_title)
                 .setPositiveButton(android.R.string.ok, this)
                 .setNegativeButton(android.R.string.cancel, this)
+                .setOnDismissListener(this)
                 .show();
     }