Fix QuickContact header color on avatar removal
am: b120cd3c62

Change-Id: I16bb84e63f545db7cd630a99ebb7e04a613443cb
diff --git a/Android.mk b/Android.mk
index a03d671..c42434f 100644
--- a/Android.mk
+++ b/Android.mk
@@ -12,7 +12,7 @@
 endif
 
 src_dirs := src src-bind $(phone_common_dir)/src
-res_dirs := res res-aosp res-icons $(phone_common_dir)/res
+res_dirs := res res-aosp res-bind res-icons $(phone_common_dir)/res
 asset_dirs := assets
 
 LOCAL_SRC_FILES := $(call all-java-files-under, $(src_dirs))
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 3506ded..6c97227 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -16,8 +16,8 @@
 
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="com.android.contacts"
-    android:versionCode="10608"
-    android:versionName="1.6.8">
+    android:versionCode="10605"
+    android:versionName="1.6.5">
 
     <uses-sdk android:minSdkVersion="21" android:targetSdkVersion="25" />
 
diff --git a/res-bind/layout/navigation_view.xml b/res-bind/layout/navigation_view.xml
new file mode 100644
index 0000000..d553768
--- /dev/null
+++ b/res-bind/layout/navigation_view.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 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.
+-->
+<android.support.design.widget.NavigationView
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:id="@+id/nav_view"
+    android:theme="@style/NavigationDrawerMenuItemTextAppearance"
+    android:layout_width="wrap_content"
+    android:layout_height="match_parent"
+    android:layout_gravity="start"
+    android:fitsSystemWindows="true"
+    android:background="@android:color/white"
+    app:itemBackground="@drawable/drawer_item_background"
+    app:headerLayout="@layout/nav_header_main"
+    app:menu="@menu/activity_main_drawer"/>
diff --git a/res/layout/contacts_drawer_activity.xml b/res/layout/contacts_drawer_activity.xml
index e560494..904a46b 100644
--- a/res/layout/contacts_drawer_activity.xml
+++ b/res/layout/contacts_drawer_activity.xml
@@ -17,7 +17,6 @@
 
 <android.support.v4.widget.DrawerLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto"
     xmlns:tools="http://schemas.android.com/tools"
     android:id="@+id/drawer_layout"
     android:layout_width="match_parent"
@@ -26,40 +25,9 @@
     tools:openDrawer="start">
 
     <!-- To prevent hamburger menu from getting the initial focus. -->
-    <View
-        android:focusable="true"
-        android:focusableInTouchMode="true"
-        android:layout_width="1px"
-        android:layout_height="1px" >
-        <requestFocus/>
-    </View>
+    <include layout="@layout/dummy_view_for_initial_focus"/>
 
-    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-        android:id="@+id/fragment_container"
-        android:orientation="vertical"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent">
+    <include layout="@layout/contacts_main_content"/>
 
-        <include
-            layout="@layout/people_activity_toolbar"
-            android:id="@+id/toolbar_parent" />
-
-        <FrameLayout
-            android:id="@+id/content_frame"
-            android:layout_width="match_parent"
-            android:layout_height="fill_parent"
-            android:background="?android:attr/windowBackground" />
-    </LinearLayout>
-
-    <android.support.design.widget.NavigationView
-        android:id="@+id/nav_view"
-        android:theme="@style/NavigationDrawerMenuItemTextAppearance"
-        android:layout_width="wrap_content"
-        android:layout_height="match_parent"
-        android:layout_gravity="start"
-        android:fitsSystemWindows="true"
-        app:itemBackground="@drawable/drawer_item_background"
-        app:headerLayout="@layout/nav_header_main"
-        app:menu="@menu/activity_main_drawer"/>
-
+    <include layout="@layout/navigation_view"/>
 </android.support.v4.widget.DrawerLayout>
\ No newline at end of file
diff --git a/res/layout/contacts_main_content.xml b/res/layout/contacts_main_content.xml
new file mode 100644
index 0000000..748bdbb
--- /dev/null
+++ b/res/layout/contacts_main_content.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+     Copyright (C) 2016 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:id="@+id/fragment_container"
+    android:orientation="vertical"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
+
+    <include
+        layout="@layout/people_activity_toolbar"
+        android:id="@+id/toolbar_parent" />
+
+    <FrameLayout
+        android:id="@+id/content_frame"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:background="?android:attr/windowBackground" />
+</LinearLayout>
\ No newline at end of file
diff --git a/res/layout/dummy_view_for_initial_focus.xml b/res/layout/dummy_view_for_initial_focus.xml
new file mode 100644
index 0000000..3876e98
--- /dev/null
+++ b/res/layout/dummy_view_for_initial_focus.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 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.
+-->
+
+<View
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:focusable="true"
+    android:focusableInTouchMode="true"
+    android:layout_width="1px"
+    android:layout_height="1px" >
+    <requestFocus/>
+</View>
\ No newline at end of file
diff --git a/res/menu/view_group.xml b/res/menu/view_group.xml
index 1bbdd86..dcabb13 100644
--- a/res/menu/view_group.xml
+++ b/res/menu/view_group.xml
@@ -24,11 +24,6 @@
         contacts:showAsAction="ifRoom" />
 
     <item
-        android:id="@+id/menu_edit_group"
-        android:icon="@drawable/ic_create_24dp"
-        android:title="@string/menu_editGroup" />
-
-    <item
         android:id="@+id/menu_multi_send_email"
         android:title="@string/menu_sendEmailOption" />
 
@@ -37,6 +32,11 @@
         android:title="@string/menu_sendMessageOption" />
 
     <item
+        android:id="@+id/menu_edit_group"
+        android:icon="@drawable/ic_create_24dp"
+        android:title="@string/menu_editGroup" />
+
+    <item
         android:id="@+id/menu_rename_group"
         android:title="@string/menu_renameGroup"/>
 
diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml
index bc1b641..cfc0cc2 100644
--- a/res/values-af/strings.xml
+++ b/res/values-af/strings.xml
@@ -621,6 +621,7 @@
       <item quantity="one">1 SIM-kontak ingevoer</item>
     </plurals>
     <string name="sim_import_failed_toast" msgid="5559267299793622705">"Kon nie SIM-kontakte invoer nie"</string>
+    <string name="connection_failed" msgid="7558253972301525402">"Kon nie aanmeld nie"</string>
     <string name="sim_import_dialog_title" msgid="6699935401502172530">"Kies kontakte om in te voer"</string>
     <string name="sim_import_cancel_content_description" msgid="2388362519166414488">"Kanselleer invoer"</string>
     <string name="auto_sync_off" msgid="2180147284456026587">"Outo-sinkronisering is af. Tik om aan te skakel."</string>
diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml
index 472b1af..0abd5de 100644
--- a/res/values-am/strings.xml
+++ b/res/values-am/strings.xml
@@ -621,6 +621,7 @@
       <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> የሲም እውቂያዎች መጥተዋል</item>
     </plurals>
     <string name="sim_import_failed_toast" msgid="5559267299793622705">"የሲም እውቂያዎችን ማምጣት አልተሳካም"</string>
+    <string name="connection_failed" msgid="7558253972301525402">"መግባት አልተሳካም"</string>
     <string name="sim_import_dialog_title" msgid="6699935401502172530">"ለማምጣት ዕውቂያዎችን ምረጥ"</string>
     <string name="sim_import_cancel_content_description" msgid="2388362519166414488">"ማምጣት ይቅር"</string>
     <string name="auto_sync_off" msgid="2180147284456026587">"ራስሰር-አስምር ጠፍቷል። ለማብራት መታ ያድርጉ።"</string>
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index 3e14ef8..1714754 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -673,6 +673,7 @@
       <item quantity="one">‏تم استيراد جهة اتصال واحدة من شريحة SIM</item>
     </plurals>
     <string name="sim_import_failed_toast" msgid="5559267299793622705">"‏فشل استيراد جهات الاتصال من شريحة SIM"</string>
+    <string name="connection_failed" msgid="7558253972301525402">"أخفق تسجيل الدخول"</string>
     <string name="sim_import_dialog_title" msgid="6699935401502172530">"حدد جهات اتصال لاستيرادها"</string>
     <string name="sim_import_cancel_content_description" msgid="2388362519166414488">"إلغاء الاستيراد"</string>
     <string name="auto_sync_off" msgid="2180147284456026587">"المزامنة التلقائية متوقفة. انقر للتشغيل."</string>
diff --git a/res/values-az-rAZ/strings.xml b/res/values-az-rAZ/strings.xml
index d7d4e47..b1c27e7 100644
--- a/res/values-az-rAZ/strings.xml
+++ b/res/values-az-rAZ/strings.xml
@@ -621,6 +621,7 @@
       <item quantity="one">1 SIM kontakt</item>
     </plurals>
     <string name="sim_import_failed_toast" msgid="5559267299793622705">"SIM kontaktları import etmək olmadı"</string>
+    <string name="connection_failed" msgid="7558253972301525402">"Hesaba daxil olmaq olmadı"</string>
     <string name="sim_import_dialog_title" msgid="6699935401502172530">"İmport üçün kontaktlar seçin"</string>
     <string name="sim_import_cancel_content_description" msgid="2388362519166414488">"İmportu ləğv edin"</string>
     <string name="auto_sync_off" msgid="2180147284456026587">"Avto-sinxronizasiya deaktivdir. Aktiv etmək üçün toxunun."</string>
diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml
index 7c2cfac..b7ccb98 100644
--- a/res/values-bg/strings.xml
+++ b/res/values-bg/strings.xml
@@ -621,6 +621,7 @@
       <item quantity="one">1 контакт в SIM картата бе импортиран</item>
     </plurals>
     <string name="sim_import_failed_toast" msgid="5559267299793622705">"Импортирането на контактите в SIM картата не бе успешно"</string>
+    <string name="connection_failed" msgid="7558253972301525402">"Влизането в профила не бе възможно"</string>
     <string name="sim_import_dialog_title" msgid="6699935401502172530">"Избиране на контакти за импортиране"</string>
     <string name="sim_import_cancel_content_description" msgid="2388362519166414488">"Анулиране на импортирането"</string>
     <string name="auto_sync_off" msgid="2180147284456026587">"Автоматичното синхронизиране е изключено. Докоснете, за да включите."</string>
diff --git a/res/values-bn-rBD/strings.xml b/res/values-bn-rBD/strings.xml
index e3b677b..16cad85 100644
--- a/res/values-bn-rBD/strings.xml
+++ b/res/values-bn-rBD/strings.xml
@@ -621,6 +621,7 @@
       <item quantity="other">SIM কার্ডে থাকা <xliff:g id="COUNT">%d</xliff:g>টি পরিচিতি আমদানি করা হয়েছে</item>
     </plurals>
     <string name="sim_import_failed_toast" msgid="5559267299793622705">"SIM কার্ডে থাকা পরিচিতিগুলি আমদানি করা গেল না"</string>
+    <string name="connection_failed" msgid="7558253972301525402">"সাইন ইন করা গেল না"</string>
     <string name="sim_import_dialog_title" msgid="6699935401502172530">"আমদানি করতে পরিচিতিগুলি নির্বাচন করুন"</string>
     <string name="sim_import_cancel_content_description" msgid="2388362519166414488">"আমদানি বাতিল করুন"</string>
     <string name="auto_sync_off" msgid="2180147284456026587">"স্বতঃ-সিঙ্ক বন্ধ আছে৷ চালু করতে আলতো চাপ দিন৷"</string>
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
index 4c05c01..66eca34 100644
--- a/res/values-ca/strings.xml
+++ b/res/values-ca/strings.xml
@@ -621,6 +621,7 @@
       <item quantity="one">S\'ha importat 1 contacte de la SIM</item>
     </plurals>
     <string name="sim_import_failed_toast" msgid="5559267299793622705">"No s\'han pogut importar els contactes de la SIM"</string>
+    <string name="connection_failed" msgid="7558253972301525402">"No s\'ha pogut iniciar la sessió"</string>
     <string name="sim_import_dialog_title" msgid="6699935401502172530">"Selecciona contactes per importar-los"</string>
     <string name="sim_import_cancel_content_description" msgid="2388362519166414488">"Cancel·la la importació"</string>
     <string name="auto_sync_off" msgid="2180147284456026587">"La sincronització automàtica està desactivada. Toca per activar-la."</string>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index 0fb7815..2546e8e 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -647,6 +647,7 @@
       <item quantity="one">Byl importován 1 kontakt ze SIM karty</item>
     </plurals>
     <string name="sim_import_failed_toast" msgid="5559267299793622705">"Kontakty ze SIM karty se nepodařilo importovat"</string>
+    <string name="connection_failed" msgid="7558253972301525402">"Přihlášení se nezdařilo"</string>
     <string name="sim_import_dialog_title" msgid="6699935401502172530">"Vyberte kontakty na import"</string>
     <string name="sim_import_cancel_content_description" msgid="2388362519166414488">"Zrušit import"</string>
     <string name="auto_sync_off" msgid="2180147284456026587">"Automatická synchronizace je vypnutá. Zapnete ji klepnutím."</string>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index 990457b..85afb80 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -621,6 +621,7 @@
       <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> kontaktpersoner på SIM-kortet blev importeret</item>
     </plurals>
     <string name="sim_import_failed_toast" msgid="5559267299793622705">"Kontaktpersonerne på SIM-kortet kan ikke importeres"</string>
+    <string name="connection_failed" msgid="7558253972301525402">"Der kan ikke logges ind"</string>
     <string name="sim_import_dialog_title" msgid="6699935401502172530">"Vælg kontakter, der skal importeres"</string>
     <string name="sim_import_cancel_content_description" msgid="2388362519166414488">"Annuller import"</string>
     <string name="auto_sync_off" msgid="2180147284456026587">"Automatisk synkronisering er slået fra. Tryk for at slå funktionen til."</string>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index 3d05174..b2e0bfb 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -621,6 +621,7 @@
       <item quantity="one">1 SIM-Kontakt importiert</item>
     </plurals>
     <string name="sim_import_failed_toast" msgid="5559267299793622705">"Fehler beim Importieren von SIM-Kontakten"</string>
+    <string name="connection_failed" msgid="7558253972301525402">"Fehler bei der Anmeldung"</string>
     <string name="sim_import_dialog_title" msgid="6699935401502172530">"Kontakte für Import auswählen"</string>
     <string name="sim_import_cancel_content_description" msgid="2388362519166414488">"Import abbrechen"</string>
     <string name="auto_sync_off" msgid="2180147284456026587">"Die automatische Synchronisierung ist deaktiviert. Zum Aktivieren hier tippen."</string>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index fd8450e..e488c3a 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -621,6 +621,7 @@
       <item quantity="one">Έγινε εισαγωγή 1 επαφής από τη SIM</item>
     </plurals>
     <string name="sim_import_failed_toast" msgid="5559267299793622705">"Απέτυχε η εισαγωγή των επαφών από τη SIM"</string>
+    <string name="connection_failed" msgid="7558253972301525402">"Αποτυχία σύνδεσης"</string>
     <string name="sim_import_dialog_title" msgid="6699935401502172530">"Επιλέξτε επαφές για εισαγωγή"</string>
     <string name="sim_import_cancel_content_description" msgid="2388362519166414488">"Ακύρωση εισαγωγής"</string>
     <string name="auto_sync_off" msgid="2180147284456026587">"Ο αυτόματος συγχρονισμός είναι ανενεργός. Πατήστε για να τον ενεργοποιήσετε."</string>
diff --git a/res/values-en-rAU/strings.xml b/res/values-en-rAU/strings.xml
index 1b559d7..3716130 100644
--- a/res/values-en-rAU/strings.xml
+++ b/res/values-en-rAU/strings.xml
@@ -621,6 +621,7 @@
       <item quantity="one">1 SIM contact imported</item>
     </plurals>
     <string name="sim_import_failed_toast" msgid="5559267299793622705">"Failed to import SIM contacts"</string>
+    <string name="connection_failed" msgid="7558253972301525402">"Failed to sign in"</string>
     <string name="sim_import_dialog_title" msgid="6699935401502172530">"Select contacts to import"</string>
     <string name="sim_import_cancel_content_description" msgid="2388362519166414488">"Cancel import"</string>
     <string name="auto_sync_off" msgid="2180147284456026587">"Auto-sync is off. Tap to turn on."</string>
diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml
index 1b559d7..3716130 100644
--- a/res/values-en-rGB/strings.xml
+++ b/res/values-en-rGB/strings.xml
@@ -621,6 +621,7 @@
       <item quantity="one">1 SIM contact imported</item>
     </plurals>
     <string name="sim_import_failed_toast" msgid="5559267299793622705">"Failed to import SIM contacts"</string>
+    <string name="connection_failed" msgid="7558253972301525402">"Failed to sign in"</string>
     <string name="sim_import_dialog_title" msgid="6699935401502172530">"Select contacts to import"</string>
     <string name="sim_import_cancel_content_description" msgid="2388362519166414488">"Cancel import"</string>
     <string name="auto_sync_off" msgid="2180147284456026587">"Auto-sync is off. Tap to turn on."</string>
diff --git a/res/values-en-rIN/strings.xml b/res/values-en-rIN/strings.xml
index 1b559d7..3716130 100644
--- a/res/values-en-rIN/strings.xml
+++ b/res/values-en-rIN/strings.xml
@@ -621,6 +621,7 @@
       <item quantity="one">1 SIM contact imported</item>
     </plurals>
     <string name="sim_import_failed_toast" msgid="5559267299793622705">"Failed to import SIM contacts"</string>
+    <string name="connection_failed" msgid="7558253972301525402">"Failed to sign in"</string>
     <string name="sim_import_dialog_title" msgid="6699935401502172530">"Select contacts to import"</string>
     <string name="sim_import_cancel_content_description" msgid="2388362519166414488">"Cancel import"</string>
     <string name="auto_sync_off" msgid="2180147284456026587">"Auto-sync is off. Tap to turn on."</string>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index 9834f5a..5933839 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -621,6 +621,7 @@
       <item quantity="one">Se importó 1 contacto de la SIM</item>
     </plurals>
     <string name="sim_import_failed_toast" msgid="5559267299793622705">"No se pudieron importar los contactos de la SIM"</string>
+    <string name="connection_failed" msgid="7558253972301525402">"No se pudo acceder"</string>
     <string name="sim_import_dialog_title" msgid="6699935401502172530">"Seleccionar contactos para importar"</string>
     <string name="sim_import_cancel_content_description" msgid="2388362519166414488">"Cancelar importación"</string>
     <string name="auto_sync_off" msgid="2180147284456026587">"La sincronización automática está desactivada. Presiona para activarla."</string>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index 6164823..70533d1 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -621,6 +621,7 @@
       <item quantity="one">Se ha importado 1 contacto de la SIM</item>
     </plurals>
     <string name="sim_import_failed_toast" msgid="5559267299793622705">"No se han podido importar los contactos de la SIM"</string>
