merge from eclair
diff --git a/Android.mk b/Android.mk
index 510f50c..51834b9 100644
--- a/Android.mk
+++ b/Android.mk
@@ -3,19 +3,9 @@
 
 LOCAL_MODULE_TAGS := user
 
-base_packages := ../../../frameworks/base/packages
-source_files := $(base_packages)/SubscribedFeedsProvider/src/com/android/providers/subscribedfeeds/SubscribedFeedsProvider.java
-source_files += $(base_packages)/SubscribedFeedsProvider/src/com/android/providers/subscribedfeeds/SubscribedFeedsIntentService.java
-source_files += $(base_packages)/SubscribedFeedsProvider/src/com/android/providers/subscribedfeeds/SubscribedFeedsBroadcastReceiver.java
+LOCAL_SRC_FILES := $(call all-java-files-under, src)
 
-LOCAL_SRC_FILES := $(call all-subdir-java-files) $(source_files)
-
-# We depend on googlelogin-client also, but that is already being included by google-framework
-LOCAL_STATIC_JAVA_LIBRARIES := google-framework
-
-LOCAL_OVERRIDES_PACKAGES := SubscribedFeedsProvider
-
-LOCAL_PACKAGE_NAME := GoogleSubscribedFeedsProvider
+LOCAL_PACKAGE_NAME := AccountAndSyncSettings
 LOCAL_CERTIFICATE := platform
 
 include $(BUILD_PACKAGE)
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index aa768b1..1021175 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -2,25 +2,21 @@
         package="com.android.providers.subscribedfeeds"
         android:sharedUserId="android.uid.system">
 
-    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
-    <uses-permission android:name="com.google.android.googleapps.permission.GOOGLE_AUTH" />
-    <uses-permission android:name="com.google.android.googleapps.permission.GOOGLE_AUTH.cp" />
-    <uses-permission android:name="com.google.android.googleapps.permission.GOOGLE_AUTH.cl" />
-    <uses-permission android:name="com.google.android.googleapps.permission.GOOGLE_AUTH.mail" />
+    <uses-permission android:name="android.permission.USE_CREDENTIALS" />
+    <uses-permission android:name="android.permission.BACKUP" />
     <uses-permission android:name="android.permission.READ_SYNC_SETTINGS" />
     <uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS" />
     <uses-permission android:name="android.permission.READ_SYNC_STATS" />
-    <uses-permission android:name="android.permission.SUBSCRIBED_FEEDS_READ" />
-    <uses-permission android:name="android.permission.SUBSCRIBED_FEEDS_WRITE" />
+    <uses-permission android:name="android.permission.READ_SYNC_SETTINGS" />
+    <uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS" />
 
     <application android:process="system"
                  android:allowClearUserData="false"
                  android:icon="@drawable/app_icon"
                  android:label="@string/app_label">
 
-        <uses-library android:name="com.google.android.gtalkservice" />
-
-        <activity android:name="com.android.settings.SyncSettings" android:label="@string/sync_settings">
+        <activity android:name="com.android.settings.ManageAccountsSettings"
+            android:label="@string/sync_settings">
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
                 <action android:name="android.settings.SYNC_SETTINGS" />
@@ -28,6 +24,35 @@
             </intent-filter>
         </activity>
 
+        <activity android:name="com.android.settings.AccountSyncSettings"
+            android:label="@string/sync_settings"
+            android:theme="@android:style/Theme.NoTitleBar">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <action android:name="android.settings.ACCOUNT_SYNC_SETTINGS" />
+                <category android:name="android.intent.category.DEFAULT" />
+            </intent-filter>
+        </activity>
+
+        <activity android:name="com.android.settings.AccountSyncSettingsInAddAccount"
+            android:label="@string/sync_settings"
+            android:theme="@android:style/Theme.NoTitleBar">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <action android:name="android.settings.ACCOUNT_SYNC_SETTINGS_ADD_ACCOUNT" />
+                <category android:name="android.intent.category.DEFAULT" />
+            </intent-filter>
+        </activity>
+
+        <activity android:name="com.android.settings.AddAccountSettings"
+            android:label="@string/header_add_an_account">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <action android:name="android.settings.ADD_ACCOUNT_SETTINGS" />
+                <category android:name="android.intent.category.DEFAULT" />
+            </intent-filter>
+        </activity>
+
         <activity android:name="com.android.settings.SyncActivityTooManyDeletes"
                   android:theme="@android:style/Theme.Dialog"
                   android:label="@string/sync_too_many_deletes">
@@ -36,25 +61,5 @@
                 <category android:name="android.intent.category.DEFAULT" />
             </intent-filter>
         </activity>
-
-        <provider android:name="GoogleSubscribedFeedsProvider"
-                android:authorities="subscribedfeeds" android:syncable="true"
-                android:multiprocess="false"
-                android:readPermission="android.permission.SUBSCRIBED_FEEDS_READ"
-                android:writePermission="android.permission.SUBSCRIBED_FEEDS_WRITE" />
-
-        <receiver android:name="SubscribedFeedsBroadcastReceiver">
-            <intent-filter>
-                <action android:name="android.intent.action.GTALK_DATA_MESSAGE_RECEIVED" />
-                <category android:name="GSYNC_TICKLE"/>
-            </intent-filter>
-            <intent-filter>
-                <action android:name="android.intent.action.BOOT_COMPLETED" />
-            </intent-filter>
-            <intent-filter>
-                <action android:name="com.android.subscribedfeeds.action.REFRESH" />
-            </intent-filter>
-        </receiver>
-        <service android:name="SubscribedFeedsIntentService"/>
     </application>
 </manifest>
diff --git a/res/drawable-hdpi/app_icon.png b/res/drawable-hdpi/app_icon.png
new file mode 100755
index 0000000..f274432
--- /dev/null
+++ b/res/drawable-hdpi/app_icon.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_btn_next.png b/res/drawable-hdpi/ic_btn_next.png
new file mode 100755
index 0000000..ad00a95
--- /dev/null
+++ b/res/drawable-hdpi/ic_btn_next.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_list_sync_anim0.png b/res/drawable-hdpi/ic_list_sync_anim0.png
new file mode 100755
index 0000000..dc78905
--- /dev/null
+++ b/res/drawable-hdpi/ic_list_sync_anim0.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_list_sync_anim1.png b/res/drawable-hdpi/ic_list_sync_anim1.png
new file mode 100755
index 0000000..5fe6b4f
--- /dev/null
+++ b/res/drawable-hdpi/ic_list_sync_anim1.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_list_sync_anim2.png b/res/drawable-hdpi/ic_list_sync_anim2.png
new file mode 100755
index 0000000..d9d68ed
--- /dev/null
+++ b/res/drawable-hdpi/ic_list_sync_anim2.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_list_sync_anim3.png b/res/drawable-hdpi/ic_list_sync_anim3.png
new file mode 100755
index 0000000..7275c29
--- /dev/null
+++ b/res/drawable-hdpi/ic_list_sync_anim3.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_list_sync_error.png b/res/drawable-hdpi/ic_list_sync_error.png
new file mode 100755
index 0000000..d05146a
--- /dev/null
+++ b/res/drawable-hdpi/ic_list_sync_error.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_sync_green.png b/res/drawable-hdpi/ic_sync_green.png
new file mode 100644
index 0000000..6956088
--- /dev/null
+++ b/res/drawable-hdpi/ic_sync_green.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_sync_grey.png b/res/drawable-hdpi/ic_sync_grey.png
new file mode 100644
index 0000000..3e9995a
--- /dev/null
+++ b/res/drawable-hdpi/ic_sync_grey.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_sync_red.png b/res/drawable-hdpi/ic_sync_red.png
new file mode 100644
index 0000000..5abb707
--- /dev/null
+++ b/res/drawable-hdpi/ic_sync_red.png
Binary files differ
diff --git a/res/drawable-hdpi/title_bar.9.png b/res/drawable-hdpi/title_bar.9.png
new file mode 100755
index 0000000..e8ff1f8
--- /dev/null
+++ b/res/drawable-hdpi/title_bar.9.png
Binary files differ
diff --git a/res/drawable/app_icon.png b/res/drawable-mdpi/app_icon.png
similarity index 100%
rename from res/drawable/app_icon.png
rename to res/drawable-mdpi/app_icon.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_btn_next.png b/res/drawable-mdpi/ic_btn_next.png
new file mode 100755
index 0000000..c6cf436
--- /dev/null
+++ b/res/drawable-mdpi/ic_btn_next.png
Binary files differ
diff --git a/res/drawable/ic_list_sync_anim0.png b/res/drawable-mdpi/ic_list_sync_anim0.png
similarity index 100%
rename from res/drawable/ic_list_sync_anim0.png
rename to res/drawable-mdpi/ic_list_sync_anim0.png
Binary files differ
diff --git a/res/drawable/ic_list_sync_anim1.png b/res/drawable-mdpi/ic_list_sync_anim1.png
similarity index 100%
rename from res/drawable/ic_list_sync_anim1.png
rename to res/drawable-mdpi/ic_list_sync_anim1.png
Binary files differ
diff --git a/res/drawable/ic_list_sync_anim2.png b/res/drawable-mdpi/ic_list_sync_anim2.png
similarity index 100%
rename from res/drawable/ic_list_sync_anim2.png
rename to res/drawable-mdpi/ic_list_sync_anim2.png
Binary files differ
diff --git a/res/drawable/ic_list_sync_anim3.png b/res/drawable-mdpi/ic_list_sync_anim3.png
similarity index 100%
rename from res/drawable/ic_list_sync_anim3.png
rename to res/drawable-mdpi/ic_list_sync_anim3.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_sync_green.png b/res/drawable-mdpi/ic_sync_green.png
new file mode 100644
index 0000000..177a024
--- /dev/null
+++ b/res/drawable-mdpi/ic_sync_green.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_sync_grey.png b/res/drawable-mdpi/ic_sync_grey.png
new file mode 100644
index 0000000..8f168d4
--- /dev/null
+++ b/res/drawable-mdpi/ic_sync_grey.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_sync_red.png b/res/drawable-mdpi/ic_sync_red.png
new file mode 100644
index 0000000..5e38136
--- /dev/null
+++ b/res/drawable-mdpi/ic_sync_red.png
Binary files differ
diff --git a/res/drawable-mdpi/title_bar.9.png b/res/drawable-mdpi/title_bar.9.png
new file mode 100644
index 0000000..4c78d2d
--- /dev/null
+++ b/res/drawable-mdpi/title_bar.9.png
Binary files differ
diff --git a/res/layout/account_preference.xml b/res/layout/account_preference.xml
new file mode 100644
index 0000000..a3a9d43
--- /dev/null
+++ b/res/layout/account_preference.xml
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="fill_parent"
+    android:layout_height="wrap_content"
+    android:minHeight="?android:attr/listPreferredItemHeight"
+    android:gravity="center_vertical"
+    android:paddingLeft="16dip"
+    android:paddingRight="?android:attr/scrollbarSize">
+
+    <ImageView
+        android:id="@+id/providerIcon"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginRight="5dip"
+        android:layout_gravity="center" />
+
+    <RelativeLayout
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginRight="6dip"
+        android:layout_marginTop="6dip"
+        android:layout_marginBottom="6dip"
+        android:layout_weight="1">
+
+        <TextView android:id="@+android:id/title"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:singleLine="true"
+            android:textAppearance="?android:attr/textAppearanceMedium" />
+
+        <TextView android:id="@+android:id/summary"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_below="@android:id/title"
+            android:layout_alignLeft="@android:id/title"
+            android:textAppearance="?android:attr/textAppearanceSmall"
+            android:maxLines="2" />
+
+    </RelativeLayout>
+
+    <ImageView
+        android:id="@+id/syncStatusIcon"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginLeft="5dip"
+        android:layout_marginRight="7dip"
+        android:layout_gravity="center" />
+
+</LinearLayout>
diff --git a/res/layout/account_sync_screen.xml b/res/layout/account_sync_screen.xml
new file mode 100644
index 0000000..4409acb
--- /dev/null
+++ b/res/layout/account_sync_screen.xml
@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/* //device/apps/common/assets/res/layout/list_content.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+-->
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="fill_parent"
+    android:layout_height="fill_parent"
+    android:orientation="vertical">
+
+    <include layout="@layout/title"
+        android:layout_width="fill_parent"
+        android:layout_height="wrap_content" />
+
+    <ListView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@android:id/list"
+        android:layout_width="fill_parent"
+        android:layout_height="0dip"
+        android:layout_weight="1"
+        android:drawSelectorOnTop="false"
+        android:scrollbarAlwaysDrawVerticalTrack="true"
+    />
+
+    <TextView android:id="@+id/sync_settings_error_info"
+        android:layout_width="fill_parent"
+        android:layout_height="wrap_content"
+        android:text="@string/sync_is_failing" />
+
+    <LinearLayout android:id="@+id/remove_account_area"
+        android:layout_width="fill_parent"
+        android:layout_height="wrap_content"
+        android:orientation="horizontal"
+        android:background="@android:drawable/bottom_bar">
+
+        <View
+            android:layout_width="0dip"
+            android:layout_height="fill_parent"
+            android:layout_weight="1"/>
+
+        <Button android:id="@+id/remove_account_button"
+            android:layout_width="0dip"
+            android:layout_height="wrap_content"
+            android:layout_weight="2"
+            android:layout_marginTop="5dip"
+            android:text="@string/remove_account_label" />
+
+        <View
+            android:layout_width="0dip"
+            android:layout_height="fill_parent"
+            android:layout_weight="1"/>
+    </LinearLayout>
+    
+    <RelativeLayout android:id="@+id/finish_button_area"
+        android:layout_height="wrap_content"
+        android:layout_width="fill_parent"
+        android:background="@android:drawable/bottom_bar"
+        android:visibility="gone">
+        
+        <Button android:id="@+id/finish_button"
+            android:layout_width="150dip"
+            android:layout_height="wrap_content"
+            android:layout_margin="5dip"
+            android:layout_alignParentRight="true"
+            android:drawableRight="@drawable/ic_btn_next"
+            android:drawablePadding="3dip"
+            android:text="@string/finish_button_label"
+        />
+        
+    </RelativeLayout>
+
+</LinearLayout>
diff --git a/res/layout/sync_settings_list_content.xml b/res/layout/add_account_screen.xml
similarity index 61%
rename from res/layout/sync_settings_list_content.xml
rename to res/layout/add_account_screen.xml
index 9573d36..8d4be3d 100644
--- a/res/layout/sync_settings_list_content.xml
+++ b/res/layout/add_account_screen.xml
@@ -18,18 +18,16 @@
 */
 -->
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-  android:layout_width="fill_parent"
-  android:layout_height="fill_parent"
-  android:orientation="vertical">
-  <ListView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@android:id/list"
     android:layout_width="fill_parent"
-    android:layout_height="0dip"
-    android:layout_weight="1"
-    android:drawSelectorOnTop="false"
-    android:scrollbarAlwaysDrawVerticalTrack="true"
+    android:layout_height="fill_parent"
+    android:orientation="vertical">
+
+    <ListView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@android:id/list"
+        android:layout_width="fill_parent"
+        android:layout_height="0dip"
+        android:layout_weight="1"
+        android:drawSelectorOnTop="false"
+        android:scrollbarAlwaysDrawVerticalTrack="true"
     />
-  <TextView android:id="@+id/sync_settings_error_info"
-    android:layout_width="fill_parent"
-    android:layout_height="wrap_content"
-    android:text="@string/sync_is_failing" />
+
 </LinearLayout>
