Implemented backup and restore for account sync settings.

Bug: 18506992
Parent Bug: 17967106

Change-Id: Iecf5ce3a24ac5f12192e65aa61f1560bc76d75a8
diff --git a/services/core/java/com/android/server/content/SyncStorageEngine.java b/services/core/java/com/android/server/content/SyncStorageEngine.java
index 0d5f240..f154c73 100644
--- a/services/core/java/com/android/server/content/SyncStorageEngine.java
+++ b/services/core/java/com/android/server/content/SyncStorageEngine.java
@@ -18,6 +18,7 @@
 
 import android.accounts.Account;
 import android.accounts.AccountAndUser;
+import android.app.backup.BackupManager;
 import android.content.ComponentName;
 import android.content.ContentResolver;
 import android.content.Context;
@@ -670,6 +671,7 @@
                     new Bundle());
         }
         reportChange(ContentResolver.SYNC_OBSERVER_TYPE_SETTINGS);
+        queueBackup();
     }
 
     public int getIsSyncable(Account account, int userId, String providerName) {
@@ -1035,6 +1037,7 @@
         }
         reportChange(ContentResolver.SYNC_OBSERVER_TYPE_SETTINGS);
         mContext.sendBroadcast(ContentResolver.ACTION_SYNC_CONN_STATUS_CHANGED);
+        queueBackup();
     }
 
     public boolean getMasterSyncAutomatically(int userId) {
@@ -2810,4 +2813,12 @@
                 .append(")\n");
         }
     }
+
+    /**
+     * Let the BackupManager know that account sync settings have changed. This will trigger
+     * {@link com.android.server.backup.SystemBackupAgent} to run.
+     */
+    public void queueBackup() {
+        BackupManager.dataChanged("android");
+    }
 }