+    <string name="connection_failed" msgid="7558253972301525402">"No se ha podido iniciar sesión"</string>
     <string name="sim_import_dialog_title" msgid="6699935401502172530">"Seleccionar contactos para importarlos"</string>
     <string name="sim_import_cancel_content_description" msgid="2388362519166414488">"Cancelar importación"</string>
     <string name="auto_sync_off" msgid="2180147284456026587">"La sincronización automática está desactivada. Toca para activarla."</string>
diff --git a/res/values-et-rEE/strings.xml b/res/values-et-rEE/strings.xml
index fa49f9d..ccd889d 100644
--- a/res/values-et-rEE/strings.xml
+++ b/res/values-et-rEE/strings.xml
@@ -621,6 +621,7 @@
       <item quantity="one">1 SIM-kaardi kontakt imporditi</item>
     </plurals>
     <string name="sim_import_failed_toast" msgid="5559267299793622705">"SIM-kaardi kontaktide importimine ebaõnnestus"</string>
+    <string name="connection_failed" msgid="7558253972301525402">"Sisselogimine ebaõnnestus"</string>
     <string name="sim_import_dialog_title" msgid="6699935401502172530">"Valige imporditavad kontaktid"</string>
     <string name="sim_import_cancel_content_description" msgid="2388362519166414488">"Impordi tühistamine"</string>
     <string name="auto_sync_off" msgid="2180147284456026587">"Automaatne sünkroonimine on välja lülitatud. Puudutage sisselülitamiseks."</string>
diff --git a/res/values-eu-rES/strings.xml b/res/values-eu-rES/strings.xml
index 3d8ccdb..37d03ef 100644
--- a/res/values-eu-rES/strings.xml
+++ b/res/values-eu-rES/strings.xml
@@ -621,6 +621,7 @@
       <item quantity="one">SIM txarteleko 1 kontaktu inportatu da</item>
     </plurals>
     <string name="sim_import_failed_toast" msgid="5559267299793622705">"Ezin izan dira inportatu SIM txarteleko kontaktuak"</string>
+    <string name="connection_failed" msgid="7558253972301525402">"Ezin izan da hasi saioa"</string>
     <string name="sim_import_dialog_title" msgid="6699935401502172530">"Hautatu inportatu beharreko kontaktuak"</string>
     <string name="sim_import_cancel_content_description" msgid="2388362519166414488">"Utzi inportazioa bertan behera"</string>
     <string name="auto_sync_off" msgid="2180147284456026587">"Desaktibatuta dago sinkronizazio automatikoa. Sakatu aktibatzeko."</string>
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
index 81782ff..24c7d8f 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -621,6 +621,7 @@
       <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> مخاطب سیم کارت وارد شد</item>
     </plurals>
     <string name="sim_import_failed_toast" msgid="5559267299793622705">"مخاطبین سیم کارت وارد نشدند"</string>
+    <string name="connection_failed" msgid="7558253972301525402">"وارد سیستم نشدید"</string>
     <string name="sim_import_dialog_title" msgid="6699935401502172530">"انتخاب مخاطبین برای وارد کردن"</string>
     <string name="sim_import_cancel_content_description" msgid="2388362519166414488">"لغو وارد کردن"</string>
     <string name="auto_sync_off" msgid="2180147284456026587">"همگام‌سازی خودکار غیرفعال است. برای فعال کردن ضربه بزنید."</string>
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
index dfb2182..37f444a 100644
--- a/res/values-fi/strings.xml
+++ b/res/values-fi/strings.xml
@@ -621,6 +621,7 @@
       <item quantity="one">Yksi SIM-yhteystieto tuotiin.</item>
     </plurals>
     <string name="sim_import_failed_toast" msgid="5559267299793622705">"SIM-yhteystietojen tuonti epäonnistui."</string>
+    <string name="connection_failed" msgid="7558253972301525402">"Kirjautuminen epäonnistui"</string>
     <string name="sim_import_dialog_title" msgid="6699935401502172530">"Valitse tuotavat yhteystiedot"</string>
     <string name="sim_import_cancel_content_description" msgid="2388362519166414488">"Peruuta tuonti"</string>
     <string name="auto_sync_off" msgid="2180147284456026587">"Automaattinen synkronointi ei ole käytössä. Ota toiminto käyttöön napauttamalla."</string>
diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml
index 2a2051f..730645a 100644
--- a/res/values-fr-rCA/strings.xml
+++ b/res/values-fr-rCA/strings.xml
@@ -621,6 +621,7 @@
       <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> contacts importés de la carte SIM</item>
     </plurals>
     <string name="sim_import_failed_toast" msgid="5559267299793622705">"Échec de l\'importation des contacts de la carte SIM"</string>
+    <string name="connection_failed" msgid="7558253972301525402">"Échec de la connexion"</string>
     <string name="sim_import_dialog_title" msgid="6699935401502172530">"Sélectionner les contacts à importer"</string>
     <string name="sim_import_cancel_content_description" msgid="2388362519166414488">"Annuler l\'importation"</string>
     <string name="auto_sync_off" msgid="2180147284456026587">"La synchronisation automatique est désactivée. Touchez ici pour l\'activer."</string>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index 443492f..0a0c4f1 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -621,6 +621,7 @@
       <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> contacts importés depuis la carte SIM</item>
     </plurals>
     <string name="sim_import_failed_toast" msgid="5559267299793622705">"Impossible d\'importer les contacts de la carte SIM"</string>
+    <string name="connection_failed" msgid="7558253972301525402">"Connexion impossible"</string>
     <string name="sim_import_dialog_title" msgid="6699935401502172530">"Sélectionner les contacts à importer"</string>
     <string name="sim_import_cancel_content_description" msgid="2388362519166414488">"Annuler l\'importation"</string>
     <string name="auto_sync_off" msgid="2180147284456026587">"La synchronisation automatique est désactivée. Appuyez pour l\'activer."</string>
diff --git a/res/values-gl-rES/strings.xml b/res/values-gl-rES/strings.xml
index d85e4c2..3c2508e 100644
--- a/res/values-gl-rES/strings.xml
+++ b/res/values-gl-rES/strings.xml
@@ -621,6 +621,7 @@
       <item quantity="one">Importouse 1 contacto da SIM</item>
     </plurals>
     <string name="sim_import_failed_toast" msgid="5559267299793622705">"Produciuse un erro ao importar contactos da SIM"</string>
+    <string name="connection_failed" msgid="7558253972301525402">"Produciuse un erro ao iniciar sesión"</string>
     <string name="sim_import_dialog_title" msgid="6699935401502172530">"Seleccionar contactos para importar"</string>
     <string name="sim_import_cancel_content_description" msgid="2388362519166414488">"Cancelar importación"</string>
     <string name="auto_sync_off" msgid="2180147284456026587">"A sincronización automática está desactivada. Toca para activala."</string>
diff --git a/res/values-gu-rIN/strings.xml b/res/values-gu-rIN/strings.xml
index 8381dea..e655243 100644
--- a/res/values-gu-rIN/strings.xml
+++ b/res/values-gu-rIN/strings.xml
@@ -621,6 +621,7 @@
       <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> SIM સંપર્કો આયાત કર્યાં</item>
     </plurals>
     <string name="sim_import_failed_toast" msgid="5559267299793622705">"SIM સંપર્કો આયાત કરવામાં નિષ્ફળ થયાં"</string>
+    <string name="connection_failed" msgid="7558253972301525402">"સાઇન ઇન કરવામાં નિષ્ફળ થયાં"</string>
     <string name="sim_import_dialog_title" msgid="6699935401502172530">"આયાત કરવા માટે સંપર્કો પસંદ કરો"</string>
     <string name="sim_import_cancel_content_description" msgid="2388362519166414488">"આયાત કરવાનું રદ કરો"</string>
     <string name="auto_sync_off" msgid="2180147284456026587">"સ્વતઃ સમન્વયન બંધ છે. ચાલુ કરવા માટે ટૅપ કરો."</string>
diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml
index 3282ca4..5f202b6 100644
--- a/res/values-hi/strings.xml
+++ b/res/values-hi/strings.xml
@@ -621,6 +621,7 @@
       <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> सिम संपर्क आयात किए गए</item>
     </plurals>
     <string name="sim_import_failed_toast" msgid="5559267299793622705">"सिम संपर्कों को आयात करने में विफल रहा"</string>
+    <string name="connection_failed" msgid="7558253972301525402">"प्रवेश करने में विफल रहे"</string>
     <string name="sim_import_dialog_title" msgid="6699935401502172530">"आयात करने के लिए संपर्कों को चुनें"</string>
     <string name="sim_import_cancel_content_description" msgid="2388362519166414488">"आयात रद्द करें"</string>
     <string name="auto_sync_off" msgid="2180147284456026587">"स्वतः समन्वयन बंद है. चालू करने के लिए टैप करें."</string>
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
index d070dca..14ff9b1 100644
--- a/res/values-hr/strings.xml
+++ b/res/values-hr/strings.xml
@@ -634,6 +634,7 @@
       <item quantity="other">Uvezeno je <xliff:g id="COUNT">%d</xliff:g> kontakata sa SIM-a</item>
     </plurals>
     <string name="sim_import_failed_toast" msgid="5559267299793622705">"Uvoz kontakata sa SIM kartice nije uspio"</string>
+    <string name="connection_failed" msgid="7558253972301525402">"Prijava nije uspjela"</string>
     <string name="sim_import_dialog_title" msgid="6699935401502172530">"Odabir kontakata za uvoz"</string>
     <string name="sim_import_cancel_content_description" msgid="2388362519166414488">"Otkazivanje uvoza"</string>
     <string name="auto_sync_off" msgid="2180147284456026587">"Automatska sinkronizacija je isključena. Dodirnite da biste je uključili."</string>
diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml
index 0de97db..21f254b 100644
--- a/res/values-hu/strings.xml
+++ b/res/values-hu/strings.xml
@@ -621,6 +621,7 @@
       <item quantity="one">1 SIM-névjegy importálva</item>
     </plurals>
     <string name="sim_import_failed_toast" msgid="5559267299793622705">"Nem sikerült importálni a SIM-névjegyeket."</string>
+    <string name="connection_failed" msgid="7558253972301525402">"Sikertelen bejelentkezés"</string>
     <string name="sim_import_dialog_title" msgid="6699935401502172530">"Válassza ki az importálni kívánt névjegyeket"</string>
     <string name="sim_import_cancel_content_description" msgid="2388362519166414488">"Importálás leállítása"</string>
     <string name="auto_sync_off" msgid="2180147284456026587">"Az automatikus szinkronizálás ki van kapcsolva. Koppintson a bekapcsolásához."</string>
diff --git a/res/values-hy-rAM/strings.xml b/res/values-hy-rAM/strings.xml
index decab81..835ac39 100644
--- a/res/values-hy-rAM/strings.xml
+++ b/res/values-hy-rAM/strings.xml
@@ -621,6 +621,7 @@
       <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> կոնտակտ SIM քարտից ներմուծվեց</item>
     </plurals>
     <string name="sim_import_failed_toast" msgid="5559267299793622705">"SIM քարտից չհաջողվեց ներմուծել կոնտակտները"</string>
+    <string name="connection_failed" msgid="7558253972301525402">"Չհաջողվեց մուտք գործել"</string>
     <string name="sim_import_dialog_title" msgid="6699935401502172530">"Ընտրեք կոնտակտներ ներմուծման համար"</string>
     <string name="sim_import_cancel_content_description" msgid="2388362519166414488">"Չեղարկել ներմուծումը"</string>
     <string name="auto_sync_off" msgid="2180147284456026587">"Հպեք՝ հաշվի ինքնահամաժամեցումը միացնելու համար:"</string>
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
index 83ed1f5..5bf01ce 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -621,6 +621,7 @@
       <item quantity="one">1 kontak SIM yang diimpor</item>
     </plurals>
     <string name="sim_import_failed_toast" msgid="5559267299793622705">"Gagal mengimpor kontak SIM"</string>
+    <string name="connection_failed" msgid="7558253972301525402">"Gagal masuk"</string>
     <string name="sim_import_dialog_title" msgid="6699935401502172530">"Pilih kontak untuk diimpor"</string>
     <string name="sim_import_cancel_content_description" msgid="2388362519166414488">"Batalkan impor"</string>
     <string name="auto_sync_off" msgid="2180147284456026587">"Sinkronisasi otomatis tidak aktif. Tap untuk mengaktifkan."</string>
diff --git a/res/values-is-rIS/strings.xml b/res/values-is-rIS/strings.xml
index 290de08..38d6f3d 100644
--- a/res/values-is-rIS/strings.xml
+++ b/res/values-is-rIS/strings.xml
@@ -621,6 +621,7 @@
       <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> SIM-tengiliðir fluttir inn</item>
     </plurals>
     <string name="sim_import_failed_toast" msgid="5559267299793622705">"Ekki tókst að flytja inn SIM-tengiliðina"</string>
+    <string name="connection_failed" msgid="7558253972301525402">"Innskráning tókst ekki"</string>
     <string name="sim_import_dialog_title" msgid="6699935401502172530">"Veldu tengiliði til að flytja inn"</string>
     <string name="sim_import_cancel_content_description" msgid="2388362519166414488">"Hætta við innflutning"</string>
     <string name="auto_sync_off" msgid="2180147284456026587">"Slökkt er á sjálfvirkri samstillingu. Ýttu til að kveikja á henni."</string>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index 9b1cc89..44a9c98 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -621,6 +621,7 @@
       <item quantity="one">1 contatto della SIM importato</item>
     </plurals>
     <string name="sim_import_failed_toast" msgid="5559267299793622705">"Impossibile importare i contatti della SIM"</string>
+    <string name="connection_failed" msgid="7558253972301525402">"Impossibile accedere"</string>
     <string name="sim_import_dialog_title" msgid="6699935401502172530">"Seleziona contatti da importare"</string>
     <string name="sim_import_cancel_content_description" msgid="2388362519166414488">"Annulla importazione"</string>
     <string name="auto_sync_off" msgid="2180147284456026587">"La sincronizzazione automatica è disattivata. Tocca per attivarla."</string>
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index 8c5070c..4154ef9 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -647,6 +647,7 @@
       <item quantity="one">‏איש קשר אחד יובא מכרטיס ה-SIM</item>
     </plurals>
     <string name="sim_import_failed_toast" msgid="5559267299793622705">"‏לא ניתן היה לייבא את אנשי הקשר מכרטיס ה-SIM"</string>
+    <string name="connection_failed" msgid="7558253972301525402">"לא ניתן היה להיכנס לחשבון"</string>
     <string name="sim_import_dialog_title" msgid="6699935401502172530">"בחר אנשי קשר לייבוא"</string>
     <string name="sim_import_cancel_content_description" msgid="2388362519166414488">"בטל את הייבוא"</string>
     <string name="auto_sync_off" msgid="2180147284456026587">"הסינכרון האוטומטי מושבת. הקש כדי להפעיל אותו."</string>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index 96b3656..79d2182 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -621,6 +621,7 @@
       <item quantity="one">1 件の SIM の連絡先をインポートしました</item>
     </plurals>
     <string name="sim_import_failed_toast" msgid="5559267299793622705">"SIM の連絡先をインポートできませんでした"</string>
+    <string name="connection_failed" msgid="7558253972301525402">"ログインできませんでした"</string>
     <string name="sim_import_dialog_title" msgid="6699935401502172530">"インポートする連絡先の選択"</string>
     <string name="sim_import_cancel_content_description" msgid="2388362519166414488">"インポートをキャンセル"</string>
     <string name="auto_sync_off" msgid="2180147284456026587">"自動同期が OFF になっています。タップすると ON になります。"</string>
diff --git a/res/values-ka-rGE/strings.xml b/res/values-ka-rGE/strings.xml
index 43adc60..1c49e15 100644
--- a/res/values-ka-rGE/strings.xml
+++ b/res/values-ka-rGE/strings.xml
@@ -621,6 +621,7 @@
       <item quantity="one">იმპორტირებულია 1 SIM კონტაქტი</item>
     </plurals>
     <string name="sim_import_failed_toast" msgid="5559267299793622705">"SIM კონტაქტების იმპორტირება ვერ მოხერხდა"</string>
+    <string name="connection_failed" msgid="7558253972301525402">"შესვლა ვერ მოხერხდა"</string>
     <string name="sim_import_dialog_title" msgid="6699935401502172530">"აირჩიეთ კონტაქტი იმპორტისათვის"</string>
     <string name="sim_import_cancel_content_description" msgid="2388362519166414488">"იმპორტის გაუქმება"</string>
     <string name="auto_sync_off" msgid="2180147284456026587">"ავტო-სინქ. გამორთულია. შეეხეთ ჩასართავად."</string>
diff --git a/res/values-kk-rKZ/strings.xml b/res/values-kk-rKZ/strings.xml
index 891349b..3424cdb 100644
--- a/res/values-kk-rKZ/strings.xml
+++ b/res/values-kk-rKZ/strings.xml
@@ -621,6 +621,7 @@
       <item quantity="one">1 SIM контактісі импортталды</item>
     </plurals>
     <string name="sim_import_failed_toast" msgid="5559267299793622705">"SIM контактілері импортталмады"</string>
+    <string name="connection_failed" msgid="7558253972301525402">"Жүйеге кіру мүмкін болмады"</string>
     <string name="sim_import_dialog_title" msgid="6699935401502172530">"Импортталатын контактілерді таңдау"</string>
     <string name="sim_import_cancel_content_description" msgid="2388362519166414488">"Импорттауды тоқтату"</string>
     <string name="auto_sync_off" msgid="2180147284456026587">"Автоматты синхрондау өшірулі. Қосу үшін түртіңіз."</string>
diff --git a/res/values-km-rKH/strings.xml b/res/values-km-rKH/strings.xml
index 02890e7..17ab2c1 100644
--- a/res/values-km-rKH/strings.xml
+++ b/res/values-km-rKH/strings.xml
@@ -621,6 +621,7 @@
       <item quantity="one">បាន​នាំចូល​ទំនាក់ទំនង SIM 1</item>
     </plurals>
     <string name="sim_import_failed_toast" msgid="5559267299793622705">"មិន​អាច​នាំចូល​ទំនាក់ទំនង​ពី SIM បាន​ទេ"</string>