diff --git a/res/layout/manage_accounts_screen.xml b/res/layout/manage_accounts_screen.xml
new file mode 100644
index 0000000..55e8d22
--- /dev/null
+++ b/res/layout/manage_accounts_screen.xml
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/* //device/apps/common/assets/res/layout/list_content.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+-->
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="fill_parent"
+    android:layout_height="fill_parent"
+    android:orientation="vertical">
+
+    <ListView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@android:id/list"
+        android:layout_width="fill_parent"
+        android:layout_height="0dip"
+        android:layout_weight="1"
+        android:drawSelectorOnTop="false"
+        android:scrollbarAlwaysDrawVerticalTrack="true"
+    />
+
+    <TextView android:id="@+id/sync_settings_error_info"
+        android:layout_width="fill_parent"
+        android:layout_height="wrap_content"
+        android:text="@string/sync_is_failing" />
+
+    <LinearLayout
+        android:layout_width="fill_parent"
+        android:layout_height="wrap_content"
+        android:orientation="horizontal"
+        android:background="@android:drawable/bottom_bar">
+
+        <View
+            android:layout_width="0dip"
+            android:layout_height="fill_parent"
+            android:layout_weight="1"/>
+
+        <Button android:id="@+id/add_account_button"
+            android:layout_width="0dip"
+            android:layout_height="wrap_content"
+            android:layout_weight="2"
+            android:layout_marginTop="5dip"
+            android:text="@string/add_account_label" />
+
+        <View
+            android:layout_width="0dip"
+            android:layout_height="fill_parent"
+            android:layout_weight="1"/>
+    </LinearLayout>
+
+</LinearLayout>
diff --git a/res/layout/provider_preference.xml b/res/layout/provider_preference.xml
new file mode 100644
index 0000000..3daaf30
--- /dev/null
+++ b/res/layout/provider_preference.xml
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="fill_parent"
+    android:layout_height="wrap_content"
+    android:minHeight="?android:attr/listPreferredItemHeight"
+    android:gravity="center_vertical"
+    android:paddingLeft="16dip"
+    android:paddingRight="?android:attr/scrollbarSize">
+
+    <ImageView
+        android:id="@+id/providerIcon"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginRight="5dip"
+        android:layout_gravity="center" />
+
+    <RelativeLayout
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginRight="6dip"
+        android:layout_marginTop="6dip"
+        android:layout_marginBottom="6dip"
+        android:layout_weight="1">
+
+        <TextView android:id="@+android:id/title"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:singleLine="true"
+            android:textAppearance="?android:attr/textAppearanceMedium" />
+
+        <TextView android:id="@+android:id/summary"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_below="@android:id/title"
+            android:layout_alignLeft="@android:id/title"
+            android:textAppearance="?android:attr/textAppearanceSmall"
+            android:maxLines="2" />
+
+    </RelativeLayout>
+
+    <ImageView
+        android:id="@+id/syncStatusIcon"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginLeft="5dip"
+        android:layout_gravity="center" />
+
+</LinearLayout>
diff --git a/res/layout/title.xml b/res/layout/title.xml
new file mode 100644
index 0000000..85efdd3
--- /dev/null
+++ b/res/layout/title.xml
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/**
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+-->
+
+<!-- The title area at the top of the screen -->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/title_area"
+    android:orientation="horizontal"
+    android:background="@drawable/title_bar">
+
+    <ImageView android:id="@+id/provider_icon"
+        android:layout_width="48dip"
+        android:layout_height="48dip"
+        android:layout_margin="5dip"
+        android:layout_gravity="center_vertical" />
+
+    <LinearLayout
+        android:layout_width="0dip"
+        android:layout_weight="1"
+        android:layout_height="wrap_content"
+        android:orientation="vertical"
+        android:background="@drawable/title_bar">
+
+        <TextView
+            android:id="@+id/user_id"
+            android:layout_width="fill_parent"
+            android:layout_height="wrap_content"
+            android:textAppearance="?android:attr/textAppearanceMedium"
+            android:textStyle="bold"
+            android:singleLine="true"
+            android:ellipsize="end"
+            android:gravity="center_vertical"
+            android:layout_marginTop="5dip"/>
+
+        <TextView
+            android:id="@+id/provider_id"
+            android:layout_width="fill_parent"
+            android:layout_height="wrap_content"
+            android:textAppearance="?android:attr/textAppearanceSmall"
+            android:singleLine="true"
+            android:ellipsize="end"
+            android:layout_gravity="bottom"
+            android:layout_marginBottom="5dip"/>
+
+    </LinearLayout>
+
+</LinearLayout>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index 7fc9970..318f699 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -15,18 +15,20 @@
 -->
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_label" msgid="2800463760279909883">"Synchronizace zdrojů"</string>
-    <string name="sync_settings" msgid="4549768061467147584">"Synchronizace dat"</string>
+    <string name="app_label" msgid="569000083919693222">"Synchronizace zdrojů"</string>
+    <string name="sync_settings" msgid="8707056705985552604">"Nastavení účtů a synchronizace"</string>
     <string name="sync_too_many_deletes" msgid="1621369057980827097">"Byl překročen limit mazání."</string>
     <string name="background_data" msgid="1103557117473896066">"Data na pozadí"</string>
-    <string name="background_data_summary" msgid="4689952168187153486">"Povolit používání dat na pozadí"</string>
+    <string name="background_data_summary" msgid="9048259510387973822">"Aplikace mohou kdykoli synchronizovat, odesílat a přijímat data."</string>
     <string name="background_data_dialog_title" msgid="6303755495467986079">"Upozornění"</string>
-    <string name="background_data_dialog_message" msgid="2817489591533703840">"Zakázání dat na pozadí šetří baterii a snižuje objem použitých dat. Některé aplikace mohou přesto datové připojení na pozadí používat."</string>
+    <string name="background_data_dialog_message" msgid="8417297954700022363">"Deaktivace přenosu dat na pozadí šetří baterii a snižuje objem použitých dat. Některé aplikace mohou přesto datové připojení na pozadí používat."</string>
     <string name="sync_automatically" msgid="4694735102757960100">"Automatická synchronizace"</string>
-    <string name="sync_automatically_summary" msgid="6210073947698673774">"Data jsou synchronizována automaticky"</string>
+    <string name="sync_automatically_summary" msgid="4598895616781542745">"Aplikace synchronizují data automaticky"</string>
+    <string name="settings_backup" msgid="6114299464740014762">"Zálohovat nastavení"</string>
+    <string name="settings_backup_summary" msgid="1787552172618610178">"Zálohovat moje nastavení"</string>
     <string name="sync_menu_sync_now" msgid="5796024841315572404">"Synchronizovat nyní"</string>
     <string name="sync_menu_sync_cancel" msgid="1005480041232010062">"Zrušit synchronizaci"</string>
-    <string name="sync_one_time_sync" msgid="3474532720071919514">"Synchronizovat nyní<xliff:g id="LAST_SYNC_TIME">
+    <string name="sync_one_time_sync" msgid="3274364877518422827">"Dotykem provedete synchronizaci nyní<xliff:g id="LAST_SYNC_TIME">
 %1$s</xliff:g>"</string>
     <string name="sync_gmail" msgid="5806053858668452000">"Gmail"</string>
     <string name="sync_calendar" msgid="1796292773734071897">"Kalendář"</string>
@@ -36,7 +38,25 @@
     <string name="sync_undo_deletes" msgid="8695514459839593307">"Vrátit mazání zpět."</string>
     <string name="sync_do_nothing" msgid="5798755982392201673">"Nyní neprovádět žádnou akci."</string>
     <string name="sync_is_failing" msgid="5230237058552433773">"Nastaly potíže se synchronizací. Služba bude brzy obnovena."</string>
-    <string name="sync_plug" msgid="4526246957714417280"><font fgcolor="#ffffffff">"Vítá vás aplikace Google Sync"</font>" "\n"Nový pohled na synchronizaci dat v režii Google. Poskytuje vám přístup ke kontaktům, schůzkám a dalším náležitostem, ať jste kdekoli."</string>
+    <string name="sync_plug" msgid="7020432439004167162"><font fgcolor="#ffffffff">"Vítá vás aplikace Google Sync"</font>" "\n"Nový pohled na synchronizaci dat v režii Googlu. Poskytuje vám přístup ke kontaktům, schůzkám a dalším informacím, ať jste kdekoli."</string>
     <string name="header_application_sync_settings" msgid="5263025067167527890">"Nastavení synchronizace aplikací"</string>
+    <string name="header_manage_accounts" msgid="381956296995298770">"Spravovat účty"</string>
     <string name="header_general_sync_settings" msgid="1598537524696692308">"Obecná nastavení synchronizace"</string>
+    <string name="sync_enabled" msgid="913018877443997502">"Synchronizace je ZAPNUTA"</string>
+    <string name="sync_disabled" msgid="185731301298967302">"Synchronizace je VYPNUTA"</string>
+    <string name="sync_error" msgid="681431702824599812">"Chyba synchronizace"</string>
+    <string name="add_account_label" msgid="2035321485672826779">"Přidat účet"</string>
+    <string name="header_data_and_synchronization" msgid="6286257845276834071">"Data a synchronizace"</string>
+    <string name="preference_change_password_title" msgid="6468827554159468315">"Změnit heslo"</string>
+    <string name="header_account_settings" msgid="4950809499418403792">"Nastavení účtu"</string>
+    <string name="remove_account_label" msgid="5624712684599197863">"Odebrat účet"</string>
+    <string name="header_add_an_account" msgid="2198078922829535425">"Přidat účet"</string>
+    <string name="finish_button_label" msgid="6121560986057356757">"Dokončit"</string>
+    <string name="really_remove_account_title" msgid="8808121039511188784">"Odebrat účet"</string>
+    <string name="really_remove_account_message" msgid="3293445755620109578">"Opravdu chcete tento účet odebrat? Z telefonu budou smazány také všechny zprávy, kontakty a další data tohoto účtu. "\n"Pokračovat?"</string>
+    <string name="remove_account_failed" msgid="8178924513521241001">"Tento účet je požadován některými aplikacemi. Můžete jej odebrat pouze obnovením výchozího nastavení telefonu z výroby (které smaže všechna osobní data). Můžete to provést v aplikaci Nastavení v části Ochrana osobních údajů."</string>
+    <string name="provider_label" msgid="6191617139291321517">"Zobrazit odběry"</string>
+    <string name="sync_item_title" msgid="7984962124867021854">"Synchronizace služby <xliff:g id="AUTHORITY">%s</xliff:g>"</string>
+    <string name="cant_sync_dialog_title" msgid="3016197392261471761">"Nelze ručně synchronizovat"</string>
+    <string name="cant_sync_dialog_message" msgid="7200115394296632300">"Synchronizace této položky je aktuálně deaktivována. Chcete-li předvolbu změnit, dočasně zapněte přenos dat na pozadí a automatickou synchronizaci."</string>
 </resources>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index 2b8ef09..733929c 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -15,29 +15,48 @@
 -->
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <!-- no translation found for app_label (2800463760279909883) -->
-    <skip />
-    <string name="sync_settings" msgid="4549768061467147584">"Datasynkronisering"</string>
+    <string name="app_label" msgid="569000083919693222">"Synkroniser feeds"</string>
+    <string name="sync_settings" msgid="8707056705985552604">"Indstillinger for konti og synkronisering"</string>
     <string name="sync_too_many_deletes" msgid="1621369057980827097">"Grænsen for sletning er overskredet"</string>
     <string name="background_data" msgid="1103557117473896066">"Baggrundsdata"</string>
-    <string name="background_data_summary" msgid="4689952168187153486">"Aktiver baggrundsdatabrug"</string>
+    <string name="background_data_summary" msgid="9048259510387973822">"Programmer kan altid synkronisere, sende og modtage data"</string>
     <string name="background_data_dialog_title" msgid="6303755495467986079">"Bemærk"</string>
-    <string name="background_data_dialog_message" msgid="2817489591533703840">"Deaktivering af baggrundsdata sparer på batteriet og mindsker databrug. Nogle programmer kan muligvis stadig bruge baggrundsdataforbindelsen."</string>
+    <string name="background_data_dialog_message" msgid="8417297954700022363">"Deaktivering af baggrundsdata forlænger batteriets levetid og mindsker databrug. Nogle programmer kan muligvis stadig bruge baggrundsdataforbindelsen."</string>
     <string name="sync_automatically" msgid="4694735102757960100">"Autom. synkronisering"</string>
-    <string name="sync_automatically_summary" msgid="6210073947698673774">"Synkroniser automatisk data"</string>
+    <string name="sync_automatically_summary" msgid="4598895616781542745">"Programmer synkroniserer data automatisk"</string>
+    <string name="settings_backup" msgid="6114299464740014762">"Sikkerhedskopier indstillinger"</string>
+    <string name="settings_backup_summary" msgid="1787552172618610178">"Sikkerhedskopier mine indstillinger"</string>
     <string name="sync_menu_sync_now" msgid="5796024841315572404">"Synkroniser nu"</string>
     <string name="sync_menu_sync_cancel" msgid="1005480041232010062">"Annuller synkronisering"</string>
-    <string name="sync_one_time_sync" msgid="3474532720071919514">"Vælg at synkronisere nu<xliff:g id="LAST_SYNC_TIME">
+    <string name="sync_one_time_sync" msgid="3274364877518422827">"Berør for at synkronisere nu<xliff:g id="LAST_SYNC_TIME">
 %1$s</xliff:g>"</string>
     <string name="sync_gmail" msgid="5806053858668452000">"Gmail"</string>
     <string name="sync_calendar" msgid="1796292773734071897">"Kalender"</string>
-    <string name="sync_contacts" msgid="2035690905925565660">"Kontakter"</string>
+    <string name="sync_contacts" msgid="2035690905925565660">"Kontakt."</string>
     <string name="sync_too_many_deletes_desc" msgid="699495654174066067">"Der er <xliff:g id="NUMBER_OF_DELETED_ITEMS">%1$d</xliff:g> slettede elementer for <xliff:g id="TYPE_OF_SYNC">%2$s</xliff:g>, konto <xliff:g id="ACCOUNT_NAME">%3$s</xliff:g>. Hvad ønsker du at gøre?"</string>
     <string name="sync_really_delete" msgid="5456355204562588976">"Slet elementerne."</string>
     <string name="sync_undo_deletes" msgid="8695514459839593307">"Fortryd sletningerne."</string>
     <string name="sync_do_nothing" msgid="5798755982392201673">"Gør ikke noget lige nu."</string>
     <string name="sync_is_failing" msgid="5230237058552433773">"Der er problemer med synkronisering i øjeblikket. Det vender snart tilbage."</string>
-    <string name="sync_plug" msgid="4526246957714417280"><font fgcolor="#ffffffff">"Velkommen til Google Sync!"</font>" "\n"En tilgang til synkronisering af data fra Google, hvilket lader dig få adgang til dine kontakter, aftaler og mere, uanset hvor du er."</string>
+    <string name="sync_plug" msgid="7020432439004167162"><font fgcolor="#ffffffff">"Velkommen til Google\nSync!"</font>" "\n"En tilgang til synkronisering af data fra Google, som giver dig adgang til dine kontaktpersoner, aftaler og mere, uanset hvor du er."</string>
     <string name="header_application_sync_settings" msgid="5263025067167527890">"Indstillinger for programsynkronisering"</string>
+    <string name="header_manage_accounts" msgid="381956296995298770">"Administrer konti"</string>
     <string name="header_general_sync_settings" msgid="1598537524696692308">"Generelle synkroniseringsindstillinger"</string>
+    <string name="sync_enabled" msgid="913018877443997502">"Synkronisering er aktiveret"</string>
+    <string name="sync_disabled" msgid="185731301298967302">"Synkronisering slået fra"</string>
+    <string name="sync_error" msgid="681431702824599812">"Synkroniseringsfejl"</string>
+    <string name="add_account_label" msgid="2035321485672826779">"Tilføj konto"</string>
+    <string name="header_data_and_synchronization" msgid="6286257845276834071">"Data og synkronisering"</string>
+    <string name="preference_change_password_title" msgid="6468827554159468315">"Skift adgangskode"</string>
+    <string name="header_account_settings" msgid="4950809499418403792">"Kontoindstillinger"</string>
+    <string name="remove_account_label" msgid="5624712684599197863">"Fjern konto"</string>
+    <string name="header_add_an_account" msgid="2198078922829535425">"Tilføj en konto"</string>
+    <string name="finish_button_label" msgid="6121560986057356757">"Afslut"</string>
+    <string name="really_remove_account_title" msgid="8808121039511188784">"Fjern konto"</string>
+    <string name="really_remove_account_message" msgid="3293445755620109578">"Ønsker du virkelig at fjerne denne konto? Hvis du fjerner den, slettes også alle dens beskeder, kontaktpersoner og andre data fra telefonen. "\n"Fortsæt?"</string>
+    <string name="remove_account_failed" msgid="8178924513521241001">"Denne konto er påkrævet af nogle programmer. Du kan kun fjerne den ved at nulstille telefonen til fabriksstandard (hvilket sletter alle dine personlige data). Du kan gøre dette i Indstillingsprogrammet under Beskyttelse af personlige oplysninger."</string>
+    <string name="provider_label" msgid="6191617139291321517">"Push-abonnementer"</string>
+    <string name="sync_item_title" msgid="7984962124867021854">"Synkroniser<xliff:g id="AUTHORITY">%s</xliff:g>"</string>
+    <string name="cant_sync_dialog_title" msgid="3016197392261471761">"Kan ikke synkronisere manuelt"</string>
+    <string name="cant_sync_dialog_message" msgid="7200115394296632300">"Synkronisering af dette element er slået fra i øjeblikket. Hvis du vil ændre indstillingen, skal du midlertidigt slå baggrundsdata til og synkronisere automatisk."</string>
 </resources>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index a89b482..706488b 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -15,18 +15,20 @@
 -->
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_label" msgid="2800463760279909883">"Feedsynchronisierung"</string>
-    <string name="sync_settings" msgid="4549768061467147584">"Datensynchronisierung"</string>
+    <string name="app_label" msgid="569000083919693222">"Feedsynchronisierung"</string>
+    <string name="sync_settings" msgid="8707056705985552604">"Einstellungen für Konten &amp; Synchronisierung"</string>
     <string name="sync_too_many_deletes" msgid="1621369057980827097">"Löschbegrenzung überschritten"</string>
     <string name="background_data" msgid="1103557117473896066">"Hintergrunddaten"</string>
-    <string name="background_data_summary" msgid="4689952168187153486">"Verwendung von Hintergrunddaten aktivieren"</string>
+    <string name="background_data_summary" msgid="9048259510387973822">"Die Anwendungen können jederzeit Daten synchronisieren, senden und empfangen"</string>
     <string name="background_data_dialog_title" msgid="6303755495467986079">"Achtung"</string>
-    <string name="background_data_dialog_message" msgid="2817489591533703840">"Durch die Deaktivierung von Hintergrunddaten kann Strom gespart und die Verwendung von Daten verringert werden. Einige Anwendungen nutzen die Hintergrunddatenverbindung möglicherweise weiterhin."</string>
+    <string name="background_data_dialog_message" msgid="8417297954700022363">"Durch die Deaktivierung von Hintergrunddaten kann die Akkulaufzeit verlängert und die Verwendung von Daten verringert werden. Einige Anwendungen nutzen die Hintergrunddatenverbindung möglicherweise weiterhin."</string>
     <string name="sync_automatically" msgid="4694735102757960100">"Autom. synchronisieren"</string>
-    <string name="sync_automatically_summary" msgid="6210073947698673774">"Daten automatisch synchronisieren"</string>
+    <string name="sync_automatically_summary" msgid="4598895616781542745">"Anwendungen synchronisieren Daten automatisch."</string>
+    <string name="settings_backup" msgid="6114299464740014762">"Einstellungen sichern"</string>
+    <string name="settings_backup_summary" msgid="1787552172618610178">"Meine Einstellungen sichern"</string>
     <string name="sync_menu_sync_now" msgid="5796024841315572404">"Jetzt synchronisieren"</string>
     <string name="sync_menu_sync_cancel" msgid="1005480041232010062">"Synchronisierung abbrechen"</string>
-    <string name="sync_one_time_sync" msgid="3474532720071919514">"Jetzt synchronisieren: <xliff:g id="LAST_SYNC_TIME">
+    <string name="sync_one_time_sync" msgid="3274364877518422827">"Zum sofortigen Synchronisieren berühren<xliff:g id="LAST_SYNC_TIME">
 %1$s</xliff:g>"</string>
     <string name="sync_gmail" msgid="5806053858668452000">"Gmail"</string>
     <string name="sync_calendar" msgid="1796292773734071897">"Google Kalender"</string>
@@ -36,7 +38,25 @@
     <string name="sync_undo_deletes" msgid="8695514459839593307">"Löschen rückgängig machen"</string>
     <string name="sync_do_nothing" msgid="5798755982392201673">"Im Moment nichts unternehmen"</string>
     <string name="sync_is_failing" msgid="5230237058552433773">"Bei der Synchronisierung treten derzeit Probleme auf. Sie wird in Kürze fortgesetzt."</string>
-    <string name="sync_plug" msgid="4526246957714417280"><font fgcolor="#ffffffff">"Willkommen bei Google Sync!"</font>\n"Mit dieser Funktion von Google können Sie Ihre Daten synchronisieren, um auf Ihre Kontakte, Termine und vieles mehr zuzugreifen - wo immer Sie auch sind!"</string>
+    <string name="sync_plug" msgid="7020432439004167162"><font fgcolor="#ffffffff">"Willkommen bei Google Sync!"</font>\n"Mit dieser Funktion von Google können Sie Ihre Daten synchronisieren, um auf Ihre Kontakte, Termine und vieles mehr zuzugreifen - wo immer Sie auch sind!"</string>
     <string name="header_application_sync_settings" msgid="5263025067167527890">"Anwendungssynchronisierung"</string>
+    <string name="header_manage_accounts" msgid="381956296995298770">"Konten verwalten"</string>
     <string name="header_general_sync_settings" msgid="1598537524696692308">"Allgemeine Synchronisierungseinstellungen"</string>
+    <string name="sync_enabled" msgid="913018877443997502">"Synchronisierung ist aktiviert"</string>
+    <string name="sync_disabled" msgid="185731301298967302">"Synchronisierung deaktiviert"</string>
+    <string name="sync_error" msgid="681431702824599812">"Synchronisierungsfehler"</string>
+    <string name="add_account_label" msgid="2035321485672826779">"Konto hinzufügen"</string>
+    <string name="header_data_and_synchronization" msgid="6286257845276834071">"Daten und Synchronisierung"</string>
+    <string name="preference_change_password_title" msgid="6468827554159468315">"Passwort ändern"</string>
+    <string name="header_account_settings" msgid="4950809499418403792">"Kontoeinstellungen"</string>
+    <string name="remove_account_label" msgid="5624712684599197863">"Konto entfernen"</string>
+    <string name="header_add_an_account" msgid="2198078922829535425">"Konto hinzufügen"</string>
+    <string name="finish_button_label" msgid="6121560986057356757">"Fertigstellen"</string>
+    <string name="really_remove_account_title" msgid="8808121039511188784">"Konto entfernen"</string>
+    <string name="really_remove_account_message" msgid="3293445755620109578">"Möchten Sie dieses Konto wirklich entfernen? Hierdurch werden auch die zugehörigen Nachrichten, Kontakte und anderen Daten auf dem Telefon gelöscht. "\n"Vorgang fortsetzen?"</string>
+    <string name="remove_account_failed" msgid="8178924513521241001">"Dieses Konto wird von einigen Anwendungen benötigt. Sie können es nur entfernen, indem Sie das Telefon auf die Werkseinstellungen zurücksetzen und so alle persönlichen Daten löschen. Wählen Sie hierfür unter \"Datenschutz\" die Option \"Einstellungen\"."</string>
+    <string name="provider_label" msgid="6191617139291321517">"Push-Abos"</string>
+    <string name="sync_item_title" msgid="7984962124867021854">"<xliff:g id="AUTHORITY">%s</xliff:g> synchronisieren"</string>
+    <string name="cant_sync_dialog_title" msgid="3016197392261471761">"Manuelle Synchronisierung kann nicht durchgeführt werden"</string>
+    <string name="cant_sync_dialog_message" msgid="7200115394296632300">"Die Synchronisierung ist für dieses Element zurzeit deaktiviert. Zur Änderung Ihrer Voreinstellungen aktivieren Sie vorübergehend Hintergrunddaten und automatische Synchronisierung."</string>
 </resources>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index 2482062..b1d1bb6 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -15,19 +15,20 @@
 -->
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <!-- no translation found for app_label (2800463760279909883) -->
-    <skip />
-    <string name="sync_settings" msgid="4549768061467147584">"Συγχρονισμός δεδομένων"</string>
+    <string name="app_label" msgid="569000083919693222">"Συγχρονισμός ροών δεδομένων"</string>
+    <string name="sync_settings" msgid="8707056705985552604">"Ρυθμίσεις λογαριασμών &amp; συγχρονισμού"</string>
     <string name="sync_too_many_deletes" msgid="1621369057980827097">"Έγινε υπέρβαση του ορίου διαγραφής."</string>
     <string name="background_data" msgid="1103557117473896066">"Δεδομένα φόντου"</string>
-    <string name="background_data_summary" msgid="4689952168187153486">"Ενεργοποίηση χρήσης δεδομένων φόντου"</string>
+    <string name="background_data_summary" msgid="9048259510387973822">"Οι εφαρμογές μπορούν να κάνουν συγχρονισμό, αποστολή και λήψη δεδομένων ανά πάσα στιγμή"</string>
     <string name="background_data_dialog_title" msgid="6303755495467986079">"Προσοχή"</string>
-    <string name="background_data_dialog_message" msgid="2817489591533703840">"Η απενεργοποίηση δεδομένων φόντου εξοικονομεί ενέργεια μπαταρίας και μειώνει τη χρήση δεδομένων. Ορισμένες εφαρμογές ενδέχεται να συνεχίσουν να χρησιμοποιούν τη σύνδεση δεδομένων φόντου."</string>
+    <string name="background_data_dialog_message" msgid="8417297954700022363">"Η απενεργοποίηση δεδομένων παρασκηνίου αυξάνει το χρόνο ζωής της μπαταρίας και μειώνει τη χρήση δεδομένων. Ορισμένες εφαρμογές ενδέχεται να συνεχίσουν να χρησιμοποιούν τη σύνδεση δεδομένων παρασκηνίου."</string>
     <string name="sync_automatically" msgid="4694735102757960100">"Αυτόματος συγχρονισμός"</string>
-    <string name="sync_automatically_summary" msgid="6210073947698673774">"Αυτόματος συγχρονισμός δεδομένων"</string>
+    <string name="sync_automatically_summary" msgid="4598895616781542745">"Οι εφαρμογές συγχρονίζουν αυτόματα τα δεδομένα"</string>
+    <string name="settings_backup" msgid="6114299464740014762">"Δημιουργία αντιγράφων ασφαλείας για τις ρυθμίσεις"</string>
+    <string name="settings_backup_summary" msgid="1787552172618610178">"Δημιουργία αντιγράφων ασφαλείας για τις ρυθμίσεις μου"</string>
     <string name="sync_menu_sync_now" msgid="5796024841315572404">"Να γίνει συγχρονισμός τώρα"</string>
     <string name="sync_menu_sync_cancel" msgid="1005480041232010062">"Ακύρωση συγχρονισμού"</string>
-    <string name="sync_one_time_sync" msgid="3474532720071919514">"Επιλέξτε για συγχρονισμό τώρα<xliff:g id="LAST_SYNC_TIME">
+    <string name="sync_one_time_sync" msgid="3274364877518422827">"Πατήστε για συγχρονισμό τώρα<xliff:g id="LAST_SYNC_TIME">
 %1$s</xliff:g>"</string>
     <string name="sync_gmail" msgid="5806053858668452000">"Gmail"</string>
     <string name="sync_calendar" msgid="1796292773734071897">"Ημερολόγιο"</string>
@@ -37,7 +38,25 @@
     <string name="sync_undo_deletes" msgid="8695514459839593307">"Αναίρεση των διαγραφών."</string>
     <string name="sync_do_nothing" msgid="5798755982392201673">"Να μην γίνει καμία ενέργεια τώρα."</string>
     <string name="sync_is_failing" msgid="5230237058552433773">"Το Sync αντιμετωπίζει προβλήματα αυτή τη στιγμή. Θα είναι διαθέσιμο ξανά σε λίγο."</string>
-    <string name="sync_plug" msgid="4526246957714417280"><font fgcolor="#ffffffff">"Καλώς ορίσατε στο Google Sync!"</font>" "\n"Μια προσέγγιση της Google στον συγχρονισμό δεδομένων ώστε να αποκτήσετε πρόσβαση στις επαφές σας, στις συναντήσεις σας και σε άλλα, οπουδήποτε κι αν είστε."</string>
+    <string name="sync_plug" msgid="7020432439004167162"><font fgcolor="#ffffffff">"Καλώς ορίσατε στο Google Sync!"</font>" "\n"Μια προσέγγιση της Google στον συγχρονισμό δεδομένων ώστε να επιτρέπεται η πρόσβαση στις επαφές σας, στις συναντήσεις σας και σε άλλα, οπουδήποτε κι αν είστε."</string>
     <string name="header_application_sync_settings" msgid="5263025067167527890">"Ρυθμίσεις συγχρονισμού εφαρμογής"</string>
+    <string name="header_manage_accounts" msgid="381956296995298770">"Διαχείριση λογαριασμών"</string>
     <string name="header_general_sync_settings" msgid="1598537524696692308">"Γενικές ρυθμίσεις συγχρονισμού"</string>
+    <string name="sync_enabled" msgid="913018877443997502">"Ο συγχρονισμός είναι ενεργοποιημένος"</string>
+    <string name="sync_disabled" msgid="185731301298967302">"Ο συγχρονισμός είναι απενεργοποιημένος"</string>
+    <string name="sync_error" msgid="681431702824599812">"Σφάλμα συγχρονισμού"</string>
+    <string name="add_account_label" msgid="2035321485672826779">"Προσθήκη λογαριασμού"</string>
+    <string name="header_data_and_synchronization" msgid="6286257845276834071">"Δεδομένα και συγχρονισμός"</string>
+    <string name="preference_change_password_title" msgid="6468827554159468315">"Αλλαγή κωδικού πρόσβασης"</string>
+    <string name="header_account_settings" msgid="4950809499418403792">"Ρυθμίσεις λογαριασμού"</string>
+    <string name="remove_account_label" msgid="5624712684599197863">"Κατάργηση λογαριασμού"</string>
+    <string name="header_add_an_account" msgid="2198078922829535425">"Προσθήκη λογαριασμού"</string>
+    <string name="finish_button_label" msgid="6121560986057356757">"Τέλος"</string>
+    <string name="really_remove_account_title" msgid="8808121039511188784">"Κατάργηση λογαριασμού"</string>
+    <string name="really_remove_account_message" msgid="3293445755620109578">"Είστε βέβαιοι ότι θέλετε να καταργήσετε αυτόν το λογαριασμό; Η κατάργησή του θα έχει σαν αποτέλεσμα τη διαγραφή όλων των μηνυμάτων, των επαφών και άλλων δεδομένων του από το τηλέφωνο. "\n"Συνέχεια;"</string>
+    <string name="remove_account_failed" msgid="8178924513521241001">"Αυτό ο λογαριασμός απαιτείται από ορισμένες εφαρμογές. Μπορείτε να την καταργήσετε μόνο πραγματοποιώντας επαναφορά των εργοστασιακών ρυθμίσεων του τηλεφώνου (ενέργεια που διαγράφει όλα τα προσωπικά δεδομένα σας). Μπορείτε να επιλέξετε αυτήν την ενέργεια στην εφαρμογή \"Ρυθμίσεις\", στην καρτέλα \"Απόρρητο\"."</string>
+    <string name="provider_label" msgid="6191617139291321517">"Προώθηση συνδρομών"</string>
+    <string name="sync_item_title" msgid="7984962124867021854">"Συγχρονισμός εφαρμογής <xliff:g id="AUTHORITY">%s</xliff:g>"</string>
+    <string name="cant_sync_dialog_title" msgid="3016197392261471761">"Δεν είναι δυνατός ο μη αυτόματος συγχρονισμός"</string>
+    <string name="cant_sync_dialog_message" msgid="7200115394296632300">"Ο συγχρονισμός για αυτό το στοιχείο είναι προς το παρόν απενεργοποιημένος. Για να αλλάξετε την προτίμησή σας, ενεργοποιήστε προσωρινά τα δεδομένα παρασκηνίου και τον αυτόματο συγχρονισμό."</string>
 </resources>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index e43c9fa..e75acc7 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -15,19 +15,20 @@
 -->
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <!-- no translation found for app_label (2800463760279909883) -->
-    <skip />
-    <string name="sync_settings" msgid="4549768061467147584">"Sincronización de datos"</string>
+    <string name="app_label" msgid="569000083919693222">"Canales de sincronización"</string>
+    <string name="sync_settings" msgid="8707056705985552604">"Configuración de cuentas y sincronización"</string>
     <string name="sync_too_many_deletes" msgid="1621369057980827097">"Eliminar el límite excedido"</string>
     <string name="background_data" msgid="1103557117473896066">"Datos de fondo"</string>
-    <string name="background_data_summary" msgid="4689952168187153486">"Activar el uso de datos de fondo"</string>
+    <string name="background_data_summary" msgid="9048259510387973822">"Las aplicaciones se pueden sincronizar, enviar y pueden recibir datos en cualquier momento"</string>
     <string name="background_data_dialog_title" msgid="6303755495467986079">"Atención"</string>
-    <string name="background_data_dialog_message" msgid="2817489591533703840">"Al desactivar los datos de fondo, se ahorra batería y se reduce el uso de los datos. Algunas aplicaciones incluso pueden utilizar una conexión de datos de fondo."</string>
+    <string name="background_data_dialog_message" msgid="8417297954700022363">"Al desactivar los datos de fondo, se prolonga la vida útil de la batería y se reduce el uso de los datos. Algunas aplicaciones incluso pueden utilizar una conexión de datos de fondo."</string>
     <string name="sync_automatically" msgid="4694735102757960100">"Sincroniz. automática"</string>
-    <string name="sync_automatically_summary" msgid="6210073947698673774">"Datos sincronizados automáticamente"</string>
+    <string name="sync_automatically_summary" msgid="4598895616781542745">"Las aplicaciones sincronizan los datos automáticamente."</string>
+    <string name="settings_backup" msgid="6114299464740014762">"Hacer una copia de seguridad de configuraciones"</string>
+    <string name="settings_backup_summary" msgid="1787552172618610178">"Hacer una copia de seguridad de mi configuración"</string>
     <string name="sync_menu_sync_now" msgid="5796024841315572404">"Sincronizar ahora"</string>
     <string name="sync_menu_sync_cancel" msgid="1005480041232010062">"Cancelar sincronización"</string>
-    <string name="sync_one_time_sync" msgid="3474532720071919514">"Selecciona sincronización ahora<xliff:g id="LAST_SYNC_TIME">
+    <string name="sync_one_time_sync" msgid="3274364877518422827">"Tocar para sincronizar ahora<xliff:g id="LAST_SYNC_TIME">
 %1$s</xliff:g>"</string>
     <string name="sync_gmail" msgid="5806053858668452000">"Gmail"</string>
     <string name="sync_calendar" msgid="1796292773734071897">"Calendario"</string>
@@ -37,7 +38,25 @@
     <string name="sync_undo_deletes" msgid="8695514459839593307">"Deshacer eliminaciones."</string>
     <string name="sync_do_nothing" msgid="5798755982392201673">"No hagas nada por el momento."</string>
     <string name="sync_is_failing" msgid="5230237058552433773">"En este momento la sincronización experimenta problemas. Volverá en breve."</string>
-    <string name="sync_plug" msgid="4526246957714417280"><font fgcolor="#ffffffff">"¡Bienvenido a\nGoogle Sync!"</font>" "\n"Un método de Google que sincroniza datos para permitir el acceso a tus contactos, citas y mucho más desde cualquier lugar en donde estés."</string>
+    <string name="sync_plug" msgid="7020432439004167162"><font fgcolor="#ffffffff">"¡Bienvenido a\nGoogle sync!"</font>" "\n"Un método de Google que sincroniza datos para permitir el acceso a tus contactos, citas y mucho más desde cualquier lugar en donde estés."</string>
     <string name="header_application_sync_settings" msgid="5263025067167527890">"Config. de sincroniz. de la aplic."</string>
+    <string name="header_manage_accounts" msgid="381956296995298770">"Administrar cuentas"</string>
     <string name="header_general_sync_settings" msgid="1598537524696692308">"Configuración de sincronización general"</string>
+    <string name="sync_enabled" msgid="913018877443997502">"Sincronización activada"</string>
+    <string name="sync_disabled" msgid="185731301298967302">"Sincronización desactivada"</string>
+    <string name="sync_error" msgid="681431702824599812">"Error de sincronización"</string>
+    <string name="add_account_label" msgid="2035321485672826779">"Agregar cuenta"</string>
+    <string name="header_data_and_synchronization" msgid="6286257845276834071">"Sincronización y datos"</string>
+    <string name="preference_change_password_title" msgid="6468827554159468315">"Cambiar contraseña"</string>
+    <string name="header_account_settings" msgid="4950809499418403792">"Configuración de la cuenta"</string>
+    <string name="remove_account_label" msgid="5624712684599197863">"Eliminar cuenta"</string>
+    <string name="header_add_an_account" msgid="2198078922829535425">"Agregar una cuenta"</string>
+    <string name="finish_button_label" msgid="6121560986057356757">"Finalizar"</string>
+    <string name="really_remove_account_title" msgid="8808121039511188784">"Eliminar cuenta"</string>
+    <string name="really_remove_account_message" msgid="3293445755620109578">"¿Realmente deseas eliminar·esta cuenta? Si lo haces, también suprimirás todos sus mensajes, contactos y otros datos del teléfono. "\n"¿Deseas continuar?"</string>
+    <string name="remove_account_failed" msgid="8178924513521241001">"Algunas aplicaciones requieren esta cuenta. Sólo puedes suprimirla si restableces la configuración predeterminada de fábrica en el teléfono (la cual suprime todos tus datos personales). Puedes hacerlo en la aplicación Configuración, dentro de Privacidad."</string>
+    <string name="provider_label" msgid="6191617139291321517">"Suscripciones de inserción"</string>
+    <string name="sync_item_title" msgid="7984962124867021854">"Sincronización <xliff:g id="AUTHORITY">%s</xliff:g>"</string>
+    <string name="cant_sync_dialog_title" msgid="3016197392261471761">"No se puede realizar la sincronización manual"</string>
+    <string name="cant_sync_dialog_message" msgid="7200115394296632300">"La sincronización de este elemento actualmente está desactivada. Para cambiar tus preferencias, activa momentáneamente los datos de fondo y la sincronización automática."</string>
 </resources>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index eecb893..a6faab6 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -15,18 +15,20 @@
 -->
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_label" msgid="2800463760279909883">"Sincronización de feeds"</string>
-    <string name="sync_settings" msgid="4549768061467147584">"Sincronización de datos"</string>
+    <string name="app_label" msgid="569000083919693222">"Sincronización de feeds"</string>
+    <string name="sync_settings" msgid="8707056705985552604">"Configuración de sincronización y de cuentas"</string>
     <string name="sync_too_many_deletes" msgid="1621369057980827097">"Límite de eliminaciones superado"</string>
     <string name="background_data" msgid="1103557117473896066">"Datos de referencia"</string>
-    <string name="background_data_summary" msgid="4689952168187153486">"Habilitar el uso de datos de referencia"</string>
+    <string name="background_data_summary" msgid="9048259510387973822">"Las aplicaciones pueden sincronizar datos, enviarlos y recibirlos en cualquier momento."</string>
     <string name="background_data_dialog_title" msgid="6303755495467986079">"Atención"</string>
-    <string name="background_data_dialog_message" msgid="2817489591533703840">"Si inhabilitas los datos de referencia, ahorrarás batería y reducirás el uso de datos. Es posible que algunas aplicaciones sigan utilizando la conexión de datos de referencia."</string>
+    <string name="background_data_dialog_message" msgid="8417297954700022363">"Si inhabilitas los datos de referencia, aumentarás la duración de la batería y reducirás el uso de datos. Es posible que algunas aplicaciones sigan utilizando la conexión de datos de referencia."</string>
     <string name="sync_automatically" msgid="4694735102757960100">"Sincronización automática"</string>
-    <string name="sync_automatically_summary" msgid="6210073947698673774">"Sincronizar datos de forma automática"</string>
+    <string name="sync_automatically_summary" msgid="4598895616781542745">"Las aplicaciones sincronizan los datos de forma automática."</string>
+    <string name="settings_backup" msgid="6114299464740014762">"Realizar copia de seguridad de configuración"</string>
+    <string name="settings_backup_summary" msgid="1787552172618610178">"Realizar copia de seguridad de mi configuración"</string>
     <string name="sync_menu_sync_now" msgid="5796024841315572404">"Sincronizar ahora"</string>
     <string name="sync_menu_sync_cancel" msgid="1005480041232010062">"Cancelar sincronización"</string>
-    <string name="sync_one_time_sync" msgid="3474532720071919514">"Seleccionar para realizar la sincronización ahora<xliff:g id="LAST_SYNC_TIME">
+    <string name="sync_one_time_sync" msgid="3274364877518422827">"Tocar para realizar la sincronización ahora<xliff:g id="LAST_SYNC_TIME">
 %1$s</xliff:g>"</string>
     <string name="sync_gmail" msgid="5806053858668452000">"Gmail"</string>
     <string name="sync_calendar" msgid="1796292773734071897">"Calendar"</string>
@@ -36,7 +38,25 @@
     <string name="sync_undo_deletes" msgid="8695514459839593307">"Deshacer las eliminaciones"</string>
     <string name="sync_do_nothing" msgid="5798755982392201673">"No hacer nada por ahora"</string>
     <string name="sync_is_failing" msgid="5230237058552433773">"En este momento hay problemas con la sincronización. Se restablecerá en breve."</string>
-    <string name="sync_plug" msgid="4526246957714417280"><font fgcolor="#ffffffff">"Te damos la bienvenida a Google Sync."</font>" "\n"Un servicio de Google para sincronizar datos y permitir así el acceso a tus contactos, citas, etc. desde cualquier ubicación."</string>
+    <string name="sync_plug" msgid="7020432439004167162"><font fgcolor="#ffffffff">"Te damos la bienvenida a Google Sync,"</font>" "\n"un servicio de Google que te permite sincronizar datos para hacer posible el acceso a tus contactos, a tus citas, etc., desde cualquier ubicación."</string>
     <string name="header_application_sync_settings" msgid="5263025067167527890">"Configuración de sincronización de aplicación"</string>
+    <string name="header_manage_accounts" msgid="381956296995298770">"Administrar cuentas"</string>
     <string name="header_general_sync_settings" msgid="1598537524696692308">"Configuración de sincronización general"</string>
+    <string name="sync_enabled" msgid="913018877443997502">"La sincronización está activada."</string>
+    <string name="sync_disabled" msgid="185731301298967302">"La sincronización está desactivada."</string>
+    <string name="sync_error" msgid="681431702824599812">"Error de sincronización"</string>
+    <string name="add_account_label" msgid="2035321485672826779">"Añadir cuenta"</string>
+    <string name="header_data_and_synchronization" msgid="6286257845276834071">"Datos y sincronización"</string>
+    <string name="preference_change_password_title" msgid="6468827554159468315">"Cambiar contraseña"</string>
+    <string name="header_account_settings" msgid="4950809499418403792">"Configuración de la cuenta"</string>
+    <string name="remove_account_label" msgid="5624712684599197863">"Eliminar cuenta"</string>
+    <string name="header_add_an_account" msgid="2198078922829535425">"Añadir una cuenta"</string>
+    <string name="finish_button_label" msgid="6121560986057356757">"Finalizar"</string>
+    <string name="really_remove_account_title" msgid="8808121039511188784">"Eliminar cuenta"</string>
+    <string name="really_remove_account_message" msgid="3293445755620109578">"¿Deseas eliminar realmente esta cuenta? Si la eliminas, se eliminarán también todos los mensajes, los contactos y otros datos del teléfono. "\n"¿Quieres continuar?"</string>
+    <string name="remove_account_failed" msgid="8178924513521241001">"Algunas aplicaciones necesitan esta cuenta. Solo puedes eliminarla restableciendo los valores predeterminados de fábrica del teléfono(esta acción elimina todos tus datos personales). Para ello, accede a \"Configuración\", \"Privacidad\"."</string>
+    <string name="provider_label" msgid="6191617139291321517">"Enviar suscripciones"</string>
+    <string name="sync_item_title" msgid="7984962124867021854">"Sincronizar <xliff:g id="AUTHORITY">%s</xliff:g>"</string>
+    <string name="cant_sync_dialog_title" msgid="3016197392261471761">"No se puede realizar la sincronización de forma manual."</string>
+    <string name="cant_sync_dialog_message" msgid="7200115394296632300">"La sincronización de este elemento no está disponible en este momento. Para modificar tu preferencia, activa temporalmente los datos de referencia y la sincronización automática."</string>
 </resources>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index 5d6fd8c..2384847 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -15,18 +15,20 @@
 -->
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_label" msgid="2800463760279909883">"Synchronisation des flux"</string>
-    <string name="sync_settings" msgid="4549768061467147584">"Synchronisation"</string>
+    <string name="app_label" msgid="569000083919693222">"Synchronisation des flux"</string>
+    <string name="sync_settings" msgid="8707056705985552604">"Paramètres de compte et de synchronisation"</string>
     <string name="sync_too_many_deletes" msgid="1621369057980827097">"Le nombre maximum de suppressions a été atteint."</string>
     <string name="background_data" msgid="1103557117473896066">"Données en arrière-plan"</string>
-    <string name="background_data_summary" msgid="4689952168187153486">"Activer l\'utilisation des données en arrière-plan"</string>
+    <string name="background_data_summary" msgid="9048259510387973822">"Les applications peuvent synchroniser, envoyer et recevoir des données à tout moment."</string>
     <string name="background_data_dialog_title" msgid="6303755495467986079">"Attention"</string>
-    <string name="background_data_dialog_message" msgid="2817489591533703840">"La désactivation des données en arrière-plan permet d\'économiser la batterie et de réduire l\'utilisation des données. Certaines applications peuvent utiliser la connexion des données en arrière-plan."</string>
+    <string name="background_data_dialog_message" msgid="8417297954700022363">"La désactivation des données en arrière-plan permet d\'économiser la batterie et de réduire l\'utilisation des données. Certaines applications peuvent utiliser la connexion des données en arrière-plan."</string>
     <string name="sync_automatically" msgid="4694735102757960100">"Synchronisation auto"</string>
-    <string name="sync_automatically_summary" msgid="6210073947698673774">"Synchronisation automatique des données"</string>
+    <string name="sync_automatically_summary" msgid="4598895616781542745">"Synchronisation automatique des données par les applications"</string>
+    <string name="settings_backup" msgid="6114299464740014762">"Sauvegarder les paramètres"</string>
+    <string name="settings_backup_summary" msgid="1787552172618610178">"Sauvegarder mes paramètres"</string>
     <string name="sync_menu_sync_now" msgid="5796024841315572404">"Synchroniser maintenant"</string>
     <string name="sync_menu_sync_cancel" msgid="1005480041232010062">"Annuler la synchronisation"</string>
-    <string name="sync_one_time_sync" msgid="3474532720071919514">"Synchroniser maintenant <xliff:g id="LAST_SYNC_TIME">
+    <string name="sync_one_time_sync" msgid="3274364877518422827">"Touchez l\'écran pour lancer la synchronisation <xliff:g id="LAST_SYNC_TIME">
 %1$s</xliff:g>"</string>
     <string name="sync_gmail" msgid="5806053858668452000">"Gmail"</string>
     <string name="sync_calendar" msgid="1796292773734071897">"Agenda"</string>
@@ -36,7 +38,25 @@
     <string name="sync_undo_deletes" msgid="8695514459839593307">"Annuler les suppressions"</string>
     <string name="sync_do_nothing" msgid="5798755982392201673">"Ne rien faire pour l\'instant"</string>
     <string name="sync_is_failing" msgid="5230237058552433773">"La synchronisation rencontre actuellement des problèmes. Elle sera rétablie sous peu."</string>
-    <string name="sync_plug" msgid="4526246957714417280"><font fgcolor="#ffffffff">"Bienvenue sur Google Sync !"</font>" "\n"Une approche Google pour synchroniser vos données afin de vous permettre l\'accès à vos contacts, rendez-vous et plus encore, où que vous vous trouviez."</string>
+    <string name="sync_plug" msgid="7020432439004167162"><font fgcolor="#ffffffff">"Bienvenue sur Google Sync !"</font>" "\n"Une solution Google pour synchroniser vos données et vous permettre d\'accéder à vos contacts, rendez-vous, etc. où que vous soyez."</string>
     <string name="header_application_sync_settings" msgid="5263025067167527890">"Paramètres des applications"</string>
+    <string name="header_manage_accounts" msgid="381956296995298770">"Gérer les comptes"</string>
     <string name="header_general_sync_settings" msgid="1598537524696692308">"Paramètres généraux"</string>
+    <string name="sync_enabled" msgid="913018877443997502">"La synchronisation est activée."</string>
+    <string name="sync_disabled" msgid="185731301298967302">"La synchronisation est désactivée."</string>
+    <string name="sync_error" msgid="681431702824599812">"Erreur de synchronisation"</string>
+    <string name="add_account_label" msgid="2035321485672826779">"Ajouter un compte"</string>
+    <string name="header_data_and_synchronization" msgid="6286257845276834071">"Données et synchronisation"</string>
+    <string name="preference_change_password_title" msgid="6468827554159468315">"Modifier le mot de passe"</string>
+    <string name="header_account_settings" msgid="4950809499418403792">"Paramètres du compte"</string>
+    <string name="remove_account_label" msgid="5624712684599197863">"Supprimer le compte"</string>
+    <string name="header_add_an_account" msgid="2198078922829535425">"Ajouter un compte"</string>
+    <string name="finish_button_label" msgid="6121560986057356757">"Terminer"</string>
+    <string name="really_remove_account_title" msgid="8808121039511188784">"Supprimer le compte"</string>
+    <string name="really_remove_account_message" msgid="3293445755620109578">"Voulez-vous vraiment supprimer ce compte ? Cela entraînera également la suppression de tous ses messages, contacts et autres données du téléphone."\n"Voulez-vous continuer ?"</string>
+    <string name="remove_account_failed" msgid="8178924513521241001">"Ce compte est utilisé par des applications. Pour le supprimer, vous devez rétablir les paramètres par défaut du téléphone (ce qui supprimera toutes vos données personnelles). Pour cela, allez dans l\'application Paramètres, sous Confidentialité."</string>
+    <string name="provider_label" msgid="6191617139291321517">"Abonnements Push"</string>
+    <string name="sync_item_title" msgid="7984962124867021854">"Synchroniser <xliff:g id="AUTHORITY">%s</xliff:g>"</string>
+    <string name="cant_sync_dialog_title" msgid="3016197392261471761">"Impossible de procéder à la synchronisation manuelle."</string>
+    <string name="cant_sync_dialog_message" msgid="7200115394296632300">"La synchronisation de cet élément est actuellement désactivée. Pour modifier vos préférences, activez temporairement les données en arrière-plan et la synchronisation automatique."</string>
 </resources>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index 43ece11..98485d2 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -15,18 +15,20 @@
 -->
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_label" msgid="2800463760279909883">"Sincronizzazione feed"</string>
-    <string name="sync_settings" msgid="4549768061467147584">"Sincronizzazione dati"</string>
+    <string name="app_label" msgid="569000083919693222">"Sincronizzazione feed"</string>
+    <string name="sync_settings" msgid="8707056705985552604">"Impostazioni account e sincronizzazione"</string>
     <string name="sync_too_many_deletes" msgid="1621369057980827097">"Limite di eliminazioni superato"</string>
     <string name="background_data" msgid="1103557117473896066">"Dati in background"</string>
-    <string name="background_data_summary" msgid="4689952168187153486">"Attiva utilizzo dei dati in background"</string>
+    <string name="background_data_summary" msgid="9048259510387973822">"Le applicazioni possono sincronizzare, inviare e ricevere dati in qualsiasi momento"</string>
     <string name="background_data_dialog_title" msgid="6303755495467986079">"Attenzione"</string>
-    <string name="background_data_dialog_message" msgid="2817489591533703840">"La disattivazione dei dati in background consente di ridurre il consumo delle batterie e l\'utilizzo dei dati. Alcune applicazioni potrebbero utilizzare comunque la connessione dati in background."</string>
+    <string name="background_data_dialog_message" msgid="8417297954700022363">"La disattivazione dei dati in background consente di estendere la durata delle batterie e di ridurre l\'utilizzo dei dati. Alcune applicazioni potrebbero utilizzare comunque la connessione dati in background."</string>
     <string name="sync_automatically" msgid="4694735102757960100">"Sincronizz. automatica"</string>
-    <string name="sync_automatically_summary" msgid="6210073947698673774">"Sincronizza i dati automaticamente"</string>
+    <string name="sync_automatically_summary" msgid="4598895616781542745">"Le applicazioni sincronizzano i dati automaticamente"</string>
+    <string name="settings_backup" msgid="6114299464740014762">"Backup impostazioni"</string>
+    <string name="settings_backup_summary" msgid="1787552172618610178">"Backup delle mie impostazioni"</string>
     <string name="sync_menu_sync_now" msgid="5796024841315572404">"Sincronizza ora"</string>
     <string name="sync_menu_sync_cancel" msgid="1005480041232010062">"Annulla sincronizzazione"</string>
-    <string name="sync_one_time_sync" msgid="3474532720071919514">"Seleziona per sincronizzare ora<xliff:g id="LAST_SYNC_TIME">
+    <string name="sync_one_time_sync" msgid="3274364877518422827">"Tocca per sincronizzare ora <xliff:g id="LAST_SYNC_TIME">
 %1$s</xliff:g>"</string>
     <string name="sync_gmail" msgid="5806053858668452000">"Gmail"</string>
     <string name="sync_calendar" msgid="1796292773734071897">"Calendario"</string>
@@ -36,7 +38,25 @@
     <string name="sync_undo_deletes" msgid="8695514459839593307">"Annulla le eliminazioni."</string>
     <string name="sync_do_nothing" msgid="5798755982392201673">"Non fare nulla per ora."</string>
     <string name="sync_is_failing" msgid="5230237058552433773">"La sincronizzazione presenta dei problemi. L\'operazione verrà ripristinata a breve."</string>
-    <string name="sync_plug" msgid="4526246957714417280"><font fgcolor="#ffffffff">"Benvenuto in Google Sync."</font>" "\n"L\'approccio di Google alla sincronizzazione di dati per consentirti l\'accesso ai tuoi contatti, appuntamenti e altro ancora, dovunque tu sia."</string>
+    <string name="sync_plug" msgid="7020432439004167162"><font fgcolor="#ffffffff">"Benvenuto in Google Sync."</font>" "\n"L\'approccio di Google alla sincronizzazione di dati per consentirti l\'accesso ai tuoi contatti, appuntamenti e altro ancora, ovunque tu sia."</string>
     <string name="header_application_sync_settings" msgid="5263025067167527890">"Impostazioni sincronizzazione applicazioni"</string>
+    <string name="header_manage_accounts" msgid="381956296995298770">"Gestisci account"</string>
     <string name="header_general_sync_settings" msgid="1598537524696692308">"Impostazioni generali di sincronizzazione"</string>
+    <string name="sync_enabled" msgid="913018877443997502">"La sincronizzazione è attiva"</string>
+    <string name="sync_disabled" msgid="185731301298967302">"La sincronizzazione non è attiva"</string>
+    <string name="sync_error" msgid="681431702824599812">"Errore di sincronizzazione"</string>
+    <string name="add_account_label" msgid="2035321485672826779">"Aggiungi account"</string>
+    <string name="header_data_and_synchronization" msgid="6286257845276834071">"Dati e sincronizzazione"</string>
+    <string name="preference_change_password_title" msgid="6468827554159468315">"Cambia password"</string>
+    <string name="header_account_settings" msgid="4950809499418403792">"Impostazioni account"</string>
+    <string name="remove_account_label" msgid="5624712684599197863">"Rimuovi account"</string>
+    <string name="header_add_an_account" msgid="2198078922829535425">"Aggiungi un account"</string>
+    <string name="finish_button_label" msgid="6121560986057356757">"Fine"</string>
+    <string name="really_remove_account_title" msgid="8808121039511188784">"Rimuovi account"</string>
+    <string name="really_remove_account_message" msgid="3293445755620109578">"Rimuovere questo account? La rimozione elimina dal telefono tutti i relativi messaggi, contatti e altri dati. "\n"Procedere?"</string>
+    <string name="remove_account_failed" msgid="8178924513521241001">"L\'account è richiesto da alcune applicazioni. Puoi rimuoverlo solo ripristinando il telefono con le impostazioni predefinite (questa operazione elimina tutti i dati personali). Per procedere vai a \"Impostazioni\" in \"Privacy\"."</string>
+    <string name="provider_label" msgid="6191617139291321517">"Sottoscrizioni push"</string>
+    <string name="sync_item_title" msgid="7984962124867021854">"Sincronizza <xliff:g id="AUTHORITY">%s</xliff:g>"</string>
+    <string name="cant_sync_dialog_title" msgid="3016197392261471761">"Impossibile sincronizzare manualmente"</string>
+    <string name="cant_sync_dialog_message" msgid="7200115394296632300">"La sincronizzazione per questo elemento è attualmente disabilitata. Per modificare la preferenza, attiva temporaneamente i dati in background e la sincronizzazione automatica."</string>
 </resources>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index be494cc..364e07b 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -15,18 +15,20 @@
 -->
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_label" msgid="2800463760279909883">"フィードの同期"</string>
-    <string name="sync_settings" msgid="4549768061467147584">"データの同期"</string>
+    <string name="app_label" msgid="569000083919693222">"フィードの同期"</string>
+    <string name="sync_settings" msgid="8707056705985552604">"アカウントと同期の設定"</string>
     <string name="sync_too_many_deletes" msgid="1621369057980827097">"削除の制限を超えました"</string>
     <string name="background_data" msgid="1103557117473896066">"バックグラウンドデータ"</string>
-    <string name="background_data_summary" msgid="4689952168187153486">"バックグラウンドデータの使用を有効にする"</string>
+    <string name="background_data_summary" msgid="9048259510387973822">"アプリケーションがデータをいつでも同期、送信、受信できるようにする"</string>
     <string name="background_data_dialog_title" msgid="6303755495467986079">"注意"</string>
-    <string name="background_data_dialog_message" msgid="2817489591533703840">"バックグラウンドデータを無効にすると、データの使用が減るため電池を節約できます。一部のアプリケーションでは引き続きバックグラウンドデータの接続を使用します。"</string>
+    <string name="background_data_dialog_message" msgid="8417297954700022363">"バックグラウンドデータを無効にすると、データの使用が減るため電池を節約できます。一部のアプリケーションでは引き続きバックグラウンドデータの接続を使用します。"</string>
     <string name="sync_automatically" msgid="4694735102757960100">"自動同期"</string>
-    <string name="sync_automatically_summary" msgid="6210073947698673774">"自動的にデータを同期する"</string>
+    <string name="sync_automatically_summary" msgid="4598895616781542745">"アプリケーションが自動的にデータを同期する"</string>
+    <string name="settings_backup" msgid="6114299464740014762">"設定をバックアップ"</string>
+    <string name="settings_backup_summary" msgid="1787552172618610178">"設定のバックアップ"</string>
     <string name="sync_menu_sync_now" msgid="5796024841315572404">"今すぐ同期"</string>
     <string name="sync_menu_sync_cancel" msgid="1005480041232010062">"同期をキャンセル"</string>
-    <string name="sync_one_time_sync" msgid="3474532720071919514">"今すぐ同期を選択<xliff:g id="LAST_SYNC_TIME">
+    <string name="sync_one_time_sync" msgid="3274364877518422827">"タップして今すぐ同期<xliff:g id="LAST_SYNC_TIME">
 %1$s</xliff:g>"</string>
     <string name="sync_gmail" msgid="5806053858668452000">"Gmail"</string>
     <string name="sync_calendar" msgid="1796292773734071897">"カレンダー"</string>
@@ -36,7 +38,25 @@
     <string name="sync_undo_deletes" msgid="8695514459839593307">"削除を元に戻します。"</string>
     <string name="sync_do_nothing" msgid="5798755982392201673">"今は何もしません。"</string>
     <string name="sync_is_failing" msgid="5230237058552433773">"現在同期で問題が発生しています。しばらくお待ちください。"</string>
-    <string name="sync_plug" msgid="4526246957714417280"><font fgcolor="#ffffffff">"Google Syncへようこそ"</font>" "\n"このサービスを使用すると、データを同期してどこからでも連絡先や予定などにアクセスできます。"</string>
+    <string name="sync_plug" msgid="7020432439004167162"><font fgcolor="#ffffffff">"Google Syncへようこそ"</font>" "\n"このサービスを使用すると、データを同期してどこからでも連絡先や予定などにアクセスできます。"</string>
     <string name="header_application_sync_settings" msgid="5263025067167527890">"アプリケーションの同期設定"</string>
+    <string name="header_manage_accounts" msgid="381956296995298770">"アカウントを管理"</string>
     <string name="header_general_sync_settings" msgid="1598537524696692308">"同期の基本設定"</string>
+    <string name="sync_enabled" msgid="913018877443997502">"同期ON"</string>
+    <string name="sync_disabled" msgid="185731301298967302">"同期OFF"</string>
+    <string name="sync_error" msgid="681431702824599812">"同期エラー"</string>
+    <string name="add_account_label" msgid="2035321485672826779">"アカウントを追加"</string>
+    <string name="header_data_and_synchronization" msgid="6286257845276834071">"データと同期"</string>
+    <string name="preference_change_password_title" msgid="6468827554159468315">"パスワードを変更"</string>
+    <string name="header_account_settings" msgid="4950809499418403792">"アカウントの設定"</string>
+    <string name="remove_account_label" msgid="5624712684599197863">"アカウントを削除"</string>
+    <string name="header_add_an_account" msgid="2198078922829535425">"アカウントを追加"</string>
+    <string name="finish_button_label" msgid="6121560986057356757">"完了"</string>
+    <string name="really_remove_account_title" msgid="8808121039511188784">"アカウントを削除"</string>
+    <string name="really_remove_account_message" msgid="3293445755620109578">"このアカウントを削除してよろしいですか?削除すると、携帯のメール、連絡先などのすべてのデータも削除されます。"\n"続けますか?"</string>
+    <string name="remove_account_failed" msgid="8178924513521241001">"このアカウントを必要としているアプリケーションがあります。アカウントを削除するには、携帯を出荷時設定にリセットする必要があります(個人データはすべて削除されます)。リセットは、[設定]アプリケーションの[プライバシー]で行います。"</string>
+    <string name="provider_label" msgid="6191617139291321517">"プッシュ型登録"</string>
+    <string name="sync_item_title" msgid="7984962124867021854">"<xliff:g id="AUTHORITY">%s</xliff:g>を同期"</string>
+    <string name="cant_sync_dialog_title" msgid="3016197392261471761">"手動では同期できません"</string>
+    <string name="cant_sync_dialog_message" msgid="7200115394296632300">"このアイテムの同期は現在無効になっています。設定を変更するには、バックグラウンドデータと自動同期を一時的にONにします。"</string>
 </resources>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index 62bcbb7..55af90c 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -15,20 +15,21 @@
 -->
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <!-- no translation found for app_label (2800463760279909883) -->
-    <skip />
-    <string name="sync_settings" msgid="4549768061467147584">"데이터 동기화"</string>
+    <string name="app_label" msgid="569000083919693222">"피드 동기화"</string>
+    <string name="sync_settings" msgid="8707056705985552604">"계정 및 동기화 설정"</string>
     <string name="sync_too_many_deletes" msgid="1621369057980827097">"삭제 한도를 초과했습니다."</string>
     <string name="background_data" msgid="1103557117473896066">"배경 데이터"</string>
-    <string name="background_data_summary" msgid="4689952168187153486">"배경 데이터 사용 설정"</string>
+    <string name="background_data_summary" msgid="9048259510387973822">"응용프로그램이 언제든지 데이터를 동기화하고 보내고 받을 수 있습니다."</string>
     <string name="background_data_dialog_title" msgid="6303755495467986079">"주의"</string>
-    <string name="background_data_dialog_message" msgid="2817489591533703840">"배경 데이터를 사용하지 않도록 설정하면 배터리가 절약되고 데이터 사용률이 낮아집니다. 일부 응용프로그램은 여전히 배경 데이터 연결을 사용할 수 있습니다."</string>
+    <string name="background_data_dialog_message" msgid="8417297954700022363">"백그라운드 데이터를 사용하지 않도록 설정하면 배터리 수명이 늘어나고 데이터 사용률이 낮아집니다. 일부 응용프로그램은 여전히 백그라운드 데이터 연결을 사용할 수 있습니다."</string>
     <string name="sync_automatically" msgid="4694735102757960100">"자동 동기화"</string>
-    <string name="sync_automatically_summary" msgid="6210073947698673774">"자동으로 데이터 동기화"</string>
+    <string name="sync_automatically_summary" msgid="4598895616781542745">"응용프로그램이 데이터를 자동으로 동기화합니다."</string>
+    <string name="settings_backup" msgid="6114299464740014762">"설정 백업"</string>
+    <string name="settings_backup_summary" msgid="1787552172618610178">"내 설정 백업"</string>
     <string name="sync_menu_sync_now" msgid="5796024841315572404">"지금 동기화"</string>
     <string name="sync_menu_sync_cancel" msgid="1005480041232010062">"동기화 취소"</string>
-    <string name="sync_one_time_sync" msgid="3474532720071919514">"지금 동기화하도록 선택(마지막 동기화: <xliff:g id="LAST_SYNC_TIME">
-%1$s</xliff:g>)"</string>
+    <string name="sync_one_time_sync" msgid="3274364877518422827">"지금 동기화하려면 터치<xliff:g id="LAST_SYNC_TIME">
+%1$s</xliff:g>"</string>
     <string name="sync_gmail" msgid="5806053858668452000">"Gmail"</string>
     <string name="sync_calendar" msgid="1796292773734071897">"캘린더"</string>
     <string name="sync_contacts" msgid="2035690905925565660">"주소록"</string>
@@ -37,7 +38,25 @@
     <string name="sync_undo_deletes" msgid="8695514459839593307">"삭제 실행취소"</string>
     <string name="sync_do_nothing" msgid="5798755982392201673">"지금은 아무 작업도 안함"</string>
     <string name="sync_is_failing" msgid="5230237058552433773">"동기화에 현재 문제가 발생했습니다. 곧 다시 동기화됩니다."</string>
-    <string name="sync_plug" msgid="4526246957714417280"><font fgcolor="#ffffffff">"Google 동기화를 시작합니다."</font>" "\n"사용자가 어디에서든지 주소록, 일정 등에 액세스할 수 있도록 데이터를 동기화하는 방법입니다."</string>
+    <string name="sync_plug" msgid="7020432439004167162"><font fgcolor="#ffffffff">"Google Sync에 오신 것을 환영합니다."</font>" "\n"Google Sync는 사용자가 어디에서든지 연락처, 일정 등에 액세스할 수 있도록 데이터를 동기화하는 Google 서비스입니다."</string>
     <string name="header_application_sync_settings" msgid="5263025067167527890">"응용프로그램 동기화 설정"</string>
+    <string name="header_manage_accounts" msgid="381956296995298770">"계정 관리"</string>
     <string name="header_general_sync_settings" msgid="1598537524696692308">"기본 동기화 설정"</string>
+    <string name="sync_enabled" msgid="913018877443997502">"동기화 사용 중"</string>
+    <string name="sync_disabled" msgid="185731301298967302">"동기화 사용 안함"</string>
+    <string name="sync_error" msgid="681431702824599812">"동기화 오류"</string>
+    <string name="add_account_label" msgid="2035321485672826779">"계정 추가"</string>
+    <string name="header_data_and_synchronization" msgid="6286257845276834071">"데이터 및 동기화"</string>
+    <string name="preference_change_password_title" msgid="6468827554159468315">"비밀번호 변경"</string>
+    <string name="header_account_settings" msgid="4950809499418403792">"계정 설정"</string>
+    <string name="remove_account_label" msgid="5624712684599197863">"계정 삭제"</string>
+    <string name="header_add_an_account" msgid="2198078922829535425">"계정 추가"</string>
+    <string name="finish_button_label" msgid="6121560986057356757">"마침"</string>
+    <string name="really_remove_account_title" msgid="8808121039511188784">"계정 삭제"</string>
+    <string name="really_remove_account_message" msgid="3293445755620109578">"계정을 삭제하시겠습니까? 삭제하면 휴대전화의 메시지, 연락처 및 다른 데이터가 모두 지워집니다. "\n"계속하시겠습니까?"</string>
+    <string name="remove_account_failed" msgid="8178924513521241001">"일부 응용프로그램의 경우 이 계정이 필요합니다. 휴대전화를 기본값으로 재설정해야 계정을 삭제할 수 있으며 이 경우 모든 개인정보가 삭제됩니다. 개인정보 보호 아래의 설정 응용프로그램에서 재설정을 수행할 수 있습니다."</string>
+    <string name="provider_label" msgid="6191617139291321517">"구독정보 푸시"</string>
+    <string name="sync_item_title" msgid="7984962124867021854">"<xliff:g id="AUTHORITY">%s</xliff:g> 동기화"</string>
+    <string name="cant_sync_dialog_title" msgid="3016197392261471761">"수동으로 동기화할 수 없음"</string>
+    <string name="cant_sync_dialog_message" msgid="7200115394296632300">"현재 이 항목에 대해 동기화를 사용할 수 없습니다. 환경설정을 변경하려면 백그라운드 데이터 및 자동 동기화를 일시적으로 사용하도록 설정하세요."</string>
 </resources>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index 82c890d..1c36793 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -15,18 +15,20 @@
 -->
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_label" msgid="2800463760279909883">"Strømsynkronisering"</string>
-    <string name="sync_settings" msgid="4549768061467147584">"Datasynkronisering"</string>
+    <string name="app_label" msgid="569000083919693222">"Strømsynkronisering"</string>
+    <string name="sync_settings" msgid="8707056705985552604">"Innstillinger for kontoer og synkronisering"</string>
     <string name="sync_too_many_deletes" msgid="1621369057980827097">"Grensen for sletting nådd"</string>
     <string name="background_data" msgid="1103557117473896066">"Bakgrunnsdata"</string>
-    <string name="background_data_summary" msgid="4689952168187153486">"Slå på bruk av bakgrunnsdata"</string>
+    <string name="background_data_summary" msgid="9048259510387973822">"Slå på bruk av bakgrunnsdata"</string>
     <string name="background_data_dialog_title" msgid="6303755495467986079">"NB"</string>
-    <string name="background_data_dialog_message" msgid="2817489591533703840">"Det å slå av bakgrunnsdata sparer batteri og reduserer datatrafikken. Noen applikasjoner kan fortsatt bruke tilkoblingen for bakgrunnsdata."</string>
+    <string name="background_data_dialog_message" msgid="8417297954700022363">"Det å slå av bakgrunnsdata sparer batteri og reduserer datatrafikken. Noen applikasjoner kan fortsatt bruke tilkoblingen for bakgrunnsdata."</string>
     <string name="sync_automatically" msgid="4694735102757960100">"Autosynk"</string>
-    <string name="sync_automatically_summary" msgid="6210073947698673774">"Synkroniser data automatisk"</string>
+    <string name="sync_automatically_summary" msgid="4598895616781542745">"Synkroniser data automatisk"</string>
+    <string name="settings_backup" msgid="6114299464740014762">"Sikkerhetskopier innstillinger"</string>
+    <string name="settings_backup_summary" msgid="1787552172618610178">"Aktiver sikkerhetskopiering av innstillinger"</string>
     <string name="sync_menu_sync_now" msgid="5796024841315572404">"Synkroniser nå"</string>
     <string name="sync_menu_sync_cancel" msgid="1005480041232010062">"Avbryt synkronisering"</string>
-    <string name="sync_one_time_sync" msgid="3474532720071919514">"Velg for å synkronisere nå<xliff:g id="LAST_SYNC_TIME">
+    <string name="sync_one_time_sync" msgid="3274364877518422827">"Velg for å synkronisere nå<xliff:g id="LAST_SYNC_TIME">
 %1$s</xliff:g>"</string>
     <string name="sync_gmail" msgid="5806053858668452000">"Gmail"</string>
     <string name="sync_calendar" msgid="1796292773734071897">"Kalender"</string>
@@ -36,7 +38,25 @@
     <string name="sync_undo_deletes" msgid="8695514459839593307">"Angre slettingen."</string>
     <string name="sync_do_nothing" msgid="5798755982392201673">"Ikke gjør noe nå."</string>
     <string name="sync_is_failing" msgid="5230237058552433773">"Det er midlertidige problemer med synkroniseringen. Vent litt."</string>
-    <string name="sync_plug" msgid="4526246957714417280"><font fgcolor="#ffffffff">"Velkommen til Google-synkronisering!"</font>" "\n"En Google-løsning for å synkronisere data så du får tilgang til kontakter, avtaler og mer uansett hvor du er."</string>
+    <string name="sync_plug" msgid="7020432439004167162"><font fgcolor="#ffffffff">"Velkommen til Google-synkronisering!"</font>" "\n"En Google-løsning for å synkronisere data så du får tilgang til kontakter, avtaler og mer uansett hvor du er."</string>
     <string name="header_application_sync_settings" msgid="5263025067167527890">"Synkronisering av applikasjoner"</string>
+    <string name="header_manage_accounts" msgid="381956296995298770">"Styr kontoer"</string>
     <string name="header_general_sync_settings" msgid="1598537524696692308">"Generelle synkroniseringsinnstillinger"</string>
+    <string name="sync_enabled" msgid="913018877443997502">"Synkronisering er på"</string>
+    <string name="sync_disabled" msgid="185731301298967302">"Synkronisering er av"</string>
+    <string name="sync_error" msgid="681431702824599812">"Synkroniseringsfeil"</string>
+    <string name="add_account_label" msgid="2035321485672826779">"Legg til konto"</string>
+    <string name="header_data_and_synchronization" msgid="6286257845276834071">"Data og synkronisering"</string>
+    <string name="preference_change_password_title" msgid="6468827554159468315">"Endre passord"</string>
+    <string name="header_account_settings" msgid="4950809499418403792">"Kontoinnstillinger"</string>
+    <string name="remove_account_label" msgid="5624712684599197863">"Fjern konto"</string>
+    <string name="header_add_an_account" msgid="2198078922829535425">"Legg til en konto"</string>
+    <string name="finish_button_label" msgid="6121560986057356757">"Fullfør"</string>
+    <string name="really_remove_account_title" msgid="8808121039511188784">"Fjern konto"</string>
+    <string name="really_remove_account_message" msgid="3293445755620109578">"Er du sikker på at du vil fjerne denne kontoen? Hvis du fjerner den, fjernes samtidig alle data som er tilknyttet kontoen. "\n"Vil du fortsette?"</string>
+    <string name="remove_account_failed" msgid="8178924513521241001">"Kunne ikke fjerne denne kontoen."</string>
+    <string name="provider_label" msgid="6191617139291321517">"Push-abonnementer"</string>
+    <string name="sync_item_title" msgid="7984962124867021854">"Synkroniser <xliff:g id="AUTHORITY">%s</xliff:g>"</string>
+    <string name="cant_sync_dialog_title" msgid="3016197392261471761">"Kan ikke synkronisere manuelt"</string>
+    <string name="cant_sync_dialog_message" msgid="7200115394296632300">"Synkronisering for disse dataene er deaktivert. For å bytte innstillinger, slå på bakgrunnsdata og automatisk synkronisering midlertidig."</string>
 </resources>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index ac215e9..4914f9c 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -15,19 +15,22 @@
 -->
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_label" msgid="2800463760279909883">"Feeds synchroniseren"</string>
-    <string name="sync_settings" msgid="4549768061467147584">"Gegevenssynchronisatie"</string>
+    <string name="app_label" msgid="569000083919693222">"Feeds synchroniseren"</string>
+    <string name="sync_settings" msgid="8707056705985552604">"Account- en synchronisatie-instellingen"</string>
     <string name="sync_too_many_deletes" msgid="1621369057980827097">"Verwijderingslimiet overschreden"</string>
     <string name="background_data" msgid="1103557117473896066">"Achtergrondgegevens"</string>
-    <string name="background_data_summary" msgid="4689952168187153486">"Gebruik van achtergrondgegevens inschakelen"</string>
+    <string name="background_data_summary" msgid="9048259510387973822">"Toepassingen kunnen gegevens op elk gewenst moment synchroniseren, verzenden en ontvangen"</string>
     <string name="background_data_dialog_title" msgid="6303755495467986079">"Let op"</string>
-    <string name="background_data_dialog_message" msgid="2817489591533703840">"Als u achtergrondgegevens uitschakelt, bespaart u batterijlading en wordt het gegevensverbruik verlaagd. Sommige toepassingen maken mogelijk nog steeds gebruik van de achtergrondgegevensverbinding."</string>
+    <string name="background_data_dialog_message" msgid="8417297954700022363">"Als u achtergrondgegevens uitschakelt, bespaart u acculading en wordt het gegevensverbruik verlaagd. Sommige toepassingen maken mogelijk nog steeds gebruik van de achtergrondgegevensverbinding."</string>
     <string name="sync_automatically" msgid="4694735102757960100">"Automatische synchronisatie"</string>
-    <string name="sync_automatically_summary" msgid="6210073947698673774">"Gegevens automatisch synchroniseren"</string>
+    <!-- no translation found for sync_automatically_summary (4598895616781542745) -->
+    <skip />
+    <string name="settings_backup" msgid="6114299464740014762">"Back-up van instellingen maken"</string>
+    <string name="settings_backup_summary" msgid="1787552172618610178">"Back-up maken van mijn instellingen"</string>
     <string name="sync_menu_sync_now" msgid="5796024841315572404">"Nu synchroniseren"</string>
     <string name="sync_menu_sync_cancel" msgid="1005480041232010062">"Synchronisatie annuleren"</string>
-    <string name="sync_one_time_sync" msgid="3474532720071919514">"Selecteren om nu te synchroniseren<xliff:g id="LAST_SYNC_TIME">
-%1$s</xliff:g>"</string>
+    <!-- no translation found for sync_one_time_sync (3274364877518422827) -->
+    <skip />
     <string name="sync_gmail" msgid="5806053858668452000">"Gmail"</string>
     <string name="sync_calendar" msgid="1796292773734071897">"Agenda"</string>
     <string name="sync_contacts" msgid="2035690905925565660">"Contacten"</string>
@@ -36,7 +39,28 @@
     <string name="sync_undo_deletes" msgid="8695514459839593307">"Verwijderingen ongedaan maken."</string>
     <string name="sync_do_nothing" msgid="5798755982392201673">"Nu niets doen."</string>
     <string name="sync_is_failing" msgid="5230237058552433773">"Er zijn momenteel problemen met de synchronisatie. Synchronisatie wordt snel opnieuw uitgevoerd."</string>
-    <string name="sync_plug" msgid="4526246957714417280"><font fgcolor="#ffffffff">"Welkom bij Google Sync!"</font>" "\n"Een benadering van Google voor de synchronisatie van gegevens, zodat u altijd en overal toegang heeft tot uw contacten, afspraken en nog veel meer."</string>
+    <string name="sync_plug" msgid="7020432439004167162"><font fgcolor="#ffffffff">"Welkom bij Google Sync!"</font>" "\n"Een benadering van Google voor de synchronisatie van gegevens, zodat u altijd en overal toegang heeft tot uw contacten, afspraken en nog veel meer."</string>
     <string name="header_application_sync_settings" msgid="5263025067167527890">"Synchronisatie-instellingen toepassing"</string>
+    <string name="header_manage_accounts" msgid="381956296995298770">"Accounts beheren"</string>
     <string name="header_general_sync_settings" msgid="1598537524696692308">"Algemene instellingen voor synchronisatie"</string>
+    <string name="sync_enabled" msgid="913018877443997502">"Synchroniseren ingeschakeld"</string>
+    <string name="sync_disabled" msgid="185731301298967302">"Synchroniseren uitgeschakeld"</string>
+    <string name="sync_error" msgid="681431702824599812">"Fout bij synchroniseren"</string>
+    <string name="add_account_label" msgid="2035321485672826779">"Account toevoegen"</string>
+    <!-- no translation found for header_data_and_synchronization (6286257845276834071) -->
+    <skip />
+    <string name="preference_change_password_title" msgid="6468827554159468315">"Wachtwoord wijzigen"</string>
+    <string name="header_account_settings" msgid="4950809499418403792">"Accountinstellingen"</string>
+    <string name="remove_account_label" msgid="5624712684599197863">"Account verwijderen"</string>
+    <string name="header_add_an_account" msgid="2198078922829535425">"Een account toevoegen"</string>
+    <string name="finish_button_label" msgid="6121560986057356757">"Voltooien"</string>
+    <string name="really_remove_account_title" msgid="8808121039511188784">"Account verwijderen"</string>
+    <!-- no translation found for really_remove_account_message (3293445755620109578) -->
+    <skip />
+    <!-- no translation found for remove_account_failed (8178924513521241001) -->
+    <skip />
+    <string name="provider_label" msgid="6191617139291321517">"Abonnementen doorvoeren"</string>
+    <string name="sync_item_title" msgid="7984962124867021854">"<xliff:g id="AUTHORITY">%s</xliff:g> synchroniseren"</string>
+    <string name="cant_sync_dialog_title" msgid="3016197392261471761">"Kan niet handmatig synchroniseren"</string>
+    <string name="cant_sync_dialog_message" msgid="7200115394296632300">"Synchroniseren is op dit moment uitgeschakeld voor dit item. Als u uw voorkeuren wilt wijzigen, schakelt u achtergrondgegevens en automatisch synchroniseren tijdelijk in."</string>
 </resources>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index c8ccede..57e4902 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -15,18 +15,20 @@
 -->
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_label" msgid="2800463760279909883">"Synchronizowanie kanałów"</string>
-    <string name="sync_settings" msgid="4549768061467147584">"Synchronizacja danych"</string>
+    <string name="app_label" msgid="569000083919693222">"Synchronizuj kanały"</string>
+    <string name="sync_settings" msgid="8707056705985552604">"Ustawienia kont i synchronizacji"</string>
     <string name="sync_too_many_deletes" msgid="1621369057980827097">"Przekroczono limit usuwania"</string>
     <string name="background_data" msgid="1103557117473896066">"Dane w tle"</string>
-    <string name="background_data_summary" msgid="4689952168187153486">"Włącz używanie danych w tle"</string>
+    <string name="background_data_summary" msgid="9048259510387973822">"Aplikacje mogą synchronizować, wysyłać i odbierać dane w dowolnym momencie"</string>
     <string name="background_data_dialog_title" msgid="6303755495467986079">"Uwaga"</string>
-    <string name="background_data_dialog_message" msgid="2817489591533703840">"Wyłączenie danych w tle umożliwia oszczędzanie baterii i zmniejsza wykorzystanie danych. Mimo to niektóre aplikacje mogą nadal korzystać z połączenia transmisji danych w tle."</string>
+    <string name="background_data_dialog_message" msgid="8417297954700022363">"Wyłączenie obsługi danych w tle wydłuża czas pracy baterii i zmniejsza użycie danych. Niektóre aplikacje mogą nadal korzystać z połączenia transmisji danych w tle."</string>
     <string name="sync_automatically" msgid="4694735102757960100">"Autosynchronizacja"</string>
-    <string name="sync_automatically_summary" msgid="6210073947698673774">"Automatycznie synchronizuj dane"</string>
+    <string name="sync_automatically_summary" msgid="4598895616781542745">"Aplikacje automatycznie synchronizują dane"</string>
+    <string name="settings_backup" msgid="6114299464740014762">"Ustawienia tworzenia kopii zapasowej"</string>
+    <string name="settings_backup_summary" msgid="1787552172618610178">"Utwórz kopię zapasową moich ustawień"</string>
     <string name="sync_menu_sync_now" msgid="5796024841315572404">"Synchronizuj teraz"</string>
     <string name="sync_menu_sync_cancel" msgid="1005480041232010062">"Anuluj synchronizację"</string>
-    <string name="sync_one_time_sync" msgid="3474532720071919514">"Wybierz, aby zsynchronizować teraz<xliff:g id="LAST_SYNC_TIME">
+    <string name="sync_one_time_sync" msgid="3274364877518422827">"Dotknij, aby teraz zsynchronizować<xliff:g id="LAST_SYNC_TIME">
 %1$s</xliff:g>"</string>
     <string name="sync_gmail" msgid="5806053858668452000">"Gmail"</string>
     <string name="sync_calendar" msgid="1796292773734071897">"Kalendarz"</string>
@@ -36,7 +38,25 @@
     <string name="sync_undo_deletes" msgid="8695514459839593307">"Cofnij usunięcie."</string>
     <string name="sync_do_nothing" msgid="5798755982392201673">"Nie wykonuj teraz żadnych czynności."</string>
     <string name="sync_is_failing" msgid="5230237058552433773">"Podczas synchronizacji wystąpiły problemy. Synchronizacja zostanie wkrótce wznowiona."</string>
-    <string name="sync_plug" msgid="4526246957714417280"><font fgcolor="#ffffffff">"Witamy w Google Sync!"</font>" "\n"Firma Google umożliwia synchronizację danych i dostęp do kontaktów, terminów oraz innych informacji z dowolnego miejsca."</string>
+    <string name="sync_plug" msgid="7020432439004167162"><font fgcolor="#ffffffff">"Google Sync – witamy!"</font>" "\n"Synchronizacja danych w stylu Google zapewniająca dostęp do kontaktów, terminów oraz innych informacji z dowolnego miejsca."</string>
     <string name="header_application_sync_settings" msgid="5263025067167527890">"Ustawienia synchronizacji aplikacji"</string>
+    <string name="header_manage_accounts" msgid="381956296995298770">"Zarządzaj kontami"</string>
     <string name="header_general_sync_settings" msgid="1598537524696692308">"Ogólne ustawienia synchronizacji"</string>
+    <string name="sync_enabled" msgid="913018877443997502">"Synchronizacja jest włączona"</string>
+    <string name="sync_disabled" msgid="185731301298967302">"Synchronizacja jest wyłączona"</string>
+    <string name="sync_error" msgid="681431702824599812">"Błąd synchronizacji"</string>
+    <string name="add_account_label" msgid="2035321485672826779">"Dodaj konto"</string>
+    <string name="header_data_and_synchronization" msgid="6286257845276834071">"Dane i synchronizacja"</string>
+    <string name="preference_change_password_title" msgid="6468827554159468315">"Zmień hasło"</string>
+    <string name="header_account_settings" msgid="4950809499418403792">"Ustawienia konta"</string>
+    <string name="remove_account_label" msgid="5624712684599197863">"Usuń konto"</string>
+    <string name="header_add_an_account" msgid="2198078922829535425">"Dodaj konto"</string>
+    <string name="finish_button_label" msgid="6121560986057356757">"Zakończ"</string>
+    <string name="really_remove_account_title" msgid="8808121039511188784">"Usuń konto"</string>
+    <string name="really_remove_account_message" msgid="3293445755620109578">"Czy na pewno chcesz usunąć to konto? Jego usunięcie spowoduje również usunięcie z telefonu wszystkich jego wiadomości, kontaktów i innych danych. "\n"Czy kontynuować?"</string>
+    <string name="remove_account_failed" msgid="8178924513521241001">"To konto jest wymagane przez niektóre aplikacje. Można je usunąć jedynie przez przywrócenie fabrycznych wartości domyślnych telefonu (co spowoduje usunięcie wszystkich danych osobistych). W tym celu należy przejść do sekcji Prywatność w aplikacji Ustawienia."</string>
+    <string name="provider_label" msgid="6191617139291321517">"Subskrypcje w trybie push"</string>
+    <string name="sync_item_title" msgid="7984962124867021854">"Synchronizuj aplikację <xliff:g id="AUTHORITY">%s</xliff:g>"</string>
+    <string name="cant_sync_dialog_title" msgid="3016197392261471761">"Nie można ręcznie zsynchronizować"</string>
+    <string name="cant_sync_dialog_message" msgid="7200115394296632300">"Synchronizacja tego elementu jest obecnie wyłączona. Aby zmienić ustawienie, tymczasowo włącz obsługę danych w tle i automatyczną synchronizację."</string>
 </resources>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index e609de2..97992b3 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -15,19 +15,20 @@
 -->
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <!-- no translation found for app_label (2800463760279909883) -->
-    <skip />
-    <string name="sync_settings" msgid="4549768061467147584">"Sincronização de dados"</string>
+    <string name="app_label" msgid="569000083919693222">"Sincronizar feeds"</string>
+    <string name="sync_settings" msgid="8707056705985552604">"Definições de contas e sincronização"</string>
     <string name="sync_too_many_deletes" msgid="1621369057980827097">"Limite de eliminações excedido"</string>
     <string name="background_data" msgid="1103557117473896066">"Dados em segundo plano"</string>
-    <string name="background_data_summary" msgid="4689952168187153486">"Activar utilização de dados em segundo plano"</string>
+    <string name="background_data_summary" msgid="9048259510387973822">"As aplicações podem sincronizar, enviar e receber dados em qualquer momento"</string>
     <string name="background_data_dialog_title" msgid="6303755495467986079">"Atenção"</string>
-    <string name="background_data_dialog_message" msgid="2817489591533703840">"A desactivação de dados em segundo plano economiza a bateria e reduz a utilização de dados. Algumas aplicações podem continuar a utilizar a ligação de dados em segundo plano."</string>
+    <string name="background_data_dialog_message" msgid="8417297954700022363">"A desactivação de dados em segundo plano economiza a bateria e reduz a utilização de dados. Algumas aplicações podem continuar a utilizar a ligação de dados em segundo plano."</string>
     <string name="sync_automatically" msgid="4694735102757960100">"Sincronização automática"</string>
-    <string name="sync_automatically_summary" msgid="6210073947698673774">"Sincronizar dados automaticamente"</string>
+    <string name="sync_automatically_summary" msgid="4598895616781542745">"As aplicações sincronizam os dados automaticamente"</string>
+    <string name="settings_backup" msgid="6114299464740014762">"Efectuar uma cópia de segurança das definições"</string>
+    <string name="settings_backup_summary" msgid="1787552172618610178">"Efectuar uma cópia de segurança das minhas definições"</string>
     <string name="sync_menu_sync_now" msgid="5796024841315572404">"Sincronizar agora"</string>
     <string name="sync_menu_sync_cancel" msgid="1005480041232010062">"Cancelar sincronização"</string>
-    <string name="sync_one_time_sync" msgid="3474532720071919514">"Optar por sincronizar agora<xliff:g id="LAST_SYNC_TIME">
+    <string name="sync_one_time_sync" msgid="3274364877518422827">"Tocar para sincronizar agora<xliff:g id="LAST_SYNC_TIME">
 %1$s</xliff:g>"</string>
     <string name="sync_gmail" msgid="5806053858668452000">"Gmail"</string>
     <string name="sync_calendar" msgid="1796292773734071897">"Calendário"</string>
@@ -37,7 +38,25 @@
     <string name="sync_undo_deletes" msgid="8695514459839593307">"Anular as eliminações."</string>
     <string name="sync_do_nothing" msgid="5798755982392201673">"Não fazer nada por agora."</string>
     <string name="sync_is_failing" msgid="5230237058552433773">"A sincronização está actualmente com problemas e será retomada em breve."</string>
-    <string name="sync_plug" msgid="4526246957714417280"><font fgcolor="#ffffffff">"Bem vindo ao Google Sync!"</font>" "\n"Uma abordagem do Google à sincronização de dados que permite aceder aos contactos, compromissos e outros itens, onde quer que esteja."</string>
+    <string name="sync_plug" msgid="7020432439004167162"><font fgcolor="#ffffffff">"Bem vindo ao Google Sync!"</font>" "\n"Uma abordagem do Google à sincronização de dados, que permite aceder aos contactos, compromissos e outros itens, a partir de qualquer local onde se encontre."</string>
     <string name="header_application_sync_settings" msgid="5263025067167527890">"Definições de sincronização da aplicação"</string>
+    <string name="header_manage_accounts" msgid="381956296995298770">"Gerir contas"</string>
     <string name="header_general_sync_settings" msgid="1598537524696692308">"Definições gerais de sincronização"</string>
+    <string name="sync_enabled" msgid="913018877443997502">"A sincronização está activada"</string>
+    <string name="sync_disabled" msgid="185731301298967302">"A sincronização está desactivada"</string>
+    <string name="sync_error" msgid="681431702824599812">"Erro de sincronização"</string>
+    <string name="add_account_label" msgid="2035321485672826779">"Adicionar conta"</string>
+    <string name="header_data_and_synchronization" msgid="6286257845276834071">"Dados e sincronização"</string>
+    <string name="preference_change_password_title" msgid="6468827554159468315">"Alterar palavra-passe"</string>
+    <string name="header_account_settings" msgid="4950809499418403792">"Definições da conta"</string>
+    <string name="remove_account_label" msgid="5624712684599197863">"Remover conta"</string>
+    <string name="header_add_an_account" msgid="2198078922829535425">"Adicionar uma conta"</string>
+    <string name="finish_button_label" msgid="6121560986057356757">"Terminar"</string>
+    <string name="really_remove_account_title" msgid="8808121039511188784">"Remover conta"</string>
+    <string name="really_remove_account_message" msgid="3293445755620109578">"Tem a certeza de que pretende remover esta conta? Ao fazê-lo, eliminará também todas as mensagens e contactos da mesma e outros dados do telefone. "\n" Deseja continuar?"</string>
+    <string name="remove_account_failed" msgid="8178924513521241001">"Esta conta é necessária para algumas aplicações. Só será possível removê-la se as predefinições de fábrica do telefone forem repostas (o que elimina todos os seus dados pessoais). Para o fazer, aceda à aplicação Definições, em Privacidade."</string>
+    <string name="provider_label" msgid="6191617139291321517">"Subscrições de emissão"</string>
+    <string name="sync_item_title" msgid="7984962124867021854">"Sincronizar <xliff:g id="AUTHORITY">%s</xliff:g>"</string>
+    <string name="cant_sync_dialog_title" msgid="3016197392261471761">"Não é possível sincronizar manualmente"</string>
+    <string name="cant_sync_dialog_message" msgid="7200115394296632300">"A sincronização para este item está actualmente desactivada. Para alterar as suas preferências, active temporariamente os dados em segundo plano e a sincronização automática."</string>
 </resources>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index 4335e28..2d51e42 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -15,19 +15,20 @@
 -->
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <!-- no translation found for app_label (2800463760279909883) -->
-    <skip />
-    <string name="sync_settings" msgid="4549768061467147584">"Sincronização de dados"</string>
+    <string name="app_label" msgid="569000083919693222">"Sincronizar feeds"</string>
+    <string name="sync_settings" msgid="8707056705985552604">"Configurações de Contas e sincronização"</string>
     <string name="sync_too_many_deletes" msgid="1621369057980827097">"Limite de exclusão excedido"</string>
     <string name="background_data" msgid="1103557117473896066">"Dados de segundo plano"</string>
-    <string name="background_data_summary" msgid="4689952168187153486">"Ativar o uso de dados de segundo plano"</string>
+    <string name="background_data_summary" msgid="9048259510387973822">"Os aplicativos podem sincronizar, enviar e receber dados a qualquer momento"</string>
     <string name="background_data_dialog_title" msgid="6303755495467986079">"Atenção"</string>
-    <string name="background_data_dialog_message" msgid="2817489591533703840">"A desativação dos dados de segundo plano economiza a bateria e diminui o uso dos dados. Alguns aplicativos ainda podem usar a conexão de dados de segundo plano."</string>
-    <string name="sync_automatically" msgid="4694735102757960100">"Sincronização automática"</string>
-    <string name="sync_automatically_summary" msgid="6210073947698673774">"Sincronizar dados automaticamente"</string>
+    <string name="background_data_dialog_message" msgid="8417297954700022363">"A desativação dos dados de segundo plano estende a vida útil da bateria e diminui o uso dos dados. Alguns aplicativos ainda podem usar a conexão de dados de segundo plano."</string>
+    <string name="sync_automatically" msgid="4694735102757960100">"Sinc. automática"</string>
+    <string name="sync_automatically_summary" msgid="4598895616781542745">"Aplicativos sincronizam dados automaticamente"</string>
+    <string name="settings_backup" msgid="6114299464740014762">"Fazer backup das configurações"</string>
+    <string name="settings_backup_summary" msgid="1787552172618610178">"Fazer backup de minhas configurações"</string>
     <string name="sync_menu_sync_now" msgid="5796024841315572404">"Sincronizar agora"</string>
     <string name="sync_menu_sync_cancel" msgid="1005480041232010062">"Cancelar a sincronização"</string>
-    <string name="sync_one_time_sync" msgid="3474532720071919514">"Selecione para sincronizar agora<xliff:g id="LAST_SYNC_TIME">
+    <string name="sync_one_time_sync" msgid="3274364877518422827">"Toque para sincronizar agora<xliff:g id="LAST_SYNC_TIME">
 %1$s</xliff:g>"</string>
     <string name="sync_gmail" msgid="5806053858668452000">"Gmail"</string>
     <string name="sync_calendar" msgid="1796292773734071897">"Agenda"</string>
@@ -37,7 +38,25 @@
     <string name="sync_undo_deletes" msgid="8695514459839593307">"Desfazer as exclusões."</string>
     <string name="sync_do_nothing" msgid="5798755982392201673">"Não fazer nada por enquanto."</string>
     <string name="sync_is_failing" msgid="5230237058552433773">"O Google Sync está enfrentando problemas no momento. Ele retornará em breve."</string>
-    <string name="sync_plug" msgid="4526246957714417280"><font fgcolor="#ffffffff">"Bem-vindo ao Google Sync!"</font>" "\n"Um método do Google para sincronizar dados de modo a permitir o acesso aos seus contatos, compromissos e muito mais, onde quer que você esteja."</string>
+    <string name="sync_plug" msgid="7020432439004167162"><font fgcolor="#ffffffff">"Bem-vindo ao Google Sync!"</font>" "\n"Um método do Google para sincronizar dados de modo a permitir o acesso aos seus contatos, compromissos e muito mais, onde quer que você esteja."</string>
     <string name="header_application_sync_settings" msgid="5263025067167527890">"Configurações de sincronização do aplicativo"</string>
+    <string name="header_manage_accounts" msgid="381956296995298770">"Gerenciar contas"</string>
     <string name="header_general_sync_settings" msgid="1598537524696692308">"Configurações de sincronização geral"</string>
+    <string name="sync_enabled" msgid="913018877443997502">"A sincronização está ATIVADA"</string>
+    <string name="sync_disabled" msgid="185731301298967302">"A sincronização está DESATIVADA"</string>
+    <string name="sync_error" msgid="681431702824599812">"Erro na sincronização"</string>
+    <string name="add_account_label" msgid="2035321485672826779">"Adicionar conta"</string>
+    <string name="header_data_and_synchronization" msgid="6286257845276834071">"Dados e sincronização"</string>
+    <string name="preference_change_password_title" msgid="6468827554159468315">"Alterar senha"</string>
+    <string name="header_account_settings" msgid="4950809499418403792">"Configurações da conta"</string>
+    <string name="remove_account_label" msgid="5624712684599197863">"Remover conta"</string>
+    <string name="header_add_an_account" msgid="2198078922829535425">"Adicionar uma conta"</string>
+    <string name="finish_button_label" msgid="6121560986057356757">"Concluir"</string>
+    <string name="really_remove_account_title" msgid="8808121039511188784">"Remover conta"</string>
+    <string name="really_remove_account_message" msgid="3293445755620109578">"Deseja mesmo remover esta conta? Sua remoção excluirá também todas as suas mensagens, contatos e outros dados do telefone. "\n"Continuar?"</string>
+    <string name="remove_account_failed" msgid="8178924513521241001">"Esta conta é necessária para alguns aplicativos. Só é possível removê-la redefinindo o telefone para os padrões de fábrica (o que exclui todos os seus dados pessoais). Isso é feito na seção de Configurações, em Privacidade."</string>
+    <string name="provider_label" msgid="6191617139291321517">"Enviar inscrições"</string>
+    <string name="sync_item_title" msgid="7984962124867021854">"Sincronizar <xliff:g id="AUTHORITY">%s</xliff:g>"</string>
+    <string name="cant_sync_dialog_title" msgid="3016197392261471761">"Não é possível sincronizar manualmente"</string>
+    <string name="cant_sync_dialog_message" msgid="7200115394296632300">"A sincronização para o item está desativada no momento. Para alterar a sua preferência, ative os dados de segundo plano e a sincronização automática temporariamente."</string>
 </resources>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index 01f3f14..61f2653 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -15,19 +15,20 @@
 -->
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <!-- no translation found for app_label (2800463760279909883) -->
-    <skip />
-    <string name="sync_settings" msgid="4549768061467147584">"Синхронизация данных"</string>
+    <string name="app_label" msgid="569000083919693222">"Фиды синхронизации"</string>
+    <string name="sync_settings" msgid="8707056705985552604">"Настройки аккаунтов и синхронизации"</string>
     <string name="sync_too_many_deletes" msgid="1621369057980827097">"Превышен предел удаления"</string>
     <string name="background_data" msgid="1103557117473896066">"Использовать фоновые данные"</string>
-    <string name="background_data_summary" msgid="4689952168187153486">"Разрешить использовать фоновую передачу данных"</string>
+    <string name="background_data_summary" msgid="9048259510387973822">"Программы могут синхронизироваться, отправлять и принимать данные в любое время."</string>
     <string name="background_data_dialog_title" msgid="6303755495467986079">"Внимание"</string>
-    <string name="background_data_dialog_message" msgid="2817489591533703840">"Отключение фоновых данных экономит энергию батареи и уменьшает использование данных. Некоторые приложения могут, тем не менее, использовать фоновую передачу данных."</string>
+    <string name="background_data_dialog_message" msgid="8417297954700022363">"Отключение фоновых данных экономит энергию батареи и уменьшает использование данных. Некоторые приложения могут, тем не менее, использовать фоновую передачу данных."</string>
     <string name="sync_automatically" msgid="4694735102757960100">"Автосинхронизация"</string>
-    <string name="sync_automatically_summary" msgid="6210073947698673774">"Автоматическая синхронизация данных"</string>
+    <string name="sync_automatically_summary" msgid="4598895616781542745">"Приложения синхронизируют данные автоматически"</string>
+    <string name="settings_backup" msgid="6114299464740014762">"Создать резервную копию настроек"</string>
+    <string name="settings_backup_summary" msgid="1787552172618610178">"Создать резервную копию настроек"</string>
     <string name="sync_menu_sync_now" msgid="5796024841315572404">"Синхронизировать сейчас"</string>
     <string name="sync_menu_sync_cancel" msgid="1005480041232010062">"Отменить синхронизацию"</string>
-    <string name="sync_one_time_sync" msgid="3474532720071919514">"Выберите для синхронизации прямо сейчас<xliff:g id="LAST_SYNC_TIME">
+    <string name="sync_one_time_sync" msgid="3274364877518422827">"Нажмите, чтобы начать синхронизацию<xliff:g id="LAST_SYNC_TIME">
 %1$s</xliff:g>"</string>
     <string name="sync_gmail" msgid="5806053858668452000">"Gmail"</string>
     <string name="sync_calendar" msgid="1796292773734071897">"Календарь"</string>
@@ -37,7 +38,25 @@
     <string name="sync_undo_deletes" msgid="8695514459839593307">"Отменить удаления."</string>
     <string name="sync_do_nothing" msgid="5798755982392201673">"Ничего не делать сейчас."</string>
     <string name="sync_is_failing" msgid="5230237058552433773">"Проблемы с синхронизацией. Скоро все снова будет работать."</string>
-    <string name="sync_plug" msgid="4526246957714417280"><font fgcolor="#ffffffff">"Добро пожаловать в Google Sync!"</font>" "\n"Подход Google к синхронизации данных, помогает получить информацию о контактах, встречах и многом другом, где бы вы ни были."</string>
+    <string name="sync_plug" msgid="7020432439004167162"><font fgcolor="#ffffffff">"Добро пожаловать в Google Sync!"</font>" "\n"Подход Google к синхронизации данных, позволяющий получить данные о контактах, встречах и многом другом, где бы вы ни были."</string>
     <string name="header_application_sync_settings" msgid="5263025067167527890">"Настройки синхронизации приложения"</string>
+    <string name="header_manage_accounts" msgid="381956296995298770">"Управление аккаунтами"</string>
     <string name="header_general_sync_settings" msgid="1598537524696692308">"Общие настройки синхронизации"</string>
+    <string name="sync_enabled" msgid="913018877443997502">"Синхронизация включена"</string>
+    <string name="sync_disabled" msgid="185731301298967302">"Синхронизация выключена"</string>
+    <string name="sync_error" msgid="681431702824599812">"Ошибка синхронизации"</string>
+    <string name="add_account_label" msgid="2035321485672826779">"Добавить аккаунт"</string>
+    <string name="header_data_and_synchronization" msgid="6286257845276834071">"Данные и синхронизация"</string>
+    <string name="preference_change_password_title" msgid="6468827554159468315">"Изменить пароль"</string>
+    <string name="header_account_settings" msgid="4950809499418403792">"Настройки аккаунта"</string>
+    <string name="remove_account_label" msgid="5624712684599197863">"Удалить аккаунт"</string>
+    <string name="header_add_an_account" msgid="2198078922829535425">"Добавить аккаунт"</string>
+    <string name="finish_button_label" msgid="6121560986057356757">"Готово"</string>
+    <string name="really_remove_account_title" msgid="8808121039511188784">"Удалить аккаунт"</string>
+    <string name="really_remove_account_message" msgid="3293445755620109578">"Вы действительно хотите удалить этот аккаунт? Это приведет к потере всех связанных с ним сообщений, контактов и других данных, имеющихся в телефоне. "\n"Продолжить?"</string>
+    <string name="remove_account_failed" msgid="8178924513521241001">"Этот аккаунт используется некоторыми приложениями. Чтобы удалить его, нужно восстановить настройки по умолчанию (при этом все личные данные будут потеряны). Для этого откройте \"Настройки\" в разделе \"Конфиденциальность\"."</string>
+    <string name="provider_label" msgid="6191617139291321517">"Подписки Push"</string>
+    <string name="sync_item_title" msgid="7984962124867021854">"Синхр. <xliff:g id="AUTHORITY">%s</xliff:g>"</string>
+    <string name="cant_sync_dialog_title" msgid="3016197392261471761">"Не удается синхронизировать вручную"</string>
+    <string name="cant_sync_dialog_message" msgid="7200115394296632300">"Синхронизация для этого элемента отключена. Чтобы изменить настройку, временно разрешите использование фоновых данных и автоматическую синхронизацию."</string>
 </resources>
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index f7e1637..f6ead7d 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -15,19 +15,20 @@
 -->
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <!-- no translation found for app_label (2800463760279909883) -->
-    <skip />
-    <string name="sync_settings" msgid="4549768061467147584">"Datasynkronisering"</string>
+    <string name="app_label" msgid="569000083919693222">"Synkroniseringsflöden"</string>
+    <string name="sync_settings" msgid="8707056705985552604">"Inställningar för konton och synkronisering"</string>
     <string name="sync_too_many_deletes" msgid="1621369057980827097">"Gränsen för borttagning har överskridits"</string>
     <string name="background_data" msgid="1103557117473896066">"Bakgrundsdata"</string>
-    <string name="background_data_summary" msgid="4689952168187153486">"Aktivera användning av bakgrundsdata"</string>
+    <string name="background_data_summary" msgid="9048259510387973822">"Program kan synkronisera, skicka och ta emot data när som helst"</string>
     <string name="background_data_dialog_title" msgid="6303755495467986079">"Obs!"</string>
-    <string name="background_data_dialog_message" msgid="2817489591533703840">"Om du inaktiverar bakgrundsdata sparar du batteri och minskar dataanvändning. Vissa program kanske fortfarande använder anslutningen för bakgrundsdata."</string>
+    <string name="background_data_dialog_message" msgid="8417297954700022363">"Om du inaktiverar bakgrundsdata sparar du batteri och minskar dataanvändning. Vissa program kanske fortfarande använder anslutningen för bakgrundsdata."</string>
     <string name="sync_automatically" msgid="4694735102757960100">"Automatisk synkron."</string>
-    <string name="sync_automatically_summary" msgid="6210073947698673774">"Synkronisera data automatiskt"</string>
+    <string name="sync_automatically_summary" msgid="4598895616781542745">"Programmen synkroniserar data automatiskt"</string>
+    <string name="settings_backup" msgid="6114299464740014762">"Säkerhetskopiera inställningar"</string>
+    <string name="settings_backup_summary" msgid="1787552172618610178">"Säkerhetskopiera mina inställningar"</string>
     <string name="sync_menu_sync_now" msgid="5796024841315572404">"Synkronisera nu"</string>
     <string name="sync_menu_sync_cancel" msgid="1005480041232010062">"Avbryt synkronisering"</string>
-    <string name="sync_one_time_sync" msgid="3474532720071919514">"Välj om du vill synkronisera nu<xliff:g id="LAST_SYNC_TIME">
+    <string name="sync_one_time_sync" msgid="3274364877518422827">"Tryck om du vill synkronisera nu<xliff:g id="LAST_SYNC_TIME">
 %1$s</xliff:g>"</string>
     <string name="sync_gmail" msgid="5806053858668452000">"Gmail"</string>
     <string name="sync_calendar" msgid="1796292773734071897">"Kalender"</string>
@@ -37,7 +38,25 @@
     <string name="sync_undo_deletes" msgid="8695514459839593307">"Ångra borttagningarna."</string>
     <string name="sync_do_nothing" msgid="5798755982392201673">"Gör ingenting just nu."</string>
     <string name="sync_is_failing" msgid="5230237058552433773">"Det är för närvarande problem med synkronisering. Det fungerar igen om en stund."</string>
-    <string name="sync_plug" msgid="4526246957714417280"><font fgcolor="#ffffffff">"Välkommen till Google Sync!"</font>" "\n"En funktion i Google som du kan använda om du vill synkronisera data så att du kommer åt dina kontakter, din kalender osv. var du än befinner dig."</string>
+    <string name="sync_plug" msgid="7020432439004167162"><font fgcolor="#ffffffff">"Välkommen till Google Sync!"</font>" "\n"En funktion i Google som du kan använda om du vill synkronisera data så att du kommer åt dina kontakter, din kalender osv. var du än befinner dig."</string>
     <string name="header_application_sync_settings" msgid="5263025067167527890">"Programmets synkroniseringsinställningar"</string>
+    <string name="header_manage_accounts" msgid="381956296995298770">"Hantera konton"</string>
     <string name="header_general_sync_settings" msgid="1598537524696692308">"Allmänna synkroniseringsinställningar"</string>
+    <string name="sync_enabled" msgid="913018877443997502">"Synkronisering är på"</string>
+    <string name="sync_disabled" msgid="185731301298967302">"Synkronisering är avstängd"</string>
+    <string name="sync_error" msgid="681431702824599812">"Synkroniseringsfel"</string>
+    <string name="add_account_label" msgid="2035321485672826779">"Lägg till konto"</string>
+    <string name="header_data_and_synchronization" msgid="6286257845276834071">"Data och synkronisering"</string>
+    <string name="preference_change_password_title" msgid="6468827554159468315">"Byt lösenord"</string>
+    <string name="header_account_settings" msgid="4950809499418403792">"Kontoinställningar"</string>
+    <string name="remove_account_label" msgid="5624712684599197863">"Ta bort konto"</string>
+    <string name="header_add_an_account" msgid="2198078922829535425">"Lägg till ett konto"</string>
+    <string name="finish_button_label" msgid="6121560986057356757">"Avsluta"</string>
+    <string name="really_remove_account_title" msgid="8808121039511188784">"Ta bort konto"</string>
+    <string name="really_remove_account_message" msgid="3293445755620109578">"Vill du ta bort kontot? Om du tar bort kontot tar du också bort alla meddelanden, kontakter och andra data från telefonen. "\n"Vill du fortsätta?"</string>
+    <string name="remove_account_failed" msgid="8178924513521241001">"Det här kontot krävs av vissa program. Du kan bara ta bort det om du återställer telefonens fabriksinställningar (vilket raderar alla personliga data). Om du vill göra det öppnar du menyn Sekretess och väljer Inställningar."</string>
+    <string name="provider_label" msgid="6191617139291321517">"Push-prenumerationer"</string>
+    <string name="sync_item_title" msgid="7984962124867021854">"Synkronisera <xliff:g id="AUTHORITY">%s</xliff:g>"</string>
+    <string name="cant_sync_dialog_title" msgid="3016197392261471761">"Det går inte att synkronisera manuellt"</string>
+    <string name="cant_sync_dialog_message" msgid="7200115394296632300">"Synkronisering är inaktiverad för det här objektet. Om du vill ändra inställningen aktiverar du bakgrundsdata och automatisk synkronisering tillfälligt."</string>
 </resources>
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index bc32866..74d08f9 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -15,19 +15,20 @@
 -->
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <!-- no translation found for app_label (2800463760279909883) -->
-    <skip />
-    <string name="sync_settings" msgid="4549768061467147584">"Veri senkronizasyonu"</string>
+    <string name="app_label" msgid="569000083919693222">"Senkronizasyon yayınları"</string>
+    <string name="sync_settings" msgid="8707056705985552604">"Hesaplar ve senkronizasyon ayarları"</string>
     <string name="sync_too_many_deletes" msgid="1621369057980827097">"Silme sınırı aşıldı"</string>
     <string name="background_data" msgid="1103557117473896066">"Arka plan veri"</string>
-    <string name="background_data_summary" msgid="4689952168187153486">"Arka plan veri kullanımını etkinleştir"</string>
+    <string name="background_data_summary" msgid="9048259510387973822">"Uygulamalar, verileri istediğiniz zaman senkronize edebilir ve gönderip alabilir"</string>
     <string name="background_data_dialog_title" msgid="6303755495467986079">"Dikkat"</string>
-    <string name="background_data_dialog_message" msgid="2817489591533703840">"Arka plan verilerini devre dışı bırakmak pilden tasarruf sağlar ve veri kullanımını düşürür. Bazı uygulamalar yine de arka plan veri bağlantısını kullanabilir."</string>
+    <string name="background_data_dialog_message" msgid="8417297954700022363">"Arka plan verilerini devre dışı bırakmak, pilden tasarruf sağlar ve veri kullanımını azaltır. Bazı uygulamalar yine de arka plan veri bağlantısını kullanmaya devam edebilir."</string>
     <string name="sync_automatically" msgid="4694735102757960100">"Otomatik senk."</string>
-    <string name="sync_automatically_summary" msgid="6210073947698673774">"Verileri otomatik olarak senkronize et"</string>
+    <string name="sync_automatically_summary" msgid="4598895616781542745">"Uygulamalar verileri otomatik olarak senkronize eder"</string>
+    <string name="settings_backup" msgid="6114299464740014762">"Ayarları yedekle"</string>
+    <string name="settings_backup_summary" msgid="1787552172618610178">"Ayarlarımı yedekle"</string>
     <string name="sync_menu_sync_now" msgid="5796024841315572404">"Şimdi senk. et"</string>
     <string name="sync_menu_sync_cancel" msgid="1005480041232010062">"Senkronizasyonu iptal et"</string>
-    <string name="sync_one_time_sync" msgid="3474532720071919514">"Şimdi senkronize etmek için seçin<xliff:g id="LAST_SYNC_TIME">
+    <string name="sync_one_time_sync" msgid="3274364877518422827">"Şimdi senkronize etmek için dokunun<xliff:g id="LAST_SYNC_TIME">
 %1$s</xliff:g>"</string>
     <string name="sync_gmail" msgid="5806053858668452000">"Gmail"</string>
     <string name="sync_calendar" msgid="1796292773734071897">"Takvim"</string>
@@ -37,7 +38,25 @@
     <string name="sync_undo_deletes" msgid="8695514459839593307">"Silme işlemlerini geri alın."</string>
     <string name="sync_do_nothing" msgid="5798755982392201673">"Şimdilik bir şey yapma."</string>
     <string name="sync_is_failing" msgid="5230237058552433773">"Senk. şu anda sorun yaşıyor. Kısa bir süre sonra yeniden devreye girecek."</string>
-    <string name="sync_plug" msgid="4526246957714417280"><font fgcolor="#ffffffff">"Google Sync\'e Hoş Geldiniz!"</font>" "\n"Kişilerinize, randevularınıza ve diğer bilgilerinize istediğiniz yerden erişebilmenize olanak tanımak için veri senkronizasyonuna bir Google yaklaşımı."</string>
+    <string name="sync_plug" msgid="7020432439004167162"><font fgcolor="#ffffffff">"Google Sync\'e Hoş Geldiniz!"</font>" "\n"Kişilerinize, randevularınıza ve diğer bilgilerinize istediğiniz yerden erişebilmenize olanak veren, Google\'ın veri senkronizasyonu ürünü."</string>
     <string name="header_application_sync_settings" msgid="5263025067167527890">"Uygulama senk. ayarları"</string>
+    <string name="header_manage_accounts" msgid="381956296995298770">"Hesapları yönetin"</string>
     <string name="header_general_sync_settings" msgid="1598537524696692308">"Genel senk. ayarları"</string>
+    <string name="sync_enabled" msgid="913018877443997502">"Senkronizasyon AÇIK"</string>
+    <string name="sync_disabled" msgid="185731301298967302">"Senkronizasyon KAPALI"</string>
+    <string name="sync_error" msgid="681431702824599812">"Senkronizasyon hatası"</string>
+    <string name="add_account_label" msgid="2035321485672826779">"Hesap ekle"</string>
+    <string name="header_data_and_synchronization" msgid="6286257845276834071">"Veri ve senkronizasyon"</string>
+    <string name="preference_change_password_title" msgid="6468827554159468315">"Şifreyi değiştir"</string>
+    <string name="header_account_settings" msgid="4950809499418403792">"Hesap ayarları"</string>
+    <string name="remove_account_label" msgid="5624712684599197863">"Hesabı kaldır"</string>
+    <string name="header_add_an_account" msgid="2198078922829535425">"Bir hesap ekleyin"</string>
+    <string name="finish_button_label" msgid="6121560986057356757">"Son"</string>
+    <string name="really_remove_account_title" msgid="8808121039511188784">"Hesabı kaldır"</string>
+    <string name="really_remove_account_message" msgid="3293445755620109578">"Bu hesabı gerçekten kaldırmak istiyor musunuz? Bunu kaldırmak, bu hesaba ait tüm mesajları, kişileri ve telefondaki diğer verileri de silecektir. "\n"Devam etmek istiyor musunuz?"</string>
+    <string name="remove_account_failed" msgid="8178924513521241001">"Bu hesap, bazı uygulamalar için gereklidir. Hesabı ancak telefonu varsayılan fabrika ayarlarına geri döndürerek kaldırabilirsiniz (tüm kişisel verileriniz silinir). Bu işlemi Ayarlar uygulamasında, Gizlilik altında gerçekleştirebilirsiniz."</string>
+    <string name="provider_label" msgid="6191617139291321517">"Abonelik şart koş"</string>
+    <string name="sync_item_title" msgid="7984962124867021854">"<xliff:g id="AUTHORITY">%s</xliff:g> senkronize et"</string>
+    <string name="cant_sync_dialog_title" msgid="3016197392261471761">"Manuel olarak senkronize edilemiyor"</string>
+    <string name="cant_sync_dialog_message" msgid="7200115394296632300">"Bu öğe için senkronizasyon şu anda devre dışı bırakılmış durumdadır. Tercihinizi değiştirmek için geçici olarak arka plan verilerini ve otomatik senkronizasyonu açın."</string>
 </resources>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index caae4ed..ec8cb31 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -15,19 +15,20 @@
 -->
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <!-- no translation found for app_label (2800463760279909883) -->
-    <skip />
-    <string name="sync_settings" msgid="4549768061467147584">"数据同步"</string>
+    <string name="app_label" msgid="569000083919693222">"同步供稿"</string>
+    <string name="sync_settings" msgid="8707056705985552604">"帐户与同步设置"</string>
     <string name="sync_too_many_deletes" msgid="1621369057980827097">"超出删除限制"</string>
     <string name="background_data" msgid="1103557117473896066">"背景数据"</string>
-    <string name="background_data_summary" msgid="4689952168187153486">"启用背景数据"</string>
+    <string name="background_data_summary" msgid="9048259510387973822">"应用程序能够随时同步、发送和接收数据"</string>
     <string name="background_data_dialog_title" msgid="6303755495467986079">"注意事项"</string>
-    <string name="background_data_dialog_message" msgid="2817489591533703840">"禁用背景数据可节省电量并可降低数据使用量。有些应用程序可能仍会使用背景数据连接。"</string>
+    <string name="background_data_dialog_message" msgid="8417297954700022363">"禁用背景数据可延长电池寿命并可降低数据使用量。有些应用程序可能仍会使用背景数据连接。"</string>
     <string name="sync_automatically" msgid="4694735102757960100">"自动同步"</string>
-    <string name="sync_automatically_summary" msgid="6210073947698673774">"自动同步数据"</string>
+    <string name="sync_automatically_summary" msgid="4598895616781542745">"应用程序自动同步数据"</string>
+    <string name="settings_backup" msgid="6114299464740014762">"备份设置"</string>
+    <string name="settings_backup_summary" msgid="1787552172618610178">"备份我的设置"</string>
     <string name="sync_menu_sync_now" msgid="5796024841315572404">"立即同步"</string>
     <string name="sync_menu_sync_cancel" msgid="1005480041232010062">"取消同步"</string>
-    <string name="sync_one_time_sync" msgid="3474532720071919514">"选择此程序立即开始同步<xliff:g id="LAST_SYNC_TIME">
+    <string name="sync_one_time_sync" msgid="3274364877518422827">"触摸可立即同步<xliff:g id="LAST_SYNC_TIME">
 %1$s</xliff:g>"</string>
     <string name="sync_gmail" msgid="5806053858668452000">"Gmail"</string>
     <string name="sync_calendar" msgid="1796292773734071897">"日历"</string>
@@ -37,7 +38,25 @@
     <string name="sync_undo_deletes" msgid="8695514459839593307">"撤消删除。"</string>
     <string name="sync_do_nothing" msgid="5798755982392201673">"目前不进行任何操作。"</string>
     <string name="sync_is_failing" msgid="5230237058552433773">"同步现在遇到问题。很快将返回此操作。"</string>
-    <string name="sync_plug" msgid="4526246957714417280"><font fgcolor="#ffffffff">"欢迎使用 Google Sync!"</font>\n"Google 同步数据的方法可以让您从任何地方访问您的联系人、约会以及更多信息。"</string>
+    <string name="sync_plug" msgid="7020432439004167162"><font fgcolor="#ffffffff">"欢迎使用 Google sync!"</font>" "\n"Google 的这款同步数据工具可以让您从任何地方访问您的联系人、约会以及更多信息。"</string>
     <string name="header_application_sync_settings" msgid="5263025067167527890">"应用程序同步设置"</string>
+    <string name="header_manage_accounts" msgid="381956296995298770">"管理帐户"</string>
     <string name="header_general_sync_settings" msgid="1598537524696692308">"常规同步设置"</string>
+    <string name="sync_enabled" msgid="913018877443997502">"同步功能已开启"</string>
+    <string name="sync_disabled" msgid="185731301298967302">"同步功能已关闭"</string>
+    <string name="sync_error" msgid="681431702824599812">"同步错误"</string>
+    <string name="add_account_label" msgid="2035321485672826779">"添加帐户"</string>
+    <string name="header_data_and_synchronization" msgid="6286257845276834071">"数据与同步"</string>
+    <string name="preference_change_password_title" msgid="6468827554159468315">"更改密码"</string>
+    <string name="header_account_settings" msgid="4950809499418403792">"帐户设置"</string>
+    <string name="remove_account_label" msgid="5624712684599197863">"删除帐户"</string>
+    <string name="header_add_an_account" msgid="2198078922829535425">"添加帐户"</string>
+    <string name="finish_button_label" msgid="6121560986057356757">"完成"</string>
+    <string name="really_remove_account_title" msgid="8808121039511188784">"删除帐户"</string>
+    <string name="really_remove_account_message" msgid="3293445755620109578">"确实要删除此帐户吗?删除该帐户会同时从手机中删除其所有讯息、联系人以及其他数据。"\n"是否继续?"</string>
+    <string name="remove_account_failed" msgid="8178924513521241001">"某些应用程序需要使用此帐户。您只有将手机重置为出厂默认设置(此操作会删除您所有的个人数据),才能删除此帐户。您可以在“隐私权”下的“设置”部分执行此操作。"</string>
+    <string name="provider_label" msgid="6191617139291321517">"推送订阅"</string>
+    <string name="sync_item_title" msgid="7984962124867021854">"同步<xliff:g id="AUTHORITY">%s</xliff:g>"</string>
+    <string name="cant_sync_dialog_title" msgid="3016197392261471761">"无法手动同步"</string>
+    <string name="cant_sync_dialog_message" msgid="7200115394296632300">"当前已停用同步此条目。要更改您的偏好设置,请暂时启用背景数据和自动同步。"</string>
 </resources>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index 5818795..5b50283 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -15,18 +15,20 @@
 -->
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_label" msgid="2800463760279909883">"同步資訊提供"</string>
-    <string name="sync_settings" msgid="4549768061467147584">"資料同步處理"</string>
+    <string name="app_label" msgid="569000083919693222">"同步處理資訊提供"</string>
+    <string name="sync_settings" msgid="8707056705985552604">"帳戶與同步處理設定"</string>
     <string name="sync_too_many_deletes" msgid="1621369057980827097">"達到刪除上限"</string>
     <string name="background_data" msgid="1103557117473896066">"背景資料"</string>
-    <string name="background_data_summary" msgid="4689952168187153486">"啟用背景資料"</string>
+    <string name="background_data_summary" msgid="9048259510387973822">"應用程式隨時可以同步處理、傳送和接收資料"</string>
     <string name="background_data_dialog_title" msgid="6303755495467986079">"注意"</string>
-    <string name="background_data_dialog_message" msgid="2817489591533703840">"停用背景資料可節省電源並減少資料的使用。但某些應用程式可能仍會使用背景資料連線。"</string>
+    <string name="background_data_dialog_message" msgid="8417297954700022363">"停用背景資料可延長電池使用時間,並減少資料的傳輸量。但某些應用程式可能仍會使用背景資料連線。"</string>
     <string name="sync_automatically" msgid="4694735102757960100">"自動同步處理"</string>
-    <string name="sync_automatically_summary" msgid="6210073947698673774">"自動同步處理資料"</string>
+    <string name="sync_automatically_summary" msgid="4598895616781542745">"應用程式會自動同步處理資料"</string>
+    <string name="settings_backup" msgid="6114299464740014762">"備份設定"</string>
+    <string name="settings_backup_summary" msgid="1787552172618610178">"備份我的設定"</string>
     <string name="sync_menu_sync_now" msgid="5796024841315572404">"立即同步處理"</string>
     <string name="sync_menu_sync_cancel" msgid="1005480041232010062">"取消同步處理"</string>
-    <string name="sync_one_time_sync" msgid="3474532720071919514">"選取此處立即開始同步處理<xliff:g id="LAST_SYNC_TIME">
+    <string name="sync_one_time_sync" msgid="3274364877518422827">"輕觸此處立即開始同步 <xliff:g id="LAST_SYNC_TIME">
 %1$s</xliff:g>"</string>
     <string name="sync_gmail" msgid="5806053858668452000">"Gmail"</string>
     <string name="sync_calendar" msgid="1796292773734071897">"Google 日曆"</string>
@@ -36,7 +38,25 @@
     <string name="sync_undo_deletes" msgid="8695514459839593307">"復原刪除。"</string>
     <string name="sync_do_nothing" msgid="5798755982392201673">"暫停執行 。"</string>
     <string name="sync_is_failing" msgid="5230237058552433773">"同步處理目前發生問題。將於短時間內恢復。"</string>
-    <string name="sync_plug" msgid="4526246957714417280"><font fgcolor="#ffffffff">"歡迎使用 Google Sync!"</font>\n"這是 Google 所提供用於同步處理資料的程式,可讓您隨時隨地存取聯絡人、約會等資料。"</string>
+    <string name="sync_plug" msgid="7020432439004167162"><font fgcolor="#ffffffff">"歡迎使用 Google Sync!"</font>\n"這是 Google 所提供的資料同步處理工具,可讓您隨時隨地存取通訊錄、約會等資料。"</string>
     <string name="header_application_sync_settings" msgid="5263025067167527890">"應用程式同步處理設定"</string>
+    <string name="header_manage_accounts" msgid="381956296995298770">"管理帳戶"</string>
     <string name="header_general_sync_settings" msgid="1598537524696692308">"一般同步處理設定"</string>
+    <string name="sync_enabled" msgid="913018877443997502">"已開啟同步處理功能"</string>
+    <string name="sync_disabled" msgid="185731301298967302">"已關閉同步處理功能"</string>
+    <string name="sync_error" msgid="681431702824599812">"同步處理錯誤"</string>
+    <string name="add_account_label" msgid="2035321485672826779">"新增帳戶"</string>
+    <string name="header_data_and_synchronization" msgid="6286257845276834071">"資料同步處理"</string>
+    <string name="preference_change_password_title" msgid="6468827554159468315">"變更密碼"</string>
+    <string name="header_account_settings" msgid="4950809499418403792">"帳戶設定"</string>
+    <string name="remove_account_label" msgid="5624712684599197863">"移除帳戶"</string>
+    <string name="header_add_an_account" msgid="2198078922829535425">"新增帳戶"</string>
+    <string name="finish_button_label" msgid="6121560986057356757">"完成"</string>
+    <string name="really_remove_account_title" msgid="8808121039511188784">"移除帳戶"</string>
+    <string name="really_remove_account_message" msgid="3293445755620109578">"確定要移除帳戶嗎?移除帳戶後,手機上的訊息、聯絡人和其他資料將一併遭到刪除。"\n"您要繼續嗎?"</string>
+    <string name="remove_account_failed" msgid="8178924513521241001">"部分應用程式需要使用此帳戶。如要移除此帳戶,您必須將手機還原至出廠預設值 (這會刪除您全部的個人資料);請至 [設定] 應用程式的 [隱私權] 中進行還原。"</string>
+    <string name="provider_label" msgid="6191617139291321517">"發送訂閱"</string>
+    <string name="sync_item_title" msgid="7984962124867021854">"同步處理<xliff:g id="AUTHORITY">%s</xliff:g>"</string>
+    <string name="cant_sync_dialog_title" msgid="3016197392261471761">"無法手動同步處理"</string>
+    <string name="cant_sync_dialog_message" msgid="7200115394296632300">"該項目的同步處理功能已停用。如要變更您的偏好設定,請暫時開啟背景資料與自動同步處理功能。"</string>
 </resources>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index a606565..016073d 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -19,30 +19,34 @@
 
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <!-- Title of the feed synchronization activity. -->
-    <string name="app_label">Sync Feeds</string>
+    <string name="app_label">Account and Sync Settings</string>
     <!-- Sync settings -->
     <!-- Main Settings screen setting option name to go into the screen for data sync settings-->
-    <string name="sync_settings">Data synchronization</string>
+    <string name="sync_settings">Accounts &amp; sync settings</string>
     <!-- Error message when the sync tried to delete too many things -->
     <string name="sync_too_many_deletes">Delete limit exceeded</string>
     <!-- Data synchronization settings screen, title of setting that controls whether background data should be used -->
     <string name="background_data">Background data</string>
     <!-- Data synchronization settings screen, summary of setting that controls whether background data should be used -->
-    <string name="background_data_summary">Enable background data usage</string>
+    <string name="background_data_summary">Applications can sync, send, and receive data at any time</string>
     <!-- Data synchronization settings screen, title of dialog that confirms the user's unchecking of background data -->
     <string name="background_data_dialog_title">Attention</string>
     <!-- Data synchronization settings screen, message of dialog that confirms the user's unchecking of background data -->
-    <string name="background_data_dialog_message">Disabling background data saves battery and lowers data usage. Some applications may still use the background data connection.</string>
+    <string name="background_data_dialog_message">Disabling background data extends battery life and lowers data use. Some applications may still use the background data connection.</string>
     <!-- Data synchronization settings screen, setting option name -->
     <string name="sync_automatically">Auto-sync</string>
     <!-- Data synchronization settings screen, setting option summary text when check box is selected -->
-    <string name="sync_automatically_summary">Automatically sync data</string>
+    <string name="sync_automatically_summary">Applications sync data automatically</string>
+    <!-- Data synchronization settings screen, setting option name -->
+    <string name="settings_backup">Back up settings</string>
+    <!-- Data synchronization settings screen, setting option summary text when check box is selected -->
+    <string name="settings_backup_summary">Back up my settings</string>
     <!-- Data synchronization settings screen, menu option -->
     <string name="sync_menu_sync_now">Sync now</string>
     <!-- Data synchronization settings screen, menu option -->
     <string name="sync_menu_sync_cancel">Cancel sync</string>
     <!-- Data synchronization settings screen, summary of a sync provider (for example, Gmail) when autosync is off and the user wants to do a one-time sync. -->
-    <string name="sync_one_time_sync">Select to sync now<xliff:g id="last_sync_time">\n%1$s</xliff:g></string>
+    <string name="sync_one_time_sync">Touch to sync now<xliff:g id="last_sync_time">\n%1$s</xliff:g></string>
     <!-- Data synchronization settings screen, checkbox setting option name. Controls whether Gmail should be synced.  Should use "Gmail" to refer to this app.-->
     <string name="sync_gmail">Gmail</string>
     <!-- Data synchronization settings screen, checkbox setting option name. Controls whether Calendar shoudl be synced. -->
@@ -60,11 +64,56 @@
     <!-- Message when sync is currently failing -->
     <string name="sync_is_failing">Sync is currently experiencing problems. It will be back shortly.</string>
     <!-- Message introducing the user to Google Sync. -->
-    <string name="sync_plug"><font fgcolor="#ffffffff">Welcome to Google Sync!</font>
-    \nA Google approach to synchronizing data to allow access to your contacts, appointments and more from wherever you are.
+    <string name="sync_plug"><font fgcolor="#ffffffff">Welcome to Google sync!</font>
+    \nA Google approach to synchronizing data to allow access to your contacts, appointments, and more from wherever you are.
     </string>
+
+    <!-- TODO: Remove -->
     <!-- Header title for those settings relating to application syncing. -->
     <string name="header_application_sync_settings">Application sync settings</string>
+    <!-- TODO: end -->
+
+    <!-- Accounts & Synchronization settings --><skip/>
+    <!-- Header title for list of accounts on Accounts & Synchronization settings -->
+    <string name="header_manage_accounts">Manage accounts</string>
     <!-- Header title for those settings relating to general syncing. -->
     <string name="header_general_sync_settings">General sync settings</string>
+
+    <!-- Sync status messages on Accounts & Synchronization settings --><skip/>
+    <!-- Sync status shown when sync is enabled -->
+    <string name="sync_enabled">Sync is ON</string>
+    <!-- Sync status shown when sync is disabled -->
+    <string name="sync_disabled">Sync is OFF</string>
+    <!-- Sync status shown when last sync resulted in an error -->
+    <string name="sync_error">Sync error</string>
+
+    <!-- Button label to add an account -->
+    <string name="add_account_label">Add account</string>
+    <!-- Header for data and synchronization -->
+    <string name="header_data_and_synchronization">Data &amp; synchronization</string>
+    <!-- Preference item that lets the user change password -->
+    <string name="preference_change_password_title">Change password</string>
+    <!-- Header that appears at the top of Account Settings screen -->
+    <string name="header_account_settings">Account settings</string>
+    <!-- Button label to remove current account -->
+    <string name="remove_account_label">Remove account</string>
+    <!-- Title shown in AddAccount -->
+    <string name="header_add_an_account">Add an account</string>
+    <!-- Button shown when this activity is run from SetupWizard -->
+    <string name="finish_button_label">Finish</string>
+    <!-- Title of remove message for remove account dialog -->
+    <string name="really_remove_account_title">Remove account</string>
+    <!-- Remove account message in dialog -->
+    <string name="really_remove_account_message">Do you really want to remove this account? Removing it will also delete all of its messages, contacts, and other data from the phone.
+    \nProceed?</string>
+    <!-- This is shown if the autheticator for a given account fails to remove it. -->
+    <string name="remove_account_failed">This account is required by some applications. You can only remove it by resetting the phone to factory defaults (which deletes all your personal data). You do that in the Settings application, under Privacy.</string>
+    <!-- What to show in messaging that refers to this provider, e.g. AccountSyncSettings -->
+    <string name="provider_label">Push subscriptions</string>
+    <!-- Formatter in AccountSyncSettings for each application we wish to synchronize, e.g. "Sync Calendar" -->
+    <string name="sync_item_title">Sync <xliff:g id="authority" example="Calendar">%s</xliff:g></string>
+    <!-- Title of dialog shown when you can't manually sync an item because it's disabled -->
+    <string name="cant_sync_dialog_title">Cannot manually sync</string>
+    <!-- Messaage shown in dialog when you can't manually sync -->
+    <string name="cant_sync_dialog_message">Sync for this item is currently disabled. To change your preference, temporarily turn on background data and automatic sync.</string>
 </resources>
diff --git a/res/xml/account_sync_settings.xml b/res/xml/account_sync_settings.xml
new file mode 100644
index 0000000..ff49c9c
--- /dev/null
+++ b/res/xml/account_sync_settings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2008 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
+
+    <PreferenceCategory android:key="dataAndSynchronization"
+            android:title="@string/header_data_and_synchronization" />
+
+</PreferenceScreen>
diff --git a/res/xml/add_account_settings.xml b/res/xml/add_account_settings.xml
new file mode 100644
index 0000000..0ec46b7
--- /dev/null
+++ b/res/xml/add_account_settings.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2008 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
+
+</PreferenceScreen>
diff --git a/res/xml/manage_accounts_settings.xml b/res/xml/manage_accounts_settings.xml
new file mode 100644
index 0000000..8ddd7e7
--- /dev/null
+++ b/res/xml/manage_accounts_settings.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2008 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
+
+    <PreferenceCategory
+            android:title="@string/header_general_sync_settings" />
+
+    <CheckBoxPreference android:key="backgroundDataCheckBox"
+        android:persistent="false"
+        android:title="@string/background_data"
+        android:summary="@string/background_data_summary"/>
+
+    <CheckBoxPreference android:key="syncAutomaticallyCheckBox"
+        android:persistent="false"
+        android:dependency="backgroundDataCheckBox"
+        android:title="@string/sync_automatically"
+        android:summary="@string/sync_automatically_summary"/>
+
+    <PreferenceCategory android:key="manageAccountsCategory"
+            android:title="@string/header_manage_accounts" />
+
+</PreferenceScreen>
diff --git a/res/xml/sync_settings.xml b/res/xml/sync_settings.xml
deleted file mode 100644
index 988363f..0000000
--- a/res/xml/sync_settings.xml
+++ /dev/null
@@ -1,55 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2008 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-  
-          http://www.apache.org/licenses/LICENSE-2.0
-  
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
-
-    <PreferenceCategory
-            android:title="@string/header_general_sync_settings" />
-
-    <CheckBoxPreference android:key="backgroundDataCheckBox"
-        android:persistent="false"
-        android:title="@string/background_data"
-        android:summary="@string/background_data_summary"/>
-    <CheckBoxPreference android:key="autoSyncCheckBox"
-        android:persistent="false"
-        android:title="@string/sync_automatically"
-        android:summary="@string/sync_automatically_summary"
-        android:dependency="backgroundDataCheckBox"/>
-
-    <PreferenceCategory
-            android:title="@string/header_application_sync_settings" />
-
-    <!-- The following keys are special. They correspond to
-         content providers sans the "sync_" prefix. This is
-         because very specific content providers are being
-         enabled for sync in this release.
-        -->
-    <com.android.settings.SyncStateCheckBoxPreference android:key="sync_gmail-ls"
-        android:persistent="false"
-        android:title="@string/sync_gmail"
-        android:summary=""
-        android:dependency="backgroundDataCheckBox"/>
-    <com.android.settings.SyncStateCheckBoxPreference android:key="sync_calendar"
-        android:persistent="false"
-        android:title="@string/sync_calendar"
-        android:summary=""
-        android:dependency="backgroundDataCheckBox"/>
-    <com.android.settings.SyncStateCheckBoxPreference android:key="sync_contacts"
-        android:persistent="false"
-        android:title="@string/sync_contacts"
-        android:summary=""
-        android:dependency="backgroundDataCheckBox"/>
-</PreferenceScreen>
diff --git a/src/com/android/providers/subscribedfeeds/GoogleSubscribedFeedsProvider.java b/src/com/android/providers/subscribedfeeds/GoogleSubscribedFeedsProvider.java
deleted file mode 100644
index 87e6364..0000000
--- a/src/com/android/providers/subscribedfeeds/GoogleSubscribedFeedsProvider.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.providers.subscribedfeeds;
-
-import android.content.SyncAdapter;
-
-public class GoogleSubscribedFeedsProvider extends SubscribedFeedsProvider {
-    private SubscribedFeedsSyncAdapter mSyncAdapter;
-
-    @Override
-    public synchronized SyncAdapter getSyncAdapter() {
-        if (mSyncAdapter == null) {
-            mSyncAdapter = new SubscribedFeedsSyncAdapter(getContext(), this);
-        }
-        return mSyncAdapter;
-    }
-}
\ No newline at end of file
diff --git a/src/com/android/providers/subscribedfeeds/SubscribedFeedsSyncAdapter.java b/src/com/android/providers/subscribedfeeds/SubscribedFeedsSyncAdapter.java
deleted file mode 100644
index 6094ed3..0000000
--- a/src/com/android/providers/subscribedfeeds/SubscribedFeedsSyncAdapter.java
+++ /dev/null
@@ -1,238 +0,0 @@
-/*
-** Copyright 2007, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-**     http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** See the License for the specific language governing permissions and
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** limitations under the License.
-*/
-
-package com.android.providers.subscribedfeeds;
-
-import com.google.android.gdata.client.AndroidGDataClient;
-import com.google.android.gdata.client.AndroidXmlParserFactory;
-import com.google.android.googlelogin.GoogleLoginServiceBlockingHelper;
-import com.google.android.googlelogin.GoogleLoginServiceNotFoundException;
-import com.google.android.providers.AbstractGDataSyncAdapter;
-import com.google.wireless.gdata.client.GDataServiceClient;
-import com.google.wireless.gdata.client.QueryParams;
-import com.google.wireless.gdata.data.Entry;
-import com.google.wireless.gdata.data.Feed;
-import com.google.wireless.gdata.parser.ParseException;
-import com.google.wireless.gdata.subscribedfeeds.client.SubscribedFeedsClient;
-import com.google.wireless.gdata.subscribedfeeds.data.FeedUrl;
-import com.google.wireless.gdata.subscribedfeeds.data.SubscribedFeedsEntry;
-import com.google.wireless.gdata.subscribedfeeds.parser.xml.XmlSubscribedFeedsGDataParserFactory;
-
-import android.content.ContentProvider;
-import android.content.ContentValues;
-import android.content.Context;
-import android.content.SyncContext;
-import android.content.SyncResult;
-import android.content.SyncStats;
-import android.content.SyncableContentProvider;
-import android.database.Cursor;
-import android.net.Uri;
-import android.os.Bundle;
-import android.provider.Settings;
-import android.provider.SubscribedFeeds;
-import android.util.Log;
-import android.text.TextUtils;
-
-/**
- * Implements a SyncAdapter for SubscribedFeeds
- */
-public class SubscribedFeedsSyncAdapter extends AbstractGDataSyncAdapter {
-    private final SubscribedFeedsClient mSubscribedFeedsClient;
-
-    private final static String FEED_URL = "https://android.clients.google.com/gsync/sub";
-
-    private static final String ROUTINGINFO_PARAMETER = "routinginfo";
-
-    protected SubscribedFeedsSyncAdapter(Context context, SyncableContentProvider provider) {
-        super(context, provider);
-        mSubscribedFeedsClient =
-            new SubscribedFeedsClient(
-                    new AndroidGDataClient(context),
-                    new XmlSubscribedFeedsGDataParserFactory(
-                            new AndroidXmlParserFactory()));
-    }
-
-    @Override
-    protected GDataServiceClient getGDataServiceClient() {
-        return mSubscribedFeedsClient;
-    }
-
-    protected boolean handleAllDeletedUnavailable(GDataSyncData syncData, String feed) {
-        Log.w(TAG, "subscribed feeds don't use tombstones");
-
-        // this should never happen, but if it does pretend that we are able to handle it.
-        return true;
-    }
-
-    /*
-     * Takes the entry, casts it to a SubscribedFeedsEntry and executes the
-     * appropriate actions on the ContentProvider to represent the entry.
-     */
-    protected void updateProvider(Feed feed, Long syncLocalId,
-            Entry baseEntry, ContentProvider provider, Object syncInfo)
-            throws ParseException {
-        ContentValues values = new ContentValues();
-        values.put(SubscribedFeeds.Feeds._SYNC_ACCOUNT, getAccount());
-        values.put(SubscribedFeeds.Feeds._SYNC_LOCAL_ID, syncLocalId);
-        final SubscribedFeedsEntry entry = (SubscribedFeedsEntry) baseEntry;
-        final String id = entry.getId();
-        final String editUri = entry.getEditUri();
-        String version = null;
-        if (!TextUtils.isEmpty(id) && !TextUtils.isEmpty(editUri)) {
-            final String serverId = id.substring(id.lastIndexOf('/') + 1);
-            version = editUri.substring(editUri.lastIndexOf('/') + 1);
-            values.put(SubscribedFeeds.Feeds._SYNC_ID, serverId);
-            values.put(SubscribedFeeds.Feeds._SYNC_VERSION, version);
-        }
-        if (baseEntry.isDeleted()) {
-            provider.insert(SubscribedFeeds.Feeds.DELETED_CONTENT_URI, values);
-        } else {
-            values.put(SubscribedFeeds.Feeds.FEED, entry.getSubscribedFeed().getFeed());
-            if (!TextUtils.isEmpty(version)) {
-                values.put(SubscribedFeeds.Feeds._SYNC_TIME, version);
-            }
-            values.put(SubscribedFeeds.Feeds._SYNC_DIRTY, "0");
-            provider.insert(SubscribedFeeds.Feeds.CONTENT_URI, values);
-        }
-    }
-
-    @Override
-    protected String getFeedUrl(String account) {
-        return FEED_URL;
-    }
-
-    protected Class getFeedEntryClass() {
-        return SubscribedFeedsEntry.class;
-    }
-
-    @Override
-    protected void updateQueryParameters(QueryParams params) {
-        params.setParamValue(ROUTINGINFO_PARAMETER, getRoutingInfoForAccount(getAccount()));
-    }
-
-    @Override
-    protected Entry newEntry() {
-        return new SubscribedFeedsEntry();
-    }
-
-    /* (non-Javadoc)
-    * @see android.content.SyncAdapter#getServerDiffs
-    */
-    @Override
-    public void getServerDiffs(SyncContext context, SyncData syncData,
-            SyncableContentProvider tempProvider,
-            Bundle extras, Object syncInfo, SyncResult syncResult) {
-        tempProvider.setContainsDiffs(false /* the server returns all records, not just diffs */);
-        super.getServerDiffs(context, syncData, tempProvider, extras, syncInfo, syncResult);
-    }
-
-    public void onAccountsChanged(String[] accounts) {
-        // no need to do anything
-    }
-
-    @Override
-    protected Cursor getCursorForTable(ContentProvider cp, Class entryClass) {
-        if (entryClass != SubscribedFeedsEntry.class) {
-            throw new IllegalArgumentException("unexpected entry class, " + entryClass.getName());
-        }
-        return cp.query(SubscribedFeeds.Feeds.CONTENT_URI, null, null, null, null);
-    }
-
-    @Override
-    protected Cursor getCursorForDeletedTable(ContentProvider cp, Class entryClass) {
-        if (entryClass != SubscribedFeedsEntry.class) {
-            throw new IllegalArgumentException("unexpected entry class, " + entryClass.getName());
-        }
-        return cp.query(SubscribedFeeds.Feeds.DELETED_CONTENT_URI, null, null, null, null);
-    }
-
-    @Override
-    protected String cursorToEntry(SyncContext context,
-            Cursor c, Entry baseEntry, Object syncInfo) throws ParseException {
-        final String account = c.getString(c.getColumnIndex(SubscribedFeeds.Feeds._SYNC_ACCOUNT));
-        final String service = c.getString(c.getColumnIndex(SubscribedFeeds.Feeds.SERVICE));
-        final String id = c.getString(c.getColumnIndex(SubscribedFeeds.Feeds._SYNC_ID));
-        final String feed = c.getString(c.getColumnIndex(SubscribedFeeds.Feeds.FEED));
-
-        String authToken;
-        try {
-            authToken =
-                    GoogleLoginServiceBlockingHelper.getAuthToken(getContext(), account, service);
-        } catch (GoogleLoginServiceBlockingHelper.AuthenticationException e) {
-            Log.e("Sync", "caught exception while attempting to get an " +
-                    "authtoken for account " + account +
-                    ", service " + service + ": " + e.toString());
-            throw new ParseException(e.getMessage(), e);
-        } catch (GoogleLoginServiceNotFoundException e) {
-            Log.e("Sync", "caught exception while attempting to get an " +
-                    "authtoken for account " + account +
-                    ", service " + service + ": " + e.toString());
-            throw new ParseException(e.getMessage(), e);
-        }
-
-        FeedUrl subscribedFeedUrl = new FeedUrl(feed, service, authToken);
-        SubscribedFeedsEntry entry = (SubscribedFeedsEntry) baseEntry;
-        if (id != null) {
-            entry.setId(getFeedUrl(account) + "/" + id);
-            entry.setEditUri(entry.getId());
-        }
-        entry.setRoutingInfo(getRoutingInfoForAccount(account));
-        entry.setSubscribedFeed(subscribedFeedUrl);
-        entry.setClientToken(subscribedFeedUrl.getFeed());
-
-        String createUrl = null;
-        if (id == null) {
-            createUrl = getFeedUrl(account);    
-        }
-        return createUrl;
-    }
-
-    @Override
-    protected void deletedCursorToEntry(SyncContext context, Cursor c, Entry entry) {
-        final String id = c.getString(c.getColumnIndexOrThrow(SubscribedFeeds.Feeds._SYNC_ID));
-        entry.setId(id);
-        entry.setEditUri(getFeedUrl(getAccount()) + "/" + id);
-    }
-
-    /**
-     * Returns a string that can be used by the GSyncSubscriptionServer to
-     * route messages back to this account via GTalkService.
-     * TODO: this should eventually move into a general place so that others
-     * can use it.
-     *
-     * @param account the account whose routing info we want
-     * @return the GSyncSubscriptionServer routing string for this account
-     */
-    public String getRoutingInfoForAccount(String account) {
-        long androidId;
-        try {
-            androidId = GoogleLoginServiceBlockingHelper.getAndroidId(getContext());
-        } catch (GoogleLoginServiceNotFoundException e) {
-            Log.e(TAG, "Could not get routing info for account", e);
-            return null;
-        }
-        return Uri.parse("gtalk://" + account
-                + "#" + Settings.getGTalkDeviceId(androidId)).toString();
-    }
-
-    @Override
-    protected boolean hasTooManyDeletions(SyncStats stats) {
-        // allow subscribed feeds to delete any number of entries,
-        // since the client is the authority on which entries
-        // should exist.
-        return false;
-    }
-}
diff --git a/src/com/android/settings/AccountPreference.java b/src/com/android/settings/AccountPreference.java
new file mode 100644
index 0000000..cba267e
--- /dev/null
+++ b/src/com/android/settings/AccountPreference.java
@@ -0,0 +1,144 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings;
+
+import java.util.ArrayList;
+
+import com.android.providers.subscribedfeeds.R;
+
+import android.accounts.Account;
+import android.content.Context;
+import android.content.Intent;
+import android.graphics.drawable.Drawable;
+import android.preference.Preference;
+import android.util.Log;
+import android.view.View;
+import android.widget.ImageView;
+
+/**
+ * AccountPreference is used to display a username, status and provider icon for an account on
+ * the device.
+ */
+public class AccountPreference extends Preference {
+    private static final String TAG = "AccountPreference";
+    public static final int SYNC_ENABLED = 0; // all know sync adapters are enabled and OK
+    public static final int SYNC_DISABLED = 1; // no sync adapters are enabled
+    public static final int SYNC_ERROR = 2; // one or more sync adapters have a problem
+    private int mStatus;
+    private Account mAccount;
+    private ArrayList<String> mAuthorities;
+    private Drawable mProviderIcon;
+    private ImageView mSyncStatusIcon;
+    private ImageView mProviderIconView;
+
+    public AccountPreference(Context context, Account account, Drawable icon,
+            ArrayList<String> authorities) {
+        super(context);
+        mAccount = account;
+        mAuthorities = authorities;
+        mProviderIcon = icon;
+        setLayoutResource(R.layout.account_preference);
+        setTitle(mAccount.name);
+        setSummary("");
+        // Add account info to the intent for AccountSyncSettings
+        Intent intent = new Intent("android.settings.ACCOUNT_SYNC_SETTINGS");
+        intent.putExtra("account", mAccount);
+        setIntent(intent);
+        setPersistent(false);
+        setSyncStatus(SYNC_DISABLED);
+    }
+
+    public Account getAccount() {
+        return mAccount;
+    }
+
+    public ArrayList<String> getAuthorities() {
+        return mAuthorities;
+    }
+
+    @Override
+    protected void onBindView(View view) {
+        super.onBindView(view);
+        setSummary(getSyncStatusMessage(mStatus));
+        mProviderIconView = (ImageView) view.findViewById(R.id.providerIcon);
+        mProviderIconView.setImageDrawable(mProviderIcon);
+        mSyncStatusIcon = (ImageView) view.findViewById(R.id.syncStatusIcon);
+        mSyncStatusIcon.setImageResource(getSyncStatusIcon(mStatus));
+    }
+
+    public void setProviderIcon(Drawable icon) {
+        mProviderIcon = icon;
+        if (mProviderIconView != null) {
+            mProviderIconView.setImageDrawable(icon);
+        }
+    }
+
+    public void setSyncStatus(int status) {
+        mStatus = status;
+        if (mSyncStatusIcon != null) {
+            mSyncStatusIcon.setImageResource(getSyncStatusIcon(status));
+        }
+        setSummary(getSyncStatusMessage(status));
+    }
+
+    private int getSyncStatusMessage(int status) {
+        int res;
+        switch (status) {
+            case SYNC_ENABLED:
+                res = R.string.sync_enabled;
+                break;
+            case SYNC_DISABLED:
+                res = R.string.sync_disabled;
+                break;
+            case SYNC_ERROR:
+                res = R.string.sync_error;
+                break;
+            default:
+                res = R.string.sync_error;
+                Log.e(TAG, "Unknown sync status: " + status);
+        }
+        return res;
+    }
+
+    private int getSyncStatusIcon(int status) {
+        int res;
+        switch (status) {
+            case SYNC_ENABLED:
+                res = R.drawable.ic_sync_green;
+                break;
+            case SYNC_DISABLED:
+                res = R.drawable.ic_sync_grey;
+                break;
+            case SYNC_ERROR:
+                res = R.drawable.ic_sync_red;
+                break;
+            default:
+                res = R.drawable.ic_sync_red;
+                Log.e(TAG, "Unknown sync status: " + status);
+        }
+        return res;
+    }
+
+    @Override
+    public int compareTo(Preference other) {
+        if (!(other instanceof AccountPreference)) {
+            // Put other preference types above us
+            return 1;
+        }
+        return mAccount.name.compareTo(((AccountPreference) other).mAccount.name);
+    }
+}
diff --git a/src/com/android/settings/AccountPreferenceBase.java b/src/com/android/settings/AccountPreferenceBase.java
new file mode 100644
index 0000000..9b5ab8d
--- /dev/null
+++ b/src/com/android/settings/AccountPreferenceBase.java
@@ -0,0 +1,198 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Map;
+
+import com.google.android.collect.Maps;
+
+import android.accounts.Account;
+import android.accounts.AccountManager;
+import android.accounts.AuthenticatorDescription;
+import android.accounts.OnAccountsUpdateListener;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.content.SyncAdapterType;
+import android.content.SyncStatusObserver;
+import android.content.pm.PackageManager;
+import android.graphics.drawable.Drawable;
+import android.os.Bundle;
+import android.os.Handler;
+import android.preference.PreferenceActivity;
+import android.preference.PreferenceScreen;
+import android.util.Log;
+
+class AccountPreferenceBase extends PreferenceActivity implements OnAccountsUpdateListener {
+    protected static final String TAG = "AccountSettings";
+    public static final String AUTHORITIES_FILTER_KEY = "authorities";
+    private Map<String, AuthenticatorDescription> mTypeToAuthDescription
+            = new HashMap<String, AuthenticatorDescription>();
+    protected AuthenticatorDescription[] mAuthDescs;
+    private final Handler mHandler = new Handler();
+    private Object mStatusChangeListenerHandle;
+    private HashMap<String, ArrayList<String>> mAccountTypeToAuthorities = null;
+
+    @Override
+    public void onCreate(Bundle icicle) {
+        super.onCreate(icicle);
+    }
+
+    /**
+     * Overload to handle account updates.
+     */
+    public void onAccountsUpdated(Account[] accounts) {
+
+    }
+
+    /**
+     * Overload to handle authenticator description updates
+     */
+    protected void onAuthDescriptionsUpdated() {
+
+    }
+
+    /**
+     * Overload to handle sync state updates.
+     */
+    protected void onSyncStateUpdated() {
+
+    }
+
+    @Override
+    protected void onResume() {
+        super.onResume();
+        mStatusChangeListenerHandle = ContentResolver.addStatusChangeListener(
+                ContentResolver.SYNC_OBSERVER_TYPE_ACTIVE
+                | ContentResolver.SYNC_OBSERVER_TYPE_STATUS
+                | ContentResolver.SYNC_OBSERVER_TYPE_SETTINGS,
+                mSyncStatusObserver);
+        onSyncStateUpdated();
+    }
+
+    @Override
+    protected void onPause() {
+        super.onPause();
+        ContentResolver.removeStatusChangeListener(mStatusChangeListenerHandle);
+    }
+
+
+    private SyncStatusObserver mSyncStatusObserver = new SyncStatusObserver() {
+        public void onStatusChanged(int which) {
+            mHandler.post(new Runnable() {
+                public void run() {
+                    onSyncStateUpdated();
+                }
+            });
+        }
+    };
+
+    public ArrayList<String> getAuthoritiesForAccountType(String type) {
+        if (mAccountTypeToAuthorities == null) {
+            mAccountTypeToAuthorities = Maps.newHashMap();
+            SyncAdapterType[] syncAdapters = ContentResolver.getSyncAdapterTypes();
+            for (int i = 0, n = syncAdapters.length; i < n; i++) {
+                final SyncAdapterType sa = syncAdapters[i];
+                ArrayList<String> authorities = mAccountTypeToAuthorities.get(sa.accountType);
+                if (authorities == null) {
+                    authorities = new ArrayList<String>();
+                    mAccountTypeToAuthorities.put(sa.accountType, authorities);
+                }
+                Log.d(TAG, "added authority " + sa.authority + " to accountType " + sa.accountType);
+                authorities.add(sa.authority);
+            }
+        }
+        return mAccountTypeToAuthorities.get(type);
+    }
+
+    /**
+     * Gets an icon associated with a particular account type. If none found, return null.
+     * @param accountType the type of account
+     * @return a drawable for the icon or null if one cannot be found.
+     */
+    protected Drawable getDrawableForType(final String accountType) {
+        Drawable icon = null;
+        if (mTypeToAuthDescription.containsKey(accountType)) {
+            try {
+                AuthenticatorDescription desc = (AuthenticatorDescription)
+                        mTypeToAuthDescription.get(accountType);
+                Context authContext = createPackageContext(desc.packageName, 0);
+                icon = authContext.getResources().getDrawable(desc.iconId);
+            } catch (PackageManager.NameNotFoundException e) {
+                // TODO: place holder icon for missing account icons?
+                Log.w(TAG, "No icon for account type " + accountType);
+            }
+        }
+        return icon;
+    }
+
+    /**
+     * Gets the label associated with a particular account type. If none found, return null.
+     * @param accountType the type of account
+     * @return a CharSequence for the label or null if one cannot be found.
+     */
+    protected CharSequence getLabelForType(final String accountType) {
+        CharSequence label = null;
+        if (mTypeToAuthDescription.containsKey(accountType)) {
+             try {
+                 AuthenticatorDescription desc = (AuthenticatorDescription)
+                         mTypeToAuthDescription.get(accountType);
+                 Context authContext = createPackageContext(desc.packageName, 0);
+                 label = authContext.getResources().getText(desc.labelId);
+             } catch (PackageManager.NameNotFoundException e) {
+                 Log.w(TAG, "No label for account type " + ", type " + accountType);
+             }
+        }
+        return label;
+    }
+
+    /**
+     * Gets the preferences.xml file associated with a particular account type.
+     * @param accountType the type of account
+     * @return a PreferenceScreen inflated from accountPreferenceId.
+     */
+    protected PreferenceScreen addPreferencesForType(final String accountType) {
+        PreferenceScreen prefs = null;
+        if (mTypeToAuthDescription.containsKey(accountType)) {
+            AuthenticatorDescription desc = null;
+            try {
+                desc = (AuthenticatorDescription) mTypeToAuthDescription.get(accountType);
+                if (desc != null && desc.accountPreferencesId != 0) {
+                    Context authContext = createPackageContext(desc.packageName, 0);
+                    prefs = getPreferenceManager().inflateFromResource(authContext,
+                            desc.accountPreferencesId, getPreferenceScreen());
+                }
+            } catch (PackageManager.NameNotFoundException e) {
+                Log.w(TAG, "Couldn't load preferences.xml file from " + desc.packageName);
+            }
+        }
+        return prefs;
+    }
+
+    /**
+     * Updates provider icons. Subclasses should call this in onCreate()
+     * and update any UI that depends on AuthenticatorDescriptions in onAuthDescriptionsUpdated().
+     */
+    protected void updateAuthDescriptions() {
+        mAuthDescs = AccountManager.get(this).getAuthenticatorTypes();
+        for (int i = 0; i < mAuthDescs.length; i++) {
+            mTypeToAuthDescription.put(mAuthDescs[i].type, mAuthDescs[i]);
+        }
+        onAuthDescriptionsUpdated();
+    }
+}
diff --git a/src/com/android/settings/AccountSyncSettings.java b/src/com/android/settings/AccountSyncSettings.java
new file mode 100644
index 0000000..e28b9ab
--- /dev/null
+++ b/src/com/android/settings/AccountSyncSettings.java
@@ -0,0 +1,462 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings;
+
+import com.android.providers.subscribedfeeds.R;
+import com.google.android.collect.Maps;
+import com.google.android.collect.Lists;
+
+import android.accounts.AccountManager;
+import android.accounts.Account;
+import android.accounts.AccountManagerCallback;
+import android.accounts.AccountManagerFuture;
+import android.accounts.AuthenticatorException;
+import android.accounts.OperationCanceledException;
+import android.app.AlertDialog;
+import android.app.Dialog;
+import android.content.ActiveSyncInfo;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.content.SyncStatusInfo;
+import android.content.SyncAdapterType;
+import android.content.pm.ProviderInfo;
+import android.net.ConnectivityManager;
+import android.os.Bundle;
+import android.text.TextUtils;
+import android.text.format.DateFormat;
+import android.preference.Preference;
+import android.preference.PreferenceScreen;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.widget.Button;
+import android.widget.ImageView;
+import android.widget.TextView;
+import android.util.Log;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+
+public class AccountSyncSettings extends AccountPreferenceBase implements OnClickListener {
+    private static final String ACCOUNT_KEY = "account";
+    private static final String TAG = "SyncSettings";
+    private static final String CHANGE_PASSWORD_KEY = "changePassword";
+    private static final int MENU_SYNC_NOW_ID = Menu.FIRST;
+    private static final int MENU_SYNC_CANCEL_ID = Menu.FIRST + 1;
+    private static final int REALLY_REMOVE_DIALOG = 100;
+    private static final int FAILED_REMOVAL_DIALOG = 101;
+    private static final int CANT_DO_ONETIME_SYNC_DIALOG = 102;
+    private TextView mUserId;
+    private TextView mProviderId;
+    private ImageView mProviderIcon;
+    private TextView mErrorInfoView;
+    protected View mRemoveAccountArea;
+    private java.text.DateFormat mDateFormat;
+    private java.text.DateFormat mTimeFormat;
+    private Preference mAuthenticatorPreferences;
+    private Account mAccount;
+    // List of all accounts, updated when accounts are added/removed
+    // We need to re-scan the accounts on sync events, in case sync state changes.
+    private Account[] mAccounts;
+    private Button mRemoveAccountButton;
+    private ArrayList<SyncStateCheckBoxPreference> mCheckBoxes =
+                new ArrayList<SyncStateCheckBoxPreference>();
+    private ArrayList<String> mInvisibleAdapters = Lists.newArrayList();
+
+    public void onClick(View v) {
+        if (v == mRemoveAccountButton) {
+            showDialog(REALLY_REMOVE_DIALOG);
+        }
+    }
+
+    @Override
+    protected Dialog onCreateDialog(final int id) {
+        Dialog dialog = null;
+        if (id == REALLY_REMOVE_DIALOG) {
+            dialog = new AlertDialog.Builder(this)
+                .setTitle(R.string.really_remove_account_title)
+                .setMessage(R.string.really_remove_account_message)
+                .setNegativeButton(android.R.string.cancel, null)
+                .setPositiveButton(R.string.remove_account_label,
+                        new DialogInterface.OnClickListener() {
+                    public void onClick(DialogInterface dialog, int which) {
+                        AccountManager.get(AccountSyncSettings.this).removeAccount(mAccount,
+                                new AccountManagerCallback<Boolean>() {
+                            public void run(AccountManagerFuture<Boolean> future) {
+                                boolean failed = true;
+                                try {
+                                    if (future.getResult() == true) {
+                                        failed = false;
+                                    }
+                                } catch (OperationCanceledException e) {
+                                    // handled below
+                                } catch (IOException e) {
+                                    // handled below
+                                } catch (AuthenticatorException e) {
+                                    // handled below
+                                }
+                                if (failed) {
+                                    showDialog(FAILED_REMOVAL_DIALOG);
+                                } else {
+                                    finish();
+                                }
+                            }
+                        }, null);
+                    }
+                })
+                .create();
+        } else if (id == FAILED_REMOVAL_DIALOG) {
+            dialog = new AlertDialog.Builder(this)
+                .setTitle(R.string.really_remove_account_title)
+                .setPositiveButton(android.R.string.ok, null)
+                .setMessage(R.string.remove_account_failed)
+                .create();
+        } else if (id == CANT_DO_ONETIME_SYNC_DIALOG) {
+            dialog = new AlertDialog.Builder(this)
+                .setTitle(R.string.cant_sync_dialog_title)
+                .setMessage(R.string.cant_sync_dialog_message)
+                .setPositiveButton(android.R.string.ok, null)
+                .create();
+        }
+        return dialog;
+    }
+
+    @Override
+    public void onCreate(Bundle icicle) {
+        super.onCreate(icicle);
+
+        setContentView(R.layout.account_sync_screen);
+        addPreferencesFromResource(R.xml.account_sync_settings);
+
+        mErrorInfoView = (TextView) findViewById(R.id.sync_settings_error_info);
+        mErrorInfoView.setVisibility(View.GONE);
+        mErrorInfoView.setCompoundDrawablesWithIntrinsicBounds(
+                getResources().getDrawable(R.drawable.ic_list_syncerror), null, null, null);
+
+        mUserId = (TextView) findViewById(R.id.user_id);
+        mProviderId = (TextView) findViewById(R.id.provider_id);
+        mProviderIcon = (ImageView) findViewById(R.id.provider_icon);
+        mRemoveAccountArea = (View) findViewById(R.id.remove_account_area);
+        mRemoveAccountButton = (Button) findViewById(R.id.remove_account_button);
+        mRemoveAccountButton.setOnClickListener(this);
+
+
+        mDateFormat = DateFormat.getDateFormat(this);
+        mTimeFormat = DateFormat.getTimeFormat(this);
+
+        mAccount = (Account) getIntent().getParcelableExtra(ACCOUNT_KEY);
+        if (mAccount != null) {
+            Log.v(TAG, "Got account: " + mAccount);
+            mUserId.setText(mAccount.name);
+            mProviderId.setText(mAccount.type);
+        }
+        AccountManager.get(this).addOnAccountsUpdatedListener(this, null, false);
+        updateAuthDescriptions();
+        onAccountsUpdated(AccountManager.get(this).getAccounts());
+    }
+    
+    @Override
+    protected void onDestroy() {
+        super.onDestroy();
+        AccountManager.get(this).removeOnAccountsUpdatedListener(this);
+    }
+
+    private void addSyncStateCheckBox(Account account, String authority) {
+        SyncStateCheckBoxPreference item =
+                new SyncStateCheckBoxPreference(this, account, authority);
+        item.setPersistent(false);
+        final ProviderInfo providerInfo = getPackageManager().resolveContentProvider(authority, 0);
+        CharSequence providerLabel = providerInfo != null
+                ? providerInfo.loadLabel(getPackageManager()) : null;
+        if (TextUtils.isEmpty(providerLabel)) {
+            Log.e(TAG, "Provider needs a label for authority '" + authority + "'");
+            providerLabel = authority;
+        }
+        String title = getString(R.string.sync_item_title, providerLabel);
+        item.setTitle(title);
+        item.setKey(authority);
+        getPreferenceScreen().addPreference(item);
+        mCheckBoxes.add(item);
+    }
+
+    @Override
+    public boolean onCreateOptionsMenu(Menu menu) {
+        super.onCreateOptionsMenu(menu);
+        menu.add(0, MENU_SYNC_NOW_ID, 0, getString(R.string.sync_menu_sync_now))
+                .setIcon(com.android.internal.R.drawable.ic_menu_refresh);
+        menu.add(0, MENU_SYNC_CANCEL_ID, 0, getString(R.string.sync_menu_sync_cancel))
+                .setIcon(android.R.drawable.ic_menu_close_clear_cancel);
+        return true;
+    }
+
+    @Override
+    public boolean onPrepareOptionsMenu(Menu menu) {
+        super.onPrepareOptionsMenu(menu);
+        boolean syncActive = ContentResolver.getActiveSync() != null;
+        menu.findItem(MENU_SYNC_NOW_ID).setVisible(!syncActive);
+        menu.findItem(MENU_SYNC_CANCEL_ID).setVisible(syncActive);
+        return true;
+    }
+
+    @Override
+    public boolean onOptionsItemSelected(MenuItem item) {
+        switch (item.getItemId()) {
+            case MENU_SYNC_NOW_ID:
+                startSyncForEnabledProviders();
+                return true;
+            case MENU_SYNC_CANCEL_ID:
+                cancelSyncForEnabledProviders();
+                return true;
+        }
+        return super.onOptionsItemSelected(item);
+    }
+
+    @Override
+    public boolean onPreferenceTreeClick(PreferenceScreen preferences, Preference preference) {
+        if (preference instanceof SyncStateCheckBoxPreference) {
+            SyncStateCheckBoxPreference syncPref = (SyncStateCheckBoxPreference) preference;
+            String authority = syncPref.getAuthority();
+            Account account = syncPref.getAccount();
+            boolean syncAutomatically = ContentResolver.getSyncAutomatically(account, authority);
+            if (syncPref.isOneTimeSyncMode()) {
+                if (syncAutomatically) {
+                    requestOrCancelSync(account, authority, true);
+                } else {
+                    showDialog(CANT_DO_ONETIME_SYNC_DIALOG);
+                }
+            } else {
+                boolean syncOn = syncPref.isChecked();
+                boolean oldSyncState = syncAutomatically;
+                if (syncOn != oldSyncState) {
+                    // if we're enabling sync, this will request a sync as well
+                    ContentResolver.setSyncAutomatically(account, authority, syncOn);
+                    // if the master sync switch is off, the request above will
+                    // get dropped.  when the user clicks on this toggle,
+                    // we want to force the sync, however.
+                    if (!ContentResolver.getMasterSyncAutomatically() || !syncOn) {
+                        requestOrCancelSync(account, authority, syncOn);
+                    }
+                }
+            }
+            return true;
+        } else {
+            return super.onPreferenceTreeClick(preferences, preference);
+        }
+    }
+
+    private void startSyncForEnabledProviders() {
+        requestOrCancelSyncForEnabledProviders(true /* start them */);
+    }
+
+    private void cancelSyncForEnabledProviders() {
+        requestOrCancelSyncForEnabledProviders(false /* cancel them */);
+    }
+
+    private void requestOrCancelSyncForEnabledProviders(boolean startSync) {
+        // sync everything that the user has enabled
+        int count = getPreferenceScreen().getPreferenceCount();
+        for (int i = 0; i < count; i++) {
+            Preference pref = getPreferenceScreen().getPreference(i);
+            if (! (pref instanceof SyncStateCheckBoxPreference)) {
+                continue;
+            }
+            SyncStateCheckBoxPreference syncPref = (SyncStateCheckBoxPreference) pref;
+            if (!syncPref.isChecked()) {
+                continue;
+            }
+            requestOrCancelSync(syncPref.getAccount(), syncPref.getAuthority(), startSync);
+        }
+        // plus whatever the system needs to sync, e.g., invisible sync adapters
+        if (mAccount != null) {
+            for (String authority : mInvisibleAdapters) {
+                requestOrCancelSync(mAccount, authority, startSync);
+            }
+        }
+    }
+
+    private void requestOrCancelSync(Account account, String authority, boolean flag) {
+        if (flag) {
+            Bundle extras = new Bundle();
+            extras.putBoolean(ContentResolver.SYNC_EXTRAS_MANUAL, true);
+            ContentResolver.requestSync(account, authority, extras);
+        } else {
+            ContentResolver.cancelSync(account, authority);
+        }
+    }
+
+    @Override
+    protected void onSyncStateUpdated() {
+        // iterate over all the preferences, setting the state properly for each
+        Date date = new Date();
+        ActiveSyncInfo activeSyncValues = ContentResolver.getActiveSync();
+        boolean syncIsFailing = false;
+
+        // Refresh the sync status checkboxes - some syncs may have become active.
+        updateAccountCheckboxes(mAccounts);
+
+        for (int i = 0, count = getPreferenceScreen().getPreferenceCount(); i < count; i++) {
+            Preference pref = getPreferenceScreen().getPreference(i);
+            if (! (pref instanceof SyncStateCheckBoxPreference)) {
+                continue;
+            }
+            SyncStateCheckBoxPreference syncPref = (SyncStateCheckBoxPreference) pref;
+
+            String authority = syncPref.getAuthority();
+            Account account = syncPref.getAccount();
+
+            SyncStatusInfo status = ContentResolver.getSyncStatus(account, authority);
+            boolean syncEnabled = ContentResolver.getSyncAutomatically(account, authority);
+            boolean authorityIsPending = status == null ? false : status.pending;
+            boolean initialSync = status == null ? false : status.initialize;
+
+            boolean activelySyncing = activeSyncValues != null
+                    && activeSyncValues.account.equals(account)
+                    && activeSyncValues.authority.equals(authority);
+            boolean lastSyncFailed = status != null
+                    && status.lastFailureTime != 0
+                    && status.getLastFailureMesgAsInt(0)
+                       != ContentResolver.SYNC_ERROR_SYNC_ALREADY_IN_PROGRESS;
+            if (!syncEnabled) lastSyncFailed = false;
+            if (lastSyncFailed && !activelySyncing && !authorityIsPending) {
+                syncIsFailing = true;
+            }
+            if (Log.isLoggable(TAG, Log.DEBUG)) {
+                Log.d(TAG, "Update sync status: " + account + " " + authority +
+                        " active = " + activelySyncing + " pend =" +  authorityIsPending);
+            }
+
+            final long successEndTime = (status == null) ? 0 : status.lastSuccessTime;
+            if (successEndTime != 0) {
+                date.setTime(successEndTime);
+                final String timeString = mDateFormat.format(date) + " "
+                        + mTimeFormat.format(date);
+                syncPref.setSummary(timeString);
+            } else {
+                syncPref.setSummary("");
+            }
+            int syncState = ContentResolver.getIsSyncable(account, authority);
+
+            syncPref.setActive(activelySyncing && (syncState >= 0) &&
+                    !initialSync);
+            syncPref.setPending(authorityIsPending && (syncState >= 0) &&
+                    !initialSync);
+
+            syncPref.setFailed(lastSyncFailed);
+            ConnectivityManager connManager =
+                (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
+            final boolean masterSyncAutomatically = ContentResolver.getMasterSyncAutomatically();
+            final boolean backgroundDataEnabled = connManager.getBackgroundDataSetting();
+            syncPref.setOneTimeSyncMode(!masterSyncAutomatically || !backgroundDataEnabled);
+            syncPref.setChecked(syncEnabled);
+        }
+        mErrorInfoView.setVisibility(syncIsFailing ? View.VISIBLE : View.GONE);
+    }
+
+    @Override
+    public void onAccountsUpdated(Account[] accounts) {
+        super.onAccountsUpdated(accounts);
+        mAccounts = accounts;
+        updateAccountCheckboxes(accounts);
+        onSyncStateUpdated();
+    }
+
+    private void updateAccountCheckboxes(Account[] accounts) {
+        mInvisibleAdapters.clear();
+
+        SyncAdapterType[] syncAdapters = ContentResolver.getSyncAdapterTypes();
+        HashMap<String, ArrayList<String>> accountTypeToAuthorities =
+            Maps.newHashMap();
+        for (int i = 0, n = syncAdapters.length; i < n; i++) {
+            final SyncAdapterType sa = syncAdapters[i];
+            if (sa.isUserVisible()) {
+                ArrayList<String> authorities = accountTypeToAuthorities.get(sa.accountType);
+                if (authorities == null) {
+                    authorities = new ArrayList<String>();
+                    accountTypeToAuthorities.put(sa.accountType, authorities);
+                }
+                if (Log.isLoggable(TAG, Log.DEBUG)) {
+                    Log.d(TAG, "onAccountUpdated: added authority " + sa.authority
+                            + " to accountType " + sa.accountType);
+                }
+                authorities.add(sa.authority);
+            } else {
+                // keep track of invisible sync adapters, so sync now forces
+                // them to sync as well.
+                mInvisibleAdapters.add(sa.authority);
+            }
+        }
+
+        for (int i = 0, n = mCheckBoxes.size(); i < n; i++) {
+            getPreferenceScreen().removePreference(mCheckBoxes.get(i));
+        }
+        mCheckBoxes.clear();
+
+        for (int i = 0, n = accounts.length; i < n; i++) {
+            final Account account = accounts[i];
+            Log.d(TAG, "looking for sync adapters that match account " + account);
+            final ArrayList<String> authorities = accountTypeToAuthorities.get(account.type);
+            if (authorities != null && (mAccount == null || mAccount.equals(account))) {
+                for (int j = 0, m = authorities.size(); j < m; j++) {
+                    final String authority = authorities.get(j);
+                    // We could check services here....
+                    int syncState = ContentResolver.getIsSyncable(account, authority);
+                    if (Log.isLoggable(TAG, Log.DEBUG)) {
+                        Log.d(TAG, "  found authority " + authority + " " + syncState);
+                    }
+                    if (syncState > 0) {
+                        addSyncStateCheckBox(account, authority);
+                    }
+                }
+            }
+        }
+    }
+
+    /**
+     * Updates the titlebar with an icon for the provider type.
+     */
+    @Override
+    protected void onAuthDescriptionsUpdated() {
+        super.onAuthDescriptionsUpdated();
+        getPreferenceScreen().removeAll();
+        mProviderIcon.setImageDrawable(getDrawableForType(mAccount.type));
+        mProviderId.setText(getLabelForType(mAccount.type));
+        PreferenceScreen prefs = addPreferencesForType(mAccount.type);
+        if (prefs != null) {
+            updatePreferenceIntents(prefs);
+        }
+        addPreferencesFromResource(R.xml.account_sync_settings);
+    }
+
+    private void updatePreferenceIntents(PreferenceScreen prefs) {
+        for (int i = 0; i < prefs.getPreferenceCount(); i++) {
+            Intent intent = prefs.getPreference(i).getIntent();
+            if (intent != null) {
+                intent.putExtra(ACCOUNT_KEY, mAccount);
+                // This is somewhat of a hack. Since the preference screen we're accessing comes
+                // from another package, we need to modify the intent to launch it with
+                // FLAG_ACTIVITY_NEW_TASK.
+                // TODO: Do something smarter if we ever have PreferenceScreens of our own.
+                intent.setFlags(intent.getFlags() | Intent.FLAG_ACTIVITY_NEW_TASK);
+            }
+        }
+    }
+}
diff --git a/src/com/android/settings/AccountSyncSettingsInAddAccount.java b/src/com/android/settings/AccountSyncSettingsInAddAccount.java
new file mode 100644
index 0000000..4a23e7c
--- /dev/null
+++ b/src/com/android/settings/AccountSyncSettingsInAddAccount.java
@@ -0,0 +1,33 @@
+package com.android.settings;
+
+import com.android.providers.subscribedfeeds.R;
+
+import android.os.Bundle;
+import android.view.View;
+import android.view.View.OnClickListener;
+
+/**
+ * This is AccountSyncSettings with 'remove account' button always gone and 
+ * a wizard-like button bar to complete the activity.
+ *
+ */
+public class AccountSyncSettingsInAddAccount extends AccountSyncSettings 
+        implements OnClickListener {
+    private View mFinishArea;
+    private View mFinishButton;
+
+    @Override
+    public void onCreate(Bundle icicle) {
+        super.onCreate(icicle);
+        
+        mRemoveAccountArea.setVisibility(View.GONE);
+        mFinishArea = (View) findViewById(R.id.finish_button_area);
+        mFinishArea.setVisibility(View.VISIBLE);
+        mFinishButton = (View) findViewById(R.id.finish_button);
+        mFinishButton.setOnClickListener(this);
+    }
+
+    public void onClick(View v) {
+        finish();
+    }
+}
diff --git a/src/com/android/settings/AddAccountSettings.java b/src/com/android/settings/AddAccountSettings.java
new file mode 100644
index 0000000..564f4c7
--- /dev/null
+++ b/src/com/android/settings/AddAccountSettings.java
@@ -0,0 +1,150 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings;
+
+import com.android.providers.subscribedfeeds.R;
+
+import android.accounts.AccountManager;
+import android.accounts.AuthenticatorException;
+import android.accounts.AccountManagerFuture;
+import android.accounts.OperationCanceledException;
+import android.accounts.AccountManagerCallback;
+import android.graphics.drawable.Drawable;
+import android.os.Bundle;
+import android.preference.Preference;
+import android.preference.PreferenceGroup;
+import android.preference.PreferenceScreen;
+import android.util.Log;
+
+import java.io.IOException;
+import java.util.ArrayList;
+
+public class AddAccountSettings extends AccountPreferenceBase {
+    private static final String TAG = "AddAccount";
+    private String[] mAuthorities;
+    private PreferenceGroup mAddAccountGroup;
+    private ArrayList<ProviderEntry> mProviderList = new ArrayList<ProviderEntry>();;
+
+    private static class ProviderEntry {
+        private final CharSequence name;
+        private final String type;
+        ProviderEntry(CharSequence providerName, String accountType) {
+            name = providerName;
+            type = accountType;
+        }
+    }
+
+    @Override
+    public void onCreate(Bundle icicle) {
+        super.onCreate(icicle);
+
+        setContentView(R.layout.add_account_screen);
+        addPreferencesFromResource(R.xml.add_account_settings);
+        mAuthorities = getIntent().getStringArrayExtra(AUTHORITIES_FILTER_KEY);
+        mAddAccountGroup = getPreferenceScreen();
+        updateAuthDescriptions();
+    }
+
+    @Override
+    protected void onAuthDescriptionsUpdated() {
+        // Create list of providers to show on preference screen
+        for (int i = 0; i < mAuthDescs.length; i++) {
+            String accountType = mAuthDescs[i].type;
+            CharSequence providerName = getLabelForType(accountType);
+
+            // Skip preferences for authorities not specified. If no authorities specified,
+            // then include them all.
+            ArrayList<String> accountAuths = getAuthoritiesForAccountType(accountType);
+            boolean addAccountPref = true;
+            if (mAuthorities != null && mAuthorities.length > 0) {
+                addAccountPref = false;
+                for (int k = 0; k < mAuthorities.length; k++) {
+                    if (accountAuths.contains(mAuthorities[k])) {
+                        addAccountPref = true;
+                        break;
+                    }
+                }
+            }
+            if (addAccountPref) {
+                mProviderList.add(new ProviderEntry(providerName, accountType));
+            } else {
+                Log.v(TAG, "Skipped pref " + providerName + ": has no authority we need");
+            }
+        }
+
+        if (mProviderList.size() == 1) {
+            // If there's only one provider that matches, just run it.
+            addAccount(mProviderList.get(0).type);
+            finish();
+        } else if (mProviderList.size() > 0) {
+            mAddAccountGroup.removeAll();
+            for (ProviderEntry pref : mProviderList) {
+                Drawable drawable = getDrawableForType(pref.type);
+                ProviderPreference p = new ProviderPreference(this, pref.type, drawable, pref.name);
+                mAddAccountGroup.addPreference(p);
+            }
+        } else {
+            String auths = new String();
+            for (String a : mAuthorities) auths += a + " ";
+            Log.w(TAG, "No providers found for authorities: " + auths);
+        }
+    }
+
+    private AccountManagerCallback<Bundle> mCallback = new AccountManagerCallback<Bundle>() {
+        public void run(AccountManagerFuture<Bundle> future) {
+            boolean accountAdded = false;
+            try {
+                Bundle bundle = future.getResult();
+                bundle.keySet();
+                accountAdded = true;
+                Log.d(TAG, "account added: " + bundle);
+            } catch (OperationCanceledException e) {
+                Log.d(TAG, "addAccount was canceled");
+            } catch (IOException e) {
+                Log.d(TAG, "addAccount failed: " + e);
+            } catch (AuthenticatorException e) {
+                Log.d(TAG, "addAccount failed: " + e);
+            } finally {
+                if (mProviderList.size() <= 1 || accountAdded) {
+                    finish();
+                }
+            }
+        }
+    };
+
+    @Override
+    public boolean onPreferenceTreeClick(PreferenceScreen preferences, Preference preference) {
+        if (preference instanceof ProviderPreference) {
+            ProviderPreference pref = (ProviderPreference) preference;
+            Log.v(TAG, "Attempting to add account of type " + pref.getAccountType());
+            addAccount(pref.getAccountType());
+            finish();
+        }
+        return true;
+    }
+
+    private void addAccount(String accountType) {
+        AccountManager.get(this).addAccount(
+                accountType,
+                null, /* authTokenType */
+                null, /* requiredFeatures */
+                null, /* addAccountOptions */
+                this,
+                mCallback,
+                null /* handler */);
+    }
+}
diff --git a/src/com/android/settings/ManageAccountsSettings.java b/src/com/android/settings/ManageAccountsSettings.java
new file mode 100644
index 0000000..7b672f1
--- /dev/null
+++ b/src/com/android/settings/ManageAccountsSettings.java
@@ -0,0 +1,264 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings;
+
+import com.android.providers.subscribedfeeds.R;
+import com.google.android.collect.Maps;
+
+import android.accounts.AccountManager;
+import android.accounts.Account;
+import android.app.AlertDialog;
+import android.app.Dialog;
+import android.content.ActiveSyncInfo;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.content.SyncAdapterType;
+import android.content.SyncStatusInfo;
+import android.graphics.drawable.Drawable;
+import android.net.ConnectivityManager;
+import android.os.Bundle;
+import android.text.format.DateFormat;
+import android.preference.CheckBoxPreference;
+import android.preference.Preference;
+import android.preference.PreferenceCategory;
+import android.preference.PreferenceScreen;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.View;
+import android.widget.Button;
+import android.widget.TextView;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.HashSet;
+
+public class ManageAccountsSettings extends AccountPreferenceBase implements View.OnClickListener {
+    private static final String AUTO_SYNC_CHECKBOX_KEY = "syncAutomaticallyCheckBox";
+    private static final String MANAGE_ACCOUNTS_CATEGORY_KEY = "manageAccountsCategory";
+    private static final String BACKGROUND_DATA_CHECKBOX_KEY = "backgroundDataCheckBox";
+    private static final int DIALOG_DISABLE_BACKGROUND_DATA = 1;
+
+    private CheckBoxPreference mBackgroundDataCheckBox;
+    private PreferenceCategory mManageAccountsCategory;
+    private String[] mAuthorities;
+    private TextView mErrorInfoView;
+    private Button mAddAccountButton;
+    private CheckBoxPreference mAutoSyncCheckbox;
+
+    @Override
+    public void onCreate(Bundle icicle) {
+        super.onCreate(icicle);
+
+        setContentView(R.layout.manage_accounts_screen);
+        addPreferencesFromResource(R.xml.manage_accounts_settings);
+
+        mErrorInfoView = (TextView)findViewById(R.id.sync_settings_error_info);
+        mErrorInfoView.setVisibility(View.GONE);
+        mErrorInfoView.setCompoundDrawablesWithIntrinsicBounds(
+                getResources().getDrawable(R.drawable.ic_list_syncerror), null, null, null);
+
+        mBackgroundDataCheckBox = (CheckBoxPreference) findPreference(BACKGROUND_DATA_CHECKBOX_KEY);
+        mAutoSyncCheckbox = (CheckBoxPreference) findPreference(AUTO_SYNC_CHECKBOX_KEY);
+
+        mManageAccountsCategory =
+                (PreferenceCategory) findPreference(MANAGE_ACCOUNTS_CATEGORY_KEY);
+        mAuthorities = getIntent().getStringArrayExtra(AUTHORITIES_FILTER_KEY);
+        mAddAccountButton = (Button) findViewById(R.id.add_account_button);
+        mAddAccountButton.setOnClickListener(this);
+
+        AccountManager.get(this).addOnAccountsUpdatedListener(this, null, true);
+        updateAuthDescriptions();
+    }
+
+    @Override
+    public void onDestroy() {
+        AccountManager.get(this).removeOnAccountsUpdatedListener(this);
+        super.onDestroy();
+    }
+
+    @Override
+    public boolean onPreferenceTreeClick(PreferenceScreen preferences, Preference preference) {
+        if (preference == mBackgroundDataCheckBox) {
+            ConnectivityManager connManager =
+                    (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
+            boolean oldBackgroundDataSetting = connManager.getBackgroundDataSetting();
+            boolean backgroundDataSetting = mBackgroundDataCheckBox.isChecked();
+            if (oldBackgroundDataSetting != backgroundDataSetting) {
+                if (backgroundDataSetting) {
+                    setBackgroundDataInt(true);
+                    onSyncStateUpdated();
+                } else {
+                    // This will get unchecked only if the user hits "Ok"
+                    mBackgroundDataCheckBox.setChecked(true);
+                    showDialog(DIALOG_DISABLE_BACKGROUND_DATA);
+                }
+            }
+        } else if (preference == mAutoSyncCheckbox) {
+            ContentResolver.setMasterSyncAutomatically(mAutoSyncCheckbox.isChecked());
+            onSyncStateUpdated();
+        } else {
+            return false;
+        }
+        return true;
+    }
+
+    @Override
+    protected Dialog onCreateDialog(int id) {
+        switch (id) {
+            case DIALOG_DISABLE_BACKGROUND_DATA:
+                final CheckBoxPreference pref =
+                    (CheckBoxPreference) findPreference(BACKGROUND_DATA_CHECKBOX_KEY);
+                return new AlertDialog.Builder(this)
+                        .setTitle(R.string.background_data_dialog_title)
+                        .setIcon(android.R.drawable.ic_dialog_alert)
+                        .setMessage(R.string.background_data_dialog_message)
+                        .setPositiveButton(android.R.string.ok,
+                                    new DialogInterface.OnClickListener() {
+                                public void onClick(DialogInterface dialog, int which) {
+                                    setBackgroundDataInt(false);
+                                    pref.setChecked(false);
+                                    onSyncStateUpdated();
+                                }
+                            })
+                        .setNegativeButton(android.R.string.cancel, null)
+                        .create();
+        }
+
+        return null;
+    }
+
+    private void setBackgroundDataInt(boolean enabled) {
+        ConnectivityManager connManager =
+                (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
+        connManager.setBackgroundDataSetting(enabled);
+    }
+
+    @Override
+    protected void onSyncStateUpdated() {
+        // Set background connection state
+        ConnectivityManager connManager =
+                (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
+        boolean backgroundDataSetting = connManager.getBackgroundDataSetting();
+        mBackgroundDataCheckBox.setChecked(backgroundDataSetting);
+        boolean masterSyncAutomatically = ContentResolver.getMasterSyncAutomatically();
+        mAutoSyncCheckbox.setChecked(masterSyncAutomatically);
+
+        // iterate over all the preferences, setting the state properly for each
+        ActiveSyncInfo activeSyncValues = ContentResolver.getActiveSync();
+
+        boolean anySyncFailed = false; // true if sync on any account failed
+
+        // only track userfacing sync adapters when deciding if account is synced or not
+        final SyncAdapterType[] syncAdapters = ContentResolver.getSyncAdapterTypes();
+        HashSet<String> userFacing = new HashSet<String>();
+        for (int k = 0, n = syncAdapters.length; k < n; k++) {
+            final SyncAdapterType sa = syncAdapters[k];
+            if (sa.isUserVisible()) {
+                userFacing.add(sa.authority);
+            }
+        }
+        for (int i = 0, count = mManageAccountsCategory.getPreferenceCount(); i < count; i++) {
+            Preference pref = mManageAccountsCategory.getPreference(i);
+            if (! (pref instanceof AccountPreference)) {
+                continue;
+            }
+
+            AccountPreference accountPref = (AccountPreference) pref;
+            Account account = accountPref.getAccount();
+            int syncCount = 0;
+            boolean syncIsFailing = false;
+            for (String authority : accountPref.getAuthorities()) {
+                SyncStatusInfo status = ContentResolver.getSyncStatus(account, authority);
+                boolean syncEnabled = ContentResolver.getSyncAutomatically(account, authority)
+                        && masterSyncAutomatically
+                        && backgroundDataSetting;
+                boolean authorityIsPending = ContentResolver.isSyncPending(account, authority);
+                boolean activelySyncing = activeSyncValues != null
+                        && activeSyncValues.authority.equals(authority)
+                        && activeSyncValues.account.equals(account);
+                boolean lastSyncFailed = status != null
+                        && syncEnabled
+                        && status.lastFailureTime != 0
+                        && status.getLastFailureMesgAsInt(0)
+                           != ContentResolver.SYNC_ERROR_SYNC_ALREADY_IN_PROGRESS;
+                if (lastSyncFailed && !activelySyncing && !authorityIsPending) {
+                    syncIsFailing = true;
+                    anySyncFailed = true;
+                }
+                syncCount += syncEnabled && userFacing.contains(authority) ? 1 : 0;
+            }
+            int syncStatus = AccountPreference.SYNC_DISABLED;
+            if (syncIsFailing) {
+                syncStatus = AccountPreference.SYNC_ERROR;
+            } else if (syncCount == 0) {
+                syncStatus = AccountPreference.SYNC_DISABLED;
+            } else if (syncCount > 0) {
+                syncStatus = AccountPreference.SYNC_ENABLED;
+            }
+            accountPref.setSyncStatus(syncStatus);
+        }
+
+        mErrorInfoView.setVisibility(anySyncFailed ? View.VISIBLE : View.GONE);
+    }
+
+    public void onAccountsUpdated(Account[] accounts) {
+        mManageAccountsCategory.removeAll();
+        for (int i = 0, n = accounts.length; i < n; i++) {
+            final Account account = accounts[i];
+            final ArrayList<String> auths = getAuthoritiesForAccountType(account.type);
+
+            boolean showAccount = true;
+            if (mAuthorities != null) {
+                showAccount = false;
+                for (String requestedAuthority : mAuthorities) {
+                    if (auths.contains(requestedAuthority)) {
+                        showAccount = true;
+                        break;
+                    }
+                }
+            }
+
+            if (showAccount) {
+                Drawable icon = getDrawableForType(account.type);
+                AccountPreference preference = new AccountPreference(this, account, icon, auths);
+                mManageAccountsCategory.addPreference(preference);
+            }
+        }
+        onSyncStateUpdated();
+    }
+
+    @Override
+    protected void onAuthDescriptionsUpdated() {
+        // Update account icons for all account preference items
+        for (int i = 0; i < mManageAccountsCategory.getPreferenceCount(); i++) {
+            AccountPreference pref = (AccountPreference) mManageAccountsCategory.getPreference(i);
+            pref.setProviderIcon(getDrawableForType(pref.getAccount().type));
+            pref.setSummary(getLabelForType(pref.getAccount().type));
+        }
+    }
+
+    public void onClick(View v) {
+        if (v == mAddAccountButton) {
+            Intent intent = new Intent("android.settings.ADD_ACCOUNT_SETTINGS");
+            intent.putExtra(AUTHORITIES_FILTER_KEY, mAuthorities);
+            startActivity(intent);
+        }
+    }
+}
diff --git a/src/com/android/settings/ProviderPreference.java b/src/com/android/settings/ProviderPreference.java
new file mode 100644
index 0000000..2eb1f5b
--- /dev/null
+++ b/src/com/android/settings/ProviderPreference.java
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings;
+
+import com.android.providers.subscribedfeeds.R;
+
+import android.content.Context;
+import android.graphics.drawable.Drawable;
+import android.preference.Preference;
+import android.view.View;
+import android.widget.ImageView;
+
+/**
+ * ProviderPreference is used to display an image to the left of a provider name.
+ * The preference ultimately calls AccountManager.addAccount() for the account type.
+ */
+public class ProviderPreference extends Preference {
+    private Drawable mProviderIcon;
+    private ImageView mProviderIconView;
+    private CharSequence mProviderName;
+    private String mAccountType;
+
+    public ProviderPreference(Context context, String accountType, Drawable icon, CharSequence providerName) {
+        super(context);
+        mAccountType = accountType;
+        mProviderIcon = icon;
+        mProviderName = providerName;
+        setLayoutResource(R.layout.provider_preference);
+        setPersistent(false);
+        setTitle(mProviderName);
+        //setSummary(mProviderName);
+    }
+
+    @Override
+    protected void onBindView(View view) {
+        super.onBindView(view);
+        mProviderIconView = (ImageView) view.findViewById(R.id.providerIcon);
+        mProviderIconView.setImageDrawable(mProviderIcon);
+        setTitle(mProviderName);
+        //setSummary(mProviderName);
+    }
+
+    public String getAccountType() {
+        return mAccountType;
+    }
+}
diff --git a/src/com/android/settings/SyncActivityTooManyDeletes.java b/src/com/android/settings/SyncActivityTooManyDeletes.java
index 3195ea3..61ac59d 100644
--- a/src/com/android/settings/SyncActivityTooManyDeletes.java
+++ b/src/com/android/settings/SyncActivityTooManyDeletes.java
@@ -18,9 +18,9 @@
 
 import com.android.providers.subscribedfeeds.R;
 
+import android.accounts.Account;
 import android.app.Activity;
 import android.content.ContentResolver;
-import android.net.Uri;
 import android.os.Bundle;
 import android.view.View;
 import android.view.ViewGroup;
@@ -40,7 +40,8 @@
         implements AdapterView.OnItemClickListener {
 
     private long mNumDeletes;
-    private String mAccount;
+    private Account mAccount;
+    private String mAuthority;
     private String mProvider;
 
     @Override
@@ -54,7 +55,8 @@
         }
 
         mNumDeletes = extras.getLong("numDeletes");
-        mAccount = extras.getString("account");
+        mAccount = (Account) extras.getParcelable("account");
+        mAuthority = extras.getString("authority");
         mProvider = extras.getString("provider");
 
         // the order of these must match up with the constants for position used in onItemClick
@@ -78,7 +80,7 @@
         CharSequence tooManyDeletesDescFormat =
                 getResources().getText(R.string.sync_too_many_deletes_desc);
         textView.setText(String.format(tooManyDeletesDescFormat.toString(),
-                mNumDeletes, mProvider, mAccount));
+                mNumDeletes, mProvider, mAccount.name));
 
         final LinearLayout ll = new LinearLayout(this);
         ll.setOrientation(LinearLayout.VERTICAL);
@@ -86,6 +88,22 @@
                 ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT, 0);
         ll.addView(textView, lp);
         ll.addView(listView, lp);
+
+        // TODO: consider displaying the icon of the account type
+//        AuthenticatorDescription[] descs = AccountManager.get(this).getAuthenticatorTypes();
+//        for (AuthenticatorDescription desc : descs) {
+//            if (desc.type.equals(mAccount.type)) {
+//                try {
+//                    final Context authContext = createPackageContext(desc.packageName, 0);
+//                    ImageView imageView = new ImageView(this);
+//                    imageView.setImageDrawable(authContext.getResources().getDrawable(desc.iconId));
+//                    ll.addView(imageView, lp);
+//                } catch (PackageManager.NameNotFoundException e) {
+//                }
+//                break;
+//            }
+//        }
+
         setContentView(ll);
     }
 
