Import translations. DO NOT MERGE
am: 584cf8e7e7 -s ours
Change-Id: Ia35e794e1dc7f35a36e930f06193fbd430a70e32
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 20e0a65..78060a8 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="10607"
- android:versionName="1.6.7">
+ 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-land/contacts_unavailable_fragment_content.xml b/res/layout-land/contacts_unavailable_fragment_content.xml
index 234d7c4..35aa90d 100644
--- a/res/layout-land/contacts_unavailable_fragment_content.xml
+++ b/res/layout-land/contacts_unavailable_fragment_content.xml
@@ -14,64 +14,61 @@
limitations under the License.
-->
-<LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:gravity="center_horizontal">
+ android:layout_height="match_parent"
+ android:gravity="center_horizontal"
+ android:orientation="vertical">
- <LinearLayout
- android:orientation="vertical"
+ <ImageView
+ android:id="@+id/empty_image"
+ android:layout_width="@dimen/contacts_no_account_empty_image_width"
+ android:layout_height="wrap_content"
+ android:adjustViewBounds="true"
+ android:scaleType="centerInside"
+ android:src="@drawable/contacts_no_account_empty" />
+
+ <TextView
+ android:id="@+id/message"
+ style="@style/EmptyStateTextStyle"
android:layout_width="wrap_content"
- android:layout_height="wrap_content">
-
- <ImageView
- android:id="@+id/empty_image"
- android:layout_width="@dimen/contacts_no_account_empty_image_width"
- android:layout_height="wrap_content"
- android:scaleType="centerInside"
- android:adjustViewBounds="true"
- android:src="@drawable/contacts_no_account_empty"/>
-
- <TextView
- android:id="@+id/message"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginTop="@dimen/contacts_no_account_empty_text_padding_top"
- android:layout_gravity="center_horizontal"
- style="@style/EmptyStateTextStyle"/>
-
- <ProgressBar
- android:id="@+id/progress"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- style="?android:attr/progressBarStyleHorizontal"
- android:indeterminate="true"
- android:layout_gravity="center_horizontal"
- android:layout_marginTop="12dp" />
- </LinearLayout>
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_horizontal"
+ android:layout_marginTop="@dimen/contacts_no_account_empty_text_padding_top" />
<LinearLayout
android:id="@+id/buttons_container"
- android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:gravity="center_horizontal">
+ android:gravity="center_horizontal"
+ android:orientation="horizontal">
<Button
android:id="@+id/add_account_button"
+ style="@style/NoAccountViewButtonStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/contacts_no_account_buttons_margin"
- android:text="@string/contacts_unavailable_add_account"
- style="@style/NoAccountViewButtonStyle"/>
+ android:text="@string/contacts_unavailable_add_account" />
<Button
android:id="@+id/import_contacts_button"
+ style="@style/NoAccountViewButtonStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:text="@string/contacts_unavailable_import_contacts"
- style="@style/NoAccountViewButtonStyle"/>
+ android:text="@string/contacts_unavailable_import_contacts" />
</LinearLayout>
+
+ <FrameLayout
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+
+ <ProgressBar
+ android:id="@+id/progress"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center"
+ android:indeterminate="true"
+ android:visibility="gone" />
+ </FrameLayout>
</LinearLayout>
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/contacts_unavailable_fragment_content.xml b/res/layout/contacts_unavailable_fragment_content.xml
index 860490d..dd04ebe 100644
--- a/res/layout/contacts_unavailable_fragment_content.xml
+++ b/res/layout/contacts_unavailable_fragment_content.xml
@@ -14,61 +14,52 @@
limitations under the License.
-->
-<LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:gravity="center_horizontal">
+ android:layout_height="match_parent"
+ android:gravity="center_horizontal"
+ android:orientation="vertical">
<ImageView
android:id="@+id/empty_image"
android:layout_width="@dimen/contacts_no_account_empty_image_width"
android:layout_height="wrap_content"
- android:scaleType="centerInside"
android:adjustViewBounds="true"
- android:src="@drawable/contacts_no_account_empty"/>
+ android:scaleType="centerInside"
+ android:src="@drawable/contacts_no_account_empty" />
- <LinearLayout
- android:orientation="vertical"
+ <TextView
+ android:id="@+id/message"
+ style="@style/EmptyStateTextStyle"
android:layout_width="wrap_content"
- android:layout_height="wrap_content">
+ android:layout_height="wrap_content"
+ android:layout_marginTop="@dimen/contacts_no_account_empty_text_padding_top" />
- <TextView
- android:id="@+id/message"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginTop="@dimen/contacts_no_account_empty_text_padding_top"
- style="@style/EmptyStateTextStyle"/>
+ <Button
+ android:id="@+id/add_account_button"
+ style="@style/NoAccountViewButtonStyle"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="@dimen/contacts_no_account_empty_button_padding_top"
+ android:text="@string/contacts_unavailable_add_account" />
+
+ <Button
+ android:id="@+id/import_contacts_button"
+ style="@style/NoAccountViewButtonStyle"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:text="@string/contacts_unavailable_import_contacts" />
+
+ <FrameLayout
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
<ProgressBar
android:id="@+id/progress"
- android:layout_width="match_parent"
+ android:layout_width="wrap_content"
android:layout_height="wrap_content"
- style="?android:attr/progressBarStyleHorizontal"
+ android:layout_gravity="center"
android:indeterminate="true"
- android:layout_gravity="center_horizontal"
- android:layout_marginTop="12dp" />
- </LinearLayout>
-
- <LinearLayout
- android:orientation="vertical"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content">
-
- <Button
- android:id="@+id/add_account_button"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginTop="@dimen/contacts_no_account_empty_button_padding_top"
- android:text="@string/contacts_unavailable_add_account"
- style="@style/NoAccountViewButtonStyle"/>
-
- <Button
- android:id="@+id/import_contacts_button"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:text="@string/contacts_unavailable_import_contacts"
- style="@style/NoAccountViewButtonStyle"/>
- </LinearLayout>
+ android:visibility="gone" />
+ </FrameLayout>
</LinearLayout>
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/edit_contact.xml b/res/menu/edit_contact.xml
index 9bf067f..a62acc8 100644
--- a/res/menu/edit_contact.xml
+++ b/res/menu/edit_contact.xml
@@ -34,15 +34,6 @@
android:title="@string/menu_deleteContact" />
<item
- android:id="@+id/menu_set_ringtone"
- android:title="@string/menu_set_ring_tone" />
-
- <item
- android:id="@+id/menu_send_to_voicemail"
- android:checkable="true"
- android:title="@string/menu_redirect_calls_to_vm" />
-
- <item
android:id="@+id/menu_help"
android:title="@string/menu_help" />
</menu>
diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml
index 6658f04..2820dec 100644
--- a/res/values-af/strings.xml
+++ b/res/values-af/strings.xml
@@ -620,6 +620,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 03c72f8..e9615d8 100644
--- a/res/values-am/strings.xml
+++ b/res/values-am/strings.xml
@@ -617,6 +617,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 ab18fac..377db47 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -669,6 +669,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 8adeef2..6eaa09b 100644
--- a/res/values-az-rAZ/strings.xml
+++ b/res/values-az-rAZ/strings.xml
@@ -617,6 +617,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 23afc3d..7b5ed42 100644
--- a/res/values-bg/strings.xml
+++ b/res/values-bg/strings.xml
@@ -617,6 +617,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 3ee4a5b..0305ff1 100644
--- a/res/values-bn-rBD/strings.xml
+++ b/res/values-bn-rBD/strings.xml
@@ -617,6 +617,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 94ebb57..446a0d5 100644
--- a/res/values-ca/strings.xml
+++ b/res/values-ca/strings.xml
@@ -620,6 +620,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 bc6684d..b10139d 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -646,6 +646,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 b929718..85af233 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -620,6 +620,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 06fff1b..a441f43 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -620,6 +620,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 a864bc6..a3cd1c3 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -620,6 +620,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 37c0555..8ab28ea 100644
--- a/res/values-en-rAU/strings.xml
+++ b/res/values-en-rAU/strings.xml
@@ -617,6 +617,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 37c0555..8ab28ea 100644
--- a/res/values-en-rGB/strings.xml
+++ b/res/values-en-rGB/strings.xml
@@ -617,6 +617,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 37c0555..8ab28ea 100644
--- a/res/values-en-rIN/strings.xml
+++ b/res/values-en-rIN/strings.xml
@@ -617,6 +617,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 2a2690c..8c8ede1 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -620,6 +620,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 c543f15..df6c886 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -629,6 +629,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 9b10e65..f95234c 100644
--- a/res/values-et-rEE/strings.xml
+++ b/res/values-et-rEE/strings.xml
@@ -617,6 +617,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 8a0dd96..92f3fec 100644
--- a/res/values-eu-rES/strings.xml
+++ b/res/values-eu-rES/strings.xml
@@ -620,6 +620,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 4cdc83f..a02e173 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -620,6 +620,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 7e408e1..9cd912b 100644
--- a/res/values-fi/strings.xml
+++ b/res/values-fi/strings.xml
@@ -617,6 +617,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 2ce8ba5..4d3ab5a 100644
--- a/res/values-fr-rCA/strings.xml
+++ b/res/values-fr-rCA/strings.xml
@@ -617,6 +617,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 de189fa..9ce16e7 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -620,6 +620,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 289da16..e34c467 100644
--- a/res/values-gl-rES/strings.xml
+++ b/res/values-gl-rES/strings.xml
@@ -620,6 +620,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 a839234..256e0e8 100644
--- a/res/values-gu-rIN/strings.xml
+++ b/res/values-gu-rIN/strings.xml
@@ -617,6 +617,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 37a2d35..51f0b91 100644
--- a/res/values-hi/strings.xml
+++ b/res/values-hi/strings.xml
@@ -617,6 +617,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 9d35506..133e9ab 100644
--- a/res/values-hr/strings.xml
+++ b/res/values-hr/strings.xml
@@ -633,6 +633,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 25f39e0..3fc26e9 100644
--- a/res/values-hu/strings.xml
+++ b/res/values-hu/strings.xml
@@ -617,6 +617,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 94820a4..95822ea 100644
--- a/res/values-hy-rAM/strings.xml
+++ b/res/values-hy-rAM/strings.xml
@@ -620,6 +620,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 1dacf61..a3e4d42 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -617,6 +617,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 0130153..b1ca400 100644
--- a/res/values-is-rIS/strings.xml
+++ b/res/values-is-rIS/strings.xml
@@ -620,6 +620,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 99c8307..aed6256 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -620,6 +620,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 8f9c4d0..1003057 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -643,6 +643,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 1168921..0862792 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -617,6 +617,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 469e76b..1a03560 100644
--- a/res/values-ka-rGE/strings.xml
+++ b/res/values-ka-rGE/strings.xml
@@ -620,6 +620,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 5080e9a..9b9376e 100644
--- a/res/values-kk-rKZ/strings.xml
+++ b/res/values-kk-rKZ/strings.xml
@@ -617,6 +617,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 b55b054..3b5ee39 100644
--- a/res/values-km-rKH/strings.xml
+++ b/res/values-km-rKH/strings.xml
@@ -617,6 +617,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 5536292..2f0918d 100644
--- a/res/values-kn-rIN/strings.xml
+++ b/res/values-kn-rIN/strings.xml
@@ -617,6 +617,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 e594d76..6adca39 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -617,6 +617,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 26f9e13..2148dc6 100644
--- a/res/values-ky-rKG/strings.xml
+++ b/res/values-ky-rKG/strings.xml
@@ -729,6 +729,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 ca56790..22565c7 100644
--- a/res/values-lo-rLA/strings.xml
+++ b/res/values-lo-rLA/strings.xml
@@ -617,6 +617,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 3ca5a35..ad281a3 100644
--- a/res/values-lt/strings.xml
+++ b/res/values-lt/strings.xml
@@ -643,6 +643,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 84eb4f1..7789c8e 100644
--- a/res/values-lv/strings.xml
+++ b/res/values-lv/strings.xml
@@ -633,6 +633,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 499bc89..d89b18f 100644
--- a/res/values-mk-rMK/strings.xml
+++ b/res/values-mk-rMK/strings.xml
@@ -620,6 +620,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 9ca159f..340dd55 100644
--- a/res/values-ml-rIN/strings.xml
+++ b/res/values-ml-rIN/strings.xml
@@ -617,6 +617,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 b199189..7a21172 100644
--- a/res/values-mn-rMN/strings.xml
+++ b/res/values-mn-rMN/strings.xml
@@ -619,6 +619,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 c6f7490..c4c7dcd 100644
--- a/res/values-mr-rIN/strings.xml
+++ b/res/values-mr-rIN/strings.xml
@@ -620,6 +620,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 b701f1a..3792794 100644
--- a/res/values-ms-rMY/strings.xml
+++ b/res/values-ms-rMY/strings.xml
@@ -619,6 +619,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 4b9598e..b4fe4a6 100644
--- a/res/values-my-rMM/strings.xml
+++ b/res/values-my-rMM/strings.xml
@@ -617,6 +617,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 7672dfa..85a9f94 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -617,6 +617,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 92e446a..4225199 100644
--- a/res/values-ne-rNP/strings.xml
+++ b/res/values-ne-rNP/strings.xml
@@ -617,6 +617,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 82e1c23..7b92460 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -617,6 +617,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 112428e..261e649 100644
--- a/res/values-pa-rIN/strings.xml
+++ b/res/values-pa-rIN/strings.xml
@@ -617,6 +617,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 df99bc1..f839f9f 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -643,6 +643,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 0e44fb0..7a0a29e 100644
--- a/res/values-pt-rBR/strings.xml
+++ b/res/values-pt-rBR/strings.xml
@@ -620,6 +620,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 5a1d892..ec86a78 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -620,6 +620,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 0e44fb0..7a0a29e 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -620,6 +620,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 eba11bd..cbbe5ea 100644
--- a/res/values-ro/strings.xml
+++ b/res/values-ro/strings.xml
@@ -633,6 +633,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 e54edba..2835e51 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -646,6 +646,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 6b27d3a..797d815 100644
--- a/res/values-si-rLK/strings.xml
+++ b/res/values-si-rLK/strings.xml
@@ -620,6 +620,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 3ee37a2..fd4f6e4 100644
--- a/res/values-sk/strings.xml
+++ b/res/values-sk/strings.xml
@@ -646,6 +646,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 e73b0b3..5d9edd7 100644
--- a/res/values-sl/strings.xml
+++ b/res/values-sl/strings.xml
@@ -646,6 +646,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 1f133e8..a04ce69 100644
--- a/res/values-sq-rAL/strings.xml
+++ b/res/values-sq-rAL/strings.xml
@@ -620,6 +620,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 b4c2ce2..8447fea 100644
--- a/res/values-sr/strings.xml
+++ b/res/values-sr/strings.xml
@@ -630,6 +630,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 26c9222..1aeb647 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -617,6 +617,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 1c44b05..70edef3 100644
--- a/res/values-sw/strings.xml
+++ b/res/values-sw/strings.xml
@@ -622,6 +622,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 ef7cc9e..f4b60b3 100644
--- a/res/values-ta-rIN/strings.xml
+++ b/res/values-ta-rIN/strings.xml
@@ -617,6 +617,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 1e0c3c1..228cc81 100644
--- a/res/values-te-rIN/strings.xml
+++ b/res/values-te-rIN/strings.xml
@@ -617,6 +617,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 29710ea..aba4023 100644
--- a/res/values-th/strings.xml
+++ b/res/values-th/strings.xml
@@ -617,6 +617,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 7639a1a..3566e5c 100644
--- a/res/values-tl/strings.xml
+++ b/res/values-tl/strings.xml
@@ -620,6 +620,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 7e9c00b..afa5e24 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -620,6 +620,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 5054e87..f24a2af 100644
--- a/res/values-uk/strings.xml
+++ b/res/values-uk/strings.xml
@@ -643,6 +643,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 51296f8..5478777 100644
--- a/res/values-ur-rPK/strings.xml
+++ b/res/values-ur-rPK/strings.xml
@@ -620,6 +620,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 174b922..ad2441f 100644
--- a/res/values-uz-rUZ/strings.xml
+++ b/res/values-uz-rUZ/strings.xml
@@ -617,6 +617,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 2c22a54..f557d62 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -617,6 +617,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 e1b5999..17f9adf 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -620,6 +620,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 b5d11d1..bf2cb98 100644
--- a/res/values-zh-rHK/strings.xml
+++ b/res/values-zh-rHK/strings.xml
@@ -617,6 +617,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 ff2ba3a..ed4a1d6 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -620,6 +620,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 fc2c410..271cfdc 100644
--- a/res/values-zu/strings.xml
+++ b/res/values-zu/strings.xml
@@ -620,6 +620,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/dimens.xml b/res/values/dimens.xml
index f3e2a04..896d4e6 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -231,9 +231,6 @@
<dimen name="quickcontact_expanding_button_section_height">48dp</dimen>
<dimen name="quickcontact_expanding_button_section_padding">8dp</dimen>
- <!-- Top margin of the text message when provider status is busy -->
- <dimen name="update_contact_list_top_margin">188dp</dimen>
-
<dimen name="expanding_entry_card_item_icon_height">24dp</dimen>
<dimen name="expanding_entry_card_item_icon_width">24dp</dimen>
diff --git a/res/values/donottranslate_config.xml b/res/values/donottranslate_config.xml
index d3c4966..c6542fb 100644
--- a/res/values/donottranslate_config.xml
+++ b/res/values/donottranslate_config.xml
@@ -26,14 +26,6 @@
the overlay will fill this in during build time. -->
<string name="help_url_people_main"></string>
- <!-- Help URL pointing to adding contacts in People. This is intentionally empty because
- the overlay will fill this in during build time. -->
- <string name="help_url_people_add"></string>
-
- <!-- Help URL pointing to editing contacts in People. This is intentionally empty because
- the overlay will fill this in during build time. -->
- <string name="help_url_people_edit"></string>
-
<!-- File Authority for the photo picker -->
<string name="photo_file_provider_authority">com.android.contacts.files</string>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 0efa091..fd77068 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -508,9 +508,6 @@
<!-- An option in the 'Contact photo' dialog, if there is already a photo [CHAR LIMIT=50] -->
<string name="pick_new_photo">Select new photo</string>
- <!-- Text shown in the contacts app while the background process updates contacts after a system upgrade [CHAR LIMIT=300] -->
- <string name="upgrade_in_progress">Contact list is being updated.</string>
-
<!-- Title shown in the search result activity of contacts app while searching. [CHAR LIMIT=20] -->
<string name="search_results_searching">Searching\u2026</string>
@@ -920,9 +917,6 @@
<!-- Content description of photo in photo picker indicating a photo from unknown account is selected. -->
<string name="photo_view_description_checked_no_info">Photo from unknown account checked</string>
- <!-- Text shown in the contacts app while the background process updates contacts after a locale change [CHAR LIMIT=150]-->
- <string name="locale_change_in_progress">Contact list is being updated to reflect the change of language.\n\nPlease wait…</string>
-
<!-- Left drawer menu item to open contacts assistant cards. [CHAR LIMIT=20]-->
<string name="menu_assistant">Assistant</string>
@@ -1836,6 +1830,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-bind/com/android/contactsbind/analytics/AnalyticsUtil.java b/src-bind/com/android/contactsbind/analytics/AnalyticsUtil.java
index e48e8f2..53b59eb 100644
--- a/src-bind/com/android/contactsbind/analytics/AnalyticsUtil.java
+++ b/src-bind/com/android/contactsbind/analytics/AnalyticsUtil.java
@@ -25,27 +25,4 @@
* Initialize this class and setup automatic activity tracking.
*/
public static void initialize(Application application) { }
-
- /**
- * Log a screen view for {@param fragment}.
- */
- public static void sendScreenView(Fragment fragment) {}
-
- public static void sendScreenView(Fragment fragment, Activity activity) {}
-
- public static void sendScreenView(Fragment fragment, Activity activity, String tag) {}
-
- public static void sendScreenView(String fragmentName, Activity activity, String tag) {}
-
- /**
- * Logs a event to the analytics server.
- *
- * @param application The application the tracker is stored in.
- * @param category The category for the event.
- * @param action The event action.
- * @param label The event label.
- * @param value The value associated with the event.
- */
- public static void sendEvent(Application application, String category, String action,
- String label, long value) { }
}
\ No newline at end of file
diff --git a/src/com/android/contacts/ContactsDrawerActivity.java b/src/com/android/contacts/ContactsDrawerActivity.java
index 497295d..ab4842e 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;
}
@@ -424,7 +494,7 @@
updateMenuSelection(menuItem);
}
});
- mDrawer.closeDrawer(GravityCompat.START);
+ mDrawerLayout.closeDrawer(GravityCompat.START);
return true;
}
});
@@ -449,17 +519,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) {
@@ -499,7 +585,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);
@@ -511,6 +602,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);
@@ -524,7 +620,6 @@
return;
}
-
for (int i = 0; i < accountFilterItems.size(); i++) {
final ContactListFilter filter = accountFilterItems.get(i);
final AccountDisplayInfo displayableAccount =
@@ -548,7 +643,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/SimImportFragment.java b/src/com/android/contacts/SimImportFragment.java
index 7421df4..7ce00d2 100644
--- a/src/com/android/contacts/SimImportFragment.java
+++ b/src/com/android/contacts/SimImportFragment.java
@@ -57,7 +57,7 @@
implements LoaderManager.LoaderCallbacks<ArrayList<SimContact>>,
MultiSelectEntryContactListAdapter.SelectedContactsListener {
- private static final String KEY_ACCOUNT = "account";
+ private static final String KEY_SELECTED_IDS = "selectedIds";
private static final String ARG_SUBSCRIPTION_ID = "subscriptionId";
public static final int NO_SUBSCRIPTION_ID = -1;
@@ -70,11 +70,14 @@
private ListView mListView;
private View mImportButton;
+ private long[] mSelectedContacts;
+
private int mSubscriptionId;
@Override
public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
+
setStyle(STYLE_NORMAL, R.style.PeopleThemeAppCompat_FullScreenDialog);
mPreferences = new ContactsPreferences(getContext());
mAccountTypeManager = AccountTypeManager.getInstance(getActivity());
@@ -87,6 +90,9 @@
final Bundle args = getArguments();
mSubscriptionId = args == null ? NO_SUBSCRIPTION_ID : args.getInt(ARG_SUBSCRIPTION_ID,
NO_SUBSCRIPTION_ID);
+
+ if (savedInstanceState == null) return;
+ mSelectedContacts = savedInstanceState.getLongArray(KEY_SELECTED_IDS);
}
@Override
@@ -112,8 +118,7 @@
mAccountHeaderPresenter = new AccountHeaderPresenter(
view.findViewById(R.id.account_header_container));
if (savedInstanceState != null) {
- AccountWithDataSet account = savedInstanceState.getParcelable(KEY_ACCOUNT);
- mAccountHeaderPresenter.setCurrentAccount(account);
+ mAccountHeaderPresenter.onRestoreInstanceState(savedInstanceState);
} else {
final AccountWithDataSet currentDefaultAccount = AccountWithDataSet
.getDefaultOrBestFallback(mPreferences, mAccountTypeManager);
@@ -164,7 +169,10 @@
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
- outState.putParcelable(KEY_ACCOUNT, mAccountHeaderPresenter.getCurrentAccount());
+ mAccountHeaderPresenter.onSaveInstanceState(outState);
+ if (mAdapter != null) {
+ outState.putLongArray(KEY_SELECTED_IDS, mAdapter.getSelectedContactIdsArray());
+ }
}
@Override
@@ -177,8 +185,11 @@
ArrayList<SimContact> data) {
mListView.setEmptyView(getView().findViewById(R.id.empty_message));
mAdapter.setContacts(data);
- // we default to selecting all contacts.
- mAdapter.selectAll();
+ if (mSelectedContacts != null) {
+ mAdapter.select(mSelectedContacts);
+ } else {
+ mAdapter.selectAll();
+ }
mLoadingIndicator.hide();
}
@@ -293,6 +304,14 @@
}
setSelectedContactIds(selected);
}
+
+ public void select(long[] contacts) {
+ final TreeSet<Long> selected = new TreeSet<>();
+ for (long contact : contacts) {
+ selected.add(contact);
+ }
+ setSelectedContactIds(selected);
+ }
}
public static class SimContactLoader extends AsyncTaskLoader<ArrayList<SimContact>> {
diff --git a/src/com/android/contacts/activities/ContactEditorActivity.java b/src/com/android/contacts/activities/ContactEditorActivity.java
index 1845a52..3052a24 100644
--- a/src/com/android/contacts/activities/ContactEditorActivity.java
+++ b/src/com/android/contacts/activities/ContactEditorActivity.java
@@ -164,7 +164,7 @@
void load(String action, Uri lookupUri, Bundle intentExtras);
/**
- * Applies extras from the hosting Activity to the first writable raw contact.
+ * Applies extras from the hosting Activity to the writable raw contact.
*/
void setIntentExtras(Bundle extras);
diff --git a/src/com/android/contacts/activities/ContactEditorSpringBoardActivity.java b/src/com/android/contacts/activities/ContactEditorSpringBoardActivity.java
index 5b71c48..69dccb5 100644
--- a/src/com/android/contacts/activities/ContactEditorSpringBoardActivity.java
+++ b/src/com/android/contacts/activities/ContactEditorSpringBoardActivity.java
@@ -30,7 +30,8 @@
* This activity has noHistory set to true, and all intents coming out from it have
* {@code FLAG_ACTIVITY_FORWARD_RESULT} set.
*/
-public class ContactEditorSpringBoardActivity extends AppCompatContactsActivity {
+public class ContactEditorSpringBoardActivity extends AppCompatContactsActivity implements
+ PickRawContactDialogFragment.PickRawContactListener {
private static final String TAG = "EditorSpringBoard";
private static final String TAG_RAW_CONTACTS_DIALOG = "rawContactsDialog";
private static final int LOADER_RAW_CONTACTS = 1;
@@ -109,13 +110,17 @@
if (ContactsContract.AUTHORITY.equals(authority) &&
RawContacts.CONTENT_ITEM_TYPE.equals(type)) {
final long rawContactId = ContentUris.parseId(mUri);
- final Intent editorIntent = getIntentForRawContact(rawContactId);
- ImplicitIntentsUtil.startActivityInApp(this, editorIntent);
+ startEditorAndForwardExtras(getIntentForRawContact(rawContactId));
} else {
getLoaderManager().initLoader(LOADER_RAW_CONTACTS, null, mRawContactLoaderListener);
}
}
+ @Override
+ public void onPickRawContact(long rawContactId) {
+ startEditorAndForwardExtras(getIntentForRawContact(rawContactId));
+ }
+
/**
* Start the dialog to pick the raw contact to edit.
*/
@@ -134,7 +139,7 @@
ft.remove(oldFragment);
}
final PickRawContactDialogFragment newFragment = PickRawContactDialogFragment.getInstance(
- mUri, mCursor, mMaterialPalette, mIsUserProfile);
+ mCursor, mIsUserProfile);
ft.add(newFragment, TAG_RAW_CONTACTS_DIALOG);
// commitAllowingStateLoss is safe in this activity because the fragment entirely depends
// on the result of the loader. Even if we lose the fragment because the activity was
@@ -163,7 +168,7 @@
// Destroy the loader to prevent multiple onLoadFinished calls in case CP2 is updating in
// the background.
getLoaderManager().destroyLoader(LOADER_RAW_CONTACTS);
- ImplicitIntentsUtil.startActivityInApp(this, intent);
+ startEditorAndForwardExtras(intent);
}
/**
@@ -195,4 +200,15 @@
intent.setFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);
return intent;
}
+
+ /**
+ * Starts the given intent within the app, attaching any extras to it that were passed to us.
+ */
+ private void startEditorAndForwardExtras(Intent intent) {
+ final Bundle extras = getIntent().getExtras();
+ if (extras != null) {
+ intent.putExtras(extras);
+ }
+ ImplicitIntentsUtil.startActivityInApp(this, intent);
+ }
}
diff --git a/src/com/android/contacts/activities/PeopleActivity.java b/src/com/android/contacts/activities/PeopleActivity.java
index b26a52f..3c6c35e 100644
--- a/src/com/android/contacts/activities/PeopleActivity.java
+++ b/src/com/android/contacts/activities/PeopleActivity.java
@@ -285,7 +285,7 @@
if (isGroupDeleteAction(intent.getAction())) {
toast(R.string.groupDeletedToast);
popSecondLevel();
- mCurrentView = ContactsView.ALL_CONTACTS;
+ resetContactsView();
showFabWithAnimation(/* showFab */ true);
return;
}
@@ -530,6 +530,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
@@ -633,8 +636,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;
}
@@ -701,7 +704,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.
@@ -795,6 +799,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()) {
@@ -857,7 +872,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/list/ContactListFilter.java b/src/com/android/contacts/common/list/ContactListFilter.java
index c6baf41..e99de4d 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) {
// TODO(samchen): Check FILTER_TYPE_CUSTOM
@@ -407,8 +407,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;
}
}
@@ -418,7 +417,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<>();
@@ -429,8 +428,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 36e740f..23e513a 100644
--- a/src/com/android/contacts/common/list/ContactListFilterController.java
+++ b/src/com/android/contacts/common/list/ContactListFilterController.java
@@ -84,6 +84,8 @@
* which case, we should switch to the last saved filter in {@link SharedPreferences}.
*/
public abstract void checkFilterValidity(boolean notifyListeners);
+
+ public abstract Context getContext();
}
/**
@@ -200,4 +202,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/list/PhoneNumberPickerFragment.java b/src/com/android/contacts/common/list/PhoneNumberPickerFragment.java
index 3b7ed6b..bbbd794 100644
--- a/src/com/android/contacts/common/list/PhoneNumberPickerFragment.java
+++ b/src/com/android/contacts/common/list/PhoneNumberPickerFragment.java
@@ -29,10 +29,6 @@
import com.android.contacts.common.R;
import com.android.contacts.common.list.ShortcutIntentBuilder.OnShortcutIntentCreatedListener;
-import com.android.contactsbind.analytics.AnalyticsUtil;
-
-import org.json.JSONException;
-import org.json.JSONObject;
/**
* Fragment containing a phone number list for picking.
@@ -169,12 +165,6 @@
+ " adapter is ready. Ignoring");
}
}
-
- // Get the lookup key and track any analytics
- final String lookupKey = getLookupKey(position);
- if (!TextUtils.isEmpty(lookupKey)) {
- maybeTrackAnalytics(lookupKey);
- }
}
protected void cacheContactInfo(int position) {
@@ -304,42 +294,4 @@
protected int getCallInitiationType(boolean isRemoteDirectory) {
return OnPhoneNumberPickerActionListener.CALL_INITIATION_UNKNOWN;
}
-
- /**
- * Where a lookup key contains analytic event information, logs the associated analytics event.
- *
- * @param lookupKey The lookup key JSON object.
- */
- private void maybeTrackAnalytics(String lookupKey) {
- try {
- JSONObject json = new JSONObject(lookupKey);
-
- String analyticsCategory = json.getString(
- PhoneNumberListAdapter.PhoneQuery.ANALYTICS_CATEGORY);
- String analyticsAction = json.getString(
- PhoneNumberListAdapter.PhoneQuery.ANALYTICS_ACTION);
- String analyticsValue = json.getString(
- PhoneNumberListAdapter.PhoneQuery.ANALYTICS_VALUE);
-
- if (TextUtils.isEmpty(analyticsCategory) || TextUtils.isEmpty(analyticsAction) ||
- TextUtils.isEmpty(analyticsValue)) {
- return;
- }
-
- // Assume that the analytic value being tracked could be a float value, but just cast
- // to a long so that the analytic server can handle it.
- long value;
- try {
- float floatValue = Float.parseFloat(analyticsValue);
- value = (long) floatValue;
- } catch (NumberFormatException nfe) {
- return;
- }
-
- AnalyticsUtil.sendEvent(getActivity().getApplication(), analyticsCategory,
- analyticsAction, "" /* label */, value);
- } catch (JSONException e) {
- // Not an error; just a lookup key that doesn't have the right information.
- }
- }
}
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/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/editor/AccountHeaderPresenter.java b/src/com/android/contacts/editor/AccountHeaderPresenter.java
index de2b014..5323c60 100644
--- a/src/com/android/contacts/editor/AccountHeaderPresenter.java
+++ b/src/com/android/contacts/editor/AccountHeaderPresenter.java
@@ -16,6 +16,7 @@
package com.android.contacts.editor;
import android.content.Context;
+import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.StringRes;
import android.view.View;
@@ -42,6 +43,8 @@
*/
public class AccountHeaderPresenter {
+ private static final String KEY_SELECTED_ACCOUNT = "accountHeaderSelectedAccount";
+
public interface Observer {
void onChange(AccountHeaderPresenter sender);
@@ -100,6 +103,18 @@
return mCurrentAccount;
}
+ public void onSaveInstanceState(Bundle outState) {
+ outState.putParcelable(KEY_SELECTED_ACCOUNT, mCurrentAccount);
+ }
+
+ public void onRestoreInstanceState(Bundle savedInstanceState) {
+ if (savedInstanceState == null) return;
+ if (mCurrentAccount == null) {
+ mCurrentAccount = savedInstanceState.getParcelable(KEY_SELECTED_ACCOUNT);
+ }
+ updateDisplayedAccount();
+ }
+
private void updateDisplayedAccount() {
mAccountHeaderContainer.setVisibility(View.GONE);
if (mCurrentAccount == null) return;
@@ -146,31 +161,40 @@
final View.OnClickListener onClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
- final ListPopupWindow popup = new ListPopupWindow(mContext, null);
- final AccountsListAdapter adapter =
- new AccountsListAdapter(mContext,
- AccountsListAdapter.AccountListFilter.ACCOUNTS_CONTACT_WRITABLE,
- mCurrentAccount);
- popup.setWidth(mAccountHeaderContainer.getWidth());
- popup.setAnchorView(mAccountHeaderContainer);
- popup.setAdapter(adapter);
- popup.setModal(true);
- popup.setInputMethodMode(ListPopupWindow.INPUT_METHOD_NOT_NEEDED);
- popup.setOnItemClickListener(new AdapterView.OnItemClickListener() {
- @Override
- public void onItemClick(AdapterView<?> parent, View view, int position,
- long id) {
- UiClosables.closeQuietly(popup);
- final AccountWithDataSet newAccount = adapter.getItem(position);
- setCurrentAccount(newAccount);
- }
- });
- popup.show();
+ showPopup();
}
};
setUpAccountSelector(nameLabel.toString(), onClickListener);
}
+ private void showPopup() {
+ final ListPopupWindow popup = new ListPopupWindow(mContext);
+ final AccountsListAdapter adapter =
+ new AccountsListAdapter(mContext,
+ AccountsListAdapter.AccountListFilter.ACCOUNTS_CONTACT_WRITABLE,
+ mCurrentAccount);
+ popup.setWidth(mAccountHeaderContainer.getWidth());
+ popup.setAnchorView(mAccountHeaderContainer);
+ popup.setAdapter(adapter);
+ popup.setModal(true);
+ popup.setInputMethodMode(ListPopupWindow.INPUT_METHOD_NOT_NEEDED);
+ popup.setOnItemClickListener(new AdapterView.OnItemClickListener() {
+ @Override
+ public void onItemClick(AdapterView<?> parent, View view, int position,
+ long id) {
+ UiClosables.closeQuietly(popup);
+ final AccountWithDataSet newAccount = adapter.getItem(position);
+ setCurrentAccount(newAccount);
+ }
+ });
+ mAccountHeaderContainer.post(new Runnable() {
+ @Override
+ public void run() {
+ popup.show();
+ }
+ });
+ }
+
private void setUpAccountSelector(String nameLabel, View.OnClickListener listener) {
addAccountHeader(nameLabel);
// Add handlers for choosing another account to save to.
diff --git a/src/com/android/contacts/editor/ContactEditorFragment.java b/src/com/android/contacts/editor/ContactEditorFragment.java
index 455d9ae..0f1ff8e 100644
--- a/src/com/android/contacts/editor/ContactEditorFragment.java
+++ b/src/com/android/contacts/editor/ContactEditorFragment.java
@@ -20,7 +20,6 @@
import android.app.Activity;
import android.app.Fragment;
import android.app.LoaderManager;
-import android.content.ActivityNotFoundException;
import android.content.ContentResolver;
import android.content.ContentUris;
import android.content.ContentValues;
@@ -30,7 +29,6 @@
import android.content.Loader;
import android.database.Cursor;
import android.graphics.Bitmap;
-import android.media.RingtoneManager;
import android.net.Uri;
import android.os.Bundle;
import android.os.SystemClock;
@@ -60,9 +58,9 @@
import com.android.contacts.ContactSaveService;
import com.android.contacts.GroupMetaDataLoader;
import com.android.contacts.R;
+import com.android.contacts.activities.ContactEditorAccountsChangedActivity;
import com.android.contacts.activities.ContactEditorActivity;
import com.android.contacts.activities.ContactEditorActivity.ContactEditor;
-import com.android.contacts.activities.ContactEditorAccountsChangedActivity;
import com.android.contacts.activities.ContactSelectionActivity;
import com.android.contacts.common.Experiments;
import com.android.contacts.common.logging.ScreenEvent.ScreenType;
@@ -86,9 +84,8 @@
import com.android.contacts.quickcontact.InvisibleContactUtil;
import com.android.contacts.quickcontact.QuickContactActivity;
import com.android.contacts.util.ContactPhotoUtils;
-import com.android.contacts.util.HelpUtils;
-import com.android.contacts.util.PhoneCapabilityTester;
import com.android.contacts.util.UiClosables;
+import com.android.contactsbind.HelpUtils;
import com.android.contactsbind.ObjectFactory;
import com.android.contactsbind.experiments.Flags;
@@ -146,11 +143,6 @@
private static final String KEY_IS_EDIT = "isEdit";
private static final String KEY_EXISTING_CONTACT_READY = "existingContactDataReady";
- // Phone option menus
- private static final String KEY_SEND_TO_VOICE_MAIL_STATE = "sendToVoicemailState";
- private static final String KEY_ARE_PHONE_OPTIONS_CHANGEABLE = "arePhoneOptionsChangable";
- private static final String KEY_CUSTOM_RINGTONE = "customRingtone";
-
private static final String KEY_IS_USER_PROFILE = "isUserProfile";
private static final String KEY_ENABLED = "enabled";
@@ -167,7 +159,6 @@
protected static final int REQUEST_CODE_JOIN = 0;
protected static final int REQUEST_CODE_ACCOUNTS_CHANGED = 1;
- protected static final int REQUEST_CODE_PICK_RINGTONE = 2;
private static final int CURRENT_API_VERSION = android.os.Build.VERSION.SDK_INT;
@@ -365,11 +356,6 @@
// Whether we are editing the "me" profile
protected boolean mIsUserProfile;
- // Phone specific option menu items
- private boolean mSendToVoicemailState;
- private boolean mArePhoneOptionsChangable;
- private String mCustomRingtone;
-
// Whether editor views and options menu items should be enabled
private boolean mEnabled = true;
@@ -415,7 +401,6 @@
mLookupUri = contact.getLookupUri();
final long setDataStartTime = SystemClock.elapsedRealtime();
setState(contact);
- setStateForPhoneMenuItems(contact);
final long setDataEndTime = SystemClock.elapsedRealtime();
Log.v(TAG, "Time needed for setting UI: " + (setDataEndTime - setDataStartTime));
@@ -506,11 +491,6 @@
mIsUserProfile = savedState.getBoolean(KEY_IS_USER_PROFILE);
- // Phone specific options menus
- mSendToVoicemailState = savedState.getBoolean(KEY_SEND_TO_VOICE_MAIL_STATE);
- mArePhoneOptionsChangable = savedState.getBoolean(KEY_ARE_PHONE_OPTIONS_CHANGEABLE);
- mCustomRingtone = savedState.getString(KEY_CUSTOM_RINGTONE);
-
mEnabled = savedState.getBoolean(KEY_ENABLED);
// Aggregation PopupWindow
@@ -627,11 +607,6 @@
outState.putBoolean(KEY_IS_USER_PROFILE, mIsUserProfile);
- // Phone specific options
- outState.putBoolean(KEY_SEND_TO_VOICE_MAIL_STATE, mSendToVoicemailState);
- outState.putBoolean(KEY_ARE_PHONE_OPTIONS_CHANGEABLE, mArePhoneOptionsChangable);
- outState.putString(KEY_CUSTOM_RINGTONE, mCustomRingtone);
-
outState.putBoolean(KEY_ENABLED, mEnabled);
// Aggregation PopupWindow
@@ -704,37 +679,13 @@
createContact();
break;
}
- case REQUEST_CODE_PICK_RINGTONE: {
- if (data != null) {
- final Uri pickedUri = data.getParcelableExtra(
- RingtoneManager.EXTRA_RINGTONE_PICKED_URI);
- onRingtonePicked(pickedUri);
- }
- break;
- }
}
}
- private void onRingtonePicked(Uri pickedUri) {
- mCustomRingtone = EditorUiUtils.getRingtoneStringFromUri(pickedUri, CURRENT_API_VERSION);
- Intent intent = ContactSaveService.createSetRingtone(
- mContext, mLookupUri, mCustomRingtone);
- mContext.startService(intent);
- }
-
//
// Options menu
//
- private void setStateForPhoneMenuItems(Contact contact) {
- if (contact != null) {
- mSendToVoicemailState = contact.isSendToVoicemail();
- mCustomRingtone = contact.getCustomRingtone();
- mArePhoneOptionsChangable = !contact.isDirectoryEntry()
- && PhoneCapabilityTester.isPhone(mContext);
- }
- }
-
@Override
public void onCreateOptionsMenu(Menu menu, final MenuInflater inflater) {
inflater.inflate(R.menu.edit_contact, menu);
@@ -748,22 +699,8 @@
final MenuItem saveMenu = menu.findItem(R.id.menu_save);
final MenuItem splitMenu = menu.findItem(R.id.menu_split);
final MenuItem joinMenu = menu.findItem(R.id.menu_join);
- final MenuItem helpMenu = menu.findItem(R.id.menu_help);
- final MenuItem sendToVoiceMailMenu = menu.findItem(R.id.menu_send_to_voicemail);
- final MenuItem ringToneMenu = menu.findItem(R.id.menu_set_ringtone);
final MenuItem deleteMenu = menu.findItem(R.id.menu_delete);
- // Set visibility of menus
-
- // help menu depending on whether this is inserting or editing
- if (Intent.ACTION_INSERT.equals(mAction)) {
- HelpUtils.prepareHelpMenuItem(mContext, helpMenu, R.string.help_url_people_add);
- } else if (Intent.ACTION_EDIT.equals(mAction)) {
- HelpUtils.prepareHelpMenuItem(mContext, helpMenu, R.string.help_url_people_edit);
- } else {
- // something else, so don't show the help menu
- helpMenu.setVisible(false);
- }
// TODO: b/30771904, b/31827701, temporarily disable these items until we get them to work
// on a raw contact level.
joinMenu.setVisible(false);
@@ -781,17 +718,6 @@
});
}
- if (mIsUserProfile) {
- sendToVoiceMailMenu.setVisible(false);
- ringToneMenu.setVisible(false);
- } else {
- // Hide telephony-related settings (ringtone, send to voicemail)
- // if we don't have a telephone or are editing a new contact.
- sendToVoiceMailMenu.setChecked(mSendToVoicemailState);
- sendToVoiceMailMenu.setVisible(mArePhoneOptionsChangable);
- ringToneMenu.setVisible(mArePhoneOptionsChangable);
- }
-
int size = menu.size();
for (int i = 0; i < size; i++) {
menu.getItem(i).setEnabled(mEnabled);
@@ -821,16 +747,8 @@
return doSplitContactAction();
case R.id.menu_join:
return doJoinContactAction();
- case R.id.menu_set_ringtone:
- doPickRingtone();
- return true;
- case R.id.menu_send_to_voicemail:
- // Update state and save
- mSendToVoicemailState = !mSendToVoicemailState;
- item.setChecked(mSendToVoicemailState);
- final Intent intent = ContactSaveService.createSetSendToVoicemail(
- mContext, mLookupUri, mSendToVoicemailState);
- mContext.startService(intent);
+ case R.id.menu_help:
+ HelpUtils.launchHelpAndFeedbackForContactScreen(getActivity());
return true;
}
@@ -912,29 +830,6 @@
doSaveAction(SaveMode.JOIN, joinContactId);
}
- private void doPickRingtone() {
- final Intent intent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER);
- // Allow user to pick 'Default'
- intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_DEFAULT, true);
- // Show only ringtones
- intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_RINGTONE);
- // Allow the user to pick a silent ringtone
- intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_SILENT, true);
-
- final Uri ringtoneUri = EditorUiUtils.getRingtoneUriFromString(mCustomRingtone,
- CURRENT_API_VERSION);
-
- // Put checkmark next to the current ringtone for this contact
- intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, ringtoneUri);
-
- // Launch!
- try {
- startActivityForResult(intent, REQUEST_CODE_PICK_RINGTONE);
- } catch (ActivityNotFoundException ex) {
- Toast.makeText(mContext, R.string.missing_app, Toast.LENGTH_SHORT).show();
- }
- }
-
@Override
public boolean save(int saveMode) {
if (!hasValidState() || mStatus != Status.EDITING) {
@@ -1047,8 +942,7 @@
final ContentValues original = before.getBefore();
final ContentValues pending = after.getAfter();
if (original != null && pending != null) {
- final String beforeDisplayName = original.getAsString(
- StructuredName.DISPLAY_NAME);
+ final String beforeDisplayName = original.getAsString(StructuredName.DISPLAY_NAME);
final String afterDisplayName = pending.getAsString(StructuredName.DISPLAY_NAME);
if (!TextUtils.equals(beforeDisplayName, afterDisplayName)) return false;
@@ -1472,19 +1366,7 @@
@Override
public void setIntentExtras(Bundle extras) {
- if (extras == null || extras.size() == 0) {
- return;
- }
-
- final AccountTypeManager accountTypes = AccountTypeManager.getInstance(mContext);
- for (RawContactDelta state : mState) {
- final AccountType type = state.getAccountType(accountTypes);
- if (type.areContactsWritable()) {
- // Apply extras to the first writable raw contact only
- RawContactModifier.parseExtras(mContext, type, state, extras);
- break;
- }
- }
+ getContent().setIntentExtras(extras);
}
@Override
@@ -1498,18 +1380,20 @@
final Cursor cursor = resolver.query(contactUri, new String[]{
ContactsContract.Contacts.DISPLAY_NAME,
ContactsContract.Contacts.DISPLAY_NAME_ALTERNATIVE}, null, null, null);
- try {
- if (cursor.moveToFirst()) {
- final String displayName = cursor.getString(0);
- final String displayNameAlt = cursor.getString(1);
- cursor.close();
- return ContactDisplayUtils.getPreferredDisplayName(displayName, displayNameAlt,
- new ContactsPreferences(mContext));
- }
- } finally {
- cursor.close();
- }
+ if (cursor != null) {
+ try {
+ if (cursor.moveToFirst()) {
+ final String displayName = cursor.getString(0);
+ final String displayNameAlt = cursor.getString(1);
+ cursor.close();
+ return ContactDisplayUtils.getPreferredDisplayName(displayName, displayNameAlt,
+ new ContactsPreferences(mContext));
+ }
+ } finally {
+ cursor.close();
+ }
+ }
return null;
}
diff --git a/src/com/android/contacts/editor/PickRawContactDialogFragment.java b/src/com/android/contacts/editor/PickRawContactDialogFragment.java
index 623d038..dd079a2 100644
--- a/src/com/android/contacts/editor/PickRawContactDialogFragment.java
+++ b/src/com/android/contacts/editor/PickRawContactDialogFragment.java
@@ -6,7 +6,6 @@
import android.content.ContentUris;
import android.content.Context;
import android.content.DialogInterface;
-import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
@@ -28,18 +27,19 @@
import com.android.contacts.common.model.account.AccountWithDataSet;
import com.android.contacts.common.model.account.GoogleAccountType;
import com.android.contacts.common.preference.ContactsPreferences;
-import com.android.contacts.common.util.ImplicitIntentsUtil;
-import com.android.contacts.common.util.MaterialColorMapUtils.MaterialPalette;
/**
+ * Should only be started from an activity that implements {@link PickRawContactListener}.
* Dialog containing the raw contacts that make up a contact. On selection the editor is loaded
* for the chosen raw contact.
*/
public class PickRawContactDialogFragment extends DialogFragment {
- private static final String ARGS_URI = "uri";
- private static final String ARGS_MATERIAL_PALETTE = "materialPalette";
private static final String ARGS_IS_USER_PROFILE = "isUserProfile";
+ public interface PickRawContactListener {
+ void onPickRawContact(long rawContactId);
+ }
+
/**
* Used to list the account info for the given raw contacts list.
*/
@@ -142,18 +142,12 @@
// Cursor holding all raw contact rows for the given Contact.
private Cursor mCursor;
- // Uri for the whole Contact.
- private Uri mUri;
private CursorAdapter mAdapter;
- private MaterialPalette mMaterialPalette;
private boolean mIsUserProfile;
- public static PickRawContactDialogFragment getInstance(Uri uri, Cursor cursor,
- MaterialPalette materialPalette, boolean isUserProfile) {
+ public static PickRawContactDialogFragment getInstance(Cursor cursor, boolean isUserProfile) {
final PickRawContactDialogFragment fragment = new PickRawContactDialogFragment();
final Bundle args = new Bundle();
- args.putParcelable(ARGS_URI, uri);
- args.putParcelable(ARGS_MATERIAL_PALETTE, materialPalette);
args.putBoolean(ARGS_IS_USER_PROFILE, isUserProfile);
fragment.setArguments(args);
fragment.setCursor(cursor);
@@ -162,6 +156,10 @@
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
+ if (!(getActivity() instanceof PickRawContactListener)) {
+ throw new IllegalArgumentException(
+ "Host activity doesn't implement PickRawContactListener");
+ }
final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
mAdapter = new RawContactAccountListAdapter(getContext(), mCursor);
builder.setTitle(R.string.contact_editor_pick_raw_contact_dialog_title);
@@ -169,10 +167,7 @@
@Override
public void onClick(DialogInterface dialog, int which) {
final long rawContactId = mAdapter.getItemId(which);
- final Intent intent = EditorIntents.createEditContactIntentForRawContact(
- getActivity(), mUri, rawContactId, mMaterialPalette);
- intent.setFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);
- ImplicitIntentsUtil.startActivityInApp(getActivity(), intent);
+ ((PickRawContactListener) getActivity()).onPickRawContact(rawContactId);
}
});
builder.setCancelable(true);
@@ -192,8 +187,6 @@
final Bundle args = getArguments();
if (args != null) {
- mUri = args.getParcelable(ARGS_URI);
- mMaterialPalette = args.getParcelable(ARGS_MATERIAL_PALETTE);
mIsUserProfile = args.getBoolean(ARGS_IS_USER_PROFILE);
}
}
diff --git a/src/com/android/contacts/editor/RawContactEditorView.java b/src/com/android/contacts/editor/RawContactEditorView.java
index 1b37dab..fe7894a 100644
--- a/src/com/android/contacts/editor/RawContactEditorView.java
+++ b/src/com/android/contacts/editor/RawContactEditorView.java
@@ -21,6 +21,7 @@
import android.database.Cursor;
import android.graphics.drawable.Drawable;
import android.net.Uri;
+import android.os.Bundle;
import android.os.Parcel;
import android.os.Parcelable;
import android.provider.ContactsContract.CommonDataKinds.Email;
@@ -223,6 +224,8 @@
private boolean mIsExpanded;
+ private Bundle mIntentExtras;
+
private ValuesDelta mPhotoValuesDelta;
public RawContactEditorView(Context context) {
@@ -425,6 +428,10 @@
}
}
+ public void setIntentExtras(Bundle extras) {
+ mIntentExtras = extras;
+ }
+
public void setState(RawContactDeltaList rawContactDeltas,
MaterialColorMapUtils.MaterialPalette materialPalette, ViewIdGenerator viewIdGenerator,
boolean hasNewContact, boolean isUserProfile, AccountWithDataSet primaryAccount,
@@ -455,6 +462,8 @@
return;
}
pickRawContactDelta();
+ // Apply any intent extras now that we have selected a raw contact delta.
+ applyIntentExtras();
parseRawContactDelta();
if (mKindSectionDataMap.isEmpty()) {
elog("No kind section data parsed from RawContactDelta(s)");
@@ -531,6 +540,17 @@
}
+ private void applyIntentExtras() {
+ if (mIntentExtras == null || mIntentExtras.size() == 0) {
+ return;
+ }
+ final AccountTypeManager accountTypes = AccountTypeManager.getInstance(getContext());
+ final AccountType type = mCurrentRawContactDelta.getAccountType(accountTypes);
+
+ RawContactModifier.parseExtras(getContext(), type, mCurrentRawContactDelta, mIntentExtras);
+ mIntentExtras = null;
+ }
+
private void parseRawContactDelta() {
mKindSectionDataMap.clear();
mSortedMimetypes.clear();
diff --git a/src/com/android/contacts/group/GroupMembersFragment.java b/src/com/android/contacts/group/GroupMembersFragment.java
index 2f61cdd..e51cd83 100644
--- a/src/com/android/contacts/group/GroupMembersFragment.java
+++ b/src/com/android/contacts/group/GroupMembersFragment.java
@@ -761,7 +761,7 @@
maybeAttachCheckBoxListener();
mActivity.setTitle(mGroupMetaData.groupName);
- mActivity.updateGroupMenu(mGroupMetaData);
+ mActivity.updateGroupMenuCheckedStatus(mGroupMetaData);
mActivity.invalidateOptionsMenu();
// Start loading the group members
diff --git a/src/com/android/contacts/list/ContactsUnavailableFragment.java b/src/com/android/contacts/list/ContactsUnavailableFragment.java
index 72e6718..ef57d38 100644
--- a/src/com/android/contacts/list/ContactsUnavailableFragment.java
+++ b/src/com/android/contacts/list/ContactsUnavailableFragment.java
@@ -103,10 +103,9 @@
}
if (providerStatus == ProviderStatusCompat.STATUS_EMPTY) {
updateViewsForEmptyStatus();
- } else if (providerStatus == ProviderStatusCompat.STATUS_BUSY) {
- updateViewsForBusyStatus(R.string.upgrade_in_progress);
- } else if (providerStatus == ProviderStatusCompat.STATUS_CHANGING_LOCALE) {
- updateViewsForBusyStatus(R.string.locale_change_in_progress);
+ } else if (providerStatus == ProviderStatusCompat.STATUS_BUSY
+ || providerStatus == ProviderStatusCompat.STATUS_CHANGING_LOCALE) {
+ updateViewsForBusyStatus();
}
}
@@ -122,22 +121,12 @@
/**
* Update views in the fragment when provider status is busy.
- *
- * @param resId resource ID of the string to show in mMessageView.
*/
- private void updateViewsForBusyStatus(int resId) {
- mMessageView.setText(resId);
- mMessageView.setVisibility(View.VISIBLE);
+ private void updateViewsForBusyStatus() {
+ mMessageView.setVisibility(View.GONE);
mImageView.setVisibility(View.GONE);
updateButtonVisibility(View.GONE);
mProgress.setVisibility(View.VISIBLE);
-
- final ViewGroup.MarginLayoutParams layoutParams =
- (ViewGroup.MarginLayoutParams) mMessageView.getLayoutParams();
- final int marginTop =
- (int) getResources().getDimension(R.dimen.update_contact_list_top_margin);
- layoutParams.setMargins(0, marginTop, 0, 0);
- mMessageView.setGravity(Gravity.CENTER_HORIZONTAL);
}
@Override
@@ -153,11 +142,6 @@
}
}
- private boolean areContactsAvailable() {
- return (mProviderStatus != null) && mProviderStatus.equals(ProviderStatus.STATUS_NORMAL);
- }
-
-
private void updateButtonVisibility(int visibility) {
if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
mAddAccountButton.setVisibility(visibility);
diff --git a/src/com/android/contacts/list/DefaultContactBrowseListFragment.java b/src/com/android/contacts/list/DefaultContactBrowseListFragment.java
index 03933a1..d491afd 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;
@@ -154,6 +161,7 @@
private ContactsDrawerActivity mActivity;
private ContactsRequest mContactsRequest;
private ContactListFilterController mContactListFilterController;
+ private DeviceLocalAccountTypeFactory mDeviceLocalFactory;
private final ActionBarAdapter.Listener mActionBarListener = new ActionBarAdapter.Listener() {
@Override
@@ -449,13 +457,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
@@ -953,7 +962,7 @@
*/
private void setContactListFilter(ContactListFilter filter) {
mContactListFilterController.setContactListFilter(filter,
- /* persistent */ isAllContactsFilter(filter));
+ AccountFilterUtil.shouldPersistFilter(filter));
}
@Override