+    <string name="connection_failed" msgid="7558253972301525402">"មិន​អាច​ចូល​បាន​ទេ"</string>
     <string name="sim_import_dialog_title" msgid="6699935401502172530">"ជ្រើស​ទំនាក់​ទំនង ដើម្បី​នាំចូល"</string>
     <string name="sim_import_cancel_content_description" msgid="2388362519166414488">"បោះបង់ការ​នាំចូល"</string>
     <string name="auto_sync_off" msgid="2180147284456026587">"ការធ្វើសមកាលស្វ័យប្រវត្តិ​ត្រូវ​បានបិទ។ ចុច ដើម្បីបើក។"</string>
diff --git a/res/values-kn-rIN/strings.xml b/res/values-kn-rIN/strings.xml
index 40bf36b..13783fd 100644
--- a/res/values-kn-rIN/strings.xml
+++ b/res/values-kn-rIN/strings.xml
@@ -621,6 +621,7 @@
       <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ಸಿಮ್ ಸಂಪರ್ಕಗಳನ್ನು ಆಮದು ಮಾಡಲಾಗಿದೆ</item>
     </plurals>
     <string name="sim_import_failed_toast" msgid="5559267299793622705">"ಸಿಮ್ ಸಂಪರ್ಕಗಳನ್ನು ಆಮದು ಮಾಡಲು ವಿಫಲವಾಗಿದೆ"</string>
+    <string name="connection_failed" msgid="7558253972301525402">"ಸೈನ್ ಇನ್ ಮಾಡಲು ವಿಫಲವಾಗಿದೆ"</string>
     <string name="sim_import_dialog_title" msgid="6699935401502172530">"ಆಮದು ಮಾಡಲು ಸಂಪರ್ಕಗಳನ್ನು ಆಯ್ಕೆಮಾಡಿ"</string>
     <string name="sim_import_cancel_content_description" msgid="2388362519166414488">"ಆಮದು ರದ್ದುಮಾಡಿ"</string>
     <string name="auto_sync_off" msgid="2180147284456026587">"ಸ್ವಯಂಚಾಲಿತ ಸಿಂಕ್ ಆಫ್‌ ಆಗಿದೆ. ಆನ್ ಮಾಡಲು ಟ್ಯಾಪ್ ಮಾಡಿ."</string>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index b02fda2..fc469ed 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -621,6 +621,7 @@
       <item quantity="one">SIM 연락처 1개를 가져옴</item>
     </plurals>
     <string name="sim_import_failed_toast" msgid="5559267299793622705">"SIM 연락처를 가져오지 못했습니다."</string>
+    <string name="connection_failed" msgid="7558253972301525402">"로그인하지 못했습니다."</string>
     <string name="sim_import_dialog_title" msgid="6699935401502172530">"가져올 주소록 선택"</string>
     <string name="sim_import_cancel_content_description" msgid="2388362519166414488">"가져오기 취소"</string>
     <string name="auto_sync_off" msgid="2180147284456026587">"자동 동기화가 사용 중지되어 있습니다. 사용 설정하려면 탭하세요."</string>
diff --git a/res/values-ky-rKG/strings.xml b/res/values-ky-rKG/strings.xml
index 704b3a5..f0aca05 100644
--- a/res/values-ky-rKG/strings.xml
+++ b/res/values-ky-rKG/strings.xml
@@ -730,6 +730,7 @@
       <item quantity="one">SIM-картадан 1 байланыш өткөрүлүп алынды</item>
     </plurals>
     <string name="sim_import_failed_toast" msgid="5559267299793622705">"SIM-картадагы байланыштар өткөрүлүп алынган жок"</string>
+    <string name="connection_failed" msgid="7558253972301525402">"Кире алган жоксуз"</string>
     <string name="sim_import_dialog_title" msgid="6699935401502172530">"Импорттоло турган байланыштарды тандаңыз"</string>
     <string name="sim_import_cancel_content_description" msgid="2388362519166414488">"Импорттоону жокко чыгаруу"</string>
     <string name="auto_sync_off" msgid="2180147284456026587">"Түзмөктүн авто шайкештештирүү функциясы өчүрүлгөн. Күйгүзүү үчүн тийип коюңуз."</string>
diff --git a/res/values-lo-rLA/strings.xml b/res/values-lo-rLA/strings.xml
index 6d878a1..e19b516 100644
--- a/res/values-lo-rLA/strings.xml
+++ b/res/values-lo-rLA/strings.xml
@@ -621,6 +621,7 @@
       <item quantity="one">ນຳເຂົ້າ 1 ລາຍຊື່ຜູ້ຕິດຕໍ່ຊິມແລ້ວ</item>
     </plurals>
     <string name="sim_import_failed_toast" msgid="5559267299793622705">"ນຳເຂົ້າລາຍຊື່ຜູ້ຕິດຕໍ່ຈາກຊິມກາດບໍ່ສຳເລັດ"</string>
+    <string name="connection_failed" msgid="7558253972301525402">"ເຂົ້າສູ່ລະບົບບໍ່ສຳເລັດ"</string>
     <string name="sim_import_dialog_title" msgid="6699935401502172530">"ເລືອກລາຍຊື່ເພື່ອນຳເຂົ້າ"</string>
     <string name="sim_import_cancel_content_description" msgid="2388362519166414488">"ຍົກເລີກການນຳເຂົ້າ"</string>
     <string name="auto_sync_off" msgid="2180147284456026587">"ການຊິ້ງຂໍ້ມູນອັດຕະໂນມັດຖືກປິດໄວ້. ແຕະເພື່ອເປີດໃຊ້."</string>
diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml
index 0ec552f..763fd39 100644
--- a/res/values-lt/strings.xml
+++ b/res/values-lt/strings.xml
@@ -647,6 +647,7 @@
       <item quantity="other">Importuota <xliff:g id="COUNT">%d</xliff:g> SIM kortelės kontaktų</item>
     </plurals>
     <string name="sim_import_failed_toast" msgid="5559267299793622705">"Nepavyko importuoti SIM kortelės kontaktų"</string>
+    <string name="connection_failed" msgid="7558253972301525402">"Nepavyko prisijungti"</string>
     <string name="sim_import_dialog_title" msgid="6699935401502172530">"Pasirinkti importuojamus kontaktus"</string>
     <string name="sim_import_cancel_content_description" msgid="2388362519166414488">"Atšaukti importavimą"</string>
     <string name="auto_sync_off" msgid="2180147284456026587">"Automatinis sinchronizavimas išjungtas. Jei norite įjungti, palieskite."</string>
diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml
index 65600d4..d18fa5d 100644
--- a/res/values-lv/strings.xml
+++ b/res/values-lv/strings.xml
@@ -634,6 +634,7 @@
       <item quantity="other">Importētas <xliff:g id="COUNT">%d</xliff:g> SIM kartes kontaktpersonas</item>
     </plurals>
     <string name="sim_import_failed_toast" msgid="5559267299793622705">"Neizdevās importēt SIM kartes kontaktpersonas."</string>
+    <string name="connection_failed" msgid="7558253972301525402">"Neizdevās pierakstīties"</string>
     <string name="sim_import_dialog_title" msgid="6699935401502172530">"Importējamo kontaktpersonu atlase"</string>
     <string name="sim_import_cancel_content_description" msgid="2388362519166414488">"Atcelt importēšanu"</string>
     <string name="auto_sync_off" msgid="2180147284456026587">"Automātiskā sinhronizācija ir izslēgta. Pieskarieties, lai to ieslēgtu."</string>
diff --git a/res/values-mk-rMK/strings.xml b/res/values-mk-rMK/strings.xml
index e3f7b61..31cd04c 100644
--- a/res/values-mk-rMK/strings.xml
+++ b/res/values-mk-rMK/strings.xml
@@ -621,6 +621,7 @@
       <item quantity="other">Увезени се <xliff:g id="COUNT">%d</xliff:g> контакти од SIM</item>
     </plurals>
     <string name="sim_import_failed_toast" msgid="5559267299793622705">"Не успеа увезувањето контакти од SIM"</string>
+    <string name="connection_failed" msgid="7558253972301525402">"Не успеа да се најави"</string>
     <string name="sim_import_dialog_title" msgid="6699935401502172530">"Изберете контакти за увоз"</string>
     <string name="sim_import_cancel_content_description" msgid="2388362519166414488">"Откажете го увозот"</string>
     <string name="auto_sync_off" msgid="2180147284456026587">"Автоматското синхронизирање е исклучено. Допрете за да го вклучите."</string>
diff --git a/res/values-ml-rIN/strings.xml b/res/values-ml-rIN/strings.xml
index 255836e..443ac8e 100644
--- a/res/values-ml-rIN/strings.xml
+++ b/res/values-ml-rIN/strings.xml
@@ -621,6 +621,7 @@
       <item quantity="one">ഒരു സിം കോൺടാക്‌റ്റ് ഇമ്പോർട്ടുചെയ്‌തു</item>
     </plurals>
     <string name="sim_import_failed_toast" msgid="5559267299793622705">"സിം കോൺടാക്‌റ്റുകൾ ഇമ്പോർട്ടുചെയ്യാനായില്ല"</string>
+    <string name="connection_failed" msgid="7558253972301525402">"സൈൻ ഇൻ ചെയ്യാനായില്ല"</string>
     <string name="sim_import_dialog_title" msgid="6699935401502172530">"ഇമ്പോർട്ടുചെയ്യാനുള്ളവ തിരഞ്ഞെടുക്കൂ"</string>
     <string name="sim_import_cancel_content_description" msgid="2388362519166414488">"ഇറക്കുമതി റദ്ദാക്കുക"</string>
     <string name="auto_sync_off" msgid="2180147284456026587">"സ്വയ സമന്വയം ഓഫാണ്. ഓണാക്കാൻ ടാപ്പുചെയ്യുക."</string>
diff --git a/res/values-mn-rMN/strings.xml b/res/values-mn-rMN/strings.xml
index 6112557..51f796c 100644
--- a/res/values-mn-rMN/strings.xml
+++ b/res/values-mn-rMN/strings.xml
@@ -623,6 +623,7 @@
       <item quantity="one">1 SIM-н харилцагчийг импорт хийсэн</item>
     </plurals>
     <string name="sim_import_failed_toast" msgid="5559267299793622705">"SIM-н харилцагчдыг импортолж чадсангүй"</string>
+    <string name="connection_failed" msgid="7558253972301525402">"Нэвтэрч чадсангүй"</string>
     <string name="sim_import_dialog_title" msgid="6699935401502172530">"Импорт хийх харилцагчдыг сонгоно уу"</string>
     <string name="sim_import_cancel_content_description" msgid="2388362519166414488">"Импорт хийхийг цуцлах"</string>
     <string name="auto_sync_off" msgid="2180147284456026587">"Автомат синк идэвхгүй байна. Идэвхжүүлэх бол товшино уу."</string>
diff --git a/res/values-mr-rIN/strings.xml b/res/values-mr-rIN/strings.xml
index 3c9f106..35868d8 100644
--- a/res/values-mr-rIN/strings.xml
+++ b/res/values-mr-rIN/strings.xml
@@ -621,6 +621,7 @@
       <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> सिम संपर्क आयात केले</item>
     </plurals>
     <string name="sim_import_failed_toast" msgid="5559267299793622705">"सिम संपर्क आयात करण्यात अयशस्वी"</string>
+    <string name="connection_failed" msgid="7558253972301525402">"साइन इन करण्यात अयशस्वी झाले"</string>
     <string name="sim_import_dialog_title" msgid="6699935401502172530">"आयात करण्यासाठी संपर्क निवडा"</string>
     <string name="sim_import_cancel_content_description" msgid="2388362519166414488">"आयात रद्द करा"</string>
     <string name="auto_sync_off" msgid="2180147284456026587">"स्वयं-संकालन बंद आहे. चालू करण्यासाठी टॅप करा."</string>
diff --git a/res/values-ms-rMY/strings.xml b/res/values-ms-rMY/strings.xml
index 6a4d2a5..39b4d6f 100644
--- a/res/values-ms-rMY/strings.xml
+++ b/res/values-ms-rMY/strings.xml
@@ -623,6 +623,7 @@
       <item quantity="one">1 kenalan SIM diimport</item>
     </plurals>
     <string name="sim_import_failed_toast" msgid="5559267299793622705">"Gagal mengimport kenalan SIM"</string>
+    <string name="connection_failed" msgid="7558253972301525402">"Gagal log masuk"</string>
     <string name="sim_import_dialog_title" msgid="6699935401502172530">"Pilih kenalan untuk diimport"</string>
     <string name="sim_import_cancel_content_description" msgid="2388362519166414488">"Batalkan import"</string>
     <string name="auto_sync_off" msgid="2180147284456026587">"Auto segerak dimatikan. Ketik untuk menghidupkannya."</string>
diff --git a/res/values-my-rMM/strings.xml b/res/values-my-rMM/strings.xml
index 30f619a..a578e79 100644
--- a/res/values-my-rMM/strings.xml
+++ b/res/values-my-rMM/strings.xml
@@ -621,6 +621,7 @@
       <item quantity="one">ဆင်းမ်အဆက်အသွယ် ၁ ခုကို တင်သွင်းပြီးပါပြီ</item>
     </plurals>
     <string name="sim_import_failed_toast" msgid="5559267299793622705">"ဆင်းမ်အဆက်အသွယ်များကို တင်သွင်း၍မရပါ"</string>
+    <string name="connection_failed" msgid="7558253972301525402">"အကောင့် ဝင်၍မရပါ"</string>
     <string name="sim_import_dialog_title" msgid="6699935401502172530">"တင်သွင်းရန် လိပ်စာများကို ရွေးပါ"</string>
     <string name="sim_import_cancel_content_description" msgid="2388362519166414488">"တင်သွင်းမှု ပယ်ဖျက်ရန်"</string>
     <string name="auto_sync_off" msgid="2180147284456026587">"အလိုအလျောက်စင့်ခ်လုပ်ခြင်းကို ပိတ်ထားသည်။ ဖွင့်ရန်အတွက် တို့ပါ။"</string>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index bab73f0..dffebd4 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -621,6 +621,7 @@
       <item quantity="one">Én SIM-kontakt ble importert</item>
     </plurals>
     <string name="sim_import_failed_toast" msgid="5559267299793622705">"Kunne ikke importere SIM-kontakter"</string>
+    <string name="connection_failed" msgid="7558253972301525402">"Kunne ikke logge på"</string>
     <string name="sim_import_dialog_title" msgid="6699935401502172530">"Velg kontaktene du vil importere"</string>
     <string name="sim_import_cancel_content_description" msgid="2388362519166414488">"Avbryt import"</string>
     <string name="auto_sync_off" msgid="2180147284456026587">"Automatisk synkronisering er slått av. Trykk for å slå det på."</string>
diff --git a/res/values-ne-rNP/strings.xml b/res/values-ne-rNP/strings.xml
index 18513b9..15bdba2 100644
--- a/res/values-ne-rNP/strings.xml
+++ b/res/values-ne-rNP/strings.xml
@@ -621,6 +621,7 @@
       <item quantity="one">SIM को १ सम्पर्क आयात गरियो</item>
     </plurals>
     <string name="sim_import_failed_toast" msgid="5559267299793622705">"SIM को सम्पर्कहरू आयात गर्न सकिएन"</string>
+    <string name="connection_failed" msgid="7558253972301525402">"साइन इन गर्न सकिएन"</string>
     <string name="sim_import_dialog_title" msgid="6699935401502172530">"आयात गर्न सम्पर्कहरू चयन गर्नुहोस्"</string>
     <string name="sim_import_cancel_content_description" msgid="2388362519166414488">"आयात रद्द गर्नुहोस्"</string>
     <string name="auto_sync_off" msgid="2180147284456026587">"स्वत:सिङ्क गर्ने सेवा निष्क्रिय छ। सक्रिय गर्न ट्याप गर्नुहोस्।"</string>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index 1f63c1e..99d83af 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -621,6 +621,7 @@
       <item quantity="one">1 contact op simkaart geïmporteerd</item>
     </plurals>
     <string name="sim_import_failed_toast" msgid="5559267299793622705">"Kan contacten op simkaart niet importeren"</string>
+    <string name="connection_failed" msgid="7558253972301525402">"Inloggen is mislukt"</string>
     <string name="sim_import_dialog_title" msgid="6699935401502172530">"Contacten selecteren om te importeren"</string>
     <string name="sim_import_cancel_content_description" msgid="2388362519166414488">"Importeren annuleren"</string>
     <string name="auto_sync_off" msgid="2180147284456026587">"Automatisch synchroniseren is uitgeschakeld. Tik om in te schakelen."</string>
diff --git a/res/values-pa-rIN/strings.xml b/res/values-pa-rIN/strings.xml
index d9b9381..7d2ed27 100644
--- a/res/values-pa-rIN/strings.xml
+++ b/res/values-pa-rIN/strings.xml
@@ -621,6 +621,7 @@
       <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> SIM ਸੰਪਰਕ ਆਯਾਤ ਕੀਤੇ ਗਏ</item>
     </plurals>
     <string name="sim_import_failed_toast" msgid="5559267299793622705">"SIM ਸੰਪਰਕਾਂ ਨੂੰ ਆਯਾਤ ਕਰਨਾ ਅਸਫਲ ਰਿਹਾ"</string>
+    <string name="connection_failed" msgid="7558253972301525402">"ਸਾਈਨ ਇਨ ਕਰਨਾ ਅਸਫਲ ਰਿਹਾ"</string>
     <string name="sim_import_dialog_title" msgid="6699935401502172530">"ਆਯਾਤ ਕਰਨ ਲਈ ਸੰਪਰਕ ਚੁਣੋ"</string>
     <string name="sim_import_cancel_content_description" msgid="2388362519166414488">"ਆਯਾਤ ਰੱਦ ਕਰੋ"</string>
     <string name="auto_sync_off" msgid="2180147284456026587">"ਸਵੈ-ਸਮਕਾਲੀਕਰਨ ਬੰਦ ਹੈ। ਚਾਲੂ ਕਰਨ ਲਈ ਟੈਪ ਕਰੋ।"</string>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index 7bb8960..d8d9854 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -647,6 +647,7 @@
       <item quantity="one">Zaimportowano 1 kontakt z karty SIM</item>
     </plurals>
     <string name="sim_import_failed_toast" msgid="5559267299793622705">"Nie udało się zaimportować kontaktów z karty SIM"</string>
+    <string name="connection_failed" msgid="7558253972301525402">"Nie udało się zalogować"</string>
     <string name="sim_import_dialog_title" msgid="6699935401502172530">"Wybierz kontakty do importowania"</string>
     <string name="sim_import_cancel_content_description" msgid="2388362519166414488">"Anuluj importowanie"</string>
     <string name="auto_sync_off" msgid="2180147284456026587">"Automatyczna synchronizacja jest wyłączona. Kliknij, by ją włączyć."</string>