@@ -97,24 +115,20 @@
     }
 
     private void startSyncReallyDelete() {
-        Uri uri = Uri.parse("content://" + mProvider);
         Bundle extras = new Bundle();
-        extras.putString(ContentResolver.SYNC_EXTRAS_ACCOUNT, mAccount);
         extras.putBoolean(ContentResolver.SYNC_EXTRAS_OVERRIDE_TOO_MANY_DELETIONS, true);
-        extras.putBoolean(ContentResolver.SYNC_EXTRAS_FORCE, true);
+        extras.putBoolean(ContentResolver.SYNC_EXTRAS_MANUAL, true);
         extras.putBoolean(ContentResolver.SYNC_EXTRAS_EXPEDITED, true);
         extras.putBoolean(ContentResolver.SYNC_EXTRAS_UPLOAD, true);
-        getContentResolver().startSync(uri, extras);
+        ContentResolver.requestSync(mAccount, mAuthority, extras);
     }
 
     private void startSyncUndoDeletes() {
-        Uri uri = Uri.parse("content://" + mProvider);
         Bundle extras = new Bundle();
-        extras.putString(ContentResolver.SYNC_EXTRAS_ACCOUNT, mAccount);
         extras.putBoolean(ContentResolver.SYNC_EXTRAS_DISCARD_LOCAL_DELETIONS, true);
-        extras.putBoolean(ContentResolver.SYNC_EXTRAS_FORCE, true);
+        extras.putBoolean(ContentResolver.SYNC_EXTRAS_MANUAL, true);
         extras.putBoolean(ContentResolver.SYNC_EXTRAS_EXPEDITED, true);
         extras.putBoolean(ContentResolver.SYNC_EXTRAS_UPLOAD, true);
-        getContentResolver().startSync(uri, extras);
+        ContentResolver.requestSync(mAccount, mAuthority, extras);
     }
 }