diff --git a/res/values-pt-rBR/strings.xml b/res/values-pt-rBR/strings.xml
index 6d2734c..1064c10 100644
--- a/res/values-pt-rBR/strings.xml
+++ b/res/values-pt-rBR/strings.xml
@@ -621,6 +621,7 @@
       <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> contatos importados do SIM</item>
     </plurals>
     <string name="sim_import_failed_toast" msgid="5559267299793622705">"Falha ao importar contatos do SIM"</string>
+    <string name="connection_failed" msgid="7558253972301525402">"Falha ao fazer login"</string>
     <string name="sim_import_dialog_title" msgid="6699935401502172530">"Selecione os contatos a serem importados"</string>
     <string name="sim_import_cancel_content_description" msgid="2388362519166414488">"Cancelar importação"</string>
     <string name="auto_sync_off" msgid="2180147284456026587">"A sincronização automática está desativada. Toque para ativar."</string>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index ecb5a19..8f9b052 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -621,6 +621,7 @@
       <item quantity="one">1 contacto do cartão SIM importado</item>
     </plurals>
     <string name="sim_import_failed_toast" msgid="5559267299793622705">"Ocorreu uma falha ao importar os contactos do cartão SIM"</string>
+    <string name="connection_failed" msgid="7558253972301525402">"Ocorreu uma falha ao iniciar sessão"</string>
     <string name="sim_import_dialog_title" msgid="6699935401502172530">"Selecione os contactos a importar"</string>
     <string name="sim_import_cancel_content_description" msgid="2388362519166414488">"Cancelar importação"</string>
     <string name="auto_sync_off" msgid="2180147284456026587">"A sincronização automática está desativada. Toque para ativar."</string>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index 6d2734c..1064c10 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -621,6 +621,7 @@
       <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> contatos importados do SIM</item>
     </plurals>
     <string name="sim_import_failed_toast" msgid="5559267299793622705">"Falha ao importar contatos do SIM"</string>
+    <string name="connection_failed" msgid="7558253972301525402">"Falha ao fazer login"</string>
     <string name="sim_import_dialog_title" msgid="6699935401502172530">"Selecione os contatos a serem importados"</string>
     <string name="sim_import_cancel_content_description" msgid="2388362519166414488">"Cancelar importação"</string>
     <string name="auto_sync_off" msgid="2180147284456026587">"A sincronização automática está desativada. Toque para ativar."</string>
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
index 459e7cc..65f0684 100644
--- a/res/values-ro/strings.xml
+++ b/res/values-ro/strings.xml
@@ -634,6 +634,7 @@
       <item quantity="one">A fost importată o persoană de contact de pe SIM.</item>
     </plurals>
     <string name="sim_import_failed_toast" msgid="5559267299793622705">"Nu s-au importat persoanele de contact de pe SIM."</string>
+    <string name="connection_failed" msgid="7558253972301525402">"Nu v-ați conectat."</string>
     <string name="sim_import_dialog_title" msgid="6699935401502172530">"Selectați persoane de contact pentru import"</string>
     <string name="sim_import_cancel_content_description" msgid="2388362519166414488">"Anulați importul"</string>
     <string name="auto_sync_off" msgid="2180147284456026587">"Sincronizarea automată este dezactivată. Atingeți pentru a o activa."</string>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index fd43047..c66e8ec 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -647,6 +647,7 @@
       <item quantity="other">Импортировано <xliff:g id="COUNT">%d</xliff:g> контакта с SIM-карты</item>
     </plurals>
     <string name="sim_import_failed_toast" msgid="5559267299793622705">"Не удалось импортировать контакты с SIM-карты"</string>
+    <string name="connection_failed" msgid="7558253972301525402">"Не удалось войти в систему"</string>
     <string name="sim_import_dialog_title" msgid="6699935401502172530">"Выберите контакты для импорта"</string>
     <string name="sim_import_cancel_content_description" msgid="2388362519166414488">"Отменить импорт"</string>
     <string name="auto_sync_off" msgid="2180147284456026587">"Автосинхронизация отключена. Нажмите, чтобы ее включить."</string>
diff --git a/res/values-si-rLK/strings.xml b/res/values-si-rLK/strings.xml
index 125ef79..7f3212a 100644
--- a/res/values-si-rLK/strings.xml
+++ b/res/values-si-rLK/strings.xml
@@ -621,6 +621,7 @@
       <item quantity="other">SIM සම්බන්ධතා <xliff:g id="COUNT">%d</xliff:g>ක් ආයාත කරන ලදී</item>
     </plurals>
     <string name="sim_import_failed_toast" msgid="5559267299793622705">"SIM සම්බන්ධතා ආයාත කිරීමට අසමත් විය"</string>
+    <string name="connection_failed" msgid="7558253972301525402">"පිරීමට අසමත් විය"</string>
     <string name="sim_import_dialog_title" msgid="6699935401502172530">"ආයාත කිරීමට සම්බන්ධතා තෝරන්න"</string>
     <string name="sim_import_cancel_content_description" msgid="2388362519166414488">"ආයාත කිරීම අවලංගු කරන්න"</string>
     <string name="auto_sync_off" msgid="2180147284456026587">"ස්වයංක්‍රිය සමමුහුර්ත කිරීම ක්‍රියාවිරහිතයි. ක්‍රියාත්මක කිරීමට තට්ටු කරන්න."</string>
diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml
index 9e00ff6..8c13d4f 100644
--- a/res/values-sk/strings.xml
+++ b/res/values-sk/strings.xml
@@ -647,6 +647,7 @@
       <item quantity="one">Importoval sa 1 kontakt na SIM karte</item>
     </plurals>
     <string name="sim_import_failed_toast" msgid="5559267299793622705">"Import kontaktov na SIM karte zlyhal"</string>
+    <string name="connection_failed" msgid="7558253972301525402">"Prihlásenie zlyhalo"</string>
     <string name="sim_import_dialog_title" msgid="6699935401502172530">"Výber kontaktov na import"</string>
     <string name="sim_import_cancel_content_description" msgid="2388362519166414488">"Zrušiť import"</string>
     <string name="auto_sync_off" msgid="2180147284456026587">"Automatická synchronizácia je vypnutá. Zapnete ju klepnutím."</string>
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml
index 0de2f45..0c22a84 100644
--- a/res/values-sl/strings.xml
+++ b/res/values-sl/strings.xml
@@ -647,6 +647,7 @@
       <item quantity="other">S kartice SIM je uvoženih <xliff:g id="COUNT">%d</xliff:g> stikov</item>
     </plurals>
     <string name="sim_import_failed_toast" msgid="5559267299793622705">"Stikov s kartice SIM ni bilo mogoče uvoziti"</string>
+    <string name="connection_failed" msgid="7558253972301525402">"Prijava ni uspela"</string>
     <string name="sim_import_dialog_title" msgid="6699935401502172530">"Izberite stike za uvoz"</string>
     <string name="sim_import_cancel_content_description" msgid="2388362519166414488">"Prekliči uvoz"</string>
     <string name="auto_sync_off" msgid="2180147284456026587">"Samodejna sinhronizacija je izklopljena. Dotaknite se, da jo vklopite."</string>
diff --git a/res/values-sq-rAL/strings.xml b/res/values-sq-rAL/strings.xml
index af07d32..f622fa2 100644
--- a/res/values-sq-rAL/strings.xml
+++ b/res/values-sq-rAL/strings.xml
@@ -621,6 +621,7 @@
       <item quantity="one">1 kontakt i kartës SIM u importua</item>
     </plurals>
     <string name="sim_import_failed_toast" msgid="5559267299793622705">"Importimi i kontakteve të kartës SIM dështoi"</string>
+    <string name="connection_failed" msgid="7558253972301525402">"Identifikimi dështoi"</string>
     <string name="sim_import_dialog_title" msgid="6699935401502172530">"Zgjidh kontaktet për importim"</string>
     <string name="sim_import_cancel_content_description" msgid="2388362519166414488">"Anulo importimin"</string>
     <string name="auto_sync_off" msgid="2180147284456026587">"Sinkronizimi automatik është joaktiv. Trokit për ta aktivizuar."</string>
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
index 973217e..3773e4e 100644
--- a/res/values-sr/strings.xml
+++ b/res/values-sr/strings.xml
@@ -634,6 +634,7 @@
       <item quantity="other">Увезено је <xliff:g id="COUNT">%d</xliff:g> контаката са SIM картице</item>
     </plurals>
     <string name="sim_import_failed_toast" msgid="5559267299793622705">"Увоз контаката са SIM картице није успео"</string>
+    <string name="connection_failed" msgid="7558253972301525402">"Пријављивање није успело"</string>
     <string name="sim_import_dialog_title" msgid="6699935401502172530">"Изаберите контакте за увоз"</string>
     <string name="sim_import_cancel_content_description" msgid="2388362519166414488">"Откажите увоз"</string>
     <string name="auto_sync_off" msgid="2180147284456026587">"Аутоматска синхронизација је искључена. Додирните да бисте је укључили."</string>
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index 42fec0d..d55c4a9 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -621,6 +621,7 @@
       <item quantity="one">En SIM-kontakt importerad</item>
     </plurals>
     <string name="sim_import_failed_toast" msgid="5559267299793622705">"Det gick inte att importera SIM-kontakter"</string>
+    <string name="connection_failed" msgid="7558253972301525402">"Det gick inte att logga in"</string>
     <string name="sim_import_dialog_title" msgid="6699935401502172530">"Välj kontakter att importera"</string>
     <string name="sim_import_cancel_content_description" msgid="2388362519166414488">"Avbryt import"</string>
     <string name="auto_sync_off" msgid="2180147284456026587">"Automatisk synkronisering har inaktiverats. Aktivera genom att trycka."</string>
diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml
index 229dbaf..a2138ca 100644
--- a/res/values-sw/strings.xml
+++ b/res/values-sw/strings.xml
@@ -623,6 +623,7 @@
       <item quantity="one">Anwani 1 iliyokuwa kwenye SIM imeletwa</item>
     </plurals>
     <string name="sim_import_failed_toast" msgid="5559267299793622705">"Imeshindwa kuleta anwani zilizo kwenye SIM kadi"</string>
+    <string name="connection_failed" msgid="7558253972301525402">"Imeshindwa kuingia katika akaunti"</string>
     <string name="sim_import_dialog_title" msgid="6699935401502172530">"Chagua anwani za kuleta"</string>
     <string name="sim_import_cancel_content_description" msgid="2388362519166414488">"Ghairi uletaji"</string>
     <string name="auto_sync_off" msgid="2180147284456026587">"Usawazishaji wa kiotomatiki umezimwa. Gonga ili uuwashe."</string>
diff --git a/res/values-ta-rIN/strings.xml b/res/values-ta-rIN/strings.xml
index 5460fbb..0acf2df 100644
--- a/res/values-ta-rIN/strings.xml
+++ b/res/values-ta-rIN/strings.xml
@@ -621,6 +621,7 @@
       <item quantity="one">1 சிம் தொடர்பு இறக்கப்பட்டது</item>
     </plurals>
     <string name="sim_import_failed_toast" msgid="5559267299793622705">"சிம் தொடர்புகளை இறக்க முடியவில்லை"</string>
+    <string name="connection_failed" msgid="7558253972301525402">"உள்நுழைய முடியவில்லை"</string>
     <string name="sim_import_dialog_title" msgid="6699935401502172530">"இறக்க வேண்டிய தொடர்புகளைத் தேர்ந்தெடுக்கவும்"</string>
     <string name="sim_import_cancel_content_description" msgid="2388362519166414488">"இறக்குவதை ரத்துசெய்வதற்கான ஐகான்"</string>
     <string name="auto_sync_off" msgid="2180147284456026587">"தானாக ஒத்திசை எனும் அம்சம் முடக்கப்பட்டுள்ளது. இயக்க, தட்டவும்."</string>
diff --git a/res/values-te-rIN/strings.xml b/res/values-te-rIN/strings.xml
index 923cd72..e4dbf5d 100644
--- a/res/values-te-rIN/strings.xml
+++ b/res/values-te-rIN/strings.xml
@@ -621,6 +621,7 @@
       <item quantity="one">1 SIM పరిచయం దిగుమతి చేయబడింది</item>
     </plurals>
     <string name="sim_import_failed_toast" msgid="5559267299793622705">"SIM పరిచయాలను దిగుమతి చేయడంలో విఫలమైంది"</string>
+    <string name="connection_failed" msgid="7558253972301525402">"సైన్ ఇన్ చేయడంలో విఫలమైంది"</string>
     <string name="sim_import_dialog_title" msgid="6699935401502172530">"దిగుమతి చేయాల్సిన పరిచయాలను ఎంచుకోండి"</string>
     <string name="sim_import_cancel_content_description" msgid="2388362519166414488">"దిగుమతిని రద్దు చేస్తుంది"</string>
     <string name="auto_sync_off" msgid="2180147284456026587">"స్వీయ-సమకాలీకరణ ఆఫ్‌లో ఉంది. ఆన్ చేయడానికి నొక్కండి."</string>
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml
index bc8c8f2..554cfe3 100644
--- a/res/values-th/strings.xml
+++ b/res/values-th/strings.xml
@@ -621,6 +621,7 @@
       <item quantity="one">นำเข้าผู้ติดต่อ 1 รายจากซิมแล้ว</item>
     </plurals>
     <string name="sim_import_failed_toast" msgid="5559267299793622705">"นำเข้าผู้ติดต่อจากซิมไม่สำเร็จ"</string>
+    <string name="connection_failed" msgid="7558253972301525402">"ไม่สามารถลงชื่อเข้าใช้ได้"</string>
     <string name="sim_import_dialog_title" msgid="6699935401502172530">"เลือกผู้ติดต่อที่จะนำเข้า"</string>
     <string name="sim_import_cancel_content_description" msgid="2388362519166414488">"ยกเลิกการนำเข้า"</string>
     <string name="auto_sync_off" msgid="2180147284456026587">"ซิงค์อัตโนมัติปิดอยู่ แตะเพื่อเปิด"</string>
diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml
index 42da07f..c7ca80a 100644
--- a/res/values-tl/strings.xml
+++ b/res/values-tl/strings.xml
@@ -621,6 +621,7 @@
       <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> na contact sa SIM ang na-import</item>
     </plurals>
     <string name="sim_import_failed_toast" msgid="5559267299793622705">"Hindi na-import ang mga contact sa SIM"</string>
+    <string name="connection_failed" msgid="7558253972301525402">"Hindi nakapag-sign in"</string>
     <string name="sim_import_dialog_title" msgid="6699935401502172530">"Piliin ang mga contact na ii-import"</string>
     <string name="sim_import_cancel_content_description" msgid="2388362519166414488">"Kanselahin ang pag-import"</string>
     <string name="auto_sync_off" msgid="2180147284456026587">"Naka-off ang auto-sync. I-tap upang i-on."</string>
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index 56d0a59..e95c112 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -621,6 +621,7 @@
       <item quantity="one">1 SIM kişisi içe aktarıldı</item>
     </plurals>
     <string name="sim_import_failed_toast" msgid="5559267299793622705">"SIM kişileri içe aktarılamadı"</string>
+    <string name="connection_failed" msgid="7558253972301525402">"Oturum açılamadı"</string>
     <string name="sim_import_dialog_title" msgid="6699935401502172530">"İçe aktarılacak kişileri seçin"</string>
     <string name="sim_import_cancel_content_description" msgid="2388362519166414488">"İçe aktarma iptal edilir"</string>
     <string name="auto_sync_off" msgid="2180147284456026587">"Otomatik senkronizasyon kapalı. Açmak için dokunun."</string>
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
index 1b00f71..926c786 100644
--- a/res/values-uk/strings.xml
+++ b/res/values-uk/strings.xml
@@ -647,6 +647,7 @@
       <item quantity="other">Імпортовано <xliff:g id="COUNT">%d</xliff:g> контакта із SIM-карти</item>
     </plurals>
     <string name="sim_import_failed_toast" msgid="5559267299793622705">"Не вдалось імпортувати контакти із SIM-карти"</string>
+    <string name="connection_failed" msgid="7558253972301525402">"Помилка входу"</string>
     <string name="sim_import_dialog_title" msgid="6699935401502172530">"Виберіть контакти для імпорту"</string>
     <string name="sim_import_cancel_content_description" msgid="2388362519166414488">"Скасувати імпорт"</string>
     <string name="auto_sync_off" msgid="2180147284456026587">"Автоматичну синхронізацію вимкнено. Торкніться, щоб увімкнути."</string>
diff --git a/res/values-ur-rPK/strings.xml b/res/values-ur-rPK/strings.xml
index 89a2f5b..786ae82 100644
--- a/res/values-ur-rPK/strings.xml
+++ b/res/values-ur-rPK/strings.xml
@@ -621,6 +621,7 @@
       <item quantity="one">‏1 SIM رابطہ درآمد ہو گیا</item>
     </plurals>
     <string name="sim_import_failed_toast" msgid="5559267299793622705">"‏SIM رابطے درآمد کرنے میں ناکام"</string>
+    <string name="connection_failed" msgid="7558253972301525402">"سائن ان کرنے میں ناکام"</string>
     <string name="sim_import_dialog_title" msgid="6699935401502172530">"درآمد کیلئے رابطے چنیں"</string>
     <string name="sim_import_cancel_content_description" msgid="2388362519166414488">"برآمد منسوخ کریں"</string>
     <string name="auto_sync_off" msgid="2180147284456026587">"خودکار مطابقت پذیری آف ہے۔ آن کرنے کیلئے تھپتھپائیں۔"</string>
diff --git a/res/values-uz-rUZ/strings.xml b/res/values-uz-rUZ/strings.xml
index 8c5752b..cd67456 100644
--- a/res/values-uz-rUZ/strings.xml
+++ b/res/values-uz-rUZ/strings.xml
@@ -621,6 +621,7 @@
       <item quantity="one">1 ta kontakt SIM kartadan import qilindi</item>
     </plurals>
     <string name="sim_import_failed_toast" msgid="5559267299793622705">"Kontaktlarni SIM kartadan import qilib bo‘lmadi"</string>
+    <string name="connection_failed" msgid="7558253972301525402">"Tizimga kirib bo‘lmadi"</string>
     <string name="sim_import_dialog_title" msgid="6699935401502172530">"Import qilish uchun kontaktlarni tanlang"</string>
     <string name="sim_import_cancel_content_description" msgid="2388362519166414488">"Import qilishni bekor qilish"</string>
     <string name="auto_sync_off" msgid="2180147284456026587">"Avto-sinxronlash o‘chiq. Uni yoqish uchun bosing."</string>
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
index 2b24c3e..236a151 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -621,6 +621,7 @@
       <item quantity="one">Đã nhập 1 liên hệ trên SIM</item>
     </plurals>
     <string name="sim_import_failed_toast" msgid="5559267299793622705">"Không nhập được liên hệ trên SIM"</string>
+    <string name="connection_failed" msgid="7558253972301525402">"Không đăng nhập được"</string>
     <string name="sim_import_dialog_title" msgid="6699935401502172530">"Chọn danh bạ để nhập"</string>
     <string name="sim_import_cancel_content_description" msgid="2388362519166414488">"Hủy nhập"</string>
     <string name="auto_sync_off" msgid="2180147284456026587">"Tự động đồng bộ hóa đang tắt. Hãy nhấn để bật."</string>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index a70909c..211096f 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -621,6 +621,7 @@
       <item quantity="one">已导入 1 位 SIM 卡联系人</item>
     </plurals>
     <string name="sim_import_failed_toast" msgid="5559267299793622705">"无法导入 SIM 卡联系人"</string>
+    <string name="connection_failed" msgid="7558253972301525402">"无法登录"</string>
     <string name="sim_import_dialog_title" msgid="6699935401502172530">"选择要导入的联系人"</string>
     <string name="sim_import_cancel_content_description" msgid="2388362519166414488">"取消导入"</string>
     <string name="auto_sync_off" msgid="2180147284456026587">"自动同步功能已关闭。点按即可开启。"</string>
diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml
index 6c23f22..3fd8040 100644
--- a/res/values-zh-rHK/strings.xml
+++ b/res/values-zh-rHK/strings.xml
@@ -621,6 +621,7 @@
       <item quantity="one">已匯入 1 位 SIM 聯絡人</item>
     </plurals>
     <string name="sim_import_failed_toast" msgid="5559267299793622705">"無法匯入 SIM 聯絡人"</string>
+    <string name="connection_failed" msgid="7558253972301525402">"無法登入"</string>
     <string name="sim_import_dialog_title" msgid="6699935401502172530">"選取要匯入的聯絡人"</string>
     <string name="sim_import_cancel_content_description" msgid="2388362519166414488">"取消匯入"</string>
     <string name="auto_sync_off" msgid="2180147284456026587">"自動同步已關閉。輕按以開啟。"</string>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index 74fdeda..870536a 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -621,6 +621,7 @@
       <item quantity="one">已匯入 1 位 SIM 卡聯絡人</item>
     </plurals>
     <string name="sim_import_failed_toast" msgid="5559267299793622705">"無法匯入 SIM 卡聯絡人"</string>
+    <string name="connection_failed" msgid="7558253972301525402">"無法登入"</string>
     <string name="sim_import_dialog_title" msgid="6699935401502172530">"選取要匯入的聯絡人"</string>
     <string name="sim_import_cancel_content_description" msgid="2388362519166414488">"取消匯入"</string>
     <string name="auto_sync_off" msgid="2180147284456026587">"自動同步功能已關閉。輕觸即可開啟。"</string>
diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml
index eb4fb7d..27fa643 100644
--- a/res/values-zu/strings.xml
+++ b/res/values-zu/strings.xml
@@ -621,6 +621,7 @@
       <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> oxhumana nabo be-SIM bangenisiwe</item>
     </plurals>
     <string name="sim_import_failed_toast" msgid="5559267299793622705">"Yehlulekile ukungenisa oxhumana nabo be-SIM"</string>
+    <string name="connection_failed" msgid="7558253972301525402">"Yehlulekile ukungena ngemvume"</string>
     <string name="sim_import_dialog_title" msgid="6699935401502172530">"Khetha othintana nabo ozobangenisa"</string>
     <string name="sim_import_cancel_content_description" msgid="2388362519166414488">"Khansela ukungenisa"</string>
     <string name="auto_sync_off" msgid="2180147284456026587">"Ukuvumelanisa okuzenzekelelayo kuvaliwe.Thepha ukuze uvule."</string>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 3afec1e..f835b6e 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -175,13 +175,13 @@
     <!-- Toast shown after two contacts have been linked by a user action without a name. [CHAR LIMIT=NONE] -->
     <string name="contactsJoinedMessage">Contacts linked</string>
 
-    <!-- Toast shown with names after user selected contacts are deleted by user action. [CHAR LIMIT=30] -->
+    <!-- Toast shown with names after user selected contacts are deleted by user action. [CHAR LIMIT=50] -->
     <string name="contacts_deleted_one_named_toast"><xliff:g id="name">%1$s</xliff:g> deleted</string>
 
-    <!-- Toast shown with names after user selected contacts are deleted by user action. [CHAR LIMIT=30] -->
+    <!-- Toast shown with names after user selected contacts are deleted by user action. [CHAR LIMIT=50] -->
     <string name="contacts_deleted_two_named_toast"><xliff:g id="name">%1$s</xliff:g> and <xliff:g id="name">%2$s</xliff:g> deleted</string>
 
-    <!-- Toast shown with names after user selected contacts are deleted by user action. [CHAR LIMIT=30] -->
+    <!-- Toast shown with names after user selected contacts are deleted by user action. [CHAR LIMIT=50] -->
     <string name="contacts_deleted_many_named_toast"><xliff:g id="name">%1$s</xliff:g>, <xliff:g id="name">%2$s</xliff:g>, <xliff:g id="name">%3$s</xliff:g>... deleted</string>
 
     <!-- Toast shown after contacts that the user has selected are deleted by a user action. [CHAR LIMIT=30] -->
@@ -1378,6 +1378,9 @@
     <!-- Action string for selecting a .vcf file to import contacts from [CHAR LIMIT=30] -->
     <string name="import_from_vcf_file" product="default">Import from .vcf file</string>
 
+    <!-- Dialog message asking the user for confirmation before starting to import contacts from a .vcf file. [CHAR LIMIT=NONE] -->
+    <string name="import_from_vcf_file_confirmation_message" product="default">Import contacts from vCard?</string>
+
     <!-- Message shown in a Dialog confirming a user's cancel request toward existing vCard import.
          The argument is file name for the vCard import the user wants to cancel.
          [CHAR LIMIT=128] -->
@@ -1824,6 +1827,8 @@
     <!-- Toast shown on settings screen when importing from SIM completes with an error -->
     <string name="sim_import_failed_toast">Failed to import SIM contacts</string>
 
+    <!-- Error message displayed to user when they started the app, but could not sign in to Google's servers. [CHAR LIMIT=50]-->
+    <string name="connection_failed">Failed to sign in</string>
     <!-- Title of SIM import dialog for accessibility; this isn't displayed but is announced
      by talkback when the window is shown -->
     <string name="sim_import_dialog_title">Select contacts to import</string>
diff --git a/src-bind/com/android/contactsbind/ObjectFactory.java b/src-bind/com/android/contactsbind/ObjectFactory.java
index d6799e2..e55b7a8 100644
--- a/src-bind/com/android/contactsbind/ObjectFactory.java
+++ b/src-bind/com/android/contactsbind/ObjectFactory.java
@@ -13,7 +13,9 @@
  */
 package com.android.contactsbind;
 
+import com.android.contacts.ContactsDrawerActivity;
 import com.android.contacts.common.logging.Logger;
+import com.android.contacts.common.util.NavigationDrawer;
 import com.android.contactsbind.search.AutocompleteHelper;
 import com.android.contacts.common.util.DeviceLocalAccountTypeFactory;
 
@@ -50,4 +52,8 @@
     public static Intent getContactSheetIntent(Context context, Uri contactLookupUri) {
         return null;
     }
+
+    public static NavigationDrawer getNavigationDrawer(ContactsDrawerActivity activity) {
+        return new NavigationDrawer.Default(activity);
+    }
 }
diff --git a/src/com/android/contacts/ContactsDrawerActivity.java b/src/com/android/contacts/ContactsDrawerActivity.java
index caaa326..5579fb9 100644
--- a/src/com/android/contacts/ContactsDrawerActivity.java
+++ b/src/com/android/contacts/ContactsDrawerActivity.java
@@ -26,12 +26,14 @@
 import android.os.Bundle;
 import android.provider.ContactsContract.Intents;
 import android.support.annotation.LayoutRes;
+import android.support.annotation.NonNull;
 import android.support.design.widget.NavigationView;
 import android.support.v4.view.GravityCompat;
 import android.support.v4.widget.DrawerLayout;
 import android.support.v7.app.ActionBarDrawerToggle;
 import android.support.v7.app.AppCompatActivity;
 import android.support.v7.widget.Toolbar;
+import android.text.TextUtils;
 import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.Menu;
@@ -58,6 +60,7 @@
 import com.android.contacts.common.util.AccountsListAdapter.AccountListFilter;
 import com.android.contacts.common.util.ImplicitIntentsUtil;
 import com.android.contacts.common.util.MaterialColorMapUtils;
+import com.android.contacts.common.util.NavigationDrawer;
 import com.android.contacts.common.util.ViewUtil;
 import com.android.contacts.editor.ContactEditorFragment;
 import com.android.contacts.editor.SelectAccountDialogFragment;
@@ -77,6 +80,7 @@
 import com.android.contactsbind.ObjectFactory;
 import com.android.contactsbind.experiments.Flags;
 
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
@@ -142,7 +146,7 @@
 
         private void stopSearchAndSelection() {
             final MultiSelectContactsListFragment listFragment;
-            if (isAllContactsView() || isAccountView()) {
+            if (isAccountView()) {
                 listFragment = getAllFragment();
             } else if (isGroupView()) {
                 listFragment = getGroupFragment();
@@ -188,7 +192,7 @@
     }
 
     protected ContactListFilterController mContactListFilterController;
-    protected DrawerLayout mDrawer;
+    protected DrawerLayout mDrawerLayout;
     protected ContactsActionBarDrawerToggle mToggle;
     protected Toolbar mToolbar;
     protected NavigationView mNavigationView;
@@ -198,6 +202,8 @@
     // The account the new group will be created under.
     private AccountWithDataSet mNewGroupAccount;
 
+    private NavigationDrawer mNavigationDrawer;
+
     // Checkable menu item lookup maps. Every map declared here should be added to
     // clearCheckedMenus() so that they can be cleared.
     // TODO find a better way to handle selected menu item state, when switching to fragments.
@@ -205,10 +211,18 @@
     protected Map<ContactListFilter, MenuItem> mFilterMenuMap = new HashMap<>();
     protected Map<Integer, MenuItem> mIdMenuMap = new HashMap<>();
 
+    private List<GroupListItem> mGroupListItems;
+    private List<ContactListFilter> mAccountFilterItems;
+    private AccountWithDataSet mCurrentAccount;
+
+    protected boolean mShouldShowAccountSwitcher;
+
     @Override
     protected void onCreate(Bundle savedState) {
         super.onCreate(savedState);
 
+        mShouldShowAccountSwitcher = Flags.getInstance().getBoolean(Experiments.ACCOUNT_SWITCHER);
+
         mContactListFilterController = ContactListFilterController.getInstance(this);
         mContactListFilterController.checkFilterValidity(false);
 
@@ -222,11 +236,12 @@
         ViewUtil.addRectangularOutlineProvider(findViewById(R.id.toolbar_parent), getResources());
 
         // Set up hamburger button.
-        mDrawer = (DrawerLayout) findViewById(R.id.drawer_layout);
-        mToggle = new ContactsActionBarDrawerToggle(this, mDrawer, mToolbar,
+        mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
+        mToggle = new ContactsActionBarDrawerToggle(this, mDrawerLayout, mToolbar,
                 R.string.navigation_drawer_open, R.string.navigation_drawer_close);
+        mDrawerLayout.setDrawerListener(mToggle);
+        mToggle.syncState();
 
-        mDrawer.setDrawerListener(mToggle);
         // Set fallback handler for when drawer is disabled.
         mToggle.setToolbarNavigationClickListener(new View.OnClickListener() {
             @Override
@@ -239,25 +254,31 @@
         if (savedState != null) {
             mCurrentView = ContactsView.values()[savedState.getInt(KEY_CONTACTS_VIEW)];
         } else {
-            mCurrentView = ContactsView.ALL_CONTACTS;
+            resetContactsView();
         }
 
-        // Set up hamburger menu items.
-        mNavigationView = (NavigationView) findViewById(R.id.nav_view);
-        mNavigationView.setNavigationItemSelectedListener(this);
-        setUpMenu();
-
         loadGroupsAndFilters();
 
         if (savedState != null && savedState.containsKey(KEY_NEW_GROUP_ACCOUNT)) {
             mNewGroupAccount = AccountWithDataSet.unstringify(
                     savedState.getString(KEY_NEW_GROUP_ACCOUNT));
         }
+
+        mNavigationDrawer = ObjectFactory.getNavigationDrawer(this);
+
+        mNavigationView = mNavigationDrawer.getNavigationView();
+        mNavigationView.setNavigationItemSelectedListener(this);
+        setUpMenu();
+    }
+
+    protected void resetContactsView() {
+        mCurrentView = mShouldShowAccountSwitcher
+                ? ContactsView.ACCOUNT_VIEW : ContactsView.ALL_CONTACTS;
     }
 
     public void setDrawerLockMode(boolean enabled) {
         // Prevent drawer from being opened by sliding from the start of screen.
-        mDrawer.setDrawerLockMode(enabled ? DrawerLayout.LOCK_MODE_UNLOCKED
+        mDrawerLayout.setDrawerLockMode(enabled ? DrawerLayout.LOCK_MODE_UNLOCKED
                 : DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
 
         // Order of these statements matter.
@@ -298,10 +319,14 @@
             menu.removeItem(R.id.nav_help);
         }
 
-        final MenuItem allContactsMenu = menu.findItem(R.id.nav_all_contacts);
-        mIdMenuMap.put(R.id.nav_all_contacts, allContactsMenu);
-        if (isAllContactsView()) {
-            updateMenuSelection(allContactsMenu);
+        if (!mShouldShowAccountSwitcher) {
+            final MenuItem allContactsMenu = menu.findItem(R.id.nav_all_contacts);
+            mIdMenuMap.put(R.id.nav_all_contacts, allContactsMenu);
+            if (isAllContactsView()) {
+                updateMenuSelection(allContactsMenu);
+            }
+        } else {
+            menu.removeItem(R.id.nav_all_contacts);
         }
     }
 
@@ -321,9 +346,11 @@
     @Override
     protected void onResume() {
         super.onResume();
-        if (mDrawer.isDrawerOpen(GravityCompat.START)) {
+        if (mDrawerLayout.isDrawerOpen(GravityCompat.START)) {
             updateStatusBarBackground();
         }
+        // Restoring recent accounts.
+        mNavigationDrawer.onResume();
     }
 
     public void updateStatusBarBackground() {
@@ -333,11 +360,12 @@
     public void updateStatusBarBackground(int color) {
         if (!CompatUtils.isLollipopCompatible()) return;
         if (color == -1) {
-            mDrawer.setStatusBarBackgroundColor(MaterialColorMapUtils.getStatusBarColor(this));
+            mDrawerLayout.setStatusBarBackgroundColor(
+                    MaterialColorMapUtils.getStatusBarColor(this));
         } else {
-            mDrawer.setStatusBarBackgroundColor(color);
+            mDrawerLayout.setStatusBarBackgroundColor(color);
         }
-        mDrawer.invalidate();
+        mDrawerLayout.invalidate();
         getWindow().setStatusBarColor(Color.TRANSPARENT);
     }
 
@@ -353,6 +381,24 @@
         mToggle.onConfigurationChanged(newConfig);
     }
 
+    @Override
+    protected void onStart() {
+        super.onStart();
+        mNavigationDrawer.onStart();
+    }
+
+    @Override
+    protected void onPause() {
+        mNavigationDrawer.onPause();
+        super.onPause();
+    }
+
+    @Override
+    protected void onStop() {
+        mNavigationDrawer.onStop();
+        super.onStop();
+    }
+
     // Set up fragment manager to load groups and filters.
     protected void loadGroupsAndFilters() {
         final FragmentManager fragmentManager = getFragmentManager();
@@ -393,15 +439,39 @@
     public void onGroupsLoaded(List<GroupListItem> groupListItems) {
         final Menu menu = mNavigationView.getMenu();
         final MenuItem groupsMenuItem = menu.findItem(R.id.nav_groups);
+        if (groupsMenuItem == null) {
+            return;
+        }
+        final SubMenu subMenu = groupsMenuItem.getSubMenu();
+        subMenu.removeGroup(R.id.nav_groups_items);
+
+        mGroupListItems = groupListItems;
+
+        if (mShouldShowAccountSwitcher && mCurrentAccount != null) {
+            updateGroupMenuForAccount(mCurrentAccount);
+        } else {
+            updateGroupMenuForAccount(null);
+        }
+    }
+
+    /**
+     * Update menu items in group section of navigation drawer based on {@link AccountWithDataSet}.
+     * If {@link AccountWithDataSet} is null, then we show groups in all accounts.
+     */
+    public void updateGroupMenuForAccount(AccountWithDataSet account) {
+        mCurrentAccount = account;
+
+        final Menu menu = mNavigationView.getMenu();
+        final MenuItem groupsMenuItem = menu.findItem(R.id.nav_groups);
         final SubMenu subMenu = groupsMenuItem.getSubMenu();
         subMenu.removeGroup(R.id.nav_groups_items);
         mGroupMenuMap = new HashMap<>();
 
         final GroupMetaData groupMetaData = getGroupMetaData();
 
-        if (groupListItems != null) {
+        if (mGroupListItems != null ) {
             // Add each group
-            for (final GroupListItem groupListItem : groupListItems) {
+            for (final GroupListItem groupListItem : getGroupsForCurrentAccount(mCurrentAccount)) {
                 if (GroupUtil.isEmptyFFCGroup(groupListItem)) {
                     continue;
                 }
@@ -425,7 +495,7 @@
                                 updateMenuSelection(menuItem);
                             }
                         });
-                        mDrawer.closeDrawer(GravityCompat.START);
+                        mDrawerLayout.closeDrawer(GravityCompat.START);
                         return true;
                     }
                 });
@@ -450,17 +520,33 @@
                         onCreateGroupMenuItemClicked();
                     }
                 });
-                mDrawer.closeDrawer(GravityCompat.START);
+                mDrawerLayout.closeDrawer(GravityCompat.START);
                 return true;
             }
         });
 
         if (isGroupView() && groupMetaData != null) {
-            updateGroupMenu(groupMetaData);
+            updateGroupMenuCheckedStatus(groupMetaData);
         }
     }
 
-    public void updateGroupMenu(GroupMetaData groupMetaData) {
+    private List<GroupListItem> getGroupsForCurrentAccount(AccountWithDataSet account) {
+        final List<GroupListItem> desiredGroupItems = new ArrayList<>();
+        if (account == null) {
+            desiredGroupItems.addAll(mGroupListItems);
+        } else {
+            for (GroupListItem group : mGroupListItems) {
+                if (TextUtils.equals(mCurrentAccount.name, group.getAccountName())
+                        && TextUtils.equals(mCurrentAccount.type, group.getAccountType())
+                        && TextUtils.equals(mCurrentAccount.dataSet, group.getDataSet())) {
+                    desiredGroupItems.add(group);
+                }
+            }
+        }
+        return desiredGroupItems;
+    }
+
+    public void updateGroupMenuCheckedStatus(GroupMetaData groupMetaData) {
         clearCheckedMenus();
         if (groupMetaData != null && mGroupMenuMap != null
                 && mGroupMenuMap.get(groupMetaData.groupId) != null) {
@@ -500,7 +586,12 @@
         final Account account = extras == null ? null :
                 (Account) extras.getParcelable(Intents.Insert.EXTRA_ACCOUNT);
         if (account == null) {
-            selectAccountForNewGroup();
+            if (mShouldShowAccountSwitcher && mCurrentAccount != null) {
+                // Create a new group in current account.
+                onAccountChosen(mCurrentAccount, /* extraArgs */ null);
+            } else {
+                selectAccountForNewGroup();
+            }
         } else {
             final String dataSet = extras == null
                     ? null : extras.getString(Intents.Insert.EXTRA_DATA_SET);
@@ -512,6 +603,11 @@
 
     @Override
     public void onFiltersLoaded(List<ContactListFilter> accountFilterItems) {
+        mAccountFilterItems = accountFilterItems;
+
+        // Don't show accounts in menu if we enable account switcher.
+        if (mShouldShowAccountSwitcher) return;
+
         final AccountDisplayInfoFactory accountDisplayFactory = AccountDisplayInfoFactory.
                 fromListFilters(this, accountFilterItems);
 
@@ -525,7 +621,6 @@
             return;
         }
 
-
         for (int i = 0; i < accountFilterItems.size(); i++) {
             final ContactListFilter filter = accountFilterItems.get(i);
             final AccountDisplayInfo displayableAccount =
@@ -549,7 +644,7 @@
                             updateMenuSelection(menuItem);
                         }
                     });
-                    mDrawer.closeDrawer(GravityCompat.START);
+                    mDrawerLayout.closeDrawer(GravityCompat.START);
                     return true;
                 }
             });