diff --git a/src/com/android/settings/SyncSettings.java b/src/com/android/settings/SyncSettings.java
deleted file mode 100644
index 483db9b..0000000
--- a/src/com/android/settings/SyncSettings.java
+++ /dev/null
@@ -1,487 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings;
-
-import com.android.providers.subscribedfeeds.R;
-
-import android.app.ActivityThread;
-import android.app.AlertDialog;
-import android.app.Dialog;
-import android.content.ActiveSyncInfo;
-import android.content.ContentResolver;
-import android.content.ContentValues;
-import android.content.Context;
-import android.content.DialogInterface;
-import android.content.IContentService;
-import android.content.ISyncStatusObserver;
-import android.content.Intent;
-import android.content.SyncStatusInfo;
-import android.content.SyncStorageEngine;
-import android.content.pm.ProviderInfo;
-import android.net.ConnectivityManager;
-import android.net.Uri;
-import android.os.Bundle;
-import android.os.Handler;
-import android.os.RemoteException;
-import android.text.format.DateFormat;
-import android.preference.CheckBoxPreference;
-import android.preference.Preference;
-import android.preference.PreferenceActivity;
-import android.preference.PreferenceScreen;
-import android.provider.Gmail;
-import android.provider.SubscribedFeeds;
-import android.text.TextUtils;
-import android.view.Menu;
-import android.view.MenuItem;
-import android.view.View;
-import android.widget.TextView;
-
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-import java.util.Observable;
-import java.util.Observer;
-
-import com.google.android.googlelogin.GoogleLoginServiceConstants;
-import com.google.android.googlelogin.GoogleLoginServiceHelper;
-
-public class SyncSettings extends PreferenceActivity {
-
-    IContentService    mContentService;
-    List<String>       mProviderNames;
-    List<ProviderInfo> mProviderInfos;
-
-    CheckBoxPreference mAutoSyncCheckBox;
-    TextView mErrorInfoView;
-
-    java.text.DateFormat mDateFormat;
-    java.text.DateFormat mTimeFormat;
-
-    final Handler mHandler = new Handler();
-    
-    private static final String SYNC_CONNECTION_SETTING_CHANGED
-        = "com.android.sync.SYNC_CONN_STATUS_CHANGED";
-
-    private static final String BACKGROUND_DATA_SETTING_CHANGED
-        = "com.android.sync.BG_DATA_STATUS_CHANGED";
-
-    private static final String SYNC_KEY_PREFIX = "sync_";
-    private static final String SYNC_CHECKBOX_KEY = "autoSyncCheckBox";
-    private static final String BACKGROUND_DATA_CHECKBOX_KEY = "backgroundDataCheckBox";
-
-    private static final String BACKGROUND_DATA_INTENT_EXTRA_NAME = "value";
-
-    private static final int MENU_SYNC_NOW_ID = Menu.FIRST;
-    private static final int MENU_SYNC_CANCEL_ID = Menu.FIRST + 1;
-    private static final int GET_ACCOUNT_REQUEST = 14376;
-
-    private static final int DIALOG_DISABLE_BACKGROUND_DATA = 1;
-    
-    @Override
-    protected void onCreate(Bundle icicle) {
-        super.onCreate(icicle);
-        
-        mContentService = ContentResolver.getContentService();
-        
-        setContentView(R.layout.sync_settings_list_content);
-        addPreferencesFromResource(R.xml.sync_settings);
-
-        mErrorInfoView = (TextView)findViewById(R.id.sync_settings_error_info);
-        mErrorInfoView.setVisibility(View.GONE);
-        mErrorInfoView.setCompoundDrawablesWithIntrinsicBounds(
-                getResources().getDrawable(R.drawable.ic_list_syncerror), null, null, null);
-
-        mDateFormat = DateFormat.getDateFormat(this);
-        mTimeFormat = DateFormat.getTimeFormat(this);
-
-        mAutoSyncCheckBox = (CheckBoxPreference) findPreference(SYNC_CHECKBOX_KEY);
-        
-        if (icicle == null) checkForAccount(); // First launch only; ignore orientation changes.
-        
-        initProviders();
-        initUI();
-    }
-    
-    private void checkForAccount() {
-        // This will request a Gmail account and if none present will invoke SetupWizard
-        // to login or create a new one. The result is returned through onActivityResult().
-        Bundle bundle = new Bundle();
-        bundle.putCharSequence("optional_message", getText(R.string.sync_plug));
-        GoogleLoginServiceHelper.getCredentials(
-                this, 
-                GET_ACCOUNT_REQUEST, 
-                bundle,
-                GoogleLoginServiceConstants.PREFER_HOSTED, 
-                Gmail.GMAIL_AUTH_SERVICE, 
-                true);
-    }
-    
-    @Override
-    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
-        super.onActivityResult(requestCode, resultCode, data);
-        if (requestCode == GET_ACCOUNT_REQUEST) {
-            if (resultCode != RESULT_OK) {
-                // The user canceled and there are no accounts. Just return to the previous
-                // settings page...
-                finish();
-            }
-        } 
-    }
-
-    @Override
-    public boolean onCreateOptionsMenu(Menu menu) {
-        super.onCreateOptionsMenu(menu);
-        menu.add(0, MENU_SYNC_NOW_ID, 0, getString(R.string.sync_menu_sync_now))
-                .setIcon(com.android.internal.R.drawable.ic_menu_refresh);
-        menu.add(0, MENU_SYNC_CANCEL_ID, 0, getString(R.string.sync_menu_sync_cancel))
-                .setIcon(android.R.drawable.ic_menu_close_clear_cancel);
-        return true;
-    }
-
-    @Override
-    public boolean onPrepareOptionsMenu(Menu menu) {
-        super.onPrepareOptionsMenu(menu);
-        boolean syncActive = false;
-        try {
-            syncActive = mContentService.getActiveSync() != null;
-        } catch (RemoteException e) {
-        }
-        menu.findItem(MENU_SYNC_NOW_ID).setVisible(!syncActive);
-        menu.findItem(MENU_SYNC_CANCEL_ID).setVisible(syncActive);
-        return true;
-    }
-
-    @Override
-    public boolean onOptionsItemSelected(MenuItem item) {
-        switch (item.getItemId()) {
-            case MENU_SYNC_NOW_ID:
-                startSyncForEnabledProviders();
-                return true;
-            case MENU_SYNC_CANCEL_ID:
-                cancelSyncForEnabledProviders();
-                return true;
-        }
-        return super.onOptionsItemSelected(item);
-    }
-
-    private void initProviders() {
-        mProviderNames = new ArrayList<String>();
-        mProviderInfos = new ArrayList<ProviderInfo>();
-
-        try {
-            ActivityThread.getPackageManager().querySyncProviders(mProviderNames,
-                    mProviderInfos);
-        } catch (RemoteException e) {
-        }
-        /*
-        for (int i = 0; i < mProviderNames.size(); i++) {
-            Log.i("SyncProviders", mProviderNames.get(i));
-        }
-        */
-    }
-
-    @Override
-    protected void onResume() {
-        super.onResume();
-        try {
-            mContentService.addStatusChangeListener(
-                    SyncStorageEngine.CHANGE_ACTIVE
-                    | SyncStorageEngine.CHANGE_STATUS
-                    | SyncStorageEngine.CHANGE_SETTINGS,
-                    mSyncStatusObserver);
-        } catch (RemoteException e) {
-        }
-        onSyncStateUpdated();
-    }
-
-    @Override
-    protected void onPause() {
-        super.onPause();
-        try {
-            mContentService.removeStatusChangeListener(mSyncStatusObserver);
-        } catch (RemoteException e) {
-        }
-    }
-
-    @Override
-    protected void onDestroy() {
-        super.onDestroy();
-    }
-
-    private void initUI() {
-        // Set background connection state
-        CheckBoxPreference backgroundData =
-            (CheckBoxPreference) findPreference(BACKGROUND_DATA_CHECKBOX_KEY);
-        ConnectivityManager connManager =
-                (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
-        backgroundData.setChecked(connManager.getBackgroundDataSetting());
-
-        // Set the Auto Sync toggle state
-        CheckBoxPreference autoSync = (CheckBoxPreference) findPreference(SYNC_CHECKBOX_KEY);
-        try {
-            autoSync.setChecked(mContentService.getListenForNetworkTickles());
-        } catch (RemoteException e) {
-        }
-        setOneTimeSyncMode(!autoSync.isChecked());
-
-        // Find individual sync provider's states and initialize the toggles
-        int i;
-        int count = getPreferenceScreen().getPreferenceCount();
-        for (i = 0; i < count; i++) {
-            Preference pref = getPreferenceScreen().getPreference(i);
-            if (pref.hasKey() && pref.getKey().startsWith(SYNC_KEY_PREFIX)) {
-                CheckBoxPreference toggle = (CheckBoxPreference) pref;
-                String providerName = toggle.getKey().substring(SYNC_KEY_PREFIX.length());
-                boolean enabled = false;
-                try {
-                    enabled = mContentService.getSyncProviderAutomatically(providerName);
-                } catch (RemoteException e) {
-                }
-                toggle.setChecked(enabled);
-            }
-        }
-
-    }
-
-    @Override
-    public boolean onPreferenceTreeClick(PreferenceScreen preferences, Preference preference) {
-        CheckBoxPreference togglePreference = (CheckBoxPreference) preference;
-        String key = preference.getKey();
-        if (key.equals(BACKGROUND_DATA_CHECKBOX_KEY)) {
-            ConnectivityManager connManager =
-                    (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
-            boolean oldBackgroundDataSetting = connManager.getBackgroundDataSetting();
-            boolean backgroundDataSetting = togglePreference.isChecked();
-            if (oldBackgroundDataSetting != backgroundDataSetting) {
-                if (backgroundDataSetting) {
-                    setBackgroundDataInt(true);
-                } else {
-                    confirmDisablingOfBackgroundData(togglePreference);
-                }
-            }
-        } else if (key.equals(SYNC_CHECKBOX_KEY)) {
-            boolean oldListenForTickles = false;
-            try {
-                oldListenForTickles = mContentService.getListenForNetworkTickles();
-            } catch (RemoteException e) {
-            }
-            boolean listenForTickles = togglePreference.isChecked();
-            if (oldListenForTickles != listenForTickles) {
-                try {
-                    mContentService.setListenForNetworkTickles(listenForTickles);
-                } catch (RemoteException e) {
-                }
-                Intent intent = new Intent();
-                intent.setAction(SYNC_CONNECTION_SETTING_CHANGED);
-                sendBroadcast(intent);
-                if (listenForTickles) {
-                    startSyncForEnabledProviders();
-                }
-            }
-            if (!listenForTickles) {
-                cancelSyncForEnabledProviders();
-            }
-            setOneTimeSyncMode(!listenForTickles);
-        } else if (key.startsWith(SYNC_KEY_PREFIX)) {
-            SyncStateCheckBoxPreference syncPref = (SyncStateCheckBoxPreference) preference;
-            String providerName = key.substring(SYNC_KEY_PREFIX.length());
-            if (syncPref.isOneTimeSyncMode()) {
-                startSync(providerName);
-            } else {
-                boolean syncOn = togglePreference.isChecked();
-                boolean oldSyncState = false;
-                try {
-                    oldSyncState = mContentService.getSyncProviderAutomatically(providerName);
-                } catch (RemoteException e) {
-                }
-                if (syncOn != oldSyncState) {
-                    try {
-                        mContentService.setSyncProviderAutomatically(providerName, syncOn);
-                    } catch (RemoteException e) {
-                    }
-                    if (syncOn) {
-                        startSync(providerName);
-                    } else {
-                        cancelSync(providerName);
-                    }
-                }
-            }
-        } else {
-            return false;
-        }
-        return true;
-    }
-
-    private void setOneTimeSyncMode(boolean oneTimeSyncMode) {
-        int count = getPreferenceScreen().getPreferenceCount();
-        for (int i = 0; i < count; i++) {
-            Preference pref = getPreferenceScreen().getPreference(i);
-            if (pref.hasKey() && pref.getKey().startsWith(SYNC_KEY_PREFIX)) {
-                SyncStateCheckBoxPreference syncPref = (SyncStateCheckBoxPreference) pref;
-                syncPref.setOneTimeSyncMode(oneTimeSyncMode);
-            }
-        }
-    }
-    
-    private void confirmDisablingOfBackgroundData(final CheckBoxPreference
-            backgroundDataPreference) {
-        // This will get unchecked only if the user hits "Ok"
-        backgroundDataPreference.setChecked(true);
-        showDialog(DIALOG_DISABLE_BACKGROUND_DATA);        
-    }
-
-    @Override
-    protected Dialog onCreateDialog(int id) {
-        switch (id) {
-            case DIALOG_DISABLE_BACKGROUND_DATA:
-                final CheckBoxPreference pref =
-                    (CheckBoxPreference) findPreference(BACKGROUND_DATA_CHECKBOX_KEY); 
-                return new AlertDialog.Builder(this)
-                        .setTitle(R.string.background_data_dialog_title)
-                        .setIcon(android.R.drawable.ic_dialog_alert)
-                        .setMessage(R.string.background_data_dialog_message)
-                        .setPositiveButton(android.R.string.ok,
-                                    new DialogInterface.OnClickListener() {
-                                public void onClick(DialogInterface dialog, int which) {
-                                    setBackgroundDataInt(false);
-                                    pref.setChecked(false);
-                                }
-                            })
-                        .setNegativeButton(android.R.string.cancel, null)
-                        .create();
-        }
-        
-        return null;
-    }
-
-    private void setBackgroundDataInt(boolean enabled) {
-        ConnectivityManager connManager =
-                (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
-        connManager.setBackgroundDataSetting(enabled);
-    }
-    
-    private void startSyncForEnabledProviders() {
-        cancelOrStartSyncForEnabledProviders(true /* start them */);
-    }
-
-    private void cancelSyncForEnabledProviders() {
-        cancelOrStartSyncForEnabledProviders(false /* cancel them */);
-    }
-
-    private void cancelOrStartSyncForEnabledProviders(boolean startSync) {
-        int count = getPreferenceScreen().getPreferenceCount();
-        for (int i = 0; i < count; i++) {
-            Preference pref = getPreferenceScreen().getPreference(i);
-            if (pref.hasKey() && pref.getKey().startsWith(SYNC_KEY_PREFIX)) {
-                CheckBoxPreference toggle = (CheckBoxPreference) pref;
-                if (!toggle.isChecked()) {
-                    continue;
-                }
-                final String authority = toggle.getKey().substring(SYNC_KEY_PREFIX.length());
-                if (startSync) {
-                    startSync(authority);
-                } else {
-                    cancelSync(authority);
-                }
-            }
-        }
-
-        // treat SubscribedFeeds as an enabled provider
-        final String authority = SubscribedFeeds.Feeds.CONTENT_URI.getAuthority();
-        if (startSync) {
-            startSync(authority);
-        } else {
-            cancelSync(authority);
-        }
-    }
-
-    private void startSync(String providerName) {
-        Uri uriToSync = (providerName != null) ? Uri.parse("content://" + providerName) : null;
-        Bundle extras = new Bundle();
-        extras.putBoolean(ContentResolver.SYNC_EXTRAS_FORCE, true);
-        getContentResolver().startSync(uriToSync, extras);
-    }
-
-    private void cancelSync(String authority) {
-        getContentResolver().cancelSync(Uri.parse("content://" + authority));
-    }
-
-    private ISyncStatusObserver mSyncStatusObserver = new ISyncStatusObserver.Stub() {
-        public void onStatusChanged(int which) throws RemoteException {
-            mHandler.post(new Runnable() {
-                public void run() {
-                    onSyncStateUpdated();
-                }
-            });
-        }
-    };
-
-    private void onSyncStateUpdated() {
-        // iterate over all the preferences, setting the state properly for each
-        Date date = new Date();
-        ActiveSyncInfo activeSyncValues = null;
-        try {
-            activeSyncValues = mContentService.getActiveSync();
-        } catch (RemoteException e) {
-        }
-        boolean syncIsFailing = false;
-        int count = getPreferenceScreen().getPreferenceCount();
-        for (int i = 0; i < count; i++) {
-            Preference pref = getPreferenceScreen().getPreference(i);
-            final String prefKey = pref.getKey();
-            if (!TextUtils.isEmpty(prefKey) && prefKey.startsWith(SYNC_KEY_PREFIX)) {
-                String authority = prefKey.substring(SYNC_KEY_PREFIX.length());
-                SyncStateCheckBoxPreference toggle = (SyncStateCheckBoxPreference)pref;
-                SyncStatusInfo status = null;
-                boolean syncEnabled = false;
-                boolean authorityIsPending = false;
-                try {
-                    status = mContentService.getStatusByAuthority(authority);
-                    syncEnabled = mContentService.getSyncProviderAutomatically(authority);
-                    authorityIsPending = mContentService.isAuthorityPending(null, authority);
-                } catch (RemoteException e) {
-                }
-
-                boolean activelySyncing = activeSyncValues != null
-                        && activeSyncValues.authority.equals(authority);
-                boolean lastSyncFailed = status != null
-                        && status.lastFailureTime != 0
-                        && status.getLastFailureMesgAsInt(0)
-                           != SyncStorageEngine.ERROR_SYNC_ALREADY_IN_PROGRESS;
-                if (!syncEnabled) lastSyncFailed = false;
-                if (lastSyncFailed && !activelySyncing && !authorityIsPending) {
-                    syncIsFailing = true;
-                }
-                final long successEndTime =
-                    status == null ? 0 : status.lastSuccessTime;
-                if (successEndTime != 0) {
-                    date.setTime(successEndTime);
-                    final String timeString = mDateFormat.format(date) + " "
-                            + mTimeFormat.format(date);
-                    toggle.setSummary(timeString);
-                } else {
-                    toggle.setSummary("");
-                }
-                toggle.setActive(activelySyncing);
-                toggle.setPending(authorityIsPending);
-                toggle.setFailed(lastSyncFailed);
-            }
-        }
-        mErrorInfoView.setVisibility(syncIsFailing ? View.VISIBLE : View.GONE);
-    }
-}
diff --git a/src/com/android/settings/SyncStateCheckBoxPreference.java b/src/com/android/settings/SyncStateCheckBoxPreference.java
index 948287b..287979e 100644
--- a/src/com/android/settings/SyncStateCheckBoxPreference.java
+++ b/src/com/android/settings/SyncStateCheckBoxPreference.java
@@ -25,12 +25,15 @@
 import android.view.View;
 import android.widget.ImageView;
 import android.widget.TextView;
+import android.accounts.Account;
 
 public class SyncStateCheckBoxPreference extends CheckBoxPreference {
 
     private boolean mIsActive = false;
     private boolean mIsPending = false;
     private boolean mFailed = false;
+    private Account mAccount;
+    private String mAuthority;
 
     /**
      * A mode for this preference where clicking does a one-time sync instead of
@@ -41,6 +44,15 @@
     public SyncStateCheckBoxPreference(Context context, AttributeSet attrs) {
         super(context, attrs);
         setWidgetLayoutResource(R.layout.preference_widget_sync_toggle);
+        mAccount = null;
+        mAuthority = null;
+    }
+
+    public SyncStateCheckBoxPreference(Context context, Account account, String authority) {
+        super(context, null);
+        mAccount = account;
+        mAuthority = authority;
+        setWidgetLayoutResource(R.layout.preference_widget_sync_toggle);
     }
 
     @Override
@@ -51,11 +63,15 @@
         View syncFailedView = view.findViewById(R.id.sync_failed);
 
         syncActiveView.setVisibility(mIsActive ? View.VISIBLE : View.GONE);
-        AnimationDrawable anim = (AnimationDrawable) syncActiveView.getDrawable();
+        final AnimationDrawable anim = (AnimationDrawable) syncActiveView.getDrawable();
         boolean showError;
         boolean showPending;
         if (mIsActive) {
-            anim.start();
+            syncActiveView.post(new Runnable() {
+                public void run() {
+                    anim.start();
+                }
+            });
             showPending = false;
             showError = false;
         } else {
@@ -138,5 +154,12 @@
             super.onClick();
         }            
     }
-    
+
+    public Account getAccount() {
+        return mAccount;
+    }
+
+    public String getAuthority() {
+        return mAuthority;
+    }
 }