@@ -591,8 +686,21 @@
                 AppCompatActivity.RESULT_OK, intent);
     }
 
+    public void changeFilter(AccountWithDataSet account) {
+        for (ContactListFilter filter : mAccountFilterItems) {
+            if (account.equals(filter.toAccountWithDataSet())) {
+                final Intent intent = new Intent();
+                intent.putExtra(AccountFilterActivity.EXTRA_CONTACT_LIST_FILTER, filter);
+                AccountFilterUtil.handleAccountFilterResult(mContactListFilterController,
+                        AppCompatActivity.RESULT_OK, intent);
+                clearCheckedMenus();
+                break;
+            }
+        }
+    }
+
     @Override
-    public boolean onNavigationItemSelected(final MenuItem item) {
+    public boolean onNavigationItemSelected(@NonNull final MenuItem item) {
         final int id = item.getItemId();
         mToggle.runWhenIdle(new Runnable() {
             @Override
@@ -617,10 +725,14 @@
             }
         });
 
-        mDrawer.closeDrawer(GravityCompat.START);
+        mDrawerLayout.closeDrawer(GravityCompat.START);
         return true;
     }
 
+    public void closeDrawer() {
+        mDrawerLayout.closeDrawer(GravityCompat.START);
+    }
+
     private Intent createPreferenceIntent() {
         final Intent intent = new Intent(this, ContactsPreferenceActivity.class);
         intent.putExtra(ContactsPreferenceActivity.EXTRA_NEW_LOCAL_PROFILE,
@@ -629,12 +741,15 @@
     }
 
     public void switchToAllContacts() {
-        resetFilter();
+        if (mShouldShowAccountSwitcher) {
+            clearCheckedMenus();
+        } else {
+            resetFilter();
 
-        final Menu menu = mNavigationView.getMenu();
-        final MenuItem allContacts = menu.findItem(R.id.nav_all_contacts);
-        updateMenuSelection(allContacts);
-
+            final Menu menu = mNavigationView.getMenu();
+            final MenuItem allContacts = menu.findItem(R.id.nav_all_contacts);
+            updateMenuSelection(allContacts);
+        }
         setTitle(getString(R.string.contactsList));
     }
 
@@ -669,6 +784,9 @@
     }
 
     private void setMenuChecked(MenuItem menuItem, boolean checked) {
+        if (menuItem == null) {
+            return;
+        }
         menuItem.setCheckable(checked);
         menuItem.setChecked(checked);
     }
@@ -694,6 +812,7 @@
 
     @Override
     public void onAccountChosen(AccountWithDataSet account, Bundle extraArgs) {
+        if (account == null) return;
         mNewGroupAccount = account;
         GroupNameEditDialogFragment.newInstanceForCreation(
                 mNewGroupAccount, GroupUtil.ACTION_CREATE_GROUP)
diff --git a/src/com/android/contacts/DynamicShortcuts.java b/src/com/android/contacts/DynamicShortcuts.java
index f5363f6..fce2f8b 100644
--- a/src/com/android/contacts/DynamicShortcuts.java
+++ b/src/com/android/contacts/DynamicShortcuts.java
@@ -476,7 +476,7 @@
     }
 
     public static void reportShortcutUsed(Context context, String lookupKey) {
-        if (!CompatUtils.isLauncherShortcutCompatible()) return;
+        if (!CompatUtils.isLauncherShortcutCompatible() || lookupKey == null) return;
         final ShortcutManager shortcutManager = (ShortcutManager) context
                 .getSystemService(Context.SHORTCUT_SERVICE);
         shortcutManager.reportShortcutUsed(lookupKey);
diff --git a/src/com/android/contacts/activities/PeopleActivity.java b/src/com/android/contacts/activities/PeopleActivity.java
index 172015b..7c33069 100644
--- a/src/com/android/contacts/activities/PeopleActivity.java
+++ b/src/com/android/contacts/activities/PeopleActivity.java
@@ -280,13 +280,14 @@
             }
             if (Log.isLoggable(TAG, Log.VERBOSE)) Log.v(TAG, "Received group URI " + mGroupUri);
             switchView(ContactsView.GROUP_VIEW);
+            mMembersFragment.toastForSaveAction(intent.getAction());
             return;
         }
 
         if (isGroupDeleteAction(intent.getAction())) {
-            toast(R.string.groupDeletedToast);
             popSecondLevel();
-            mCurrentView = ContactsView.ALL_CONTACTS;
+            resetContactsView();
+            mMembersFragment.toastForSaveAction(intent.getAction());
             showFabWithAnimation(/* showFab */ true);
             return;
         }
@@ -300,6 +301,7 @@
             }
             if (Log.isLoggable(TAG, Log.VERBOSE)) Log.v(TAG, "Received group URI " + mGroupUri);
             switchView(ContactsView.GROUP_VIEW);
+            mMembersFragment.toastForSaveAction(intent.getAction());
         }
 
         setIntent(intent);
@@ -531,6 +533,9 @@
         final int providerStatus = mProviderStatusWatcher.getProviderStatus();
         final Menu menu = mNavigationView.getMenu();
         final MenuItem groupsMenuItem = menu.findItem(R.id.nav_groups);
+        if (groupsMenuItem == null) {
+            return;
+        }
         final SubMenu subMenu = groupsMenuItem.getSubMenu();
 
         // Reload groups and filters if provider status changes to "normal" and there's no groups
@@ -634,8 +639,8 @@
         }
 
         // Handle the back event in drawer first.
-        if (mDrawer.isDrawerOpen(GravityCompat.START)) {
-            mDrawer.closeDrawer(GravityCompat.START);
+        if (mDrawerLayout.isDrawerOpen(GravityCompat.START)) {
+            mDrawerLayout.closeDrawer(GravityCompat.START);
             return;
         }
 
@@ -702,7 +707,8 @@
             return true;
         }
 
-        if (!AccountFilterUtil.isAllContactsFilter(mContactListFilterController.getFilter())
+        if (!mShouldShowAccountSwitcher
+                && !AccountFilterUtil.isAllContactsFilter(mContactListFilterController.getFilter())
                 && !mAllFragment.isHidden()) {
             // If mAllFragment is hidden, then mContactsUnavailableFragment is visible so we
             // don't need to switch to all contacts.
@@ -797,6 +803,17 @@
         super.onFilterMenuItemClicked(intent);
     }
 
+    @Override
+    public void changeFilter(AccountWithDataSet account) {
+        super.changeFilter(account);
+        // We must pop second level first to "restart" mAllFragment, before changing filter.
+        if (isInSecondLevel()) {
+            popSecondLevel();
+            showFabWithAnimation(/* showFab */ true);
+        }
+        mCurrentView = ContactsView.ACCOUNT_VIEW;
+    }
+
     private void switchToOrUpdateGroupView(String action) {
         // If group fragment is active and visible, we simply update it.
         if (mMembersFragment != null && !mMembersFragment.isInactive()) {
@@ -859,7 +876,7 @@
             popSecondLevel();
         }
         mShouldSwitchToAllContacts = false;
-        mCurrentView = ContactsView.ALL_CONTACTS;
+        resetContactsView();
         showFabWithAnimation(/* showFab */ true);
         mAllFragment.scrollToTop();
 
diff --git a/src/com/android/contacts/common/Experiments.java b/src/com/android/contacts/common/Experiments.java
index e872694..65e14e6 100644
--- a/src/com/android/contacts/common/Experiments.java
+++ b/src/com/android/contacts/common/Experiments.java
@@ -21,6 +21,11 @@
 public final class Experiments {
 
     /**
+     * Experiment to enable account switcher
+     */
+    public static final String ACCOUNT_SWITCHER = "Account__account_switcher_enable";
+
+    /**
      * Experiment to enable assistant in left navigation drawer.
      */
     public static final String ASSISTANT = "Assistant__enable_assistant";
diff --git a/src/com/android/contacts/common/activity/RequestImportVCardPermissionsActivity.java b/src/com/android/contacts/common/activity/RequestImportVCardPermissionsActivity.java
index df98d12..5bddc77 100644
--- a/src/com/android/contacts/common/activity/RequestImportVCardPermissionsActivity.java
+++ b/src/com/android/contacts/common/activity/RequestImportVCardPermissionsActivity.java
@@ -43,9 +43,11 @@
      * to prompt the user for these permissions. Moreover, finish the current activity.
      *
      * This is designed to be called inside {@link android.app.Activity#onCreate}
+     *
+     * @param isCallerSelf whether the vcard import was started from the contacts app itself.
      */
-    public static boolean startPermissionActivity(Activity activity) {
-        return startPermissionActivity(activity, REQUIRED_PERMISSIONS,
+    public static boolean startPermissionActivity(Activity activity, boolean isCallerSelf) {
+        return startPermissionActivity(activity, REQUIRED_PERMISSIONS, isCallerSelf,
                 RequestImportVCardPermissionsActivity.class);
     }
 }
\ No newline at end of file
diff --git a/src/com/android/contacts/common/activity/RequestPermissionsActivity.java b/src/com/android/contacts/common/activity/RequestPermissionsActivity.java
index 4bbac73..7e75223 100644
--- a/src/com/android/contacts/common/activity/RequestPermissionsActivity.java
+++ b/src/com/android/contacts/common/activity/RequestPermissionsActivity.java
@@ -76,7 +76,11 @@
         if (permissions != null && permissions.length > 0
                 && isAllGranted(permissions, grantResults)) {
             mPreviousActivityIntent.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
-            startActivity(mPreviousActivityIntent);
+            if (mIsCallerSelf) {
+                startActivityForResult(mPreviousActivityIntent, 0);
+            } else {
+                startActivity(mPreviousActivityIntent);
+            }
             finish();
             overridePendingTransition(0, 0);
 
diff --git a/src/com/android/contacts/common/activity/RequestPermissionsActivityBase.java b/src/com/android/contacts/common/activity/RequestPermissionsActivityBase.java
index 999c545..ef591a5 100644
--- a/src/com/android/contacts/common/activity/RequestPermissionsActivityBase.java
+++ b/src/com/android/contacts/common/activity/RequestPermissionsActivityBase.java
@@ -45,6 +45,8 @@
     protected static final String EXTRA_STARTED_PERMISSIONS_ACTIVITY =
             "started_permissions_activity";
 
+    protected static final String EXTRA_IS_CALLER_SELF = "is_caller_self";
+
     private static final int PERMISSIONS_REQUEST_ALL_PERMISSIONS = 1;
 
     /**
@@ -55,10 +57,14 @@
 
     protected Intent mPreviousActivityIntent;
 
+    /** If true then start the target activity "for result" after permissions are granted. */
+    protected boolean mIsCallerSelf;
+
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         mPreviousActivityIntent = (Intent) getIntent().getExtras().get(PREVIOUS_ACTIVITY_INTENT);
+        mIsCallerSelf = getIntent().getBooleanExtra(EXTRA_IS_CALLER_SELF, false);
 
         // Only start a requestPermissions() flow when first starting this activity the first time.
         // The process is likely to be restarted during the permission flow (necessary to enable
@@ -76,10 +82,17 @@
      */
     protected static boolean startPermissionActivity(Activity activity,
             String[] requiredPermissions, Class<?> newActivityClass) {
+        return startPermissionActivity(activity, requiredPermissions, /* isCallerSelf */ false,
+                newActivityClass);
+    }
+
+    protected static boolean startPermissionActivity(Activity activity,
+                String[] requiredPermissions, boolean isCallerSelf, Class<?> newActivityClass) {
         if (!hasPermissions(activity, requiredPermissions)) {
             final Intent intent = new Intent(activity,  newActivityClass);
             activity.getIntent().putExtra(EXTRA_STARTED_PERMISSIONS_ACTIVITY, true);
             intent.putExtra(PREVIOUS_ACTIVITY_INTENT, activity.getIntent());
+            intent.putExtra(EXTRA_IS_CALLER_SELF, isCallerSelf);
             activity.startActivity(intent);
             activity.finish();
             return true;
diff --git a/src/com/android/contacts/common/list/ContactListFilter.java b/src/com/android/contacts/common/list/ContactListFilter.java
index 5b7472d..f3bac38 100644
--- a/src/com/android/contacts/common/list/ContactListFilter.java
+++ b/src/com/android/contacts/common/list/ContactListFilter.java
@@ -394,7 +394,7 @@
 
     /**
      * Returns true if this ContactListFilter contains at least one Google account.
-     * (see {@link #isGoogleAccountType)
+     * (see {@link #isGoogleAccountType )
      */
     public boolean isSyncable(List<AccountWithDataSet> accounts) {
         if (isGoogleAccountType() && filterType == ContactListFilter.FILTER_TYPE_ACCOUNT) {
@@ -410,8 +410,7 @@
                 // If we're showing all contacts and there is any Google account on the device then
                 // we're syncable.
                 for (AccountWithDataSet account : accounts) {
-                    if (GoogleAccountType.ACCOUNT_TYPE.equals(account.type)
-                            && account.dataSet == null) {
+                    if (account.isWritableGoogleAccount()) {
                         return true;
                     }
                 }
@@ -421,7 +420,7 @@
     }
 
     /**
-     * Returns the Google accounts (see {@link #isGoogleAccountType) for this ContactListFilter.
+     * Returns the Google accounts (see {@link #isGoogleAccountType ) for this ContactListFilter.
      */
     public List<Account> getSyncableAccounts(List<AccountWithDataSet> accounts) {
         final List<Account> syncableAccounts = new ArrayList<>();
@@ -433,8 +432,7 @@
                 || filterType == ContactListFilter.FILTER_TYPE_DEFAULT) {
             if (accounts != null && accounts.size() > 0) {
                 for (AccountWithDataSet account : accounts) {
-                    if (GoogleAccountType.ACCOUNT_TYPE.equals(account.type)
-                            && account.dataSet == null) {
+                    if (account.isWritableGoogleAccount()) {
                         syncableAccounts.add(new Account(account.name, account.type));
                     }
                 }
diff --git a/src/com/android/contacts/common/list/ContactListFilterController.java b/src/com/android/contacts/common/list/ContactListFilterController.java
index 4d3d6ad..5ceef18 100644
--- a/src/com/android/contacts/common/list/ContactListFilterController.java
+++ b/src/com/android/contacts/common/list/ContactListFilterController.java
@@ -81,6 +81,8 @@
      * which case, we should switch to the last saved filter in {@link SharedPreferences}.
      */
     public abstract void checkFilterValidity(boolean notifyListeners);
+
+    public abstract Context getContext();
 }
 
 /**
@@ -196,4 +198,9 @@
                 mFilter.accountName, mFilter.accountType, mFilter.dataSet);
         return accountTypeManager.contains(filterAccount, /* contactWritableOnly */ false);
     }
+
+    @Override
+    public Context getContext() {
+        return mContext;
+    }
 }
diff --git a/src/com/android/contacts/common/model/AccountTypeManager.java b/src/com/android/contacts/common/model/AccountTypeManager.java
index 4b0bcc1..bda470a 100644
--- a/src/com/android/contacts/common/model/AccountTypeManager.java
+++ b/src/com/android/contacts/common/model/AccountTypeManager.java
@@ -313,13 +313,13 @@
             return -1;
         } else if (a.name == null || a.type == null) {
             return 1;
-        } else if (isWritableGoogleAccount(a) && a.equals(mDefaultAccount)) {
+        } else if (a.isWritableGoogleAccount() && a.equals(mDefaultAccount)) {
             return -1;
-        } else if (isWritableGoogleAccount(b) && b.equals(mDefaultAccount)) {
+        } else if (b.isWritableGoogleAccount() && b.equals(mDefaultAccount)) {
             return 1;
-        } else if (isWritableGoogleAccount(a) && !isWritableGoogleAccount(b)) {
+        } else if (a.isWritableGoogleAccount() && !b.isWritableGoogleAccount()) {
             return -1;
-        } else if (isWritableGoogleAccount(b) && !isWritableGoogleAccount(a)) {
+        } else if (b.isWritableGoogleAccount() && !a.isWritableGoogleAccount()) {
             return 1;
         } else {
             int diff = a.name.compareToIgnoreCase(b.name);
@@ -339,10 +339,6 @@
             }
         }
     }
-
-    private static boolean isWritableGoogleAccount(AccountWithDataSet account) {
-        return GoogleAccountType.ACCOUNT_TYPE.equals(account.type) && account.dataSet == null;
-    }
 }
 
 class AccountTypeManagerImpl extends AccountTypeManager
diff --git a/src/com/android/contacts/common/model/account/AccountDisplayInfo.java b/src/com/android/contacts/common/model/account/AccountDisplayInfo.java
index f68fdd5..c5463d6 100644
--- a/src/com/android/contacts/common/model/account/AccountDisplayInfo.java
+++ b/src/com/android/contacts/common/model/account/AccountDisplayInfo.java
@@ -65,7 +65,7 @@
     }
 
     public boolean isGoogleAccount() {
-        return GoogleAccountType.ACCOUNT_TYPE.equals(mSource.type) && mSource.dataSet == null;
+        return mSource.isWritableGoogleAccount();
     }
 
     public boolean isDeviceAccount() {
diff --git a/src/com/android/contacts/common/model/account/AccountWithDataSet.java b/src/com/android/contacts/common/model/account/AccountWithDataSet.java
index 37f6652..38b9eee 100644
--- a/src/com/android/contacts/common/model/account/AccountWithDataSet.java
+++ b/src/com/android/contacts/common/model/account/AccountWithDataSet.java
@@ -79,6 +79,10 @@
         mAccountTypeWithDataSet = AccountTypeWithDataSet.get(type, dataSet);
     }
 
+    public boolean isWritableGoogleAccount() {
+        return GoogleAccountType.ACCOUNT_TYPE.equals(type) && dataSet == null;
+    }
+
     public boolean isNullAccount() {
         return name == null && type == null && dataSet == null;
     }
diff --git a/src/com/android/contacts/common/preference/ContactsPreferences.java b/src/com/android/contacts/common/preference/ContactsPreferences.java
index 8865e91..db16025 100644
--- a/src/com/android/contacts/common/preference/ContactsPreferences.java
+++ b/src/com/android/contacts/common/preference/ContactsPreferences.java
@@ -21,7 +21,6 @@
 import android.content.SharedPreferences;
 import android.content.SharedPreferences.Editor;
 import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
-import android.net.Uri;
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.Looper;
@@ -70,6 +69,10 @@
 
     public static final boolean PREF_DISPLAY_ONLY_PHONES_DEFAULT = false;
 
+    private static final String NAV_DRAWER_FIRST_RECENT = "NavigationDrawer_first_recent";
+
+    private static final String NAV_DRAWER_SECOND_RECENT = "NavigationDrawer_second_recent";
+
     /**
      * Value to use when a preference is unassigned and needs to be read from the shared preferences
      */
@@ -235,6 +238,26 @@
         return false;
     }
 
+    public void setRecentAccounts(@NonNull List<String> recentAccounts) {
+        final int size = recentAccounts.size();
+        final Editor editor = mPreferences.edit();
+        editor.putString(NAV_DRAWER_FIRST_RECENT, size > 0 ? recentAccounts.get(0) : null);
+        editor.putString(NAV_DRAWER_SECOND_RECENT, size > 1 ? recentAccounts.get(1) : null);
+        editor.commit();
+    }
+
+    public void getRecentAccounts(List<String> recentAccounts) {
+        recentAccounts.clear();
+        String recent = mPreferences.getString(NAV_DRAWER_FIRST_RECENT, null);
+        if (recent != null) {
+            recentAccounts.add(recent);
+        }
+        recent = mPreferences.getString(NAV_DRAWER_SECOND_RECENT, null);
+        if (recent != null) {
+            recentAccounts.add(recent);
+        }
+    }
+
     public void registerChangeListener(ChangeListener listener) {
         if (mListener != null) unregisterChangeListener();
 
diff --git a/src/com/android/contacts/common/util/AccountFilterUtil.java b/src/com/android/contacts/common/util/AccountFilterUtil.java
index 96c5113..ed72f67 100644
--- a/src/com/android/contacts/common/util/AccountFilterUtil.java
+++ b/src/com/android/contacts/common/util/AccountFilterUtil.java
@@ -32,6 +32,7 @@
 
 import com.android.contacts.R;
 import com.android.contacts.activities.ContactEditorActivity;
+import com.android.contacts.common.Experiments;
 import com.android.contacts.common.list.AccountFilterActivity;
 import com.android.contacts.common.list.ContactListFilter;
 import com.android.contacts.common.list.ContactListFilterController;
@@ -42,6 +43,7 @@
 import com.android.contacts.common.model.account.AccountWithDataSet;
 import com.android.contacts.common.preference.ContactsPreferences;
 import com.android.contactsbind.ObjectFactory;
+import com.android.contactsbind.experiments.Flags;
 
 import com.google.common.collect.Lists;
 
@@ -89,8 +91,7 @@
             if (filter.filterType == ContactListFilter.FILTER_TYPE_CUSTOM) {
                 filterController.selectCustomFilter();
             } else {
-                filterController.setContactListFilter(filter, /* persistent */
-                        filter.filterType == ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS);
+                filterController.setContactListFilter(filter, shouldPersistFilter(filter));
             }
         }
     }
@@ -132,6 +133,7 @@
     private static List<ContactListFilter> loadAccountFilters(Context context,
             DeviceLocalAccountTypeFactory deviceAccountTypeFactory) {
         final ArrayList<ContactListFilter> accountFilters = Lists.newArrayList();
+
         final AccountTypeManager accountTypeManager = AccountTypeManager.getInstance(context);
         final List<AccountWithDataSet> accounts = accountTypeManager.getSortedAccounts(
                 /* defaultAccount */ getDefaultAccount(context), /* contactWritableOnly */ true);
@@ -236,4 +238,11 @@
         return account.withFormattedName(context, R.string.title_from_other_accounts)
                 .getNameLabel().toString();
     }
+
+    public static boolean shouldPersistFilter(ContactListFilter filter) {
+        if (Flags.getInstance().getBoolean(Experiments.ACCOUNT_SWITCHER)) {
+            return true;
+        }
+        return filter != null && filter.isContactsFilterType();
+    }
 }
diff --git a/src/com/android/contacts/common/util/AccountSelectionUtil.java b/src/com/android/contacts/common/util/AccountSelectionUtil.java
index 4dc6ec9..9fca64d 100644
--- a/src/com/android/contacts/common/util/AccountSelectionUtil.java
+++ b/src/com/android/contacts/common/util/AccountSelectionUtil.java
@@ -16,6 +16,7 @@
 
 package com.android.contacts.common.util;
 
+import android.app.Activity;
 import android.app.AlertDialog;
 import android.app.Dialog;
 import android.content.Context;
@@ -53,53 +54,53 @@
     public static class AccountSelectedListener
             implements DialogInterface.OnClickListener {
 
-        final private Context mContext;
+        final private Activity mActivity;
         final private int mResId;
         final private int mSubscriptionId;
 
         final protected List<AccountWithDataSet> mAccountList;
 
-        public AccountSelectedListener(Context context, List<AccountWithDataSet> accountList,
+        public AccountSelectedListener(Activity activity, List<AccountWithDataSet> accountList,
                 int resId, int subscriptionId) {
             if (accountList == null || accountList.size() == 0) {
                 Log.e(LOG_TAG, "The size of Account list is 0.");
             }
-            mContext = context;
+            mActivity = activity;
             mAccountList = accountList;
             mResId = resId;
             mSubscriptionId = subscriptionId;
         }
 
-        public AccountSelectedListener(Context context, List<AccountWithDataSet> accountList,
+        public AccountSelectedListener(Activity activity, List<AccountWithDataSet> accountList,
                 int resId) {
             // Subscription id is only needed for importing from SIM card. We can safely ignore
             // its value for SD card importing.
-            this(context, accountList, resId, /* subscriptionId = */ -1);
+            this(activity, accountList, resId, /* subscriptionId = */ -1);
         }
 
         public void onClick(DialogInterface dialog, int which) {
             dialog.dismiss();
-            doImport(mContext, mResId, mAccountList.get(which), mSubscriptionId);
+            doImport(mActivity, mResId, mAccountList.get(which), mSubscriptionId);
         }
     }
 
-    public static Dialog getSelectAccountDialog(Context context, int resId) {
-        return getSelectAccountDialog(context, resId, null, null);
+    public static Dialog getSelectAccountDialog(Activity activity, int resId) {
+        return getSelectAccountDialog(activity, resId, null, null);
     }
 
-    public static Dialog getSelectAccountDialog(Context context, int resId,
+    public static Dialog getSelectAccountDialog(Activity activity, int resId,
             DialogInterface.OnClickListener onClickListener) {
-        return getSelectAccountDialog(context, resId, onClickListener, null);
+        return getSelectAccountDialog(activity, resId, onClickListener, null);
     }
 
     /**
      * When OnClickListener or OnCancelListener is null, uses a default listener.
      * The default OnCancelListener just closes itself with {@link Dialog#dismiss()}.
      */
-    public static Dialog getSelectAccountDialog(Context context, int resId,
+    public static Dialog getSelectAccountDialog(Activity activity, int resId,
             DialogInterface.OnClickListener onClickListener,
             DialogInterface.OnCancelListener onCancelListener) {
-        final AccountTypeManager accountTypes = AccountTypeManager.getInstance(context);
+        final AccountTypeManager accountTypes = AccountTypeManager.getInstance(activity);
         final List<AccountWithDataSet> writableAccountList = accountTypes.getAccounts(true);
 
         Log.i(LOG_TAG, "The number of available accounts: " + writableAccountList.size());
@@ -108,12 +109,12 @@
 
         // Wrap our context to inflate list items using correct theme
         final Context dialogContext = new ContextThemeWrapper(
-                context, android.R.style.Theme_Light);
+                activity, android.R.style.Theme_Light);
         final LayoutInflater dialogInflater = (LayoutInflater)dialogContext
                 .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
         final ArrayAdapter<AccountWithDataSet> accountAdapter =
             new ArrayAdapter<AccountWithDataSet>(
-                    context, R.layout.account_selector_list_item_condensed, writableAccountList) {
+                    activity, R.layout.account_selector_list_item_condensed, writableAccountList) {
             @Override
             public View getView(int position, View convertView, ViewGroup parent) {
                 if (convertView == null) {
@@ -141,7 +142,7 @@
 
         if (onClickListener == null) {
             AccountSelectedListener accountSelectedListener =
-                new AccountSelectedListener(context, writableAccountList, resId);
+                new AccountSelectedListener(activity, writableAccountList, resId);
             onClickListener = accountSelectedListener;
         }
         if (onCancelListener == null) {
@@ -151,8 +152,8 @@
                 }
             };
         }
-        final AlertDialog.Builder builder = new AlertDialog.Builder(context);
-        final TextView title = (TextView) View.inflate(context, R.layout.dialog_title, null);
+        final AlertDialog.Builder builder = new AlertDialog.Builder(activity);
+        final TextView title = (TextView) View.inflate(activity, R.layout.dialog_title, null);
         title.setText(R.string.dialog_new_contact_account);
         builder.setCustomTitle(title);
         builder.setSingleChoiceItems(accountAdapter, 0, onClickListener);
@@ -161,12 +162,12 @@
         return result;
     }
 
-    public static void doImport(Context context, int resId, AccountWithDataSet account,
+    public static void doImport(Activity activity, int resId, AccountWithDataSet account,
             int subscriptionId) {
         if (resId == R.string.import_from_sim) {
-            doImportFromSim(context, account, subscriptionId);
+            doImportFromSim(activity, account, subscriptionId);
         } else if (resId == R.string.import_from_vcf_file) {
-            doImportFromVcfFile(context, account);
+            doImportFromVcfFile(activity, account);
         }
     }
 
@@ -184,8 +185,8 @@
         context.startActivity(importIntent);
     }
 
-    public static void doImportFromVcfFile(Context context, AccountWithDataSet account) {
-        Intent importIntent = new Intent(context, ImportVCardActivity.class);
+    public static void doImportFromVcfFile(Activity activity, AccountWithDataSet account) {
+        Intent importIntent = new Intent(activity, ImportVCardActivity.class);
         if (account != null) {
             importIntent.putExtra("account_name", account.name);
             importIntent.putExtra("account_type", account.type);
@@ -198,6 +199,6 @@
         }
         mVCardShare = false;
         mPath = null;
-        context.startActivity(importIntent);
+        activity.startActivityForResult(importIntent, 0);
     }
 }
diff --git a/src/com/android/contacts/common/util/DeviceLocalAccountTypeFactory.java b/src/com/android/contacts/common/util/DeviceLocalAccountTypeFactory.java
index 040a6b4..e54b31f 100644
--- a/src/com/android/contacts/common/util/DeviceLocalAccountTypeFactory.java
+++ b/src/com/android/contacts/common/util/DeviceLocalAccountTypeFactory.java
@@ -52,7 +52,6 @@
 
         public static boolean isLocalAccountType(DeviceLocalAccountTypeFactory factory,
                 String type) {
-
             return isLocalAccountType(factory.classifyAccount(type));
         }
     }
diff --git a/src/com/android/contacts/common/util/NavigationDrawer.java b/src/com/android/contacts/common/util/NavigationDrawer.java
new file mode 100644
index 0000000..c60f029
--- /dev/null
+++ b/src/com/android/contacts/common/util/NavigationDrawer.java
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2016 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.contacts.common.util;
+
+import android.support.design.widget.NavigationView;
+import android.support.v7.app.AppCompatActivity;
+
+import com.android.contacts.R;
+
+public interface NavigationDrawer {
+    void onStart();
+    void onResume();
+    void onPause();
+    void onStop();
+    NavigationView getNavigationView();
+
+    class Default implements NavigationDrawer {
+
+        AppCompatActivity mActivity;
+
+        public Default(AppCompatActivity activity) {
+            mActivity = activity;
+        }
+
+        @Override
+        public void onStart() {}
+
+        @Override
+        public void onResume() {}
+
+        @Override
+        public void onPause() {}
+
+        @Override
+        public void onStop() {}
+
+        @Override
+        public NavigationView getNavigationView() {
+            return (NavigationView) mActivity.findViewById(R.id.nav_view);
+        }
+    }
+}
diff --git a/src/com/android/contacts/common/vcard/ImportVCardActivity.java b/src/com/android/contacts/common/vcard/ImportVCardActivity.java
index 93ab944..d7b64b4 100644
--- a/src/com/android/contacts/common/vcard/ImportVCardActivity.java
+++ b/src/com/android/contacts/common/vcard/ImportVCardActivity.java
@@ -75,7 +75,7 @@
  * any Dialog in the instance. So this code is careless about the management around managed
  * dialogs stuffs (like how onCreateDialog() is used).
  */
-public class ImportVCardActivity extends Activity {
+public class ImportVCardActivity extends Activity implements ImportVCardDialogFragment.Listener {
     private static final String LOG_TAG = "VCardImport";
 
     private static final int SELECT_ACCOUNT = 0;
@@ -546,8 +546,8 @@
         // Reading uris from non-storage needs the permission granted from the source intent,
         // instead of permissions from RequestImportVCardPermissionActivity. So skipping requesting
         // permissions from RequestImportVCardPermissionActivity for uris from non-storage source.
-        if (isStorageUri(sourceUri)
-                && RequestImportVCardPermissionsActivity.startPermissionActivity(this)) {
+        if (isStorageUri(sourceUri) && RequestImportVCardPermissionsActivity
+                .startPermissionActivity(this, isCallerSelf(this))) {
             return;
         }
 
@@ -571,7 +571,8 @@
         }
 
         // Always request required permission for contacts before importing the vcard.
-        if (RequestImportVCardPermissionsActivity.startPermissionActivity(this)) {
+        if (RequestImportVCardPermissionsActivity.startPermissionActivity(this,
+                isCallerSelf(this))) {
             return;
         }
 
@@ -603,10 +604,44 @@
             }
         }
 
+        if (isCallerSelf(this)) {
+            startImport(sourceUri, sourceDisplayName);
+        } else {
+            ImportVCardDialogFragment.show(this, sourceUri, sourceDisplayName);
+        }
+    }
+
+    private static boolean isCallerSelf(Activity activity) {
+        // {@link Activity#getCallingActivity()} is a safer alternative to
+        // {@link Activity#getCallingPackage()} that works around a
+        // framework bug where getCallingPackage() can sometimes return null even when the
+        // current activity *was* in fact launched via a startActivityForResult() call.
+        //
+        // (The bug happens if the task stack needs to be re-created by the framework after
+        // having been killed due to memory pressure or by the "Don't keep activities"
+        // developer option; see bug 7494866 for the full details.)
+        //
+        // Turns out that {@link Activity#getCallingActivity()} *does* return correct info
+        // even in the case where getCallingPackage() is broken, so the workaround is simply
+        // to get the package name from getCallingActivity().getPackageName() instead.
+        final ComponentName callingActivity = activity.getCallingActivity();
+        if (callingActivity == null) return false;
+        final String packageName = callingActivity.getPackageName();
+        if (packageName == null) return false;
+        return packageName.equals(activity.getApplicationContext().getPackageName());
+    }
+
+    @Override
+    public void onImportVCardConfirmed(Uri sourceUri, String sourceDisplayName) {
         startImport(sourceUri, sourceDisplayName);
     }
 
     @Override
+    public void onImportVCardDenied() {
+        finish();
+    }
+
+    @Override
     public void onActivityResult(int requestCode, int resultCode, Intent intent) {
         if (requestCode == SELECT_ACCOUNT) {
             if (resultCode == Activity.RESULT_OK) {
diff --git a/src/com/android/contacts/common/vcard/ImportVCardDialogFragment.java b/src/com/android/contacts/common/vcard/ImportVCardDialogFragment.java
new file mode 100644
index 0000000..b1f1c3b
--- /dev/null
+++ b/src/com/android/contacts/common/vcard/ImportVCardDialogFragment.java
@@ -0,0 +1,91 @@
+/*
+ * Copyright (C) 2016 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.contacts.common.vcard;
+
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.app.Dialog;
+import android.app.DialogFragment;
+import android.content.DialogInterface;
+import android.net.Uri;
+import android.os.Bundle;
+
+import com.android.contacts.R;
+
+/** Asks for confirmation before importing contacts from a vcard. */
+public class ImportVCardDialogFragment extends DialogFragment {
+
+    static final String TAG = "importVCardDialog";
+
+    private static final String ARG_SOURCE_URI = "sourceUri";
+    private static final String ARG_SOURCE_DISPLAY_NAME = "sourceDisplayName";
+
+    /** Callbacks for hosts of the {@link ImportVCardDialogFragment}. */
+    public interface Listener {
+
+        /** Invoked after the user has confirmed that contacts should be imported. */
+        void onImportVCardConfirmed(Uri sourceUri, String sourceDisplayName);
+
+        /** Invoked after the user has rejected importing contacts. */
+        void onImportVCardDenied();
+    }
+
+    /** Displays the dialog asking for confirmation before importing contacts. */
+    public static void show(Activity activity, Uri sourceUri,
+            String sourceDisplayName) {
+        if (!(activity instanceof Listener)) {
+            throw new IllegalArgumentException(
+                    "Activity must implement " + Listener.class.getName());
+        }
+
+        final Bundle args = new Bundle();
+        args.putParcelable(ARG_SOURCE_URI, sourceUri);
+        args.putString(ARG_SOURCE_DISPLAY_NAME, sourceDisplayName);
+
+        final ImportVCardDialogFragment dialog = new ImportVCardDialogFragment();
+        dialog.setArguments(args);
+        dialog.show(activity.getFragmentManager(), TAG);
+    }
+
+    @Override
+    public Dialog onCreateDialog(Bundle savedInstanceState) {
+        final Uri sourceUri = getArguments().getParcelable(ARG_SOURCE_URI);
+        final String sourceDisplayName = getArguments().getString(ARG_SOURCE_DISPLAY_NAME);
+
+        return new AlertDialog.Builder(getActivity())
+                .setIconAttribute(android.R.attr.alertDialogIcon)
+                .setMessage(R.string.import_from_vcf_file_confirmation_message)
+                .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
+                    @Override
+                    public void onClick(DialogInterface dialog, int whichButton) {
+                        final Listener listener = (Listener) getActivity();
+                        if (listener != null) {
+                            listener.onImportVCardConfirmed(sourceUri, sourceDisplayName);
+                        }
+                    }
+                })
+                .setNegativeButton(android.R.string.no, new DialogInterface.OnClickListener() {
+                    @Override
+                    public void onClick(DialogInterface dialog, int whichButton) {
+                        final Listener listener = (Listener) getActivity();
+                        if (listener != null) {
+                            listener.onImportVCardDenied();
+                        }
+                    }
+                })
+                .create();
+    }
+}
diff --git a/src/com/android/contacts/editor/PickRawContactDialogFragment.java b/src/com/android/contacts/editor/PickRawContactDialogFragment.java
index aa65b01..6b0051e 100644
--- a/src/com/android/contacts/editor/PickRawContactDialogFragment.java
+++ b/src/com/android/contacts/editor/PickRawContactDialogFragment.java
@@ -192,6 +192,11 @@
         }
     }
 
+    @Override
+    public Context getContext() {
+        return getActivity();
+    }
+
     public void setCursor(Cursor cursor) {
         if (mAdapter != null) {
             mAdapter.swapCursor(cursor);
diff --git a/src/com/android/contacts/group/GroupMembersFragment.java b/src/com/android/contacts/group/GroupMembersFragment.java
index 2f61cdd..3720614 100644
--- a/src/com/android/contacts/group/GroupMembersFragment.java
+++ b/src/com/android/contacts/group/GroupMembersFragment.java
@@ -64,6 +64,7 @@
 import com.android.contacts.list.ContactsRequest;
 import com.android.contacts.list.MultiSelectContactsListFragment;
 import com.android.contacts.list.UiIntentActions;
+import com.android.contactsbind.FeedbackHelper;
 import com.android.contactsbind.experiments.Flags;
 import com.google.common.primitives.Longs;
 
@@ -310,6 +311,7 @@
                 ContactsContract.Data.CONTACT_ID,
                 ContactsContract.CommonDataKinds.Email._ID,
                 ContactsContract.Data.IS_SUPER_PRIMARY,
+                ContactsContract.Data.TIMES_USED,
                 ContactsContract.Data.DATA1
         };
 
@@ -317,13 +319,47 @@
                 ContactsContract.Data.CONTACT_ID,
                 ContactsContract.CommonDataKinds.Phone._ID,
                 ContactsContract.Data.IS_SUPER_PRIMARY,
+                ContactsContract.Data.TIMES_USED,
                 ContactsContract.Data.DATA1
         };
 
         public static final int CONTACT_ID = 0;
         public static final int ITEM_ID = 1;
         public static final int PRIMARY = 2;
-        public static final int DATA1 = 3;
+        public static final int TIMES_USED = 3;
+        public static final int DATA1 = 4;
+    }
+
+    /**
+     * Helper class for managing data related to contacts and emails/phone numbers.
+     */
+    private class ContactDataHelperClass {
+
+        private List<String> items = new ArrayList<>();
+        private String mostUsedItemId = null;
+        private int mostUsedTimes;
+        private String primaryItemId = null;
+
+        public void addItem(String item, int timesUsed, boolean primaryFlag) {
+            if (mostUsedItemId == null || timesUsed > mostUsedTimes) {
+                mostUsedItemId = item;
+                mostUsedTimes = timesUsed;
+            }
+            if (primaryFlag) {
+                primaryItemId = item;
+            }
+            items.add(item);
+        }
+
+        public boolean hasDefaultItem() {
+            return primaryItemId != null || items.size() == 1;
+        }
+
+        public String getDefaultSelectionItemId() {
+            return primaryItemId != null
+                    ? primaryItemId
+                    : mostUsedItemId;
+        }
     }
 
     private List<String> getSendToDataForIds(long[] ids, String scheme) {
@@ -365,10 +401,8 @@
         if(ids == null || ids.length == 0) return;
 
         // Get emails or phone numbers
-        // encounteredIds <contact_id, <item_id, is_super_primary>>
-        final Map<String, Map<String, Boolean>> encounteredIds = new HashMap<>();
-        // primaryItems <contact_id, has_super_primary>
-        final Map<String, Boolean> primaryItems = new HashMap<>();
+        // contactMap <contact_id, contact_data>
+        final Map<String, ContactDataHelperClass> contactMap = new HashMap<>();
         // itemList <item_data>
         final List<String> itemList = new ArrayList<>();
         final String sIds = GroupUtil.convertArrayToString(ids);
@@ -393,20 +427,18 @@
                 final String contactId = cursor.getString(Query.CONTACT_ID);
                 final String itemId = cursor.getString(Query.ITEM_ID);
                 final boolean isPrimary = cursor.getInt(Query.PRIMARY) != 0;
+                final int timesUsed = cursor.getInt(Query.TIMES_USED);
                 final String data = cursor.getString(Query.DATA1);
 
-                if (!encounteredIds.containsKey(contactId)) {
-                    encounteredIds.put(contactId, new HashMap<String, Boolean>());
-                }
-                final Boolean prevHasSuperPrimary = primaryItems.get(contactId);
-                final boolean hasPrimary = prevHasSuperPrimary == null
-                        ? isPrimary
-                        : prevHasSuperPrimary || isPrimary;
-                primaryItems.put(contactId, hasPrimary);
-
                 if (!TextUtils.isEmpty(data)) {
-                    final Map<String, Boolean> itemMap = encounteredIds.get(contactId);
-                    itemMap.put(itemId, isPrimary);
+                    final ContactDataHelperClass contact;
+                    if (!contactMap.containsKey(contactId)) {
+                        contact = new ContactDataHelperClass();
+                        contactMap.put(contactId, contact);
+                    } else {
+                        contact = contactMap.get(contactId);
+                    }
+                    contact.addItem(itemId, timesUsed, isPrimary);
                     itemList.add(data);
                 }
             }
@@ -414,18 +446,15 @@
             cursor.close();
         }
 
-        // Start picker if a contact has multiple items with no superPrimary
-        for (Map.Entry<String, Map<String, Boolean>> i : encounteredIds.entrySet()) {
-            boolean hasSuperPrimary = primaryItems.get(i.getKey());
-            if (i.getValue().size() > 1 && !hasSuperPrimary) {
+        // Start picker if a contact does not have a default
+        for (ContactDataHelperClass i : contactMap.values()) {
+            if (!i.hasDefaultItem()) {
                 // Build list of default selected item ids
                 final List<Long> defaultSelection = new ArrayList<>();
-                for (Map.Entry<String, Map<String, Boolean>> j : encounteredIds.entrySet()) {
-                    for (Map.Entry<String, Boolean> k : j.getValue().entrySet()) {
-                        final String itemId = k.getKey();
-                        if (j.getValue().size() == 1 || k.getValue()) {
-                            defaultSelection.add(Long.parseLong(itemId));
-                        }
+                for (ContactDataHelperClass j : contactMap.values()) {
+                    final String selectionItemId = j.getDefaultSelectionItemId();
+                    if (selectionItemId != null) {
+                        defaultSelection.add(Long.parseLong(selectionItemId));
                     }
                 }
                 final long[] defaultSelectionArray = Longs.toArray(defaultSelection);
@@ -434,7 +463,7 @@
             }
         }
 
-        if (itemList.size() == 0 || encounteredIds.size() < ids.length) {
+        if (itemList.size() == 0 || contactMap.size() < ids.length) {
             Toast.makeText(getContext(), ContactsUtils.SCHEME_MAILTO.equals(sendScheme)
                             ? getString(R.string.groupSomeContactsNoEmailsToast)
                             : getString(R.string.groupSomeContactsNoPhonesToast),
@@ -761,7 +790,7 @@
         maybeAttachCheckBoxListener();
 
         mActivity.setTitle(mGroupMetaData.groupName);
-        mActivity.updateGroupMenu(mGroupMetaData);
+        mActivity.updateGroupMenuCheckedStatus(mGroupMetaData);
         mActivity.invalidateOptionsMenu();
 
         // Start loading the group members
@@ -882,9 +911,7 @@
     }
 
     public void updateExistingGroupFragment(Uri newGroupUri, String action) {
-        if (!GroupUtil.ACTION_SWITCH_GROUP.equals(action)) {
-            toast(getToastMessageForSaveAction(action));
-        }
+        toastForSaveAction(action);
 
         if (isEditMode() && getGroupCount() == 1) {
             // If we're deleting the last group member, exit edit mode
@@ -897,19 +924,30 @@
         }
     }
 
-    private static int getToastMessageForSaveAction(String action) {
+    public void toastForSaveAction(String action) {
+        int id = -1;
         switch(action) {
             case GroupUtil.ACTION_UPDATE_GROUP:
-                return R.string.groupUpdatedToast;
-            case GroupUtil.ACTION_ADD_TO_GROUP:
-                return R.string.groupMembersAddedToast;
+                id = R.string.groupUpdatedToast;
+                break;
             case GroupUtil.ACTION_REMOVE_FROM_GROUP:
-                return R.string.groupMembersRemovedToast;
+                id = R.string.groupMembersRemovedToast;
+                break;
             case GroupUtil.ACTION_CREATE_GROUP:
-                return R.string.groupCreatedToast;
+                id = R.string.groupCreatedToast;
+                break;
+            case GroupUtil.ACTION_ADD_TO_GROUP:
+                id = R.string.groupMembersAddedToast;
+                break;
+            case GroupUtil.ACTION_SWITCH_GROUP:
+                // No toast associated with this action.
+                break;
             default:
-                throw new IllegalArgumentException("Unhandled contact save action " + action);
+                FeedbackHelper.sendFeedback(getContext(), TAG,
+                        "toastForSaveAction passed unknown action: " + action,
+                        new IllegalArgumentException("Unhandled contact save action " + action));
         }
+        toast(id);
     }
 
     private void toast(int resId) {
diff --git a/src/com/android/contacts/list/DefaultContactBrowseListFragment.java b/src/com/android/contacts/list/DefaultContactBrowseListFragment.java
index 331c566..c407dcc 100644
--- a/src/com/android/contacts/list/DefaultContactBrowseListFragment.java
+++ b/src/com/android/contacts/list/DefaultContactBrowseListFragment.java
@@ -29,6 +29,7 @@
 import android.content.res.Resources;
 import android.database.Cursor;
 import android.graphics.Rect;
+import android.graphics.drawable.Drawable;
 import android.net.Uri;
 import android.os.Bundle;
 import android.os.Handler;
@@ -72,8 +73,13 @@
 import com.android.contacts.common.logging.Logger;
 import com.android.contacts.common.logging.ScreenEvent;
 import com.android.contacts.common.model.AccountTypeManager;
+import com.android.contacts.common.model.account.AccountDisplayInfo;
+import com.android.contacts.common.model.account.AccountDisplayInfoFactory;
+import com.android.contacts.common.model.account.AccountType;
 import com.android.contacts.common.model.account.AccountWithDataSet;
+import com.android.contacts.common.preference.ContactsPreferences;
 import com.android.contacts.common.util.AccountFilterUtil;
+import com.android.contacts.common.util.DeviceLocalAccountTypeFactory;
 import com.android.contacts.common.util.ImplicitIntentsUtil;
 import com.android.contacts.interactions.ContactDeletionInteraction;
 import com.android.contacts.interactions.ContactMultiDeletionInteraction;
@@ -83,6 +89,7 @@
 import com.android.contacts.util.SyncUtil;
 import com.android.contactsbind.experiments.Flags;
 import com.android.contactsbind.FeatureHighlightHelper;
+import com.android.contactsbind.ObjectFactory;
 
 import java.util.List;
 import java.util.Locale;
@@ -156,6 +163,7 @@
     private ContactsDrawerActivity mActivity;
     private ContactsRequest mContactsRequest;
     private ContactListFilterController mContactListFilterController;
+    private DeviceLocalAccountTypeFactory mDeviceLocalFactory;
 
     private final ActionBarAdapter.Listener mActionBarListener = new ActionBarAdapter.Listener() {
         @Override
@@ -451,13 +459,14 @@
         mIsRecreatedInstance = (savedState != null);
         mContactListFilterController = ContactListFilterController.getInstance(getContext());
         mContactListFilterController.checkFilterValidity(false);
-        // Use FILTER_TYPE_ALL_ACCOUNTS filter if the instance is not a re-created one.
-        // This is useful when user upgrades app while an account filter was
-        // stored in sharedPreference in a previous version of Contacts app.
-        final ContactListFilter filter = mIsRecreatedInstance
-                ? getFilter()
-                : AccountFilterUtil.createContactsFilter(getContext());
-        setContactListFilter(filter);
+        mDeviceLocalFactory = ObjectFactory.getDeviceLocalAccountTypeFactory(getContext());
+        if (!Flags.getInstance().getBoolean(Experiments.ACCOUNT_SWITCHER)
+                && !mIsRecreatedInstance) {
+            // Use FILTER_TYPE_ALL_ACCOUNTS filter if the instance is not a re-created one.
+            // This is useful when user upgrades app while an account filter was
+            // stored in sharedPreference in a previous version of Contacts app.
+            setContactListFilter(AccountFilterUtil.createContactsFilter(getContext()));
+        }
     }
 
     @Override
@@ -956,7 +965,7 @@
      */
     private void setContactListFilter(ContactListFilter filter) {
         mContactListFilterController.setContactListFilter(filter,
-                /* persistent */ isAllContactsFilter(filter));
+                AccountFilterUtil.shouldPersistFilter(filter));
     }
 
     @Override
diff --git a/src/com/android/contacts/quickcontact/QuickContactActivity.java b/src/com/android/contacts/quickcontact/QuickContactActivity.java
index 3597607..52c66d5 100644
--- a/src/com/android/contacts/quickcontact/QuickContactActivity.java
+++ b/src/com/android/contacts/quickcontact/QuickContactActivity.java
@@ -2275,7 +2275,7 @@
                     return;
                 }
 
-                if (!mIsRecreatedInstance && !mShortcutUsageReported) {
+                if (!mIsRecreatedInstance && !mShortcutUsageReported && data != null) {
                     mShortcutUsageReported = true;
                     DynamicShortcuts.reportShortcutUsed(QuickContactActivity.this,
                             data.getLookupKey());
diff --git a/src/com/android/contacts/util/SharedPreferenceUtil.java b/src/com/android/contacts/util/SharedPreferenceUtil.java
index 80e4825..cee54b9 100644
--- a/src/com/android/contacts/util/SharedPreferenceUtil.java
+++ b/src/com/android/contacts/util/SharedPreferenceUtil.java
@@ -18,8 +18,6 @@
 
 import android.content.Context;
 import android.content.SharedPreferences;
-import android.telephony.SubscriptionInfo;
-import android.telephony.TelephonyManager;
 
 import com.android.contacts.common.model.SimCard;
 
@@ -53,6 +51,12 @@
     private static final String PREFERENCE_KEY_DISMISSED_SIM_CARDS =
             "dismissedSimCards";
 
+    private static final String PREFERENCE_KEY_RESTORED_DEVICES =
+            "restoredDevices";
+
+    private static final String PREFERENCE_KEY_DISMISSED_DEVICES =
+            "dismissedDevices";
+
     public static boolean getHamburgerPromoDisplayedBefore(Context context) {
         return getSharedPreferences(context)
                 .getBoolean(PREFERENCE_KEY_HAMBURGER_PROMO_DISPLAYED_BEFORE, false);
@@ -191,6 +195,40 @@
                 .getStringSet(PREFERENCE_KEY_DISMISSED_SIM_CARDS, Collections.<String>emptySet());
     }
 
+    public static Set<String> getRestoredDevices(Context context) {
+        return getSharedPreferences(context)
+                .getStringSet(PREFERENCE_KEY_RESTORED_DEVICES, Collections.<String>emptySet());
+    }
+
+    public static Set<String> getDismissedDevices(Context context) {
+        return getSharedPreferences(context)
+                .getStringSet(PREFERENCE_KEY_DISMISSED_DEVICES, Collections.<String>emptySet());
+    }
+
+    public static void addRestoredDevice(Context context, String deviceId) {
+        final Set<String> restoredDevices = new HashSet<>(getRestoredDevices(context));
+        restoredDevices.add(deviceId);
+        getSharedPreferences(context).edit()
+                .putStringSet(PREFERENCE_KEY_RESTORED_DEVICES, restoredDevices)
+                .apply();
+    }
+
+    public static void addDismissedDevice(Context context, String deviceId) {
+        final Set<String> dismissedDevices = new HashSet<>(getDismissedDevices(context));
+        dismissedDevices.add(deviceId);
+        getSharedPreferences(context).edit()
+                .putStringSet(PREFERENCE_KEY_DISMISSED_DEVICES, dismissedDevices)
+                .commit();
+    }
+
+    public static void removeDismissedDevice(Context context, String deviceId) {
+        final Set<String> dismissedDevices = new HashSet<>(getDismissedDevices(context));
+        dismissedDevices.remove(deviceId);
+        getSharedPreferences(context).edit()
+                .putStringSet(PREFERENCE_KEY_DISMISSED_DEVICES, dismissedDevices)
+                .commit();
+    }
+
     public static void clear(Context context) {
         getSharedPreferences(context).edit().clear().commit();
     }