resolve merge conflicts of 949d4e8 to master

Change-Id: I399652b6a1b756a8045c1fef092d10581d56400d
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index cacc2be..4a72fe5 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="10602"
-    android:versionName="1.6.2">
+    android:versionCode="20000"
+    android:versionName="2.0.0">
 
     <uses-sdk android:minSdkVersion="21" android:targetSdkVersion="25" />
 
@@ -49,6 +49,8 @@
     <uses-permission android:name="com.android.voicemail.permission.READ_VOICEMAIL" />
     <!-- Following used for Contact metadata syncing -->
     <uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS" />
+    <!-- Following used for getting the status of the contacts sync adapter -->
+    <uses-permission android:name="android.permission.READ_SYNC_STATS" />
 
     <uses-feature android:name="android.hardware.telephony" android:required="false"/>
 
@@ -135,6 +137,13 @@
                 <category android:name="android.intent.category.DEFAULT" />
                 <data android:mimeType="vnd.android.cursor.dir/person" />
                 <data android:mimeType="vnd.android.cursor.dir/contact" />
+                <data android:mimeType="vnd.android.cursor.item/group" />
+            </intent-filter>
+
+            <intent-filter>
+                <action android:name="android.intent.action.EDIT" />
+                <category android:name="android.intent.category.DEFAULT" />
+                <data android:mimeType="vnd.android.cursor.item/group" />
             </intent-filter>
 
             <intent-filter>
@@ -266,23 +275,6 @@
             </intent-filter>
         </activity>
 
-        <!-- Displays the members of a group in a list -->
-        <activity android:name=".activities.GroupMembersActivity"
-            android:theme="@style/GroupActivityTheme">
-
-            <intent-filter>
-                <action android:name="android.intent.action.VIEW" />
-                <category android:name="android.intent.category.DEFAULT" />
-                <data android:mimeType="vnd.android.cursor.item/group" />
-            </intent-filter>
-
-            <intent-filter>
-                <action android:name="android.intent.action.EDIT" />
-                <category android:name="android.intent.category.DEFAULT" />
-                <data android:mimeType="vnd.android.cursor.item/group" />
-            </intent-filter>
-        </activity>
-
         <activity
             android:name=".quickcontact.QuickContactActivity"
             android:theme="@style/Theme.QuickContact"
@@ -378,29 +370,6 @@
             </intent-filter>
         </activity>
 
-        <!-- Edit or create a contact with all fields displayed. -->
-        <activity
-            android:name=".activities.ContactEditorActivity"
-            android:theme="@style/EditorActivityTheme"
-            android:windowSoftInputMode="stateHidden|adjustResize"
-            android:exported="false">
-
-            <intent-filter>
-                <action android:name="com.android.contacts.action.FULL_EDIT" />
-                <category android:name="android.intent.category.DEFAULT" />
-                <data android:mimeType="vnd.android.cursor.item/person" />
-                <data android:mimeType="vnd.android.cursor.item/contact" />
-                <data android:mimeType="vnd.android.cursor.item/raw_contact" />
-            </intent-filter>
-            <intent-filter>
-                <action android:name="com.android.contacts.action.FULL_INSERT" />
-                <category android:name="android.intent.category.DEFAULT" />
-                <data android:mimeType="vnd.android.cursor.dir/person" />
-                <data android:mimeType="vnd.android.cursor.dir/contact" />
-                <data android:mimeType="vnd.android.cursor.dir/raw_contact" />
-            </intent-filter>
-        </activity>
-
         <activity android:name=".common.test.FragmentTestActivity">
             <intent-filter>
                 <category android:name="android.intent.category.TEST" />
diff --git a/proguard.flags b/proguard.flags
index f9a072a..b7b9f18 100644
--- a/proguard.flags
+++ b/proguard.flags
@@ -15,6 +15,7 @@
 # Needed for tests
 -keep class com.android.contacts.common.compat.CompatUtils { *; }
 -keep class com.android.contacts.common.Collapser { *; }
+-keep class com.android.contacts.common.ContactPhotoManager { *; }
 -keep class com.android.contacts.common.ContactsUtils { *; }
 -keep class com.android.contacts.common.database.NoNullCursorAsyncQueryHandler { *; }
 -keep class com.android.contacts.common.format.FormatUtils { *; }
@@ -64,6 +65,7 @@
 -keep class com.android.contacts.common.model.ValuesDelta { *; }
 -keep class com.android.contacts.common.MoreContactUtils { *; }
 -keep class com.android.contacts.common.preference.ContactsPreferences { *; }
+-keep class com.android.contacts.common.test.mocks.MockContactPhotoManager { *; }
 -keep class com.android.contacts.common.testing.InjectedServices { *; }
 -keep class com.android.contacts.common.util.BitmapUtil { *; }
 -keep class com.android.contacts.common.util.ContactDisplayUtils { *; }
@@ -84,6 +86,7 @@
 -keep class com.android.contacts.interactions.CallLogInteractionsLoader { *; }
 -keep class com.android.contacts.interactions.ContactDeletionInteraction { *; }
 -keep class com.android.contacts.interactions.ContactInteractionUtil { *; }
+-keep class com.android.contacts.util.SyncUtil { *; }
 -keep class com.android.contacts.widget.CompositeListAdapter { *; }
 -keep class com.google.common.base.Objects { *; }
 -keep class com.google.common.base.Preconditions { *; }
diff --git a/res/color/tab_text_color.xml b/res/color/tab_text_color.xml
deleted file mode 100644
index 5ef1fe3..0000000
--- a/res/color/tab_text_color.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  ~ Copyright (C) 2014 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
-  -->
-
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
-    <item android:color="@color/actionbar_text_color" android:state_selected="true"/>
-    <item android:color="@color/actionbar_unselected_text_color" />
-</selector>
\ No newline at end of file
diff --git a/res/drawable-hdpi/ic_check_circle_googblue_drawable_24dp.png b/res/drawable-hdpi/ic_check_circle_googblue_drawable_24dp.png
deleted file mode 100644
index da6561d..0000000
--- a/res/drawable-hdpi/ic_check_circle_googblue_drawable_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_photos_white_24.png b/res/drawable-hdpi/ic_photos_white_24.png
deleted file mode 100644
index a5180a1..0000000
--- a/res/drawable-hdpi/ic_photos_white_24.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_check_circle_googblue_drawable_24dp.png b/res/drawable-mdpi/ic_check_circle_googblue_drawable_24dp.png
deleted file mode 100644
index efa2fdf..0000000
--- a/res/drawable-mdpi/ic_check_circle_googblue_drawable_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_photos_white_24.png b/res/drawable-mdpi/ic_photos_white_24.png
deleted file mode 100644
index e0e5854..0000000
--- a/res/drawable-mdpi/ic_photos_white_24.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-v21/view_pager_tab_background.xml b/res/drawable-v21/view_pager_tab_background.xml
deleted file mode 100644
index b9e0805..0000000
--- a/res/drawable-v21/view_pager_tab_background.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?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
-  -->
-<ripple xmlns:android="http://schemas.android.com/apk/res/android"
-        android:color="@color/tab_ripple_color">
-    <item android:id="@android:id/mask">
-        <color android:color="@android:color/white" />
-    </item>
-</ripple>
diff --git a/res/drawable-xhdpi/ic_check_circle_googblue_drawable_24dp.png b/res/drawable-xhdpi/ic_check_circle_googblue_drawable_24dp.png
deleted file mode 100644
index 70a22c9..0000000
--- a/res/drawable-xhdpi/ic_check_circle_googblue_drawable_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_photos_white_24.png b/res/drawable-xhdpi/ic_photos_white_24.png
deleted file mode 100644
index bc64bb0..0000000
--- a/res/drawable-xhdpi/ic_photos_white_24.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_check_circle_googblue_drawable_24dp.png b/res/drawable-xxhdpi/ic_check_circle_googblue_drawable_24dp.png
deleted file mode 100644
index 7ac3497..0000000
--- a/res/drawable-xxhdpi/ic_check_circle_googblue_drawable_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_photos_white_24.png b/res/drawable-xxhdpi/ic_photos_white_24.png
deleted file mode 100644
index 2cb5dbc..0000000
--- a/res/drawable-xxhdpi/ic_photos_white_24.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_check_circle_googblue_drawable_24dp.png b/res/drawable-xxxhdpi/ic_check_circle_googblue_drawable_24dp.png
deleted file mode 100644
index c077752..0000000
--- a/res/drawable-xxxhdpi/ic_check_circle_googblue_drawable_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_photos_white_24.png b/res/drawable-xxxhdpi/ic_photos_white_24.png
deleted file mode 100644
index 5722b4a..0000000
--- a/res/drawable-xxxhdpi/ic_photos_white_24.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/unread_count_background.xml b/res/drawable/unread_count_background.xml
deleted file mode 100644
index f70f84a..0000000
--- a/res/drawable/unread_count_background.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2015 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.
--->
-<shape
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:shape="rectangle">
-    <corners android:radius="@dimen/tab_unread_count_background_radius"/>
-    <solid android:color="@color/tab_unread_count_background_color" />
-</shape>
diff --git a/res/drawable/view_pager_tab_background.xml b/res/drawable/view_pager_tab_background.xml
deleted file mode 100644
index 9f59845..0000000
--- a/res/drawable/view_pager_tab_background.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  ~ Copyright (C) 2014 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
-  -->
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
-    <item
-        android:state_pressed="true"
-        android:drawable="@color/tab_ripple_color"/>
-</selector>
\ No newline at end of file
diff --git a/res/layout-ldrtl/unread_count_tab.xml b/res/layout-ldrtl/unread_count_tab.xml
deleted file mode 100644
index b23ab57..0000000
--- a/res/layout-ldrtl/unread_count_tab.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2015 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.
--->
-<!-- layoutDirection set to ltr as a workaround to a framework bug (b/22010411) causing view with
-     layout_centerInParent inside a RelativeLayout to expand to screen width when RTL is active -->
-<RelativeLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:background="@drawable/view_pager_tab_background"
-    android:layoutDirection="ltr">
-    <!-- The tab icon -->
-    <ImageView
-        android:id="@+id/icon"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_centerInParent="true"/>
-    <TextView
-        android:id="@+id/count"
-        android:layout_width="wrap_content"
-        android:layout_height="@dimen/tab_unread_count_background_size"
-        android:layout_marginTop="@dimen/tab_unread_count_margin_top"
-        android:layout_marginStart="@dimen/tab_unread_count_margin_left"
-        android:layout_toStartOf="@id/icon"
-        android:paddingLeft="@dimen/tab_unread_count_text_padding"
-        android:paddingRight="@dimen/tab_unread_count_text_padding"
-        android:background="@drawable/unread_count_background"
-        android:fontFamily="sans-serif-medium"
-        android:importantForAccessibility="no"
-        android:minWidth="@dimen/tab_unread_count_background_size"
-        android:textAlignment="center"
-        android:textColor="@color/tab_accent_color"
-        android:textSize="@dimen/tab_unread_count_text_size"
-        android:layoutDirection="locale"/>
-</RelativeLayout>
-
diff --git a/res/layout-sw600dp-land/contact_editor_activity.xml b/res/layout-sw600dp-land/contact_editor_activity.xml
deleted file mode 100644
index 4eb2d0c..0000000
--- a/res/layout-sw600dp-land/contact_editor_activity.xml
+++ /dev/null
@@ -1,50 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2011 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.
--->
-
-<!-- This should be kept in sync with layout-sw720dp/contact_editor_activity.xml -->
-<ScrollView
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:fillViewport="true">
-
-    <LinearLayout
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:orientation="horizontal"
-        android:baselineAligned="false">
-
-        <!-- Empty view to represent the left margin -->
-        <View
-            android:layout_height="match_parent"
-            android:layout_width="0dip"
-            android:layout_weight="@integer/contact_list_space_layout_weight" />
-
-        <fragment class="com.android.contacts.editor.ContactEditorFragment"
-            android:id="@+id/contact_editor_fragment"
-            android:layout_width="0dip"
-            android:layout_weight="@integer/contact_list_card_layout_weight"
-            android:layout_height="match_parent"/>
-
-        <!-- Empty view to represent the right margin -->
-        <View
-            android:layout_height="match_parent"
-            android:layout_width="0dip"
-            android:layout_weight="@integer/contact_list_space_layout_weight" />
-
-    </LinearLayout>
-
-</ScrollView>
diff --git a/res/layout-sw600dp/contact_editor_activity.xml b/res/layout-sw600dp/contact_editor_activity.xml
deleted file mode 100644
index 526fe2b..0000000
--- a/res/layout-sw600dp/contact_editor_activity.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2010 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.
--->
-
-<ScrollView
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:fillViewport="true">
-
-    <fragment class="com.android.contacts.editor.ContactEditorFragment"
-        android:id="@+id/contact_editor_fragment"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"/>
-
-</ScrollView>
diff --git a/res/layout-sw600dp/contact_editor_fragment.xml b/res/layout-sw600dp/contact_editor_fragment.xml
deleted file mode 100644
index be7723d..0000000
--- a/res/layout-sw600dp/contact_editor_fragment.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2007 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     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.
--->
-
-<com.android.contacts.widget.InterpolatingLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:ex="http://schemas.android.com/apk/res-auto"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:background="@color/contact_all_list_background_color"
-    android:elevation="@dimen/contact_list_card_elevation">
-
-    <LinearLayout
-        android:id="@+id/editors"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        android:orientation="vertical"
-        android:fadingEdge="none"
-        ex:layout_wideParentWidth="800dip"
-        ex:layout_wideMarginLeft="128dip"
-        ex:layout_wideMarginRight="128dip"
-        ex:layout_narrowParentWidth="600dip"
-        ex:layout_narrowMarginLeft="50dip"
-        ex:layout_narrowMarginRight="50dip"/>
-
-</com.android.contacts.widget.InterpolatingLayout>
diff --git a/res/layout-sw720dp/contact_editor_activity.xml b/res/layout-sw720dp/contact_editor_activity.xml
deleted file mode 100644
index b31171f..0000000
--- a/res/layout-sw720dp/contact_editor_activity.xml
+++ /dev/null
@@ -1,50 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2014 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.
--->
-
-<!-- This should be kept in sync with layout-sw600dp-land/contact_editor_activity.xml -->
-<ScrollView
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:fillViewport="true">
-
-    <LinearLayout
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:orientation="horizontal"
-        android:baselineAligned="false">
-
-        <!-- Empty view to represent the left margin -->
-        <View
-            android:layout_height="match_parent"
-            android:layout_width="0dip"
-            android:layout_weight="@integer/contact_list_space_layout_weight" />
-
-        <fragment class="com.android.contacts.editor.ContactEditorFragment"
-            android:id="@+id/contact_editor_fragment"
-            android:layout_width="0dip"
-            android:layout_weight="@integer/contact_list_card_layout_weight"
-            android:layout_height="match_parent"/>
-
-        <!-- Empty view to represent the right margin -->
-        <View
-            android:layout_height="match_parent"
-            android:layout_width="0dip"
-            android:layout_weight="@integer/contact_list_space_layout_weight" />
-
-    </LinearLayout>
-
-</ScrollView>
diff --git a/res/layout/all_photos_button.xml b/res/layout/all_photos_button.xml
deleted file mode 100644
index 83578c3..0000000
--- a/res/layout/all_photos_button.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="@dimen/photo_picker_item_ideal_width"
-    android:layout_height="@dimen/photo_picker_item_ideal_width"
-    android:background="@color/google_grey_600"
-    android:orientation="vertical">
-
-    <ImageView
-        android:id="@+id/image"
-        android:paddingTop="48dp"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:src="@drawable/ic_photos_white_24"
-        android:layout_gravity="center_horizontal"/>
-
-    <TextView
-        android:id="@+id/textLabel"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_centerInParent="true"
-        android:singleLine="true"
-        android:text="@string/all_photos_button"
-        android:textSize="14sp"
-        android:textColor="@color/photo_action_button_color"
-        android:paddingTop="9dp"
-        android:paddingBottom="35dp"
-        android:layout_gravity="center_horizontal"/>
-</LinearLayout>
\ No newline at end of file
diff --git a/res/layout/compact_photo_selection_fragment.xml b/res/layout/compact_photo_selection_fragment.xml
deleted file mode 100644
index 42f5b96..0000000
--- a/res/layout/compact_photo_selection_fragment.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2015 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.
--->
-
- <GridView xmlns:android="http://schemas.android.com/apk/res/android"
-      android:id="@+id/grid_view"
-      android:layout_width="match_parent"
-      android:layout_height="match_parent"
-      android:numColumns="auto_fit"
-      android:verticalSpacing="3dp"
-      android:horizontalSpacing="3dp"
-      android:stretchMode="columnWidth"
-      android:gravity="center"
-      android:paddingTop="3dp"
-      android:drawSelectorOnTop="true"/>
diff --git a/res/layout/compact_photo_selection_item.xml b/res/layout/compact_photo_selection_item.xml
deleted file mode 100644
index aea8ff6..0000000
--- a/res/layout/compact_photo_selection_item.xml
+++ /dev/null
@@ -1,49 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2015 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.
--->
-<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
-        style="@style/SelectableItem"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent">
-
-    <ImageView
-            android:id="@+id/image"
-            android:layout_width="match_parent"
-            android:layout_height="@dimen/photo_picker_item_ideal_width"
-            android:adjustViewBounds="true"
-            android:layout_centerInParent="true"
-            android:scaleType="centerCrop" />
-
-    <ImageView
-            android:id="@+id/check"
-            android:layout_width="24dp"
-            android:layout_height="24dp"
-            android:layout_alignParentTop="true"
-            android:layout_alignParentStart="true"
-            android:layout_margin="8dp"
-            android:src="@drawable/ic_check_circle_googblue_drawable_24dp"
-            android:visibility="gone"/>
-
-    <ImageView
-            android:id="@+id/account_type"
-            android:layout_width="30dp"
-            android:layout_height="30dp"
-            android:layout_alignParentBottom="true"
-            android:layout_alignParentStart="true"
-            android:paddingBottom="8dp"
-            android:paddingStart="8dp"/>
-
-</RelativeLayout>
diff --git a/res/layout/contact_editor_activity.xml b/res/layout/contact_editor_activity.xml
deleted file mode 100644
index 8c13629..0000000
--- a/res/layout/contact_editor_activity.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent">
-
-    <fragment class="com.android.contacts.editor.ContactEditorFragment"
-            android:id="@+id/contact_editor_fragment"
-            android:layout_width="match_parent"
-            android:layout_height="match_parent" />
-</FrameLayout>
diff --git a/res/layout/contact_editor_fragment.xml b/res/layout/contact_editor_fragment.xml
deleted file mode 100644
index f174a3d..0000000
--- a/res/layout/contact_editor_fragment.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2007 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     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.
--->
-
-<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:fillViewport="true"
-    android:fadingEdge="none"
-    android:background="@color/background_primary"
->
-
-    <LinearLayout android:id="@+id/editors"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:orientation="vertical"
-    />
-
-</ScrollView>
diff --git a/res/layout/contact_list_content.xml b/res/layout/contact_list_content.xml
index f18267d..8420b26 100644
--- a/res/layout/contact_list_content.xml
+++ b/res/layout/contact_list_content.xml
@@ -39,20 +39,29 @@
         android:id="@+id/contact_list">
 
         <include layout="@layout/contact_list_card"/>
-        <view
-            class="com.android.contacts.common.list.PinnedHeaderListView"
-            android:id="@android:id/list"
+
+        <android.support.v4.widget.SwipeRefreshLayout
+            android:id="@+id/swipe_refresh"
             android:layout_width="match_parent"
             android:layout_height="match_parent"
-            android:layout_marginLeft="?attr/contact_browser_list_padding_left"
-            android:layout_marginRight="?attr/contact_browser_list_padding_right"
-            android:layout_marginStart="?attr/contact_browser_list_padding_left"
-            android:layout_marginEnd="?attr/contact_browser_list_padding_right"
-            android:paddingTop="?attr/list_item_padding_top"
-            android:clipToPadding="false"
-            android:fastScrollEnabled="true"
-            android:visibility="gone"
-            android:fadingEdge="none" />
+            android:enabled="false" >
+
+            <view
+                class="com.android.contacts.common.list.PinnedHeaderListView"
+                android:id="@android:id/list"
+                android:layout_width="match_parent"
+                android:layout_height="match_parent"
+                android:layout_marginLeft="?attr/contact_browser_list_padding_left"
+                android:layout_marginRight="?attr/contact_browser_list_padding_right"
+                android:layout_marginStart="?attr/contact_browser_list_padding_left"
+                android:layout_marginEnd="?attr/contact_browser_list_padding_right"
+                android:paddingTop="?attr/list_item_padding_top"
+                android:clipToPadding="false"
+                android:fastScrollEnabled="true"
+		android:visibility="gone"
+                android:fadingEdge="none" />
+        </android.support.v4.widget.SwipeRefreshLayout>
+
         <ProgressBar
             android:id="@+id/search_progress"
             style="?android:attr/progressBarStyleLarge"
diff --git a/res/layout/item_kind_section.xml b/res/layout/item_kind_section.xml
deleted file mode 100644
index d62523b..0000000
--- a/res/layout/item_kind_section.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2008 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<!-- the body surrounding all editors for a specific kind -->
-
-<com.android.contacts.editor.KindSectionView
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="match_parent"
-    android:layout_height="wrap_content"
-    android:orientation="horizontal">
-
-    <ImageView
-        android:id="@+id/kind_icon"
-        style="@style/EditKindIconStyle" />
-
-    <LinearLayout
-        android:id="@+id/kind_editors"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:orientation="vertical" />
-
-</com.android.contacts.editor.KindSectionView>
\ No newline at end of file
diff --git a/res/layout/item_photo_editor.xml b/res/layout/item_photo_editor.xml
deleted file mode 100644
index e3eff4e..0000000
--- a/res/layout/item_photo_editor.xml
+++ /dev/null
@@ -1,84 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2007 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     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 class="com.android.contacts.editor.PhotoEditorView"
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="wrap_content"
-    android:layout_height="wrap_content"
-    android:orientation="horizontal" >
-
-    <ImageView
-        android:id="@+id/kind_icon"
-        android:src="@drawable/ic_camera_alt_black_24dp"
-        android:layout_marginTop="13dp"
-        android:contentDescription="@string/header_photo_entry"
-        style="@style/EditKindIconStyle" />
-
-    <!-- Needs 10dp of top padding, in order get a total of 32dp of padding between this view
-        and the previous DataKindSection. Note that EditTexts in other editor.xml files have this
-        padding built in. Similarly, we need to add 4dp of start margin to make up for the padding
-        that an EditText would have in this image's place. -->
-    <ImageView
-        android:id="@+id/photo"
-        android:layout_width="72dip"
-        android:layout_height="72dip"
-        android:cropToPadding="true"
-        android:scaleType="centerCrop"
-        android:layout_marginTop="15dp"
-        android:layout_marginStart="4dp"
-        android:contentDescription="@string/description_contact_photo"
-        android:layout_marginBottom="@dimen/editor_padding_below_photo"
-        android:gravity="start" />
-
-    <!-- We want 16dp for the effective marginStart. So we set 12dp, since the private
-        @android:dimen/control_inset_material already includes 4dp of padding. -->
-    <LinearLayout
-        android:orientation="vertical"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_marginStart="12dp" >
-
-        <!-- The values applied to this button are complicated:
-            1) We want 16dp internal padding in the button. The background drawable is inset
-            by private @android:dimen/button_inset_horizontal_material=4dp. Therefore,
-            we need paddingStart/End of 20dp.
-            2) In order to leave enough room for the 32dp RadioButton, this can only be 46dp.
-            This is 2dp less than the default touch target size.
-            3) This button will appear to be offset by the private
-            @android:dimen/button_inset_vertical_material amount. Therefore, in order to achieve
-            15dp of apparent top margin, we only need to apply 9dp. -->
-        <Button
-            android:id="@+id/change_button"
-            android:layout_width="wrap_content"
-            android:layout_height="46dp"
-            android:textSize="@dimen/editor_form_text_size"
-            android:textColor="@color/primary_text_color"
-            android:layout_marginTop="9dp"
-            android:paddingStart="20dp"
-            android:paddingEnd="20dp"
-            android:text="@string/change_photo" />
-
-        <!-- Don't explicitly set the layout_height in case we need to rely on text wrapping.
-            For one line, we can expect the height to be 32dp with 16dp text size. -->
-        <RadioButton
-            android:id="@+id/primary_checkbox"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_marginEnd="48dp"
-            android:textSize="@dimen/editor_form_text_size"
-            android:text="@string/primary_photo" />
-    </LinearLayout>
-</view>
diff --git a/res/layout/item_photo_editor_readonly.xml b/res/layout/item_photo_editor_readonly.xml
deleted file mode 100644
index edb6f61..0000000
--- a/res/layout/item_photo_editor_readonly.xml
+++ /dev/null
@@ -1,58 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2014 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.
--->
-
-<!-- A readonly version of item_photo_editor.xml shown in the readonly raw contact editor. -->
-<view class="com.android.contacts.editor.PhotoEditorView"
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="wrap_content"
-    android:layout_height="wrap_content"
-    android:orientation="horizontal" >
-
-    <ImageView
-        android:id="@+id/kind_icon"
-        android:src="@drawable/ic_camera_alt_black_24dp"
-        android:layout_marginTop="0dp"
-        android:contentDescription="@string/header_photo_entry"
-        style="@style/EditKindIconStyle" />
-
-    <!-- We need to add 2dp of start margin to make up for the padding that a TextView would
-        have in this image's place. We add 2dp of top margin, so that icon drawable is a little
-        below the top of this ImageView. -->
-    <ImageView
-        android:id="@+id/photo"
-        android:layout_width="72dip"
-        android:layout_height="72dip"
-        android:cropToPadding="true"
-        android:scaleType="centerCrop"
-        android:layout_marginTop="2dp"
-        android:layout_marginStart="2dp"
-        android:contentDescription="@string/description_contact_photo"
-        android:layout_marginBottom="@dimen/editor_padding_around_read_only_photo_editor"
-        android:gravity="start" />
-
-
-    <!-- Don't explicitly set the layout_height in case we need to rely on text wrapping.
-        For one line, we can expect the height to be 32dp with 16dp text size. -->
-    <RadioButton
-        android:id="@+id/primary_checkbox"
-        android:layout_marginStart="12dp"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_marginEnd="@dimen/editor_delete_button_width"
-        android:layout_marginTop="2dp"
-        android:textSize="@dimen/editor_form_text_size"
-        android:text="@string/primary_photo" />
-</view>
diff --git a/res/layout/nick_name_editor_view.xml b/res/layout/nick_name_editor_view.xml
deleted file mode 100644
index 3b91917..0000000
--- a/res/layout/nick_name_editor_view.xml
+++ /dev/null
@@ -1,44 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  Copyright (C) 2014 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.
-  -->
-
-<com.android.contacts.editor.TextFieldsEditorView
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="match_parent"
-    android:layout_height="wrap_content"
-    android:minHeight="@dimen/editor_min_line_item_height"
-    android:layout_marginStart="@dimen/editor_kind_icon_total_width"
-    android:layout_marginEnd="@dimen/editor_delete_button_width">
-
-    <!-- This isn't used in the nickname field. It is only included so that
-        TextFieldsEditorView's base classes don't need extra null checks. -->
-    <include
-        android:id="@+id/spinner"
-        layout="@layout/edit_spinner"
-        android:visibility="gone" />
-
-    <include
-        android:id="@+id/editors"
-        layout="@layout/edit_field_list" />
-
-    <!-- This isn't used in the nickname field. It is only included so that
-        TextFieldsEditorView doesn't need extra null checks. -->
-    <include
-        android:id="@+id/delete_button_container"
-        layout="@layout/edit_delete_button"
-        android:visibility="gone" />
-
-</com.android.contacts.editor.TextFieldsEditorView>
diff --git a/res/layout/people_activity.xml b/res/layout/people_activity.xml
index 9fd1a69..8810af0 100644
--- a/res/layout/people_activity.xml
+++ b/res/layout/people_activity.xml
@@ -20,37 +20,10 @@
     android:layout_width="match_parent"
     android:layout_height="match_parent" >
 
-    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
-                    android:id="@+id/list_container"
-                    android:layout_width="match_parent"
-                    android:layout_height="match_parent">
-
-        <!--
-            ViewPager for swiping between tabs.  We put fragments at runtime.
-
-            (Adding them directly as the children of this view is not recommended.  ViewPager should
-            be treated like a ListView, which doesn't expect children to be added from the layout.)
-        -->
-        <android.support.v4.view.ViewPager
-            android:id="@+id/tab_pager"
-            android:layout_height="match_parent"
-            android:layout_width="match_parent"
-            android:layout_below="@id/toolbar_parent"
-            />
-
-        <FrameLayout
-            android:id="@+id/contacts_unavailable_view"
-            android:layout_width="match_parent"
-            android:layout_height="match_parent"
-            android:layout_below="@id/toolbar_parent"
-            android:visibility="gone">
-            <FrameLayout
-                android:id="@+id/contacts_unavailable_container"
-                android:layout_height="match_parent"
-                android:layout_width="match_parent" />
-        </FrameLayout>
-
-    </RelativeLayout>
+    <FrameLayout
+        android:id="@+id/contacts_list_container"
+        android:layout_height="match_parent"
+        android:layout_width="match_parent" />
 
     <include layout="@layout/floating_action_button" />
 </android.support.design.widget.CoordinatorLayout>
diff --git a/res/layout/people_activity_tabs_lands.xml b/res/layout/people_activity_tabs_lands.xml
deleted file mode 100644
index 8d7b42b..0000000
--- a/res/layout/people_activity_tabs_lands.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2014 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.
--->
-
-<com.android.contacts.common.list.ViewPagerTabs
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@+id/lists_pager_header"
-    android:layout_width="@dimen/people_activity_landscape_tabs_width"
-    android:layout_height="match_parent"
-    android:textAllCaps="true"
-    android:orientation="horizontal"
-    android:layout_gravity="top"
-    android:layout_weight="0"
-    android:visibility="gone"
-    android:textSize="@dimen/people_activity_landscape_tabs_text_size"
-    style="@style/ContactsActionBarTabTextStyle" />
diff --git a/res/layout/people_activity_toolbar.xml b/res/layout/people_activity_toolbar.xml
index edca3ba..3599f0c 100644
--- a/res/layout/people_activity_toolbar.xml
+++ b/res/layout/people_activity_toolbar.xml
@@ -36,17 +36,4 @@
             style="@style/ContactsToolbarStyle" />
 
     </FrameLayout>
-
-    <com.android.contacts.common.list.ViewPagerTabs
-        android:id="@+id/lists_pager_header"
-        android:layout_width="match_parent"
-        android:layout_height="?attr/actionBarSize"
-        android:textAllCaps="true"
-        android:orientation="horizontal"
-        android:layout_gravity="top"
-        android:layout_weight="0"
-        android:layout_below="@id/toolbar"
-        android:visibility="gone"
-        style="@style/ContactsActionBarTabTextStyle" />
-
 </LinearLayout>
\ No newline at end of file
diff --git a/res/layout/raw_contact_editor_view.xml b/res/layout/raw_contact_editor_view.xml
deleted file mode 100644
index 004418d..0000000
--- a/res/layout/raw_contact_editor_view.xml
+++ /dev/null
@@ -1,72 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2007 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     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.
--->
-
-<com.android.contacts.editor.RawContactEditorView
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@+id/body"
-    android:layout_width="match_parent"
-    android:layout_height="wrap_content"
-    android:orientation="vertical" >
-
-    <include
-        layout="@layout/editor_account_header" />
-
-    <LinearLayout
-        android:id="@+id/collapsable_section"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:orientation="vertical" >
-
-        <!-- Dummy view so the first input field is not initially focused. b/21644158 -->
-        <View
-           android:layout_width="0dp"
-           android:layout_height="0dp"
-           android:focusable="true"
-           android:focusableInTouchMode="true"/>
-
-        <include
-            android:id="@+id/edit_name"
-            layout="@layout/structured_name_editor_view" />
-
-        <include
-            android:id="@+id/edit_phonetic_name"
-            layout="@layout/phonetic_name_editor_view" />
-
-        <include
-            android:id="@+id/edit_nick_name"
-            layout="@layout/nick_name_editor_view" />
-
-        <include
-            android:id="@+id/edit_photo"
-            android:layout_marginRight="8dip"
-            android:layout_marginEnd="8dip"
-            layout="@layout/item_photo_editor" />
-
-        <LinearLayout
-            android:id="@+id/sect_fields"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:orientation="vertical"
-            android:layout_marginBottom="16dip"/>
-
-    </LinearLayout>
-
-    <View
-        android:layout_width="match_parent"
-        android:layout_height="@dimen/divider_line_height"
-        android:background="@color/divider_line_color_light" />
-
-</com.android.contacts.editor.RawContactEditorView>
diff --git a/res/layout/raw_contact_readonly_editor_view.xml b/res/layout/raw_contact_readonly_editor_view.xml
deleted file mode 100644
index e50aa98..0000000
--- a/res/layout/raw_contact_readonly_editor_view.xml
+++ /dev/null
@@ -1,88 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2007 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     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.
--->
-
-<com.android.contacts.editor.RawContactReadOnlyEditorView
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="match_parent"
-    android:layout_height="wrap_content"
-    android:orientation="vertical" >
-
-    <include
-        layout="@layout/editor_account_header" />
-
-    <LinearLayout
-        android:id="@+id/collapsable_section"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:orientation="vertical" >
-
-        <!-- Want 16dp of apparent top padding. Since TextView has 4dp of inset/padding built in,
-            only set marginTop=12dp. -->
-        <LinearLayout
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:layout_marginBottom="@dimen/editor_padding_around_read_only_photo_editor"
-            android:layout_marginTop="12dp"
-            android:orientation="horizontal">
-
-            <ImageView
-                android:id="@+id/kind_icon"
-                android:layout_marginTop="2dp"
-                android:src="@drawable/ic_person_black_24dp"
-                android:contentDescription="@string/header_name_entry"
-                style="@style/EditKindIconStyle" />
-
-            <TextView
-                android:id="@+id/read_only_name"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:layout_marginRight="@dimen/editor_delete_button_width"
-                android:layout_marginEnd="@dimen/editor_delete_button_width"
-                android:singleLine="true"
-                android:textSize="@dimen/editor_form_text_size"
-                android:textColor="?android:attr/textColorSecondary"
-                android:textAlignment="viewStart"
-                android:enabled="false"/>
-
-        </LinearLayout>
-
-        <include
-            android:id="@+id/edit_photo"
-            layout="@layout/item_photo_editor_readonly" />
-
-        <Button
-            android:id="@+id/button_edit_externally"
-            android:text="@string/edit_contact"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:layout_marginTop="4dp"
-            android:layout_marginBottom="@dimen/editor_padding_below_photo"
-            android:layout_marginEnd="13dip"
-            android:layout_marginStart="13dip"/>
-
-        <LinearLayout android:id="@+id/sect_general"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:orientation="vertical"/>
-
-    </LinearLayout>
-
-    <View
-        android:layout_width="match_parent"
-        android:layout_height="@dimen/divider_line_height"
-        android:background="@color/divider_line_color_light" />
-
-</com.android.contacts.editor.RawContactReadOnlyEditorView>
diff --git a/res/layout/take_a_photo_button.xml b/res/layout/take_a_photo_button.xml
deleted file mode 100644
index b837e85..0000000
--- a/res/layout/take_a_photo_button.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="@dimen/photo_picker_item_ideal_width"
-    android:layout_height="@dimen/photo_picker_item_ideal_width"
-    android:background="@color/google_grey_600"
-    android:orientation="vertical">
-
-    <ImageView
-        android:id="@+id/image"
-        android:paddingTop="48dp"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:src="@drawable/ic_photo_camera_white_24dp"
-        android:layout_gravity="center_horizontal"/>
-
-    <TextView
-        android:id="@+id/textLabel"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_centerInParent="true"
-        android:singleLine="true"
-        android:text="@string/take_a_photo_button"
-        android:textSize="14sp"
-        android:textColor="@color/photo_action_button_color"
-        android:paddingTop="9dp"
-        android:paddingBottom="35dp"
-        android:layout_gravity="center_horizontal"/>
-</LinearLayout>
\ No newline at end of file
diff --git a/res/layout/unread_count_tab.xml b/res/layout/unread_count_tab.xml
deleted file mode 100644
index 783f1c1..0000000
--- a/res/layout/unread_count_tab.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2015 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.
--->
-<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:background="@drawable/view_pager_tab_background">
-    <!-- The tab icon -->
-    <ImageView
-        android:id="@+id/icon"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_centerInParent="true" />
-    <TextView
-        android:id="@+id/count"
-        android:background="@drawable/unread_count_background"
-        android:layout_width="wrap_content"
-        android:layout_height="@dimen/tab_unread_count_background_size"
-        android:gravity="center"
-        android:minWidth="@dimen/tab_unread_count_background_size"
-        android:layout_marginStart="@dimen/tab_unread_count_margin_left"
-        android:layout_marginTop="@dimen/tab_unread_count_margin_top"
-        android:layout_toEndOf="@id/icon"
-        android:paddingLeft="@dimen/tab_unread_count_text_padding"
-        android:paddingRight="@dimen/tab_unread_count_text_padding"
-        android:textAlignment="center"
-        android:textSize="@dimen/tab_unread_count_text_size"
-        android:textColor="@color/tab_accent_color"
-        android:fontFamily="sans-serif-medium"
-        android:importantForAccessibility="no" />
-</RelativeLayout>
diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml
index fffba57..0a55b25 100644
--- a/res/values-af/strings.xml
+++ b/res/values-af/strings.xml
@@ -67,6 +67,7 @@
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Voorgestelde kontakte"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Alle kontakte"</string>
     <string name="contactsJoinedMessage" msgid="3343535986195643136">"Kontakte is saamgevoeg"</string>
+    <string name="contact_deleted_named_toast" msgid="6558941164987421174">"<xliff:g id="NAME">%s</xliff:g> uitgevee"</string>
     <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
       <item quantity="other">Kontakte is uitgevee</item>
       <item quantity="one">Kontak is uitgevee</item>
@@ -113,11 +114,11 @@
     <string name="emptyMainList" msgid="2772242747899664460">"Jou kontaktelys is leeg"</string>
     <string name="contactSavedToast" msgid="9171862279493213075">"Kontak gestoor"</string>
     <string name="contactUnlinkedToast" msgid="7122823195786012553">"Kontakte is ontkoppel"</string>
-    <string name="contactSavedErrorToast" msgid="3207250533172944892">"Kon nie kontakveranderinge stoor nie."</string>
-    <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Kon nie kontak ontkoppel nie."</string>
-    <string name="contactJoinErrorToast" msgid="3977932531264809035">"Kon nie kontak skakel nie."</string>
-    <string name="contactGenericErrorToast" msgid="7774911165341591714">"Kon nie kontak stoor nie."</string>
-    <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"Kon nie kontakfotoveranderings stoor nie."</string>
+    <string name="contactSavedErrorToast" msgid="4827033473908688031">"Kon nie kontakveranderinge stoor nie"</string>
+    <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"Kon nie kontak ontkoppel nie"</string>
+    <string name="contactJoinErrorToast" msgid="5735129234573327701">"Kon nie kontak skakel nie"</string>
+    <string name="contactGenericErrorToast" msgid="3885457515665783976">"Kon nie kontak stoor nie"</string>
+    <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Kon nie kontakfotoveranderinge stoor nie"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"Kon nie etiket laai nie"</string>
     <string name="groupSavedToast" msgid="6491495462357722285">"Etiket gestoor"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Etiket is uitgevee"</string>
@@ -126,7 +127,7 @@
     <string name="groupUpdatedToast" msgid="3667977658676267687">"Etiket opgedateer"</string>
     <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Verwyder van etiket"</string>
     <string name="groupMembersAddedToast" msgid="4824834898718972768">"By etiket gevoeg"</string>
-    <string name="groupSavedErrorToast" msgid="8121032018490980184">"Kon nie etiketveranderinge stoor nie."</string>
+    <string name="groupSavedErrorToast" msgid="2355891714292740162">"Kon nie etiketveranderinge stoor nie"</string>
     <string name="groupExistsErrorMessage" msgid="5196811283836946189">"Daardie etiket bestaan reeds."</string>
     <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
       <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> kontakte met foonnommers</item>
@@ -147,7 +148,6 @@
     <string name="callAgain" msgid="3197312117049874778">"Bel weer"</string>
     <string name="returnCall" msgid="8171961914203617813">"Bel terug"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Voeg \"<xliff:g id="EMAIL">%s</xliff:g>\" by kontakte?"</string>
-    <string name="description_contact_photo" msgid="3387458082667894062">"kontakfoto"</string>
     <string name="description_plus_button" msgid="515164827856229880">"plus"</string>
     <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> van <xliff:g id="TOTAL_NUMBER">%s</xliff:g> kontakte"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"Name van jou kontakte"</string>
@@ -192,7 +192,6 @@
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Datum"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Etiket"</string>
     <string name="change_photo" msgid="8530597935483526383">"Verander"</string>
-    <string name="primary_photo" msgid="8517942231868516999">"Primêre foto"</string>
     <string name="description_star" msgid="2605854427360036550">"gunsteling"</string>
     <string name="edit_contact" msgid="7529281274005689512">"Redigeer kontak"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"maak toe"</string>
@@ -269,7 +268,6 @@
     <string name="header_name_entry" msgid="1592791008096288306">"Naam"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"E-pos"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"Foon"</string>
-    <string name="header_photo_entry" msgid="4438023151411853238">"Foto"</string>
     <string name="content_description_expand_editor" msgid="1111381475901897470">"Klik om kontakredakteur uit te vou."</string>
     <string name="content_description_collapse_editor" msgid="7598061318022977825">"Klik om kontakredakteur in te vou."</string>
     <string name="content_description_directions" msgid="2686791825798189335">"rigtingaanwysings na ligging"</string>
@@ -284,6 +282,8 @@
     <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Verander foto"</string>
     <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Kon nie redigeer oopmaak nie."</string>
     <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Stoor na"</string>
+    <!-- no translation found for compact_editor_account_selector_read_only_title (1869435992721760221) -->
+    <skip />
     <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"Stoor tans na <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Dubbeltik om \'n ander rekening te kies."</string>
     <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
       <item quantity="other">Geskakelde kontakte (<xliff:g id="COUNT">%d</xliff:g>)</item>
@@ -454,22 +454,14 @@
     <string name="chat_jabber" msgid="7561444230307829609">"Klets met Jabber"</string>
     <string name="chat" msgid="9025361898797412245">"Klets"</string>
     <string name="description_minus_button" msgid="6908099247930477551">"vee uit"</string>
-    <!-- no translation found for expand_name_fields_description (6883935911480726652) -->
-    <skip />
-    <!-- no translation found for collapse_name_fields_description (4757877385895561556) -->
-    <skip />
-    <!-- no translation found for expand_phonetic_name_fields_description (3865726859582581741) -->
-    <skip />
-    <!-- no translation found for collapse_phonetic_name_fields_description (9102249481855019452) -->
-    <skip />
-    <!-- no translation found for expand_fields_description (8129294181216760037) -->
-    <skip />
-    <!-- no translation found for collapse_fields_description (1884143625854637874) -->
-    <skip />
-    <!-- no translation found for announce_expanded_fields (1075947220478530622) -->
-    <skip />
-    <!-- no translation found for announce_collapsed_fields (6414231530177338704) -->
-    <skip />
+    <string name="expand_name_fields_description" msgid="6883935911480726652">"Vou naamvelde uit"</string>
+    <string name="collapse_name_fields_description" msgid="4757877385895561556">"Vou naamvelde in"</string>
+    <string name="expand_phonetic_name_fields_description" msgid="3865726859582581741">"Vou fonetiese naamvelde uit"</string>
+    <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Vou fonetiese naamvelde in"</string>
+    <string name="expand_fields_description" msgid="8129294181216760037">"Vou uit"</string>
+    <string name="collapse_fields_description" msgid="1884143625854637874">"Vou in"</string>
+    <string name="announce_expanded_fields" msgid="1075947220478530622">"Uitgevou"</string>
+    <string name="announce_collapsed_fields" msgid="6414231530177338704">"Ingevou"</string>
     <string name="list_filter_all_accounts" msgid="8908683398914322369">"Alle kontakte"</string>
     <string name="list_filter_all_starred" msgid="5031734941601931356">"Gester"</string>
     <string name="list_filter_customize" msgid="4789963356004169321">"Pasmaak"</string>
@@ -555,7 +547,8 @@
     <string name="share_favorite_contacts" msgid="4280926751003081042">"Deel gunstelingkontakte"</string>
     <string name="share_contacts" msgid="8109287987498711664">"Deel alle kontakte"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"Kon nie kontakte deel nie."</string>
-    <string name="dialog_import_export" msgid="4360648034889921624">"Voer kontakte in/uit"</string>
+    <!-- no translation found for dialog_export (1628001095187741417) -->
+    <skip />
     <string name="dialog_import" msgid="2431698729761448759">"Voer kontakte in"</string>
     <string name="share_error" msgid="948429331673358107">"Hierdie kontak kan nie gedeel word nie."</string>
     <string name="no_contact_to_share" msgid="1276397530378323033">"Daar is geen kontakte om te deel nie."</string>
@@ -570,7 +563,10 @@
     <string name="menu_clear_frequents" msgid="7688250191932838833">"Vee dikwels-gebruiktes uit"</string>
     <string name="menu_select_sim" msgid="3603578201960504010">"Kies SIM-kaart"</string>
     <string name="menu_accounts" msgid="1424330057450189074">"Bestuur rekeninge"</string>
-    <string name="menu_import_export" msgid="26217871113229507">"Voer in/uit"</string>
+    <!-- no translation found for menu_import (6107961135813836467) -->
+    <skip />
+    <!-- no translation found for menu_export (2658783911863503902) -->
+    <skip />
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"Geblokkeerde nommers"</string>
     <string name="contact_status_update_attribution" msgid="752179367353018597">"via <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> via <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
@@ -604,4 +600,8 @@
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> sek."</string>
     <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> min. <xliff:g id="SECONDS">%s</xliff:g> s."</string>
     <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> uur <xliff:g id="MINUTES_1">%s</xliff:g> min. <xliff:g id="SECONDS">%s</xliff:g> sek."</string>
+    <!-- no translation found for dynamic_shortcut_disabled_message (249939425761315252) -->
+    <skip />
+    <!-- no translation found for dynamic_shortcut_contact_removed_message (6845645831837615899) -->
+    <skip />
 </resources>
diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml
index cf54107..3ef9626 100644
--- a/res/values-am/strings.xml
+++ b/res/values-am/strings.xml
@@ -67,6 +67,7 @@
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"አስተያየት የተሰጠባቸው እውቅያዎች"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"ሁሉም እውቅያዎች"</string>
     <string name="contactsJoinedMessage" msgid="3343535986195643136">"ዕውቂያዎች ተገናኝተዋል"</string>
+    <string name="contact_deleted_named_toast" msgid="6558941164987421174">"<xliff:g id="NAME">%s</xliff:g> ተሰርዟል"</string>
     <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
       <item quantity="one">እውቂያዎች ተሰርዘዋል</item>
       <item quantity="other">እውቂያዎች ተሰርዘዋል</item>
@@ -113,11 +114,11 @@
     <string name="emptyMainList" msgid="2772242747899664460">"የእውቂያዎች ዝርዝርዎ ባዶ ነው"</string>
     <string name="contactSavedToast" msgid="9171862279493213075">"ዕውቂያ ተቀምጧል"</string>
     <string name="contactUnlinkedToast" msgid="7122823195786012553">"የእውቂያዎች ግንኙነት ተላቅቋል"</string>
-    <string name="contactSavedErrorToast" msgid="3207250533172944892">"የእውቂያ ለውጦች ማስቀመጥ አልተቻለም::"</string>
-    <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Couldn\'t unlink contact."</string>
-    <string name="contactJoinErrorToast" msgid="3977932531264809035">"እውቂያውን ማገናኘት አልተቻለም።"</string>
-    <string name="contactGenericErrorToast" msgid="7774911165341591714">"እውቂያን ማስቀመጥ ላይ ስህተት።"</string>
-    <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"የእውቂያ ፎቶ ለውጦችን ማስቀመጥ አልተቻለም።"</string>
+    <string name="contactSavedErrorToast" msgid="4827033473908688031">"የእውቂያ ለውጦችን ማስቀመጥ አልተቻለም"</string>
+    <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"እውቂያን ማላቀቅ አልተቻለም"</string>
+    <string name="contactJoinErrorToast" msgid="5735129234573327701">"እውቂያውን ማገናኘት አልተቻለም"</string>
+    <string name="contactGenericErrorToast" msgid="3885457515665783976">"እውቂያን ለማስቀመጥ ችግር አጋጥሟል"</string>
+    <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"የእውቂያ ፎቶ ለውጦችን ማስቀመጥ አልተቻለም"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"መሰየሚያ መጫን አልተሳካም"</string>
     <string name="groupSavedToast" msgid="6491495462357722285">"መሰየሚያ ተቀምጧል"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"መሰየሚያ ተሰርዟል"</string>
@@ -126,7 +127,7 @@
     <string name="groupUpdatedToast" msgid="3667977658676267687">"መሰየሚያ ዘምኗል"</string>
     <string name="groupMembersRemovedToast" msgid="3510563559799376603">"ከመሰየሚያ ተወግዷል"</string>
     <string name="groupMembersAddedToast" msgid="4824834898718972768">"ወደ ስያሜ ታክሏል"</string>
-    <string name="groupSavedErrorToast" msgid="8121032018490980184">"የመሰየሚያ ለውጦችን መቀየር አልተቻለም።"</string>
+    <string name="groupSavedErrorToast" msgid="2355891714292740162">"የመሰየሚያ ለውጦችን ማስቀመጥ አልተቻለም።"</string>
     <string name="groupExistsErrorMessage" msgid="5196811283836946189">"ያ መሰየሚያ ቀድሞ አለ።"</string>
     <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
       <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> ዕውቂያዎች ከስልክ ቁጥሮች ጋር</item>
@@ -147,7 +148,6 @@
     <string name="callAgain" msgid="3197312117049874778">"እንደገና ደውል"</string>
     <string name="returnCall" msgid="8171961914203617813">"ጥሪ መልስ"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"<xliff:g id="EMAIL">%s</xliff:g> ወደ እውቅያዎች ዝርዝር ይታከል"</string>
-    <string name="description_contact_photo" msgid="3387458082667894062">"የዕውቂያ ፎቶ"</string>
     <string name="description_plus_button" msgid="515164827856229880">"ተጨማሪ"</string>
     <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> ከ <xliff:g id="TOTAL_NUMBER">%s</xliff:g> እውቂያዎች"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"የዕውቂያዎችዎ ስሞች"</string>
@@ -192,7 +192,6 @@
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"ቀን"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"መሰየሚያ"</string>
     <string name="change_photo" msgid="8530597935483526383">"ቀይር"</string>
-    <string name="primary_photo" msgid="8517942231868516999">"ዋና ፎቶ"</string>
     <string name="description_star" msgid="2605854427360036550">"ተወዳጅ"</string>
     <string name="edit_contact" msgid="7529281274005689512">"እውቅያ አርትዕ"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"ዝጋ"</string>
@@ -269,7 +268,6 @@
     <string name="header_name_entry" msgid="1592791008096288306">"ስም"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"ኢሜይል"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"ስልክ"</string>
-    <string name="header_photo_entry" msgid="4438023151411853238">"ፎተግራፍ"</string>
     <string name="content_description_expand_editor" msgid="1111381475901897470">"የእውቂያ አርታዒን ለመዘርጋት ጠቅ ያድርጉ።"</string>
     <string name="content_description_collapse_editor" msgid="7598061318022977825">"የእውቂያ አርታዒን ለመሰብሰብ ጠቅ ያድርጉ።"</string>
     <string name="content_description_directions" msgid="2686791825798189335">"ወደ አካባቢ የሚወስዱ አቅጣጫዎች"</string>
@@ -284,6 +282,8 @@
     <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"ፎቶ ለውጥ"</string>
     <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"አርታዒውን መክፈት አልተሳካም።"</string>
     <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"ወደዚህ በማስቀመጥ ላይ፦"</string>
+    <!-- no translation found for compact_editor_account_selector_read_only_title (1869435992721760221) -->
+    <skip />
     <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"አሁን ላይ ወደ <xliff:g id="ACCOUNT_NAME">%s</xliff:g> በማስቀመጥ ላይ። ሌላ መለያ ለመምረጥ ሁለቴ መታ ያድርጉ።"</string>
     <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
       <item quantity="one">የተገናኙ እውቂያዎች (<xliff:g id="COUNT">%d</xliff:g>)</item>
@@ -454,22 +454,14 @@
     <string name="chat_jabber" msgid="7561444230307829609">"ጨዋታ Jabber በመጠቀም"</string>
     <string name="chat" msgid="9025361898797412245">"ጨዋታ"</string>
     <string name="description_minus_button" msgid="6908099247930477551">"ሰርዝ"</string>
-    <!-- no translation found for expand_name_fields_description (6883935911480726652) -->
-    <skip />
-    <!-- no translation found for collapse_name_fields_description (4757877385895561556) -->
-    <skip />
-    <!-- no translation found for expand_phonetic_name_fields_description (3865726859582581741) -->
-    <skip />
-    <!-- no translation found for collapse_phonetic_name_fields_description (9102249481855019452) -->
-    <skip />
-    <!-- no translation found for expand_fields_description (8129294181216760037) -->
-    <skip />
-    <!-- no translation found for collapse_fields_description (1884143625854637874) -->
-    <skip />
-    <!-- no translation found for announce_expanded_fields (1075947220478530622) -->
-    <skip />
-    <!-- no translation found for announce_collapsed_fields (6414231530177338704) -->
-    <skip />
+    <string name="expand_name_fields_description" msgid="6883935911480726652">"የስም መስኮችን ይዘርጉ"</string>
+    <string name="collapse_name_fields_description" msgid="4757877385895561556">"የስም መስኮችን ይሰብስቡ"</string>
+    <string name="expand_phonetic_name_fields_description" msgid="3865726859582581741">"የድምፀ-ልሳን የስም መስኮችን ይዘርጉ"</string>
+    <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"የድምፀ-ልሳን የስም መስኮችን ይሰብስቡ"</string>
+    <string name="expand_fields_description" msgid="8129294181216760037">"ይዘርጉ"</string>
+    <string name="collapse_fields_description" msgid="1884143625854637874">"ይሰብስቡ"</string>
+    <string name="announce_expanded_fields" msgid="1075947220478530622">"ተዘርግቷል"</string>
+    <string name="announce_collapsed_fields" msgid="6414231530177338704">"ተሰብስቧል"</string>
     <string name="list_filter_all_accounts" msgid="8908683398914322369">"ሁሉም እውቅያዎች"</string>
     <string name="list_filter_all_starred" msgid="5031734941601931356">"ኮከብ የተደረገባቸው"</string>
     <string name="list_filter_customize" msgid="4789963356004169321">"ብጁ አድርግ"</string>
@@ -555,7 +547,8 @@
     <string name="share_favorite_contacts" msgid="4280926751003081042">"ተወዳጅ እውቂያዎችን አጋራ"</string>
     <string name="share_contacts" msgid="8109287987498711664">"ሁሉንም እውቂያዎች አጋራ"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"እውቂያዎችን ማጋራት አልተሳካም።"</string>
-    <string name="dialog_import_export" msgid="4360648034889921624">"ዕውቂያዎች አስመጣ/ላክ"</string>
+    <!-- no translation found for dialog_export (1628001095187741417) -->
+    <skip />
     <string name="dialog_import" msgid="2431698729761448759">"እውቅያዎችን ከውጭ አስመጣ"</string>
     <string name="share_error" msgid="948429331673358107">"ይህ ዕውቂያ መጋራት አይችልም።"</string>
     <string name="no_contact_to_share" msgid="1276397530378323033">"ምንም የሚጋሩ እውቂያዎች የሉም።"</string>
@@ -570,7 +563,10 @@
     <string name="menu_clear_frequents" msgid="7688250191932838833">"ተደጋጋሚዎችን አጽዳ"</string>
     <string name="menu_select_sim" msgid="3603578201960504010">"ሲም ካርድ ይምረጡ"</string>
     <string name="menu_accounts" msgid="1424330057450189074">"መለያዎችን አስተዳድር"</string>
-    <string name="menu_import_export" msgid="26217871113229507">"አስመጣ/ላክ"</string>
+    <!-- no translation found for menu_import (6107961135813836467) -->
+    <skip />
+    <!-- no translation found for menu_export (2658783911863503902) -->
+    <skip />
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"የታገዱ ቁጥሮች"</string>
     <string name="contact_status_update_attribution" msgid="752179367353018597">"በ<xliff:g id="SOURCE">%1$s</xliff:g> በኩል"</string>
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g>በ<xliff:g id="SOURCE">%2$s</xliff:g> በኩል"</string>
@@ -604,4 +600,8 @@
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> ሴ"</string>
     <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> ደቂቃ <xliff:g id="SECONDS">%s</xliff:g> ሴ"</string>
     <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> ሰዓት <xliff:g id="MINUTES_1">%s</xliff:g> ደቂቃ <xliff:g id="SECONDS">%s</xliff:g> ሴ"</string>
+    <!-- no translation found for dynamic_shortcut_disabled_message (249939425761315252) -->
+    <skip />
+    <!-- no translation found for dynamic_shortcut_contact_removed_message (6845645831837615899) -->
+    <skip />
 </resources>
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index bc36298..f287a22 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -67,6 +67,7 @@
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"جهات الاتصال المقترحة"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"جميع جهات الاتصال"</string>
     <string name="contactsJoinedMessage" msgid="3343535986195643136">"تم ربط جهات الاتصال"</string>
+    <string name="contact_deleted_named_toast" msgid="6558941164987421174">"تم حذف <xliff:g id="NAME">%s</xliff:g>"</string>
     <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
       <item quantity="zero">تم حذف جهة الاتصال</item>
       <item quantity="two">تم حذف جهتي الاتصال</item>
@@ -125,11 +126,11 @@
     <string name="emptyMainList" msgid="2772242747899664460">"قائمة جهات اتصالك فارغة"</string>
     <string name="contactSavedToast" msgid="9171862279493213075">"تم حفظ جهة الاتصال."</string>
     <string name="contactUnlinkedToast" msgid="7122823195786012553">"تم إلغاء ربط جهات الاتصال"</string>
-    <string name="contactSavedErrorToast" msgid="3207250533172944892">"تعذر حفظ التغييرات التي تم إجراؤها على جهة الاتصال."</string>
-    <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"تعذر إلغاء ربط جهة الاتصال."</string>
-    <string name="contactJoinErrorToast" msgid="3977932531264809035">"تعذر ربط جهة الاتصال."</string>
-    <string name="contactGenericErrorToast" msgid="7774911165341591714">"حدث خطأ أثناء حفظ جهة الاتصال."</string>
-    <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"تعذر حفظ تغييرات صورة جهة الاتصال."</string>
+    <string name="contactSavedErrorToast" msgid="4827033473908688031">"تعذر حفظ التغييرات التي تم إجراؤها على جهة الاتصال"</string>
+    <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"تعذر إلغاء ربط جهة الاتصال"</string>
+    <string name="contactJoinErrorToast" msgid="5735129234573327701">"تعذر ربط جهة الاتصال"</string>
+    <string name="contactGenericErrorToast" msgid="3885457515665783976">"حدث خطأ أثناء حفظ جهة الاتصال"</string>
+    <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"تعذر حفظ تغييرات صورة جهة الاتصال"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"فشل تحميل التصنيف"</string>
     <string name="groupSavedToast" msgid="6491495462357722285">"تم حفظ التصنيف"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"تم حذف التصنيف"</string>
@@ -138,7 +139,7 @@
     <string name="groupUpdatedToast" msgid="3667977658676267687">"تم تحديث التصنيف"</string>
     <string name="groupMembersRemovedToast" msgid="3510563559799376603">"تمت الإزالة من التصنيف"</string>
     <string name="groupMembersAddedToast" msgid="4824834898718972768">"تمت الإضافة إلى التصنيف"</string>
-    <string name="groupSavedErrorToast" msgid="8121032018490980184">"لا يمكن حفظ التغييرات على التصنيف."</string>
+    <string name="groupSavedErrorToast" msgid="2355891714292740162">"لا يمكن حفظ التغييرات على التصنيف"</string>
     <string name="groupExistsErrorMessage" msgid="5196811283836946189">"هذا التصنيف موجود فعلاً"</string>
     <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
       <item quantity="zero">لا توجد أية جهات اتصال بها أرقام هواتف (<xliff:g id="COUNT">%d</xliff:g>)</item>
@@ -171,7 +172,6 @@
     <string name="callAgain" msgid="3197312117049874778">"الاتصال مرة أخرى"</string>
     <string name="returnCall" msgid="8171961914203617813">"معاودة اتصال بمكالمة فائتة"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"هل ترغب في إضافة \"<xliff:g id="EMAIL">%s</xliff:g>\" إلى جهات الاتصال؟"</string>
-    <string name="description_contact_photo" msgid="3387458082667894062">"صورة جهة الاتصال"</string>
     <string name="description_plus_button" msgid="515164827856229880">"علامة زائد"</string>
     <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> من <xliff:g id="TOTAL_NUMBER">%s</xliff:g> من جهات الاتصال"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"أسماء جهات الاتصال"</string>
@@ -220,7 +220,6 @@
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"التاريخ"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"التصنيف"</string>
     <string name="change_photo" msgid="8530597935483526383">"تغيير"</string>
-    <string name="primary_photo" msgid="8517942231868516999">"الصورة الأساسية"</string>
     <string name="description_star" msgid="2605854427360036550">"مفضل"</string>
     <string name="edit_contact" msgid="7529281274005689512">"تعديل جهة الاتصال"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"إغلاق"</string>
@@ -297,7 +296,6 @@
     <string name="header_name_entry" msgid="1592791008096288306">"الاسم"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"البريد الإلكتروني"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"الهاتف"</string>
-    <string name="header_photo_entry" msgid="4438023151411853238">"الصورة"</string>
     <string name="content_description_expand_editor" msgid="1111381475901897470">"يمكنك النقر لتوسيع محرر جهات الاتصال."</string>
     <string name="content_description_collapse_editor" msgid="7598061318022977825">"يمكنك النقر لتصغير محرر جهات الاتصال."</string>
     <string name="content_description_directions" msgid="2686791825798189335">"الاتجاهات إلى الموقع"</string>
@@ -312,6 +310,8 @@
     <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"تغيير الصورة"</string>
     <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"أخفق فتح المحرر."</string>
     <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"الحفظ في"</string>
+    <!-- no translation found for compact_editor_account_selector_read_only_title (1869435992721760221) -->
+    <skip />
     <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"جارٍ الحفظ حاليًا في <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. يمكنك النقر نقرًا مزدوجًا لاختيار حساب آخر."</string>
     <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
       <item quantity="zero">جهات الاتصال المرتبطة (<xliff:g id="COUNT">%d</xliff:g>)</item>
@@ -498,22 +498,14 @@
     <string name="chat_jabber" msgid="7561444230307829609">"‏الدردشة باستخدام Jabber"</string>
     <string name="chat" msgid="9025361898797412245">"دردشة"</string>
     <string name="description_minus_button" msgid="6908099247930477551">"حذف"</string>
-    <!-- no translation found for expand_name_fields_description (6883935911480726652) -->
-    <skip />
-    <!-- no translation found for collapse_name_fields_description (4757877385895561556) -->
-    <skip />
-    <!-- no translation found for expand_phonetic_name_fields_description (3865726859582581741) -->
-    <skip />
-    <!-- no translation found for collapse_phonetic_name_fields_description (9102249481855019452) -->
-    <skip />
-    <!-- no translation found for expand_fields_description (8129294181216760037) -->
-    <skip />
-    <!-- no translation found for collapse_fields_description (1884143625854637874) -->
-    <skip />
-    <!-- no translation found for announce_expanded_fields (1075947220478530622) -->
-    <skip />
-    <!-- no translation found for announce_collapsed_fields (6414231530177338704) -->
-    <skip />
+    <string name="expand_name_fields_description" msgid="6883935911480726652">"توسيع حقول الأسماء"</string>
+    <string name="collapse_name_fields_description" msgid="4757877385895561556">"تصغير حقول الأسماء"</string>
+    <string name="expand_phonetic_name_fields_description" msgid="3865726859582581741">"توسيع حقول الأسماء الصوتية"</string>
+    <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"تصغير حقول الأسماء الصوتية"</string>
+    <string name="expand_fields_description" msgid="8129294181216760037">"توسيع"</string>
+    <string name="collapse_fields_description" msgid="1884143625854637874">"تصغير"</string>
+    <string name="announce_expanded_fields" msgid="1075947220478530622">"في وضع التوسيع"</string>
+    <string name="announce_collapsed_fields" msgid="6414231530177338704">"في وضع التصغير"</string>
     <string name="list_filter_all_accounts" msgid="8908683398914322369">"جميع جهات الاتصال"</string>
     <string name="list_filter_all_starred" msgid="5031734941601931356">"مميّزة بنجمة"</string>
     <string name="list_filter_customize" msgid="4789963356004169321">"تخصيص"</string>
@@ -599,7 +591,8 @@
     <string name="share_favorite_contacts" msgid="4280926751003081042">"مشاركة جهات الاتصال المفضلة"</string>
     <string name="share_contacts" msgid="8109287987498711664">"مشاركة جميع جهات الاتصال"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"أخفقت مشاركة جهات الاتصال."</string>
-    <string name="dialog_import_export" msgid="4360648034889921624">"استيراد/تصدير جهات اتصال"</string>
+    <!-- no translation found for dialog_export (1628001095187741417) -->
+    <skip />
     <string name="dialog_import" msgid="2431698729761448759">"استيراد جهات الاتصال"</string>
     <string name="share_error" msgid="948429331673358107">"لا يمكن مشاركة جهة الاتصال هذه."</string>
     <string name="no_contact_to_share" msgid="1276397530378323033">"ليست هناك جهات اتصال لمشاركتها."</string>
@@ -614,7 +607,10 @@
     <string name="menu_clear_frequents" msgid="7688250191932838833">"محو قائمة من يتصل بهم كثيرًا"</string>
     <string name="menu_select_sim" msgid="3603578201960504010">"‏تحديد شريحة SIM"</string>
     <string name="menu_accounts" msgid="1424330057450189074">"إدارة الحسابات"</string>
-    <string name="menu_import_export" msgid="26217871113229507">"استيراد/تصدير"</string>
+    <!-- no translation found for menu_import (6107961135813836467) -->
+    <skip />
+    <!-- no translation found for menu_export (2658783911863503902) -->
+    <skip />
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"الأرقام المحظورة"</string>
     <string name="contact_status_update_attribution" msgid="752179367353018597">"عبر <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> عبر <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
@@ -652,4 +648,8 @@
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> ثانية"</string>
     <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> دقيقة <xliff:g id="SECONDS">%s</xliff:g> ثانية"</string>
     <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> ساعة <xliff:g id="MINUTES_1">%s</xliff:g> دقيقة <xliff:g id="SECONDS">%s</xliff:g> ثانية"</string>
+    <!-- no translation found for dynamic_shortcut_disabled_message (249939425761315252) -->
+    <skip />
+    <!-- no translation found for dynamic_shortcut_contact_removed_message (6845645831837615899) -->
+    <skip />
 </resources>
diff --git a/res/values-az-rAZ/strings.xml b/res/values-az-rAZ/strings.xml
index da62b6b..9619aef 100644
--- a/res/values-az-rAZ/strings.xml
+++ b/res/values-az-rAZ/strings.xml
@@ -67,6 +67,7 @@
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Təklif edilmiş kontaktlar"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Bütün kontaktlar"</string>
     <string name="contactsJoinedMessage" msgid="3343535986195643136">"Kontaktlar əlaqələndirildi"</string>
+    <string name="contact_deleted_named_toast" msgid="6558941164987421174">"<xliff:g id="NAME">%s</xliff:g> silindi"</string>
     <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
       <item quantity="other">Kontakt silindi</item>
       <item quantity="one">Kontakt silindi</item>
@@ -113,11 +114,11 @@
     <string name="emptyMainList" msgid="2772242747899664460">"Kontakt siyahınız boşdur"</string>
     <string name="contactSavedToast" msgid="9171862279493213075">"Kontakt yadda saxlanıldı"</string>
     <string name="contactUnlinkedToast" msgid="7122823195786012553">"Kontaktlar əlaqələndirilməyib"</string>
-    <string name="contactSavedErrorToast" msgid="3207250533172944892">"Kontakt dəyişiklikləri saxlanıla bilmədi."</string>
-    <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Kontaktdan ayrıla bilmədi."</string>
-    <string name="contactJoinErrorToast" msgid="3977932531264809035">"Kontaktı əlaqələndirə bilmədi."</string>
-    <string name="contactGenericErrorToast" msgid="7774911165341591714">"Kontaktın yadda saxlanmasında xəta"</string>
-    <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"Kontakt foto dəyişiklikləri yadda saxlanılmadı."</string>
+    <string name="contactSavedErrorToast" msgid="4827033473908688031">"Kontakt dəyişiklikləri saxlanıla bilmədi"</string>
+    <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"Kontaktdan ayrıla bilmədi"</string>
+    <string name="contactJoinErrorToast" msgid="5735129234573327701">"Kontaktı əlaqələndirə bilmədi"</string>
+    <string name="contactGenericErrorToast" msgid="3885457515665783976">"Kontaktın yadda saxlanmasında xəta"</string>
+    <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Kontakt foto dəyişiklikləri yadda saxlanılmadı"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"Etiketi yükləmək uğursuz oldu"</string>
     <string name="groupSavedToast" msgid="6491495462357722285">"Etiket yadda saxlanıldı"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Etiket silindi"</string>
@@ -126,7 +127,7 @@
     <string name="groupUpdatedToast" msgid="3667977658676267687">"Etiket yeniləndi"</string>
     <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Etiketdən silindi"</string>
     <string name="groupMembersAddedToast" msgid="4824834898718972768">"Etiketə əlavə edildi"</string>
-    <string name="groupSavedErrorToast" msgid="8121032018490980184">"Etiket dəyişikliyini yadda saxlamaq mümkün olmadı."</string>
+    <string name="groupSavedErrorToast" msgid="2355891714292740162">"Etiket dəyişikliyini yadda saxlamaq mümkün olmadı"</string>
     <string name="groupExistsErrorMessage" msgid="5196811283836946189">"Həmin etiket artıq mövcuddur"</string>
     <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
       <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> əlaqə</item>
@@ -147,7 +148,6 @@
     <string name="callAgain" msgid="3197312117049874778">"Yenidən zəng edin"</string>
     <string name="returnCall" msgid="8171961914203617813">"Zəngi qaytarın"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"\"<xliff:g id="EMAIL">%s</xliff:g>\" kontaktlara əlavə olunsun?"</string>
-    <string name="description_contact_photo" msgid="3387458082667894062">"Kontakt şəkli"</string>
     <string name="description_plus_button" msgid="515164827856229880">"plus"</string>
     <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="TOTAL_NUMBER">%s</xliff:g> kontaktdan <xliff:g id="CURRENT_NUMBER">%s</xliff:g> kontakt"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"Kontaktlarınızın adları"</string>
@@ -192,7 +192,6 @@
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Tarix"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Etiket"</string>
     <string name="change_photo" msgid="8530597935483526383">"Dəyişdir"</string>
-    <string name="primary_photo" msgid="8517942231868516999">"Əsas şəkil"</string>
     <string name="description_star" msgid="2605854427360036550">"sevimli"</string>
     <string name="edit_contact" msgid="7529281274005689512">"Kontaktı redaktə edin"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"qapadın"</string>
@@ -269,7 +268,6 @@
     <string name="header_name_entry" msgid="1592791008096288306">"Ad"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"E-poçt"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"Telefon"</string>
-    <string name="header_photo_entry" msgid="4438023151411853238">"Şəkil"</string>
     <string name="content_description_expand_editor" msgid="1111381475901897470">"Əlaqə redaktorunu genişləndirmək üçün klikləyin."</string>
     <string name="content_description_collapse_editor" msgid="7598061318022977825">"Əlaqə redaktorunu yığışdırmaq üçün klikləyin."</string>
     <string name="content_description_directions" msgid="2686791825798189335">"məkana istiqamətlər"</string>
@@ -284,6 +282,8 @@
     <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Şəkli dəyişin"</string>
     <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Redaktoru açmaq uğursuz oldu."</string>
     <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Hesabda yadda saxlanır"</string>
+    <!-- no translation found for compact_editor_account_selector_read_only_title (1869435992721760221) -->
+    <skip />
     <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"Hal-hazırda <xliff:g id="ACCOUNT_NAME">%s</xliff:g> hesabında yadda saxlanır. Fərqli hesab seçmək üçün iki dəfə basın."</string>
     <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
       <item quantity="other">Əlaqələnmiş kontakt (<xliff:g id="COUNT">%d</xliff:g>)</item>
@@ -454,22 +454,14 @@
     <string name="chat_jabber" msgid="7561444230307829609">"Jabber üzərindən çat"</string>
     <string name="chat" msgid="9025361898797412245">"Çat"</string>
     <string name="description_minus_button" msgid="6908099247930477551">"sil"</string>
-    <!-- no translation found for expand_name_fields_description (6883935911480726652) -->
-    <skip />
-    <!-- no translation found for collapse_name_fields_description (4757877385895561556) -->
-    <skip />
-    <!-- no translation found for expand_phonetic_name_fields_description (3865726859582581741) -->
-    <skip />
-    <!-- no translation found for collapse_phonetic_name_fields_description (9102249481855019452) -->
-    <skip />
-    <!-- no translation found for expand_fields_description (8129294181216760037) -->
-    <skip />
-    <!-- no translation found for collapse_fields_description (1884143625854637874) -->
-    <skip />
-    <!-- no translation found for announce_expanded_fields (1075947220478530622) -->
-    <skip />
-    <!-- no translation found for announce_collapsed_fields (6414231530177338704) -->
-    <skip />
+    <string name="expand_name_fields_description" msgid="6883935911480726652">"Ad sahələrini genişləndirin"</string>
+    <string name="collapse_name_fields_description" msgid="4757877385895561556">"Ad sahələrini yığcamlaşdırın"</string>
+    <string name="expand_phonetic_name_fields_description" msgid="3865726859582581741">"Fonetik ad sahələrini genişləndirin"</string>
+    <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Fonetik ad sahələrini yığcamlaşdırın"</string>
+    <string name="expand_fields_description" msgid="8129294181216760037">"Genişləndirin"</string>
+    <string name="collapse_fields_description" msgid="1884143625854637874">"Yığcamlaşdırın"</string>
+    <string name="announce_expanded_fields" msgid="1075947220478530622">"Genişləndirilib"</string>
+    <string name="announce_collapsed_fields" msgid="6414231530177338704">"Yığcamlaşdırılıb"</string>
     <string name="list_filter_all_accounts" msgid="8908683398914322369">"Bütün kontaktlar"</string>
     <string name="list_filter_all_starred" msgid="5031734941601931356">"Ulduzlu"</string>
     <string name="list_filter_customize" msgid="4789963356004169321">"Fərdiləşdirin"</string>
@@ -555,7 +547,8 @@
     <string name="share_favorite_contacts" msgid="4280926751003081042">"Sevdiyiniz kontaktları paylaşın"</string>
     <string name="share_contacts" msgid="8109287987498711664">"Bütün kontaktları paylaşın"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"Kontaktları paylaşmaq uğursuz oldu."</string>
-    <string name="dialog_import_export" msgid="4360648034889921624">"Kontaktları import/eksport edin"</string>
+    <!-- no translation found for dialog_export (1628001095187741417) -->
+    <skip />
     <string name="dialog_import" msgid="2431698729761448759">"Kontaktların importu"</string>
     <string name="share_error" msgid="948429331673358107">"Bu kontakt paylaşıla bilməz."</string>
     <string name="no_contact_to_share" msgid="1276397530378323033">"Bölüşmək üçün kontakt yoxdur."</string>
@@ -570,7 +563,10 @@
     <string name="menu_clear_frequents" msgid="7688250191932838833">"Müntəzəmləri təmizləyin"</string>
     <string name="menu_select_sim" msgid="3603578201960504010">"SIM kart seçin"</string>
     <string name="menu_accounts" msgid="1424330057450189074">"Hesabları idarə edin"</string>
-    <string name="menu_import_export" msgid="26217871113229507">"İmport/eksport"</string>
+    <!-- no translation found for menu_import (6107961135813836467) -->
+    <skip />
+    <!-- no translation found for menu_export (2658783911863503902) -->
+    <skip />
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"Bloklanmış nömrələr"</string>
     <string name="contact_status_update_attribution" msgid="752179367353018597">"<xliff:g id="SOURCE">%1$s</xliff:g> vasitəsilə"</string>
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="SOURCE">%2$s</xliff:g> vasitəsilə <xliff:g id="DATE">%1$s</xliff:g>"</string>
@@ -604,4 +600,8 @@
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> saniyə"</string>
     <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> dəq <xliff:g id="SECONDS">%s</xliff:g> san"</string>
     <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> saat <xliff:g id="MINUTES_1">%s</xliff:g> dəqiqə <xliff:g id="SECONDS">%s</xliff:g> saniyə"</string>
+    <!-- no translation found for dynamic_shortcut_disabled_message (249939425761315252) -->
+    <skip />
+    <!-- no translation found for dynamic_shortcut_contact_removed_message (6845645831837615899) -->
+    <skip />
 </resources>
diff --git a/res/values-b+sr+Latn-sw600dp/strings.xml b/res/values-b+sr+Latn-sw600dp/strings.xml
new file mode 100644
index 0000000..f6727a7
--- /dev/null
+++ b/res/values-b+sr+Latn-sw600dp/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  ~ Copyright (C) 2012 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
+   -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="account_phone" msgid="347665663520819575">"Uređaj"</string>
+    <string name="composer_has_no_exportable_contact" msgid="5998889616701036804">"Nema kontakata za izvoz. Ako imate kontakte na tabletu, neki dobavljači podataka možda neće dozvoliti izvoz kontakata sa tableta."</string>
+</resources>
diff --git a/res/values-b+sr+Latn/strings.xml b/res/values-b+sr+Latn/strings.xml
index 3078976..1b8ea2d 100644
--- a/res/values-b+sr+Latn/strings.xml
+++ b/res/values-b+sr+Latn/strings.xml
@@ -17,9 +17,6 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="applicationLabel" msgid="3906689777043645443">"Kontakti"</string>
-    <string name="launcherActivityLabel" msgid="6497230399032392417">"Kontakti"</string>
-    <string name="quickContactActivityLabel" msgid="7985456650689347268">"Prikaži kontakt"</string>
-    <string name="editContactActivityLabel" msgid="1129944572070802839">"Izmeni kontakt"</string>
     <string name="contactsList" msgid="8661624236494819731">"Kontakti"</string>
     <string name="shortcutContact" msgid="749243779392912958">"Kontakt"</string>
     <string name="shortcutDialContact" msgid="746622101599186779">"Direktno biranje"</string>
@@ -31,12 +28,7 @@
     <string name="contactPickerActivityTitle" msgid="4301062192337417640">"Izaberite kontakt"</string>
     <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Izaberite"</string>
     <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Napravi novi kontakt"</string>
-    <string name="starredList" msgid="4817256136413959463">"Sa zvezdicom"</string>
-    <string name="frequentList" msgid="7154768136473953056">"Česti"</string>
-    <string name="strequentList" msgid="5640192862059373511">"Omiljeno"</string>
     <string name="viewContactTitle" msgid="7989394521836644384">"Detalji o kontaktu"</string>
-    <string name="editContactDescription" msgid="2947202828256214947">"Izmeni kontakt"</string>
-    <string name="insertContactDescription" msgid="4709878105452681987">"Napravi kontakt"</string>
     <string name="contactDetailAbout" msgid="5430408883907061400">"Osnovni podaci"</string>
     <string name="contactDetailUpdates" msgid="3780588624763446941">"Ažuriranja"</string>
     <string name="searchHint" msgid="8482945356247760701">"Pretraži kontakte"</string>
@@ -52,7 +44,7 @@
     <string name="menu_call" msgid="3992595586042260618">"Pozovi kontakt"</string>
     <string name="menu_sendSMS" msgid="5535886767547006515">"Pošalji SMS kontaktu"</string>
     <string name="menu_splitAggregate" msgid="2627252205317945563">"Razdvoji"</string>
-    <string name="menu_editGroup" msgid="5062005185370983720">"Izmeni"</string>
+    <string name="menu_editGroup" msgid="6696843438454341063">"Ukloni kontakte"</string>
     <string name="menu_renameGroup" msgid="7169512355179757182">"Preimenuj oznaku"</string>
     <string name="menu_deleteGroup" msgid="1126469629233412249">"Izbriši oznaku"</string>
     <string name="menu_addToGroup" msgid="3267409983764370041">"Dodaj kontakt"</string>
@@ -75,15 +67,21 @@
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Predloženi kontakti"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Svi kontakti"</string>
     <string name="contactsJoinedMessage" msgid="3343535986195643136">"Kontakti su objedinjeni"</string>
+    <string name="contact_deleted_named_toast" msgid="6558941164987421174">"<xliff:g id="NAME">%s</xliff:g> je izbrisan/a"</string>
     <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
       <item quantity="one">Kontakti su izbrisani</item>
       <item quantity="few">Kontakti su izbrisani</item>
       <item quantity="other">Kontakti su izbrisani</item>
     </plurals>
-    <plurals name="contacts_count" formatted="false" msgid="3287407967505649458">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> kontakt</item>
-      <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> kontakta</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> kontakata</item>
+    <plurals name="contacts_count" formatted="false" msgid="8696793457340503668">
+      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> kontakt</item>
+      <item quantity="few"><xliff:g id="COUNT_1">%d</xliff:g> kontakta</item>
+      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> kontakata</item>
+    </plurals>
+    <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
+      <item quantity="one"><xliff:g id="COUNT_2">%d</xliff:g> kontakt · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
+      <item quantity="few"><xliff:g id="COUNT_2">%d</xliff:g> kontakta · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
+      <item quantity="other"><xliff:g id="COUNT_2">%d</xliff:g> kontakata · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
     </plurals>
     <string name="title_from_google" msgid="4664084747121207202">"Sa Google-a"</string>
     <string name="title_from_other_accounts" msgid="8307885412426754288">"Sa <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
@@ -110,18 +108,20 @@
     <string name="attach_photo_dialog_title" msgid="5599827035558557169">"Slika kontakta"</string>
     <string name="customLabelPickerTitle" msgid="1081475101983255212">"Naziv prilagođene oznake"</string>
     <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Šalji pozive direktno u glasovnu poštu"</string>
-    <string name="removePhoto" msgid="4898105274130284565">"Ukloni fotografiju"</string>
-    <string name="noContacts" msgid="4955659076981974652">"Nema kontakata"</string>
+    <string name="removePhoto" msgid="4898105274130284565">"Ukloni sliku"</string>
+    <string name="noContacts" msgid="2228592924476426108">"Lista kontakata je prazna"</string>
     <string name="noGroups" msgid="4607906327968232225">"Nema oznaka."</string>
     <string name="noAccounts" msgid="7768267764545265909">"Morate da imate nalog da biste mogli da pravite grupe."</string>
     <string name="emptyGroup" msgid="5102411903247859575">"Nema kontakata sa ovom oznakom"</string>
+    <string name="emptyAccount" msgid="6873962901497975964">"Nema kontakata na ovom nalogu"</string>
+    <string name="emptyMainList" msgid="2772242747899664460">"Lista kontakata je prazna"</string>
     <string name="contactSavedToast" msgid="9171862279493213075">"Kontakt je sačuvan"</string>
     <string name="contactUnlinkedToast" msgid="7122823195786012553">"Kontakti su razdvojeni"</string>
-    <string name="contactSavedErrorToast" msgid="3207250533172944892">"Nije moguće sačuvati izmene kontakata."</string>
-    <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Razdvajanje kontakta na više njih nije uspelo."</string>
-    <string name="contactJoinErrorToast" msgid="3977932531264809035">"Objedinjavanje kontakata nije uspelo."</string>
-    <string name="contactGenericErrorToast" msgid="7774911165341591714">"Došlo je do greške pri čuvanju kontakta."</string>
-    <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"Čuvanje izmena slike kontakta nije uspelo."</string>
+    <string name="contactSavedErrorToast" msgid="4827033473908688031">"Čuvanje promena kontakta nije uspelo"</string>
+    <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"Razdvajanje kontakta nije uspelo"</string>
+    <string name="contactJoinErrorToast" msgid="5735129234573327701">"Objedinjavanje kontakata nije uspelo"</string>
+    <string name="contactGenericErrorToast" msgid="3885457515665783976">"Greška pri čuvanju kontakta"</string>
+    <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Čuvanje promena slike kontakta nije uspelo"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"Učitavanje oznake nije uspelo"</string>
     <string name="groupSavedToast" msgid="6491495462357722285">"Oznaka je sačuvana"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Oznaka je izbrisana"</string>
@@ -130,7 +130,8 @@
     <string name="groupUpdatedToast" msgid="3667977658676267687">"Oznaka je ažurirana"</string>
     <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Uklonili smo iz oznake"</string>
     <string name="groupMembersAddedToast" msgid="4824834898718972768">"Dodato je u oznaku"</string>
-    <string name="groupSavedErrorToast" msgid="8121032018490980184">"Čuvanje promena oznake nije uspelo."</string>
+    <string name="groupSavedErrorToast" msgid="2355891714292740162">"Čuvanje promena oznake nije uspelo"</string>
+    <string name="groupExistsErrorMessage" msgid="5196811283836946189">"Ta oznaka već postoji"</string>
     <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
       <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> kontakt sa brojem telefona</item>
       <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> kontakta sa brojevima telefona</item>
@@ -153,7 +154,6 @@
     <string name="callAgain" msgid="3197312117049874778">"Pozovi ponovo"</string>
     <string name="returnCall" msgid="8171961914203617813">"Uzvrati poziv"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Želite li da dodate imejl adresu „<xliff:g id="EMAIL">%s</xliff:g>“ u kontakte?"</string>
-    <string name="description_contact_photo" msgid="3387458082667894062">"fotografija kontakta"</string>
     <string name="description_plus_button" msgid="515164827856229880">"plus"</string>
     <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> od <xliff:g id="TOTAL_NUMBER">%s</xliff:g> kontak(a)ta"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"Imena kontakata"</string>
@@ -184,8 +184,8 @@
     <string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g> nalog"</string>
     <!-- no translation found for from_account_format (4469138575127580203) -->
     <skip />
-    <string name="take_photo" msgid="7496128293167402354">"Snimi fotografiju"</string>
-    <string name="take_new_photo" msgid="7341354729436576304">"Napravi novu fotografiju"</string>
+    <string name="take_photo" msgid="7496128293167402354">"Slikaj"</string>
+    <string name="take_new_photo" msgid="7341354729436576304">"Slikaj novu sliku"</string>
     <string name="pick_photo" msgid="2129509985223564942">"Izaberi sliku"</string>
     <string name="pick_new_photo" msgid="9122450996263688237">"Izaberite novu sliku"</string>
     <string name="upgrade_in_progress" msgid="474511436863451061">"Kontakt lista se ažurira."</string>
@@ -199,7 +199,6 @@
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Datum"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Oznaka"</string>
     <string name="change_photo" msgid="8530597935483526383">"Promeni"</string>
-    <string name="primary_photo" msgid="8517942231868516999">"Glavna slika"</string>
     <string name="description_star" msgid="2605854427360036550">"omiljeno"</string>
     <string name="edit_contact" msgid="7529281274005689512">"Izmeni kontakt"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"zatvorite"</string>
@@ -223,8 +222,7 @@
     <string name="social_widget_loading" msgid="5327336597364074608">"Učitava se…"</string>
     <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Napravi novi kontakt"</string>
     <string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Dodajte nalog"</string>
-    <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Uvezi kontakte"</string>
-    <string name="create_group_dialog_title" msgid="5363404287877384473">"Napravite novu oznaku"</string>
+    <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"Uvezi"</string>
     <string name="create_group_item_label" msgid="3263064599743742865">"Napravi novu…"</string>
     <string name="delete_group_dialog_message" msgid="335713829185261371">"Želite da izbrišete oznaku „<xliff:g id="GROUP_LABEL">%1$s</xliff:g>“? (Kontakti neće biti izbrisani.)"</string>
     <string name="toast_join_with_empty_contact" msgid="1215465657839085613">"Unesite ime kontakta pre nego što ga objedinite sa drugim kontaktom."</string>
@@ -232,36 +230,33 @@
     <string name="set_default" msgid="4417505153468300351">"Postavi na podrazumevano"</string>
     <string name="clear_default" msgid="7193185801596678067">"Obriši podrazumevanu vrednost"</string>
     <string name="toast_text_copied" msgid="5143776250008541719">"Tekst je kopiran"</string>
-    <string name="cancel_confirmation_dialog_message" msgid="5058226498605989285">"Želite li da odbacite promene i prekinete sa izmenama?"</string>
+    <string name="cancel_confirmation_dialog_message" msgid="9008214737653278989">"Želite da odbacite promene?"</string>
     <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Odbaci"</string>
-    <string name="cancel_confirmation_dialog_keep_editing_button" msgid="7737724111972855348">"Nastavi izmene"</string>
+    <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Otkaži"</string>
+    <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Želite da odbacite prilagođavanja?"</string>
     <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
     <string name="enter_contact_name" msgid="4594274696120278368">"Pretražite kontakte"</string>
-    <!-- no translation found for title_edit_group (1889302367574226969) -->
-    <skip />
+    <string name="title_edit_group" msgid="8602752287270586734">"Uklonite kontakte"</string>
     <string name="local_profile_title" msgid="2021416826991393684">"Moj lokalni profil"</string>
     <string name="external_profile_title" msgid="8034998767621359438">"Moj <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> profil"</string>
     <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Prikazani su svi kontakti"</string>
     <string name="generic_no_account_prompt" msgid="7218827704367325460">"Očuvajte bezbednost kontakata čak i ako izgubite telefon – sinhronizujte sa uslugom na mreži."</string>
     <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Dodavanje naloga"</string>
-    <string name="contact_editor_prompt_zero_accounts" msgid="1785345895691886499">"Neće biti napravljena rezervna kopija novog kontakta. Želite li da dodate nalog koji pravi rezervnu kopiju kontakata onlajn?"</string>
+    <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Odvojte malo vremena da biste dodali nalog pomoću kog ćete napraviti rezervnu kopiju kontakata na Google-u."</string>
     <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Novi kontakti će biti sačuvani na nalogu <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
     <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Izaberite podrazumevani nalog za nove kontakte:"</string>
     <string name="contact_editor_title_new_contact" msgid="7192223018128934940">"Dodaj novi kontakt"</string>
     <string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"Izmeni kontakt"</string>
-    <string name="keep_local" msgid="1258761699192993322">"Zadrži lokalno"</string>
     <string name="add_account" msgid="8201790677994503186">"Dodaj nalog"</string>
     <string name="add_new_account" msgid="5748627740680940264">"Dodaj novi nalog"</string>
     <string name="menu_export_database" msgid="2659719297530170820">"Izvezi datoteke baze podataka"</string>
     <string name="action_menu_add_new_contact_button" msgid="3180222523336380017">"dodavanje novog kontakta"</string>
     <string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"Prikaži više"</string>
     <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Prikaži manje"</string>
-    <string name="expanding_entry_card_view_see_all" msgid="3845258737661412627">"Prikaži sve"</string>
     <string name="recent_card_title" msgid="8982782042698001695">"Nedavno"</string>
     <string name="about_card_title" msgid="2920942314212825637">"Osnovni podaci"</string>
     <string name="send_message" msgid="8938418965550543196">"Pošalji poruku"</string>
     <string name="toast_making_personal_copy" msgid="288549957278065542">"Pravljenje lične kopije..."</string>
-    <string name="yesterday" msgid="6840858548955018569">"Juče"</string>
     <string name="tomorrow" msgid="6241969467795308581">"Sutra"</string>
     <string name="today" msgid="8041090779381781781">"Danas"</string>
     <string name="today_at_time_fmt" msgid="605665249491030460">"Danas u <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
@@ -280,7 +275,6 @@
     <string name="header_name_entry" msgid="1592791008096288306">"Ime"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"Imejl"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"Telefon"</string>
-    <string name="header_photo_entry" msgid="4438023151411853238">"Slika"</string>
     <string name="content_description_expand_editor" msgid="1111381475901897470">"Kliknite da biste proširili uređivač kontakata."</string>
     <string name="content_description_collapse_editor" msgid="7598061318022977825">"Kliknite da biste skupili uređivač kontakata."</string>
     <string name="content_description_directions" msgid="2686791825798189335">"uputstva do lokacije"</string>
@@ -295,6 +289,8 @@
     <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Promenite sliku"</string>
     <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Otvaranje uređivača nije uspelo."</string>
     <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Čuva se"</string>
+    <!-- no translation found for compact_editor_account_selector_read_only_title (1869435992721760221) -->
+    <skip />
     <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"Trenutno se čuva na nalogu <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Dodirnite dvaput da biste izabrali drugi nalog."</string>
     <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
       <item quantity="one">Objedinjeni kontakti (<xliff:g id="COUNT">%d</xliff:g>)</item>
@@ -346,4 +342,278 @@
     <string name="permission_explanation_subheader_calendar_and_SMS" msgid="630115334220569184">"Događaji i poruke"</string>
     <string name="permission_explanation_subheader_calendar" msgid="8785323496211704613">"Događaji"</string>
     <string name="permission_explanation_subheader_SMS" msgid="1904552086449525567">"Poruke"</string>
+    <string name="hamburger_feature_highlight_header" msgid="7442308698936786415">"Organizujte listu"</string>
+    <string name="hamburger_feature_highlight_body" msgid="6268711111318172098">"Uklonite duplikate i grupišite kontakte prema oznaci"</string>
+    <string name="undo" msgid="1425165101664071422">"Opozovi"</string>
+    <string name="call_custom" msgid="6385303130912713318">"Pozovi <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+    <string name="call_home" msgid="1990519474420545392">"Pozovi kućni telefon"</string>
+    <string name="call_mobile" msgid="7502236805487609178">"Pozovi mobilni telefon"</string>
+    <string name="call_work" msgid="5328785911463744028">"Pozovi poslovni telefon"</string>
+    <string name="call_fax_work" msgid="7467763592359059243">"Pozovi faks"</string>
+    <string name="call_fax_home" msgid="8342175628887571876">"Pozovi kućni faks"</string>
+    <string name="call_pager" msgid="9003902812293983281">"Pozovi pejdžer"</string>
+    <string name="call_other" msgid="8563753966926932052">"Pozovi"</string>
+    <string name="call_callback" msgid="1910165691349426858">"Pozovi za povratni poziv"</string>
+    <string name="call_car" msgid="3280537320306436445">"Pozovi telefon u automobilu"</string>
+    <string name="call_company_main" msgid="6105120947138711257">"Pozovi glavni telefon preduzeća"</string>
+    <string name="call_isdn" msgid="1541590690193403411">"Pozovi ISDN"</string>
+    <string name="call_main" msgid="6082900571803441339">"Pozovi glavni telefon"</string>
+    <string name="call_other_fax" msgid="5745314124619636674">"Pozovi faks"</string>
+    <string name="call_radio" msgid="8296755876398357063">"Pozovi mobilni telefon"</string>
+    <string name="call_telex" msgid="2223170774548648114">"Pozovi teleks"</string>
+    <string name="call_tty_tdd" msgid="8951266948204379604">"Pozovi TTY/TDD"</string>
+    <string name="call_work_mobile" msgid="8707874281430105394">"Pozovi poslovni mobilni telefon"</string>
+    <string name="call_work_pager" msgid="3419348514157949008">"Pozovi poslovni pejdžer"</string>
+    <string name="call_assistant" msgid="670941612175068337">"Pozovi <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+    <string name="call_mms" msgid="6274041545876221437">"Pozovi MMS"</string>
+    <string name="call_by_shortcut" msgid="2566802538698913124">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (pozovi)"</string>
+    <string name="sms_custom" msgid="415060214233647603">"Pošalji SMS na <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+    <string name="sms_home" msgid="7524332261493162995">"Pošalji SMS na kućni telefon"</string>
+    <string name="sms_mobile" msgid="5200107250451030769">"Pošalji SMS na mobilni telefon"</string>
+    <string name="sms_work" msgid="2269624156655267740">"Pošalji SMS na poslovni telefon"</string>
+    <string name="sms_fax_work" msgid="8028189067816907075">"Pošalji SMS na poslovni faks"</string>
+    <string name="sms_fax_home" msgid="9204042076306809634">"Pošalji SMS na kućni faks"</string>
+    <string name="sms_pager" msgid="7730404569637015192">"Pošalji SMS na pejdžer"</string>
+    <string name="sms_other" msgid="806127844607642331">"Tekst"</string>
+    <string name="sms_callback" msgid="5004824430094288752">"Pošalji SMS za povratni poziv"</string>
+    <string name="sms_car" msgid="7444227058437359641">"Pošalji SMS na telefon u automobilu"</string>
+    <string name="sms_company_main" msgid="118970873419678087">"Pošalji SMS na glavni broj telefona preduzeća"</string>
+    <string name="sms_isdn" msgid="8153785037515047845">"Pošalji SMS na ISDN"</string>
+    <string name="sms_main" msgid="8621625784504541679">"Pošalji SMS na glavni telefon"</string>
+    <string name="sms_other_fax" msgid="3888842199855843152">"Pošalji SMS na faks"</string>
+    <string name="sms_radio" msgid="3329166673433967820">"Pošalji SMS na mobilni telefon"</string>
+    <string name="sms_telex" msgid="9034802430065267848">"Pošalji SMS na teleks"</string>
+    <string name="sms_tty_tdd" msgid="6782284969132531532">"Pošalji SMS na TTY/TDD"</string>
+    <string name="sms_work_mobile" msgid="2459939960512702560">"Pošalji SMS na poslovni mobilni telefon"</string>
+    <string name="sms_work_pager" msgid="5566924423316960597">"Pošalji SMS na pejdžer"</string>
+    <string name="sms_assistant" msgid="2773424339923116234">"Pošalji SMS na <xliff:g id="ASSISTANT">%s</xliff:g>"</string>
+    <string name="sms_mms" msgid="4069352461380762677">"Pošalji SMS na MMS"</string>
+    <string name="sms_by_shortcut" msgid="7741770672976099517">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (pošalji SMS)"</string>
+    <string name="description_video_call" msgid="7120921378651700947">"Uputite video poziv"</string>
+    <string name="clearFrequentsConfirmation_title" msgid="766292372438450432">"Brisanje često kontaktiranih?"</string>
+    <string name="clearFrequentsConfirmation" msgid="2270554975938265734">"Obrisaćete listu često kontaktiranih u aplikacijama Kontakti i Telefon, pa će imejl aplikacije morati iz početka da prikupe informacije o adresiranju."</string>
+    <string name="clearFrequentsProgress_title" msgid="5157001637482794212">"Brisanje često kontaktiranih..."</string>
+    <string name="status_available" msgid="5586870015822828392">"Dostupan/na"</string>
+    <string name="status_away" msgid="1838861100379804730">"Odsutan/na"</string>
+    <string name="status_busy" msgid="9147992455450257136">"Zauzet/a"</string>
+    <string name="local_invisible_directory" msgid="6046691709127661065">"Drugi"</string>
+    <string name="directory_search_label" msgid="1887759056597975053">"Katalog"</string>
+    <string name="directory_search_label_work" msgid="8618292129829443176">"Katalog za Work"</string>
+    <string name="local_search_label" msgid="2551177578246113614">"Svi kontakti"</string>
+    <string name="foundTooManyContacts" msgid="5163335650920020220">"Pronađeno je više od <xliff:g id="COUNT">%d</xliff:g>."</string>
+    <string name="description_quick_contact_for" msgid="6737516415168327789">"Brzi kontakt za korisnika <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="missing_name" msgid="8745511583852904385">"(Bez imena)"</string>
+    <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Često kontaktirani"</string>
+    <string name="description_view_contact_detail" msgid="9133251213656414807">"Prikaži kontakt"</string>
+    <string name="list_filter_phones" msgid="735313795643493365">"Svi kontakti sa brojevima telefona"</string>
+    <string name="list_filter_phones_work" msgid="1470173699551475015">"Kontakti sa profila za Work"</string>
+    <string name="view_updates_from_group" msgid="1782685984905600034">"Prikaži ažuriranja"</string>
+    <string name="account_phone" msgid="7128032778471187553">"Uređaj"</string>
+    <string name="account_sim" msgid="6519016427905087952">"SIM"</string>
+    <string name="nameLabelsGroup" msgid="2034640839640477827">"Ime"</string>
+    <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Nadimak"</string>
+    <string name="full_name" msgid="6602579550613988977">"Naziv"</string>
+    <string name="name_given" msgid="4280790853455320619">"Ime"</string>
+    <string name="name_family" msgid="7466985689626017037">"Prezime"</string>
+    <string name="name_prefix" msgid="59756378548779822">"Prefiks za ime"</string>
+    <string name="name_middle" msgid="8467433655992690326">"Srednje slovo"</string>
+    <string name="name_suffix" msgid="3855278445375651441">"Sufiks imena"</string>
+    <string name="name_phonetic" msgid="4259595234312430484">"Ime – fonetski"</string>
+    <string name="name_phonetic_given" msgid="8723179018384187631">"Ime – fonetski"</string>
+    <string name="name_phonetic_middle" msgid="8643721493320405200">"Srednje ime – fonetski"</string>
+    <string name="name_phonetic_family" msgid="2640133663656011626">"Prezime – fonetski"</string>
+    <string name="phoneLabelsGroup" msgid="6468091477851199285">"Telefon"</string>
+    <string name="emailLabelsGroup" msgid="8389931313045344406">"Pošalji imejlom"</string>
+    <string name="postalLabelsGroup" msgid="3487738141112589324">"Adresa"</string>
+    <string name="imLabelsGroup" msgid="3898238486262614027">"Razmena trenutnih poruka"</string>
+    <string name="organizationLabelsGroup" msgid="2478611760751832035">"Organizacija"</string>
+    <string name="relationLabelsGroup" msgid="1854373894284572781">"Odnos"</string>
+    <string name="eventLabelsGroup" msgid="7960408705307831289">"Poseban dan"</string>
+    <string name="sms" msgid="1756857139634224222">"Tekstualna poruka"</string>
+    <string name="postal_address" msgid="8765560217149624536">"Adresa"</string>
+    <string name="ghostData_company" msgid="5414421120553765775">"Preduzeće"</string>
+    <string name="ghostData_title" msgid="7496735200318496110">"Naslov"</string>
+    <string name="label_notes" msgid="8337354953278341042">"Beleške"</string>
+    <string name="label_custom_field" msgid="1994056912242214426">"Prilagođeno"</string>
+    <string name="label_sip_address" msgid="7252153678613978127">"SIP"</string>
+    <string name="websiteLabelsGroup" msgid="4202998982804009261">"Veb-sajt"</string>
+    <string name="groupsLabel" msgid="7000816729542098972">"Oznake"</string>
+    <string name="email_home" msgid="8573740658148184279">"Pošalji imejl na kućnu imejl adresu"</string>
+    <string name="email_mobile" msgid="2042889209787989814">"Pošalji imejl na broj mobilnog telefona"</string>
+    <string name="email_work" msgid="2807430017302722689">"Pošalji imejl na poslovni broj telefona"</string>
+    <string name="email_other" msgid="3454004077967657109">"Pošalji imejlom"</string>
+    <string name="email_custom" msgid="5536404237099078802">"Pošalji imejl na <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+    <string name="email" msgid="5668400997660065897">"Pošalji imejlom"</string>
+    <string name="postal_street" msgid="8133143961580058972">"Ulica"</string>
+    <string name="postal_pobox" msgid="4431938829180269821">"Poštansko sanduče"</string>
+    <string name="postal_neighborhood" msgid="1450783874558956739">"Komšiluk"</string>
+    <string name="postal_city" msgid="6597491300084895548">"Grad"</string>
+    <string name="postal_region" msgid="6045263193478437672">"Država"</string>
+    <string name="postal_postcode" msgid="572136414136673751">"Poštanski broj"</string>
+    <string name="postal_country" msgid="7638264508416368690">"Zemlja"</string>
+    <string name="map_home" msgid="1243547733423343982">"Prikaži kućnu adresu"</string>
+    <string name="map_work" msgid="1360474076921878088">"Prikaži poslovnu adresu"</string>
+    <string name="map_other" msgid="3817820803587012641">"Prikaži adresu"</string>
+    <string name="map_custom" msgid="8761800628069473526">"Prikaži adresu <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+    <string name="chat_aim" msgid="2588492205291249142">"Započni ćaskanje preko AIM-a"</string>
+    <string name="chat_msn" msgid="8041633440091073484">"Započni ćaskanje preko Windows Live-a"</string>
+    <string name="chat_yahoo" msgid="6629211142719943666">"Započni ćaskanje preko Yahoo-a"</string>
+    <string name="chat_skype" msgid="1210045020427480566">"Započni ćaskanje preko Skype-a"</string>
+    <string name="chat_qq" msgid="4294637812847719693">"Započni ćaskanje preko QQ-a"</string>
+    <string name="chat_gtalk" msgid="981575737258117697">"Ćaskaj preko Google Talk-a"</string>
+    <string name="chat_icq" msgid="8438405386153745775">"Započni ćaskanje preko ICQ-a"</string>
+    <string name="chat_jabber" msgid="7561444230307829609">"Započni ćaskanje preko Jabber-a"</string>
+    <string name="chat" msgid="9025361898797412245">"Ćaskanje"</string>
+    <string name="description_minus_button" msgid="6908099247930477551">"izbriši"</string>
+    <string name="expand_name_fields_description" msgid="6883935911480726652">"Proširite polja za ime"</string>
+    <string name="collapse_name_fields_description" msgid="4757877385895561556">"Skupite polja za ime"</string>
+    <string name="expand_phonetic_name_fields_description" msgid="3865726859582581741">"Proširite polja za fonetsko ime"</string>
+    <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Skupite polja za fonetsko ime"</string>
+    <string name="expand_fields_description" msgid="8129294181216760037">"Proširite"</string>
+    <string name="collapse_fields_description" msgid="1884143625854637874">"Skupite"</string>
+    <string name="announce_expanded_fields" msgid="1075947220478530622">"Prošireno je"</string>
+    <string name="announce_collapsed_fields" msgid="6414231530177338704">"Skupljeno je"</string>
+    <string name="list_filter_all_accounts" msgid="8908683398914322369">"Svi kontakti"</string>
+    <string name="list_filter_all_starred" msgid="5031734941601931356">"Sa zvezdicom"</string>
+    <string name="list_filter_customize" msgid="4789963356004169321">"Prilagodi"</string>
+    <string name="list_filter_single" msgid="5871400283515893087">"Kontakt"</string>
+    <string name="display_ungrouped" msgid="6885954210243119591">"Svi drugi kontakti"</string>
+    <string name="display_all_contacts" msgid="2031647544742889505">"Svi kontakti"</string>
+    <string name="menu_sync_remove" msgid="3266725887008450161">"Ukloni grupu za sinhronizaciju"</string>
+    <string name="dialog_sync_add" msgid="8267045393119375803">"Dodaj grupu za sinhronizaciju"</string>
+    <string name="display_more_groups" msgid="2682547080423434170">"Još grupa…"</string>
+    <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"Uklanjanjem grupe „<xliff:g id="GROUP">%s</xliff:g>“ sa liste za sinhronizaciju uklonićete i sve negrupisane kontakte sa te liste."</string>
+    <string name="savingDisplayGroups" msgid="2133152192716475939">"Čuvanje opcija prikaza je u toku..."</string>
+    <string name="menu_done" msgid="796017761764190697">"Gotovo"</string>
+    <string name="menu_doNotSave" msgid="58593876893538465">"Otkaži"</string>
+    <string name="listCustomView" msgid="1840624396582117590">"Prilagođeni prikaz"</string>
+    <string name="dialog_new_contact_account" msgid="4969619718062454756">"Sačuvajte uvezene kontakte na:"</string>
+    <string name="import_from_sim" msgid="3859272228033941659">"Uvezi sa SIM kartice"</string>
+    <string name="import_from_sim_summary" msgid="5815105584445743740">"Uvezi sa SIM kartice <xliff:g id="SIM_NAME">^1</xliff:g> – <xliff:g id="SIM_NUMBER">^2</xliff:g>"</string>
+    <string name="import_from_sim_summary_no_number" msgid="880612418352086012">"Uvezi sa SIM kartice <xliff:g id="SIM_NAME">%1$s</xliff:g>"</string>
+    <string name="import_from_vcf_file" product="default" msgid="5304572242183878086">"Uvezi iz .vcf datoteke"</string>
+    <string name="cancel_import_confirmation_message" msgid="3929951040347726757">"Želite li da otkažete uvoz datoteke <xliff:g id="FILENAME">%s</xliff:g>?"</string>
+    <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Želite li da otkažete izvoz datoteke <xliff:g id="FILENAME">%s</xliff:g>?"</string>
+    <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Nije moguće otkazati vCard uvoz/izvoz"</string>
+    <string name="fail_reason_unknown" msgid="1714092345030570863">"Nepoznata greška."</string>
+    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Nije moguće otvoriti datoteku „<xliff:g id="FILE_NAME">%s</xliff:g>“: <xliff:g id="EXACT_REASON">%s</xliff:g>"</string>
+    <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"Nije moguće pokrenuti program za izvoz: „<xliff:g id="EXACT_REASON">%s</xliff:g>“"</string>
+    <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"Nema kontakata za izvoz."</string>
+    <string name="missing_required_permission" msgid="5865884842972833120">"Onemogućili ste obaveznu dozvolu."</string>
+    <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"Došlo je do greške pri izvozu: „<xliff:g id="EXACT_REASON">%s</xliff:g>“"</string>
+    <string name="fail_reason_too_long_filename" msgid="3393764245254738333">"Zahtevani naziv datoteke je predugačak („<xliff:g id="FILENAME">%s</xliff:g>“)"</string>
+    <string name="fail_reason_io_error" msgid="6748358842976073255">"I/O greška"</string>
+    <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Nema dovoljno memorije. Datoteka je možda prevelika."</string>
+    <string name="fail_reason_vcard_parse_error" msgid="888263542360355784">"Iz neočekivanog razloga nije bilo moguće raščlaniti vCard datoteku."</string>
+    <string name="fail_reason_not_supported" msgid="8219562769267148825">"Format nije podržan."</string>
+    <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="6427931733267328564">"Nije moguće prikupiti metapodatke datih vCard datoteka."</string>
+    <string name="fail_reason_failed_to_read_files" msgid="5823434810622484922">"Nije moguće uvesti jednu ili više datoteka (%s)."</string>
+    <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"Izvoz datoteke <xliff:g id="FILENAME">%s</xliff:g> je završen."</string>
+    <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"Izvoz kontakata je završen."</string>
+    <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"Izvoz kontakata je završen. Kliknite na obaveštenje da biste ih delili."</string>
+    <string name="touch_to_share_contacts" msgid="4882485525268469736">"Dodirnite da biste delili kontakte."</string>
+    <string name="exporting_vcard_canceled_title" msgid="2652222370493306887">"Izvoz datoteke <xliff:g id="FILENAME">%s</xliff:g> je otkazan"</string>
+    <string name="exporting_contact_list_title" msgid="9072240631534457415">"Izvoz podataka o kontaktima je u toku"</string>
+    <string name="exporting_contact_list_message" msgid="3367949209642931952">"Podaci o kontaktima se izvoze."</string>
+    <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"Nije moguće preuzeti informacije iz baze podataka"</string>
+    <string name="composer_has_no_exportable_contact" msgid="3296493229040294335">"Nema kontakata za izvoz. Ako imate kontakata na telefonu, neki dobavljači podataka možda neće dozvoliti da se kontakti izvoze sa telefona."</string>
+    <string name="composer_not_initialized" msgid="2321648986367005254">"Program za izradu vCard datoteka se nije ispravno pokrenuo."</string>
+    <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Nije moguće izvesti"</string>
+    <string name="exporting_contact_failed_message" msgid="4938527850142003141">"Podaci o kontaktima nizu izvezeni.\nRazlog: „<xliff:g id="FAIL_REASON">%s</xliff:g>“"</string>
+    <string name="importing_vcard_description" msgid="4245275224298571351">"Uvoz <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="reading_vcard_failed_title" msgid="4251647443358422855">"Nije moguće čitati vCard podatke"</string>
+    <string name="reading_vcard_canceled_title" msgid="1925216585981542019">"Otkazano je čitanje podataka sa vCard datoteke"</string>
+    <string name="importing_vcard_finished_title" msgid="3341541727268747967">"Uvoz datoteke <xliff:g id="FILENAME">%s</xliff:g> je završen"</string>
+    <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"Uvoz datoteke <xliff:g id="FILENAME">%s</xliff:g> je  otkazan"</string>
+    <string name="vcard_import_will_start_message" msgid="2804911199145873396">"Datoteka <xliff:g id="FILENAME">%s</xliff:g> će uskoro biti uvezena."</string>
+    <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"Datoteka će uskoro biti uvezena."</string>
+    <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"Zahtev za izvoz vCard datoteke je odbijen. Pokušajte kasnije."</string>
+    <string name="vcard_export_will_start_message" msgid="2210241345252081463">"Datoteka <xliff:g id="FILENAME">%s</xliff:g> će uskoro biti izvezena."</string>
+    <string name="vcard_export_will_start_message_fallback" msgid="6553826997490909749">"Datoteka će uskoro biti izvezena."</string>
+    <string name="contacts_export_will_start_message" msgid="8538705791417534431">"Kontakti će uskoro biti izvezeni."</string>
+    <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"Zahtev za izvoz vCard datoteke je odbijen. Pokušajte kasnije."</string>
+    <string name="vcard_unknown_filename" msgid="7171709890959915954">"kontakt"</string>
+    <string name="caching_vcard_message" msgid="4926308675041506756">"Keširanje vCard datoteke u lokalnu privremenu memoriju. Uvoz će uskoro započeti."</string>
+    <string name="vcard_import_failed" msgid="5223531255894842406">"Nije moguće uvesti vCard datoteku."</string>
+    <string name="nfc_vcard_file_name" msgid="2823095213265993609">"Kontakt preko NFC-a"</string>
+    <string name="confirm_export_title" msgid="6834385377255286349">"Želite li da izvezete kontakte?"</string>
+    <string name="caching_vcard_title" msgid="1226272312940516605">"Keširanje..."</string>
+    <string name="progress_notifier_message" msgid="2311011466908220528">"Uvoz <xliff:g id="CURRENT_NUMBER">%s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%s</xliff:g>: <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="export_to_vcf_file" product="default" msgid="4407527157056120858">"Izvezi u .vcf datoteku"</string>
+    <string name="display_options_sort_list_by" msgid="7028809117272018712">"Sortiraj prema"</string>
+    <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"Ime"</string>
+    <string name="display_options_sort_by_family_name" msgid="2684905041926954793">"Prezime"</string>
+    <string name="display_options_view_names_as" msgid="6514632499276563482">"Format imena"</string>
+    <string name="display_options_view_given_name_first" msgid="3616004640258761473">"Prvo ime"</string>
+    <string name="display_options_view_family_name_first" msgid="956445100777296467">"Prvo prezime"</string>
+    <string name="settings_accounts" msgid="350219740670774576">"Nalozi"</string>
+    <string name="default_editor_account" msgid="699591683362420991">"Podrazumevani nalog za nove kontakte"</string>
+    <string name="sync_contact_metadata_title" msgid="6957956139306960211">"Sinhronizuj metapodatke kontakata [DOGFOOD]"</string>
+    <string name="sync_contact_metadata_dialog_title" msgid="6192335951588820553">"Sinhronizujte metapodatke kontakata"</string>
+    <string name="settings_my_info_title" msgid="1534272456405343119">"Moje informacije"</string>
+    <string name="set_up_profile" msgid="7370213843590143771">"Podesite profil"</string>
+    <string name="setting_about" msgid="7014388749752042863">"O Kontaktima"</string>
+    <string name="share_visible_contacts" msgid="890150378880783797">"Deli vidljive kontakte"</string>
+    <string name="share_visible_contacts_failure" msgid="7324717548166915560">"Deljenje vidljivih kontakata nije uspelo."</string>
+    <string name="share_favorite_contacts" msgid="4280926751003081042">"Deli omiljene kontakte"</string>
+    <string name="share_contacts" msgid="8109287987498711664">"Deli sve kontakte"</string>
+    <string name="share_contacts_failure" msgid="1216431977330560559">"Deljenje kontakata nije uspelo."</string>
+    <!-- no translation found for dialog_export (1628001095187741417) -->
+    <skip />
+    <string name="dialog_import" msgid="2431698729761448759">"Uvoz kontakata"</string>
+    <string name="share_error" msgid="948429331673358107">"Ovaj kontakt ne može da se deli."</string>
+    <string name="no_contact_to_share" msgid="1276397530378323033">"Nema kontakata za deljenje."</string>
+    <string name="menu_search" msgid="9147752853603483719">"Pretraga"</string>
+    <string name="menu_contacts_filter" msgid="2165153460860262501">"Kontakti za prikaz"</string>
+    <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Kontakti za prikaz"</string>
+    <string name="custom_list_filter" msgid="2105275443109077687">"Definišite prilagođeni prikaz"</string>
+    <string name="menu_custom_filter_save" msgid="2679793632208086460">"Sačuvaj"</string>
+    <string name="hint_findContacts" msgid="7128627979899070325">"Pretražite kontakte"</string>
+    <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Omiljeno"</string>
+    <string name="listTotalAllContactsZero" msgid="5513001821794568211">"Nema kontakata."</string>
+    <string name="menu_clear_frequents" msgid="7688250191932838833">"Obriši često kontaktirane"</string>
+    <string name="menu_select_sim" msgid="3603578201960504010">"Izaberite SIM karticu"</string>
+    <string name="menu_accounts" msgid="1424330057450189074">"Upravljaj nalozima"</string>
+    <!-- no translation found for menu_import (6107961135813836467) -->
+    <skip />
+    <!-- no translation found for menu_export (2658783911863503902) -->
+    <skip />
+    <string name="menu_blocked_numbers" msgid="5272951629083025995">"Blokirani brojevi"</string>
+    <string name="contact_status_update_attribution" msgid="752179367353018597">"preko <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
+    <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> preko <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
+    <string name="action_menu_back_from_search" msgid="8793348588949233348">"zaustavite pretraživanje"</string>
+    <string name="description_clear_search" msgid="688023606766232904">"Brisanje pretrage"</string>
+    <string name="settings_contact_display_options_title" msgid="4890258244494248687">"Opcije prikazivanja kontakata"</string>
+    <string name="select_account_dialog_title" msgid="5478489655696599219">"Nalog"</string>
+    <string name="set_default_account" msgid="4311613760725609801">"Uvek koristi ovo za pozive"</string>
+    <string name="select_phone_account_for_calls" msgid="3810607744451014540">"Pozovi pomoću"</string>
+    <string name="call_with_a_note" msgid="8389827628360791676">"Uputi poziv sa beleškom"</string>
+    <string name="call_subject_hint" msgid="3043028982108363572">"Unesite belešku koju ćete poslati uz poziv…"</string>
+    <string name="send_and_call_button" msgid="7740295432834590737">"POŠALJI I POZOVI"</string>
+    <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g>/<xliff:g id="LIMIT">%2$s</xliff:g>"</string>
+    <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
+    <plurals name="tab_title_with_unread_items" formatted="false" msgid="7682024005130747825">
+      <item quantity="one"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> nepročitana stavka. </item>
+      <item quantity="few"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> nepročitane stavke. </item>
+      <item quantity="other"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> nepročitanih stavki. </item>
+    </plurals>
+    <string name="about_build_version" msgid="1765533099416999801">"Verzija"</string>
+    <string name="about_open_source_licenses" msgid="6479990452352919641">"Licence otvorenog koda"</string>
+    <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Podaci o licenci za softver otvorenog koda"</string>
+    <string name="about_privacy_policy" msgid="3705518622499152626">"Politika privatnosti"</string>
+    <string name="about_terms_of_service" msgid="4642400812150296723">"Uslovi korišćenja usluge"</string>
+    <string name="activity_title_licenses" msgid="5467767062737708066">"Licence otvorenog koda"</string>
+    <string name="url_open_error_toast" msgid="452592089815420457">"Otvaranje URL-a nije uspelo."</string>
+    <string name="account_filter_view_checked" msgid="6696859503887762213">"Označeno: <xliff:g id="ACCOUNT_INFO">%s</xliff:g>"</string>
+    <string name="account_filter_view_not_checked" msgid="2248684521205038389">"Nije označeno: <xliff:g id="ACCOUNT_INFO">%s</xliff:g>"</string>
+    <string name="description_search_video_call" msgid="5841525580339803272">"Uputite video poziv"</string>
+    <string name="description_delete_contact" msgid="53835657343783663">"Izbrišite"</string>
+    <string name="description_no_name_header" msgid="8884991311595943271">"Tri tačke"</string>
+    <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> sek"</string>
+    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> sek"</string>
+    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> s <xliff:g id="MINUTES_1">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> sek"</string>
+    <!-- no translation found for dynamic_shortcut_disabled_message (249939425761315252) -->
+    <skip />
+    <!-- no translation found for dynamic_shortcut_contact_removed_message (6845645831837615899) -->
+    <skip />
 </resources>
diff --git a/res/values-be-rBY-sw600dp/strings.xml b/res/values-be-rBY-sw600dp/strings.xml
new file mode 100644
index 0000000..8e0b10f
--- /dev/null
+++ b/res/values-be-rBY-sw600dp/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  ~ Copyright (C) 2012 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
+   -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="account_phone" msgid="347665663520819575">"Прылада"</string>
+    <string name="composer_has_no_exportable_contact" msgid="5998889616701036804">"Няма кантактаў, якія можна экспартаваць. Калі ў вас ёсць кантакты на планшэце, некаторыя пастаўшчыкі даных могуць не дазваляць экспарт кантактаў з планшэта."</string>
+</resources>
diff --git a/res/values-be-rBY/strings.xml b/res/values-be-rBY/strings.xml
index 2eee399..0054aba 100644
--- a/res/values-be-rBY/strings.xml
+++ b/res/values-be-rBY/strings.xml
@@ -17,9 +17,6 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="applicationLabel" msgid="3906689777043645443">"Кантакты"</string>
-    <string name="launcherActivityLabel" msgid="6497230399032392417">"Кантакты"</string>
-    <string name="quickContactActivityLabel" msgid="7985456650689347268">"Прагледзець кантакт"</string>
-    <string name="editContactActivityLabel" msgid="1129944572070802839">"Рэдагаваць кантакт"</string>
     <string name="contactsList" msgid="8661624236494819731">"Кантакты"</string>
     <string name="shortcutContact" msgid="749243779392912958">"Кантакт"</string>
     <string name="shortcutDialContact" msgid="746622101599186779">"Хуткі выклік"</string>
@@ -31,12 +28,7 @@
     <string name="contactPickerActivityTitle" msgid="4301062192337417640">"Выберыце кантакт"</string>
     <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Выбраць"</string>
     <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Стварыць новы кантакт"</string>
-    <string name="starredList" msgid="4817256136413959463">"Пазначана"</string>
-    <string name="frequentList" msgid="7154768136473953056">"Частыя"</string>
-    <string name="strequentList" msgid="5640192862059373511">"Любімыя"</string>
     <string name="viewContactTitle" msgid="7989394521836644384">"Дадзеныя кантакта"</string>
-    <string name="editContactDescription" msgid="2947202828256214947">"Рэдагаваць кантакт"</string>
-    <string name="insertContactDescription" msgid="4709878105452681987">"Стварыць кантакт"</string>
     <string name="contactDetailAbout" msgid="5430408883907061400">"Інфармацыя"</string>
     <string name="contactDetailUpdates" msgid="3780588624763446941">"Абнаўленні"</string>
     <string name="searchHint" msgid="8482945356247760701">"Пошук кантактаў"</string>
@@ -52,7 +44,7 @@
     <string name="menu_call" msgid="3992595586042260618">"Выклікаць кантакт"</string>
     <string name="menu_sendSMS" msgid="5535886767547006515">"Паведамленне кантакту"</string>
     <string name="menu_splitAggregate" msgid="2627252205317945563">"Выдаліць сувязь"</string>
-    <string name="menu_editGroup" msgid="5062005185370983720">"Рэдагаваць"</string>
+    <string name="menu_editGroup" msgid="6696843438454341063">"Выдаліць кантакты"</string>
     <string name="menu_renameGroup" msgid="7169512355179757182">"Перайменаваць метку"</string>
     <string name="menu_deleteGroup" msgid="1126469629233412249">"Выдаліць метку"</string>
     <string name="menu_addToGroup" msgid="3267409983764370041">"Дадаць кантакт"</string>
@@ -75,17 +67,24 @@
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Прапанаваныя кантакты"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Усе кантакты"</string>
     <string name="contactsJoinedMessage" msgid="3343535986195643136">"Кантакты звязаны"</string>
+    <string name="contact_deleted_named_toast" msgid="6558941164987421174">"Карыстальнік <xliff:g id="NAME">%s</xliff:g> выдалены"</string>
     <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
       <item quantity="one">Кантакты выдалены</item>
       <item quantity="few">Кантакты выдалены</item>
       <item quantity="many">Кантакты выдалены</item>
       <item quantity="other">Кантакты выдалены</item>
     </plurals>
-    <plurals name="contacts_count" formatted="false" msgid="3287407967505649458">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> кантакт</item>
-      <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> кантакты</item>
-      <item quantity="many"><xliff:g id="COUNT">%d</xliff:g> кантактаў</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> кантакту</item>
+    <plurals name="contacts_count" formatted="false" msgid="8696793457340503668">
+      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> кантакт</item>
+      <item quantity="few"><xliff:g id="COUNT_1">%d</xliff:g> кантакты</item>
+      <item quantity="many"><xliff:g id="COUNT_1">%d</xliff:g> кантактаў</item>
+      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> кантакту</item>
+    </plurals>
+    <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
+      <item quantity="one"><xliff:g id="COUNT_2">%d</xliff:g> кантакт · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
+      <item quantity="few"><xliff:g id="COUNT_2">%d</xliff:g> кантакты · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
+      <item quantity="many"><xliff:g id="COUNT_2">%d</xliff:g> кантактаў · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
+      <item quantity="other"><xliff:g id="COUNT_2">%d</xliff:g> кантакту · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
     </plurals>
     <string name="title_from_google" msgid="4664084747121207202">"З Google"</string>
     <string name="title_from_other_accounts" msgid="8307885412426754288">"З <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
@@ -113,17 +112,19 @@
     <string name="customLabelPickerTitle" msgid="1081475101983255212">"Імя карыстальніцкага цэтліка"</string>
     <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Адпраўляць выклікі непасрэдна на галасавую пошту"</string>
     <string name="removePhoto" msgid="4898105274130284565">"Выдаліць фота"</string>
-    <string name="noContacts" msgid="4955659076981974652">"Няма кантактаў"</string>
+    <string name="noContacts" msgid="2228592924476426108">"Ваш спіс кантактаў пусты"</string>
     <string name="noGroups" msgid="4607906327968232225">"Метак няма."</string>
     <string name="noAccounts" msgid="7768267764545265909">"Для стварэння групы патрабуецца ўліковы запіс."</string>
     <string name="emptyGroup" msgid="5102411903247859575">"Няма кантактаў з гэтай меткай"</string>
+    <string name="emptyAccount" msgid="6873962901497975964">"Няма кантактаў у гэтым уліковым запісе"</string>
+    <string name="emptyMainList" msgid="2772242747899664460">"Ваш спіс кантактаў пусты"</string>
     <string name="contactSavedToast" msgid="9171862279493213075">"Кантакт захаваны"</string>
     <string name="contactUnlinkedToast" msgid="7122823195786012553">"Кантакты адлучаны"</string>
-    <string name="contactSavedErrorToast" msgid="3207250533172944892">"Немагчыма захаваць змены кантакта."</string>
-    <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Не ўдалося скасаваць сувязь з кантактам."</string>
-    <string name="contactJoinErrorToast" msgid="3977932531264809035">"Не ўдалося падлучыць кантакт."</string>
-    <string name="contactGenericErrorToast" msgid="7774911165341591714">"Памылка пры захаванні кантакту."</string>
-    <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"Не ўдалося захаваць змяненні фота кантакту."</string>
+    <string name="contactSavedErrorToast" msgid="4827033473908688031">"Не ўдалося захаваць змены кантакту"</string>
+    <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"Не ўдалося скасаваць сувязь з кантактам"</string>
+    <string name="contactJoinErrorToast" msgid="5735129234573327701">"Не ўдалося звязаць кантакт"</string>
+    <string name="contactGenericErrorToast" msgid="3885457515665783976">"Памылка пры захаванні кантакту"</string>
+    <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Не ўдалося захаваць змяненні фота кантакту"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"Збой загрузкі этыкеткі"</string>
     <string name="groupSavedToast" msgid="6491495462357722285">"Метка захавана"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Метка выдалена"</string>
@@ -132,7 +133,8 @@
     <string name="groupUpdatedToast" msgid="3667977658676267687">"Метка абноўлена"</string>
     <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Выдалена з меткі"</string>
     <string name="groupMembersAddedToast" msgid="4824834898718972768">"Дададзена да этыкеткі"</string>
-    <string name="groupSavedErrorToast" msgid="8121032018490980184">"Не ўдалося захаваць змяненні меткі."</string>
+    <string name="groupSavedErrorToast" msgid="2355891714292740162">"Не ўдалося захаваць змяненні меткі"</string>
+    <string name="groupExistsErrorMessage" msgid="5196811283836946189">"Гэта пазнака ўжо існуе"</string>
     <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
       <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> кантакт з нумарам(і) тэлефона(ў)</item>
       <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> кантакты з нумарамі тэлефонаў</item>
@@ -158,7 +160,6 @@
     <string name="callAgain" msgid="3197312117049874778">"Выклікаць зноў"</string>
     <string name="returnCall" msgid="8171961914203617813">"Зваротны выклік"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Дадаць адрас \"<xliff:g id="EMAIL">%s</xliff:g>\" у кантакты?"</string>
-    <string name="description_contact_photo" msgid="3387458082667894062">"фатаграфія кантакта"</string>
     <string name="description_plus_button" msgid="515164827856229880">"плюс"</string>
     <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> з <xliff:g id="TOTAL_NUMBER">%s</xliff:g> кантактаў"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"Імёны вашых кантактаў"</string>
@@ -205,7 +206,6 @@
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Дата"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Метка"</string>
     <string name="change_photo" msgid="8530597935483526383">"Змяніць"</string>
-    <string name="primary_photo" msgid="8517942231868516999">"Асноўнае фота"</string>
     <string name="description_star" msgid="2605854427360036550">"выбранае"</string>
     <string name="edit_contact" msgid="7529281274005689512">"Рэдагаваць кантакт"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"закрыць"</string>
@@ -229,8 +229,7 @@
     <string name="social_widget_loading" msgid="5327336597364074608">"Загрузка..."</string>
     <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Стварыць новы кантакт"</string>
     <string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Дадаць уліковы запіс"</string>
-    <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Імпартаваць кантакты"</string>
-    <string name="create_group_dialog_title" msgid="5363404287877384473">"Стварыць новую метку"</string>
+    <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"Імпартаваць"</string>
     <string name="create_group_item_label" msgid="3263064599743742865">"Стварыць новую..."</string>
     <string name="delete_group_dialog_message" msgid="335713829185261371">"Выдаліць метку \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\"? (Самі кантакты не будуць выдалены.)"</string>
     <string name="toast_join_with_empty_contact" msgid="1215465657839085613">"Перад звязваннем кантакту з іншым увядзіце імя кантакту."</string>
@@ -238,36 +237,33 @@
     <string name="set_default" msgid="4417505153468300351">"Усталяваць па змаўчанні"</string>
     <string name="clear_default" msgid="7193185801596678067">"Скінуць налады па змаўчанні"</string>
     <string name="toast_text_copied" msgid="5143776250008541719">"Тэкст скапіяваны"</string>
-    <string name="cancel_confirmation_dialog_message" msgid="5058226498605989285">"Адхіліць змены і скончыць рэдагаванне?"</string>
+    <string name="cancel_confirmation_dialog_message" msgid="9008214737653278989">"Скасаваць змены?"</string>
     <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Адхіліць"</string>
-    <string name="cancel_confirmation_dialog_keep_editing_button" msgid="7737724111972855348">"Працягнуць рэдагаванне"</string>
+    <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Скасаваць"</string>
+    <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Скасаваць дапасаванні?"</string>
     <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
     <string name="enter_contact_name" msgid="4594274696120278368">"Пошук кантактаў"</string>
-    <!-- no translation found for title_edit_group (1889302367574226969) -->
-    <skip />
+    <string name="title_edit_group" msgid="8602752287270586734">"Выдаліць кантакты"</string>
     <string name="local_profile_title" msgid="2021416826991393684">"Мой лакальны профіль"</string>
     <string name="external_profile_title" msgid="8034998767621359438">"Мой профіль у <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g>"</string>
     <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Адлюстраванне ўсіх кантактаў"</string>
     <string name="generic_no_account_prompt" msgid="7218827704367325460">"Абаранiце свае кантакты, нават калі страціце тэлефон: сінхранізуйце iх з вэб-службай."</string>
     <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Дадаць уліковы запіс"</string>
-    <string name="contact_editor_prompt_zero_accounts" msgid="1785345895691886499">"Рэзервовая копiя вашага новага кантакту не будзе створана. Дадаць улiковы запiс, у якiм будуць захоўвацца рэзервовыя копii кантактаў у Iнтэрнэце?"</string>
+    <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Знайдзіце хвілінку, каб дадаць уліковы запіс, які дазволіць стварыць рэзервовую копію вашых кантактаў у Google."</string>
     <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Новыя кантакты будуць захаваны ва ўліковы запіс <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
     <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Выбраць уліковы запіс па змаўчанні для новых кантактаў:"</string>
     <string name="contact_editor_title_new_contact" msgid="7192223018128934940">"Дадаць новы кантакт"</string>
     <string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"Рэдагаваць кантакт"</string>
-    <string name="keep_local" msgid="1258761699192993322">"Захоўваць лакальна"</string>
     <string name="add_account" msgid="8201790677994503186">"Дадаць уліковы запіс"</string>
     <string name="add_new_account" msgid="5748627740680940264">"Дадаць новы ўліковы запіс"</string>
     <string name="menu_export_database" msgid="2659719297530170820">"Экспарт базы дадзеных файлаў"</string>
     <string name="action_menu_add_new_contact_button" msgid="3180222523336380017">"дадаць новы кантакт"</string>
     <string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"Болей"</string>
     <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Паказаць менш"</string>
-    <string name="expanding_entry_card_view_see_all" msgid="3845258737661412627">"Прагледзець усё"</string>
     <string name="recent_card_title" msgid="8982782042698001695">"Нядаўнія"</string>
     <string name="about_card_title" msgid="2920942314212825637">"Інфармацыя"</string>
     <string name="send_message" msgid="8938418965550543196">"Адправiць паведамленне"</string>
     <string name="toast_making_personal_copy" msgid="288549957278065542">"Стварэнне асабістай копіі..."</string>
-    <string name="yesterday" msgid="6840858548955018569">"Учора"</string>
     <string name="tomorrow" msgid="6241969467795308581">"Заўтра"</string>
     <string name="today" msgid="8041090779381781781">"Сёння"</string>
     <string name="today_at_time_fmt" msgid="605665249491030460">"Сёння ў перыяд <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
@@ -286,7 +282,6 @@
     <string name="header_name_entry" msgid="1592791008096288306">"Імя"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"Электронная пошта"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"Тэлефон"</string>
-    <string name="header_photo_entry" msgid="4438023151411853238">"Фота"</string>
     <string name="content_description_expand_editor" msgid="1111381475901897470">"Націсніце, каб разгарнуць рэдактар кантактаў."</string>
     <string name="content_description_collapse_editor" msgid="7598061318022977825">"Націсніце, каб згарнуць рэдактар кантактаў."</string>
     <string name="content_description_directions" msgid="2686791825798189335">"напрамкі да месцазнаходжання"</string>
@@ -301,6 +296,8 @@
     <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Змяніць фота"</string>
     <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Збой адкрыцця рэдактара."</string>
     <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Куды захоўваць:"</string>
+    <!-- no translation found for compact_editor_account_selector_read_only_title (1869435992721760221) -->
+    <skip />
     <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"Зараз ідзе захаванне ва ўліковы запіс <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Двойчы дакраніцеся, каб выбраць іншы ўліковы запіс."</string>
     <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
       <item quantity="one">Звязаны кантакт (<xliff:g id="COUNT">%d</xliff:g>)</item>
@@ -356,4 +353,279 @@
     <string name="permission_explanation_subheader_calendar_and_SMS" msgid="630115334220569184">"Падзеі і паведамленні"</string>
     <string name="permission_explanation_subheader_calendar" msgid="8785323496211704613">"Падзеі"</string>
     <string name="permission_explanation_subheader_SMS" msgid="1904552086449525567">"Паведамленні"</string>
+    <string name="hamburger_feature_highlight_header" msgid="7442308698936786415">"Арганізуйце свой спіс"</string>
+    <string name="hamburger_feature_highlight_body" msgid="6268711111318172098">"Выдаліце дублікаты і згрупуйце кантакты па метках"</string>
+    <string name="undo" msgid="1425165101664071422">"Адрабіць"</string>
+    <string name="call_custom" msgid="6385303130912713318">"Выклікаць <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+    <string name="call_home" msgid="1990519474420545392">"Патэлефанаваць на хатні нумар"</string>
+    <string name="call_mobile" msgid="7502236805487609178">"Набраць нумар мабільнага тэлефону"</string>
+    <string name="call_work" msgid="5328785911463744028">"Выклікаць працоўны нумар тэлефона"</string>
+    <string name="call_fax_work" msgid="7467763592359059243">"Набраць нумар працоўнага факса"</string>
+    <string name="call_fax_home" msgid="8342175628887571876">"Патэлефанаваць на хатні факс"</string>
+    <string name="call_pager" msgid="9003902812293983281">"Выклікаць пэйджар"</string>
+    <string name="call_other" msgid="8563753966926932052">"Выклікаць"</string>
+    <string name="call_callback" msgid="1910165691349426858">"Зрабіць зваротны выклік"</string>
+    <string name="call_car" msgid="3280537320306436445">"Выклікаць нумар у машыне"</string>
+    <string name="call_company_main" msgid="6105120947138711257">"Выклікаць асноўны нумар кампаніі"</string>
+    <string name="call_isdn" msgid="1541590690193403411">"Выклік ISDN"</string>
+    <string name="call_main" msgid="6082900571803441339">"Выклікаць асноўны нумар"</string>
+    <string name="call_other_fax" msgid="5745314124619636674">"Выклік факса"</string>
+    <string name="call_radio" msgid="8296755876398357063">"Патэлефанаваць на радыётэлефон"</string>
+    <string name="call_telex" msgid="2223170774548648114">"Выклік на тэлекс"</string>
+    <string name="call_tty_tdd" msgid="8951266948204379604">"Выклікаць TTY/TDD"</string>
+    <string name="call_work_mobile" msgid="8707874281430105394">"Патэлефанаваць на працоўны мабільны"</string>
+    <string name="call_work_pager" msgid="3419348514157949008">"Выклікаць працоўны пэйджар"</string>
+    <string name="call_assistant" msgid="670941612175068337">"Выклікаць <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+    <string name="call_mms" msgid="6274041545876221437">"Выклік MMS"</string>
+    <string name="call_by_shortcut" msgid="2566802538698913124">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (Выклікаць)"</string>
+    <string name="sms_custom" msgid="415060214233647603">"Адправіць SMS на <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+    <string name="sms_home" msgid="7524332261493162995">"Тэкставае паведамленне на хатні тэлефон"</string>
+    <string name="sms_mobile" msgid="5200107250451030769">"Тэкставае паведамленне на мабільны тэлефон"</string>
+    <string name="sms_work" msgid="2269624156655267740">"Тэкставае паведамленне на працоўны тэлефон"</string>
+    <string name="sms_fax_work" msgid="8028189067816907075">"Тэкставае паведамленне на працоўны факс"</string>
+    <string name="sms_fax_home" msgid="9204042076306809634">"Тэкставае паведамленне на хатні факс"</string>
+    <string name="sms_pager" msgid="7730404569637015192">"Тэкставае паведамленне на пэйджар"</string>
+    <string name="sms_other" msgid="806127844607642331">"Тэкст"</string>
+    <string name="sms_callback" msgid="5004824430094288752">"Тэкст на нумар зваротнага выкліку"</string>
+    <string name="sms_car" msgid="7444227058437359641">"Тэкставае паведамленне ў аўтамабіль"</string>
+    <string name="sms_company_main" msgid="118970873419678087">"Паведамленне на асноўны нумар кампаніі"</string>
+    <string name="sms_isdn" msgid="8153785037515047845">"Тэкст ISDN"</string>
+    <string name="sms_main" msgid="8621625784504541679">"Паведамленне на асноўны нумар"</string>
+    <string name="sms_other_fax" msgid="3888842199855843152">"Тэкставае паведамленне на факс"</string>
+    <string name="sms_radio" msgid="3329166673433967820">"Тэкставае паведамленее на радыётэлефон"</string>
+    <string name="sms_telex" msgid="9034802430065267848">"Тэкставае паведамленне на тэлекс"</string>
+    <string name="sms_tty_tdd" msgid="6782284969132531532">"Тэкставае паведамленне на TTY/TDD"</string>
+    <string name="sms_work_mobile" msgid="2459939960512702560">"Тэкставае паведамленне на працоўны мабільны тэлефон"</string>
+    <string name="sms_work_pager" msgid="5566924423316960597">"Тэкставае паведамленне на працоўны пэйджар"</string>
+    <string name="sms_assistant" msgid="2773424339923116234">"Напiсаць тэкставае паведамленне: <xliff:g id="ASSISTANT">%s</xliff:g>"</string>
+    <string name="sms_mms" msgid="4069352461380762677">"Паведамленне MMS"</string>
+    <string name="sms_by_shortcut" msgid="7741770672976099517">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (Паведамленне)"</string>
+    <string name="description_video_call" msgid="7120921378651700947">"Зрабіць відэавыклік"</string>
+    <string name="clearFrequentsConfirmation_title" msgid="766292372438450432">"Выдалiць частыя кантакты?"</string>
+    <string name="clearFrequentsConfirmation" msgid="2270554975938265734">"Спіс найчасцей ужываных кантактаў праграм \"Кантакты\" i \"Тэлефон\" ачысціцца, а параметры адрасацыі паштовых праграм абнуляцца."</string>
+    <string name="clearFrequentsProgress_title" msgid="5157001637482794212">"Выдаленне частых кантактаў..."</string>
+    <string name="status_available" msgid="5586870015822828392">"Даступны"</string>
+    <string name="status_away" msgid="1838861100379804730">"Адсутнічае"</string>
+    <string name="status_busy" msgid="9147992455450257136">"Заняты"</string>
+    <string name="local_invisible_directory" msgid="6046691709127661065">"Іншае"</string>
+    <string name="directory_search_label" msgid="1887759056597975053">"Дырэкторыя"</string>
+    <string name="directory_search_label_work" msgid="8618292129829443176">"Працоўны каталог"</string>
+    <string name="local_search_label" msgid="2551177578246113614">"Усе кантакты"</string>
+    <string name="foundTooManyContacts" msgid="5163335650920020220">"Знойдзена вынікаў: больш за <xliff:g id="COUNT">%d</xliff:g>."</string>
+    <string name="description_quick_contact_for" msgid="6737516415168327789">"Хуткі кантакт для карыстальніка <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="missing_name" msgid="8745511583852904385">"(Без назвы)"</string>
+    <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Частая сувязь"</string>
+    <string name="description_view_contact_detail" msgid="9133251213656414807">"Прагледзець кантакт"</string>
+    <string name="list_filter_phones" msgid="735313795643493365">"Усе кантакты з нумарамі тэлефонаў"</string>
+    <string name="list_filter_phones_work" msgid="1470173699551475015">"Кантакты працоўнага профілю"</string>
+    <string name="view_updates_from_group" msgid="1782685984905600034">"Прагл. абнаўленняў"</string>
+    <string name="account_phone" msgid="7128032778471187553">"Прылада"</string>
+    <string name="account_sim" msgid="6519016427905087952">"SIM"</string>
+    <string name="nameLabelsGroup" msgid="2034640839640477827">"Імя"</string>
+    <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Псеўданiм"</string>
+    <string name="full_name" msgid="6602579550613988977">"Iмя"</string>
+    <string name="name_given" msgid="4280790853455320619">"Імя"</string>
+    <string name="name_family" msgid="7466985689626017037">"Прозвішча"</string>
+    <string name="name_prefix" msgid="59756378548779822">"Прэфікс імені"</string>
+    <string name="name_middle" msgid="8467433655992690326">"Імя па бацьку"</string>
+    <string name="name_suffix" msgid="3855278445375651441">"Суфікс да імені"</string>
+    <string name="name_phonetic" msgid="4259595234312430484">"Фанетычны запіс імя"</string>
+    <string name="name_phonetic_given" msgid="8723179018384187631">"Вымаўленне імя"</string>
+    <string name="name_phonetic_middle" msgid="8643721493320405200">"Фанетычны запіс імя па бацьку"</string>
+    <string name="name_phonetic_family" msgid="2640133663656011626">"Вымаўленне прозвішча"</string>
+    <string name="phoneLabelsGroup" msgid="6468091477851199285">"Тэлефон"</string>
+    <string name="emailLabelsGroup" msgid="8389931313045344406">"Электронная пошта"</string>
+    <string name="postalLabelsGroup" msgid="3487738141112589324">"Адрас"</string>
+    <string name="imLabelsGroup" msgid="3898238486262614027">"ІМ"</string>
+    <string name="organizationLabelsGroup" msgid="2478611760751832035">"Арганізацыя"</string>
+    <string name="relationLabelsGroup" msgid="1854373894284572781">"Сувязі"</string>
+    <string name="eventLabelsGroup" msgid="7960408705307831289">"Асаблівая дата"</string>
+    <string name="sms" msgid="1756857139634224222">"Тэкставае паведамленне"</string>
+    <string name="postal_address" msgid="8765560217149624536">"Адрас"</string>
+    <string name="ghostData_company" msgid="5414421120553765775">"Кампанія"</string>
+    <string name="ghostData_title" msgid="7496735200318496110">"Назва"</string>
+    <string name="label_notes" msgid="8337354953278341042">"Нататкі"</string>
+    <string name="label_custom_field" msgid="1994056912242214426">"Карыстальніцкі"</string>
+    <string name="label_sip_address" msgid="7252153678613978127">"SIP"</string>
+    <string name="websiteLabelsGroup" msgid="4202998982804009261">"Вэб-старонка"</string>
+    <string name="groupsLabel" msgid="7000816729542098972">"Меткі"</string>
+    <string name="email_home" msgid="8573740658148184279">"Паведамленне на хатні адрас электроннай пошты"</string>
+    <string name="email_mobile" msgid="2042889209787989814">"Адправіць электронную пошту на мабільны адрас"</string>
+    <string name="email_work" msgid="2807430017302722689">"Паведамленне на працоўную электронную пошту"</string>
+    <string name="email_other" msgid="3454004077967657109">"Электронная пошта"</string>
+    <string name="email_custom" msgid="5536404237099078802">"Адправіць ліст на адрас <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+    <string name="email" msgid="5668400997660065897">"Электронная пошта"</string>
+    <string name="postal_street" msgid="8133143961580058972">"Вуліца"</string>
+    <string name="postal_pobox" msgid="4431938829180269821">"Паштовая скрыня"</string>
+    <string name="postal_neighborhood" msgid="1450783874558956739">"Наваколле"</string>
+    <string name="postal_city" msgid="6597491300084895548">"Горад"</string>
+    <string name="postal_region" msgid="6045263193478437672">"Штат"</string>
+    <string name="postal_postcode" msgid="572136414136673751">"Паштовы індэкс"</string>
+    <string name="postal_country" msgid="7638264508416368690">"Краіна"</string>
+    <string name="map_home" msgid="1243547733423343982">"Прагледзець хатні адрас"</string>
+    <string name="map_work" msgid="1360474076921878088">"Паглядзець працоўны адрас"</string>
+    <string name="map_other" msgid="3817820803587012641">"Прагледзець адрас"</string>
+    <string name="map_custom" msgid="8761800628069473526">"Паглядзець адрас <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+    <string name="chat_aim" msgid="2588492205291249142">"Чат у AIM"</string>
+    <string name="chat_msn" msgid="8041633440091073484">"Чат у Windows Live"</string>
+    <string name="chat_yahoo" msgid="6629211142719943666">"Чат праз Yahoo"</string>
+    <string name="chat_skype" msgid="1210045020427480566">"Чат у Skype"</string>
+    <string name="chat_qq" msgid="4294637812847719693">"Чат у QQ"</string>
+    <string name="chat_gtalk" msgid="981575737258117697">"Чат у Google Talk"</string>
+    <string name="chat_icq" msgid="8438405386153745775">"Чат праз ICQ"</string>
+    <string name="chat_jabber" msgid="7561444230307829609">"Чат у Jabber"</string>
+    <string name="chat" msgid="9025361898797412245">"Чат"</string>
+    <string name="description_minus_button" msgid="6908099247930477551">"выдаліць"</string>
+    <string name="expand_name_fields_description" msgid="6883935911480726652">"Разгарнуць палі імён"</string>
+    <string name="collapse_name_fields_description" msgid="4757877385895561556">"Згарнуць палі імён"</string>
+    <string name="expand_phonetic_name_fields_description" msgid="3865726859582581741">"Разгарнуць фанетычныя палі імён"</string>
+    <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Згарнуць фанетычныя палі імён"</string>
+    <string name="expand_fields_description" msgid="8129294181216760037">"Разгарнуць"</string>
+    <string name="collapse_fields_description" msgid="1884143625854637874">"Згарнуць"</string>
+    <string name="announce_expanded_fields" msgid="1075947220478530622">"Разгорнута"</string>
+    <string name="announce_collapsed_fields" msgid="6414231530177338704">"Згорнута"</string>
+    <string name="list_filter_all_accounts" msgid="8908683398914322369">"Усе кантакты"</string>
+    <string name="list_filter_all_starred" msgid="5031734941601931356">"Пазначана"</string>
+    <string name="list_filter_customize" msgid="4789963356004169321">"Карыстальнiцкi"</string>
+    <string name="list_filter_single" msgid="5871400283515893087">"Кантакт"</string>
+    <string name="display_ungrouped" msgid="6885954210243119591">"Усе кантакты з тэчкі \"Іншыя\""</string>
+    <string name="display_all_contacts" msgid="2031647544742889505">"Усе кантакты"</string>
+    <string name="menu_sync_remove" msgid="3266725887008450161">"Выдаліць групу сінхранізацыі"</string>
+    <string name="dialog_sync_add" msgid="8267045393119375803">"Дадаць групу сінхранізацыі"</string>
+    <string name="display_more_groups" msgid="2682547080423434170">"Больш груп..."</string>
+    <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"Выдаленне групы \"<xliff:g id="GROUP">%s</xliff:g>\" з сінхранізацыі таксама выдаліць любыя разгрупаваныя кантакты з сінхранізацыі."</string>
+    <string name="savingDisplayGroups" msgid="2133152192716475939">"Захаванне параметраў адлюстравання..."</string>
+    <string name="menu_done" msgid="796017761764190697">"Зроблена"</string>
+    <string name="menu_doNotSave" msgid="58593876893538465">"Адмена"</string>
+    <string name="listCustomView" msgid="1840624396582117590">"Карыстальніцкі выгляд"</string>
+    <string name="dialog_new_contact_account" msgid="4969619718062454756">"Захаваць імпартаваныя кантакты ў:"</string>
+    <string name="import_from_sim" msgid="3859272228033941659">"Імпарт з SIM-карты"</string>
+    <string name="import_from_sim_summary" msgid="5815105584445743740">"Імпартаваць з SIM-карты <xliff:g id="SIM_NAME">^1</xliff:g> – <xliff:g id="SIM_NUMBER">^2</xliff:g>"</string>
+    <string name="import_from_sim_summary_no_number" msgid="880612418352086012">"Імпартаваць з SIM-карты <xliff:g id="SIM_NAME">%1$s</xliff:g>"</string>
+    <string name="import_from_vcf_file" product="default" msgid="5304572242183878086">"Імпартаваць з файла .vcf"</string>
+    <string name="cancel_import_confirmation_message" msgid="3929951040347726757">"Адмянiць iмпарт файла <xliff:g id="FILENAME">%s</xliff:g>?"</string>
+    <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Адмянiць экспарт файла <xliff:g id="FILENAME">%s</xliff:g>?"</string>
+    <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Немагчыма адмяніць імпарт/экспарт vCard"</string>
+    <string name="fail_reason_unknown" msgid="1714092345030570863">"Невядомая памылка."</string>
+    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Немагчыма адкрыць файл \"<xliff:g id="FILE_NAME">%s</xliff:g>\": <xliff:g id="EXACT_REASON">%s</xliff:g>"</string>
+    <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"Не атрымалася запусцiць экспарцёр: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
+    <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"Няма кантактаў для экспарту."</string>
+    <string name="missing_required_permission" msgid="5865884842972833120">"Вы адключылі дазвол, які патрабуецца."</string>
+    <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"Памылка экспарту: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
+    <string name="fail_reason_too_long_filename" msgid="3393764245254738333">"Патрабаванае імя файла (\"<xliff:g id="FILENAME">%s</xliff:g>\") занадта доўгае."</string>
+    <string name="fail_reason_io_error" msgid="6748358842976073255">"Памылка ўводу/вываду"</string>
+    <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Недастаткова памяці (магчыма, занадта вялікі файл)"</string>
+    <string name="fail_reason_vcard_parse_error" msgid="888263542360355784">"Немагчыма разабраць файл vCard па нечаканай прычыне."</string>
+    <string name="fail_reason_not_supported" msgid="8219562769267148825">"Фармат не падтрымліваецца."</string>
+    <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="6427931733267328564">"Немагчыма сабраць мета-інфармацыю з гэтых файлаў vCard."</string>
+    <string name="fail_reason_failed_to_read_files" msgid="5823434810622484922">"Адзін або некалькі файлаў не могуць быць імпартаваныя (%s)."</string>
+    <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"Экспарт файла <xliff:g id="FILENAME">%s</xliff:g> завершаны."</string>
+    <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"Экспартаванне кантактаў завершана."</string>
+    <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"Экспартаванне кантактаў завершана, націсніце на апавяшчэнне, каб абагуліць кантакты."</string>
+    <string name="touch_to_share_contacts" msgid="4882485525268469736">"Дакраніцеся, каб абагуліць кантакты."</string>
+    <string name="exporting_vcard_canceled_title" msgid="2652222370493306887">"Экспарт файла <xliff:g id="FILENAME">%s</xliff:g> адменены."</string>
+    <string name="exporting_contact_list_title" msgid="9072240631534457415">"Экспарт дадзеных кантакту"</string>
+    <string name="exporting_contact_list_message" msgid="3367949209642931952">"Кантактныя даныя экспартуюцца."</string>
+    <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"Немагчыма атрымаць інфармацыю з базы дадзеных."</string>
+    <string name="composer_has_no_exportable_contact" msgid="3296493229040294335">"Няма кантактаў, якiя можна экспартаваць. Калi ў вашым тэлефоне няма кантактаў, некаторыя пастаўшчыкi дадзеных могуць забараняць экспарт кантактаў з тэлефона."</string>
+    <string name="composer_not_initialized" msgid="2321648986367005254">"Памылка запуску складальнiка файлаў vCard."</string>
+    <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Не атрымалася экспартаваць"</string>
+    <string name="exporting_contact_failed_message" msgid="4938527850142003141">"Памылка экспарта кантактных дадзеных. \nПрычына: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
+    <string name="importing_vcard_description" msgid="4245275224298571351">"Імпарт <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="reading_vcard_failed_title" msgid="4251647443358422855">"Немагчыма прачытаць дадзеныя vCard"</string>
+    <string name="reading_vcard_canceled_title" msgid="1925216585981542019">"Чытанне дадзеных з vCard адменена"</string>
+    <string name="importing_vcard_finished_title" msgid="3341541727268747967">"Заканчэнне імпартавання vCard <xliff:g id="FILENAME">%s</xliff:g>"</string>
+    <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"Імпарт файла <xliff:g id="FILENAME">%s</xliff:g> адменены"</string>
+    <string name="vcard_import_will_start_message" msgid="2804911199145873396">"Файл <xliff:g id="FILENAME">%s</xliff:g> будзе імпартаваны ў бліжэйшы час."</string>
+    <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"Файл будзе імпартаваны ў бліжэйшы час."</string>
+    <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"Запыт экспарту vCard адхілены. Паспрабуйце пазней."</string>
+    <string name="vcard_export_will_start_message" msgid="2210241345252081463">"Файл <xliff:g id="FILENAME">%s</xliff:g> будзе экспартаваны ў бліжэйшы час."</string>
+    <string name="vcard_export_will_start_message_fallback" msgid="6553826997490909749">"Неўзабаве файл будзе экспартаваны."</string>
+    <string name="contacts_export_will_start_message" msgid="8538705791417534431">"Неўзабаве кантакты будуць экспартаваны."</string>
+    <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"Запыт экспарту vCard адхілены. Паспрабуйце пазней."</string>
+    <string name="vcard_unknown_filename" msgid="7171709890959915954">"кантакт"</string>
+    <string name="caching_vcard_message" msgid="4926308675041506756">"Кэшуе файлы vCard у лакальнае часовае сховішча. Фактычны імпарт пачнецца ў бліжэйшы час."</string>
+    <string name="vcard_import_failed" msgid="5223531255894842406">"Немагчыма імпартаваць vCard."</string>
+    <string name="nfc_vcard_file_name" msgid="2823095213265993609">"Кант. атр. праз NFC"</string>
+    <string name="confirm_export_title" msgid="6834385377255286349">"Экспартаваць кантакты?"</string>
+    <string name="caching_vcard_title" msgid="1226272312940516605">"Кэшаванне..."</string>
+    <string name="progress_notifier_message" msgid="2311011466908220528">"Імпарт <xliff:g id="CURRENT_NUMBER">%s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%s</xliff:g>: <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="export_to_vcf_file" product="default" msgid="4407527157056120858">"Экспартаваць у файл .vcf"</string>
+    <string name="display_options_sort_list_by" msgid="7028809117272018712">"Сартаваць па"</string>
+    <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"Імя"</string>
+    <string name="display_options_sort_by_family_name" msgid="2684905041926954793">"Прозвішча"</string>
+    <string name="display_options_view_names_as" msgid="6514632499276563482">"Фармат імя"</string>
+    <string name="display_options_view_given_name_first" msgid="3616004640258761473">"Спачатку імя"</string>
+    <string name="display_options_view_family_name_first" msgid="956445100777296467">"Спачатку прозвішча"</string>
+    <string name="settings_accounts" msgid="350219740670774576">"Уліковыя запісы"</string>
+    <string name="default_editor_account" msgid="699591683362420991">"Стандартны ўліковы запіс для новых кантактаў"</string>
+    <string name="sync_contact_metadata_title" msgid="6957956139306960211">"Сінхранізаваць метаданыя кантактаў [DOGFOOD]"</string>
+    <string name="sync_contact_metadata_dialog_title" msgid="6192335951588820553">"Сінхранізаваць метаданыя кантактаў"</string>
+    <string name="settings_my_info_title" msgid="1534272456405343119">"Мая інфармацыя"</string>
+    <string name="set_up_profile" msgid="7370213843590143771">"Наладзьце ваш профіль"</string>
+    <string name="setting_about" msgid="7014388749752042863">"Інфармацыя аб Кантактах"</string>
+    <string name="share_visible_contacts" msgid="890150378880783797">"Адкрыць бачныя кантакты"</string>
+    <string name="share_visible_contacts_failure" msgid="7324717548166915560">"Збой абагульвання бачных кантактаў."</string>
+    <string name="share_favorite_contacts" msgid="4280926751003081042">"Абагуліць улюбёныя кантакты"</string>
+    <string name="share_contacts" msgid="8109287987498711664">"Абагуліць усе кантакты"</string>
+    <string name="share_contacts_failure" msgid="1216431977330560559">"Збой абагульвання кантактаў."</string>
+    <!-- no translation found for dialog_export (1628001095187741417) -->
+    <skip />
+    <string name="dialog_import" msgid="2431698729761448759">"Імпартаваць кантакты"</string>
+    <string name="share_error" msgid="948429331673358107">"Нельга падзялiцца гэтым кантактам."</string>
+    <string name="no_contact_to_share" msgid="1276397530378323033">"Няма кантактаў, якія можна абагуліць."</string>
+    <string name="menu_search" msgid="9147752853603483719">"Пошук"</string>
+    <string name="menu_contacts_filter" msgid="2165153460860262501">"Паказаць кантакты"</string>
+    <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Кантакты для адлюстр."</string>
+    <string name="custom_list_filter" msgid="2105275443109077687">"Вызначыце карыстальніцкі выгляд"</string>
+    <string name="menu_custom_filter_save" msgid="2679793632208086460">"Захаваць"</string>
+    <string name="hint_findContacts" msgid="7128627979899070325">"Шукаць у кантактах"</string>
+    <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Выбранае"</string>
+    <string name="listTotalAllContactsZero" msgid="5513001821794568211">"Няма кантактаў."</string>
+    <string name="menu_clear_frequents" msgid="7688250191932838833">"Выдалiць частыя кантакты"</string>
+    <string name="menu_select_sim" msgid="3603578201960504010">"Выбраць SIM-карту"</string>
+    <string name="menu_accounts" msgid="1424330057450189074">"Кіраваць уліковымі запісамі"</string>
+    <!-- no translation found for menu_import (6107961135813836467) -->
+    <skip />
+    <!-- no translation found for menu_export (2658783911863503902) -->
+    <skip />
+    <string name="menu_blocked_numbers" msgid="5272951629083025995">"Заблакіраваныя нумары"</string>
+    <string name="contact_status_update_attribution" msgid="752179367353018597">"праз <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
+    <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> праз <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
+    <string name="action_menu_back_from_search" msgid="8793348588949233348">"спыніць пошук"</string>
+    <string name="description_clear_search" msgid="688023606766232904">"Ачысціць пошук"</string>
+    <string name="settings_contact_display_options_title" msgid="4890258244494248687">"Параметры адлюстравання кантактаў"</string>
+    <string name="select_account_dialog_title" msgid="5478489655696599219">"Уліковы запіс"</string>
+    <string name="set_default_account" msgid="4311613760725609801">"Заўсёды ўжываць гэта для выклікаў"</string>
+    <string name="select_phone_account_for_calls" msgid="3810607744451014540">"Выклікаць праз"</string>
+    <string name="call_with_a_note" msgid="8389827628360791676">"Выклікаць з нататкай"</string>
+    <string name="call_subject_hint" msgid="3043028982108363572">"Увесці нататку для адпраўкі з выклікам…"</string>
+    <string name="send_and_call_button" msgid="7740295432834590737">"АДПРАВІЦЬ І ВЫКЛІКАЦЬ"</string>
+    <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g> / <xliff:g id="LIMIT">%2$s</xliff:g>"</string>
+    <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
+    <plurals name="tab_title_with_unread_items" formatted="false" msgid="7682024005130747825">
+      <item quantity="one"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> непрачытаны элемент. </item>
+      <item quantity="few"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> непрачытаныя элементы. </item>
+      <item quantity="many"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> непрачытаных элементаў. </item>
+      <item quantity="other"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> непрачытанага элемента. </item>
+    </plurals>
+    <string name="about_build_version" msgid="1765533099416999801">"Версія зборкі"</string>
+    <string name="about_open_source_licenses" msgid="6479990452352919641">"Ліцэнзіі на ПЗ з адкрытым зыходным кодам"</string>
+    <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Звесткі аб ліцэнзіі на праграмнае забеспячэнне з адкрытым зыходным кодам"</string>
+    <string name="about_privacy_policy" msgid="3705518622499152626">"Палітыка прыватнасці"</string>
+    <string name="about_terms_of_service" msgid="4642400812150296723">"Умовы абслугоўвання"</string>
+    <string name="activity_title_licenses" msgid="5467767062737708066">"Ліцэнзіі на ПЗ з адкрытым зыходным кодам"</string>
+    <string name="url_open_error_toast" msgid="452592089815420457">"Збой адкрыцця URL-адраса."</string>
+    <string name="account_filter_view_checked" msgid="6696859503887762213">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> - пазначана"</string>
+    <string name="account_filter_view_not_checked" msgid="2248684521205038389">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> - не пазначана"</string>
+    <string name="description_search_video_call" msgid="5841525580339803272">"Пачаць відэавыклік"</string>
+    <string name="description_delete_contact" msgid="53835657343783663">"Выдаліць"</string>
+    <string name="description_no_name_header" msgid="8884991311595943271">"Шматкроп\'е"</string>
+    <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> c"</string>
+    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> хв <xliff:g id="SECONDS">%s</xliff:g> с"</string>
+    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> гадз <xliff:g id="MINUTES_1">%s</xliff:g> хв <xliff:g id="SECONDS">%s</xliff:g> с"</string>
+    <!-- no translation found for dynamic_shortcut_disabled_message (249939425761315252) -->
+    <skip />
+    <!-- no translation found for dynamic_shortcut_contact_removed_message (6845645831837615899) -->
+    <skip />
 </resources>
diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml
index 393d0e1..2e7f397 100644
--- a/res/values-bg/strings.xml
+++ b/res/values-bg/strings.xml
@@ -67,6 +67,7 @@
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Предлагани контакти"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Всички контакти"</string>
     <string name="contactsJoinedMessage" msgid="3343535986195643136">"Контактите са свързани"</string>
+    <string name="contact_deleted_named_toast" msgid="6558941164987421174">"Изтрихте <xliff:g id="NAME">%s</xliff:g>"</string>
     <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
       <item quantity="other">Контактите са изтрити</item>
       <item quantity="one">Контактът е изтрит</item>
@@ -113,11 +114,11 @@
     <string name="emptyMainList" msgid="2772242747899664460">"Списъкът ви с контакти е празен"</string>
     <string name="contactSavedToast" msgid="9171862279493213075">"Контактът е запазен"</string>
     <string name="contactUnlinkedToast" msgid="7122823195786012553">"Контактите са разделени"</string>
-    <string name="contactSavedErrorToast" msgid="3207250533172944892">"Промените в контакта не можаха да бъдат запазени."</string>
-    <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Контактът не можа да бъде разделен."</string>
-    <string name="contactJoinErrorToast" msgid="3977932531264809035">"Контактът не можа да бъде свързан."</string>
-    <string name="contactGenericErrorToast" msgid="7774911165341591714">"При запазването на контакта възникна грешка."</string>
-    <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"Промените в снимката на контакта не можаха да се запазят."</string>
+    <string name="contactSavedErrorToast" msgid="4827033473908688031">"Промените в контакта не можаха да бъдат запазени"</string>
+    <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"Връзката на контакта не можа да бъде прекратена"</string>
+    <string name="contactJoinErrorToast" msgid="5735129234573327701">"Контактът не можа да бъде свързан"</string>
+    <string name="contactGenericErrorToast" msgid="3885457515665783976">"При запазването на контакта възникна грешка"</string>
+    <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Промените в снимката на контакта не можаха да бъдат запазени"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"Зареждането на етикета не бе успешно"</string>
     <string name="groupSavedToast" msgid="6491495462357722285">"Етикетът е запазен."</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Етикетът бе изтрит"</string>
@@ -126,7 +127,7 @@
     <string name="groupUpdatedToast" msgid="3667977658676267687">"Етикетът бе актуализиран"</string>
     <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Премахнати от етикета"</string>
     <string name="groupMembersAddedToast" msgid="4824834898718972768">"Добавянето към етикета бе успешно"</string>
-    <string name="groupSavedErrorToast" msgid="8121032018490980184">"Промените в етикета не можаха да бъдат запазени."</string>
+    <string name="groupSavedErrorToast" msgid="2355891714292740162">"Промените в етикета не можаха да бъдат запазени"</string>
     <string name="groupExistsErrorMessage" msgid="5196811283836946189">"Етикетът вече съществува"</string>
     <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
       <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> контакта с телефонен номер</item>
@@ -147,7 +148,6 @@
     <string name="callAgain" msgid="3197312117049874778">"Повторно обаждане"</string>
     <string name="returnCall" msgid="8171961914203617813">"Отговаряне на обаждане"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Да се добави ли „<xliff:g id="EMAIL">%s</xliff:g>“ към контакти?"</string>
-    <string name="description_contact_photo" msgid="3387458082667894062">"снимка на контакта"</string>
     <string name="description_plus_button" msgid="515164827856229880">"плюс"</string>
     <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> от <xliff:g id="TOTAL_NUMBER">%s</xliff:g> контакта"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"Имена на контактите ви"</string>
@@ -192,7 +192,6 @@
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Дата"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Етикет"</string>
     <string name="change_photo" msgid="8530597935483526383">"Промяна"</string>
-    <string name="primary_photo" msgid="8517942231868516999">"Основна снимка"</string>
     <string name="description_star" msgid="2605854427360036550">"любимо"</string>
     <string name="edit_contact" msgid="7529281274005689512">"Редактиране на контакта"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"затваряне"</string>
@@ -269,7 +268,6 @@
     <string name="header_name_entry" msgid="1592791008096288306">"Име"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"Имейл"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"Телефон"</string>
-    <string name="header_photo_entry" msgid="4438023151411853238">"Снимка"</string>
     <string name="content_description_expand_editor" msgid="1111381475901897470">"Кликнете за разгъване на редактора за контакти."</string>
     <string name="content_description_collapse_editor" msgid="7598061318022977825">"Кликнете за свиване на редактора за контакти."</string>
     <string name="content_description_directions" msgid="2686791825798189335">"упътвания до местоположението"</string>
@@ -284,6 +282,8 @@
     <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Промяна на снимката"</string>
     <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Отварянето на редактора не бе успешно."</string>
     <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Запазване във:"</string>
+    <!-- no translation found for compact_editor_account_selector_read_only_title (1869435992721760221) -->
+    <skip />
     <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"Понастоящем се запазва в профила <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Докоснете двукратно, за да изберете друг."</string>
     <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
       <item quantity="other">Свързани контакти (<xliff:g id="COUNT">%d</xliff:g>)</item>
@@ -454,22 +454,14 @@
     <string name="chat_jabber" msgid="7561444230307829609">"Чат по Jabber"</string>
     <string name="chat" msgid="9025361898797412245">"Чат"</string>
     <string name="description_minus_button" msgid="6908099247930477551">"изтриване"</string>
-    <!-- no translation found for expand_name_fields_description (6883935911480726652) -->
-    <skip />
-    <!-- no translation found for collapse_name_fields_description (4757877385895561556) -->
-    <skip />
-    <!-- no translation found for expand_phonetic_name_fields_description (3865726859582581741) -->
-    <skip />
-    <!-- no translation found for collapse_phonetic_name_fields_description (9102249481855019452) -->
-    <skip />
-    <!-- no translation found for expand_fields_description (8129294181216760037) -->
-    <skip />
-    <!-- no translation found for collapse_fields_description (1884143625854637874) -->
-    <skip />
-    <!-- no translation found for announce_expanded_fields (1075947220478530622) -->
-    <skip />
-    <!-- no translation found for announce_collapsed_fields (6414231530177338704) -->
-    <skip />
+    <string name="expand_name_fields_description" msgid="6883935911480726652">"Разгъване на полетата за имена"</string>
+    <string name="collapse_name_fields_description" msgid="4757877385895561556">"Свиване на полетата за имена"</string>
+    <string name="expand_phonetic_name_fields_description" msgid="3865726859582581741">"Разгъване на полетата за фонетични имена"</string>
+    <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Свиване на полетата за фонетични имена"</string>
+    <string name="expand_fields_description" msgid="8129294181216760037">"Разгъване"</string>
+    <string name="collapse_fields_description" msgid="1884143625854637874">"Свиване"</string>
+    <string name="announce_expanded_fields" msgid="1075947220478530622">"Разгънато"</string>
+    <string name="announce_collapsed_fields" msgid="6414231530177338704">"Свито"</string>
     <string name="list_filter_all_accounts" msgid="8908683398914322369">"Всички контакти"</string>
     <string name="list_filter_all_starred" msgid="5031734941601931356">"Със звезда"</string>
     <string name="list_filter_customize" msgid="4789963356004169321">"Персонализиране"</string>
@@ -555,7 +547,8 @@
     <string name="share_favorite_contacts" msgid="4280926751003081042">"Споделяне на любимите контакти"</string>
     <string name="share_contacts" msgid="8109287987498711664">"Споделяне на всички контакти"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"Споделянето на контактите не бе успешно."</string>
-    <string name="dialog_import_export" msgid="4360648034889921624">"Импортиране/Експортиране на контакти"</string>
+    <!-- no translation found for dialog_export (1628001095187741417) -->
+    <skip />
     <string name="dialog_import" msgid="2431698729761448759">"Импортиране на контактите"</string>
     <string name="share_error" msgid="948429331673358107">"Този контакт не може да бъде споделен."</string>
     <string name="no_contact_to_share" msgid="1276397530378323033">"Няма контакти за споделяне."</string>
@@ -570,7 +563,10 @@
     <string name="menu_clear_frequents" msgid="7688250191932838833">"Изчистване на често търсените"</string>
     <string name="menu_select_sim" msgid="3603578201960504010">"Избиране на SIM карта"</string>
     <string name="menu_accounts" msgid="1424330057450189074">"Управление на профилите"</string>
-    <string name="menu_import_export" msgid="26217871113229507">"Импортиране/Експортиране"</string>
+    <!-- no translation found for menu_import (6107961135813836467) -->
+    <skip />
+    <!-- no translation found for menu_export (2658783911863503902) -->
+    <skip />
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"Блокирани номера"</string>
     <string name="contact_status_update_attribution" msgid="752179367353018597">"чрез <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> чрез <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
@@ -604,4 +600,8 @@
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> сек"</string>
     <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> мин <xliff:g id="SECONDS">%s</xliff:g> сек"</string>
     <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> ч <xliff:g id="MINUTES_1">%s</xliff:g> мин <xliff:g id="SECONDS">%s</xliff:g> сек"</string>
+    <!-- no translation found for dynamic_shortcut_disabled_message (249939425761315252) -->
+    <skip />
+    <!-- no translation found for dynamic_shortcut_contact_removed_message (6845645831837615899) -->
+    <skip />
 </resources>
diff --git a/res/values-bn-rBD/strings.xml b/res/values-bn-rBD/strings.xml
index 7d9ad50..20f1db7 100644
--- a/res/values-bn-rBD/strings.xml
+++ b/res/values-bn-rBD/strings.xml
@@ -67,6 +67,7 @@
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"প্রস্তাবিত পরিচিতিগুলি"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"সকল পরিচিতি"</string>
     <string name="contactsJoinedMessage" msgid="3343535986195643136">"পরিচিতিগুলি লিঙ্ক করা হয়েছে"</string>
+    <string name="contact_deleted_named_toast" msgid="6558941164987421174">"<xliff:g id="NAME">%s</xliff:g>কে মোছা হয়েছে"</string>
     <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
       <item quantity="one">পরিচিতিগুলি মোছা হয়েছে</item>
       <item quantity="other">পরিচিতিগুলি মোছা হয়েছে</item>
@@ -113,11 +114,11 @@
     <string name="emptyMainList" msgid="2772242747899664460">"আপনার পরিচিতির তালিকা খালি"</string>
     <string name="contactSavedToast" msgid="9171862279493213075">"পরিচিতি সংরক্ষণ করা হয়েছে"</string>
     <string name="contactUnlinkedToast" msgid="7122823195786012553">"পরিচিতিগুলি লিঙ্কমুক্ত করা হয়েছে"</string>
-    <string name="contactSavedErrorToast" msgid="3207250533172944892">"পরিচিতির পরিবর্তনগুলি সংরক্ষণ করা যায়নি৷"</string>
-    <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"পরিচিতিতে লিঙ্কমুক্ত করা যায়নি৷"</string>
-    <string name="contactJoinErrorToast" msgid="3977932531264809035">"পরিচিতি লিঙ্ক করা যায়নি৷"</string>
-    <string name="contactGenericErrorToast" msgid="7774911165341591714">"পরিচিতি সংরক্ষণ করতে ত্রুটি হয়েছে৷"</string>
-    <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"পরিচিতির ফটোর পরিবর্তনগুলি সংরক্ষণ করা যায়নি৷"</string>
+    <string name="contactSavedErrorToast" msgid="4827033473908688031">"পরিচিতিতে করা পরিবর্তনগুলি সংরক্ষণ করা গেল না"</string>
+    <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"পরিচিতি লিঙ্কমুক্ত করা গেল না"</string>
+    <string name="contactJoinErrorToast" msgid="5735129234573327701">"পরিচিতি লিঙ্ক করা গেল না"</string>
+    <string name="contactGenericErrorToast" msgid="3885457515665783976">"পরিচিতি সংরক্ষণ করার সময় ত্রুটি"</string>
+    <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"পরিচিতির ফটোয় করা পরিবর্তনগুলি সংরক্ষণ করা গেল না"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"লেবেল লোড করা গেল না"</string>
     <string name="groupSavedToast" msgid="6491495462357722285">"লেবেল সংরক্ষিত হয়েছে"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"লেবেল মুছে ফেলা হয়েছে"</string>
@@ -126,7 +127,7 @@
     <string name="groupUpdatedToast" msgid="3667977658676267687">"লেবেল আপডেট করা হয়েছে"</string>
     <string name="groupMembersRemovedToast" msgid="3510563559799376603">"লেবেল থেকে সরানো হয়েছে"</string>
     <string name="groupMembersAddedToast" msgid="4824834898718972768">"লেবেল যোগ করা হয়েছে"</string>
-    <string name="groupSavedErrorToast" msgid="8121032018490980184">"লেবেল পরিবর্তনগুলি সংরক্ষণ করা গেল না।"</string>
+    <string name="groupSavedErrorToast" msgid="2355891714292740162">"লেবেলে করা পরিবর্তনগুলি সংরক্ষণ করা গেল না"</string>
     <string name="groupExistsErrorMessage" msgid="5196811283836946189">"এই লেবেলটি ইতিমধ্যে রয়েছে"</string>
     <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
       <item quantity="one">ফোন নম্বর সহ <xliff:g id="COUNT">%d</xliff:g>টি পরিচিতি</item>
@@ -147,7 +148,6 @@
     <string name="callAgain" msgid="3197312117049874778">"আবার কল করুন"</string>
     <string name="returnCall" msgid="8171961914203617813">"মিস হয়ে যওয়া নম্বরে পুনরায় কল করুন"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"পরিচিতিগুলিতে <xliff:g id="EMAIL">%s</xliff:g> যোগ করবেন?"</string>
-    <string name="description_contact_photo" msgid="3387458082667894062">"পরিচিতির ফটো"</string>
     <string name="description_plus_button" msgid="515164827856229880">"যোগ চিহ্ন"</string>
     <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="TOTAL_NUMBER">%s</xliff:g>টির মধ্যে <xliff:g id="CURRENT_NUMBER">%s</xliff:g>টি পরিচিতি"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"আপনার পরিচিতিগুলির নামগুলি"</string>
@@ -192,7 +192,6 @@
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"তারিখ"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"লেবেল"</string>
     <string name="change_photo" msgid="8530597935483526383">"পরিবর্তন"</string>
-    <string name="primary_photo" msgid="8517942231868516999">"প্রাথমিক ফটো"</string>
     <string name="description_star" msgid="2605854427360036550">"পছন্দসই"</string>
     <string name="edit_contact" msgid="7529281274005689512">"পরিচিতি সম্পাদনা করুন"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"বন্ধ করুন"</string>
@@ -269,7 +268,6 @@
     <string name="header_name_entry" msgid="1592791008096288306">"নাম"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"ইমেল"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"ফোন"</string>
-    <string name="header_photo_entry" msgid="4438023151411853238">"ফটো"</string>
     <string name="content_description_expand_editor" msgid="1111381475901897470">"পরিচিতি সম্পাদক প্রসারিত করতে ক্লিক করুন৷"</string>
     <string name="content_description_collapse_editor" msgid="7598061318022977825">"পরিচিতি সম্পাদক সঙ্কুচিত করতে ক্লিক করুন৷"</string>
     <string name="content_description_directions" msgid="2686791825798189335">"অবস্থান জানার দিকনির্দেশ"</string>
@@ -284,6 +282,8 @@
     <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"ফটো পরিবর্তন করুন"</string>
     <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"সম্পাদক খুলতে ব্যর্থ হচ্ছে৷"</string>
     <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"এতে সংরক্ষণ করা হচ্ছে"</string>
+    <!-- no translation found for compact_editor_account_selector_read_only_title (1869435992721760221) -->
+    <skip />
     <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"বর্তমানে <xliff:g id="ACCOUNT_NAME">%s</xliff:g> এ সংরক্ষণ করা হচ্ছে৷ কোনো আলাদা অ্যাকাউন্ট চয়ন করার জন্য দুবার আলতো চপুন৷"</string>
     <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
       <item quantity="one">লিঙ্ক করা পরিচিতিগুলি (<xliff:g id="COUNT">%d</xliff:g>টি)</item>
@@ -454,22 +454,14 @@
     <string name="chat_jabber" msgid="7561444230307829609">"Jabber ব্যবহার করে চ্যাট করুন"</string>
     <string name="chat" msgid="9025361898797412245">"চ্যাট"</string>
     <string name="description_minus_button" msgid="6908099247930477551">"মুছুন"</string>
-    <!-- no translation found for expand_name_fields_description (6883935911480726652) -->
-    <skip />
-    <!-- no translation found for collapse_name_fields_description (4757877385895561556) -->
-    <skip />
-    <!-- no translation found for expand_phonetic_name_fields_description (3865726859582581741) -->
-    <skip />
-    <!-- no translation found for collapse_phonetic_name_fields_description (9102249481855019452) -->
-    <skip />
-    <!-- no translation found for expand_fields_description (8129294181216760037) -->
-    <skip />
-    <!-- no translation found for collapse_fields_description (1884143625854637874) -->
-    <skip />
-    <!-- no translation found for announce_expanded_fields (1075947220478530622) -->
-    <skip />
-    <!-- no translation found for announce_collapsed_fields (6414231530177338704) -->
-    <skip />
+    <string name="expand_name_fields_description" msgid="6883935911480726652">"নামের ক্ষেত্রটিকে প্রসারিত করুন"</string>
+    <string name="collapse_name_fields_description" msgid="4757877385895561556">"নামের ক্ষেত্রটিকে সঙ্কুচিত করুন"</string>
+    <string name="expand_phonetic_name_fields_description" msgid="3865726859582581741">"ফোনেটিক নামের ক্ষেত্রটিকে প্রসারিত করুন"</string>
+    <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"ফোনেটিক নামের ক্ষেত্রটিকে প্রসারিত করুন"</string>
+    <string name="expand_fields_description" msgid="8129294181216760037">"প্রসারিত করুন"</string>
+    <string name="collapse_fields_description" msgid="1884143625854637874">"সঙ্কুচিত করুন"</string>
+    <string name="announce_expanded_fields" msgid="1075947220478530622">"প্রসারিত হয়েছে"</string>
+    <string name="announce_collapsed_fields" msgid="6414231530177338704">"সংকুচিত রয়েছে"</string>
     <string name="list_filter_all_accounts" msgid="8908683398914322369">"সকল পরিচিতি"</string>
     <string name="list_filter_all_starred" msgid="5031734941601931356">"তারকাচিহ্নিত"</string>
     <string name="list_filter_customize" msgid="4789963356004169321">"নিজের সুবিধামতো করুন"</string>
@@ -555,7 +547,8 @@
     <string name="share_favorite_contacts" msgid="4280926751003081042">"পছন্দসই পরিচিতিগুলি শেয়ার করুন"</string>
     <string name="share_contacts" msgid="8109287987498711664">"সকল পরিচিতি শেয়ার করুন"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"পরিচিতিগুলিকে শেয়ার করতে ব্যর্থ হয়েছে৷"</string>
-    <string name="dialog_import_export" msgid="4360648034889921624">"পরিচিতিগুলি আমদানি/রপ্তানি করুন"</string>
+    <!-- no translation found for dialog_export (1628001095187741417) -->
+    <skip />
     <string name="dialog_import" msgid="2431698729761448759">"পরিচিতিগুলি আমদানি করুন"</string>
     <string name="share_error" msgid="948429331673358107">"এই পরিচিতিটিকে শেয়ার করা যাবে না৷"</string>
     <string name="no_contact_to_share" msgid="1276397530378323033">"শেয়ার করার জন্য কোনো পরিচিতি নেই৷"</string>
@@ -570,7 +563,10 @@
     <string name="menu_clear_frequents" msgid="7688250191932838833">"পুনরাবৃত্তি সাফ করুন"</string>
     <string name="menu_select_sim" msgid="3603578201960504010">"সিম কার্ড নির্বাচন করুন"</string>
     <string name="menu_accounts" msgid="1424330057450189074">"অ্যাকাউন্টগুলি পরিচালনা করুন"</string>
-    <string name="menu_import_export" msgid="26217871113229507">"আমদানি/রপ্তানি"</string>
+    <!-- no translation found for menu_import (6107961135813836467) -->
+    <skip />
+    <!-- no translation found for menu_export (2658783911863503902) -->
+    <skip />
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"অবরোধ করা নম্বরগুলি"</string>
     <string name="contact_status_update_attribution" msgid="752179367353018597">"<xliff:g id="SOURCE">%1$s</xliff:g> এর মাধ্যমে"</string>
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="SOURCE">%2$s</xliff:g> এর মাধ্যমে <xliff:g id="DATE">%1$s</xliff:g>"</string>
@@ -604,4 +600,8 @@
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> সেকেন্ড"</string>
     <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> মিনিট <xliff:g id="SECONDS">%s</xliff:g> সেকেন্ড"</string>
     <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> ঘণ্টা <xliff:g id="MINUTES_1">%s</xliff:g> মিনিট <xliff:g id="SECONDS">%s</xliff:g> সেকেন্ড"</string>
+    <!-- no translation found for dynamic_shortcut_disabled_message (249939425761315252) -->
+    <skip />
+    <!-- no translation found for dynamic_shortcut_contact_removed_message (6845645831837615899) -->
+    <skip />
 </resources>
diff --git a/res/values-bs-rBA-sw600dp/strings.xml b/res/values-bs-rBA-sw600dp/strings.xml
new file mode 100644
index 0000000..6b0ac29
--- /dev/null
+++ b/res/values-bs-rBA-sw600dp/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  ~ Copyright (C) 2012 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
+   -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="account_phone" msgid="347665663520819575">"Uređaj"</string>
+    <string name="composer_has_no_exportable_contact" msgid="5998889616701036804">"Nema kontakata koji se mogu izvoziti. Ako imate kontakte na tabletu, neki dobavljači podataka možda ne dozvoljavaju izvoz kontakata s tableta."</string>
+</resources>
diff --git a/res/values-bs-rBA/strings.xml b/res/values-bs-rBA/strings.xml
index 67f5166..8c32e69 100644
--- a/res/values-bs-rBA/strings.xml
+++ b/res/values-bs-rBA/strings.xml
@@ -17,9 +17,6 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="applicationLabel" msgid="3906689777043645443">"Kontakti"</string>
-    <string name="launcherActivityLabel" msgid="6497230399032392417">"Kontakti"</string>
-    <string name="quickContactActivityLabel" msgid="7985456650689347268">"Prikaži kontakt"</string>
-    <string name="editContactActivityLabel" msgid="1129944572070802839">"Uredi kontakt"</string>
     <string name="contactsList" msgid="8661624236494819731">"Kontakti"</string>
     <string name="shortcutContact" msgid="749243779392912958">"Kontakt"</string>
     <string name="shortcutDialContact" msgid="746622101599186779">"Direktno biranje"</string>
@@ -31,12 +28,7 @@
     <string name="contactPickerActivityTitle" msgid="4301062192337417640">"Izaberi kontakt"</string>
     <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Odaberi"</string>
     <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Napravi novi kontakt"</string>
-    <string name="starredList" msgid="4817256136413959463">"Označeno zvijezdom"</string>
-    <string name="frequentList" msgid="7154768136473953056">"Često kontaktirani"</string>
-    <string name="strequentList" msgid="5640192862059373511">"Favoriti"</string>
     <string name="viewContactTitle" msgid="7989394521836644384">"Detalji o kontaktu"</string>
-    <string name="editContactDescription" msgid="2947202828256214947">"Uredi kontakt"</string>
-    <string name="insertContactDescription" msgid="4709878105452681987">"Napravi kontakt"</string>
     <string name="contactDetailAbout" msgid="5430408883907061400">"O kontaktu"</string>
     <string name="contactDetailUpdates" msgid="3780588624763446941">"Ažuriranja"</string>
     <string name="searchHint" msgid="8482945356247760701">"Traži kontakte"</string>
@@ -52,7 +44,7 @@
     <string name="menu_call" msgid="3992595586042260618">"Pozovi kontakt"</string>
     <string name="menu_sendSMS" msgid="5535886767547006515">"Pošalji tekstualnu poruku kontaktu"</string>
     <string name="menu_splitAggregate" msgid="2627252205317945563">"Razdvoji"</string>
-    <string name="menu_editGroup" msgid="5062005185370983720">"Uredi"</string>
+    <string name="menu_editGroup" msgid="6696843438454341063">"Ukloni kontakte"</string>
     <string name="menu_renameGroup" msgid="7169512355179757182">"Preimenuj oznaku"</string>
     <string name="menu_deleteGroup" msgid="1126469629233412249">"Izbriši oznaku"</string>
     <string name="menu_addToGroup" msgid="3267409983764370041">"Dodaj kontakt"</string>
@@ -75,15 +67,21 @@
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Predloženi kontakti"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Svi kontakti"</string>
     <string name="contactsJoinedMessage" msgid="3343535986195643136">"Kontakti su povezani"</string>
+    <string name="contact_deleted_named_toast" msgid="6558941164987421174">"Kontakt <xliff:g id="NAME">%s</xliff:g> je izbrisan"</string>
     <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
       <item quantity="one">Kontakti su izbrisani</item>
       <item quantity="few">Kontakti su izbrisani</item>
       <item quantity="other">Kontakti su izbrisani</item>
     </plurals>
-    <plurals name="contacts_count" formatted="false" msgid="3287407967505649458">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> kontakt</item>
-      <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> kontakta</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> kontakata</item>
+    <plurals name="contacts_count" formatted="false" msgid="8696793457340503668">
+      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> kontakt</item>
+      <item quantity="few"><xliff:g id="COUNT_1">%d</xliff:g> kontakta</item>
+      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> kontakata</item>
+    </plurals>
+    <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
+      <item quantity="one"><xliff:g id="COUNT_2">%d</xliff:g> kontakt · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
+      <item quantity="few"><xliff:g id="COUNT_2">%d</xliff:g> kontakta · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
+      <item quantity="other"><xliff:g id="COUNT_2">%d</xliff:g> kontakata · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
     </plurals>
     <string name="title_from_google" msgid="4664084747121207202">"Sa Googlea"</string>
     <string name="title_from_other_accounts" msgid="8307885412426754288">"Sa računa <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
@@ -111,17 +109,19 @@
     <string name="customLabelPickerTitle" msgid="1081475101983255212">"Prilagođeni naziv oznake"</string>
     <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Pošalji pozive direktno na govornu poštu"</string>
     <string name="removePhoto" msgid="4898105274130284565">"Ukloni fotografiju"</string>
-    <string name="noContacts" msgid="4955659076981974652">"Nema kontakata"</string>
+    <string name="noContacts" msgid="2228592924476426108">"Spisak kontakata je prazan"</string>
     <string name="noGroups" msgid="4607906327968232225">"Nema oznaka."</string>
     <string name="noAccounts" msgid="7768267764545265909">"Potreban vam je račun da napravite grupe."</string>
     <string name="emptyGroup" msgid="5102411903247859575">"Nema kontakata s ovom oznakom"</string>
+    <string name="emptyAccount" msgid="6873962901497975964">"Nema kontakata na ovom računu"</string>
+    <string name="emptyMainList" msgid="2772242747899664460">"Spisak kontakata je prazan"</string>
     <string name="contactSavedToast" msgid="9171862279493213075">"Kontakt je sačuvan"</string>
     <string name="contactUnlinkedToast" msgid="7122823195786012553">"Kontakti su razdvojeni"</string>
-    <string name="contactSavedErrorToast" msgid="3207250533172944892">"Nije moguće sačuvati promjene kontakta."</string>
-    <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Nije moguće razdvojiti kontakt."</string>
-    <string name="contactJoinErrorToast" msgid="3977932531264809035">"Nije moguće povezati kontakt."</string>
-    <string name="contactGenericErrorToast" msgid="7774911165341591714">"Greška prilikom čuvanja kontakta."</string>
-    <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"Nije moguće sačuvati promjene fotografije kontakta."</string>
+    <string name="contactSavedErrorToast" msgid="4827033473908688031">"Nije moguće sačuvati promjene kontakta"</string>
+    <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"Nije moguće razdvojiti kontakt"</string>
+    <string name="contactJoinErrorToast" msgid="5735129234573327701">"Nije moguće povezati kontakt"</string>
+    <string name="contactGenericErrorToast" msgid="3885457515665783976">"Greška prilikom spremanja kontakta"</string>
+    <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Nije moguće sačuvati promjene fotografije kontakta"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"Učitavanje oznake nije uspjelo"</string>
     <string name="groupSavedToast" msgid="6491495462357722285">"Oznaka je sačuvana"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Oznaka je izbrisana"</string>
@@ -130,7 +130,8 @@
     <string name="groupUpdatedToast" msgid="3667977658676267687">"Oznaka je ažurirana"</string>
     <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Uklonjeno iz oznake"</string>
     <string name="groupMembersAddedToast" msgid="4824834898718972768">"Dodano oznaci"</string>
-    <string name="groupSavedErrorToast" msgid="8121032018490980184">"Nije moguće sačuvati promjene oznake."</string>
+    <string name="groupSavedErrorToast" msgid="2355891714292740162">"Nije moguće sačuvati promjene oznake"</string>
+    <string name="groupExistsErrorMessage" msgid="5196811283836946189">"Ta oznaka već postoji"</string>
     <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
       <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> kontakt s brojem telefona</item>
       <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> kontakta s brojevima telefona</item>
@@ -153,7 +154,6 @@
     <string name="callAgain" msgid="3197312117049874778">"Pozovi ponovo"</string>
     <string name="returnCall" msgid="8171961914203617813">"Uzvrati poziv"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Dodati \"<xliff:g id="EMAIL">%s</xliff:g>\" u kontakte?"</string>
-    <string name="description_contact_photo" msgid="3387458082667894062">"fotografija kontakta"</string>
     <string name="description_plus_button" msgid="515164827856229880">"plus"</string>
     <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> od <xliff:g id="TOTAL_NUMBER">%s</xliff:g> kontakata"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"Imena kontakata"</string>
@@ -199,7 +199,6 @@
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Datum"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Oznaka"</string>
     <string name="change_photo" msgid="8530597935483526383">"Promijeni"</string>
-    <string name="primary_photo" msgid="8517942231868516999">"Primarna fotografija"</string>
     <string name="description_star" msgid="2605854427360036550">"favorit"</string>
     <string name="edit_contact" msgid="7529281274005689512">"Uredi kontakt"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"zatvori"</string>
@@ -223,8 +222,7 @@
     <string name="social_widget_loading" msgid="5327336597364074608">"Učitavanje…"</string>
     <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Napravi novi kontakt"</string>
     <string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Dodaj račun"</string>
-    <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Uvezi kontakte"</string>
-    <string name="create_group_dialog_title" msgid="5363404287877384473">"Napravi novu oznaku"</string>
+    <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"Uvezi"</string>
     <string name="create_group_item_label" msgid="3263064599743742865">"Napravi novu…"</string>
     <string name="delete_group_dialog_message" msgid="335713829185261371">"Izbrisati oznaku \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\"? (Kontakti neće biti izbrisani.)"</string>
     <string name="toast_join_with_empty_contact" msgid="1215465657839085613">"Upišite ime kontakta prije povezivanja s drugim kontaktom."</string>
@@ -232,36 +230,33 @@
     <string name="set_default" msgid="4417505153468300351">"Postavi zadano"</string>
     <string name="clear_default" msgid="7193185801596678067">"Obriši zadano"</string>
     <string name="toast_text_copied" msgid="5143776250008541719">"Tekst je kopiran"</string>
-    <string name="cancel_confirmation_dialog_message" msgid="5058226498605989285">"Želite li odbaciti napravljene promjene i prekinuti uređivanje?"</string>
+    <string name="cancel_confirmation_dialog_message" msgid="9008214737653278989">"Odbaciti promjene?"</string>
     <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Odbaci"</string>
-    <string name="cancel_confirmation_dialog_keep_editing_button" msgid="7737724111972855348">"Nastavi uređivanje"</string>
+    <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Otkaži"</string>
+    <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Odbaciti prilagođavanja?"</string>
     <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
     <string name="enter_contact_name" msgid="4594274696120278368">"Traži kontakte"</string>
-    <!-- no translation found for title_edit_group (1889302367574226969) -->
-    <skip />
+    <string name="title_edit_group" msgid="8602752287270586734">"Ukloni kontakte"</string>
     <string name="local_profile_title" msgid="2021416826991393684">"Moj lokalni profil"</string>
     <string name="external_profile_title" msgid="8034998767621359438">"Moj profil <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g>"</string>
     <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Prikazuju se svi kontakti"</string>
     <string name="generic_no_account_prompt" msgid="7218827704367325460">"Očuvajte sigurnost svojih kontakata čak i ako izgubite telefon: sinhronizirajte ih s mrežnom uslugom."</string>
     <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Dodajte račun"</string>
-    <string name="contact_editor_prompt_zero_accounts" msgid="1785345895691886499">"Neće biti napravljena sigurnosna kopija novog računa. Dodati račun za pravljenje sigurnosnih kopija kontakata na mreži?"</string>
+    <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Odvojite trenutak da dodate račun putem kojeg će se kontakti sigurnosno kopirati na Google."</string>
     <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Novi kontakti će biti sačuvani na račun <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
     <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Izaberite zadani račun za nove kontakte:"</string>
     <string name="contact_editor_title_new_contact" msgid="7192223018128934940">"Dodaj novi kontakt"</string>
     <string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"Uredi kontakt"</string>
-    <string name="keep_local" msgid="1258761699192993322">"Zadrži na uređaju"</string>
     <string name="add_account" msgid="8201790677994503186">"Dodajte račun"</string>
     <string name="add_new_account" msgid="5748627740680940264">"Dodaj novi račun"</string>
     <string name="menu_export_database" msgid="2659719297530170820">"Izvezi fajlove baze podataka"</string>
     <string name="action_menu_add_new_contact_button" msgid="3180222523336380017">"dodaj novi kontakt"</string>
     <string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"Pogledaj više"</string>
     <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Vidi manje"</string>
-    <string name="expanding_entry_card_view_see_all" msgid="3845258737661412627">"Pogledaj sve"</string>
     <string name="recent_card_title" msgid="8982782042698001695">"Nedavno"</string>
     <string name="about_card_title" msgid="2920942314212825637">"O kontaktu"</string>
     <string name="send_message" msgid="8938418965550543196">"Pošalji poruku"</string>
     <string name="toast_making_personal_copy" msgid="288549957278065542">"Izrađivanje lične kopije u toku…"</string>
-    <string name="yesterday" msgid="6840858548955018569">"Jučer"</string>
     <string name="tomorrow" msgid="6241969467795308581">"Sutra"</string>
     <string name="today" msgid="8041090779381781781">"Danas"</string>
     <string name="today_at_time_fmt" msgid="605665249491030460">"Danas u <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
@@ -280,7 +275,6 @@
     <string name="header_name_entry" msgid="1592791008096288306">"Ime"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"E-pošta"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"Telefon"</string>
-    <string name="header_photo_entry" msgid="4438023151411853238">"Fotografija"</string>
     <string name="content_description_expand_editor" msgid="1111381475901897470">"Kliknite da proširite uređivač kontakata."</string>
     <string name="content_description_collapse_editor" msgid="7598061318022977825">"Kliknite da skupite uređivač kontakata."</string>
     <string name="content_description_directions" msgid="2686791825798189335">"smjernice do lokacije"</string>
@@ -295,6 +289,8 @@
     <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Promijeni fotografiju"</string>
     <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Otvaranje uređivača nije uspjelo."</string>
     <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Sačuvati na"</string>
+    <!-- no translation found for compact_editor_account_selector_read_only_title (1869435992721760221) -->
+    <skip />
     <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"Trenutno se sprema na račun <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Dodirnite dvaput da izaberete drugi račun."</string>
     <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
       <item quantity="one">Povezani kontakti (<xliff:g id="COUNT">%d</xliff:g>)</item>
@@ -346,4 +342,278 @@
     <string name="permission_explanation_subheader_calendar_and_SMS" msgid="630115334220569184">"Događaji i poruke"</string>
     <string name="permission_explanation_subheader_calendar" msgid="8785323496211704613">"Događaji"</string>
     <string name="permission_explanation_subheader_SMS" msgid="1904552086449525567">"Poruke"</string>
+    <string name="hamburger_feature_highlight_header" msgid="7442308698936786415">"Organizirajte spisak"</string>
+    <string name="hamburger_feature_highlight_body" msgid="6268711111318172098">"Uklonite duplikate i grupirajte kontakte prema oznaci"</string>
+    <string name="undo" msgid="1425165101664071422">"Opozovi radnju"</string>
+    <string name="call_custom" msgid="6385303130912713318">"Pozovi <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+    <string name="call_home" msgid="1990519474420545392">"Pozovi kuću"</string>
+    <string name="call_mobile" msgid="7502236805487609178">"Pozovi mobitel"</string>
+    <string name="call_work" msgid="5328785911463744028">"Pozovi posao"</string>
+    <string name="call_fax_work" msgid="7467763592359059243">"Pozovi poslovni faks"</string>
+    <string name="call_fax_home" msgid="8342175628887571876">"Pozovi kućni faks"</string>
+    <string name="call_pager" msgid="9003902812293983281">"Pozovi pejdžer"</string>
+    <string name="call_other" msgid="8563753966926932052">"Pozovi"</string>
+    <string name="call_callback" msgid="1910165691349426858">"Pozovi broj za uzvraćanje poziva"</string>
+    <string name="call_car" msgid="3280537320306436445">"Pozovi automobil"</string>
+    <string name="call_company_main" msgid="6105120947138711257">"Pozovi glavni broj kompanije"</string>
+    <string name="call_isdn" msgid="1541590690193403411">"Pozovi ISDN"</string>
+    <string name="call_main" msgid="6082900571803441339">"Pozovi glavni broj"</string>
+    <string name="call_other_fax" msgid="5745314124619636674">"Pozovi faks"</string>
+    <string name="call_radio" msgid="8296755876398357063">"Pozovi radio"</string>
+    <string name="call_telex" msgid="2223170774548648114">"Pozovi teleks"</string>
+    <string name="call_tty_tdd" msgid="8951266948204379604">"Pozovi TTY/TDD"</string>
+    <string name="call_work_mobile" msgid="8707874281430105394">"Pozovi poslovni mobitel"</string>
+    <string name="call_work_pager" msgid="3419348514157949008">"Pozovi poslovni pejdžer"</string>
+    <string name="call_assistant" msgid="670941612175068337">"Pozovi <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+    <string name="call_mms" msgid="6274041545876221437">"Pozovi MMS"</string>
+    <string name="call_by_shortcut" msgid="2566802538698913124">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (Poziv)"</string>
+    <string name="sms_custom" msgid="415060214233647603">"Pošalji poruku na <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+    <string name="sms_home" msgid="7524332261493162995">"Pošalji tekstualnu poruku na kućni broj"</string>
+    <string name="sms_mobile" msgid="5200107250451030769">"Pošalji tekstualnu poruku na mobilni"</string>
+    <string name="sms_work" msgid="2269624156655267740">"Pošalji tekstualnu poruku na poslovni broj"</string>
+    <string name="sms_fax_work" msgid="8028189067816907075">"Pošalji tekstualnu poruku na poslovni faks"</string>
+    <string name="sms_fax_home" msgid="9204042076306809634">"Pošalji tekstualnu poruku na kućni faks"</string>
+    <string name="sms_pager" msgid="7730404569637015192">"Pošalji tekstualnu poruku na pejdžer"</string>
+    <string name="sms_other" msgid="806127844607642331">"Tekst"</string>
+    <string name="sms_callback" msgid="5004824430094288752">"Pošalji tekstualnu poruku na broj za povratni poziv"</string>
+    <string name="sms_car" msgid="7444227058437359641">"Pošalji tekstualnu poruku na automobil"</string>
+    <string name="sms_company_main" msgid="118970873419678087">"Pošalji tekstualnu poruku na glavni broj kompanije"</string>
+    <string name="sms_isdn" msgid="8153785037515047845">"Pošalji tekstualnu poruku na ISDN"</string>
+    <string name="sms_main" msgid="8621625784504541679">"Pošalji tekstualnu poruku na glavni broj"</string>
+    <string name="sms_other_fax" msgid="3888842199855843152">"Pošalji tekstualnu poruku na faks"</string>
+    <string name="sms_radio" msgid="3329166673433967820">"Pošalji tekstualnu poruku na radio"</string>
+    <string name="sms_telex" msgid="9034802430065267848">"Pošalji tekstualnu poruku na teleks"</string>
+    <string name="sms_tty_tdd" msgid="6782284969132531532">"Pošalji tekstualnu poruku na TTY/TDD"</string>
+    <string name="sms_work_mobile" msgid="2459939960512702560">"Pošalji tekstualnu poruku na poslovni mobitel"</string>
+    <string name="sms_work_pager" msgid="5566924423316960597">"Pošalji tekstualnu poruku na poslovni pejdžer"</string>
+    <string name="sms_assistant" msgid="2773424339923116234">"Pošalji tekstualnu poruku <xliff:g id="ASSISTANT">%s</xliff:g>"</string>
+    <string name="sms_mms" msgid="4069352461380762677">"Pošalji tekstualnu poruku na MMS broj"</string>
+    <string name="sms_by_shortcut" msgid="7741770672976099517">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (Poruka)"</string>
+    <string name="description_video_call" msgid="7120921378651700947">"Uputi videopoziv"</string>
+    <string name="clearFrequentsConfirmation_title" msgid="766292372438450432">"Obrisati često kontaktirane osobe?"</string>
+    <string name="clearFrequentsConfirmation" msgid="2270554975938265734">"Obrisat ćete listu često kontaktiranih osoba u aplikaciji Kontakti i Aplikaciji za telefon, pa će aplikacije za e-poštu morati ispočetka učiti vaše postavke adresa."</string>
+    <string name="clearFrequentsProgress_title" msgid="5157001637482794212">"Brisanje često kontaktiranih osoba…"</string>
+    <string name="status_available" msgid="5586870015822828392">"Dostupno"</string>
+    <string name="status_away" msgid="1838861100379804730">"Odsutan"</string>
+    <string name="status_busy" msgid="9147992455450257136">"Zauzeto"</string>
+    <string name="local_invisible_directory" msgid="6046691709127661065">"Ostali"</string>
+    <string name="directory_search_label" msgid="1887759056597975053">"Direktorij"</string>
+    <string name="directory_search_label_work" msgid="8618292129829443176">"Poslovni imenik"</string>
+    <string name="local_search_label" msgid="2551177578246113614">"Svi kontakti"</string>
+    <string name="foundTooManyContacts" msgid="5163335650920020220">"Pronađeno je više od <xliff:g id="COUNT">%d</xliff:g>."</string>
+    <string name="description_quick_contact_for" msgid="6737516415168327789">"Brzi kontakt za <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="missing_name" msgid="8745511583852904385">"(Bez imena)"</string>
+    <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Često kontaktirani"</string>
+    <string name="description_view_contact_detail" msgid="9133251213656414807">"Prikaži kontakt"</string>
+    <string name="list_filter_phones" msgid="735313795643493365">"Svi kontakti s brojevima telefona"</string>
+    <string name="list_filter_phones_work" msgid="1470173699551475015">"Kontakti radnog profila"</string>
+    <string name="view_updates_from_group" msgid="1782685984905600034">"Prikaži ažuriranja"</string>
+    <string name="account_phone" msgid="7128032778471187553">"Uređaj"</string>
+    <string name="account_sim" msgid="6519016427905087952">"SIM"</string>
+    <string name="nameLabelsGroup" msgid="2034640839640477827">"Ime"</string>
+    <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Nadimak"</string>
+    <string name="full_name" msgid="6602579550613988977">"Ime"</string>
+    <string name="name_given" msgid="4280790853455320619">"Ime"</string>
+    <string name="name_family" msgid="7466985689626017037">"Prezime"</string>
+    <string name="name_prefix" msgid="59756378548779822">"Prefiks imena"</string>
+    <string name="name_middle" msgid="8467433655992690326">"Srednje ime"</string>
+    <string name="name_suffix" msgid="3855278445375651441">"Sufiks imena"</string>
+    <string name="name_phonetic" msgid="4259595234312430484">"Fonetsko ime"</string>
+    <string name="name_phonetic_given" msgid="8723179018384187631">"Fonetsko ime"</string>
+    <string name="name_phonetic_middle" msgid="8643721493320405200">"Fonetsko srednje ime"</string>
+    <string name="name_phonetic_family" msgid="2640133663656011626">"Fonetsko prezime"</string>
+    <string name="phoneLabelsGroup" msgid="6468091477851199285">"Telefoniraj"</string>
+    <string name="emailLabelsGroup" msgid="8389931313045344406">"E-pošta"</string>
+    <string name="postalLabelsGroup" msgid="3487738141112589324">"Adresa"</string>
+    <string name="imLabelsGroup" msgid="3898238486262614027">"IM"</string>
+    <string name="organizationLabelsGroup" msgid="2478611760751832035">"Organizacija"</string>
+    <string name="relationLabelsGroup" msgid="1854373894284572781">"Odnos"</string>
+    <string name="eventLabelsGroup" msgid="7960408705307831289">"Posebni datum"</string>
+    <string name="sms" msgid="1756857139634224222">"Tekstualna poruka"</string>
+    <string name="postal_address" msgid="8765560217149624536">"Adresa"</string>
+    <string name="ghostData_company" msgid="5414421120553765775">"Kompanija"</string>
+    <string name="ghostData_title" msgid="7496735200318496110">"Naslov"</string>
+    <string name="label_notes" msgid="8337354953278341042">"Bilješke"</string>
+    <string name="label_custom_field" msgid="1994056912242214426">"Prilagođeno"</string>
+    <string name="label_sip_address" msgid="7252153678613978127">"SIP"</string>
+    <string name="websiteLabelsGroup" msgid="4202998982804009261">"Web stranica"</string>
+    <string name="groupsLabel" msgid="7000816729542098972">"Oznake"</string>
+    <string name="email_home" msgid="8573740658148184279">"Pošalji poruku e-pošte na kućnu adresu e-pošte"</string>
+    <string name="email_mobile" msgid="2042889209787989814">"Mobilna e-pošta"</string>
+    <string name="email_work" msgid="2807430017302722689">"Pošalji poruku e-pošte na poslovnu adresu e-pošte"</string>
+    <string name="email_other" msgid="3454004077967657109">"E-pošta"</string>
+    <string name="email_custom" msgid="5536404237099078802">"Pošalji poruku e-pošte na <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+    <string name="email" msgid="5668400997660065897">"E-pošta"</string>
+    <string name="postal_street" msgid="8133143961580058972">"Ulica"</string>
+    <string name="postal_pobox" msgid="4431938829180269821">"Poštanski pretinac"</string>
+    <string name="postal_neighborhood" msgid="1450783874558956739">"Naselje"</string>
+    <string name="postal_city" msgid="6597491300084895548">"Grad"</string>
+    <string name="postal_region" msgid="6045263193478437672">"Država"</string>
+    <string name="postal_postcode" msgid="572136414136673751">"Poštanski broj"</string>
+    <string name="postal_country" msgid="7638264508416368690">"Država"</string>
+    <string name="map_home" msgid="1243547733423343982">"Prikaži kućnu adresu"</string>
+    <string name="map_work" msgid="1360474076921878088">"Prikaži poslovnu adresu"</string>
+    <string name="map_other" msgid="3817820803587012641">"Prikaži adresu"</string>
+    <string name="map_custom" msgid="8761800628069473526">"Prikaži <xliff:g id="CUSTOM_LABEL">%s</xliff:g> adresu"</string>
+    <string name="chat_aim" msgid="2588492205291249142">"Ćaskanje putem aplikacije AIM"</string>
+    <string name="chat_msn" msgid="8041633440091073484">"Ćaskanje putem aplikacije Windows Live"</string>
+    <string name="chat_yahoo" msgid="6629211142719943666">"Ćaskanje putem aplikacije Yahoo"</string>
+    <string name="chat_skype" msgid="1210045020427480566">"Ćaskanje putem aplikacije Skype"</string>
+    <string name="chat_qq" msgid="4294637812847719693">"Ćaskanje putem aplikacije QQ"</string>
+    <string name="chat_gtalk" msgid="981575737258117697">"Ćaskanje putem aplikacije Google Talk"</string>
+    <string name="chat_icq" msgid="8438405386153745775">"Ćaskanje putem aplikacije ICQ"</string>
+    <string name="chat_jabber" msgid="7561444230307829609">"Ćaskanje putem aplikacije Jabber"</string>
+    <string name="chat" msgid="9025361898797412245">"Ćaskanje"</string>
+    <string name="description_minus_button" msgid="6908099247930477551">"izbriši"</string>
+    <string name="expand_name_fields_description" msgid="6883935911480726652">"Proširi polja za imena"</string>
+    <string name="collapse_name_fields_description" msgid="4757877385895561556">"Skupi polja za imena"</string>
+    <string name="expand_phonetic_name_fields_description" msgid="3865726859582581741">"Proširi polja za fonetska imena"</string>
+    <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Skupi polja za fonetska imena"</string>
+    <string name="expand_fields_description" msgid="8129294181216760037">"Proširi"</string>
+    <string name="collapse_fields_description" msgid="1884143625854637874">"Skupi"</string>
+    <string name="announce_expanded_fields" msgid="1075947220478530622">"Prošireno"</string>
+    <string name="announce_collapsed_fields" msgid="6414231530177338704">"Skupljeno"</string>
+    <string name="list_filter_all_accounts" msgid="8908683398914322369">"Svi kontakti"</string>
+    <string name="list_filter_all_starred" msgid="5031734941601931356">"Označeno zvijezdom"</string>
+    <string name="list_filter_customize" msgid="4789963356004169321">"Prilagodi"</string>
+    <string name="list_filter_single" msgid="5871400283515893087">"Kontakt"</string>
+    <string name="display_ungrouped" msgid="6885954210243119591">"Svi drugi kontakti"</string>
+    <string name="display_all_contacts" msgid="2031647544742889505">"Svi kontakti"</string>
+    <string name="menu_sync_remove" msgid="3266725887008450161">"Ukloni grupu za sinhronizaciju"</string>
+    <string name="dialog_sync_add" msgid="8267045393119375803">"Dodaj grupu za sinhronizaciju"</string>
+    <string name="display_more_groups" msgid="2682547080423434170">"Više grupa…"</string>
+    <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"Uklanjanje grupe \"<xliff:g id="GROUP">%s</xliff:g>\" iz sinhronizacije će također ukloniti sve negrupirane kontakte iz sinhronizacije."</string>
+    <string name="savingDisplayGroups" msgid="2133152192716475939">"Čuvanje opcija prikaza u toku…"</string>
+    <string name="menu_done" msgid="796017761764190697">"Gotovo"</string>
+    <string name="menu_doNotSave" msgid="58593876893538465">"Otkaži"</string>
+    <string name="listCustomView" msgid="1840624396582117590">"Prilagođeni prikaz"</string>
+    <string name="dialog_new_contact_account" msgid="4969619718062454756">"Sačuvaj uvezene kontakte na karticu:"</string>
+    <string name="import_from_sim" msgid="3859272228033941659">"Uvezi sa SIM kartice"</string>
+    <string name="import_from_sim_summary" msgid="5815105584445743740">"Uvezi sa SIM kartice <xliff:g id="SIM_NAME">^1</xliff:g> - <xliff:g id="SIM_NUMBER">^2</xliff:g>"</string>
+    <string name="import_from_sim_summary_no_number" msgid="880612418352086012">"Uvezi sa SIM kartice <xliff:g id="SIM_NAME">%1$s</xliff:g>"</string>
+    <string name="import_from_vcf_file" product="default" msgid="5304572242183878086">"Uvezi iz .vcf fajla"</string>
+    <string name="cancel_import_confirmation_message" msgid="3929951040347726757">"Otkazati uvoz fajla <xliff:g id="FILENAME">%s</xliff:g>?"</string>
+    <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Otkazati izvoz fajla <xliff:g id="FILENAME">%s</xliff:g>?"</string>
+    <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Nemoguće otkazati uvoz/izvoz vCard fajla"</string>
+    <string name="fail_reason_unknown" msgid="1714092345030570863">"Nepoznata greška."</string>
+    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Nije moguće otvoriti \"<xliff:g id="FILE_NAME">%s</xliff:g>\": <xliff:g id="EXACT_REASON">%s</xliff:g>."</string>
+    <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"Nije moguće pokrenuti program za izvoz: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
+    <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"Nema sadržaja za izvoz."</string>
+    <string name="missing_required_permission" msgid="5865884842972833120">"Onemogućili ste potrebnu dozvolu."</string>
+    <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"Došlo je do greške prilikom izvoza: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
+    <string name="fail_reason_too_long_filename" msgid="3393764245254738333">"Zahtijevano ime fajla je predugo (\"<xliff:g id="FILENAME">%s</xliff:g>\")."</string>
+    <string name="fail_reason_io_error" msgid="6748358842976073255">"I/O greška"</string>
+    <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Nema dovoljno memorije. Možda je fajl prevelik."</string>
+    <string name="fail_reason_vcard_parse_error" msgid="888263542360355784">"Nije moguće raščlaniti vCard fajl iz neočekivanog razloga."</string>
+    <string name="fail_reason_not_supported" msgid="8219562769267148825">"Format nije podržan."</string>
+    <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="6427931733267328564">"Nije moguće otvoriti metapodatke vCard fajl(ov)a."</string>
+    <string name="fail_reason_failed_to_read_files" msgid="5823434810622484922">"Nije moguće uvesti jedan ili više fajlova (%s)."</string>
+    <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"Izvoz fajla <xliff:g id="FILENAME">%s</xliff:g> je završen."</string>
+    <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"Izvoz kontakata je završen."</string>
+    <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"Izvoz kontakata je završen. Kliknite obavještenje da podijelite kontakte."</string>
+    <string name="touch_to_share_contacts" msgid="4882485525268469736">"Dodirnite da podijelite kontakte."</string>
+    <string name="exporting_vcard_canceled_title" msgid="2652222370493306887">"Izvoz fajla <xliff:g id="FILENAME">%s</xliff:g> je otkazan."</string>
+    <string name="exporting_contact_list_title" msgid="9072240631534457415">"Izvoz podataka kontakta u toku"</string>
+    <string name="exporting_contact_list_message" msgid="3367949209642931952">"Podaci kontakta se izvoze."</string>
+    <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"Nije moguće preuzeti informacije iz baze podataka."</string>
+    <string name="composer_has_no_exportable_contact" msgid="3296493229040294335">"Nema kontakata koji se mogu izvoziti. Ako imate kontakte na telefonu, neki dobavljači podataka možda ne dozvoljavaju izvoz kontakata s telefona."</string>
+    <string name="composer_not_initialized" msgid="2321648986367005254">"Program za izradu kartica vCard nije pravilno pokrenut."</string>
+    <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Izvoz nije uspio"</string>
+    <string name="exporting_contact_failed_message" msgid="4938527850142003141">"Podaci kontakta nisu izvezeni.\nRazlog: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
+    <string name="importing_vcard_description" msgid="4245275224298571351">"Uvozi se kontakt <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="reading_vcard_failed_title" msgid="4251647443358422855">"Čitanje podataka vCard nije uspjelo"</string>
+    <string name="reading_vcard_canceled_title" msgid="1925216585981542019">"Čitanje vCard podataka je otkazano"</string>
+    <string name="importing_vcard_finished_title" msgid="3341541727268747967">"Završen uvoz vCard fajla <xliff:g id="FILENAME">%s</xliff:g>"</string>
+    <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"Uvoz fajla <xliff:g id="FILENAME">%s</xliff:g> je otkazan"</string>
+    <string name="vcard_import_will_start_message" msgid="2804911199145873396">"Fajl <xliff:g id="FILENAME">%s</xliff:g> će uskoro biti uvezen."</string>
+    <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"Fajl će uskoro biti uvezen."</string>
+    <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"Zahtjev za uvoz vCard fajla je odbijen. Pokušajte ponovo kasnije."</string>
+    <string name="vcard_export_will_start_message" msgid="2210241345252081463">"Fajl <xliff:g id="FILENAME">%s</xliff:g> će uskoro biti izvezen."</string>
+    <string name="vcard_export_will_start_message_fallback" msgid="6553826997490909749">"Fajl će uskoro biti izvezen."</string>
+    <string name="contacts_export_will_start_message" msgid="8538705791417534431">"Kontakti će uskoro biti izvezeni."</string>
+    <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"Zahtjev za izvoz vCard fajla je odbijen. Pokušajte ponovo kasnije."</string>
+    <string name="vcard_unknown_filename" msgid="7171709890959915954">"kontakt"</string>
+    <string name="caching_vcard_message" msgid="4926308675041506756">"Spremanje vCard fajlova u lokalnu privremenu pohranu. Uvoz će započeti uskoro."</string>
+    <string name="vcard_import_failed" msgid="5223531255894842406">"Uvoz vCard kartice nije uspio."</string>
+    <string name="nfc_vcard_file_name" msgid="2823095213265993609">"Kontakt NFC-om"</string>
+    <string name="confirm_export_title" msgid="6834385377255286349">"Izvesti kontakte?"</string>
+    <string name="caching_vcard_title" msgid="1226272312940516605">"Spremanje u privremenu pohranu u toku"</string>
+    <string name="progress_notifier_message" msgid="2311011466908220528">"Uvozi se <xliff:g id="CURRENT_NUMBER">%s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%s</xliff:g>: <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="export_to_vcf_file" product="default" msgid="4407527157056120858">"Izvezi u .vcf fajl"</string>
+    <string name="display_options_sort_list_by" msgid="7028809117272018712">"Poredaj po"</string>
+    <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"Ime"</string>
+    <string name="display_options_sort_by_family_name" msgid="2684905041926954793">"Prezime"</string>
+    <string name="display_options_view_names_as" msgid="6514632499276563482">"Format imena"</string>
+    <string name="display_options_view_given_name_first" msgid="3616004640258761473">"Ime prvo"</string>
+    <string name="display_options_view_family_name_first" msgid="956445100777296467">"Prezime prvo"</string>
+    <string name="settings_accounts" msgid="350219740670774576">"Računi"</string>
+    <string name="default_editor_account" msgid="699591683362420991">"Zadani račun za nove kontakte"</string>
+    <string name="sync_contact_metadata_title" msgid="6957956139306960211">"Sinhroniziraj metapodatke kontakata [DOGFOOD]"</string>
+    <string name="sync_contact_metadata_dialog_title" msgid="6192335951588820553">"Sinhroniziraj metapodatke kontakata"</string>
+    <string name="settings_my_info_title" msgid="1534272456405343119">"Moje informacije"</string>
+    <string name="set_up_profile" msgid="7370213843590143771">"Postavite svoj profil"</string>
+    <string name="setting_about" msgid="7014388749752042863">"O kontaktima"</string>
+    <string name="share_visible_contacts" msgid="890150378880783797">"Podijeli vidljive kontakte"</string>
+    <string name="share_visible_contacts_failure" msgid="7324717548166915560">"Dijeljenje vidljivih kontakata nije uspjelo."</string>
+    <string name="share_favorite_contacts" msgid="4280926751003081042">"Dijeli omiljene kontakte"</string>
+    <string name="share_contacts" msgid="8109287987498711664">"Dijeli sve kontakte"</string>
+    <string name="share_contacts_failure" msgid="1216431977330560559">"Dijeljenje kontakata nije uspjelo."</string>
+    <!-- no translation found for dialog_export (1628001095187741417) -->
+    <skip />
+    <string name="dialog_import" msgid="2431698729761448759">"Uvezi kontakte"</string>
+    <string name="share_error" msgid="948429331673358107">"Ovaj kontakt se ne može podijeliti."</string>
+    <string name="no_contact_to_share" msgid="1276397530378323033">"Nema kontakata za dijeljenje."</string>
+    <string name="menu_search" msgid="9147752853603483719">"Traži"</string>
+    <string name="menu_contacts_filter" msgid="2165153460860262501">"Kontakti za prikaz"</string>
+    <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Kontakti za prikaz"</string>
+    <string name="custom_list_filter" msgid="2105275443109077687">"Definirajte prilagođeni prikaz"</string>
+    <string name="menu_custom_filter_save" msgid="2679793632208086460">"Sačuvaj"</string>
+    <string name="hint_findContacts" msgid="7128627979899070325">"Traži kontakte"</string>
+    <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Favoriti"</string>
+    <string name="listTotalAllContactsZero" msgid="5513001821794568211">"Nema kontakata."</string>
+    <string name="menu_clear_frequents" msgid="7688250191932838833">"Obriši često kontaktirane"</string>
+    <string name="menu_select_sim" msgid="3603578201960504010">"Odaberi SIM karticu"</string>
+    <string name="menu_accounts" msgid="1424330057450189074">"Upravljaj računima"</string>
+    <!-- no translation found for menu_import (6107961135813836467) -->
+    <skip />
+    <!-- no translation found for menu_export (2658783911863503902) -->
+    <skip />
+    <string name="menu_blocked_numbers" msgid="5272951629083025995">"Blokirani brojevi"</string>
+    <string name="contact_status_update_attribution" msgid="752179367353018597">"putem <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
+    <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> putem <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
+    <string name="action_menu_back_from_search" msgid="8793348588949233348">"zaustavi pretraživanje"</string>
+    <string name="description_clear_search" msgid="688023606766232904">"Obriši pretragu"</string>
+    <string name="settings_contact_display_options_title" msgid="4890258244494248687">"Opcije prikaza kontakata"</string>
+    <string name="select_account_dialog_title" msgid="5478489655696599219">"Račun"</string>
+    <string name="set_default_account" msgid="4311613760725609801">"Uvijek koristi ovu karticu za poziv"</string>
+    <string name="select_phone_account_for_calls" msgid="3810607744451014540">"Poziv putem"</string>
+    <string name="call_with_a_note" msgid="8389827628360791676">"Poziv s bilješkom"</string>
+    <string name="call_subject_hint" msgid="3043028982108363572">"Upišite bilješku koja će se poslati uz poziv…"</string>
+    <string name="send_and_call_button" msgid="7740295432834590737">"POŠALJI I POZOVI"</string>
+    <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g> / <xliff:g id="LIMIT">%2$s</xliff:g>"</string>
+    <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
+    <plurals name="tab_title_with_unread_items" formatted="false" msgid="7682024005130747825">
+      <item quantity="one"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> nepročitana stavka. </item>
+      <item quantity="few"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> nepročitana stavka. </item>
+      <item quantity="other"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> nepročitana stavka. </item>
+    </plurals>
+    <string name="about_build_version" msgid="1765533099416999801">"Podverzija"</string>
+    <string name="about_open_source_licenses" msgid="6479990452352919641">"Licence otvorenog koda"</string>
+    <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Detalji o licenci za softver otvorenog koda"</string>
+    <string name="about_privacy_policy" msgid="3705518622499152626">"Pravila o privatnosti"</string>
+    <string name="about_terms_of_service" msgid="4642400812150296723">"Uslovi pružanja usluge"</string>
+    <string name="activity_title_licenses" msgid="5467767062737708066">"Licence otvorenog koda"</string>
+    <string name="url_open_error_toast" msgid="452592089815420457">"Otvaranje URL-a nije uspjelo."</string>
+    <string name="account_filter_view_checked" msgid="6696859503887762213">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> je označen"</string>
+    <string name="account_filter_view_not_checked" msgid="2248684521205038389">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> nije označen"</string>
+    <string name="description_search_video_call" msgid="5841525580339803272">"Uputi videopoziv"</string>
+    <string name="description_delete_contact" msgid="53835657343783663">"Izbriši"</string>
+    <string name="description_no_name_header" msgid="8884991311595943271">"Elipsa"</string>
+    <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> sek."</string>
+    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> min. <xliff:g id="SECONDS">%s</xliff:g> sek."</string>
+    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> h <xliff:g id="MINUTES_1">%s</xliff:g> min. <xliff:g id="SECONDS">%s</xliff:g> sek."</string>
+    <!-- no translation found for dynamic_shortcut_disabled_message (249939425761315252) -->
+    <skip />
+    <!-- no translation found for dynamic_shortcut_contact_removed_message (6845645831837615899) -->
+    <skip />
 </resources>
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
index e2a8d56..b042493 100644
--- a/res/values-ca/strings.xml
+++ b/res/values-ca/strings.xml
@@ -67,6 +67,7 @@
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Contactes suggerits"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Tots els contactes"</string>
     <string name="contactsJoinedMessage" msgid="3343535986195643136">"Contactes enllaçats"</string>
+    <string name="contact_deleted_named_toast" msgid="6558941164987421174">"S\'ha suprimit <xliff:g id="NAME">%s</xliff:g>"</string>
     <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
       <item quantity="other">S\'han suprimit els contactes</item>
       <item quantity="one">S\'ha suprimit el contacte</item>
@@ -113,11 +114,11 @@
     <string name="emptyMainList" msgid="2772242747899664460">"La llista de contactes està buida"</string>
     <string name="contactSavedToast" msgid="9171862279493213075">"S\'ha desat el contacte"</string>
     <string name="contactUnlinkedToast" msgid="7122823195786012553">"Els contactes s\'han desenllaçat"</string>
-    <string name="contactSavedErrorToast" msgid="3207250533172944892">"No s\'han pogut desar els canvis al contacte."</string>
-    <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"No s\'ha pogut desenllaçar el contacte."</string>
-    <string name="contactJoinErrorToast" msgid="3977932531264809035">"No s\'ha pogut enllaçar el contacte."</string>
-    <string name="contactGenericErrorToast" msgid="7774911165341591714">"S\'ha produït un error en desar el contacte."</string>
-    <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"No s\'han pogut desar els canvis de la foto de contacte."</string>
+    <string name="contactSavedErrorToast" msgid="4827033473908688031">"No s\'han pogut desar els canvis al contacte"</string>
+    <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"No s\'ha pogut desenllaçar el contacte"</string>
+    <string name="contactJoinErrorToast" msgid="5735129234573327701">"No s\'ha pogut enllaçar el contacte"</string>
+    <string name="contactGenericErrorToast" msgid="3885457515665783976">"S\'ha produït un error en desar el contacte"</string>
+    <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"No s\'han pogut desar els canvis de la foto de contacte"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"L\'etiqueta no s\'ha pogut carregar"</string>
     <string name="groupSavedToast" msgid="6491495462357722285">"L\'etiqueta s\'ha desat"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"L\'etiqueta s\'ha suprimit"</string>
@@ -126,7 +127,7 @@
     <string name="groupUpdatedToast" msgid="3667977658676267687">"L\'etiqueta s\'ha actualitzat"</string>
     <string name="groupMembersRemovedToast" msgid="3510563559799376603">"S\'han suprimit de l\'etiqueta"</string>
     <string name="groupMembersAddedToast" msgid="4824834898718972768">"S\'ha afegit a l\'etiqueta"</string>
-    <string name="groupSavedErrorToast" msgid="8121032018490980184">"No s\'han pogut desar els canvis fets a l\'etiqueta."</string>
+    <string name="groupSavedErrorToast" msgid="2355891714292740162">"No s\'han pogut desar els canvis fets a l\'etiqueta"</string>
     <string name="groupExistsErrorMessage" msgid="5196811283836946189">"Aquesta etiqueta ja existeix"</string>
     <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
       <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> contactes amb número de telèfon</item>
@@ -147,7 +148,6 @@
     <string name="callAgain" msgid="3197312117049874778">"Torna a trucar"</string>
     <string name="returnCall" msgid="8171961914203617813">"Retorna la trucada"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Voleu afegir \"<xliff:g id="EMAIL">%s</xliff:g>\" als contactes?"</string>
-    <string name="description_contact_photo" msgid="3387458082667894062">"foto del contacte"</string>
     <string name="description_plus_button" msgid="515164827856229880">"més"</string>
     <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> de <xliff:g id="TOTAL_NUMBER">%s</xliff:g> contactes"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"Noms dels contactes"</string>
@@ -192,7 +192,6 @@
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Data"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Etiqueta"</string>
     <string name="change_photo" msgid="8530597935483526383">"Canvia"</string>
-    <string name="primary_photo" msgid="8517942231868516999">"Foto principal"</string>
     <string name="description_star" msgid="2605854427360036550">"preferit"</string>
     <string name="edit_contact" msgid="7529281274005689512">"Edita contacte"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"tanca"</string>
@@ -269,7 +268,6 @@
     <string name="header_name_entry" msgid="1592791008096288306">"Nom"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"Adreça electrònica"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"Telèfon"</string>
-    <string name="header_photo_entry" msgid="4438023151411853238">"Foto"</string>
     <string name="content_description_expand_editor" msgid="1111381475901897470">"Fes clic per desplegar l\'editor de contactes."</string>
     <string name="content_description_collapse_editor" msgid="7598061318022977825">"Fes clic per replegar l\'editor de contactes."</string>
     <string name="content_description_directions" msgid="2686791825798189335">"indicacions cap a la ubicació"</string>
@@ -284,6 +282,8 @@
     <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Canvia la foto"</string>
     <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"No s\'ha pogut obrir l\'editor."</string>
     <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Es desa a"</string>
+    <!-- no translation found for compact_editor_account_selector_read_only_title (1869435992721760221) -->
+    <skip />
     <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"Actualment es desa a <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Fes doble toc per triar un altre compte."</string>
     <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
       <item quantity="other">S\'han enllaçat els contactes (<xliff:g id="COUNT">%d</xliff:g>)</item>
@@ -454,22 +454,14 @@
     <string name="chat_jabber" msgid="7561444230307829609">"Xateja amb Jabber"</string>
     <string name="chat" msgid="9025361898797412245">"Fes un xat"</string>
     <string name="description_minus_button" msgid="6908099247930477551">"suprimeix"</string>
-    <!-- no translation found for expand_name_fields_description (6883935911480726652) -->
-    <skip />
-    <!-- no translation found for collapse_name_fields_description (4757877385895561556) -->
-    <skip />
-    <!-- no translation found for expand_phonetic_name_fields_description (3865726859582581741) -->
-    <skip />
-    <!-- no translation found for collapse_phonetic_name_fields_description (9102249481855019452) -->
-    <skip />
-    <!-- no translation found for expand_fields_description (8129294181216760037) -->
-    <skip />
-    <!-- no translation found for collapse_fields_description (1884143625854637874) -->
-    <skip />
-    <!-- no translation found for announce_expanded_fields (1075947220478530622) -->
-    <skip />
-    <!-- no translation found for announce_collapsed_fields (6414231530177338704) -->
-    <skip />
+    <string name="expand_name_fields_description" msgid="6883935911480726652">"Desplega els camps de nom"</string>
+    <string name="collapse_name_fields_description" msgid="4757877385895561556">"Replega els camps de nom"</string>
+    <string name="expand_phonetic_name_fields_description" msgid="3865726859582581741">"Desplega els camps amb la transcripció fonètica del nom"</string>
+    <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Replega els camps amb la transcripció fonètica del nom"</string>
+    <string name="expand_fields_description" msgid="8129294181216760037">"Desplega"</string>
+    <string name="collapse_fields_description" msgid="1884143625854637874">"Replega"</string>
+    <string name="announce_expanded_fields" msgid="1075947220478530622">"Desplegat"</string>
+    <string name="announce_collapsed_fields" msgid="6414231530177338704">"Replegat"</string>
     <string name="list_filter_all_accounts" msgid="8908683398914322369">"Tots els contactes"</string>
     <string name="list_filter_all_starred" msgid="5031734941601931356">"Destacats"</string>
     <string name="list_filter_customize" msgid="4789963356004169321">"Personalitza"</string>
@@ -555,7 +547,8 @@
     <string name="share_favorite_contacts" msgid="4280926751003081042">"Comparteix els contactes preferits"</string>
     <string name="share_contacts" msgid="8109287987498711664">"Comparteix tots els contactes"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"No s\'han pogut compartir els contactes."</string>
-    <string name="dialog_import_export" msgid="4360648034889921624">"Importa/exporta contactes"</string>
+    <!-- no translation found for dialog_export (1628001095187741417) -->
+    <skip />
     <string name="dialog_import" msgid="2431698729761448759">"Importació de contactes"</string>
     <string name="share_error" msgid="948429331673358107">"No es pot compartir aquest contacte."</string>
     <string name="no_contact_to_share" msgid="1276397530378323033">"No hi ha cap contacte per compartir."</string>
@@ -570,7 +563,10 @@
     <string name="menu_clear_frequents" msgid="7688250191932838833">"Esborra els freqüents"</string>
     <string name="menu_select_sim" msgid="3603578201960504010">"Selecciona una targeta SIM"</string>
     <string name="menu_accounts" msgid="1424330057450189074">"Gestiona els comptes"</string>
-    <string name="menu_import_export" msgid="26217871113229507">"Importa/exporta"</string>
+    <!-- no translation found for menu_import (6107961135813836467) -->
+    <skip />
+    <!-- no translation found for menu_export (2658783911863503902) -->
+    <skip />
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"Números bloquejats"</string>
     <string name="contact_status_update_attribution" msgid="752179367353018597">"mitjançant <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> mitjançant <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
@@ -604,4 +600,8 @@
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> s"</string>
     <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
     <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> hr <xliff:g id="MINUTES_1">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
+    <!-- no translation found for dynamic_shortcut_disabled_message (249939425761315252) -->
+    <skip />
+    <!-- no translation found for dynamic_shortcut_contact_removed_message (6845645831837615899) -->
+    <skip />
 </resources>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index 48b8776..8f98604 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -67,6 +67,7 @@
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Navrhované kontakty"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Všechny kontakty"</string>
     <string name="contactsJoinedMessage" msgid="3343535986195643136">"Kontakty byly propojeny"</string>
+    <string name="contact_deleted_named_toast" msgid="6558941164987421174">"Kontakt <xliff:g id="NAME">%s</xliff:g> byl smazán"</string>
     <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
       <item quantity="few">Kontakty byly smazány</item>
       <item quantity="many">Kontakty byly smazány</item>
@@ -119,11 +120,11 @@
     <string name="emptyMainList" msgid="2772242747899664460">"Váš seznam kontaktů je prázdný"</string>
     <string name="contactSavedToast" msgid="9171862279493213075">"Kontakt uložen"</string>
     <string name="contactUnlinkedToast" msgid="7122823195786012553">"Propojení kontaktů bylo zrušeno"</string>
-    <string name="contactSavedErrorToast" msgid="3207250533172944892">"Změny kontaktů nelze uložit."</string>
-    <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Propojení kontaktu nelze zrušit."</string>
-    <string name="contactJoinErrorToast" msgid="3977932531264809035">"Propojení kontaktu se nezdařilo."</string>
-    <string name="contactGenericErrorToast" msgid="7774911165341591714">"Při ukládání kontaktu došlo k chybě."</string>
-    <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"Změny fotografií kontaktů nelze uložit."</string>
+    <string name="contactSavedErrorToast" msgid="4827033473908688031">"Změny kontaktu se nepodařilo uložit"</string>
+    <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"Propojení kontaktu se nepodařilo zrušit"</string>
+    <string name="contactJoinErrorToast" msgid="5735129234573327701">"Kontakt se nepodařilo propojit"</string>
+    <string name="contactGenericErrorToast" msgid="3885457515665783976">"Kontakt se nepodařilo uložit"</string>
+    <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Změny fotky kontaktu se nepodařilo uložit"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"Štítek se nepodařilo načíst"</string>
     <string name="groupSavedToast" msgid="6491495462357722285">"Štítek byl uložen"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Štítek byl smazán"</string>
@@ -132,7 +133,7 @@
     <string name="groupUpdatedToast" msgid="3667977658676267687">"Štítek byl aktualizován"</string>
     <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Odebráno ze štítku"</string>
     <string name="groupMembersAddedToast" msgid="4824834898718972768">"Přidáno do štítku"</string>
-    <string name="groupSavedErrorToast" msgid="8121032018490980184">"Změny štítku se nepodařilo uložit."</string>
+    <string name="groupSavedErrorToast" msgid="2355891714292740162">"Změny štítku se nepodařilo uložit"</string>
     <string name="groupExistsErrorMessage" msgid="5196811283836946189">"Tento štítek už existuje"</string>
     <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
       <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> kontakty s telefonním číslem</item>
@@ -159,7 +160,6 @@
     <string name="callAgain" msgid="3197312117049874778">"Zavolat znovu"</string>
     <string name="returnCall" msgid="8171961914203617813">"Zpětné volání"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Chcete přidat „<xliff:g id="EMAIL">%s</xliff:g>“ do kontaktů?"</string>
-    <string name="description_contact_photo" msgid="3387458082667894062">"fotografie kontaktu"</string>
     <string name="description_plus_button" msgid="515164827856229880">"plus"</string>
     <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> z <xliff:g id="TOTAL_NUMBER">%s</xliff:g> kontaktů"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"Jména vašich kontaktů"</string>
@@ -206,7 +206,6 @@
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Datum"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Štítek"</string>
     <string name="change_photo" msgid="8530597935483526383">"Změnit"</string>
-    <string name="primary_photo" msgid="8517942231868516999">"Primární fotka"</string>
     <string name="description_star" msgid="2605854427360036550">"oblíbené"</string>
     <string name="edit_contact" msgid="7529281274005689512">"Upravit kontakt"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"zavřít"</string>
@@ -283,7 +282,6 @@
     <string name="header_name_entry" msgid="1592791008096288306">"Jméno"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"E-mail"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"Telefon"</string>
-    <string name="header_photo_entry" msgid="4438023151411853238">"Fotka"</string>
     <string name="content_description_expand_editor" msgid="1111381475901897470">"Kliknutím rozbalíte editor kontaktů."</string>
     <string name="content_description_collapse_editor" msgid="7598061318022977825">"Kliknutím sbalíte editor kontaktů."</string>
     <string name="content_description_directions" msgid="2686791825798189335">"trasy k místům"</string>
@@ -298,6 +296,8 @@
     <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Změnit fotografii"</string>
     <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Editor nelze otevřít."</string>
     <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Uložit do účtu"</string>
+    <!-- no translation found for compact_editor_account_selector_read_only_title (1869435992721760221) -->
+    <skip />
     <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"Momentálně se ukládá do účtu <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Dvojitým klepnutím můžete vybrat jiný účet."</string>
     <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
       <item quantity="few">Propojené kontakty (<xliff:g id="COUNT">%d</xliff:g>)</item>
@@ -476,22 +476,14 @@
     <string name="chat_jabber" msgid="7561444230307829609">"Chatovat pomocí Jabberu"</string>
     <string name="chat" msgid="9025361898797412245">"Chat"</string>
     <string name="description_minus_button" msgid="6908099247930477551">"smazat"</string>
-    <!-- no translation found for expand_name_fields_description (6883935911480726652) -->
-    <skip />
-    <!-- no translation found for collapse_name_fields_description (4757877385895561556) -->
-    <skip />
-    <!-- no translation found for expand_phonetic_name_fields_description (3865726859582581741) -->
-    <skip />
-    <!-- no translation found for collapse_phonetic_name_fields_description (9102249481855019452) -->
-    <skip />
-    <!-- no translation found for expand_fields_description (8129294181216760037) -->
-    <skip />
-    <!-- no translation found for collapse_fields_description (1884143625854637874) -->
-    <skip />
-    <!-- no translation found for announce_expanded_fields (1075947220478530622) -->
-    <skip />
-    <!-- no translation found for announce_collapsed_fields (6414231530177338704) -->
-    <skip />
+    <string name="expand_name_fields_description" msgid="6883935911480726652">"Rozbalit pole na jména"</string>
+    <string name="collapse_name_fields_description" msgid="4757877385895561556">"Sbalit pole na jména"</string>
+    <string name="expand_phonetic_name_fields_description" msgid="3865726859582581741">"Rozbalit pole na fonetický přepis jmen"</string>
+    <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Sbalit pole na fonetický přepis jmen"</string>
+    <string name="expand_fields_description" msgid="8129294181216760037">"Rozbalit"</string>
+    <string name="collapse_fields_description" msgid="1884143625854637874">"Sbalit"</string>
+    <string name="announce_expanded_fields" msgid="1075947220478530622">"Rozbaleno"</string>
+    <string name="announce_collapsed_fields" msgid="6414231530177338704">"Sbaleno"</string>
     <string name="list_filter_all_accounts" msgid="8908683398914322369">"Všechny kontakty"</string>
     <string name="list_filter_all_starred" msgid="5031734941601931356">"Označené hvězdičkou"</string>
     <string name="list_filter_customize" msgid="4789963356004169321">"Přizpůsobit"</string>
@@ -577,7 +569,8 @@
     <string name="share_favorite_contacts" msgid="4280926751003081042">"Sdílet oblíbené kontakty"</string>
     <string name="share_contacts" msgid="8109287987498711664">"Sdílet všechny kontakty"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"Kontakty se nepodařilo sdílet."</string>
-    <string name="dialog_import_export" msgid="4360648034889921624">"Importovat nebo exportovat kontakty"</string>
+    <!-- no translation found for dialog_export (1628001095187741417) -->
+    <skip />
     <string name="dialog_import" msgid="2431698729761448759">"Importovat kontakty"</string>
     <string name="share_error" msgid="948429331673358107">"Tento kontakt nelze sdílet."</string>
     <string name="no_contact_to_share" msgid="1276397530378323033">"Nejsou dostupné žádné kontakty ke sdílení."</string>
@@ -592,7 +585,10 @@
     <string name="menu_clear_frequents" msgid="7688250191932838833">"Vymazat často kontaktované os."</string>
     <string name="menu_select_sim" msgid="3603578201960504010">"Vybrat SIM kartu"</string>
     <string name="menu_accounts" msgid="1424330057450189074">"Spravovat účty"</string>
-    <string name="menu_import_export" msgid="26217871113229507">"Importovat/Exportovat"</string>
+    <!-- no translation found for menu_import (6107961135813836467) -->
+    <skip />
+    <!-- no translation found for menu_export (2658783911863503902) -->
+    <skip />
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"Blokovaná čísla"</string>
     <string name="contact_status_update_attribution" msgid="752179367353018597">"pomocí služby <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> prostřednictvím služby <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
@@ -628,4 +624,8 @@
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> s"</string>
     <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
     <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> h <xliff:g id="MINUTES_1">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
+    <!-- no translation found for dynamic_shortcut_disabled_message (249939425761315252) -->
+    <skip />
+    <!-- no translation found for dynamic_shortcut_contact_removed_message (6845645831837615899) -->
+    <skip />
 </resources>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index 32a406a..6bee23d 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -67,6 +67,7 @@
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Foreslåede kontakter"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Alle kontakter"</string>
     <string name="contactsJoinedMessage" msgid="3343535986195643136">"Kontaktpersonerne er linket"</string>
+    <string name="contact_deleted_named_toast" msgid="6558941164987421174">"<xliff:g id="NAME">%s</xliff:g> blev slettet"</string>
     <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
       <item quantity="one">Kontaktpersonen blev slettet</item>
       <item quantity="other">Kontaktpersonerne blev slettet</item>
@@ -113,11 +114,11 @@
     <string name="emptyMainList" msgid="2772242747899664460">"Din liste over kontaktpersoner er tom"</string>
     <string name="contactSavedToast" msgid="9171862279493213075">"Kontaktpersonen er gemt"</string>
     <string name="contactUnlinkedToast" msgid="7122823195786012553">"Linkningen til kontaktpersonerne er fjernet"</string>
-    <string name="contactSavedErrorToast" msgid="3207250533172944892">"Der kunne ikke gemmes ændringer i kontaktpersoner."</string>
-    <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Linkningen til kontaktpersonen kunne ikke fjernes."</string>
-    <string name="contactJoinErrorToast" msgid="3977932531264809035">"Kontaktpersonen kunne ikke tilknyttes."</string>
-    <string name="contactGenericErrorToast" msgid="7774911165341591714">"Kontaktpersonen kunne ikke gemmes."</string>
-    <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"Det ændrede billede af kontaktpersonen kunne ikke gemmes."</string>
+    <string name="contactSavedErrorToast" msgid="4827033473908688031">"Ændringerne af kontaktpersonen kan ikke gemmes"</string>
+    <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"Tilknytningen til kontaktpersonen kan ikke fjernes"</string>
+    <string name="contactJoinErrorToast" msgid="5735129234573327701">"Kontaktpersonen kan ikke tilknyttes"</string>
+    <string name="contactGenericErrorToast" msgid="3885457515665783976">"Der opstod en fejl, da kontaktpersonen blev gemt"</string>
+    <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Ændringerne af kontaktpersonens billede kan ikke gemmes"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"Etiketten kan ikke indlæses"</string>
     <string name="groupSavedToast" msgid="6491495462357722285">"Etiketten blev gemt"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Etiketten blev slettet"</string>
@@ -126,7 +127,7 @@
     <string name="groupUpdatedToast" msgid="3667977658676267687">"Etiketten blev opdateret"</string>
     <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Fjernet fra etiketten"</string>
     <string name="groupMembersAddedToast" msgid="4824834898718972768">"Føjet til etiket"</string>
-    <string name="groupSavedErrorToast" msgid="8121032018490980184">"Ændringerne af etiketten kan ikke gemmes."</string>
+    <string name="groupSavedErrorToast" msgid="2355891714292740162">"Ændringerne af etiketten kan ikke gemmes"</string>
     <string name="groupExistsErrorMessage" msgid="5196811283836946189">"Etiketten findes allerede"</string>
     <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
       <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> kontaktpersoner med telefonnumre</item>
@@ -147,7 +148,6 @@
     <string name="callAgain" msgid="3197312117049874778">"Ring op igen"</string>
     <string name="returnCall" msgid="8171961914203617813">"Ring tilbage"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Føj \"<xliff:g id="EMAIL">%s</xliff:g>\" til kontaktpersoner?"</string>
-    <string name="description_contact_photo" msgid="3387458082667894062">"kontaktpersonfoto"</string>
     <string name="description_plus_button" msgid="515164827856229880">"plus"</string>
     <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> af <xliff:g id="TOTAL_NUMBER">%s</xliff:g> kontakter"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"Navne på dine kontakter"</string>
@@ -192,7 +192,6 @@
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Dato"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Etiket"</string>
     <string name="change_photo" msgid="8530597935483526383">"Rediger"</string>
-    <string name="primary_photo" msgid="8517942231868516999">"Primært foto"</string>
     <string name="description_star" msgid="2605854427360036550">"foretrukken"</string>
     <string name="edit_contact" msgid="7529281274005689512">"Rediger kontaktperson"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"luk"</string>
@@ -269,7 +268,6 @@
     <string name="header_name_entry" msgid="1592791008096288306">"Navn"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"E-mail"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"Telefon"</string>
-    <string name="header_photo_entry" msgid="4438023151411853238">"Foto"</string>
     <string name="content_description_expand_editor" msgid="1111381475901897470">"Klik for at udvide værktøjet til redigering af kontaktpersoner."</string>
     <string name="content_description_collapse_editor" msgid="7598061318022977825">"Klik for at skjule værktøjet til redigering af kontaktpersoner."</string>
     <string name="content_description_directions" msgid="2686791825798189335">"rutevejledning til placering"</string>
@@ -284,6 +282,8 @@
     <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Skift billede"</string>
     <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Redigeringsværktøjet kunne ikke åbnes."</string>
     <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Gemmes på"</string>
+    <!-- no translation found for compact_editor_account_selector_read_only_title (1869435992721760221) -->
+    <skip />
     <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"I øjeblikket gemmes den på <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Tryk to gange for at vælge en anden konto."</string>
     <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
       <item quantity="one">Linket kontaktperson (<xliff:g id="COUNT">%d</xliff:g>)</item>
@@ -454,22 +454,14 @@
     <string name="chat_jabber" msgid="7561444230307829609">"Chat ved hjælp af Jabber"</string>
     <string name="chat" msgid="9025361898797412245">"Chat"</string>
     <string name="description_minus_button" msgid="6908099247930477551">"slet"</string>
-    <!-- no translation found for expand_name_fields_description (6883935911480726652) -->
-    <skip />
-    <!-- no translation found for collapse_name_fields_description (4757877385895561556) -->
-    <skip />
-    <!-- no translation found for expand_phonetic_name_fields_description (3865726859582581741) -->
-    <skip />
-    <!-- no translation found for collapse_phonetic_name_fields_description (9102249481855019452) -->
-    <skip />
-    <!-- no translation found for expand_fields_description (8129294181216760037) -->
-    <skip />
-    <!-- no translation found for collapse_fields_description (1884143625854637874) -->
-    <skip />
-    <!-- no translation found for announce_expanded_fields (1075947220478530622) -->
-    <skip />
-    <!-- no translation found for announce_collapsed_fields (6414231530177338704) -->
-    <skip />
+    <string name="expand_name_fields_description" msgid="6883935911480726652">"Udvid navnefelter"</string>
+    <string name="collapse_name_fields_description" msgid="4757877385895561556">"Skjul navnefelter"</string>
+    <string name="expand_phonetic_name_fields_description" msgid="3865726859582581741">"Udvid fonetiske navnefelter"</string>
+    <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Skjul fonetiske navnefelter"</string>
+    <string name="expand_fields_description" msgid="8129294181216760037">"Udvid"</string>
+    <string name="collapse_fields_description" msgid="1884143625854637874">"Skjul"</string>
+    <string name="announce_expanded_fields" msgid="1075947220478530622">"Udvidet"</string>
+    <string name="announce_collapsed_fields" msgid="6414231530177338704">"Skjult"</string>
     <string name="list_filter_all_accounts" msgid="8908683398914322369">"Alle kontaktpersoner"</string>
     <string name="list_filter_all_starred" msgid="5031734941601931356">"Stjernemarkerede"</string>
     <string name="list_filter_customize" msgid="4789963356004169321">"Tilpas"</string>
@@ -555,7 +547,8 @@
     <string name="share_favorite_contacts" msgid="4280926751003081042">"Del foretrukne kontaktpersoner"</string>
     <string name="share_contacts" msgid="8109287987498711664">"Del alle kontaktpersoner"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"Kontaktpersonerne kunne ikke deles."</string>
-    <string name="dialog_import_export" msgid="4360648034889921624">"Import/eksport kontakter"</string>
+    <!-- no translation found for dialog_export (1628001095187741417) -->
+    <skip />
     <string name="dialog_import" msgid="2431698729761448759">"Importer kontaktpersoner"</string>
     <string name="share_error" msgid="948429331673358107">"Denne kontaktperson kan ikke deles."</string>
     <string name="no_contact_to_share" msgid="1276397530378323033">"Der er ingen kontaktpersoner, der kan deles."</string>
@@ -570,7 +563,10 @@
     <string name="menu_clear_frequents" msgid="7688250191932838833">"Ryd hyppige"</string>
     <string name="menu_select_sim" msgid="3603578201960504010">"Vælg SIM-kort"</string>
     <string name="menu_accounts" msgid="1424330057450189074">"Administrer konti"</string>
-    <string name="menu_import_export" msgid="26217871113229507">"Importer og eksporter"</string>
+    <!-- no translation found for menu_import (6107961135813836467) -->
+    <skip />
+    <!-- no translation found for menu_export (2658783911863503902) -->
+    <skip />
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"Blokerede telefonnumre"</string>
     <string name="contact_status_update_attribution" msgid="752179367353018597">"via <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> via <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
@@ -604,4 +600,8 @@
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> sek."</string>
     <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> min. <xliff:g id="SECONDS">%s</xliff:g> sek."</string>
     <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> t. <xliff:g id="MINUTES_1">%s</xliff:g> min. <xliff:g id="SECONDS">%s</xliff:g> sek."</string>
+    <!-- no translation found for dynamic_shortcut_disabled_message (249939425761315252) -->
+    <skip />
+    <!-- no translation found for dynamic_shortcut_contact_removed_message (6845645831837615899) -->
+    <skip />
 </resources>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index 57e72c3..762547e 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -67,6 +67,7 @@
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Vorgeschlagene Kontakte"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Alle Kontakte"</string>
     <string name="contactsJoinedMessage" msgid="3343535986195643136">"Kontakte verknüpft"</string>
+    <string name="contact_deleted_named_toast" msgid="6558941164987421174">"<xliff:g id="NAME">%s</xliff:g> gelöscht"</string>
     <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
       <item quantity="other">Kontakte gelöscht</item>
       <item quantity="one">Kontakt gelöscht</item>
@@ -113,11 +114,11 @@
     <string name="emptyMainList" msgid="2772242747899664460">"Die Kontaktliste ist leer"</string>
     <string name="contactSavedToast" msgid="9171862279493213075">"Kontakt gespeichert"</string>
     <string name="contactUnlinkedToast" msgid="7122823195786012553">"Verknüpfung der Kontakte wurde aufgehoben."</string>
-    <string name="contactSavedErrorToast" msgid="3207250533172944892">"Kontaktänderungen konnten nicht gespeichert werden."</string>
-    <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Verknüpfung des Kontakts konnte nicht aufgehoben werden."</string>
-    <string name="contactJoinErrorToast" msgid="3977932531264809035">"Der Kontakt konnte nicht verknüpft werden."</string>
-    <string name="contactGenericErrorToast" msgid="7774911165341591714">"Fehler beim Speichern des Kontakts."</string>
-    <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"Änderungen des Kontaktfotos konnten nicht gespeichert werden."</string>
+    <string name="contactSavedErrorToast" msgid="4827033473908688031">"Änderungen am Kontakt konnten nicht gespeichert werden"</string>
+    <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"Verknüpfung mit Kontakt konnte nicht aufgehoben werden"</string>
+    <string name="contactJoinErrorToast" msgid="5735129234573327701">"Kontakt konnte nicht verknüpft werden"</string>
+    <string name="contactGenericErrorToast" msgid="3885457515665783976">"Fehler beim Speichern des Kontakts"</string>
+    <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Änderungen am Kontaktfoto konnten nicht gespeichert werden"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"Label konnte nicht geladen werden"</string>
     <string name="groupSavedToast" msgid="6491495462357722285">"Label gespeichert"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Label gelöscht"</string>
@@ -126,7 +127,7 @@
     <string name="groupUpdatedToast" msgid="3667977658676267687">"Label aktualisiert"</string>
     <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Aus Label entfernt"</string>
     <string name="groupMembersAddedToast" msgid="4824834898718972768">"Zu Label hinzugefügt"</string>
-    <string name="groupSavedErrorToast" msgid="8121032018490980184">"Änderungen am Label konnten nicht gespeichert werden."</string>
+    <string name="groupSavedErrorToast" msgid="2355891714292740162">"Änderungen am Label konnten nicht gespeichert werden"</string>
     <string name="groupExistsErrorMessage" msgid="5196811283836946189">"Dieses Label ist bereits vorhanden"</string>
     <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
       <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> Kontakte mit Telefonnummern</item>
@@ -147,7 +148,6 @@
     <string name="callAgain" msgid="3197312117049874778">"Erneut anrufen"</string>
     <string name="returnCall" msgid="8171961914203617813">"Zurückrufen"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"\"<xliff:g id="EMAIL">%s</xliff:g>\" zu den Kontakten hinzufügen?"</string>
-    <string name="description_contact_photo" msgid="3387458082667894062">"Kontaktbild"</string>
     <string name="description_plus_button" msgid="515164827856229880">"plus"</string>
     <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> von <xliff:g id="TOTAL_NUMBER">%s</xliff:g> Kontakten"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"Namen meiner Kontakte"</string>
@@ -192,7 +192,6 @@
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Datum"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Label"</string>
     <string name="change_photo" msgid="8530597935483526383">"Ändern"</string>
-    <string name="primary_photo" msgid="8517942231868516999">"Hauptfoto"</string>
     <string name="description_star" msgid="2605854427360036550">"Favorit"</string>
     <string name="edit_contact" msgid="7529281274005689512">"Kontakt bearbeiten"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"Schließen"</string>
@@ -269,7 +268,6 @@
     <string name="header_name_entry" msgid="1592791008096288306">"Name"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"E-Mail"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"Telefon"</string>
-    <string name="header_photo_entry" msgid="4438023151411853238">"Foto"</string>
     <string name="content_description_expand_editor" msgid="1111381475901897470">"Zum Maximieren des Kontakteditors klicken"</string>
     <string name="content_description_collapse_editor" msgid="7598061318022977825">"Zum Minimieren des Kontakteditors klicken"</string>
     <string name="content_description_directions" msgid="2686791825798189335">"Wegbeschreibung"</string>
@@ -284,6 +282,8 @@
     <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Foto ändern"</string>
     <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Fehler beim Öffnen des Editors."</string>
     <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Speichern in"</string>
+    <!-- no translation found for compact_editor_account_selector_read_only_title (1869435992721760221) -->
+    <skip />
     <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"Wird derzeit in <xliff:g id="ACCOUNT_NAME">%s</xliff:g> gespeichert. Tippe doppelt, um ein anderes Konto auszuwählen."</string>
     <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
       <item quantity="other">Verknüpfte Kontakte (<xliff:g id="COUNT">%d</xliff:g>)</item>
@@ -454,22 +454,14 @@
     <string name="chat_jabber" msgid="7561444230307829609">"Über Jabber chatten"</string>
     <string name="chat" msgid="9025361898797412245">"Chat"</string>
     <string name="description_minus_button" msgid="6908099247930477551">"Löschen"</string>
-    <!-- no translation found for expand_name_fields_description (6883935911480726652) -->
-    <skip />
-    <!-- no translation found for collapse_name_fields_description (4757877385895561556) -->
-    <skip />
-    <!-- no translation found for expand_phonetic_name_fields_description (3865726859582581741) -->
-    <skip />
-    <!-- no translation found for collapse_phonetic_name_fields_description (9102249481855019452) -->
-    <skip />
-    <!-- no translation found for expand_fields_description (8129294181216760037) -->
-    <skip />
-    <!-- no translation found for collapse_fields_description (1884143625854637874) -->
-    <skip />
-    <!-- no translation found for announce_expanded_fields (1075947220478530622) -->
-    <skip />
-    <!-- no translation found for announce_collapsed_fields (6414231530177338704) -->
-    <skip />
+    <string name="expand_name_fields_description" msgid="6883935911480726652">"Namensfelder maximieren"</string>
+    <string name="collapse_name_fields_description" msgid="4757877385895561556">"Namensfelder minimieren"</string>
+    <string name="expand_phonetic_name_fields_description" msgid="3865726859582581741">"Felder für phonetische Namen maximieren"</string>
+    <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Felder für phonetische Namen minimieren"</string>
+    <string name="expand_fields_description" msgid="8129294181216760037">"Maximieren"</string>
+    <string name="collapse_fields_description" msgid="1884143625854637874">"Minimieren"</string>
+    <string name="announce_expanded_fields" msgid="1075947220478530622">"Maximiert"</string>
+    <string name="announce_collapsed_fields" msgid="6414231530177338704">"Minimiert"</string>
     <string name="list_filter_all_accounts" msgid="8908683398914322369">"Alle Kontakte"</string>
     <string name="list_filter_all_starred" msgid="5031734941601931356">"Markiert"</string>
     <string name="list_filter_customize" msgid="4789963356004169321">"Personalisieren"</string>
@@ -555,7 +547,8 @@
     <string name="share_favorite_contacts" msgid="4280926751003081042">"Lieblingskontakte teilen"</string>
     <string name="share_contacts" msgid="8109287987498711664">"Alle Kontakte teilen"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"Kontakte konnten nicht geteilt werden."</string>
-    <string name="dialog_import_export" msgid="4360648034889921624">"Import/Export von Kontakten"</string>
+    <!-- no translation found for dialog_export (1628001095187741417) -->
+    <skip />
     <string name="dialog_import" msgid="2431698729761448759">"Kontakte importieren"</string>
     <string name="share_error" msgid="948429331673358107">"Dieser Kontakt kann nicht geteilt werden."</string>
     <string name="no_contact_to_share" msgid="1276397530378323033">"Keine Kontakte zum Teilen vorhanden."</string>
@@ -570,7 +563,10 @@
     <string name="menu_clear_frequents" msgid="7688250191932838833">"\"Häufig kontaktiert\" löschen"</string>
     <string name="menu_select_sim" msgid="3603578201960504010">"SIM-Karte auswählen"</string>
     <string name="menu_accounts" msgid="1424330057450189074">"Konten verwalten"</string>
-    <string name="menu_import_export" msgid="26217871113229507">"Importieren/Exportieren"</string>
+    <!-- no translation found for menu_import (6107961135813836467) -->
+    <skip />
+    <!-- no translation found for menu_export (2658783911863503902) -->
+    <skip />
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"Blockierte Nummern"</string>
     <string name="contact_status_update_attribution" msgid="752179367353018597">"über <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> über <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
@@ -604,4 +600,8 @@
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> s"</string>
     <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
     <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> h <xliff:g id="MINUTES_1">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
+    <!-- no translation found for dynamic_shortcut_disabled_message (249939425761315252) -->
+    <skip />
+    <!-- no translation found for dynamic_shortcut_contact_removed_message (6845645831837615899) -->
+    <skip />
 </resources>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index cf6a6c8..d138ff8 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -67,6 +67,7 @@
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Προτεινόμενες επαφές"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Όλες οι επαφές"</string>
     <string name="contactsJoinedMessage" msgid="3343535986195643136">"Οι επαφές συνδέθηκαν"</string>
+    <string name="contact_deleted_named_toast" msgid="6558941164987421174">"<xliff:g id="NAME">%s</xliff:g>: διαγράφηκε"</string>
     <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
       <item quantity="other"> επαφές διαγράφηκαν</item>
       <item quantity="one"> επαφή διαγράφηκε</item>
@@ -113,11 +114,11 @@
     <string name="emptyMainList" msgid="2772242747899664460">"Η λίστα επαφών σας είναι άδεια"</string>
     <string name="contactSavedToast" msgid="9171862279493213075">"Η επαφή αποθηκεύτηκε"</string>
     <string name="contactUnlinkedToast" msgid="7122823195786012553">"Οι επαφές αποσυνδέθηκαν"</string>
-    <string name="contactSavedErrorToast" msgid="3207250533172944892">"Δεν ήταν δυνατή η αποθήκευση των αλλαγών που πραγματοποιήθηκαν στις επαφές."</string>
-    <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Δεν ήταν δυνατή η αποσύνδεση επαφής."</string>
-    <string name="contactJoinErrorToast" msgid="3977932531264809035">"Δεν ήταν δυνατή η σύνδεση της επαφής."</string>
-    <string name="contactGenericErrorToast" msgid="7774911165341591714">"Σφάλμα κατά την αποθήκευση επαφής."</string>
-    <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"Δεν ήταν δυνατή η αποθήκευση των αλλαγών που πραγματοποιήθηκαν στη φωτογραφία της επαφής."</string>
+    <string name="contactSavedErrorToast" msgid="4827033473908688031">"Δεν ήταν δυνατή η αποθήκευση των αλλαγών που πραγματοποιήθηκαν στην επαφή"</string>
+    <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"Δεν ήταν δυνατή η αποσύνδεση επαφής"</string>
+    <string name="contactJoinErrorToast" msgid="5735129234573327701">"Δεν ήταν δυνατή η σύνδεση της επαφής"</string>
+    <string name="contactGenericErrorToast" msgid="3885457515665783976">"Σφάλμα κατά την αποθήκευση της επαφής"</string>
+    <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Δεν ήταν δυνατή η αποθήκευση των αλλαγών που πραγματοποιήθηκαν στη φωτογραφία της επαφής"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"Η φόρτωση ετικέτας απέτυχε"</string>
     <string name="groupSavedToast" msgid="6491495462357722285">"Η ετικέτα αποθηκεύτηκε."</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Η ετικέτα διαγράφηκε"</string>
@@ -126,7 +127,7 @@
     <string name="groupUpdatedToast" msgid="3667977658676267687">"Η ετικέτα ενημερώθηκε"</string>
     <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Καταργήθηκε από ετικέτα"</string>
     <string name="groupMembersAddedToast" msgid="4824834898718972768">"Προστέθηκε στην ετικέτα"</string>
-    <string name="groupSavedErrorToast" msgid="8121032018490980184">"Δεν ήταν δυνατή η αποθήκευση των αλλαγών ετικέτας."</string>
+    <string name="groupSavedErrorToast" msgid="2355891714292740162">"Δεν ήταν δυνατή η αποθήκευση των αλλαγών ετικέτας"</string>
     <string name="groupExistsErrorMessage" msgid="5196811283836946189">"Η ετικέτα υπάρχει ήδη"</string>
     <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
       <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> επαφές με αριθμό τηλεφώνου</item>
@@ -147,7 +148,6 @@
     <string name="callAgain" msgid="3197312117049874778">"Επανάληψη κλήσης"</string>
     <string name="returnCall" msgid="8171961914203617813">"Επιστροφή κλήσης"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Προσθήκη του \"<xliff:g id="EMAIL">%s</xliff:g>\" στις επαφές?"</string>
-    <string name="description_contact_photo" msgid="3387458082667894062">"φωτογραφία επαφής"</string>
     <string name="description_plus_button" msgid="515164827856229880">"συν"</string>
     <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> από <xliff:g id="TOTAL_NUMBER">%s</xliff:g> επαφές"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"Ονόματα των επαφών σας"</string>
@@ -192,7 +192,6 @@
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Ημερομηνία"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Ετικέτα"</string>
     <string name="change_photo" msgid="8530597935483526383">"Αλλαγή"</string>
-    <string name="primary_photo" msgid="8517942231868516999">"Κύρια φωτογραφία"</string>
     <string name="description_star" msgid="2605854427360036550">"αγαπημένο"</string>
     <string name="edit_contact" msgid="7529281274005689512">"Επεξεργασία"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"κλείσιμο"</string>
@@ -269,7 +268,6 @@
     <string name="header_name_entry" msgid="1592791008096288306">"Όνομα"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"Διεύθυνση ηλεκτρονικού ταχυδρομείου"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"Τηλέφωνο"</string>
-    <string name="header_photo_entry" msgid="4438023151411853238">"Φωτογραφία"</string>
     <string name="content_description_expand_editor" msgid="1111381475901897470">"Κάντε κλικ για επέκταση της επεξεργασίας επαφών."</string>
     <string name="content_description_collapse_editor" msgid="7598061318022977825">"Κάντε κλικ για σύμπτυξη της επεξεργασίας επαφών."</string>
     <string name="content_description_directions" msgid="2686791825798189335">"οδηγίες προς την τοποθεσία"</string>
@@ -284,6 +282,8 @@
     <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Αλλαγή φωτογραφίας"</string>
     <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Αποτυχία ανοίγματος προγράμματος επεξεργασίας."</string>
     <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Αποθήκευση σε"</string>
+    <!-- no translation found for compact_editor_account_selector_read_only_title (1869435992721760221) -->
+    <skip />
     <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"Γίνεται αποθήκευση στο λογαριασμό <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Πατήστε δύο φορές για να επιλέξετε διαφορετικό λογαριασμό."</string>
     <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
       <item quantity="other">Συνδεδεμένες επαφές (<xliff:g id="COUNT">%d</xliff:g>)</item>
@@ -454,22 +454,14 @@
     <string name="chat_jabber" msgid="7561444230307829609">"Συζήτηση μέσω Jabber"</string>
     <string name="chat" msgid="9025361898797412245">"Συζήτηση"</string>
     <string name="description_minus_button" msgid="6908099247930477551">"διαγραφή"</string>
-    <!-- no translation found for expand_name_fields_description (6883935911480726652) -->
-    <skip />
-    <!-- no translation found for collapse_name_fields_description (4757877385895561556) -->
-    <skip />
-    <!-- no translation found for expand_phonetic_name_fields_description (3865726859582581741) -->
-    <skip />
-    <!-- no translation found for collapse_phonetic_name_fields_description (9102249481855019452) -->
-    <skip />
-    <!-- no translation found for expand_fields_description (8129294181216760037) -->
-    <skip />
-    <!-- no translation found for collapse_fields_description (1884143625854637874) -->
-    <skip />
-    <!-- no translation found for announce_expanded_fields (1075947220478530622) -->
-    <skip />
-    <!-- no translation found for announce_collapsed_fields (6414231530177338704) -->
-    <skip />
+    <string name="expand_name_fields_description" msgid="6883935911480726652">"Ανάπτυξη πεδίων ονομάτων"</string>
+    <string name="collapse_name_fields_description" msgid="4757877385895561556">"Σύμπτυξη πεδίων ονομάτων"</string>
+    <string name="expand_phonetic_name_fields_description" msgid="3865726859582581741">"Ανάπτυξη πεδίων φωνητικού ονόματος"</string>
+    <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Σύμπτυξη πεδίων φωνητικού ονόματος"</string>
+    <string name="expand_fields_description" msgid="8129294181216760037">"Ανάπτυξη"</string>
+    <string name="collapse_fields_description" msgid="1884143625854637874">"Σύμπτυξη"</string>
+    <string name="announce_expanded_fields" msgid="1075947220478530622">"Αναπτύχθηκε"</string>
+    <string name="announce_collapsed_fields" msgid="6414231530177338704">"Συμπτύχθηκε"</string>
     <string name="list_filter_all_accounts" msgid="8908683398914322369">"Όλες οι επαφές"</string>
     <string name="list_filter_all_starred" msgid="5031734941601931356">"Με αστέρι"</string>
     <string name="list_filter_customize" msgid="4789963356004169321">"Προσαρμογή"</string>
@@ -555,7 +547,8 @@
     <string name="share_favorite_contacts" msgid="4280926751003081042">"Κοινοποίηση αγαπημένων επαφών"</string>
     <string name="share_contacts" msgid="8109287987498711664">"Κοινή χρήση όλων των επαφών"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"Αποτυχία κοινής χρήσης επαφών."</string>
-    <string name="dialog_import_export" msgid="4360648034889921624">"Εισαγωγή/Εξαγωγή επαφών"</string>
+    <!-- no translation found for dialog_export (1628001095187741417) -->
+    <skip />
     <string name="dialog_import" msgid="2431698729761448759">"Εισαγωγή επαφών"</string>
     <string name="share_error" msgid="948429331673358107">"Δεν είναι δυνατή η κοινή χρήση αυτής της επαφής."</string>
     <string name="no_contact_to_share" msgid="1276397530378323033">"Δεν υπάρχουν επαφές για κοινοποίηση."</string>
@@ -570,7 +563,10 @@
     <string name="menu_clear_frequents" msgid="7688250191932838833">"Διαγραφή ατόμ. με συχνή επικ."</string>
     <string name="menu_select_sim" msgid="3603578201960504010">"Επιλογή κάρτας SIM"</string>
     <string name="menu_accounts" msgid="1424330057450189074">"Διαχείριση λογαριασμών"</string>
-    <string name="menu_import_export" msgid="26217871113229507">"Εισαγωγή/Εξαγωγή"</string>
+    <!-- no translation found for menu_import (6107961135813836467) -->
+    <skip />
+    <!-- no translation found for menu_export (2658783911863503902) -->
+    <skip />
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"Αποκλεισμένοι αριθμοί"</string>
     <string name="contact_status_update_attribution" msgid="752179367353018597">"μέσω <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> μέσω <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
@@ -604,4 +600,8 @@
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> δ."</string>
     <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> λ <xliff:g id="SECONDS">%s</xliff:g> δ."</string>
     <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> ώ. <xliff:g id="MINUTES_1">%s</xliff:g> λ. <xliff:g id="SECONDS">%s</xliff:g> δ."</string>
+    <!-- no translation found for dynamic_shortcut_disabled_message (249939425761315252) -->
+    <skip />
+    <!-- no translation found for dynamic_shortcut_contact_removed_message (6845645831837615899) -->
+    <skip />
 </resources>
diff --git a/res/values-en-rAU/strings.xml b/res/values-en-rAU/strings.xml
index e96a3ee..e3acad3 100644
--- a/res/values-en-rAU/strings.xml
+++ b/res/values-en-rAU/strings.xml
@@ -67,6 +67,7 @@
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Suggested Contacts"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"All contacts"</string>
     <string name="contactsJoinedMessage" msgid="3343535986195643136">"Contacts linked"</string>
+    <string name="contact_deleted_named_toast" msgid="6558941164987421174">"<xliff:g id="NAME">%s</xliff:g> deleted"</string>
     <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
       <item quantity="other">Contacts deleted</item>
       <item quantity="one">Contact deleted</item>
@@ -113,11 +114,11 @@
     <string name="emptyMainList" msgid="2772242747899664460">"Your contacts list is empty"</string>
     <string name="contactSavedToast" msgid="9171862279493213075">"Contact saved"</string>
     <string name="contactUnlinkedToast" msgid="7122823195786012553">"Contacts unlinked"</string>
-    <string name="contactSavedErrorToast" msgid="3207250533172944892">"Couldn\'t save contact changes."</string>
-    <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Couldn\'t unlink contact."</string>
-    <string name="contactJoinErrorToast" msgid="3977932531264809035">"Couldn\'t link contact."</string>
-    <string name="contactGenericErrorToast" msgid="7774911165341591714">"Error while saving contact."</string>
-    <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"Couldn\'t save contact photo changes."</string>
+    <string name="contactSavedErrorToast" msgid="4827033473908688031">"Couldn\'t save contact changes"</string>
+    <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"Couldn\'t unlink contact"</string>
+    <string name="contactJoinErrorToast" msgid="5735129234573327701">"Couldn\'t link contact"</string>
+    <string name="contactGenericErrorToast" msgid="3885457515665783976">"Error while saving contact"</string>
+    <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Couldn\'t save contact photo changes"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"Failed to load label"</string>
     <string name="groupSavedToast" msgid="6491495462357722285">"Label saved"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Label deleted"</string>
@@ -126,7 +127,7 @@
     <string name="groupUpdatedToast" msgid="3667977658676267687">"Label updated"</string>
     <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Removed from label"</string>
     <string name="groupMembersAddedToast" msgid="4824834898718972768">"Added to label"</string>
-    <string name="groupSavedErrorToast" msgid="8121032018490980184">"Couldn\'t save label changes."</string>
+    <string name="groupSavedErrorToast" msgid="2355891714292740162">"Couldn\'t save label changes"</string>
     <string name="groupExistsErrorMessage" msgid="5196811283836946189">"That label already exists"</string>
     <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
       <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> contacts with phone numbers</item>
@@ -147,7 +148,6 @@
     <string name="callAgain" msgid="3197312117049874778">"Call again"</string>
     <string name="returnCall" msgid="8171961914203617813">"Return call"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Add \"<xliff:g id="EMAIL">%s</xliff:g>\" to contacts?"</string>
-    <string name="description_contact_photo" msgid="3387458082667894062">"contact photo"</string>
     <string name="description_plus_button" msgid="515164827856229880">"plus"</string>
     <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> of <xliff:g id="TOTAL_NUMBER">%s</xliff:g> contacts"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"Names of your contacts"</string>
@@ -192,7 +192,6 @@
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Date"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Label"</string>
     <string name="change_photo" msgid="8530597935483526383">"Change"</string>
-    <string name="primary_photo" msgid="8517942231868516999">"Primary photo"</string>
     <string name="description_star" msgid="2605854427360036550">"favourite"</string>
     <string name="edit_contact" msgid="7529281274005689512">"Edit contact"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"close"</string>
@@ -269,7 +268,6 @@
     <string name="header_name_entry" msgid="1592791008096288306">"Name"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"Email"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"Phone"</string>
-    <string name="header_photo_entry" msgid="4438023151411853238">"Photo"</string>
     <string name="content_description_expand_editor" msgid="1111381475901897470">"Click to expand contact editor."</string>
     <string name="content_description_collapse_editor" msgid="7598061318022977825">"Click to collapse contact editor."</string>
     <string name="content_description_directions" msgid="2686791825798189335">"directions to location"</string>
@@ -284,6 +282,8 @@
     <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Change photo"</string>
     <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Failed to open editor."</string>
     <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Saving to"</string>
+    <!-- no translation found for compact_editor_account_selector_read_only_title (1869435992721760221) -->
+    <skip />
     <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"Currently saving to <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Double-tap to pick a different account."</string>
     <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
       <item quantity="other">Linked contacts (<xliff:g id="COUNT">%d</xliff:g>)</item>
@@ -454,22 +454,14 @@
     <string name="chat_jabber" msgid="7561444230307829609">"Chat using Jabber"</string>
     <string name="chat" msgid="9025361898797412245">"Chat"</string>
     <string name="description_minus_button" msgid="6908099247930477551">"delete"</string>
-    <!-- no translation found for expand_name_fields_description (6883935911480726652) -->
-    <skip />
-    <!-- no translation found for collapse_name_fields_description (4757877385895561556) -->
-    <skip />
-    <!-- no translation found for expand_phonetic_name_fields_description (3865726859582581741) -->
-    <skip />
-    <!-- no translation found for collapse_phonetic_name_fields_description (9102249481855019452) -->
-    <skip />
-    <!-- no translation found for expand_fields_description (8129294181216760037) -->
-    <skip />
-    <!-- no translation found for collapse_fields_description (1884143625854637874) -->
-    <skip />
-    <!-- no translation found for announce_expanded_fields (1075947220478530622) -->
-    <skip />
-    <!-- no translation found for announce_collapsed_fields (6414231530177338704) -->
-    <skip />
+    <string name="expand_name_fields_description" msgid="6883935911480726652">"Expand name fields"</string>
+    <string name="collapse_name_fields_description" msgid="4757877385895561556">"Collapse name fields"</string>
+    <string name="expand_phonetic_name_fields_description" msgid="3865726859582581741">"Expand phonetic name fields"</string>
+    <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Collapse phonetic name fields"</string>
+    <string name="expand_fields_description" msgid="8129294181216760037">"Expand"</string>
+    <string name="collapse_fields_description" msgid="1884143625854637874">"Collapse"</string>
+    <string name="announce_expanded_fields" msgid="1075947220478530622">"Expanded"</string>
+    <string name="announce_collapsed_fields" msgid="6414231530177338704">"Collapsed"</string>
     <string name="list_filter_all_accounts" msgid="8908683398914322369">"All contacts"</string>
     <string name="list_filter_all_starred" msgid="5031734941601931356">"Starred"</string>
     <string name="list_filter_customize" msgid="4789963356004169321">"Customise"</string>
@@ -555,7 +547,8 @@
     <string name="share_favorite_contacts" msgid="4280926751003081042">"Share favourite contacts"</string>
     <string name="share_contacts" msgid="8109287987498711664">"Share all contacts"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"Failed to share contacts."</string>
-    <string name="dialog_import_export" msgid="4360648034889921624">"Import/export contacts"</string>
+    <!-- no translation found for dialog_export (1628001095187741417) -->
+    <skip />
     <string name="dialog_import" msgid="2431698729761448759">"Import contacts"</string>
     <string name="share_error" msgid="948429331673358107">"This contact cannot be shared."</string>
     <string name="no_contact_to_share" msgid="1276397530378323033">"There are no contacts to share."</string>
@@ -570,7 +563,10 @@
     <string name="menu_clear_frequents" msgid="7688250191932838833">"Clear frequents"</string>
     <string name="menu_select_sim" msgid="3603578201960504010">"Select SIM card"</string>
     <string name="menu_accounts" msgid="1424330057450189074">"Manage accounts"</string>
-    <string name="menu_import_export" msgid="26217871113229507">"Import/export"</string>
+    <!-- no translation found for menu_import (6107961135813836467) -->
+    <skip />
+    <!-- no translation found for menu_export (2658783911863503902) -->
+    <skip />
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"Blocked numbers"</string>
     <string name="contact_status_update_attribution" msgid="752179367353018597">"via <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> via <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
@@ -604,4 +600,8 @@
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> sec"</string>
     <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> sec"</string>
     <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> hr <xliff:g id="MINUTES_1">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> sec"</string>
+    <!-- no translation found for dynamic_shortcut_disabled_message (249939425761315252) -->
+    <skip />
+    <!-- no translation found for dynamic_shortcut_contact_removed_message (6845645831837615899) -->
+    <skip />
 </resources>
diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml
index e96a3ee..e3acad3 100644
--- a/res/values-en-rGB/strings.xml
+++ b/res/values-en-rGB/strings.xml
@@ -67,6 +67,7 @@
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Suggested Contacts"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"All contacts"</string>
     <string name="contactsJoinedMessage" msgid="3343535986195643136">"Contacts linked"</string>
+    <string name="contact_deleted_named_toast" msgid="6558941164987421174">"<xliff:g id="NAME">%s</xliff:g> deleted"</string>
     <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
       <item quantity="other">Contacts deleted</item>
       <item quantity="one">Contact deleted</item>
@@ -113,11 +114,11 @@
     <string name="emptyMainList" msgid="2772242747899664460">"Your contacts list is empty"</string>
     <string name="contactSavedToast" msgid="9171862279493213075">"Contact saved"</string>
     <string name="contactUnlinkedToast" msgid="7122823195786012553">"Contacts unlinked"</string>
-    <string name="contactSavedErrorToast" msgid="3207250533172944892">"Couldn\'t save contact changes."</string>
-    <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Couldn\'t unlink contact."</string>
-    <string name="contactJoinErrorToast" msgid="3977932531264809035">"Couldn\'t link contact."</string>
-    <string name="contactGenericErrorToast" msgid="7774911165341591714">"Error while saving contact."</string>
-    <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"Couldn\'t save contact photo changes."</string>
+    <string name="contactSavedErrorToast" msgid="4827033473908688031">"Couldn\'t save contact changes"</string>
+    <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"Couldn\'t unlink contact"</string>
+    <string name="contactJoinErrorToast" msgid="5735129234573327701">"Couldn\'t link contact"</string>
+    <string name="contactGenericErrorToast" msgid="3885457515665783976">"Error while saving contact"</string>
+    <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Couldn\'t save contact photo changes"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"Failed to load label"</string>
     <string name="groupSavedToast" msgid="6491495462357722285">"Label saved"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Label deleted"</string>
@@ -126,7 +127,7 @@
     <string name="groupUpdatedToast" msgid="3667977658676267687">"Label updated"</string>
     <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Removed from label"</string>
     <string name="groupMembersAddedToast" msgid="4824834898718972768">"Added to label"</string>
-    <string name="groupSavedErrorToast" msgid="8121032018490980184">"Couldn\'t save label changes."</string>
+    <string name="groupSavedErrorToast" msgid="2355891714292740162">"Couldn\'t save label changes"</string>
     <string name="groupExistsErrorMessage" msgid="5196811283836946189">"That label already exists"</string>
     <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
       <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> contacts with phone numbers</item>
@@ -147,7 +148,6 @@
     <string name="callAgain" msgid="3197312117049874778">"Call again"</string>
     <string name="returnCall" msgid="8171961914203617813">"Return call"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Add \"<xliff:g id="EMAIL">%s</xliff:g>\" to contacts?"</string>
-    <string name="description_contact_photo" msgid="3387458082667894062">"contact photo"</string>
     <string name="description_plus_button" msgid="515164827856229880">"plus"</string>
     <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> of <xliff:g id="TOTAL_NUMBER">%s</xliff:g> contacts"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"Names of your contacts"</string>
@@ -192,7 +192,6 @@
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Date"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Label"</string>
     <string name="change_photo" msgid="8530597935483526383">"Change"</string>
-    <string name="primary_photo" msgid="8517942231868516999">"Primary photo"</string>
     <string name="description_star" msgid="2605854427360036550">"favourite"</string>
     <string name="edit_contact" msgid="7529281274005689512">"Edit contact"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"close"</string>
@@ -269,7 +268,6 @@
     <string name="header_name_entry" msgid="1592791008096288306">"Name"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"Email"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"Phone"</string>
-    <string name="header_photo_entry" msgid="4438023151411853238">"Photo"</string>
     <string name="content_description_expand_editor" msgid="1111381475901897470">"Click to expand contact editor."</string>
     <string name="content_description_collapse_editor" msgid="7598061318022977825">"Click to collapse contact editor."</string>
     <string name="content_description_directions" msgid="2686791825798189335">"directions to location"</string>
@@ -284,6 +282,8 @@
     <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Change photo"</string>
     <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Failed to open editor."</string>
     <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Saving to"</string>
+    <!-- no translation found for compact_editor_account_selector_read_only_title (1869435992721760221) -->
+    <skip />
     <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"Currently saving to <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Double-tap to pick a different account."</string>
     <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
       <item quantity="other">Linked contacts (<xliff:g id="COUNT">%d</xliff:g>)</item>
@@ -454,22 +454,14 @@
     <string name="chat_jabber" msgid="7561444230307829609">"Chat using Jabber"</string>
     <string name="chat" msgid="9025361898797412245">"Chat"</string>
     <string name="description_minus_button" msgid="6908099247930477551">"delete"</string>
-    <!-- no translation found for expand_name_fields_description (6883935911480726652) -->
-    <skip />
-    <!-- no translation found for collapse_name_fields_description (4757877385895561556) -->
-    <skip />
-    <!-- no translation found for expand_phonetic_name_fields_description (3865726859582581741) -->
-    <skip />
-    <!-- no translation found for collapse_phonetic_name_fields_description (9102249481855019452) -->
-    <skip />
-    <!-- no translation found for expand_fields_description (8129294181216760037) -->
-    <skip />
-    <!-- no translation found for collapse_fields_description (1884143625854637874) -->
-    <skip />
-    <!-- no translation found for announce_expanded_fields (1075947220478530622) -->
-    <skip />
-    <!-- no translation found for announce_collapsed_fields (6414231530177338704) -->
-    <skip />
+    <string name="expand_name_fields_description" msgid="6883935911480726652">"Expand name fields"</string>
+    <string name="collapse_name_fields_description" msgid="4757877385895561556">"Collapse name fields"</string>
+    <string name="expand_phonetic_name_fields_description" msgid="3865726859582581741">"Expand phonetic name fields"</string>
+    <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Collapse phonetic name fields"</string>
+    <string name="expand_fields_description" msgid="8129294181216760037">"Expand"</string>
+    <string name="collapse_fields_description" msgid="1884143625854637874">"Collapse"</string>
+    <string name="announce_expanded_fields" msgid="1075947220478530622">"Expanded"</string>
+    <string name="announce_collapsed_fields" msgid="6414231530177338704">"Collapsed"</string>
     <string name="list_filter_all_accounts" msgid="8908683398914322369">"All contacts"</string>
     <string name="list_filter_all_starred" msgid="5031734941601931356">"Starred"</string>
     <string name="list_filter_customize" msgid="4789963356004169321">"Customise"</string>
@@ -555,7 +547,8 @@
     <string name="share_favorite_contacts" msgid="4280926751003081042">"Share favourite contacts"</string>
     <string name="share_contacts" msgid="8109287987498711664">"Share all contacts"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"Failed to share contacts."</string>
-    <string name="dialog_import_export" msgid="4360648034889921624">"Import/export contacts"</string>
+    <!-- no translation found for dialog_export (1628001095187741417) -->
+    <skip />
     <string name="dialog_import" msgid="2431698729761448759">"Import contacts"</string>
     <string name="share_error" msgid="948429331673358107">"This contact cannot be shared."</string>
     <string name="no_contact_to_share" msgid="1276397530378323033">"There are no contacts to share."</string>
@@ -570,7 +563,10 @@
     <string name="menu_clear_frequents" msgid="7688250191932838833">"Clear frequents"</string>
     <string name="menu_select_sim" msgid="3603578201960504010">"Select SIM card"</string>
     <string name="menu_accounts" msgid="1424330057450189074">"Manage accounts"</string>
-    <string name="menu_import_export" msgid="26217871113229507">"Import/export"</string>
+    <!-- no translation found for menu_import (6107961135813836467) -->
+    <skip />
+    <!-- no translation found for menu_export (2658783911863503902) -->
+    <skip />
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"Blocked numbers"</string>
     <string name="contact_status_update_attribution" msgid="752179367353018597">"via <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> via <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
@@ -604,4 +600,8 @@
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> sec"</string>
     <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> sec"</string>
     <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> hr <xliff:g id="MINUTES_1">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> sec"</string>
+    <!-- no translation found for dynamic_shortcut_disabled_message (249939425761315252) -->
+    <skip />
+    <!-- no translation found for dynamic_shortcut_contact_removed_message (6845645831837615899) -->
+    <skip />
 </resources>
diff --git a/res/values-en-rIN/strings.xml b/res/values-en-rIN/strings.xml
index e96a3ee..e3acad3 100644
--- a/res/values-en-rIN/strings.xml
+++ b/res/values-en-rIN/strings.xml
@@ -67,6 +67,7 @@
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Suggested Contacts"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"All contacts"</string>
     <string name="contactsJoinedMessage" msgid="3343535986195643136">"Contacts linked"</string>
+    <string name="contact_deleted_named_toast" msgid="6558941164987421174">"<xliff:g id="NAME">%s</xliff:g> deleted"</string>
     <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
       <item quantity="other">Contacts deleted</item>
       <item quantity="one">Contact deleted</item>
@@ -113,11 +114,11 @@
     <string name="emptyMainList" msgid="2772242747899664460">"Your contacts list is empty"</string>
     <string name="contactSavedToast" msgid="9171862279493213075">"Contact saved"</string>
     <string name="contactUnlinkedToast" msgid="7122823195786012553">"Contacts unlinked"</string>
-    <string name="contactSavedErrorToast" msgid="3207250533172944892">"Couldn\'t save contact changes."</string>
-    <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Couldn\'t unlink contact."</string>
-    <string name="contactJoinErrorToast" msgid="3977932531264809035">"Couldn\'t link contact."</string>
-    <string name="contactGenericErrorToast" msgid="7774911165341591714">"Error while saving contact."</string>
-    <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"Couldn\'t save contact photo changes."</string>
+    <string name="contactSavedErrorToast" msgid="4827033473908688031">"Couldn\'t save contact changes"</string>
+    <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"Couldn\'t unlink contact"</string>
+    <string name="contactJoinErrorToast" msgid="5735129234573327701">"Couldn\'t link contact"</string>
+    <string name="contactGenericErrorToast" msgid="3885457515665783976">"Error while saving contact"</string>
+    <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Couldn\'t save contact photo changes"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"Failed to load label"</string>
     <string name="groupSavedToast" msgid="6491495462357722285">"Label saved"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Label deleted"</string>
@@ -126,7 +127,7 @@
     <string name="groupUpdatedToast" msgid="3667977658676267687">"Label updated"</string>
     <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Removed from label"</string>
     <string name="groupMembersAddedToast" msgid="4824834898718972768">"Added to label"</string>
-    <string name="groupSavedErrorToast" msgid="8121032018490980184">"Couldn\'t save label changes."</string>
+    <string name="groupSavedErrorToast" msgid="2355891714292740162">"Couldn\'t save label changes"</string>
     <string name="groupExistsErrorMessage" msgid="5196811283836946189">"That label already exists"</string>
     <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
       <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> contacts with phone numbers</item>
@@ -147,7 +148,6 @@
     <string name="callAgain" msgid="3197312117049874778">"Call again"</string>
     <string name="returnCall" msgid="8171961914203617813">"Return call"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Add \"<xliff:g id="EMAIL">%s</xliff:g>\" to contacts?"</string>
-    <string name="description_contact_photo" msgid="3387458082667894062">"contact photo"</string>
     <string name="description_plus_button" msgid="515164827856229880">"plus"</string>
     <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> of <xliff:g id="TOTAL_NUMBER">%s</xliff:g> contacts"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"Names of your contacts"</string>
@@ -192,7 +192,6 @@
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Date"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Label"</string>
     <string name="change_photo" msgid="8530597935483526383">"Change"</string>
-    <string name="primary_photo" msgid="8517942231868516999">"Primary photo"</string>
     <string name="description_star" msgid="2605854427360036550">"favourite"</string>
     <string name="edit_contact" msgid="7529281274005689512">"Edit contact"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"close"</string>
@@ -269,7 +268,6 @@
     <string name="header_name_entry" msgid="1592791008096288306">"Name"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"Email"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"Phone"</string>
-    <string name="header_photo_entry" msgid="4438023151411853238">"Photo"</string>
     <string name="content_description_expand_editor" msgid="1111381475901897470">"Click to expand contact editor."</string>
     <string name="content_description_collapse_editor" msgid="7598061318022977825">"Click to collapse contact editor."</string>
     <string name="content_description_directions" msgid="2686791825798189335">"directions to location"</string>
@@ -284,6 +282,8 @@
     <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Change photo"</string>
     <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Failed to open editor."</string>
     <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Saving to"</string>
+    <!-- no translation found for compact_editor_account_selector_read_only_title (1869435992721760221) -->
+    <skip />
     <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"Currently saving to <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Double-tap to pick a different account."</string>
     <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
       <item quantity="other">Linked contacts (<xliff:g id="COUNT">%d</xliff:g>)</item>
@@ -454,22 +454,14 @@
     <string name="chat_jabber" msgid="7561444230307829609">"Chat using Jabber"</string>
     <string name="chat" msgid="9025361898797412245">"Chat"</string>
     <string name="description_minus_button" msgid="6908099247930477551">"delete"</string>
-    <!-- no translation found for expand_name_fields_description (6883935911480726652) -->
-    <skip />
-    <!-- no translation found for collapse_name_fields_description (4757877385895561556) -->
-    <skip />
-    <!-- no translation found for expand_phonetic_name_fields_description (3865726859582581741) -->
-    <skip />
-    <!-- no translation found for collapse_phonetic_name_fields_description (9102249481855019452) -->
-    <skip />
-    <!-- no translation found for expand_fields_description (8129294181216760037) -->
-    <skip />
-    <!-- no translation found for collapse_fields_description (1884143625854637874) -->
-    <skip />
-    <!-- no translation found for announce_expanded_fields (1075947220478530622) -->
-    <skip />
-    <!-- no translation found for announce_collapsed_fields (6414231530177338704) -->
-    <skip />
+    <string name="expand_name_fields_description" msgid="6883935911480726652">"Expand name fields"</string>
+    <string name="collapse_name_fields_description" msgid="4757877385895561556">"Collapse name fields"</string>
+    <string name="expand_phonetic_name_fields_description" msgid="3865726859582581741">"Expand phonetic name fields"</string>
+    <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Collapse phonetic name fields"</string>
+    <string name="expand_fields_description" msgid="8129294181216760037">"Expand"</string>
+    <string name="collapse_fields_description" msgid="1884143625854637874">"Collapse"</string>
+    <string name="announce_expanded_fields" msgid="1075947220478530622">"Expanded"</string>
+    <string name="announce_collapsed_fields" msgid="6414231530177338704">"Collapsed"</string>
     <string name="list_filter_all_accounts" msgid="8908683398914322369">"All contacts"</string>
     <string name="list_filter_all_starred" msgid="5031734941601931356">"Starred"</string>
     <string name="list_filter_customize" msgid="4789963356004169321">"Customise"</string>
@@ -555,7 +547,8 @@
     <string name="share_favorite_contacts" msgid="4280926751003081042">"Share favourite contacts"</string>
     <string name="share_contacts" msgid="8109287987498711664">"Share all contacts"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"Failed to share contacts."</string>
-    <string name="dialog_import_export" msgid="4360648034889921624">"Import/export contacts"</string>
+    <!-- no translation found for dialog_export (1628001095187741417) -->
+    <skip />
     <string name="dialog_import" msgid="2431698729761448759">"Import contacts"</string>
     <string name="share_error" msgid="948429331673358107">"This contact cannot be shared."</string>
     <string name="no_contact_to_share" msgid="1276397530378323033">"There are no contacts to share."</string>
@@ -570,7 +563,10 @@
     <string name="menu_clear_frequents" msgid="7688250191932838833">"Clear frequents"</string>
     <string name="menu_select_sim" msgid="3603578201960504010">"Select SIM card"</string>
     <string name="menu_accounts" msgid="1424330057450189074">"Manage accounts"</string>
-    <string name="menu_import_export" msgid="26217871113229507">"Import/export"</string>
+    <!-- no translation found for menu_import (6107961135813836467) -->
+    <skip />
+    <!-- no translation found for menu_export (2658783911863503902) -->
+    <skip />
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"Blocked numbers"</string>
     <string name="contact_status_update_attribution" msgid="752179367353018597">"via <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> via <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
@@ -604,4 +600,8 @@
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> sec"</string>
     <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> sec"</string>
     <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> hr <xliff:g id="MINUTES_1">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> sec"</string>
+    <!-- no translation found for dynamic_shortcut_disabled_message (249939425761315252) -->
+    <skip />
+    <!-- no translation found for dynamic_shortcut_contact_removed_message (6845645831837615899) -->
+    <skip />
 </resources>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index 3ca1fd1..0fd269c 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -67,6 +67,7 @@
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Contactos sugeridos"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Todos los contactos"</string>
     <string name="contactsJoinedMessage" msgid="3343535986195643136">"Se vincularon los contactos"</string>
+    <string name="contact_deleted_named_toast" msgid="6558941164987421174">"<xliff:g id="NAME">%s</xliff:g> borrado"</string>
     <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
       <item quantity="other">Contactos borrados</item>
       <item quantity="one">Contacto borrado</item>
@@ -113,11 +114,11 @@
     <string name="emptyMainList" msgid="2772242747899664460">"Tu lista de contactos está vacía"</string>
     <string name="contactSavedToast" msgid="9171862279493213075">"Contacto guardado"</string>
     <string name="contactUnlinkedToast" msgid="7122823195786012553">"Contactos desvinculados"</string>
-    <string name="contactSavedErrorToast" msgid="3207250533172944892">"No se pudieron guardar los cambios realizados al contacto."</string>
-    <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"No se pudo desvincular el contacto."</string>
-    <string name="contactJoinErrorToast" msgid="3977932531264809035">"No se pudo vincular el contacto."</string>
-    <string name="contactGenericErrorToast" msgid="7774911165341591714">"Se produjo un error al guardar el contacto."</string>
-    <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"No se pudieron guardar los cambios que se realizaron en la foto de contacto."</string>
+    <string name="contactSavedErrorToast" msgid="4827033473908688031">"No se pudieron guardar los cambios en el contacto"</string>
+    <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"No se pudo desvincular el contacto"</string>
+    <string name="contactJoinErrorToast" msgid="5735129234573327701">"No se pudo vincular el contacto"</string>
+    <string name="contactGenericErrorToast" msgid="3885457515665783976">"Se produjo un error al guardar el contacto"</string>
+    <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"No se pudieron guardar los cambios en la foto del contacto"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"No se pudo cargar la etiqueta"</string>
     <string name="groupSavedToast" msgid="6491495462357722285">"Etiqueta guardada"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Se borró la etiqueta"</string>
@@ -126,7 +127,7 @@
     <string name="groupUpdatedToast" msgid="3667977658676267687">"Se actualizó la etiqueta"</string>
     <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Eliminado de la etiqueta"</string>
     <string name="groupMembersAddedToast" msgid="4824834898718972768">"Agregado a la etiqueta"</string>
-    <string name="groupSavedErrorToast" msgid="8121032018490980184">"No se pudieron guardar los cambios en la etiqueta."</string>
+    <string name="groupSavedErrorToast" msgid="2355891714292740162">"No se pudieron guardar los cambios en la etiqueta"</string>
     <string name="groupExistsErrorMessage" msgid="5196811283836946189">"Esa etiqueta ya existe"</string>
     <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
       <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> contactos con números de teléfono</item>
@@ -147,7 +148,6 @@
     <string name="callAgain" msgid="3197312117049874778">"Llamar nuevamente"</string>
     <string name="returnCall" msgid="8171961914203617813">"Regresar llamada"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"¿Deseas agregar \"<xliff:g id="EMAIL">%s</xliff:g>\" a los contactos?"</string>
-    <string name="description_contact_photo" msgid="3387458082667894062">"foto de contacto"</string>
     <string name="description_plus_button" msgid="515164827856229880">"más"</string>
     <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> de <xliff:g id="TOTAL_NUMBER">%s</xliff:g> contactos"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"Nombres de tus contactos"</string>
@@ -192,7 +192,6 @@
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Fecha"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Etiqueta"</string>
     <string name="change_photo" msgid="8530597935483526383">"Cambiar"</string>
-    <string name="primary_photo" msgid="8517942231868516999">"Foto principal"</string>
     <string name="description_star" msgid="2605854427360036550">"favorito"</string>
     <string name="edit_contact" msgid="7529281274005689512">"Editar contacto"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"cerrar"</string>
@@ -269,7 +268,6 @@
     <string name="header_name_entry" msgid="1592791008096288306">"Nombre"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"Correo electrónico"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"Teléfono"</string>
-    <string name="header_photo_entry" msgid="4438023151411853238">"Foto"</string>
     <string name="content_description_expand_editor" msgid="1111381475901897470">"Haz clic aquí para expandir el editor de contacto."</string>
     <string name="content_description_collapse_editor" msgid="7598061318022977825">"Haz clic aquí para contraer el editor de contacto."</string>
     <string name="content_description_directions" msgid="2686791825798189335">"instrucciones sobre cómo llegar a la ubicación"</string>
@@ -284,6 +282,8 @@
     <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Cambiar foto"</string>
     <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"No se pudo abrir el editor."</string>
     <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Se guarda en"</string>
+    <!-- no translation found for compact_editor_account_selector_read_only_title (1869435992721760221) -->
+    <skip />
     <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"Actualmente los contactos se guardan en <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Presiona dos veces para elegir otra cuenta."</string>
     <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
       <item quantity="other">Contactos vinculados (<xliff:g id="COUNT">%d</xliff:g>)</item>
@@ -454,22 +454,14 @@
     <string name="chat_jabber" msgid="7561444230307829609">"Chat mediante Jabber"</string>
     <string name="chat" msgid="9025361898797412245">"Chat"</string>
     <string name="description_minus_button" msgid="6908099247930477551">"Eliminar"</string>
-    <!-- no translation found for expand_name_fields_description (6883935911480726652) -->
-    <skip />
-    <!-- no translation found for collapse_name_fields_description (4757877385895561556) -->
-    <skip />
-    <!-- no translation found for expand_phonetic_name_fields_description (3865726859582581741) -->
-    <skip />
-    <!-- no translation found for collapse_phonetic_name_fields_description (9102249481855019452) -->
-    <skip />
-    <!-- no translation found for expand_fields_description (8129294181216760037) -->
-    <skip />
-    <!-- no translation found for collapse_fields_description (1884143625854637874) -->
-    <skip />
-    <!-- no translation found for announce_expanded_fields (1075947220478530622) -->
-    <skip />
-    <!-- no translation found for announce_collapsed_fields (6414231530177338704) -->
-    <skip />
+    <string name="expand_name_fields_description" msgid="6883935911480726652">"Expandir campos de nombre"</string>
+    <string name="collapse_name_fields_description" msgid="4757877385895561556">"Contraer campos de nombre"</string>
+    <string name="expand_phonetic_name_fields_description" msgid="3865726859582581741">"Expandir campos de nombre fonético"</string>
+    <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Contraer campos de nombre fonético"</string>
+    <string name="expand_fields_description" msgid="8129294181216760037">"Expandir"</string>
+    <string name="collapse_fields_description" msgid="1884143625854637874">"Contraer"</string>
+    <string name="announce_expanded_fields" msgid="1075947220478530622">"Expandido"</string>
+    <string name="announce_collapsed_fields" msgid="6414231530177338704">"Contraído"</string>
     <string name="list_filter_all_accounts" msgid="8908683398914322369">"Todos los contactos"</string>
     <string name="list_filter_all_starred" msgid="5031734941601931356">"Destacado"</string>
     <string name="list_filter_customize" msgid="4789963356004169321">"Personalizar"</string>
@@ -555,7 +547,8 @@
     <string name="share_favorite_contacts" msgid="4280926751003081042">"Compartir contactos favoritos"</string>
     <string name="share_contacts" msgid="8109287987498711664">"Compartir todos los contactos"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"No se pudieron compartir los contactos."</string>
-    <string name="dialog_import_export" msgid="4360648034889921624">"Imp./exp. contactos"</string>
+    <!-- no translation found for dialog_export (1628001095187741417) -->
+    <skip />
     <string name="dialog_import" msgid="2431698729761448759">"Importar contactos"</string>
     <string name="share_error" msgid="948429331673358107">"No es posible compartir este contacto."</string>
     <string name="no_contact_to_share" msgid="1276397530378323033">"No hay contactos para compartir."</string>
@@ -570,7 +563,10 @@
     <string name="menu_clear_frequents" msgid="7688250191932838833">"Borrar contactos frecuentes"</string>
     <string name="menu_select_sim" msgid="3603578201960504010">"Seleccionar tarjeta SIM"</string>
     <string name="menu_accounts" msgid="1424330057450189074">"Administrar cuentas"</string>
-    <string name="menu_import_export" msgid="26217871113229507">"Importar/Exportar"</string>
+    <!-- no translation found for menu_import (6107961135813836467) -->
+    <skip />
+    <!-- no translation found for menu_export (2658783911863503902) -->
+    <skip />
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"Números bloqueados"</string>
     <string name="contact_status_update_attribution" msgid="752179367353018597">"a través de <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> a través de <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
@@ -604,4 +600,8 @@
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> s"</string>
     <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
     <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> h <xliff:g id="MINUTES_1">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
+    <!-- no translation found for dynamic_shortcut_disabled_message (249939425761315252) -->
+    <skip />
+    <!-- no translation found for dynamic_shortcut_contact_removed_message (6845645831837615899) -->
+    <skip />
 </resources>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index 5511fe0..aa62a01 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -67,6 +67,7 @@
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Contactos sugeridos"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Todos los contactos"</string>
     <string name="contactsJoinedMessage" msgid="3343535986195643136">"Contactos enlazados"</string>
+    <string name="contact_deleted_named_toast" msgid="6558941164987421174">"Se ha eliminado a <xliff:g id="NAME">%s</xliff:g>"</string>
     <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
       <item quantity="other">Contactos eliminados</item>
       <item quantity="one">Contacto eliminado</item>
@@ -113,11 +114,11 @@
     <string name="emptyMainList" msgid="2772242747899664460">"La lista de contactos está vacía"</string>
     <string name="contactSavedToast" msgid="9171862279493213075">"Contacto guardado"</string>
     <string name="contactUnlinkedToast" msgid="7122823195786012553">"Contactos desvinculados"</string>
-    <string name="contactSavedErrorToast" msgid="3207250533172944892">"No se han guardado los cambios del contacto."</string>
-    <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"No se ha podido desvincular el contacto."</string>
-    <string name="contactJoinErrorToast" msgid="3977932531264809035">"No se ha podido vincular el contacto."</string>
-    <string name="contactGenericErrorToast" msgid="7774911165341591714">"Error al guardar contacto."</string>
-    <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"No se han podido guardar los cambios de la foto de contacto."</string>
+    <string name="contactSavedErrorToast" msgid="4827033473908688031">"No se han podido guardar los cambios en el contacto"</string>
+    <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"No se ha podido desvincular el contacto"</string>
+    <string name="contactJoinErrorToast" msgid="5735129234573327701">"No se ha podido enlazar el contacto"</string>
+    <string name="contactGenericErrorToast" msgid="3885457515665783976">"No se ha podido guardar el contacto"</string>
+    <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"No se han podido guardar los cambios en la foto del contacto"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"No se ha podido cargar la etiqueta"</string>
     <string name="groupSavedToast" msgid="6491495462357722285">"Etiqueta guardada"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Etiqueta eliminada"</string>
@@ -126,7 +127,7 @@
     <string name="groupUpdatedToast" msgid="3667977658676267687">"Etiqueta actualizada"</string>
     <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Eliminados de la etiqueta"</string>
     <string name="groupMembersAddedToast" msgid="4824834898718972768">"Añadido a la etiqueta"</string>
-    <string name="groupSavedErrorToast" msgid="8121032018490980184">"No se han podido guardar los cambios de la etiqueta."</string>
+    <string name="groupSavedErrorToast" msgid="2355891714292740162">"No se han podido guardar los cambios en la etiqueta"</string>
     <string name="groupExistsErrorMessage" msgid="5196811283836946189">"Esta etiqueta ya existe"</string>
     <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
       <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> contactos con número de teléfono</item>
@@ -147,7 +148,6 @@
     <string name="callAgain" msgid="3197312117049874778">"Volver a llamar"</string>
     <string name="returnCall" msgid="8171961914203617813">"Devolver llamada"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"¿Quieres añadir \"<xliff:g id="EMAIL">%s</xliff:g>\" a Contactos?"</string>
-    <string name="description_contact_photo" msgid="3387458082667894062">"foto de contacto"</string>
     <string name="description_plus_button" msgid="515164827856229880">"más"</string>
     <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> de <xliff:g id="TOTAL_NUMBER">%s</xliff:g> contactos"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"Nombres de tus contactos"</string>
@@ -192,7 +192,6 @@
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Fecha"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Etiqueta"</string>
     <string name="change_photo" msgid="8530597935483526383">"Cambiar"</string>
-    <string name="primary_photo" msgid="8517942231868516999">"Foto principal"</string>
     <string name="description_star" msgid="2605854427360036550">"favoritos"</string>
     <string name="edit_contact" msgid="7529281274005689512">"Editar contacto"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"cerrar"</string>
@@ -269,7 +268,6 @@
     <string name="header_name_entry" msgid="1592791008096288306">"Nombre"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"Correo electrónico"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"Teléfono"</string>
-    <string name="header_photo_entry" msgid="4438023151411853238">"Foto"</string>
     <string name="content_description_expand_editor" msgid="1111381475901897470">"Haz clic para ampliar el editor de contactos."</string>
     <string name="content_description_collapse_editor" msgid="7598061318022977825">"Haz clic para contraer el editor de contactos."</string>
     <string name="content_description_directions" msgid="2686791825798189335">"indicaciones para llegar a la ubicación"</string>
@@ -284,6 +282,8 @@
     <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Cambiar foto"</string>
     <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Error al abrir el editor."</string>
     <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Se guarda en"</string>
+    <!-- no translation found for compact_editor_account_selector_read_only_title (1869435992721760221) -->
+    <skip />
     <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"Actualmente los contactos se guardan en <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Toca dos veces para seleccionar otra cuenta."</string>
     <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
       <item quantity="other">Contactos enlazados (<xliff:g id="COUNT">%d</xliff:g>)</item>
@@ -454,22 +454,14 @@
     <string name="chat_jabber" msgid="7561444230307829609">"Chatear con Jabber"</string>
     <string name="chat" msgid="9025361898797412245">"Chat"</string>
     <string name="description_minus_button" msgid="6908099247930477551">"eliminar"</string>
-    <!-- no translation found for expand_name_fields_description (6883935911480726652) -->
-    <skip />
-    <!-- no translation found for collapse_name_fields_description (4757877385895561556) -->
-    <skip />
-    <!-- no translation found for expand_phonetic_name_fields_description (3865726859582581741) -->
-    <skip />
-    <!-- no translation found for collapse_phonetic_name_fields_description (9102249481855019452) -->
-    <skip />
-    <!-- no translation found for expand_fields_description (8129294181216760037) -->
-    <skip />
-    <!-- no translation found for collapse_fields_description (1884143625854637874) -->
-    <skip />
-    <!-- no translation found for announce_expanded_fields (1075947220478530622) -->
-    <skip />
-    <!-- no translation found for announce_collapsed_fields (6414231530177338704) -->
-    <skip />
+    <string name="expand_name_fields_description" msgid="6883935911480726652">"Mostrar los campos de nombre"</string>
+    <string name="collapse_name_fields_description" msgid="4757877385895561556">"Ocultar los campos de nombre"</string>
+    <string name="expand_phonetic_name_fields_description" msgid="3865726859582581741">"Mostrar los campos de nombre fonético"</string>
+    <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Ocultar los campos de nombre fonético"</string>
+    <string name="expand_fields_description" msgid="8129294181216760037">"Mostrar"</string>
+    <string name="collapse_fields_description" msgid="1884143625854637874">"Ocultar"</string>
+    <string name="announce_expanded_fields" msgid="1075947220478530622">"Mostrados"</string>
+    <string name="announce_collapsed_fields" msgid="6414231530177338704">"Ocultados"</string>
     <string name="list_filter_all_accounts" msgid="8908683398914322369">"Todos los contactos"</string>
     <string name="list_filter_all_starred" msgid="5031734941601931356">"Destacados"</string>
     <string name="list_filter_customize" msgid="4789963356004169321">"Personalizar"</string>
@@ -555,7 +547,8 @@
     <string name="share_favorite_contacts" msgid="4280926751003081042">"Compartir contactos favoritos"</string>
     <string name="share_contacts" msgid="8109287987498711664">"Compartir todos los contactos"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"No se han podido compartir contactos."</string>
-    <string name="dialog_import_export" msgid="4360648034889921624">"Importar/exportar contactos"</string>
+    <!-- no translation found for dialog_export (1628001095187741417) -->
+    <skip />
     <string name="dialog_import" msgid="2431698729761448759">"Importar contactos"</string>
     <string name="share_error" msgid="948429331673358107">"No se puede compartir este contacto."</string>
     <string name="no_contact_to_share" msgid="1276397530378323033">"No hay contactos que compartir."</string>
@@ -570,7 +563,10 @@
     <string name="menu_clear_frequents" msgid="7688250191932838833">"Borrar frecuentes"</string>
     <string name="menu_select_sim" msgid="3603578201960504010">"Seleccionar tarjeta SIM"</string>
     <string name="menu_accounts" msgid="1424330057450189074">"Administrar cuentas"</string>
-    <string name="menu_import_export" msgid="26217871113229507">"Importar/exportar"</string>
+    <!-- no translation found for menu_import (6107961135813836467) -->
+    <skip />
+    <!-- no translation found for menu_export (2658783911863503902) -->
+    <skip />
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"Números bloqueados"</string>
     <string name="contact_status_update_attribution" msgid="752179367353018597">"con <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> con <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
@@ -604,4 +600,8 @@
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> s"</string>
     <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
     <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> h <xliff:g id="MINUTES_1">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
+    <!-- no translation found for dynamic_shortcut_disabled_message (249939425761315252) -->
+    <skip />
+    <!-- no translation found for dynamic_shortcut_contact_removed_message (6845645831837615899) -->
+    <skip />
 </resources>
diff --git a/res/values-et-rEE/strings.xml b/res/values-et-rEE/strings.xml
index d33d0f3..4996771 100644
--- a/res/values-et-rEE/strings.xml
+++ b/res/values-et-rEE/strings.xml
@@ -67,6 +67,7 @@
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Soovitatud kontaktid"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Kõik kontaktid"</string>
     <string name="contactsJoinedMessage" msgid="3343535986195643136">"Kontaktid lingiti"</string>
+    <string name="contact_deleted_named_toast" msgid="6558941164987421174">"<xliff:g id="NAME">%s</xliff:g> on kustutatud"</string>
     <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
       <item quantity="other">Kontaktid kustutati</item>
       <item quantity="one">Kontakt kustutati</item>
@@ -113,11 +114,11 @@
     <string name="emptyMainList" msgid="2772242747899664460">"Teie kontaktiloend on tühi"</string>
     <string name="contactSavedToast" msgid="9171862279493213075">"Kontakt on salvestatud."</string>
     <string name="contactUnlinkedToast" msgid="7122823195786012553">"Kontaktide linkimine tühistati"</string>
-    <string name="contactSavedErrorToast" msgid="3207250533172944892">"Kontaktide muudatuste salvestamine ebaõnnestus."</string>
-    <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Kontakti linkimist ei saanud tühistada."</string>
-    <string name="contactJoinErrorToast" msgid="3977932531264809035">"Kontakti ei saanud linkida."</string>
-    <string name="contactGenericErrorToast" msgid="7774911165341591714">"Viga kontakti salvestamisel."</string>
-    <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"Kontakti foto muudatusi ei õnnestunud salvestada."</string>
+    <string name="contactSavedErrorToast" msgid="4827033473908688031">"Kontakti muudatusi ei õnnestunud salvestada"</string>
+    <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"Kontakti linkimist ei õnnestunud tühistada"</string>
+    <string name="contactJoinErrorToast" msgid="5735129234573327701">"Kontakti ei saanud linkida"</string>
+    <string name="contactGenericErrorToast" msgid="3885457515665783976">"Viga kontakti salvestamisel"</string>
+    <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Kontakti foto muudatusi ei õnnestunud salvestada"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"Sildi laadimine ebaõnnestus"</string>
     <string name="groupSavedToast" msgid="6491495462357722285">"Silt on salvestatud"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Silt on kustutatud"</string>
@@ -126,7 +127,7 @@
     <string name="groupUpdatedToast" msgid="3667977658676267687">"Silt on värskendatud"</string>
     <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Eemaldatud sildilt"</string>
     <string name="groupMembersAddedToast" msgid="4824834898718972768">"Lisati sildile"</string>
-    <string name="groupSavedErrorToast" msgid="8121032018490980184">"Sildi muudatusi ei õnnestunud salvestada."</string>
+    <string name="groupSavedErrorToast" msgid="2355891714292740162">"Sildi muudatusi ei õnnestunud salvestada"</string>
     <string name="groupExistsErrorMessage" msgid="5196811283836946189">"See silt on juba olemas"</string>
     <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
       <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> telefoninumbriga kontakti</item>
@@ -147,7 +148,6 @@
     <string name="callAgain" msgid="3197312117049874778">"Helista uuesti"</string>
     <string name="returnCall" msgid="8171961914203617813">"Tagasihelistamine"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Kas lisada „<xliff:g id="EMAIL">%s</xliff:g>” kontaktidesse?"</string>
-    <string name="description_contact_photo" msgid="3387458082667894062">"kontakti foto"</string>
     <string name="description_plus_button" msgid="515164827856229880">"pluss"</string>
     <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%s</xliff:g> kontaktist"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"Teie kontaktide nimed"</string>
@@ -192,7 +192,6 @@
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Kuupäev"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Silt"</string>
     <string name="change_photo" msgid="8530597935483526383">"Muuda"</string>
-    <string name="primary_photo" msgid="8517942231868516999">"Põhifoto"</string>
     <string name="description_star" msgid="2605854427360036550">"lemmik"</string>
     <string name="edit_contact" msgid="7529281274005689512">"Muuda kontakti"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"sule"</string>
@@ -269,7 +268,6 @@
     <string name="header_name_entry" msgid="1592791008096288306">"Nimi"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"E-post"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"Telefon"</string>
-    <string name="header_photo_entry" msgid="4438023151411853238">"Foto"</string>
     <string name="content_description_expand_editor" msgid="1111381475901897470">"Klõpsake kontaktiredigeerija laiendamiseks."</string>
     <string name="content_description_collapse_editor" msgid="7598061318022977825">"Klõpsake kontaktiredigeerija ahendamiseks."</string>
     <string name="content_description_directions" msgid="2686791825798189335">"juhised asukohta"</string>
@@ -284,6 +282,8 @@
     <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Foto vahetamine"</string>
     <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Redigeerija avamine nurjus."</string>
     <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Salvestamine asukohta"</string>
+    <!-- no translation found for compact_editor_account_selector_read_only_title (1869435992721760221) -->
+    <skip />
     <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"Praegu salvestatakse kontole <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Teise konto valimiseks topeltpuudutage."</string>
     <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
       <item quantity="other">Lingitud kontaktid (<xliff:g id="COUNT">%d</xliff:g>)</item>
@@ -454,22 +454,14 @@
     <string name="chat_jabber" msgid="7561444230307829609">"Vestle Jabberi abil"</string>
     <string name="chat" msgid="9025361898797412245">"Vestlus"</string>
     <string name="description_minus_button" msgid="6908099247930477551">"kustutamine"</string>
-    <!-- no translation found for expand_name_fields_description (6883935911480726652) -->
-    <skip />
-    <!-- no translation found for collapse_name_fields_description (4757877385895561556) -->
-    <skip />
-    <!-- no translation found for expand_phonetic_name_fields_description (3865726859582581741) -->
-    <skip />
-    <!-- no translation found for collapse_phonetic_name_fields_description (9102249481855019452) -->
-    <skip />
-    <!-- no translation found for expand_fields_description (8129294181216760037) -->
-    <skip />
-    <!-- no translation found for collapse_fields_description (1884143625854637874) -->
-    <skip />
-    <!-- no translation found for announce_expanded_fields (1075947220478530622) -->
-    <skip />
-    <!-- no translation found for announce_collapsed_fields (6414231530177338704) -->
-    <skip />
+    <string name="expand_name_fields_description" msgid="6883935911480726652">"Nimeväljade laiendamine"</string>
+    <string name="collapse_name_fields_description" msgid="4757877385895561556">"Nimeväljade ahendamine"</string>
+    <string name="expand_phonetic_name_fields_description" msgid="3865726859582581741">"Foneetiliste nimede väljade laiendamine"</string>
+    <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Foneetiliste nimede väljade ahendamine"</string>
+    <string name="expand_fields_description" msgid="8129294181216760037">"Laiendamine"</string>
+    <string name="collapse_fields_description" msgid="1884143625854637874">"Ahendamine"</string>
+    <string name="announce_expanded_fields" msgid="1075947220478530622">"Laiendatud"</string>
+    <string name="announce_collapsed_fields" msgid="6414231530177338704">"Ahendatud"</string>
     <string name="list_filter_all_accounts" msgid="8908683398914322369">"Kõik kontaktid"</string>
     <string name="list_filter_all_starred" msgid="5031734941601931356">"Tärniga tähistatud"</string>
     <string name="list_filter_customize" msgid="4789963356004169321">"Kohanda"</string>
@@ -555,7 +547,8 @@
     <string name="share_favorite_contacts" msgid="4280926751003081042">"Jaga lemmikkontakte"</string>
     <string name="share_contacts" msgid="8109287987498711664">"Jaga kõiki kontakte"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"Kontaktide jagamine ebaõnnestus."</string>
-    <string name="dialog_import_export" msgid="4360648034889921624">"Kontaktide import/eksport"</string>
+    <!-- no translation found for dialog_export (1628001095187741417) -->
+    <skip />
     <string name="dialog_import" msgid="2431698729761448759">"Kontaktide importimine"</string>
     <string name="share_error" msgid="948429331673358107">"Seda kontakti ei saa jagada."</string>
     <string name="no_contact_to_share" msgid="1276397530378323033">"Jagamiseks ei ole ühtki kontakti."</string>
@@ -570,7 +563,10 @@
     <string name="menu_clear_frequents" msgid="7688250191932838833">"Sagedaste kustutamine"</string>
     <string name="menu_select_sim" msgid="3603578201960504010">"SIM-kaardi valimine"</string>
     <string name="menu_accounts" msgid="1424330057450189074">"Kontode haldamine"</string>
-    <string name="menu_import_export" msgid="26217871113229507">"Import/eksport"</string>
+    <!-- no translation found for menu_import (6107961135813836467) -->
+    <skip />
+    <!-- no translation found for menu_export (2658783911863503902) -->
+    <skip />
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"Blokeeritud numbrid"</string>
     <string name="contact_status_update_attribution" msgid="752179367353018597">"allika <xliff:g id="SOURCE">%1$s</xliff:g> kaudu"</string>
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> allika <xliff:g id="SOURCE">%2$s</xliff:g> kaudu"</string>
@@ -604,4 +600,8 @@
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> s"</string>
     <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
     <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> h <xliff:g id="MINUTES_1">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
+    <!-- no translation found for dynamic_shortcut_disabled_message (249939425761315252) -->
+    <skip />
+    <!-- no translation found for dynamic_shortcut_contact_removed_message (6845645831837615899) -->
+    <skip />
 </resources>
diff --git a/res/values-eu-rES/strings.xml b/res/values-eu-rES/strings.xml
index 54b991c..91b170f 100644
--- a/res/values-eu-rES/strings.xml
+++ b/res/values-eu-rES/strings.xml
@@ -67,6 +67,7 @@
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Gomendatutako kontaktuak"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Kontaktu guztiak"</string>
     <string name="contactsJoinedMessage" msgid="3343535986195643136">"Estekatu dira kontaktuak"</string>
+    <string name="contact_deleted_named_toast" msgid="6558941164987421174">"Ezabatu da <xliff:g id="NAME">%s</xliff:g>"</string>
     <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
       <item quantity="other">Ezabatu dira kontaktuak</item>
       <item quantity="one">Ezabatu da kontaktua</item>
@@ -113,11 +114,11 @@
     <string name="emptyMainList" msgid="2772242747899664460">"Hutsik dago kontaktuen zerrenda"</string>
     <string name="contactSavedToast" msgid="9171862279493213075">"Gorde da kontaktua"</string>
     <string name="contactUnlinkedToast" msgid="7122823195786012553">"Kendu da kontaktuen lotura"</string>
-    <string name="contactSavedErrorToast" msgid="3207250533172944892">"Ezin izan dira gorde kontaktuari egindako aldaketak."</string>
-    <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Ezin izan da kendu kontaktuaren lotura."</string>
-    <string name="contactJoinErrorToast" msgid="3977932531264809035">"Ezin izan da lotu kontaktua."</string>
-    <string name="contactGenericErrorToast" msgid="7774911165341591714">"Errore bat gertatu da kontaktua gordetzean."</string>
-    <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"Ezin izan dira gorde kontaktuaren argazkiari egindako aldaketak."</string>
+    <string name="contactSavedErrorToast" msgid="4827033473908688031">"Ezin izan dira gorde kontaktuari egindako aldaketak"</string>
+    <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"Ezin izan da kendu kontaktuaren lotura"</string>
+    <string name="contactJoinErrorToast" msgid="5735129234573327701">"Ezin izan da lotu kontaktua"</string>
+    <string name="contactGenericErrorToast" msgid="3885457515665783976">"Errore bat gertatu da kontaktua gordetzean"</string>
+    <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Ezin izan dira gorde kontaktuaren argazkiari egindako aldaketak"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"Ezin izan da kargatu etiketa"</string>
     <string name="groupSavedToast" msgid="6491495462357722285">"Gorde da etiketa"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Ezabatu da etiketa"</string>
@@ -126,7 +127,7 @@
     <string name="groupUpdatedToast" msgid="3667977658676267687">"Eguneratu da etiketa"</string>
     <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Kendu dira etiketatik"</string>
     <string name="groupMembersAddedToast" msgid="4824834898718972768">"Gehitu d(ir)a etiketan"</string>
-    <string name="groupSavedErrorToast" msgid="8121032018490980184">"Ezin izan dira gorde etiketen aldaketak."</string>
+    <string name="groupSavedErrorToast" msgid="2355891714292740162">"Ezin izan dira gorde etiketen aldaketak"</string>
     <string name="groupExistsErrorMessage" msgid="5196811283836946189">"Badago etiketa"</string>
     <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
       <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> kontaktuk telefono-zenbakia dute</item>
@@ -147,7 +148,6 @@
     <string name="callAgain" msgid="3197312117049874778">"Deitu berriro"</string>
     <string name="returnCall" msgid="8171961914203617813">"Itzuli deia"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"\"<xliff:g id="EMAIL">%s</xliff:g>\" kontaktuetan gehitu?"</string>
-    <string name="description_contact_photo" msgid="3387458082667894062">"kontaktuaren argazkia"</string>
     <string name="description_plus_button" msgid="515164827856229880">"gehi"</string>
     <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%s</xliff:g> kontaktu"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"Kontaktuen izenak"</string>
@@ -192,7 +192,6 @@
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Data"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Etiketa"</string>
     <string name="change_photo" msgid="8530597935483526383">"Aldatu"</string>
-    <string name="primary_photo" msgid="8517942231868516999">"Argazki nagusia"</string>
     <string name="description_star" msgid="2605854427360036550">"gogokoa"</string>
     <string name="edit_contact" msgid="7529281274005689512">"Editatu kontaktua"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"itxi"</string>
@@ -269,7 +268,6 @@
     <string name="header_name_entry" msgid="1592791008096288306">"Izena"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"Helbide elektronikoa"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"Telefonoa"</string>
-    <string name="header_photo_entry" msgid="4438023151411853238">"Argazkia"</string>
     <string name="content_description_expand_editor" msgid="1111381475901897470">"Egin klik kontaktuen editorea zabaltzeko."</string>
     <string name="content_description_collapse_editor" msgid="7598061318022977825">"Egin klik kontaktuen editorea tolesteko."</string>
     <string name="content_description_directions" msgid="2686791825798189335">"kokapenerako jarraibideak"</string>
@@ -284,6 +282,8 @@
     <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Aldatu argazkia"</string>
     <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Ezin izan da ireki editorea."</string>
     <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Gorde hemen:"</string>
+    <!-- no translation found for compact_editor_account_selector_read_only_title (1869435992721760221) -->
+    <skip />
     <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"<xliff:g id="ACCOUNT_NAME">%s</xliff:g> kontuan gordetzen dira kontaktuak. Beste kontu bat hautatzeko, sakatu birritan."</string>
     <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
       <item quantity="other">Lotutako kontaktuak (<xliff:g id="COUNT">%d</xliff:g>)</item>
@@ -454,22 +454,14 @@
     <string name="chat_jabber" msgid="7561444230307829609">"Txateatu Jabber bidez"</string>
     <string name="chat" msgid="9025361898797412245">"Txata"</string>
     <string name="description_minus_button" msgid="6908099247930477551">"ezabatu"</string>
-    <!-- no translation found for expand_name_fields_description (6883935911480726652) -->
-    <skip />
-    <!-- no translation found for collapse_name_fields_description (4757877385895561556) -->
-    <skip />
-    <!-- no translation found for expand_phonetic_name_fields_description (3865726859582581741) -->
-    <skip />
-    <!-- no translation found for collapse_phonetic_name_fields_description (9102249481855019452) -->
-    <skip />
-    <!-- no translation found for expand_fields_description (8129294181216760037) -->
-    <skip />
-    <!-- no translation found for collapse_fields_description (1884143625854637874) -->
-    <skip />
-    <!-- no translation found for announce_expanded_fields (1075947220478530622) -->
-    <skip />
-    <!-- no translation found for announce_collapsed_fields (6414231530177338704) -->
-    <skip />
+    <string name="expand_name_fields_description" msgid="6883935911480726652">"Zabaldu izenen eremuak"</string>
+    <string name="collapse_name_fields_description" msgid="4757877385895561556">"Tolestu izenen eremuak"</string>
+    <string name="expand_phonetic_name_fields_description" msgid="3865726859582581741">"Zabaldu izen fonetikoen eremuak"</string>
+    <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Tolestu izen fonetikoen eremuak"</string>
+    <string name="expand_fields_description" msgid="8129294181216760037">"Zabaldu"</string>
+    <string name="collapse_fields_description" msgid="1884143625854637874">"Tolestu"</string>
+    <string name="announce_expanded_fields" msgid="1075947220478530622">"Zabaldu da"</string>
+    <string name="announce_collapsed_fields" msgid="6414231530177338704">"Tolestu da"</string>
     <string name="list_filter_all_accounts" msgid="8908683398914322369">"Kontaktu guztiak"</string>
     <string name="list_filter_all_starred" msgid="5031734941601931356">"Izardunak"</string>
     <string name="list_filter_customize" msgid="4789963356004169321">"Pertsonalizatua"</string>
@@ -555,7 +547,8 @@
     <string name="share_favorite_contacts" msgid="4280926751003081042">"Partekatu gogoko kontaktuak"</string>
     <string name="share_contacts" msgid="8109287987498711664">"Partekatu kontaktu guztiak"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"Ezin izan dira partekatu kontaktuak."</string>
-    <string name="dialog_import_export" msgid="4360648034889921624">"Inportatu edo esportatu kontaktuak"</string>
+    <!-- no translation found for dialog_export (1628001095187741417) -->
+    <skip />
     <string name="dialog_import" msgid="2431698729761448759">"Inportatu kontaktuak"</string>
     <string name="share_error" msgid="948429331673358107">"Ezin da kontaktua partekatu."</string>
     <string name="no_contact_to_share" msgid="1276397530378323033">"Ez dago parteka daitekeen kontakturik."</string>
@@ -570,7 +563,10 @@
     <string name="menu_clear_frequents" msgid="7688250191932838833">"Garbitu sarri erabilitakoak"</string>
     <string name="menu_select_sim" msgid="3603578201960504010">"Hautatu SIM txartela"</string>
     <string name="menu_accounts" msgid="1424330057450189074">"Kudeatu kontuak"</string>
-    <string name="menu_import_export" msgid="26217871113229507">"Inportatu/Esportatu"</string>
+    <!-- no translation found for menu_import (6107961135813836467) -->
+    <skip />
+    <!-- no translation found for menu_export (2658783911863503902) -->
+    <skip />
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"Blokeatutako zenbakiak"</string>
     <string name="contact_status_update_attribution" msgid="752179367353018597">"<xliff:g id="SOURCE">%1$s</xliff:g> bidez"</string>
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="SOURCE">%2$s</xliff:g> bidez"</string>
@@ -604,4 +600,8 @@
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> s"</string>
     <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
     <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> h <xliff:g id="MINUTES_1">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
+    <!-- no translation found for dynamic_shortcut_disabled_message (249939425761315252) -->
+    <skip />
+    <!-- no translation found for dynamic_shortcut_contact_removed_message (6845645831837615899) -->
+    <skip />
 </resources>
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
index ae74b6c..69173ca 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -67,6 +67,7 @@
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"مخاطبین پیشنهادی"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"همه مخاطبین"</string>
     <string name="contactsJoinedMessage" msgid="3343535986195643136">"مخاطبین پیوند داده شدند"</string>
+    <string name="contact_deleted_named_toast" msgid="6558941164987421174">"<xliff:g id="NAME">%s</xliff:g> حذف شد"</string>
     <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
       <item quantity="one">مخاطب حذف شد</item>
       <item quantity="other">مخاطب حذف شد</item>
@@ -113,11 +114,11 @@
     <string name="emptyMainList" msgid="2772242747899664460">"فهرست مخاطبینتان خالی است"</string>
     <string name="contactSavedToast" msgid="9171862279493213075">"مخاطب ذخیره شد"</string>
     <string name="contactUnlinkedToast" msgid="7122823195786012553">"ارتباط مخاطبین لغو شد."</string>
-    <string name="contactSavedErrorToast" msgid="3207250533172944892">"ذخیره تغییرات مخاطب انجام نشد."</string>
-    <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"مخاطب جدا نشد."</string>
-    <string name="contactJoinErrorToast" msgid="3977932531264809035">"مخاطب پیوند داده نشد."</string>
-    <string name="contactGenericErrorToast" msgid="7774911165341591714">"خطا هنگام ذخیره مخاطب."</string>
-    <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"ذخیره تغییرات عکس مخاطب انجام نشد."</string>
+    <string name="contactSavedErrorToast" msgid="4827033473908688031">"تغییرات مخاطب ذخیره نشد"</string>
+    <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"مخاطب لغو پیوند نشد"</string>
+    <string name="contactJoinErrorToast" msgid="5735129234573327701">"مخاطب پیوند داده نشد"</string>
+    <string name="contactGenericErrorToast" msgid="3885457515665783976">"خطا در ذخیره مخاطب"</string>
+    <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"تغییرات عکس مخاطب ذخیره نشد"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"برچسب بار نشد"</string>
     <string name="groupSavedToast" msgid="6491495462357722285">"برچسب ذخیره شد"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"برچسب حذف شد"</string>
@@ -126,7 +127,7 @@
     <string name="groupUpdatedToast" msgid="3667977658676267687">"برچسب به‌روزرسانی شد"</string>
     <string name="groupMembersRemovedToast" msgid="3510563559799376603">"از برچسب حذف شد"</string>
     <string name="groupMembersAddedToast" msgid="4824834898718972768">"به برچسب اضافه شد"</string>
-    <string name="groupSavedErrorToast" msgid="8121032018490980184">"تغییرات برچسب ذخیره نشد."</string>
+    <string name="groupSavedErrorToast" msgid="2355891714292740162">"تغییرات برچسب ذخیره نشد"</string>
     <string name="groupExistsErrorMessage" msgid="5196811283836946189">"این برچسب از قبل موجود است"</string>
     <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
       <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> مخاطب با شماره تلفن</item>
@@ -147,7 +148,6 @@
     <string name="callAgain" msgid="3197312117049874778">"تماس مجدد"</string>
     <string name="returnCall" msgid="8171961914203617813">"برگرداندن تماس"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"\"<xliff:g id="EMAIL">%s</xliff:g>\" به مخاطبین افزوده شود؟"</string>
-    <string name="description_contact_photo" msgid="3387458082667894062">"عکس مخاطب"</string>
     <string name="description_plus_button" msgid="515164827856229880">"به اضافه"</string>
     <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> از <xliff:g id="TOTAL_NUMBER">%s</xliff:g> مخاطب"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"نام‌های مخاطبین شما"</string>
@@ -192,7 +192,6 @@
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"تاریخ"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"برچسب"</string>
     <string name="change_photo" msgid="8530597935483526383">"تغییر"</string>
-    <string name="primary_photo" msgid="8517942231868516999">"عکس اصلی"</string>
     <string name="description_star" msgid="2605854427360036550">"مورد دلخواه"</string>
     <string name="edit_contact" msgid="7529281274005689512">"ویرایش مخاطب"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"بستن"</string>
@@ -269,7 +268,6 @@
     <string name="header_name_entry" msgid="1592791008096288306">"نام"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"رایانامه"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"تلفن"</string>
-    <string name="header_photo_entry" msgid="4438023151411853238">"عکس"</string>
     <string name="content_description_expand_editor" msgid="1111381475901897470">"برای بزرگ کردن ویرایشگر مخاطب کلیک کنید."</string>
     <string name="content_description_collapse_editor" msgid="7598061318022977825">"برای کوچک کردن ویرایشگر مخاطب کلیک کنید."</string>
     <string name="content_description_directions" msgid="2686791825798189335">"مسیرها به مکان"</string>
@@ -284,6 +282,8 @@
     <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"تغییر عکس"</string>
     <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"ویرایشگر باز نشد."</string>
     <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"ذخیره در"</string>
+    <!-- no translation found for compact_editor_account_selector_read_only_title (1869435992721760221) -->
+    <skip />
     <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"درحال‌ حاضر در <xliff:g id="ACCOUNT_NAME">%s</xliff:g> ذخیره می‌شود. برای انتخاب حساب دیگری، دوضربه سریع بزنید."</string>
     <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
       <item quantity="one">مخاطبین پیوند داده شده (<xliff:g id="COUNT">%d</xliff:g>)</item>
@@ -454,22 +454,14 @@
     <string name="chat_jabber" msgid="7561444230307829609">"‏گپ با استفاده از Jabber"</string>
     <string name="chat" msgid="9025361898797412245">"گپ"</string>
     <string name="description_minus_button" msgid="6908099247930477551">"حذف"</string>
-    <!-- no translation found for expand_name_fields_description (6883935911480726652) -->
-    <skip />
-    <!-- no translation found for collapse_name_fields_description (4757877385895561556) -->
-    <skip />
-    <!-- no translation found for expand_phonetic_name_fields_description (3865726859582581741) -->
-    <skip />
-    <!-- no translation found for collapse_phonetic_name_fields_description (9102249481855019452) -->
-    <skip />
-    <!-- no translation found for expand_fields_description (8129294181216760037) -->
-    <skip />
-    <!-- no translation found for collapse_fields_description (1884143625854637874) -->
-    <skip />
-    <!-- no translation found for announce_expanded_fields (1075947220478530622) -->
-    <skip />
-    <!-- no translation found for announce_collapsed_fields (6414231530177338704) -->
-    <skip />
+    <string name="expand_name_fields_description" msgid="6883935911480726652">"بزرگ کردن فیلدهای نام"</string>
+    <string name="collapse_name_fields_description" msgid="4757877385895561556">"کوچک کردن فیلدهای نام"</string>
+    <string name="expand_phonetic_name_fields_description" msgid="3865726859582581741">"بزرگ کردن فیلدهای نام‌آوا"</string>
+    <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"کوچک کردن فیلدهای نام‌آوا"</string>
+    <string name="expand_fields_description" msgid="8129294181216760037">"بزرگ کردن"</string>
+    <string name="collapse_fields_description" msgid="1884143625854637874">"کوچک کردن"</string>
+    <string name="announce_expanded_fields" msgid="1075947220478530622">"بزرگ شد"</string>
+    <string name="announce_collapsed_fields" msgid="6414231530177338704">"کوچک شد"</string>
     <string name="list_filter_all_accounts" msgid="8908683398914322369">"همه مخاطبین"</string>
     <string name="list_filter_all_starred" msgid="5031734941601931356">"ستاره‌دار"</string>
     <string name="list_filter_customize" msgid="4789963356004169321">"سفارشی کردن"</string>
@@ -555,7 +547,8 @@
     <string name="share_favorite_contacts" msgid="4280926751003081042">"اشتراک‌گذاری مخاطبین دلخواه"</string>
     <string name="share_contacts" msgid="8109287987498711664">"اشتراک‌گذاری همه مخاطبین"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"مخاطبین به اشتراک گذاشته نشدند."</string>
-    <string name="dialog_import_export" msgid="4360648034889921624">"وارد کردن/صادر کردن مخاطبین"</string>
+    <!-- no translation found for dialog_export (1628001095187741417) -->
+    <skip />
     <string name="dialog_import" msgid="2431698729761448759">"وارد کردن مخاطبین"</string>
     <string name="share_error" msgid="948429331673358107">"این مخاطب قابل اشتراک‌گذاری نیست."</string>
     <string name="no_contact_to_share" msgid="1276397530378323033">"مخاطبی برای اشتراک‌گذاری وجود ندارد."</string>
@@ -570,7 +563,10 @@
     <string name="menu_clear_frequents" msgid="7688250191932838833">"پاک کردن تماس‌های مکرر"</string>
     <string name="menu_select_sim" msgid="3603578201960504010">"انتخاب سیم‌کارت"</string>
     <string name="menu_accounts" msgid="1424330057450189074">"مدیریت حساب‌ها"</string>
-    <string name="menu_import_export" msgid="26217871113229507">"وارد کردن/صادر کردن"</string>
+    <!-- no translation found for menu_import (6107961135813836467) -->
+    <skip />
+    <!-- no translation found for menu_export (2658783911863503902) -->
+    <skip />
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"شماره‌های مسدودشده"</string>
     <string name="contact_status_update_attribution" msgid="752179367353018597">"از طریق <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> از طریق <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
@@ -604,4 +600,8 @@
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> ثانیه"</string>
     <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> دقیقه <xliff:g id="SECONDS">%s</xliff:g> ثانیه"</string>
     <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> ساعت <xliff:g id="MINUTES_1">%s</xliff:g> دقیقه <xliff:g id="SECONDS">%s</xliff:g> ثانیه"</string>
+    <!-- no translation found for dynamic_shortcut_disabled_message (249939425761315252) -->
+    <skip />
+    <!-- no translation found for dynamic_shortcut_contact_removed_message (6845645831837615899) -->
+    <skip />
 </resources>
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
index e77f58f..f219d79 100644
--- a/res/values-fi/strings.xml
+++ b/res/values-fi/strings.xml
@@ -67,6 +67,7 @@
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Ehdotetut yhteystiedot"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Kaikki yhteystiedot"</string>
     <string name="contactsJoinedMessage" msgid="3343535986195643136">"Yhteystiedot on linkitetty"</string>
+    <string name="contact_deleted_named_toast" msgid="6558941164987421174">"<xliff:g id="NAME">%s</xliff:g> poistettu"</string>
     <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
       <item quantity="other">Yhteystiedot poistettu</item>
       <item quantity="one">Yhteystieto poistettu</item>
@@ -113,11 +114,11 @@
     <string name="emptyMainList" msgid="2772242747899664460">"Yhteystietoluettelo on tyhjä."</string>
     <string name="contactSavedToast" msgid="9171862279493213075">"Yhteystieto tallennettu"</string>
     <string name="contactUnlinkedToast" msgid="7122823195786012553">"Yhteystietojen linkitys on poistettu."</string>
-    <string name="contactSavedErrorToast" msgid="3207250533172944892">"Ei voitu tallentaa yhteystietojen muutoksia."</string>
-    <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Kontaktien erottaminen epäonnistui."</string>
-    <string name="contactJoinErrorToast" msgid="3977932531264809035">"Kontaktien yhdistäminen epäonnistui."</string>
-    <string name="contactGenericErrorToast" msgid="7774911165341591714">"Kontaktin tallennus epäonnistui"</string>
-    <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"Yhteystietojen kuvien muutosten tallentaminen epäonnistui."</string>
+    <string name="contactSavedErrorToast" msgid="4827033473908688031">"Ei voitu tallentaa yhteystietojen muutoksia."</string>
+    <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"Yhteystietojen linkityksen poisto epäonnistui."</string>
+    <string name="contactJoinErrorToast" msgid="5735129234573327701">"Yhteystietojen yhdistäminen epäonnistui."</string>
+    <string name="contactGenericErrorToast" msgid="3885457515665783976">"Virhe tallennettaessa yhteystietoa"</string>
+    <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Yhteystietojen kuvien muutosten tallentaminen epäonnistui."</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"Tunnisteen lataus epäonnistui."</string>
     <string name="groupSavedToast" msgid="6491495462357722285">"Tunniste tallennettiin."</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Tunniste poistettiin."</string>
@@ -126,7 +127,7 @@
     <string name="groupUpdatedToast" msgid="3667977658676267687">"Tunniste päivitettiin."</string>
     <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Poistettu tunnisteesta"</string>
     <string name="groupMembersAddedToast" msgid="4824834898718972768">"Lisätty tunnisteeseen"</string>
-    <string name="groupSavedErrorToast" msgid="8121032018490980184">"Tunnisteen muutosten tallennus epäonnistui."</string>
+    <string name="groupSavedErrorToast" msgid="2355891714292740162">"Tunnisteen muutosten tallennus epäonnistui."</string>
     <string name="groupExistsErrorMessage" msgid="5196811283836946189">"Tunniste on jo olemassa."</string>
     <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
       <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> yhteystietoa, jossa puhelinnumero</item>
@@ -147,7 +148,6 @@
     <string name="callAgain" msgid="3197312117049874778">"Soita uudelleen"</string>
     <string name="returnCall" msgid="8171961914203617813">"Soita takaisin"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Lisätäänkö <xliff:g id="EMAIL">%s</xliff:g> yhteystietoihin?"</string>
-    <string name="description_contact_photo" msgid="3387458082667894062">"yhteystiedon valokuva"</string>
     <string name="description_plus_button" msgid="515164827856229880">"plus"</string>
     <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> / <xliff:g id="TOTAL_NUMBER">%s</xliff:g> yhteystietoa"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"Yhteystietojen nimet"</string>
@@ -192,7 +192,6 @@
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Päivämäärä"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Tunniste"</string>
     <string name="change_photo" msgid="8530597935483526383">"Muuta"</string>
-    <string name="primary_photo" msgid="8517942231868516999">"Kontaktin kuva"</string>
     <string name="description_star" msgid="2605854427360036550">"lisää suosikkeihin"</string>
     <string name="edit_contact" msgid="7529281274005689512">"Muokkaa yhteystietoa"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"sulje"</string>
@@ -269,7 +268,6 @@
     <string name="header_name_entry" msgid="1592791008096288306">"Nimi"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"Sähköposti"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"Puhelin"</string>
-    <string name="header_photo_entry" msgid="4438023151411853238">"Valokuva"</string>
     <string name="content_description_expand_editor" msgid="1111381475901897470">"Laajenna yhteystietojen muokkausnäkymä klikkaamalla."</string>
     <string name="content_description_collapse_editor" msgid="7598061318022977825">"Tiivistä yhteystietojen muokkausnäkymä klikkaamalla."</string>
     <string name="content_description_directions" msgid="2686791825798189335">"reittiohjeet sijaintiin"</string>
@@ -284,6 +282,8 @@
     <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Vaihda kuva"</string>
     <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Muokkausnäkymän avaaminen epäonnistui."</string>
     <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Tallennetaan tiliin"</string>
+    <!-- no translation found for compact_editor_account_selector_read_only_title (1869435992721760221) -->
+    <skip />
     <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"Tälle hetkellä tallennetaan tilille <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Valitse eri tili kaksoisnapauttamalla."</string>
     <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
       <item quantity="other">Yhdistetyt kontaktit (<xliff:g id="COUNT">%d</xliff:g>)</item>
@@ -454,22 +454,14 @@
     <string name="chat_jabber" msgid="7561444230307829609">"Keskustele Jabberin avulla"</string>
     <string name="chat" msgid="9025361898797412245">"Pikaviesti"</string>
     <string name="description_minus_button" msgid="6908099247930477551">"poista"</string>
-    <!-- no translation found for expand_name_fields_description (6883935911480726652) -->
-    <skip />
-    <!-- no translation found for collapse_name_fields_description (4757877385895561556) -->
-    <skip />
-    <!-- no translation found for expand_phonetic_name_fields_description (3865726859582581741) -->
-    <skip />
-    <!-- no translation found for collapse_phonetic_name_fields_description (9102249481855019452) -->
-    <skip />
-    <!-- no translation found for expand_fields_description (8129294181216760037) -->
-    <skip />
-    <!-- no translation found for collapse_fields_description (1884143625854637874) -->
-    <skip />
-    <!-- no translation found for announce_expanded_fields (1075947220478530622) -->
-    <skip />
-    <!-- no translation found for announce_collapsed_fields (6414231530177338704) -->
-    <skip />
+    <string name="expand_name_fields_description" msgid="6883935911480726652">"Laajenna nimikentät"</string>
+    <string name="collapse_name_fields_description" msgid="4757877385895561556">"Tiivistä nimikentät"</string>
+    <string name="expand_phonetic_name_fields_description" msgid="3865726859582581741">"Laajenna foneettiset nimikentät"</string>
+    <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Tiivistä foneettiset nimikentät"</string>
+    <string name="expand_fields_description" msgid="8129294181216760037">"Laajenna"</string>
+    <string name="collapse_fields_description" msgid="1884143625854637874">"Kutista"</string>
+    <string name="announce_expanded_fields" msgid="1075947220478530622">"Laajennettu"</string>
+    <string name="announce_collapsed_fields" msgid="6414231530177338704">"Tiivistetty"</string>
     <string name="list_filter_all_accounts" msgid="8908683398914322369">"Kaikki yhteystiedot"</string>
     <string name="list_filter_all_starred" msgid="5031734941601931356">"Tähdelliset"</string>
     <string name="list_filter_customize" msgid="4789963356004169321">"Muokkaa"</string>
@@ -555,7 +547,8 @@
     <string name="share_favorite_contacts" msgid="4280926751003081042">"Jaa suosikkiyhteystiedot"</string>
     <string name="share_contacts" msgid="8109287987498711664">"Jaa kaikki yhteystiedot"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"Yhteystietojen jakaminen epäonnistui."</string>
-    <string name="dialog_import_export" msgid="4360648034889921624">"Tuo/Vie yhteystietoja"</string>
+    <!-- no translation found for dialog_export (1628001095187741417) -->
+    <skip />
     <string name="dialog_import" msgid="2431698729761448759">"Tuo yhteystietoja"</string>
     <string name="share_error" msgid="948429331673358107">"Yhteystieto ei jaettavissa"</string>
     <string name="no_contact_to_share" msgid="1276397530378323033">"Jaettavia yhteystietoja ei ole."</string>
@@ -570,7 +563,10 @@
     <string name="menu_clear_frequents" msgid="7688250191932838833">"Tyhjennä usein käytetyt"</string>
     <string name="menu_select_sim" msgid="3603578201960504010">"Valitse SIM-kortti"</string>
     <string name="menu_accounts" msgid="1424330057450189074">"Hallinnoi tilejä"</string>
-    <string name="menu_import_export" msgid="26217871113229507">"Tuo/Vie"</string>
+    <!-- no translation found for menu_import (6107961135813836467) -->
+    <skip />
+    <!-- no translation found for menu_export (2658783911863503902) -->
+    <skip />
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"Estetyt numerot"</string>
     <string name="contact_status_update_attribution" msgid="752179367353018597">"lähteestä: <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> lähteestä: <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
@@ -604,4 +600,8 @@
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> s"</string>
     <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
     <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> t <xliff:g id="MINUTES_1">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
+    <!-- no translation found for dynamic_shortcut_disabled_message (249939425761315252) -->
+    <skip />
+    <!-- no translation found for dynamic_shortcut_contact_removed_message (6845645831837615899) -->
+    <skip />
 </resources>
diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml
index 785688b..3fd555e 100644
--- a/res/values-fr-rCA/strings.xml
+++ b/res/values-fr-rCA/strings.xml
@@ -67,6 +67,7 @@
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Contacts suggérés"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Tous les contacts"</string>
     <string name="contactsJoinedMessage" msgid="3343535986195643136">"Contacts associés"</string>
+    <string name="contact_deleted_named_toast" msgid="6558941164987421174">"<xliff:g id="NAME">%s</xliff:g> supprimé"</string>
     <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
       <item quantity="one">Contact supprimé</item>
       <item quantity="other">Contacts supprimés</item>
@@ -113,11 +114,11 @@
     <string name="emptyMainList" msgid="2772242747899664460">"Votre liste de contacts est vide"</string>
     <string name="contactSavedToast" msgid="9171862279493213075">"Contact enregistré."</string>
     <string name="contactUnlinkedToast" msgid="7122823195786012553">"La fusion des contacts a été annulée"</string>
-    <string name="contactSavedErrorToast" msgid="3207250533172944892">"Impossible d\'enregistrer les modifications apportées au contact."</string>
-    <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Impossible de dissocier le contact."</string>
-    <string name="contactJoinErrorToast" msgid="3977932531264809035">"Impossible d\'associer le contact."</string>
-    <string name="contactGenericErrorToast" msgid="7774911165341591714">"Erreur lors de l\'enregistrement du contact."</string>
-    <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"Impossible d\'enregistrer les changements apportés à la photo du contact."</string>
+    <string name="contactSavedErrorToast" msgid="4827033473908688031">"Impossible d\'enregistrer les modifications apportées au contact"</string>
+    <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"Impossible de dissocier le contact"</string>
+    <string name="contactJoinErrorToast" msgid="5735129234573327701">"Impossible d\'associer le contact"</string>
+    <string name="contactGenericErrorToast" msgid="3885457515665783976">"Erreur lors de l\'enregistrement du contact"</string>
+    <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Impossible d\'enregistrer les changements apportés à la photo du contact"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"Échec du chargement de l\'étiquette"</string>
     <string name="groupSavedToast" msgid="6491495462357722285">"Étiquette enregistrée"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Étiquette supprimée"</string>
@@ -126,7 +127,7 @@
     <string name="groupUpdatedToast" msgid="3667977658676267687">"Étiquette mise à jour"</string>
     <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Supprimé de l\'étiquette"</string>
     <string name="groupMembersAddedToast" msgid="4824834898718972768">"Ajouté à l\'étiquette"</string>
-    <string name="groupSavedErrorToast" msgid="8121032018490980184">"Impossible d\'enregistrer l\'étiquette modifiée."</string>
+    <string name="groupSavedErrorToast" msgid="2355891714292740162">"Impossible d\'enregistrer l\'étiquette modifiée"</string>
     <string name="groupExistsErrorMessage" msgid="5196811283836946189">"Cette étiquette existe déjà"</string>
     <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
       <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> contact avec un numéro de téléphone</item>
@@ -147,7 +148,6 @@
     <string name="callAgain" msgid="3197312117049874778">"Renouveler l\'appel"</string>
     <string name="returnCall" msgid="8171961914203617813">"Rappeler"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Ajouter \"<xliff:g id="EMAIL">%s</xliff:g>\" aux contacts?"</string>
-    <string name="description_contact_photo" msgid="3387458082667894062">"photo du contact"</string>
     <string name="description_plus_button" msgid="515164827856229880">"plus"</string>
     <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> sur <xliff:g id="TOTAL_NUMBER">%s</xliff:g> contacts"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"Noms de vos contacts"</string>
@@ -192,7 +192,6 @@
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Date"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Étiquette"</string>
     <string name="change_photo" msgid="8530597935483526383">"Modifier"</string>
-    <string name="primary_photo" msgid="8517942231868516999">"Photo principale"</string>
     <string name="description_star" msgid="2605854427360036550">"favori"</string>
     <string name="edit_contact" msgid="7529281274005689512">"Modifier un contact"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"fermer"</string>
@@ -269,7 +268,6 @@
     <string name="header_name_entry" msgid="1592791008096288306">"Nom"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"Courriel"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"Téléphone"</string>
-    <string name="header_photo_entry" msgid="4438023151411853238">"Photo"</string>
     <string name="content_description_expand_editor" msgid="1111381475901897470">"Cliquez pour développer l\'éditeur de contact."</string>
     <string name="content_description_collapse_editor" msgid="7598061318022977825">"Cliquez pour réduire l\'éditeur de contact."</string>
     <string name="content_description_directions" msgid="2686791825798189335">"itinéraire vers le lieu"</string>
@@ -284,6 +282,8 @@
     <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Changer de photo"</string>
     <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Échec d\'ouverture de l\'éditeur."</string>
     <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Enregistrer dans le compte"</string>
+    <!-- no translation found for compact_editor_account_selector_read_only_title (1869435992721760221) -->
+    <skip />
     <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"Enregistrement en cours dans le compte <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Touchez deux fois pour choisir un autre compte."</string>
     <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
       <item quantity="one">Contact associé (<xliff:g id="COUNT">%d</xliff:g>)</item>
@@ -454,22 +454,14 @@
     <string name="chat_jabber" msgid="7561444230307829609">"Clavarder via Jabber"</string>
     <string name="chat" msgid="9025361898797412245">"Clavardage"</string>
     <string name="description_minus_button" msgid="6908099247930477551">"suppr"</string>
-    <!-- no translation found for expand_name_fields_description (6883935911480726652) -->
-    <skip />
-    <!-- no translation found for collapse_name_fields_description (4757877385895561556) -->
-    <skip />
-    <!-- no translation found for expand_phonetic_name_fields_description (3865726859582581741) -->
-    <skip />
-    <!-- no translation found for collapse_phonetic_name_fields_description (9102249481855019452) -->
-    <skip />
-    <!-- no translation found for expand_fields_description (8129294181216760037) -->
-    <skip />
-    <!-- no translation found for collapse_fields_description (1884143625854637874) -->
-    <skip />
-    <!-- no translation found for announce_expanded_fields (1075947220478530622) -->
-    <skip />
-    <!-- no translation found for announce_collapsed_fields (6414231530177338704) -->
-    <skip />
+    <string name="expand_name_fields_description" msgid="6883935911480726652">"Développer les champs de nom"</string>
+    <string name="collapse_name_fields_description" msgid="4757877385895561556">"Réduire les champs de nom"</string>
+    <string name="expand_phonetic_name_fields_description" msgid="3865726859582581741">"Développer les champs de nom phonétique"</string>
+    <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Réduire les champs de nom phonétique"</string>
+    <string name="expand_fields_description" msgid="8129294181216760037">"Développer"</string>
+    <string name="collapse_fields_description" msgid="1884143625854637874">"Réduire"</string>
+    <string name="announce_expanded_fields" msgid="1075947220478530622">"Développés"</string>
+    <string name="announce_collapsed_fields" msgid="6414231530177338704">"Réduits"</string>
     <string name="list_filter_all_accounts" msgid="8908683398914322369">"Tous les contacts"</string>
     <string name="list_filter_all_starred" msgid="5031734941601931356">"Marqués d\'une étoile"</string>
     <string name="list_filter_customize" msgid="4789963356004169321">"Personnaliser"</string>
@@ -555,7 +547,8 @@
     <string name="share_favorite_contacts" msgid="4280926751003081042">"Partager les contacts favoris"</string>
     <string name="share_contacts" msgid="8109287987498711664">"Partager tous les contacts"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"Échec du partage des contacts."</string>
-    <string name="dialog_import_export" msgid="4360648034889921624">"Importer/Exporter des contacts"</string>
+    <!-- no translation found for dialog_export (1628001095187741417) -->
+    <skip />
     <string name="dialog_import" msgid="2431698729761448759">"Téléverser des contacts"</string>
     <string name="share_error" msgid="948429331673358107">"Impossible de partager ce contact."</string>
     <string name="no_contact_to_share" msgid="1276397530378323033">"Il n\'y a aucun contact à partager."</string>
@@ -570,7 +563,10 @@
     <string name="menu_clear_frequents" msgid="7688250191932838833">"Effacer les contacts fréquents"</string>
     <string name="menu_select_sim" msgid="3603578201960504010">"Sélectionner une carte SIM"</string>
     <string name="menu_accounts" msgid="1424330057450189074">"Gérer les comptes"</string>
-    <string name="menu_import_export" msgid="26217871113229507">"Importer/Exporter"</string>
+    <!-- no translation found for menu_import (6107961135813836467) -->
+    <skip />
+    <!-- no translation found for menu_export (2658783911863503902) -->
+    <skip />
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"Numéros bloqués"</string>
     <string name="contact_status_update_attribution" msgid="752179367353018597">"via <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> via <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
@@ -604,4 +600,8 @@
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> s"</string>
     <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
     <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> h <xliff:g id="MINUTES_1">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
+    <!-- no translation found for dynamic_shortcut_disabled_message (249939425761315252) -->
+    <skip />
+    <!-- no translation found for dynamic_shortcut_contact_removed_message (6845645831837615899) -->
+    <skip />
 </resources>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index 54d8a7e..d1f1245 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -67,6 +67,7 @@
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Contacts suggérés"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Tous les contacts"</string>
     <string name="contactsJoinedMessage" msgid="3343535986195643136">"Les contacts ont bien été associés."</string>
+    <string name="contact_deleted_named_toast" msgid="6558941164987421174">"<xliff:g id="NAME">%s</xliff:g> supprimé"</string>
     <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
       <item quantity="one">Contact supprimé.</item>
       <item quantity="other">Contacts supprimés.</item>
@@ -113,11 +114,11 @@
     <string name="emptyMainList" msgid="2772242747899664460">"Votre liste de contacts est vide"</string>
     <string name="contactSavedToast" msgid="9171862279493213075">"Contact enregistré."</string>
     <string name="contactUnlinkedToast" msgid="7122823195786012553">"Contacts dissociés"</string>
-    <string name="contactSavedErrorToast" msgid="3207250533172944892">"Impossible d\'enregistrer les modifications apportées au contact."</string>
-    <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Impossible de dissocier le contact."</string>
-    <string name="contactJoinErrorToast" msgid="3977932531264809035">"Impossible d\'associer le contact."</string>
-    <string name="contactGenericErrorToast" msgid="7774911165341591714">"Erreur lors de l\'enregistrement du contact."</string>
-    <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"Impossible d\'enregistrer les modifications apportées à la photo du contact."</string>
+    <string name="contactSavedErrorToast" msgid="4827033473908688031">"Impossible d\'enregistrer les modifications apportées au contact"</string>
+    <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"Impossible de dissocier le contact"</string>
+    <string name="contactJoinErrorToast" msgid="5735129234573327701">"Impossible d\'associer le contact"</string>
+    <string name="contactGenericErrorToast" msgid="3885457515665783976">"Erreur lors de l\'enregistrement du contact"</string>
+    <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Impossible d\'enregistrer les modifications apportées à la photo du contact"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"Impossible de charger le libellé"</string>
     <string name="groupSavedToast" msgid="6491495462357722285">"Libellé enregistré"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Libellé supprimé"</string>
@@ -126,7 +127,7 @@
     <string name="groupUpdatedToast" msgid="3667977658676267687">"Libellé mis à jour"</string>
     <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Contact retiré du libellé"</string>
     <string name="groupMembersAddedToast" msgid="4824834898718972768">"Ajout au libellé effectué"</string>
-    <string name="groupSavedErrorToast" msgid="8121032018490980184">"Impossible d\'enregistrer les changements apportés au libellé."</string>
+    <string name="groupSavedErrorToast" msgid="2355891714292740162">"Impossible d\'enregistrer les changements apportés au libellé"</string>
     <string name="groupExistsErrorMessage" msgid="5196811283836946189">"Ce libellé existe déjà"</string>
     <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
       <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> contact avec numéro de téléphone</item>
@@ -147,7 +148,6 @@
     <string name="callAgain" msgid="3197312117049874778">"Renouveler l\'appel"</string>
     <string name="returnCall" msgid="8171961914203617813">"Rappeler"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Ajouter \"<xliff:g id="EMAIL">%s</xliff:g>\" aux contacts ?"</string>
-    <string name="description_contact_photo" msgid="3387458082667894062">"photo du contact"</string>
     <string name="description_plus_button" msgid="515164827856229880">"plus"</string>
     <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> sur <xliff:g id="TOTAL_NUMBER">%s</xliff:g> contacts"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"Noms de vos contacts"</string>
@@ -192,7 +192,6 @@
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Date"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Ajouter libellé"</string>
     <string name="change_photo" msgid="8530597935483526383">"Modifier"</string>
-    <string name="primary_photo" msgid="8517942231868516999">"Photo principale"</string>
     <string name="description_star" msgid="2605854427360036550">"favori"</string>
     <string name="edit_contact" msgid="7529281274005689512">"Modifier le contact"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"fermer"</string>
@@ -269,7 +268,6 @@
     <string name="header_name_entry" msgid="1592791008096288306">"Nom"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"Adresse e-mail"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"Numéro de téléphone"</string>
-    <string name="header_photo_entry" msgid="4438023151411853238">"Photo"</string>
     <string name="content_description_expand_editor" msgid="1111381475901897470">"Cliquez pour développer l\'éditeur de contact."</string>
     <string name="content_description_collapse_editor" msgid="7598061318022977825">"Cliquez pour réduire l\'éditeur de contact."</string>
     <string name="content_description_directions" msgid="2686791825798189335">"itinéraire vers le lieu"</string>
@@ -284,6 +282,8 @@
     <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Changer de photo"</string>
     <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Échec de l\'ouverture de l\'éditeur."</string>
     <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Enregistrement sur le compte"</string>
+    <!-- no translation found for compact_editor_account_selector_read_only_title (1869435992721760221) -->
+    <skip />
     <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"Enregistrement en cours sur le compte <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Double-cliquez pour choisir un autre compte."</string>
     <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
       <item quantity="one">Contact associé (<xliff:g id="COUNT">%d</xliff:g>)</item>
@@ -454,22 +454,14 @@
     <string name="chat_jabber" msgid="7561444230307829609">"Chatter via Jabber"</string>
     <string name="chat" msgid="9025361898797412245">"Chatter"</string>
     <string name="description_minus_button" msgid="6908099247930477551">"supprimer"</string>
-    <!-- no translation found for expand_name_fields_description (6883935911480726652) -->
-    <skip />
-    <!-- no translation found for collapse_name_fields_description (4757877385895561556) -->
-    <skip />
-    <!-- no translation found for expand_phonetic_name_fields_description (3865726859582581741) -->
-    <skip />
-    <!-- no translation found for collapse_phonetic_name_fields_description (9102249481855019452) -->
-    <skip />
-    <!-- no translation found for expand_fields_description (8129294181216760037) -->
-    <skip />
-    <!-- no translation found for collapse_fields_description (1884143625854637874) -->
-    <skip />
-    <!-- no translation found for announce_expanded_fields (1075947220478530622) -->
-    <skip />
-    <!-- no translation found for announce_collapsed_fields (6414231530177338704) -->
-    <skip />
+    <string name="expand_name_fields_description" msgid="6883935911480726652">"Développer les champs de nom"</string>
+    <string name="collapse_name_fields_description" msgid="4757877385895561556">"Réduire les champs de nom"</string>
+    <string name="expand_phonetic_name_fields_description" msgid="3865726859582581741">"Développer les champs de nom phonétique"</string>
+    <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Réduire les champs de nom phonétique"</string>
+    <string name="expand_fields_description" msgid="8129294181216760037">"Développer"</string>
+    <string name="collapse_fields_description" msgid="1884143625854637874">"Réduire"</string>
+    <string name="announce_expanded_fields" msgid="1075947220478530622">"Vue développée"</string>
+    <string name="announce_collapsed_fields" msgid="6414231530177338704">"Vue réduite"</string>
     <string name="list_filter_all_accounts" msgid="8908683398914322369">"Tous les contacts"</string>
     <string name="list_filter_all_starred" msgid="5031734941601931356">"Contacts favoris"</string>
     <string name="list_filter_customize" msgid="4789963356004169321">"Personnaliser"</string>
@@ -555,7 +547,8 @@
     <string name="share_favorite_contacts" msgid="4280926751003081042">"Partager les contacts favoris"</string>
     <string name="share_contacts" msgid="8109287987498711664">"Partager tous les contacts"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"Échec du partage des contacts."</string>
-    <string name="dialog_import_export" msgid="4360648034889921624">"Import/Export contacts"</string>
+    <!-- no translation found for dialog_export (1628001095187741417) -->
+    <skip />
     <string name="dialog_import" msgid="2431698729761448759">"Importer des contacts"</string>
     <string name="share_error" msgid="948429331673358107">"Impossible de partager ce contact."</string>
     <string name="no_contact_to_share" msgid="1276397530378323033">"Aucun contact à partager."</string>
@@ -570,7 +563,10 @@
     <string name="menu_clear_frequents" msgid="7688250191932838833">"Effacer les contacts fréquents"</string>
     <string name="menu_select_sim" msgid="3603578201960504010">"Sélectionner une carte SIM"</string>
     <string name="menu_accounts" msgid="1424330057450189074">"Gérer les comptes"</string>
-    <string name="menu_import_export" msgid="26217871113229507">"Importer/Exporter"</string>
+    <!-- no translation found for menu_import (6107961135813836467) -->
+    <skip />
+    <!-- no translation found for menu_export (2658783911863503902) -->
+    <skip />
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"Numéros bloqués"</string>
     <string name="contact_status_update_attribution" msgid="752179367353018597">"via <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> via <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
@@ -604,4 +600,8 @@
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> s"</string>
     <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> min et <xliff:g id="SECONDS">%s</xliff:g> s"</string>
     <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> h <xliff:g id="MINUTES_1">%s</xliff:g> min et <xliff:g id="SECONDS">%s</xliff:g> s"</string>
+    <!-- no translation found for dynamic_shortcut_disabled_message (249939425761315252) -->
+    <skip />
+    <!-- no translation found for dynamic_shortcut_contact_removed_message (6845645831837615899) -->
+    <skip />
 </resources>
diff --git a/res/values-gl-rES/strings.xml b/res/values-gl-rES/strings.xml
index f5922d7..9abbad2 100644
--- a/res/values-gl-rES/strings.xml
+++ b/res/values-gl-rES/strings.xml
@@ -67,6 +67,7 @@
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Contactos suxeridos"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Todos os contactos"</string>
     <string name="contactsJoinedMessage" msgid="3343535986195643136">"Ligáronse os contactos"</string>
+    <string name="contact_deleted_named_toast" msgid="6558941164987421174">"<xliff:g id="NAME">%s</xliff:g> eliminado"</string>
     <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
       <item quantity="other">Elimináronse os contactos</item>
       <item quantity="one">Eliminouse o contacto</item>
@@ -113,11 +114,11 @@
     <string name="emptyMainList" msgid="2772242747899664460">"A túa lista de contactos está baleira"</string>
     <string name="contactSavedToast" msgid="9171862279493213075">"Gardouse o contacto"</string>
     <string name="contactUnlinkedToast" msgid="7122823195786012553">"Desligáronse os contactos"</string>
-    <string name="contactSavedErrorToast" msgid="3207250533172944892">"Non se puideron gardar os cambios nos contactos."</string>
-    <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Non foi posible desligarse do contacto."</string>
-    <string name="contactJoinErrorToast" msgid="3977932531264809035">"Non se puido ligar o contacto."</string>
-    <string name="contactGenericErrorToast" msgid="7774911165341591714">"Produciuse un erro ao gardar o contacto."</string>
-    <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"Non se puideron gardar os cambios na foto do contacto."</string>
+    <string name="contactSavedErrorToast" msgid="4827033473908688031">"Non se puideron gardar os cambios no contacto"</string>
+    <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"Non se puido desligar o contacto"</string>
+    <string name="contactJoinErrorToast" msgid="5735129234573327701">"Non se puido ligar o contacto"</string>
+    <string name="contactGenericErrorToast" msgid="3885457515665783976">"Produciuse un erro ao gardar o contacto"</string>
+    <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Non se puideron gardar os cambios na foto do contacto"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"Produciuse un erro ao cargar a etiqueta"</string>
     <string name="groupSavedToast" msgid="6491495462357722285">"Gardouse a etiqueta"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Eliminouse a etiqueta"</string>
@@ -126,7 +127,7 @@
     <string name="groupUpdatedToast" msgid="3667977658676267687">"Actualizouse a etiqueta"</string>
     <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Eliminouse da etiqueta"</string>
     <string name="groupMembersAddedToast" msgid="4824834898718972768">"Engadiuse á etiqueta"</string>
-    <string name="groupSavedErrorToast" msgid="8121032018490980184">"Non se puideron gardar os cambios da etiqueta."</string>
+    <string name="groupSavedErrorToast" msgid="2355891714292740162">"Non se puideron gardar os cambios na etiqueta"</string>
     <string name="groupExistsErrorMessage" msgid="5196811283836946189">"Esa etiqueta xa existe"</string>
     <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
       <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> contactos con números de teléfono</item>
@@ -147,7 +148,6 @@
     <string name="callAgain" msgid="3197312117049874778">"Chamar de novo"</string>
     <string name="returnCall" msgid="8171961914203617813">"Devolver chamada"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Engadir \"<xliff:g id="EMAIL">%s</xliff:g>\" aos contactos?"</string>
-    <string name="description_contact_photo" msgid="3387458082667894062">"foto de contacto"</string>
     <string name="description_plus_button" msgid="515164827856229880">"máis"</string>
     <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> de <xliff:g id="TOTAL_NUMBER">%s</xliff:g> contactos"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"Nomes dos teus contactos"</string>
@@ -192,7 +192,6 @@
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Data"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Etiqueta"</string>
     <string name="change_photo" msgid="8530597935483526383">"Cambiar"</string>
-    <string name="primary_photo" msgid="8517942231868516999">"Foto principal"</string>
     <string name="description_star" msgid="2605854427360036550">"favorito"</string>
     <string name="edit_contact" msgid="7529281274005689512">"Editar contacto"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"pechar"</string>
@@ -269,7 +268,6 @@
     <string name="header_name_entry" msgid="1592791008096288306">"Nome"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"Correo electrónico"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"Teléfono"</string>
-    <string name="header_photo_entry" msgid="4438023151411853238">"Foto"</string>
     <string name="content_description_expand_editor" msgid="1111381475901897470">"Fai clic para ampliar o editor de contactos."</string>
     <string name="content_description_collapse_editor" msgid="7598061318022977825">"Fai clic para contraer o editor de contactos."</string>
     <string name="content_description_directions" msgid="2686791825798189335">"indicacións para a localización"</string>
@@ -284,6 +282,8 @@
     <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Cambiar foto"</string>
     <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Produciuse un erro ao abrir o editor."</string>
     <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Gardando en"</string>
+    <!-- no translation found for compact_editor_account_selector_read_only_title (1869435992721760221) -->
+    <skip />
     <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"Gardando actualmente en <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Toca dúas veces para seleccionar unha conta diferente."</string>
     <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
       <item quantity="other">Ligáronse os contactos (<xliff:g id="COUNT">%d</xliff:g>)</item>
@@ -454,22 +454,14 @@
     <string name="chat_jabber" msgid="7561444230307829609">"Chatear con Jabber"</string>
     <string name="chat" msgid="9025361898797412245">"Chatear"</string>
     <string name="description_minus_button" msgid="6908099247930477551">"eliminar"</string>
-    <!-- no translation found for expand_name_fields_description (6883935911480726652) -->
-    <skip />
-    <!-- no translation found for collapse_name_fields_description (4757877385895561556) -->
-    <skip />
-    <!-- no translation found for expand_phonetic_name_fields_description (3865726859582581741) -->
-    <skip />
-    <!-- no translation found for collapse_phonetic_name_fields_description (9102249481855019452) -->
-    <skip />
-    <!-- no translation found for expand_fields_description (8129294181216760037) -->
-    <skip />
-    <!-- no translation found for collapse_fields_description (1884143625854637874) -->
-    <skip />
-    <!-- no translation found for announce_expanded_fields (1075947220478530622) -->
-    <skip />
-    <!-- no translation found for announce_collapsed_fields (6414231530177338704) -->
-    <skip />
+    <string name="expand_name_fields_description" msgid="6883935911480726652">"Despregar campos de nome"</string>
+    <string name="collapse_name_fields_description" msgid="4757877385895561556">"Contraer campos de nome"</string>
+    <string name="expand_phonetic_name_fields_description" msgid="3865726859582581741">"Despregar campos de nome fonético"</string>
+    <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Contraer campos de nome fonético"</string>
+    <string name="expand_fields_description" msgid="8129294181216760037">"Despregar"</string>
+    <string name="collapse_fields_description" msgid="1884143625854637874">"Contraer"</string>
+    <string name="announce_expanded_fields" msgid="1075947220478530622">"Despregado"</string>
+    <string name="announce_collapsed_fields" msgid="6414231530177338704">"Contraído"</string>
     <string name="list_filter_all_accounts" msgid="8908683398914322369">"Todos os contactos"</string>
     <string name="list_filter_all_starred" msgid="5031734941601931356">"Marcados con estrela"</string>
     <string name="list_filter_customize" msgid="4789963356004169321">"Personalizar"</string>
@@ -555,7 +547,8 @@
     <string name="share_favorite_contacts" msgid="4280926751003081042">"Compartir contactos favoritos"</string>
     <string name="share_contacts" msgid="8109287987498711664">"Compartir todos os contactos"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"Erro ao compartir os contactos."</string>
-    <string name="dialog_import_export" msgid="4360648034889921624">"Importar/exportar contactos"</string>
+    <!-- no translation found for dialog_export (1628001095187741417) -->
+    <skip />
     <string name="dialog_import" msgid="2431698729761448759">"Importar contactos"</string>
     <string name="share_error" msgid="948429331673358107">"Non se pode compartir este contacto."</string>
     <string name="no_contact_to_share" msgid="1276397530378323033">"Non hai ningún contacto para compartir."</string>
@@ -570,7 +563,10 @@
     <string name="menu_clear_frequents" msgid="7688250191932838833">"Borrar frecuentes"</string>
     <string name="menu_select_sim" msgid="3603578201960504010">"Seleccionar tarxeta SIM"</string>
     <string name="menu_accounts" msgid="1424330057450189074">"Xestionar contas"</string>
-    <string name="menu_import_export" msgid="26217871113229507">"Importar/exportar"</string>
+    <!-- no translation found for menu_import (6107961135813836467) -->
+    <skip />
+    <!-- no translation found for menu_export (2658783911863503902) -->
+    <skip />
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"Números bloqueados"</string>
     <string name="contact_status_update_attribution" msgid="752179367353018597">"a través de <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> a través de <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
@@ -604,4 +600,8 @@
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> s"</string>
     <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
     <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> h <xliff:g id="MINUTES_1">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
+    <!-- no translation found for dynamic_shortcut_disabled_message (249939425761315252) -->
+    <skip />
+    <!-- no translation found for dynamic_shortcut_contact_removed_message (6845645831837615899) -->
+    <skip />
 </resources>
diff --git a/res/values-gu-rIN/strings.xml b/res/values-gu-rIN/strings.xml
index d489417..44cce11 100644
--- a/res/values-gu-rIN/strings.xml
+++ b/res/values-gu-rIN/strings.xml
@@ -67,6 +67,7 @@
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"સૂચવેલા સંપર્કો"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"તમામ સંપર્કો"</string>
     <string name="contactsJoinedMessage" msgid="3343535986195643136">"સંપર્કો લિંક કર્યાં"</string>
+    <string name="contact_deleted_named_toast" msgid="6558941164987421174">"<xliff:g id="NAME">%s</xliff:g> ને કાઢી નાખ્યાં"</string>
     <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
       <item quantity="one">સંપર્કો કાઢી નાખ્યા</item>
       <item quantity="other">સંપર્કો કાઢી નાખ્યા</item>
@@ -113,11 +114,11 @@
     <string name="emptyMainList" msgid="2772242747899664460">"તમારી સંપર્કોની સૂચિ ખાલી છે"</string>
     <string name="contactSavedToast" msgid="9171862279493213075">"સંપર્ક સાચવ્યો"</string>
     <string name="contactUnlinkedToast" msgid="7122823195786012553">"સંપર્કો અનલિંક કર્યા"</string>
-    <string name="contactSavedErrorToast" msgid="3207250533172944892">"ફેરફારો સાચવી શકાયાં નથી."</string>
-    <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"સંપર્કને અનલિંક કરી શક્યા નથી."</string>
-    <string name="contactJoinErrorToast" msgid="3977932531264809035">"સંપર્ક લિંક કરી શક્યાં નથી."</string>
-    <string name="contactGenericErrorToast" msgid="7774911165341591714">"સંપર્ક સાચવવામાં ભૂલ."</string>
-    <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"સંપર્ક ફોટાના ફેરફારો સાચવી શક્યાં નથી."</string>
+    <string name="contactSavedErrorToast" msgid="4827033473908688031">"ફેરફારો સાચવી શક્યાં નથી"</string>
+    <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"સંપર્કને અનલિંક કરી શક્યા નથી"</string>
+    <string name="contactJoinErrorToast" msgid="5735129234573327701">"સંપર્ક લિંક કરી શક્યાં નથી"</string>
+    <string name="contactGenericErrorToast" msgid="3885457515665783976">"સંપર્ક સાચવવામાં ભૂલ"</string>
+    <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"સંપર્ક ફોટાના ફેરફારો સાચવી શક્યાં નથી"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"લેબલ લોડ કરવામાં નિષ્ફળ થયાં"</string>
     <string name="groupSavedToast" msgid="6491495462357722285">"લેબલ સાચવ્યું"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"લેબલ કાઢી નાખ્યું"</string>
@@ -126,7 +127,7 @@
     <string name="groupUpdatedToast" msgid="3667977658676267687">"લેબલ અપડેટ કર્યું"</string>
     <string name="groupMembersRemovedToast" msgid="3510563559799376603">"લેબલમાંથી દૂર કર્યાં"</string>
     <string name="groupMembersAddedToast" msgid="4824834898718972768">"લેબલમાં ઉમેર્યા"</string>
-    <string name="groupSavedErrorToast" msgid="8121032018490980184">"લેબલ ફેરફારો સાચવી શકાયાં નથી."</string>
+    <string name="groupSavedErrorToast" msgid="2355891714292740162">"લેબલ ફેરફારો સાચવી શક્યાં નથી"</string>
     <string name="groupExistsErrorMessage" msgid="5196811283836946189">"તે લેબલ પહેલાંથી અસ્તિત્વમાં છે"</string>
     <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
       <item quantity="one">ફોન નંબર્સ સાથેના <xliff:g id="COUNT">%d</xliff:g> સંપર્કો</item>
@@ -147,7 +148,6 @@
     <string name="callAgain" msgid="3197312117049874778">"ફરી કૉલ કરો"</string>
     <string name="returnCall" msgid="8171961914203617813">"વળતો કૉલ"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"\"<xliff:g id="EMAIL">%s</xliff:g>\" ને સંપર્કોમાં ઉમેરીએ?"</string>
-    <string name="description_contact_photo" msgid="3387458082667894062">"સંપર્ક ફોટો"</string>
     <string name="description_plus_button" msgid="515164827856229880">"પ્લસ"</string>
     <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="TOTAL_NUMBER">%s</xliff:g> માંથી <xliff:g id="CURRENT_NUMBER">%s</xliff:g> સંપર્કો"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"તમારા સંપર્કોના નામ"</string>
@@ -192,7 +192,6 @@
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"તારીખ"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"લેબલ"</string>
     <string name="change_photo" msgid="8530597935483526383">"બદલો"</string>
-    <string name="primary_photo" msgid="8517942231868516999">"પ્રાથમિક ફોટો"</string>
     <string name="description_star" msgid="2605854427360036550">"મનપસંદ"</string>
     <string name="edit_contact" msgid="7529281274005689512">"સંપર્ક સંપાદિત કરો"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"બંધ કરો"</string>
@@ -269,7 +268,6 @@
     <string name="header_name_entry" msgid="1592791008096288306">"નામ"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"ઇમેઇલ"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"ફોન"</string>
-    <string name="header_photo_entry" msgid="4438023151411853238">"ફોટો"</string>
     <string name="content_description_expand_editor" msgid="1111381475901897470">"સંપર્ક સંપાદક વિસ્તૃત કરવા માટે ક્લિક કરો."</string>
     <string name="content_description_collapse_editor" msgid="7598061318022977825">"સંપર્ક સંપાદકને સંકુચિત કરવા માટે ક્લિક કરો."</string>
     <string name="content_description_directions" msgid="2686791825798189335">"સ્થાન માટેનાં દિશા નિર્દેશો"</string>
@@ -284,6 +282,8 @@
     <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"ફોટો બદલો"</string>
     <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"સંપાદક ખોલવામાં નિષ્ફળ થયાં."</string>
     <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"આમાં સાચવી રહ્યાં છે"</string>
+    <!-- no translation found for compact_editor_account_selector_read_only_title (1869435992721760221) -->
+    <skip />
     <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"વર્તમાનમાં <xliff:g id="ACCOUNT_NAME">%s</xliff:g> પર સાચવી રહ્યાં છે. ભિન્ન એકાઉન્ટ ચૂંટવા માટે બે વાર ટેપ કરો."</string>
     <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
       <item quantity="one">લિંક કરેલ સંપર્કો (<xliff:g id="COUNT">%d</xliff:g>)</item>
@@ -454,22 +454,14 @@
     <string name="chat_jabber" msgid="7561444230307829609">"Jabber નો ઉપયોગ કરીને ચેટ કરો"</string>
     <string name="chat" msgid="9025361898797412245">"ચેટ"</string>
     <string name="description_minus_button" msgid="6908099247930477551">"કાઢી નાખો"</string>
-    <!-- no translation found for expand_name_fields_description (6883935911480726652) -->
-    <skip />
-    <!-- no translation found for collapse_name_fields_description (4757877385895561556) -->
-    <skip />
-    <!-- no translation found for expand_phonetic_name_fields_description (3865726859582581741) -->
-    <skip />
-    <!-- no translation found for collapse_phonetic_name_fields_description (9102249481855019452) -->
-    <skip />
-    <!-- no translation found for expand_fields_description (8129294181216760037) -->
-    <skip />
-    <!-- no translation found for collapse_fields_description (1884143625854637874) -->
-    <skip />
-    <!-- no translation found for announce_expanded_fields (1075947220478530622) -->
-    <skip />
-    <!-- no translation found for announce_collapsed_fields (6414231530177338704) -->
-    <skip />
+    <string name="expand_name_fields_description" msgid="6883935911480726652">"નામ ફીલ્ડ્સ વિસ્તૃત કરો"</string>
+    <string name="collapse_name_fields_description" msgid="4757877385895561556">"નામ ફીલ્ડ્સ સંકુચિત કરો"</string>
+    <string name="expand_phonetic_name_fields_description" msgid="3865726859582581741">"ધ્વન્યાત્મક નામ ફીલ્ડ્સ વિસ્તૃત કરો"</string>
+    <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"ધ્વન્યાત્મક નામ ફીલ્ડ્સ સંકુચિત કરો"</string>
+    <string name="expand_fields_description" msgid="8129294181216760037">"વિસ્તૃત કરો"</string>
+    <string name="collapse_fields_description" msgid="1884143625854637874">"સંકુચિત કરો"</string>
+    <string name="announce_expanded_fields" msgid="1075947220478530622">"વિસ્તૃત કર્યું"</string>
+    <string name="announce_collapsed_fields" msgid="6414231530177338704">"સંકુચિત કર્યું"</string>
     <string name="list_filter_all_accounts" msgid="8908683398914322369">"તમામ સંપર્કો"</string>
     <string name="list_filter_all_starred" msgid="5031734941601931356">"તારાંકિત કરેલ"</string>
     <string name="list_filter_customize" msgid="4789963356004169321">"કસ્ટમાઇઝ કરો"</string>
@@ -555,7 +547,8 @@
     <string name="share_favorite_contacts" msgid="4280926751003081042">"મનપસંદ સંપર્કોને શેર કરો"</string>
     <string name="share_contacts" msgid="8109287987498711664">"તમામ સંપર્કોને શેર કરો"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"સંપર્કોને શેર કરવામાં નિષ્ફળ થયાં."</string>
-    <string name="dialog_import_export" msgid="4360648034889921624">"સંપર્કો આયાત/નિકાસ કરો"</string>
+    <!-- no translation found for dialog_export (1628001095187741417) -->
+    <skip />
     <string name="dialog_import" msgid="2431698729761448759">"સંપર્કો આયાત કરો"</string>
     <string name="share_error" msgid="948429331673358107">"આ સંપર્ક શેર કરી શકાતો નથી."</string>
     <string name="no_contact_to_share" msgid="1276397530378323033">"શેર કરવા માટે કોઇ સંપર્કો નથી"</string>
@@ -570,7 +563,10 @@
     <string name="menu_clear_frequents" msgid="7688250191932838833">"વારંવારના સાફ કરો"</string>
     <string name="menu_select_sim" msgid="3603578201960504010">"SIM કાર્ડ પસંદ કરો"</string>
     <string name="menu_accounts" msgid="1424330057450189074">"એકાઉન્ટ્સ સંચાલિત કરો"</string>
-    <string name="menu_import_export" msgid="26217871113229507">"આયાત/નિકાસ કરો"</string>
+    <!-- no translation found for menu_import (6107961135813836467) -->
+    <skip />
+    <!-- no translation found for menu_export (2658783911863503902) -->
+    <skip />
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"અવરોધિત નંબરો"</string>
     <string name="contact_status_update_attribution" msgid="752179367353018597">"<xliff:g id="SOURCE">%1$s</xliff:g> મારફતે"</string>
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="SOURCE">%2$s</xliff:g> મારફતે <xliff:g id="DATE">%1$s</xliff:g> ના રોજ"</string>
@@ -604,4 +600,8 @@
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> સેકંડ"</string>
     <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> મિનિટ <xliff:g id="SECONDS">%s</xliff:g> સેકંડ"</string>
     <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> કલાક <xliff:g id="MINUTES_1">%s</xliff:g> મિનિટ <xliff:g id="SECONDS">%s</xliff:g> સેકંડ"</string>
+    <!-- no translation found for dynamic_shortcut_disabled_message (249939425761315252) -->
+    <skip />
+    <!-- no translation found for dynamic_shortcut_contact_removed_message (6845645831837615899) -->
+    <skip />
 </resources>
diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml
index a0a4f2f..cc697f3 100644
--- a/res/values-hi/strings.xml
+++ b/res/values-hi/strings.xml
@@ -67,6 +67,7 @@
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"सुझाए गए संपर्क"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"सभी संपर्क"</string>
     <string name="contactsJoinedMessage" msgid="3343535986195643136">"संपर्क लिंक कर दिए गए"</string>
+    <string name="contact_deleted_named_toast" msgid="6558941164987421174">"<xliff:g id="NAME">%s</xliff:g> को हटाया गया"</string>
     <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
       <item quantity="one">संपर्क हटा दिए गए</item>
       <item quantity="other">संपर्क हटा दिए गए</item>
@@ -113,11 +114,11 @@
     <string name="emptyMainList" msgid="2772242747899664460">"आपकी संपर्क सूची खाली है"</string>
     <string name="contactSavedToast" msgid="9171862279493213075">"संपर्क सहेजा गया"</string>
     <string name="contactUnlinkedToast" msgid="7122823195786012553">"संपर्क अनलिंक किए गए"</string>
-    <string name="contactSavedErrorToast" msgid="3207250533172944892">"संपर्क परिवर्तन सहेजे नहीं जा सके."</string>
-    <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"संपर्क को अनलिंक नहीं किया जा सका."</string>
-    <string name="contactJoinErrorToast" msgid="3977932531264809035">"संपर्क को लिंक नहीं किया जा सका."</string>
-    <string name="contactGenericErrorToast" msgid="7774911165341591714">"संपर्क सहेजने में त्रुटि हुई."</string>
-    <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"संपर्क फ़ोटो के बदलाव नहीं सहेजे जा सके."</string>
+    <string name="contactSavedErrorToast" msgid="4827033473908688031">"संपर्क परिवर्तन सहेजे नहीं जा सके"</string>
+    <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"संपर्क को अनलिंक नहीं किया जा सका"</string>
+    <string name="contactJoinErrorToast" msgid="5735129234573327701">"संपर्क को लिंक नहीं किया जा सका"</string>
+    <string name="contactGenericErrorToast" msgid="3885457515665783976">"संपर्क सहेजने में गड़बड़ी"</string>
+    <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"संपर्क फ़ोटो के बदलाव नहीं सहेजे जा सके"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"लेबल लोड करने में विफल रहा"</string>
     <string name="groupSavedToast" msgid="6491495462357722285">"लेबल सहेजा गया"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"लेबल हटाया गया"</string>
@@ -126,7 +127,7 @@
     <string name="groupUpdatedToast" msgid="3667977658676267687">"लेबल अपडेट किया गया"</string>
     <string name="groupMembersRemovedToast" msgid="3510563559799376603">"लेबल से निकाला गया"</string>
     <string name="groupMembersAddedToast" msgid="4824834898718972768">"लेबल में जोड़ा गया"</string>
-    <string name="groupSavedErrorToast" msgid="8121032018490980184">"लेबल के बदलाव सहेजे नहीं जा सके."</string>
+    <string name="groupSavedErrorToast" msgid="2355891714292740162">"लेबल के बदलाव सहेजे नहीं जा सके"</string>
     <string name="groupExistsErrorMessage" msgid="5196811283836946189">"वह लेबल पहले से मौजूद है"</string>
     <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
       <item quantity="one">फ़ोन नंबर वाले <xliff:g id="COUNT">%d</xliff:g> संपर्क</item>
@@ -147,7 +148,6 @@
     <string name="callAgain" msgid="3197312117049874778">"फिर से कॉल करें"</string>
     <string name="returnCall" msgid="8171961914203617813">"रिटर्न कॉल"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"\"<xliff:g id="EMAIL">%s</xliff:g>\" को संपर्कों में जोड़ें?"</string>
-    <string name="description_contact_photo" msgid="3387458082667894062">"संपर्क का फ़ोटो"</string>
     <string name="description_plus_button" msgid="515164827856229880">"जोड़ें"</string>
     <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="TOTAL_NUMBER">%s</xliff:g> में से <xliff:g id="CURRENT_NUMBER">%s</xliff:g> संपर्क"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"आपके संपर्कों के नाम"</string>
@@ -192,7 +192,6 @@
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"दि‍नांक"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"लेबल"</string>
     <string name="change_photo" msgid="8530597935483526383">"बदलें"</string>
-    <string name="primary_photo" msgid="8517942231868516999">"प्राथमिक फ़ोटो"</string>
     <string name="description_star" msgid="2605854427360036550">"पसंदीदा"</string>
     <string name="edit_contact" msgid="7529281274005689512">"संपर्क संपादित करें"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"बंद करें"</string>
@@ -269,7 +268,6 @@
     <string name="header_name_entry" msgid="1592791008096288306">"नाम"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"ईमेल"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"फ़ोन"</string>
-    <string name="header_photo_entry" msgid="4438023151411853238">"फ़ोटो"</string>
     <string name="content_description_expand_editor" msgid="1111381475901897470">"संपर्क संपादक को विस्‍तृत करने के लिए क्‍लिक करें."</string>
     <string name="content_description_collapse_editor" msgid="7598061318022977825">"संपर्क संपादक को संक्षिप्‍त करने के लिए क्‍लिक करें."</string>
     <string name="content_description_directions" msgid="2686791825798189335">"स्थान के लिए दिशा निर्देश"</string>
@@ -284,6 +282,8 @@
     <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"फ़ोटो बदलें"</string>
     <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"संपादक को खोलने में विफल रहा."</string>
     <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"इसमें सहेजें"</string>
+    <!-- no translation found for compact_editor_account_selector_read_only_title (1869435992721760221) -->
+    <skip />
     <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"वर्तमान में <xliff:g id="ACCOUNT_NAME">%s</xliff:g> में सहेजा जा रहा है. भिन्न खाता चुनने के लिए डबल-टैप करें."</string>
     <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
       <item quantity="one">लिंक किए गए संपर्क (<xliff:g id="COUNT">%d</xliff:g>)</item>
@@ -454,22 +454,14 @@
     <string name="chat_jabber" msgid="7561444230307829609">"Jabber का उपयोग करके बातचीत करें"</string>
     <string name="chat" msgid="9025361898797412245">"बातचीत करें"</string>
     <string name="description_minus_button" msgid="6908099247930477551">"हटाएं"</string>
-    <!-- no translation found for expand_name_fields_description (6883935911480726652) -->
-    <skip />
-    <!-- no translation found for collapse_name_fields_description (4757877385895561556) -->
-    <skip />
-    <!-- no translation found for expand_phonetic_name_fields_description (3865726859582581741) -->
-    <skip />
-    <!-- no translation found for collapse_phonetic_name_fields_description (9102249481855019452) -->
-    <skip />
-    <!-- no translation found for expand_fields_description (8129294181216760037) -->
-    <skip />
-    <!-- no translation found for collapse_fields_description (1884143625854637874) -->
-    <skip />
-    <!-- no translation found for announce_expanded_fields (1075947220478530622) -->
-    <skip />
-    <!-- no translation found for announce_collapsed_fields (6414231530177338704) -->
-    <skip />
+    <string name="expand_name_fields_description" msgid="6883935911480726652">"नाम फ़ील्ड विस्तृत करें"</string>
+    <string name="collapse_name_fields_description" msgid="4757877385895561556">"नाम फ़ील्ड संक्षिप्त करें"</string>
+    <string name="expand_phonetic_name_fields_description" msgid="3865726859582581741">"फ़ोनेटिक नाम फ़ील्ड विस्तृत करें"</string>
+    <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"फ़ोनेटिक नाम फ़ील्ड संक्षिप्त करें"</string>
+    <string name="expand_fields_description" msgid="8129294181216760037">"विस्तृत करें"</string>
+    <string name="collapse_fields_description" msgid="1884143625854637874">"संक्षिप्त करें"</string>
+    <string name="announce_expanded_fields" msgid="1075947220478530622">"विस्तृत किया गया"</string>
+    <string name="announce_collapsed_fields" msgid="6414231530177338704">"संक्षिप्त किया गया"</string>
     <string name="list_filter_all_accounts" msgid="8908683398914322369">"सभी संपर्क"</string>
     <string name="list_filter_all_starred" msgid="5031734941601931356">"तारांकित"</string>
     <string name="list_filter_customize" msgid="4789963356004169321">"कस्‍टमाइज़ करें"</string>
@@ -555,7 +547,8 @@
     <string name="share_favorite_contacts" msgid="4280926751003081042">"पसंदीदा संपर्कों को साझा करें"</string>
     <string name="share_contacts" msgid="8109287987498711664">"सभी संपर्कों को साझा करें"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"संपर्कों को साझा करना विफल रहा."</string>
-    <string name="dialog_import_export" msgid="4360648034889921624">"संपर्क आयात/निर्यात करें"</string>
+    <!-- no translation found for dialog_export (1628001095187741417) -->
+    <skip />
     <string name="dialog_import" msgid="2431698729761448759">"संपर्क आयात करें"</string>
     <string name="share_error" msgid="948429331673358107">"यह संपर्क साझा नहीं किया जा सकता."</string>
     <string name="no_contact_to_share" msgid="1276397530378323033">"साझा करने के लिए कोई भी संपर्क नहीं है."</string>
@@ -570,7 +563,10 @@
     <string name="menu_clear_frequents" msgid="7688250191932838833">"अक्सर किए जाने वाले साफ़ करें"</string>
     <string name="menu_select_sim" msgid="3603578201960504010">"सिम कार्ड चुनें"</string>
     <string name="menu_accounts" msgid="1424330057450189074">"खाते प्रबंधित करें"</string>
-    <string name="menu_import_export" msgid="26217871113229507">"आयात करें/निर्यात करें"</string>
+    <!-- no translation found for menu_import (6107961135813836467) -->
+    <skip />
+    <!-- no translation found for menu_export (2658783911863503902) -->
+    <skip />
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"अवरोधित नंबर"</string>
     <string name="contact_status_update_attribution" msgid="752179367353018597">"<xliff:g id="SOURCE">%1$s</xliff:g> द्वारा"</string>
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="SOURCE">%2$s</xliff:g> द्वारा <xliff:g id="DATE">%1$s</xliff:g>"</string>
@@ -604,4 +600,8 @@
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> सेकंड"</string>
     <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> मि. <xliff:g id="SECONDS">%s</xliff:g> से."</string>
     <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> घंटे <xliff:g id="MINUTES_1">%s</xliff:g> मिनट <xliff:g id="SECONDS">%s</xliff:g> सेकंड"</string>
+    <!-- no translation found for dynamic_shortcut_disabled_message (249939425761315252) -->
+    <skip />
+    <!-- no translation found for dynamic_shortcut_contact_removed_message (6845645831837615899) -->
+    <skip />
 </resources>
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
index d7e1824..1dbd9c9 100644
--- a/res/values-hr/strings.xml
+++ b/res/values-hr/strings.xml
@@ -67,6 +67,7 @@
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Predloženi kontakti"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Svi kontakti"</string>
     <string name="contactsJoinedMessage" msgid="3343535986195643136">"Kontakti su povezani"</string>
+    <string name="contact_deleted_named_toast" msgid="6558941164987421174">"Izbrisano: <xliff:g id="NAME">%s</xliff:g>"</string>
     <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
       <item quantity="one">Kontakti su izbrisani</item>
       <item quantity="few">Kontakti su izbrisani</item>
@@ -116,11 +117,11 @@
     <string name="emptyMainList" msgid="2772242747899664460">"Popis kontakata je prazan"</string>
     <string name="contactSavedToast" msgid="9171862279493213075">"Kontakt je spremljen"</string>
     <string name="contactUnlinkedToast" msgid="7122823195786012553">"Prekinuta je veza kontakata"</string>
-    <string name="contactSavedErrorToast" msgid="3207250533172944892">"Promjene kontakta nije moguće spremiti."</string>
-    <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Razdvajanje kontakata nije uspjelo."</string>
-    <string name="contactJoinErrorToast" msgid="3977932531264809035">"Kontakt nije povezan."</string>
-    <string name="contactGenericErrorToast" msgid="7774911165341591714">"Pogreška prilikom spremanja kontakta."</string>
-    <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"Promjene fotografije kontakta nisu spremljene."</string>
+    <string name="contactSavedErrorToast" msgid="4827033473908688031">"Promjene kontakta ne mogu se spremiti"</string>
+    <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"Prekid veze kontakta nije uspio"</string>
+    <string name="contactJoinErrorToast" msgid="5735129234573327701">"Kontakt se ne može povezati"</string>
+    <string name="contactGenericErrorToast" msgid="3885457515665783976">"Pogreška pri spremanju kontakta"</string>
+    <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Promjene fotografije kontakta ne mogu se spremiti"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"Oznaka se ne može učitati"</string>
     <string name="groupSavedToast" msgid="6491495462357722285">"Oznaka je spremljena"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Oznaka je izbrisana"</string>
@@ -129,7 +130,7 @@
     <string name="groupUpdatedToast" msgid="3667977658676267687">"Oznaka je ažurirana"</string>
     <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Uklonjeno iz oznake"</string>
     <string name="groupMembersAddedToast" msgid="4824834898718972768">"Dodano u oznaku"</string>
-    <string name="groupSavedErrorToast" msgid="8121032018490980184">"Promjene oznake ne mogu se spremiti."</string>
+    <string name="groupSavedErrorToast" msgid="2355891714292740162">"Promjene oznake ne mogu se spremiti"</string>
     <string name="groupExistsErrorMessage" msgid="5196811283836946189">"To oznaka već postoji"</string>
     <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
       <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> kontakt s telefonskim brojem</item>
@@ -153,7 +154,6 @@
     <string name="callAgain" msgid="3197312117049874778">"Zovi ponovo"</string>
     <string name="returnCall" msgid="8171961914203617813">"Povratni poziv"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Dodati \"<xliff:g id="EMAIL">%s</xliff:g>\" kontaktima?"</string>
-    <string name="description_contact_photo" msgid="3387458082667894062">"fotografija kontakta"</string>
     <string name="description_plus_button" msgid="515164827856229880">"plus"</string>
     <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> od <xliff:g id="TOTAL_NUMBER">%s</xliff:g> kontakata"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"Nazivi vaših kontakata"</string>
@@ -199,7 +199,6 @@
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Datum"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Oznaka"</string>
     <string name="change_photo" msgid="8530597935483526383">"Promijeni"</string>
-    <string name="primary_photo" msgid="8517942231868516999">"Primarna slika"</string>
     <string name="description_star" msgid="2605854427360036550">"favorit"</string>
     <string name="edit_contact" msgid="7529281274005689512">"Uredi kontakt"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"zatvaranje"</string>
@@ -276,7 +275,6 @@
     <string name="header_name_entry" msgid="1592791008096288306">"Ime"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"E-adresa"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"Telefon"</string>
-    <string name="header_photo_entry" msgid="4438023151411853238">"Fotografija"</string>
     <string name="content_description_expand_editor" msgid="1111381475901897470">"Kliknite da bi se alat za uređivanje kontakta proširio."</string>
     <string name="content_description_collapse_editor" msgid="7598061318022977825">"Kliknite da bi se alat za uređivanje kontakta sažeo."</string>
     <string name="content_description_directions" msgid="2686791825798189335">"upute do lokacije"</string>
@@ -291,6 +289,8 @@
     <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Promijeni fotografiju"</string>
     <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Otvaranje alata za uređivanje nije uspjelo."</string>
     <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Spremanje na"</string>
+    <!-- no translation found for compact_editor_account_selector_read_only_title (1869435992721760221) -->
+    <skip />
     <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"Trenutačno se sprema na <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Dvaput dodirnite da biste odabrali neki drugi račun."</string>
     <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
       <item quantity="one">Povezani kontakti (<xliff:g id="COUNT">%d</xliff:g>)</item>
@@ -465,22 +465,14 @@
     <string name="chat_jabber" msgid="7561444230307829609">"Chatajte koristeći Jabber"</string>
     <string name="chat" msgid="9025361898797412245">"Chat"</string>
     <string name="description_minus_button" msgid="6908099247930477551">"izbriši"</string>
-    <!-- no translation found for expand_name_fields_description (6883935911480726652) -->
-    <skip />
-    <!-- no translation found for collapse_name_fields_description (4757877385895561556) -->
-    <skip />
-    <!-- no translation found for expand_phonetic_name_fields_description (3865726859582581741) -->
-    <skip />
-    <!-- no translation found for collapse_phonetic_name_fields_description (9102249481855019452) -->
-    <skip />
-    <!-- no translation found for expand_fields_description (8129294181216760037) -->
-    <skip />
-    <!-- no translation found for collapse_fields_description (1884143625854637874) -->
-    <skip />
-    <!-- no translation found for announce_expanded_fields (1075947220478530622) -->
-    <skip />
-    <!-- no translation found for announce_collapsed_fields (6414231530177338704) -->
-    <skip />
+    <string name="expand_name_fields_description" msgid="6883935911480726652">"Proširi nazive polja"</string>
+    <string name="collapse_name_fields_description" msgid="4757877385895561556">"Sažmi nazive polja"</string>
+    <string name="expand_phonetic_name_fields_description" msgid="3865726859582581741">"Proširi polja fonetskih imena"</string>
+    <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Sažmi polja fonetskih imena"</string>
+    <string name="expand_fields_description" msgid="8129294181216760037">"Proširi"</string>
+    <string name="collapse_fields_description" msgid="1884143625854637874">"Sažmi"</string>
+    <string name="announce_expanded_fields" msgid="1075947220478530622">"Prošireno"</string>
+    <string name="announce_collapsed_fields" msgid="6414231530177338704">"Sažeto"</string>
     <string name="list_filter_all_accounts" msgid="8908683398914322369">"Svi kontakti"</string>
     <string name="list_filter_all_starred" msgid="5031734941601931356">"Sa zvjezdicom"</string>
     <string name="list_filter_customize" msgid="4789963356004169321">"Prilagodi"</string>
@@ -566,7 +558,8 @@
     <string name="share_favorite_contacts" msgid="4280926751003081042">"Dijeljenje omiljenih kontakata"</string>
     <string name="share_contacts" msgid="8109287987498711664">"Dijeljenje svih kontakata"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"Dijeljenje kontakata nije uspjelo."</string>
-    <string name="dialog_import_export" msgid="4360648034889921624">"Uvoz/izvoz kontakata"</string>
+    <!-- no translation found for dialog_export (1628001095187741417) -->
+    <skip />
     <string name="dialog_import" msgid="2431698729761448759">"Uvezi kontakte"</string>
     <string name="share_error" msgid="948429331673358107">"Ovaj kontakt nije moguće dijeliti."</string>
     <string name="no_contact_to_share" msgid="1276397530378323033">"Nema kontakata za dijeljenje."</string>
@@ -581,7 +574,10 @@
     <string name="menu_clear_frequents" msgid="7688250191932838833">"Briši često kontaktirane"</string>
     <string name="menu_select_sim" msgid="3603578201960504010">"Odaberi SIM karticu"</string>
     <string name="menu_accounts" msgid="1424330057450189074">"Upravljanje računima"</string>
-    <string name="menu_import_export" msgid="26217871113229507">"Uvoz/izvoz"</string>
+    <!-- no translation found for menu_import (6107961135813836467) -->
+    <skip />
+    <!-- no translation found for menu_export (2658783911863503902) -->
+    <skip />
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"Blokirani brojevi"</string>
     <string name="contact_status_update_attribution" msgid="752179367353018597">"preko izvora <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> preko izvora <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
@@ -616,4 +612,8 @@
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> s"</string>
     <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
     <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> h <xliff:g id="MINUTES_1">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
+    <!-- no translation found for dynamic_shortcut_disabled_message (249939425761315252) -->
+    <skip />
+    <!-- no translation found for dynamic_shortcut_contact_removed_message (6845645831837615899) -->
+    <skip />
 </resources>
diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml
index b4a073b..4cf8e4c 100644
--- a/res/values-hu/strings.xml
+++ b/res/values-hu/strings.xml
@@ -67,6 +67,7 @@
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Javasolt névjegyek"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Összes névjegy"</string>
     <string name="contactsJoinedMessage" msgid="3343535986195643136">"Névkegyek társítva"</string>
+    <string name="contact_deleted_named_toast" msgid="6558941164987421174">"<xliff:g id="NAME">%s</xliff:g> törölve"</string>
     <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
       <item quantity="other">Névjegyek törölve.</item>
       <item quantity="one">Névjegy törölve.</item>
@@ -113,11 +114,11 @@
     <string name="emptyMainList" msgid="2772242747899664460">"A névjegylista üres"</string>
     <string name="contactSavedToast" msgid="9171862279493213075">"Névjegy elmentve"</string>
     <string name="contactUnlinkedToast" msgid="7122823195786012553">"Névjegyek szétválasztva"</string>
-    <string name="contactSavedErrorToast" msgid="3207250533172944892">"Nem sikerült menteni a névjegymódosításokat."</string>
-    <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Nem sikerült szétbontani a névjegyet."</string>
-    <string name="contactJoinErrorToast" msgid="3977932531264809035">"Nem sikerült társítani a névjegyet."</string>
-    <string name="contactGenericErrorToast" msgid="7774911165341591714">"Hiba történt a névjegy mentése során"</string>
-    <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"Nem sikerült menteni a névjegyfotó módosításait."</string>
+    <string name="contactSavedErrorToast" msgid="4827033473908688031">"Nem sikerült menteni a névjegymódosításokat"</string>
+    <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"Nem sikerült leválasztani a névjegyet"</string>
+    <string name="contactJoinErrorToast" msgid="5735129234573327701">"Nem sikerült társítani a névjegyet"</string>
+    <string name="contactGenericErrorToast" msgid="3885457515665783976">"Hiba történt az ismerős mentése során"</string>
+    <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Nem sikerült menteni a névjegyfotó módosításait"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"Nem sikerült betölteni a címkét"</string>
     <string name="groupSavedToast" msgid="6491495462357722285">"Címke mentve"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Címke törölve"</string>
@@ -126,7 +127,7 @@
     <string name="groupUpdatedToast" msgid="3667977658676267687">"Címke frissítve"</string>
     <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Eltávolítva a címkéből"</string>
     <string name="groupMembersAddedToast" msgid="4824834898718972768">"Hozzáadva a címkéhez"</string>
-    <string name="groupSavedErrorToast" msgid="8121032018490980184">"Nem sikerült menteni a címke változtatásait."</string>
+    <string name="groupSavedErrorToast" msgid="2355891714292740162">"Nem sikerült menteni a címke változtatásait"</string>
     <string name="groupExistsErrorMessage" msgid="5196811283836946189">"Már van ilyen címke"</string>
     <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
       <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> névjegy telefonszámmal</item>
@@ -147,7 +148,6 @@
     <string name="callAgain" msgid="3197312117049874778">"Hívásismétlés"</string>
     <string name="returnCall" msgid="8171961914203617813">"Visszahívás"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Hozzáadja a(z) \"<xliff:g id="EMAIL">%s</xliff:g>\"címet a Címtárhoz?"</string>
-    <string name="description_contact_photo" msgid="3387458082667894062">"fotó a névjegyhez"</string>
     <string name="description_plus_button" msgid="515164827856229880">"plusz"</string>
     <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%s</xliff:g> névjegy"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"Ismerősök nevei"</string>
@@ -192,7 +192,6 @@
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Dátum"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Címke"</string>
     <string name="change_photo" msgid="8530597935483526383">"Módosítás"</string>
-    <string name="primary_photo" msgid="8517942231868516999">"Elsődleges fotó"</string>
     <string name="description_star" msgid="2605854427360036550">"kedvenc"</string>
     <string name="edit_contact" msgid="7529281274005689512">"Névjegy szerkesztése"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"bezárás"</string>
@@ -269,7 +268,6 @@
     <string name="header_name_entry" msgid="1592791008096288306">"Név"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"E-mail"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"Telefon"</string>
-    <string name="header_photo_entry" msgid="4438023151411853238">"Fénykép"</string>
     <string name="content_description_expand_editor" msgid="1111381475901897470">"Kattintson a névjegyszerkesztő kibontásához."</string>
     <string name="content_description_collapse_editor" msgid="7598061318022977825">"Kattintson a névjegyszerkesztő összecsukásához."</string>
     <string name="content_description_directions" msgid="2686791825798189335">"útvonalterv a helyhez"</string>
@@ -284,6 +282,8 @@
     <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Fénykép lecserélése"</string>
     <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Nem sikerült megnyitni a szerkesztőt."</string>
     <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Mentés ide"</string>
+    <!-- no translation found for compact_editor_account_selector_read_only_title (1869435992721760221) -->
+    <skip />
     <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"Jelenleg a(z) <xliff:g id="ACCOUNT_NAME">%s</xliff:g>fiókba menti a névjegyet. Koppintson duplán másik fiók kiválasztásához."</string>
     <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
       <item quantity="other">Társított névjegyek (<xliff:g id="COUNT">%d</xliff:g>)</item>
@@ -454,22 +454,14 @@
     <string name="chat_jabber" msgid="7561444230307829609">"Csevegés Jabberen"</string>
     <string name="chat" msgid="9025361898797412245">"Csevegés"</string>
     <string name="description_minus_button" msgid="6908099247930477551">"törlés"</string>
-    <!-- no translation found for expand_name_fields_description (6883935911480726652) -->
-    <skip />
-    <!-- no translation found for collapse_name_fields_description (4757877385895561556) -->
-    <skip />
-    <!-- no translation found for expand_phonetic_name_fields_description (3865726859582581741) -->
-    <skip />
-    <!-- no translation found for collapse_phonetic_name_fields_description (9102249481855019452) -->
-    <skip />
-    <!-- no translation found for expand_fields_description (8129294181216760037) -->
-    <skip />
-    <!-- no translation found for collapse_fields_description (1884143625854637874) -->
-    <skip />
-    <!-- no translation found for announce_expanded_fields (1075947220478530622) -->
-    <skip />
-    <!-- no translation found for announce_collapsed_fields (6414231530177338704) -->
-    <skip />
+    <string name="expand_name_fields_description" msgid="6883935911480726652">"Névmezők kibontása"</string>
+    <string name="collapse_name_fields_description" msgid="4757877385895561556">"Névmezők összecsukása"</string>
+    <string name="expand_phonetic_name_fields_description" msgid="3865726859582581741">"Fonetikusnév-mezők kibontása"</string>
+    <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Fonetikusnév-mezők összecsukása"</string>
+    <string name="expand_fields_description" msgid="8129294181216760037">"Kibontás"</string>
+    <string name="collapse_fields_description" msgid="1884143625854637874">"Összecsukás"</string>
+    <string name="announce_expanded_fields" msgid="1075947220478530622">"Kibontva"</string>
+    <string name="announce_collapsed_fields" msgid="6414231530177338704">"Összecsukva"</string>
     <string name="list_filter_all_accounts" msgid="8908683398914322369">"Összes névjegy"</string>
     <string name="list_filter_all_starred" msgid="5031734941601931356">"Csillaggal megjelölt"</string>
     <string name="list_filter_customize" msgid="4789963356004169321">"Személyre szabás"</string>
@@ -555,7 +547,8 @@
     <string name="share_favorite_contacts" msgid="4280926751003081042">"Kedvenc névjegyek megosztása"</string>
     <string name="share_contacts" msgid="8109287987498711664">"Az összes névjegy megosztása"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"Nem sikerült megosztani a névjegyeket."</string>
-    <string name="dialog_import_export" msgid="4360648034889921624">"Névjegyek importálása/exportálása"</string>
+    <!-- no translation found for dialog_export (1628001095187741417) -->
+    <skip />
     <string name="dialog_import" msgid="2431698729761448759">"Névjegyek importálása"</string>
     <string name="share_error" msgid="948429331673358107">"Ez a névjegy nem osztható meg."</string>
     <string name="no_contact_to_share" msgid="1276397530378323033">"Nincsenek megosztható névjegyek."</string>
@@ -570,7 +563,10 @@
     <string name="menu_clear_frequents" msgid="7688250191932838833">"Gyakran keresettek törlése"</string>
     <string name="menu_select_sim" msgid="3603578201960504010">"SIM kártya kiválasztása"</string>
     <string name="menu_accounts" msgid="1424330057450189074">"Fiókok kezelése"</string>
-    <string name="menu_import_export" msgid="26217871113229507">"Importálás/exportálás"</string>
+    <!-- no translation found for menu_import (6107961135813836467) -->
+    <skip />
+    <!-- no translation found for menu_export (2658783911863503902) -->
+    <skip />
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"Letiltott számok"</string>
     <string name="contact_status_update_attribution" msgid="752179367353018597">"- <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> - <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
@@ -604,4 +600,8 @@
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> másodperc"</string>
     <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> perc, <xliff:g id="SECONDS">%s</xliff:g> mp"</string>
     <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> óra, <xliff:g id="MINUTES_1">%s</xliff:g> perc, <xliff:g id="SECONDS">%s</xliff:g> mp"</string>
+    <!-- no translation found for dynamic_shortcut_disabled_message (249939425761315252) -->
+    <skip />
+    <!-- no translation found for dynamic_shortcut_contact_removed_message (6845645831837615899) -->
+    <skip />
 </resources>
diff --git a/res/values-hy-rAM/strings.xml b/res/values-hy-rAM/strings.xml
index a2cf049..bae12c4 100644
--- a/res/values-hy-rAM/strings.xml
+++ b/res/values-hy-rAM/strings.xml
@@ -67,6 +67,7 @@
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Առաջարկվող կոնտակները"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Բոլոր կոնտակտները"</string>
     <string name="contactsJoinedMessage" msgid="3343535986195643136">"Կոնտակտները միավորված են"</string>
+    <string name="contact_deleted_named_toast" msgid="6558941164987421174">"<xliff:g id="NAME">%s</xliff:g> կոնտակտը ջնջվեց"</string>
     <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
       <item quantity="one">Կոնտակտները ջնջվեցին</item>
       <item quantity="other">Կոնտակտները ջնջվեցին</item>
@@ -113,11 +114,11 @@
     <string name="emptyMainList" msgid="2772242747899664460">"Կոնտակտների ցանկը դատարկ է"</string>
     <string name="contactSavedToast" msgid="9171862279493213075">"Կոնտակտը պահվեց"</string>
     <string name="contactUnlinkedToast" msgid="7122823195786012553">"Կոնտակտներն անջատվեցին"</string>
-    <string name="contactSavedErrorToast" msgid="3207250533172944892">"Հնարավոր չէ պահել կոնտակտային փոփոխությունները:"</string>
-    <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Չհաջողվեց անջատել կոնտակտը:"</string>
-    <string name="contactJoinErrorToast" msgid="3977932531264809035">"Չհաջողվեց միակցել կոնտակտները:"</string>
-    <string name="contactGenericErrorToast" msgid="7774911165341591714">"Չհաջողվեց պահել կոնտակտը:"</string>
-    <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"Չհաջողվեց պահել կոնտակտի լուսանկարի փոփոխությունները:"</string>
+    <string name="contactSavedErrorToast" msgid="4827033473908688031">"Չհաջողվեց պահել կոնտակտի տվյալների փոփոխությունները"</string>
+    <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"Չհաջողվեց անջատել կոնտակտը"</string>
+    <string name="contactJoinErrorToast" msgid="5735129234573327701">"Չհաջողվեց կապել կոնտակտը"</string>
+    <string name="contactGenericErrorToast" msgid="3885457515665783976">"Չհաջողվեց պահել կոնտակտը"</string>
+    <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Չհաջողվեց պահել կոնտակտի լուսանկարի փոփոխությունները"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"Չհաջողվեց բեռնել պիտակը"</string>
     <string name="groupSavedToast" msgid="6491495462357722285">"Պիտակը պահվեց"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Պիտակը ջնջվեց"</string>
@@ -126,7 +127,7 @@
     <string name="groupUpdatedToast" msgid="3667977658676267687">"Պիտակը թարմացվեց"</string>
     <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Հեռացվել է պիտակից"</string>
     <string name="groupMembersAddedToast" msgid="4824834898718972768">"Ավելացվեց պիտակին"</string>
-    <string name="groupSavedErrorToast" msgid="8121032018490980184">"Չհաջողվեց պահել պիտակի փոփոխությունները:"</string>
+    <string name="groupSavedErrorToast" msgid="2355891714292740162">"Չհաջողվեց պահել պիտակի փոփոխությունները"</string>
     <string name="groupExistsErrorMessage" msgid="5196811283836946189">"Այս անունով խումբ արդեն գոյություն ունի"</string>
     <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
       <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> հեռախոսահամարով կոնտակտ</item>
@@ -147,7 +148,6 @@
     <string name="callAgain" msgid="3197312117049874778">"Կրկին զանգել"</string>
     <string name="returnCall" msgid="8171961914203617813">"Հետ զանգել"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Ավելացնե՞լ «<xliff:g id="EMAIL">%s</xliff:g>»-ը կոնտակտներին:"</string>
-    <string name="description_contact_photo" msgid="3387458082667894062">"կոնտակտի լուսանկարը"</string>
     <string name="description_plus_button" msgid="515164827856229880">"գումարել"</string>
     <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g>-ը <xliff:g id="TOTAL_NUMBER">%s</xliff:g> կոնտակտից"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"Ձեր կոնտակտների անունները"</string>
@@ -192,7 +192,6 @@
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Ամսաթիվը"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Պիտակ"</string>
     <string name="change_photo" msgid="8530597935483526383">"Փոխել"</string>
-    <string name="primary_photo" msgid="8517942231868516999">"Հիմնական լուսանկար"</string>
     <string name="description_star" msgid="2605854427360036550">"ընտրյալ"</string>
     <string name="edit_contact" msgid="7529281274005689512">"Փոփոխել կոնտակտը"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"փակել"</string>
@@ -269,7 +268,6 @@
     <string name="header_name_entry" msgid="1592791008096288306">"Անուն"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"Էլփոստի հասցե"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"Հեռախոս"</string>
-    <string name="header_photo_entry" msgid="4438023151411853238">"Լուսանկար"</string>
     <string name="content_description_expand_editor" msgid="1111381475901897470">"Սեղմեք՝ կոնտակտների խմբագրիչը ընդարձակելու համար:"</string>
     <string name="content_description_collapse_editor" msgid="7598061318022977825">"Սեղմեք՝ կոնտակտների խմբագրիչը կոծկելու համար:"</string>
     <string name="content_description_directions" msgid="2686791825798189335">"Երթուղիներ"</string>
@@ -284,6 +282,8 @@
     <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Փոխել լուսանկարը"</string>
     <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Չհաջողվեց բացել խմբագրիչը:"</string>
     <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Պահվում է հետևյալ հաշվում՝"</string>
+    <!-- no translation found for compact_editor_account_selector_read_only_title (1869435992721760221) -->
+    <skip />
     <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"Ներկայումս պահվում է <xliff:g id="ACCOUNT_NAME">%s</xliff:g> հաշվում: Կրկնակի հպեք՝ մեկ այլ հաշիվ ընտրելու համար:"</string>
     <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
       <item quantity="one">Կապված կոնտակտներ (<xliff:g id="COUNT">%d</xliff:g>)</item>
@@ -454,22 +454,14 @@
     <string name="chat_jabber" msgid="7561444230307829609">"Զրուցել Jabber-ով"</string>
     <string name="chat" msgid="9025361898797412245">"Զրուցել"</string>
     <string name="description_minus_button" msgid="6908099247930477551">"ջնջել"</string>
-    <!-- no translation found for expand_name_fields_description (6883935911480726652) -->
-    <skip />
-    <!-- no translation found for collapse_name_fields_description (4757877385895561556) -->
-    <skip />
-    <!-- no translation found for expand_phonetic_name_fields_description (3865726859582581741) -->
-    <skip />
-    <!-- no translation found for collapse_phonetic_name_fields_description (9102249481855019452) -->
-    <skip />
-    <!-- no translation found for expand_fields_description (8129294181216760037) -->
-    <skip />
-    <!-- no translation found for collapse_fields_description (1884143625854637874) -->
-    <skip />
-    <!-- no translation found for announce_expanded_fields (1075947220478530622) -->
-    <skip />
-    <!-- no translation found for announce_collapsed_fields (6414231530177338704) -->
-    <skip />
+    <string name="expand_name_fields_description" msgid="6883935911480726652">"Ընդարձակել անվան դաշտերը"</string>
+    <string name="collapse_name_fields_description" msgid="4757877385895561556">"Կոծկել անվան դաշտերը"</string>
+    <string name="expand_phonetic_name_fields_description" msgid="3865726859582581741">"Ընդարձակել տառադարձված անվան դաշտերը"</string>
+    <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Կոծկել տառադարձված անվան դաշտերը"</string>
+    <string name="expand_fields_description" msgid="8129294181216760037">"Ընդարձակել"</string>
+    <string name="collapse_fields_description" msgid="1884143625854637874">"Կոծկել"</string>
+    <string name="announce_expanded_fields" msgid="1075947220478530622">"Ընդարձակված է"</string>
+    <string name="announce_collapsed_fields" msgid="6414231530177338704">"Կոծկված է"</string>
     <string name="list_filter_all_accounts" msgid="8908683398914322369">"Բոլոր կոնտակտները"</string>
     <string name="list_filter_all_starred" msgid="5031734941601931356">"Աստղանշված"</string>
     <string name="list_filter_customize" msgid="4789963356004169321">"Հարմարեցնել"</string>
@@ -555,7 +547,8 @@
     <string name="share_favorite_contacts" msgid="4280926751003081042">"Կիսվել նախընտրած կոնտակտներով"</string>
     <string name="share_contacts" msgid="8109287987498711664">"Կիսվել բոլոր կոնտակտներով"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"Չհաջողվեց կիսվել կոնտակտներով:"</string>
-    <string name="dialog_import_export" msgid="4360648034889921624">"Ներմուծել/արտահանել կոնտակտներ"</string>
+    <!-- no translation found for dialog_export (1628001095187741417) -->
+    <skip />
     <string name="dialog_import" msgid="2431698729761448759">"Ներմուծել կոնտակտներ"</string>
     <string name="share_error" msgid="948429331673358107">"Չհաջողվեց կիսվել կոնտակտով:"</string>
     <string name="no_contact_to_share" msgid="1276397530378323033">"Հասանելի կոնտակտներ չկան։"</string>
@@ -570,7 +563,10 @@
     <string name="menu_clear_frequents" msgid="7688250191932838833">"Մաքրել ամենաշատ զանգվածները"</string>
     <string name="menu_select_sim" msgid="3603578201960504010">"Ընտրեք SIM քարտը"</string>
     <string name="menu_accounts" msgid="1424330057450189074">"Հաշիվների կառավարում"</string>
-    <string name="menu_import_export" msgid="26217871113229507">"Ներմուծել/արտահանել"</string>
+    <!-- no translation found for menu_import (6107961135813836467) -->
+    <skip />
+    <!-- no translation found for menu_export (2658783911863503902) -->
+    <skip />
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"Արգելափակված համարներ"</string>
     <string name="contact_status_update_attribution" msgid="752179367353018597">"<xliff:g id="SOURCE">%1$s</xliff:g>-ի միջոցով"</string>
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> <xliff:g id="SOURCE">%2$s</xliff:g>-ով"</string>
@@ -604,4 +600,8 @@
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> վ"</string>
     <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> ր <xliff:g id="SECONDS">%s</xliff:g> վ"</string>
     <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> ժ <xliff:g id="MINUTES_1">%s</xliff:g> ր <xliff:g id="SECONDS">%s</xliff:g> վ"</string>
+    <!-- no translation found for dynamic_shortcut_disabled_message (249939425761315252) -->
+    <skip />
+    <!-- no translation found for dynamic_shortcut_contact_removed_message (6845645831837615899) -->
+    <skip />
 </resources>
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
index 8046603..4a95300 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -67,6 +67,7 @@
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Kontak yang disarankan"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Semua kontak"</string>
     <string name="contactsJoinedMessage" msgid="3343535986195643136">"Kontak ditautkan"</string>
+    <string name="contact_deleted_named_toast" msgid="6558941164987421174">"<xliff:g id="NAME">%s</xliff:g> dihapus"</string>
     <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
       <item quantity="other">Kontak dihapus</item>
       <item quantity="one">Kontak dihapus</item>
@@ -113,11 +114,11 @@
     <string name="emptyMainList" msgid="2772242747899664460">"Daftar kontak Anda kosong"</string>
     <string name="contactSavedToast" msgid="9171862279493213075">"Kontak disimpan"</string>
     <string name="contactUnlinkedToast" msgid="7122823195786012553">"Kontak dibatalkan tautannya"</string>
-    <string name="contactSavedErrorToast" msgid="3207250533172944892">"Tidak dapat menyimpan perubahan kontak."</string>
-    <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Tidak dapat membatalkan tautan kontak."</string>
-    <string name="contactJoinErrorToast" msgid="3977932531264809035">"Tidak dapat menautkan kontak."</string>
-    <string name="contactGenericErrorToast" msgid="7774911165341591714">"Kesalahan saat menyimpan kontak."</string>
-    <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"Tidak dapat menyimpan perubahan foto kontak."</string>
+    <string name="contactSavedErrorToast" msgid="4827033473908688031">"Tidak dapat menyimpan perubahan kontak"</string>
+    <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"Tidak dapat membatalkan tautan kontak"</string>
+    <string name="contactJoinErrorToast" msgid="5735129234573327701">"Tidak dapat menautkan kontak"</string>
+    <string name="contactGenericErrorToast" msgid="3885457515665783976">"Kesalahan saat menyimpan kontak"</string>
+    <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Tidak dapat menyimpan perubahan foto kontak"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"Gagal memuat label"</string>
     <string name="groupSavedToast" msgid="6491495462357722285">"Label disimpan"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Label dihapus"</string>
@@ -126,7 +127,7 @@
     <string name="groupUpdatedToast" msgid="3667977658676267687">"Label diperbarui"</string>
     <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Dihapus dari label"</string>
     <string name="groupMembersAddedToast" msgid="4824834898718972768">"Ditambahkan ke label"</string>
-    <string name="groupSavedErrorToast" msgid="8121032018490980184">"Tidak dapat menyimpan perubahan label."</string>
+    <string name="groupSavedErrorToast" msgid="2355891714292740162">"Tidak dapat menyimpan perubahan label"</string>
     <string name="groupExistsErrorMessage" msgid="5196811283836946189">"Label tersebut sudah ada"</string>
     <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
       <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> kontak dengan nomor telepon</item>
@@ -147,7 +148,6 @@
     <string name="callAgain" msgid="3197312117049874778">"Hubungi sekali lagi"</string>
     <string name="returnCall" msgid="8171961914203617813">"Panggilan kembali"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Tambahkan \"<xliff:g id="EMAIL">%s</xliff:g>\" ke kontak?"</string>
-    <string name="description_contact_photo" msgid="3387458082667894062">"foto kontak"</string>
     <string name="description_plus_button" msgid="515164827856229880">"plus"</string>
     <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> dari <xliff:g id="TOTAL_NUMBER">%s</xliff:g> kontak"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"Nama kontak Anda"</string>
@@ -192,7 +192,6 @@
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Tanggal"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Beri Label"</string>
     <string name="change_photo" msgid="8530597935483526383">"Ganti"</string>
-    <string name="primary_photo" msgid="8517942231868516999">"Foto utama"</string>
     <string name="description_star" msgid="2605854427360036550">"favorit"</string>
     <string name="edit_contact" msgid="7529281274005689512">"Edit kontak"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"tutup"</string>
@@ -269,7 +268,6 @@
     <string name="header_name_entry" msgid="1592791008096288306">"Nama"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"Email"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"Telepon"</string>
-    <string name="header_photo_entry" msgid="4438023151411853238">"Foto"</string>
     <string name="content_description_expand_editor" msgid="1111381475901897470">"Klik untuk meluaskan editor kontak."</string>
     <string name="content_description_collapse_editor" msgid="7598061318022977825">"Klik untuk menciutkan editor kontak."</string>
     <string name="content_description_directions" msgid="2686791825798189335">"petunjuk arah ke lokasi"</string>
@@ -284,6 +282,8 @@
     <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Ganti foto"</string>
     <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Gagal membuka editor."</string>
     <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Menyimpan ke"</string>
+    <!-- no translation found for compact_editor_account_selector_read_only_title (1869435992721760221) -->
+    <skip />
     <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"Saat ini menyimpan ke <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Ketuk dua kali untuk memilih akun lain."</string>
     <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
       <item quantity="other">Kontak tertaut (<xliff:g id="COUNT">%d</xliff:g>)</item>
@@ -454,22 +454,14 @@
     <string name="chat_jabber" msgid="7561444230307829609">"Ngobrol menggunakan Jabber"</string>
     <string name="chat" msgid="9025361898797412245">"Ngobrol"</string>
     <string name="description_minus_button" msgid="6908099247930477551">"hapus"</string>
-    <!-- no translation found for expand_name_fields_description (6883935911480726652) -->
-    <skip />
-    <!-- no translation found for collapse_name_fields_description (4757877385895561556) -->
-    <skip />
-    <!-- no translation found for expand_phonetic_name_fields_description (3865726859582581741) -->
-    <skip />
-    <!-- no translation found for collapse_phonetic_name_fields_description (9102249481855019452) -->
-    <skip />
-    <!-- no translation found for expand_fields_description (8129294181216760037) -->
-    <skip />
-    <!-- no translation found for collapse_fields_description (1884143625854637874) -->
-    <skip />
-    <!-- no translation found for announce_expanded_fields (1075947220478530622) -->
-    <skip />
-    <!-- no translation found for announce_collapsed_fields (6414231530177338704) -->
-    <skip />
+    <string name="expand_name_fields_description" msgid="6883935911480726652">"Luaskan bidang nama"</string>
+    <string name="collapse_name_fields_description" msgid="4757877385895561556">"Ciutkan bidang nama"</string>
+    <string name="expand_phonetic_name_fields_description" msgid="3865726859582581741">"Luaskan bidang nama fonetik"</string>
+    <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Ciutkan bidang nama fonetik"</string>
+    <string name="expand_fields_description" msgid="8129294181216760037">"Luaskan"</string>
+    <string name="collapse_fields_description" msgid="1884143625854637874">"Ciutkan"</string>
+    <string name="announce_expanded_fields" msgid="1075947220478530622">"Diperluas"</string>
+    <string name="announce_collapsed_fields" msgid="6414231530177338704">"Diciutkan"</string>
     <string name="list_filter_all_accounts" msgid="8908683398914322369">"Semua kontak"</string>
     <string name="list_filter_all_starred" msgid="5031734941601931356">"Yang berbintang"</string>
     <string name="list_filter_customize" msgid="4789963356004169321">"Khusus"</string>
@@ -555,7 +547,8 @@
     <string name="share_favorite_contacts" msgid="4280926751003081042">"Bagikan kontak favorit"</string>
     <string name="share_contacts" msgid="8109287987498711664">"Bagikan semua kontak"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"Gagal membagikan kontak."</string>
-    <string name="dialog_import_export" msgid="4360648034889921624">"Impor/ekspor kontak"</string>
+    <!-- no translation found for dialog_export (1628001095187741417) -->
+    <skip />
     <string name="dialog_import" msgid="2431698729761448759">"Impor kontak"</string>
     <string name="share_error" msgid="948429331673358107">"Kontak ini tidak dapat dibagi."</string>
     <string name="no_contact_to_share" msgid="1276397530378323033">"Tidak ada kontak untuk dibagikan."</string>
@@ -570,7 +563,10 @@
     <string name="menu_clear_frequents" msgid="7688250191932838833">"Hapus yang sering"</string>
     <string name="menu_select_sim" msgid="3603578201960504010">"Pilih kartu SIM"</string>
     <string name="menu_accounts" msgid="1424330057450189074">"Kelola akun"</string>
-    <string name="menu_import_export" msgid="26217871113229507">"Impor/ekspor"</string>
+    <!-- no translation found for menu_import (6107961135813836467) -->
+    <skip />
+    <!-- no translation found for menu_export (2658783911863503902) -->
+    <skip />
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"Nomor yang diblokir"</string>
     <string name="contact_status_update_attribution" msgid="752179367353018597">"melalui <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> melalui <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
@@ -604,4 +600,8 @@
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> dtk"</string>
     <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> mnt <xliff:g id="SECONDS">%s</xliff:g> dtk"</string>
     <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> j <xliff:g id="MINUTES_1">%s</xliff:g> mnt <xliff:g id="SECONDS">%s</xliff:g> dtk"</string>
+    <!-- no translation found for dynamic_shortcut_disabled_message (249939425761315252) -->
+    <skip />
+    <!-- no translation found for dynamic_shortcut_contact_removed_message (6845645831837615899) -->
+    <skip />
 </resources>
diff --git a/res/values-is-rIS/strings.xml b/res/values-is-rIS/strings.xml
index 2a3bfdf..d79ddf0 100644
--- a/res/values-is-rIS/strings.xml
+++ b/res/values-is-rIS/strings.xml
@@ -67,6 +67,7 @@
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Tillögur að tengiliðum"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Allir tengiliðir"</string>
     <string name="contactsJoinedMessage" msgid="3343535986195643136">"Tengiliðir tengdir saman"</string>
+    <string name="contact_deleted_named_toast" msgid="6558941164987421174">"<xliff:g id="NAME">%s</xliff:g> eytt"</string>
     <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
       <item quantity="one">Tengiliðum eytt</item>
       <item quantity="other">Tengiliðum eytt</item>
@@ -113,11 +114,11 @@
     <string name="emptyMainList" msgid="2772242747899664460">"Listinn yfir tengiliði er tómur"</string>
     <string name="contactSavedToast" msgid="9171862279493213075">"Tengiliður vistaður"</string>
     <string name="contactUnlinkedToast" msgid="7122823195786012553">"Tengiliðir aðskildir"</string>
-    <string name="contactSavedErrorToast" msgid="3207250533172944892">"Ekki tókst að vista breytingar á tengiliðnum."</string>
-    <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Ekki var hægt að skipta upp tengiliðnum."</string>
-    <string name="contactJoinErrorToast" msgid="3977932531264809035">"Ekki tókst að tengja tengilið."</string>
-    <string name="contactGenericErrorToast" msgid="7774911165341591714">"Villa við að vista tengilið."</string>
-    <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"Ekki var hægt að vista breytingar á mynd tengiliðar."</string>
+    <string name="contactSavedErrorToast" msgid="4827033473908688031">"Ekki tókst að vista breytingar á tengiliðnum"</string>
+    <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"Ekki var hægt að skipta upp tengiliðnum"</string>
+    <string name="contactJoinErrorToast" msgid="5735129234573327701">"Ekki tókst að tengja tengilið"</string>
+    <string name="contactGenericErrorToast" msgid="3885457515665783976">"Villa við að vista tengilið"</string>
+    <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Ekki var hægt að vista breytingar á mynd tengiliðar"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"Ekki tókst að hlaða flokk"</string>
     <string name="groupSavedToast" msgid="6491495462357722285">"Flokkur vistaður"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Flokki eytt"</string>
@@ -126,7 +127,7 @@
     <string name="groupUpdatedToast" msgid="3667977658676267687">"Flokkur uppfærður"</string>
     <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Fjarlægðir úr flokki"</string>
     <string name="groupMembersAddedToast" msgid="4824834898718972768">"Bætt við flokk"</string>
-    <string name="groupSavedErrorToast" msgid="8121032018490980184">"Ekki tókst að vista breytingar á flokki."</string>
+    <string name="groupSavedErrorToast" msgid="2355891714292740162">"Ekki tókst að vista breytingar á flokki"</string>
     <string name="groupExistsErrorMessage" msgid="5196811283836946189">"Þessi flokkur er þegar til"</string>
     <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
       <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> tengiliður með símanúmer</item>
@@ -147,7 +148,6 @@
     <string name="callAgain" msgid="3197312117049874778">"Hringja aftur"</string>
     <string name="returnCall" msgid="8171961914203617813">"Hringja til baka"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Bæta „<xliff:g id="EMAIL">%s</xliff:g>“ við tengiliði?"</string>
-    <string name="description_contact_photo" msgid="3387458082667894062">"mynd tengiliðar"</string>
     <string name="description_plus_button" msgid="515164827856229880">"plús"</string>
     <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> af <xliff:g id="TOTAL_NUMBER">%s</xliff:g> tengiliðum"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"Nöfn tengiliðanna þinna"</string>
@@ -192,7 +192,6 @@
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Dagsetning"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Flokkur"</string>
     <string name="change_photo" msgid="8530597935483526383">"Breyta"</string>
-    <string name="primary_photo" msgid="8517942231868516999">"Aðalmynd"</string>
     <string name="description_star" msgid="2605854427360036550">"uppáhald"</string>
     <string name="edit_contact" msgid="7529281274005689512">"Breyta tengilið"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"loka"</string>
@@ -269,7 +268,6 @@
     <string name="header_name_entry" msgid="1592791008096288306">"Nafn"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"Netfang"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"Sími"</string>
-    <string name="header_photo_entry" msgid="4438023151411853238">"Ljósmynd"</string>
     <string name="content_description_expand_editor" msgid="1111381475901897470">"Smelltu til að stækka tengiliðaritilinn."</string>
     <string name="content_description_collapse_editor" msgid="7598061318022977825">"Smelltu til að draga saman tengiliðaritilinn."</string>
     <string name="content_description_directions" msgid="2686791825798189335">"leiðarlýsing að stað"</string>
@@ -284,6 +282,8 @@
     <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Skipta um mynd"</string>
     <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Mistókst að opna ritilinn."</string>
     <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Vistar í"</string>
+    <!-- no translation found for compact_editor_account_selector_read_only_title (1869435992721760221) -->
+    <skip />
     <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"Vistar núna á <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Ýttu tvisvar til að velja annan reikning."</string>
     <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
       <item quantity="one">Tengdir tengiliðir (<xliff:g id="COUNT">%d</xliff:g>)</item>
@@ -454,22 +454,14 @@
     <string name="chat_jabber" msgid="7561444230307829609">"Spjalla með Jabber"</string>
     <string name="chat" msgid="9025361898797412245">"Spjalla"</string>
     <string name="description_minus_button" msgid="6908099247930477551">"eyða"</string>
-    <!-- no translation found for expand_name_fields_description (6883935911480726652) -->
-    <skip />
-    <!-- no translation found for collapse_name_fields_description (4757877385895561556) -->
-    <skip />
-    <!-- no translation found for expand_phonetic_name_fields_description (3865726859582581741) -->
-    <skip />
-    <!-- no translation found for collapse_phonetic_name_fields_description (9102249481855019452) -->
-    <skip />
-    <!-- no translation found for expand_fields_description (8129294181216760037) -->
-    <skip />
-    <!-- no translation found for collapse_fields_description (1884143625854637874) -->
-    <skip />
-    <!-- no translation found for announce_expanded_fields (1075947220478530622) -->
-    <skip />
-    <!-- no translation found for announce_collapsed_fields (6414231530177338704) -->
-    <skip />
+    <string name="expand_name_fields_description" msgid="6883935911480726652">"Stækka nafnareiti"</string>
+    <string name="collapse_name_fields_description" msgid="4757877385895561556">"Minnka nafnareiti"</string>
+    <string name="expand_phonetic_name_fields_description" msgid="3865726859582581741">"Stækka nafnareiti með hljóðritun"</string>
+    <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Minnka nafnareiti með hljóðritun"</string>
+    <string name="expand_fields_description" msgid="8129294181216760037">"Stækka"</string>
+    <string name="collapse_fields_description" msgid="1884143625854637874">"Minnka"</string>
+    <string name="announce_expanded_fields" msgid="1075947220478530622">"Stækkað"</string>
+    <string name="announce_collapsed_fields" msgid="6414231530177338704">"Minnkað"</string>
     <string name="list_filter_all_accounts" msgid="8908683398914322369">"Allir tengiliðir"</string>
     <string name="list_filter_all_starred" msgid="5031734941601931356">"Stjörnumerktir"</string>
     <string name="list_filter_customize" msgid="4789963356004169321">"Sérsníða"</string>
@@ -555,7 +547,8 @@
     <string name="share_favorite_contacts" msgid="4280926751003081042">"Deila eftirlætistengiliðum"</string>
     <string name="share_contacts" msgid="8109287987498711664">"Deila öllum tengiliðum"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"Ekki tókst að deila tengiliðum."</string>
-    <string name="dialog_import_export" msgid="4360648034889921624">"Tengiliðir fluttir inn/út"</string>
+    <!-- no translation found for dialog_export (1628001095187741417) -->
+    <skip />
     <string name="dialog_import" msgid="2431698729761448759">"Flytja inn tengiliði"</string>
     <string name="share_error" msgid="948429331673358107">"Ekki er hægt að deila þessum tengilið."</string>
     <string name="no_contact_to_share" msgid="1276397530378323033">"Engir tengiliðir til að deila."</string>
@@ -570,7 +563,10 @@
     <string name="menu_clear_frequents" msgid="7688250191932838833">"Hreinsa algenga tengiliði"</string>
     <string name="menu_select_sim" msgid="3603578201960504010">"Veldu SIM-kort"</string>
     <string name="menu_accounts" msgid="1424330057450189074">"Umsjón með reikningum"</string>
-    <string name="menu_import_export" msgid="26217871113229507">"Flytja inn/út"</string>
+    <!-- no translation found for menu_import (6107961135813836467) -->
+    <skip />
+    <!-- no translation found for menu_export (2658783911863503902) -->
+    <skip />
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"Númer á bannlista"</string>
     <string name="contact_status_update_attribution" msgid="752179367353018597">"í gegnum <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> í gegnum <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
@@ -604,4 +600,8 @@
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> sek."</string>
     <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> m. <xliff:g id="SECONDS">%s</xliff:g> sek."</string>
     <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> klst. <xliff:g id="MINUTES_1">%s</xliff:g> mín. <xliff:g id="SECONDS">%s</xliff:g> sek."</string>
+    <!-- no translation found for dynamic_shortcut_disabled_message (249939425761315252) -->
+    <skip />
+    <!-- no translation found for dynamic_shortcut_contact_removed_message (6845645831837615899) -->
+    <skip />
 </resources>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index 4b747a9..40e4882 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -67,6 +67,7 @@
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Contatti suggeriti"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Tutti i contatti"</string>
     <string name="contactsJoinedMessage" msgid="3343535986195643136">"Contatti collegati"</string>
+    <string name="contact_deleted_named_toast" msgid="6558941164987421174">"<xliff:g id="NAME">%s</xliff:g> eliminato"</string>
     <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
       <item quantity="other">Contatti eliminati</item>
       <item quantity="one">Contatto eliminato</item>
@@ -113,11 +114,11 @@
     <string name="emptyMainList" msgid="2772242747899664460">"L\'elenco dei contatti è vuoto"</string>
     <string name="contactSavedToast" msgid="9171862279493213075">"Contatto salvato"</string>
     <string name="contactUnlinkedToast" msgid="7122823195786012553">"Contatti scollegati"</string>
-    <string name="contactSavedErrorToast" msgid="3207250533172944892">"Salvataggio delle modifiche ai contatti non riuscito."</string>
-    <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Impossibile scollegare il contatto."</string>
-    <string name="contactJoinErrorToast" msgid="3977932531264809035">"Impossibile collegare il contatto."</string>
-    <string name="contactGenericErrorToast" msgid="7774911165341591714">"Errore durante il salvataggio del contatto."</string>
-    <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"Impossibile salvare le modifiche alle foto dei contatti."</string>
+    <string name="contactSavedErrorToast" msgid="4827033473908688031">"Impossibile salvare le modifiche al contatto"</string>
+    <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"Impossibile scollegare il contatto"</string>
+    <string name="contactJoinErrorToast" msgid="5735129234573327701">"Impossibile collegare il contatto"</string>
+    <string name="contactGenericErrorToast" msgid="3885457515665783976">"Errore durante il salvataggio del contatto"</string>
+    <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Impossibile salvare le modifiche alla foto del contatto"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"Impossibile caricare l\'etichetta"</string>
     <string name="groupSavedToast" msgid="6491495462357722285">"Etichetta salvata"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Etichetta eliminata"</string>
@@ -126,7 +127,7 @@
     <string name="groupUpdatedToast" msgid="3667977658676267687">"Etichetta aggiornata"</string>
     <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Rimossa da etichetta"</string>
     <string name="groupMembersAddedToast" msgid="4824834898718972768">"Aggiunti all\'etichetta"</string>
-    <string name="groupSavedErrorToast" msgid="8121032018490980184">"Impossibile salvare le modifiche all\'etichetta."</string>
+    <string name="groupSavedErrorToast" msgid="2355891714292740162">"Impossibile salvare le modifiche all\'etichetta"</string>
     <string name="groupExistsErrorMessage" msgid="5196811283836946189">"L\'etichetta esiste già"</string>
     <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
       <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> contatti con numero di telefono</item>
@@ -147,7 +148,6 @@
     <string name="callAgain" msgid="3197312117049874778">"Richiama"</string>
     <string name="returnCall" msgid="8171961914203617813">"Chiama numero"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Aggiungi \"<xliff:g id="EMAIL">%s</xliff:g>\" ai contatti?"</string>
-    <string name="description_contact_photo" msgid="3387458082667894062">"foto contatto"</string>
     <string name="description_plus_button" msgid="515164827856229880">"più"</string>
     <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> contatti su <xliff:g id="TOTAL_NUMBER">%s</xliff:g>"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"I nomi dei tuoi contatti"</string>
@@ -192,7 +192,6 @@
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Data"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Etichetta"</string>
     <string name="change_photo" msgid="8530597935483526383">"Modifica"</string>
-    <string name="primary_photo" msgid="8517942231868516999">"Foto principale"</string>
     <string name="description_star" msgid="2605854427360036550">"preferiti"</string>
     <string name="edit_contact" msgid="7529281274005689512">"Modifica contatto"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"chiudi"</string>
@@ -269,7 +268,6 @@
     <string name="header_name_entry" msgid="1592791008096288306">"Nome"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"Email"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"Telefono"</string>
-    <string name="header_photo_entry" msgid="4438023151411853238">"Foto"</string>
     <string name="content_description_expand_editor" msgid="1111381475901897470">"Fai clic per espandere l\'editor contatti."</string>
     <string name="content_description_collapse_editor" msgid="7598061318022977825">"Fai clic per comprimere l\'editor contatti."</string>
     <string name="content_description_directions" msgid="2686791825798189335">"indicazioni per la posizione"</string>
@@ -284,6 +282,8 @@
     <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Cambia foto"</string>
     <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Impossibile aprire l\'editor."</string>
     <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Salvataggio in:"</string>
+    <!-- no translation found for compact_editor_account_selector_read_only_title (1869435992721760221) -->
+    <skip />
     <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"I contatti vengono salvati in <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Tocca due volte per scegliere un altro account."</string>
     <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
       <item quantity="other">Contatti collegati (<xliff:g id="COUNT">%d</xliff:g>)</item>
@@ -454,22 +454,14 @@
     <string name="chat_jabber" msgid="7561444230307829609">"Chatta su Jabber"</string>
     <string name="chat" msgid="9025361898797412245">"Chatta"</string>
     <string name="description_minus_button" msgid="6908099247930477551">"elimina"</string>
-    <!-- no translation found for expand_name_fields_description (6883935911480726652) -->
-    <skip />
-    <!-- no translation found for collapse_name_fields_description (4757877385895561556) -->
-    <skip />
-    <!-- no translation found for expand_phonetic_name_fields_description (3865726859582581741) -->
-    <skip />
-    <!-- no translation found for collapse_phonetic_name_fields_description (9102249481855019452) -->
-    <skip />
-    <!-- no translation found for expand_fields_description (8129294181216760037) -->
-    <skip />
-    <!-- no translation found for collapse_fields_description (1884143625854637874) -->
-    <skip />
-    <!-- no translation found for announce_expanded_fields (1075947220478530622) -->
-    <skip />
-    <!-- no translation found for announce_collapsed_fields (6414231530177338704) -->
-    <skip />
+    <string name="expand_name_fields_description" msgid="6883935911480726652">"Espandi i campi dei nomi"</string>
+    <string name="collapse_name_fields_description" msgid="4757877385895561556">"Comprimi i campi dei nomi"</string>
+    <string name="expand_phonetic_name_fields_description" msgid="3865726859582581741">"Espandi i campi dei nomi fonetici"</string>
+    <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Comprimi i campi dei nomi fonetici"</string>
+    <string name="expand_fields_description" msgid="8129294181216760037">"Espandi"</string>
+    <string name="collapse_fields_description" msgid="1884143625854637874">"Comprimi"</string>
+    <string name="announce_expanded_fields" msgid="1075947220478530622">"Espanso"</string>
+    <string name="announce_collapsed_fields" msgid="6414231530177338704">"Compresso"</string>
     <string name="list_filter_all_accounts" msgid="8908683398914322369">"Tutti i contatti"</string>
     <string name="list_filter_all_starred" msgid="5031734941601931356">"Speciali"</string>
     <string name="list_filter_customize" msgid="4789963356004169321">"Personalizza"</string>
@@ -555,7 +547,8 @@
     <string name="share_favorite_contacts" msgid="4280926751003081042">"Condividi i contatti preferiti"</string>
     <string name="share_contacts" msgid="8109287987498711664">"Condividi tutti i contatti"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"Impossibile condividere i contatti."</string>
-    <string name="dialog_import_export" msgid="4360648034889921624">"Importa/esporta contatti"</string>
+    <!-- no translation found for dialog_export (1628001095187741417) -->
+    <skip />
     <string name="dialog_import" msgid="2431698729761448759">"Importa contatti"</string>
     <string name="share_error" msgid="948429331673358107">"Questo contatto non può essere condiviso."</string>
     <string name="no_contact_to_share" msgid="1276397530378323033">"Nessun contatto da condividere."</string>
@@ -570,7 +563,10 @@
     <string name="menu_clear_frequents" msgid="7688250191932838833">"Cancella frequenti"</string>
     <string name="menu_select_sim" msgid="3603578201960504010">"Seleziona scheda SIM"</string>
     <string name="menu_accounts" msgid="1424330057450189074">"Gestisci account"</string>
-    <string name="menu_import_export" msgid="26217871113229507">"Importa/esporta"</string>
+    <!-- no translation found for menu_import (6107961135813836467) -->
+    <skip />
+    <!-- no translation found for menu_export (2658783911863503902) -->
+    <skip />
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"Numeri bloccati"</string>
     <string name="contact_status_update_attribution" msgid="752179367353018597">"tramite <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> tramite <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
@@ -604,4 +600,8 @@
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> s"</string>
     <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> m <xliff:g id="SECONDS">%s</xliff:g> s"</string>
     <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> h <xliff:g id="MINUTES_1">%s</xliff:g> m <xliff:g id="SECONDS">%s</xliff:g> s"</string>
+    <!-- no translation found for dynamic_shortcut_disabled_message (249939425761315252) -->
+    <skip />
+    <!-- no translation found for dynamic_shortcut_contact_removed_message (6845645831837615899) -->
+    <skip />
 </resources>
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index df586ab..50ee2c9 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -67,6 +67,7 @@
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"אנשי קשר מוצעים"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"כל אנשי הקשר"</string>
     <string name="contactsJoinedMessage" msgid="3343535986195643136">"אנשי הקשר קושרו"</string>
+    <string name="contact_deleted_named_toast" msgid="6558941164987421174">"מחקת את <xliff:g id="NAME">%s</xliff:g>"</string>
     <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
       <item quantity="two">אנשי קשר נמחקו</item>
       <item quantity="many">אנשי קשר נמחקו</item>
@@ -119,11 +120,11 @@
     <string name="emptyMainList" msgid="2772242747899664460">"רשימת אנשי הקשר שלך ריקה"</string>
     <string name="contactSavedToast" msgid="9171862279493213075">"איש הקשר נשמר"</string>
     <string name="contactUnlinkedToast" msgid="7122823195786012553">"בוטל הקישור לאנשי קשר"</string>
-    <string name="contactSavedErrorToast" msgid="3207250533172944892">"לא ניתן לשמור את השינויים באנשי הקשר."</string>
-    <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"לא ניתן לבטל את הקישור של איש הקשר."</string>
-    <string name="contactJoinErrorToast" msgid="3977932531264809035">"לא ניתן היה לקשר איש קשר."</string>
-    <string name="contactGenericErrorToast" msgid="7774911165341591714">"אירעה שגיאה בעת שמירת איש הקשר."</string>
-    <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"לא ניתן היה לשמור את השינויים בתמונות של אנשי הקשר."</string>
+    <string name="contactSavedErrorToast" msgid="4827033473908688031">"לא ניתן היה לשמור את השינויים באיש הקשר"</string>
+    <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"לא ניתן היה לבטל את הקישור של איש הקשר"</string>
+    <string name="contactJoinErrorToast" msgid="5735129234573327701">"לא ניתן היה לקשר את איש הקשר"</string>
+    <string name="contactGenericErrorToast" msgid="3885457515665783976">"שגיאה בשמירת איש הקשר"</string>
+    <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"לא ניתן היה לשמור את השינויים בתמונה של איש הקשר"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"טעינת התווית נכשלה"</string>
     <string name="groupSavedToast" msgid="6491495462357722285">"התווית נשמרה"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"התווית נמחקה"</string>
@@ -132,7 +133,7 @@
     <string name="groupUpdatedToast" msgid="3667977658676267687">"התווית עודכנה"</string>
     <string name="groupMembersRemovedToast" msgid="3510563559799376603">"הוסר מהתווית"</string>
     <string name="groupMembersAddedToast" msgid="4824834898718972768">"נוסף לתווית"</string>
-    <string name="groupSavedErrorToast" msgid="8121032018490980184">"לא ניתן היה לשמור את השינויים בתווית."</string>
+    <string name="groupSavedErrorToast" msgid="2355891714292740162">"לא ניתן היה לשמור את השינויים בתווית"</string>
     <string name="groupExistsErrorMessage" msgid="5196811283836946189">"התווית הזו כבר קיימת"</string>
     <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
       <item quantity="two"><xliff:g id="COUNT">%d</xliff:g> אנשי קשר עם מספרי טלפון</item>
@@ -159,7 +160,6 @@
     <string name="callAgain" msgid="3197312117049874778">"התקשר שוב"</string>
     <string name="returnCall" msgid="8171961914203617813">"התקשר בחזרה"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"להוסיף את \"<xliff:g id="EMAIL">%s</xliff:g>\" לאנשי הקשר?"</string>
-    <string name="description_contact_photo" msgid="3387458082667894062">"תמונה של איש קשר"</string>
     <string name="description_plus_button" msgid="515164827856229880">"חיבור"</string>
     <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> מתוך <xliff:g id="TOTAL_NUMBER">%s</xliff:g> אנשי קשר"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"השמות של אנשי הקשר"</string>
@@ -206,7 +206,6 @@
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"תאריך"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"תווית"</string>
     <string name="change_photo" msgid="8530597935483526383">"שנה"</string>
-    <string name="primary_photo" msgid="8517942231868516999">"תמונה ראשית"</string>
     <string name="description_star" msgid="2605854427360036550">"מועדף"</string>
     <string name="edit_contact" msgid="7529281274005689512">"ערוך איש קשר"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"סגירה"</string>
@@ -283,7 +282,6 @@
     <string name="header_name_entry" msgid="1592791008096288306">"שם"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"אימייל"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"טלפון"</string>
-    <string name="header_photo_entry" msgid="4438023151411853238">"תמונה"</string>
     <string name="content_description_expand_editor" msgid="1111381475901897470">"לחץ כדי להרחיב את עורך אנשי הקשר."</string>
     <string name="content_description_collapse_editor" msgid="7598061318022977825">"לחץ כדי לכווץ את עורך אנשי הקשר."</string>
     <string name="content_description_directions" msgid="2686791825798189335">"הנחיות הגעה למיקום"</string>
@@ -298,6 +296,8 @@
     <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"החלפת תמונה"</string>
     <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"פתיחת העורך נכשלה."</string>
     <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"שומר ב-"</string>
+    <!-- no translation found for compact_editor_account_selector_read_only_title (1869435992721760221) -->
+    <skip />
     <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"נשמר כרגע ב-<xliff:g id="ACCOUNT_NAME">%s</xliff:g>. הקש פעמיים כדי לבחור חשבון אחר."</string>
     <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
       <item quantity="two">שני אנשי קשר מקושרים (<xliff:g id="COUNT">%d</xliff:g>)</item>
@@ -476,22 +476,14 @@
     <string name="chat_jabber" msgid="7561444230307829609">"‏שוחח בצ\'אט באמצעות Jabber"</string>
     <string name="chat" msgid="9025361898797412245">"שוחח בצ\'אט"</string>
     <string name="description_minus_button" msgid="6908099247930477551">"מחק"</string>
-    <!-- no translation found for expand_name_fields_description (6883935911480726652) -->
-    <skip />
-    <!-- no translation found for collapse_name_fields_description (4757877385895561556) -->
-    <skip />
-    <!-- no translation found for expand_phonetic_name_fields_description (3865726859582581741) -->
-    <skip />
-    <!-- no translation found for collapse_phonetic_name_fields_description (9102249481855019452) -->
-    <skip />
-    <!-- no translation found for expand_fields_description (8129294181216760037) -->
-    <skip />
-    <!-- no translation found for collapse_fields_description (1884143625854637874) -->
-    <skip />
-    <!-- no translation found for announce_expanded_fields (1075947220478530622) -->
-    <skip />
-    <!-- no translation found for announce_collapsed_fields (6414231530177338704) -->
-    <skip />
+    <string name="expand_name_fields_description" msgid="6883935911480726652">"הרחבה של שדות השמות"</string>
+    <string name="collapse_name_fields_description" msgid="4757877385895561556">"כיווץ של שדות השמות"</string>
+    <string name="expand_phonetic_name_fields_description" msgid="3865726859582581741">"הרחבה של שדות השמות הפונטיים"</string>
+    <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"כיווץ של שדות השמות הפונטיים"</string>
+    <string name="expand_fields_description" msgid="8129294181216760037">"הרחב"</string>
+    <string name="collapse_fields_description" msgid="1884143625854637874">"כווץ"</string>
+    <string name="announce_expanded_fields" msgid="1075947220478530622">"מורחב"</string>
+    <string name="announce_collapsed_fields" msgid="6414231530177338704">"מכווץ"</string>
     <string name="list_filter_all_accounts" msgid="8908683398914322369">"כל אנשי הקשר"</string>
     <string name="list_filter_all_starred" msgid="5031734941601931356">"מסומן בכוכב"</string>
     <string name="list_filter_customize" msgid="4789963356004169321">"התאם אישית"</string>
@@ -577,7 +569,8 @@
     <string name="share_favorite_contacts" msgid="4280926751003081042">"שתף את אנשי הקשר המועדפים"</string>
     <string name="share_contacts" msgid="8109287987498711664">"שתף את כל אנשי הקשר"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"לא ניתן היה לשתף את אנשי הקשר."</string>
-    <string name="dialog_import_export" msgid="4360648034889921624">"יבא/יצא אנשי קשר"</string>
+    <!-- no translation found for dialog_export (1628001095187741417) -->
+    <skip />
     <string name="dialog_import" msgid="2431698729761448759">"יבוא אנשי קשר"</string>
     <string name="share_error" msgid="948429331673358107">"לא ניתן לשתף איש קשר זה."</string>
     <string name="no_contact_to_share" msgid="1276397530378323033">"אין אנשי קשר שניתן לשתף."</string>
@@ -592,7 +585,10 @@
     <string name="menu_clear_frequents" msgid="7688250191932838833">"מחק אנשי קשר קבועים"</string>
     <string name="menu_select_sim" msgid="3603578201960504010">"‏בחר כרטיס SIM"</string>
     <string name="menu_accounts" msgid="1424330057450189074">"ניהול החשבונות"</string>
-    <string name="menu_import_export" msgid="26217871113229507">"ייבוא/ייצוא"</string>
+    <!-- no translation found for menu_import (6107961135813836467) -->
+    <skip />
+    <!-- no translation found for menu_export (2658783911863503902) -->
+    <skip />
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"מספרים חסומים"</string>
     <string name="contact_status_update_attribution" msgid="752179367353018597">"באמצעות <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> באמצעות <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
@@ -628,4 +624,8 @@
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> שניות"</string>
     <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> דקות ו-<xliff:g id="SECONDS">%s</xliff:g> שניות"</string>
     <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> שעות, <xliff:g id="MINUTES_1">%s</xliff:g> דקות ו-<xliff:g id="SECONDS">%s</xliff:g> שניות"</string>
+    <!-- no translation found for dynamic_shortcut_disabled_message (249939425761315252) -->
+    <skip />
+    <!-- no translation found for dynamic_shortcut_contact_removed_message (6845645831837615899) -->
+    <skip />
 </resources>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index 734b43c..7743493 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -67,6 +67,7 @@
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"連絡先候補"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"すべての連絡先"</string>
     <string name="contactsJoinedMessage" msgid="3343535986195643136">"連絡先をリンクしました"</string>
+    <string name="contact_deleted_named_toast" msgid="6558941164987421174">"<xliff:g id="NAME">%s</xliff:g> さんを削除しました"</string>
     <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
       <item quantity="other">連絡先を削除しました</item>
       <item quantity="one">連絡先を削除しました</item>
@@ -113,11 +114,11 @@
     <string name="emptyMainList" msgid="2772242747899664460">"連絡先リストが空です"</string>
     <string name="contactSavedToast" msgid="9171862279493213075">"連絡先を保存しました"</string>
     <string name="contactUnlinkedToast" msgid="7122823195786012553">"連絡先のリンクを解除しました"</string>
-    <string name="contactSavedErrorToast" msgid="3207250533172944892">"連絡先の変更を保存できませんでした。"</string>
-    <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"連絡先のリンクを解除できませんでした。"</string>
-    <string name="contactJoinErrorToast" msgid="3977932531264809035">"連絡先をリンクできませんでした。"</string>
-    <string name="contactGenericErrorToast" msgid="7774911165341591714">"連絡先の保存中にエラーが発生しました。"</string>
-    <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"連絡先の写真の変更を保存できませんでした。"</string>
+    <string name="contactSavedErrorToast" msgid="4827033473908688031">"連絡先の変更を保存できませんでした"</string>
+    <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"連絡先のリンクを解除できませんでした"</string>
+    <string name="contactJoinErrorToast" msgid="5735129234573327701">"連絡先をリンクできませんでした"</string>
+    <string name="contactGenericErrorToast" msgid="3885457515665783976">"連絡先の保存中にエラーが発生しました"</string>
+    <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"連絡先の写真の変更を保存できませんでした"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"ラベルを読み込めませんでした"</string>
     <string name="groupSavedToast" msgid="6491495462357722285">"ラベルを保存しました"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"ラベルを削除しました"</string>
@@ -126,7 +127,7 @@
     <string name="groupUpdatedToast" msgid="3667977658676267687">"ラベルを更新しました"</string>
     <string name="groupMembersRemovedToast" msgid="3510563559799376603">"ラベルから削除されました"</string>
     <string name="groupMembersAddedToast" msgid="4824834898718972768">"ラベルに追加されました"</string>
-    <string name="groupSavedErrorToast" msgid="8121032018490980184">"ラベルの変更を保存できませんでした。"</string>
+    <string name="groupSavedErrorToast" msgid="2355891714292740162">"ラベルの変更を保存できませんでした"</string>
     <string name="groupExistsErrorMessage" msgid="5196811283836946189">"このラベルは既に存在しています"</string>
     <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
       <item quantity="other">電話番号のある連絡先<xliff:g id="COUNT">%d</xliff:g>件</item>
@@ -147,7 +148,6 @@
     <string name="callAgain" msgid="3197312117049874778">"再発信"</string>
     <string name="returnCall" msgid="8171961914203617813">"発信"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"<xliff:g id="EMAIL">%s</xliff:g> を連絡先に追加しますか?"</string>
-    <string name="description_contact_photo" msgid="3387458082667894062">"連絡先の写真"</string>
     <string name="description_plus_button" msgid="515164827856229880">"プラス"</string>
     <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%s</xliff:g>件のファイル"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"連絡先の名前"</string>
@@ -192,7 +192,6 @@
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"日付"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"ラベル"</string>
     <string name="change_photo" msgid="8530597935483526383">"変更"</string>
-    <string name="primary_photo" msgid="8517942231868516999">"メインの写真"</string>
     <string name="description_star" msgid="2605854427360036550">"お気に入り"</string>
     <string name="edit_contact" msgid="7529281274005689512">"連絡先の編集"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"閉じる"</string>
@@ -269,7 +268,6 @@
     <string name="header_name_entry" msgid="1592791008096288306">"名前"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"メール"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"電話"</string>
-    <string name="header_photo_entry" msgid="4438023151411853238">"写真"</string>
     <string name="content_description_expand_editor" msgid="1111381475901897470">"クリックして連絡先エディターを展開します。"</string>
     <string name="content_description_collapse_editor" msgid="7598061318022977825">"クリックして連絡先エディターを折りたたみます。"</string>
     <string name="content_description_directions" msgid="2686791825798189335">"場所までの経路"</string>
@@ -284,6 +282,8 @@
     <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"写真を変更"</string>
     <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"エディタを開けませんでした。"</string>
     <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"保存先"</string>
+    <!-- no translation found for compact_editor_account_selector_read_only_title (1869435992721760221) -->
+    <skip />
     <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"現在の保存先は<xliff:g id="ACCOUNT_NAME">%s</xliff:g>です。別のアカウントを選択するにはダブルタップします。"</string>
     <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
       <item quantity="other">リンクされた連絡先(<xliff:g id="COUNT">%d</xliff:g>件)</item>
@@ -454,22 +454,14 @@
     <string name="chat_jabber" msgid="7561444230307829609">"Jabberでチャット"</string>
     <string name="chat" msgid="9025361898797412245">"チャット"</string>
     <string name="description_minus_button" msgid="6908099247930477551">"削除"</string>
-    <!-- no translation found for expand_name_fields_description (6883935911480726652) -->
-    <skip />
-    <!-- no translation found for collapse_name_fields_description (4757877385895561556) -->
-    <skip />
-    <!-- no translation found for expand_phonetic_name_fields_description (3865726859582581741) -->
-    <skip />
-    <!-- no translation found for collapse_phonetic_name_fields_description (9102249481855019452) -->
-    <skip />
-    <!-- no translation found for expand_fields_description (8129294181216760037) -->
-    <skip />
-    <!-- no translation found for collapse_fields_description (1884143625854637874) -->
-    <skip />
-    <!-- no translation found for announce_expanded_fields (1075947220478530622) -->
-    <skip />
-    <!-- no translation found for announce_collapsed_fields (6414231530177338704) -->
-    <skip />
+    <string name="expand_name_fields_description" msgid="6883935911480726652">"名前欄を展開"</string>
+    <string name="collapse_name_fields_description" msgid="4757877385895561556">"名前欄を折りたたむ"</string>
+    <string name="expand_phonetic_name_fields_description" msgid="3865726859582581741">"名前のフリガナ欄を展開"</string>
+    <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"名前のフリガナ欄を折りたたむ"</string>
+    <string name="expand_fields_description" msgid="8129294181216760037">"展開"</string>
+    <string name="collapse_fields_description" msgid="1884143625854637874">"折りたたむ"</string>
+    <string name="announce_expanded_fields" msgid="1075947220478530622">"展開しました"</string>
+    <string name="announce_collapsed_fields" msgid="6414231530177338704">"折りたたみました"</string>
     <string name="list_filter_all_accounts" msgid="8908683398914322369">"すべての連絡先"</string>
     <string name="list_filter_all_starred" msgid="5031734941601931356">"スター付き"</string>
     <string name="list_filter_customize" msgid="4789963356004169321">"カスタマイズ"</string>
@@ -555,7 +547,8 @@
     <string name="share_favorite_contacts" msgid="4280926751003081042">"お気に入りの連絡先を共有"</string>
     <string name="share_contacts" msgid="8109287987498711664">"すべての連絡先を共有"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"連絡先を共有できませんでした。"</string>
-    <string name="dialog_import_export" msgid="4360648034889921624">"連絡先のインポート/エクスポート"</string>
+    <!-- no translation found for dialog_export (1628001095187741417) -->
+    <skip />
     <string name="dialog_import" msgid="2431698729761448759">"連絡先のインポート"</string>
     <string name="share_error" msgid="948429331673358107">"この連絡先は共有できません。"</string>
     <string name="no_contact_to_share" msgid="1276397530378323033">"共有する連絡先がありません。"</string>
@@ -570,7 +563,10 @@
     <string name="menu_clear_frequents" msgid="7688250191932838833">"よく使う連絡先のクリア"</string>
     <string name="menu_select_sim" msgid="3603578201960504010">"SIMカードを選択"</string>
     <string name="menu_accounts" msgid="1424330057450189074">"アカウントを管理"</string>
-    <string name="menu_import_export" msgid="26217871113229507">"インポート/エクスポート"</string>
+    <!-- no translation found for menu_import (6107961135813836467) -->
+    <skip />
+    <!-- no translation found for menu_export (2658783911863503902) -->
+    <skip />
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"ブロックした番号"</string>
     <string name="contact_status_update_attribution" msgid="752179367353018597">"<xliff:g id="SOURCE">%1$s</xliff:g>経由"</string>
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g>、<xliff:g id="SOURCE">%2$s</xliff:g>経由"</string>
@@ -604,4 +600,8 @@
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> 秒"</string>
     <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> 分 <xliff:g id="SECONDS">%s</xliff:g> 秒"</string>
     <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> 時間 <xliff:g id="MINUTES_1">%s</xliff:g> 分 <xliff:g id="SECONDS">%s</xliff:g> 秒"</string>
+    <!-- no translation found for dynamic_shortcut_disabled_message (249939425761315252) -->
+    <skip />
+    <!-- no translation found for dynamic_shortcut_contact_removed_message (6845645831837615899) -->
+    <skip />
 </resources>
diff --git a/res/values-ka-rGE/strings.xml b/res/values-ka-rGE/strings.xml
index 2266315..6ab172e 100644
--- a/res/values-ka-rGE/strings.xml
+++ b/res/values-ka-rGE/strings.xml
@@ -67,6 +67,7 @@
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"შემოთავაზებული კონტაქტები"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"ყველა კონტაქტი"</string>
     <string name="contactsJoinedMessage" msgid="3343535986195643136">"კონტაქტები მიება"</string>
+    <string name="contact_deleted_named_toast" msgid="6558941164987421174">"<xliff:g id="NAME">%s</xliff:g> წაიშალა"</string>
     <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
       <item quantity="other">კონტაქტი წაიშალა</item>
       <item quantity="one">კონტაქტი წაიშალა</item>
@@ -113,11 +114,11 @@
     <string name="emptyMainList" msgid="2772242747899664460">"თქვენი კონტაქტების სია ცარიელია"</string>
     <string name="contactSavedToast" msgid="9171862279493213075">"კონტაქტი შენახულია"</string>
     <string name="contactUnlinkedToast" msgid="7122823195786012553">"კონტაქტების მიბმა გაუქმდა"</string>
-    <string name="contactSavedErrorToast" msgid="3207250533172944892">"კონტაქტის ცვლილებების შენახვა ვერ მოხერხდა."</string>
-    <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"კონტაქტის მიბმის გაუქმება ვერ მოხერხდა."</string>
-    <string name="contactJoinErrorToast" msgid="3977932531264809035">"კონტაქტის მიბმა ვერ მოხერხდა."</string>
-    <string name="contactGenericErrorToast" msgid="7774911165341591714">"შეცდომა კონტაქტის შენახვისას."</string>
-    <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"კონტაქტის ფოტოს ცვლილებების შენახვა ვერ მოხერხდა."</string>
+    <string name="contactSavedErrorToast" msgid="4827033473908688031">"კონტაქტის ცვლილებების შენახვა ვერ მოხერხდა"</string>
+    <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"კონტაქტის დაკავშირების გაუქმება ვერ მოხერხდა"</string>
+    <string name="contactJoinErrorToast" msgid="5735129234573327701">"კონტაქტის დაკავშირება ვერ მოხერხდა"</string>
+    <string name="contactGenericErrorToast" msgid="3885457515665783976">"კონტაქტის შენახვისას მოხდა შეცდომა"</string>
+    <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"კონტაქტის ფოტოს ცვლილებების შენახვა ვერ მოხერხდა"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"ლეიბლი ვერ ჩაიტვირთა"</string>
     <string name="groupSavedToast" msgid="6491495462357722285">"ლეიბლი შენახულია"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"ლეიბლი წაშლილია"</string>
@@ -126,7 +127,7 @@
     <string name="groupUpdatedToast" msgid="3667977658676267687">"ლეიბლი განახლდა"</string>
     <string name="groupMembersRemovedToast" msgid="3510563559799376603">"ლეიბლიდან წაიშალა"</string>
     <string name="groupMembersAddedToast" msgid="4824834898718972768">"დაემატა ლეიბლს"</string>
-    <string name="groupSavedErrorToast" msgid="8121032018490980184">"ლეიბლის ცვლილებების შენახვა ვერ მოხერხდა."</string>
+    <string name="groupSavedErrorToast" msgid="2355891714292740162">"ლეიბლის ცვლილებების შენახვა ვერ მოხერხდა"</string>
     <string name="groupExistsErrorMessage" msgid="5196811283836946189">"ეს ლეიბლი უკვე არსებობს"</string>
     <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
       <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> კონტაქტი ტელეფონის ნომრით</item>
@@ -147,7 +148,6 @@
     <string name="callAgain" msgid="3197312117049874778">"დარეკვა ხელახლა"</string>
     <string name="returnCall" msgid="8171961914203617813">"გადარეკვა"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"„<xliff:g id="EMAIL">%s</xliff:g>“ დაემატოს კონტაქტებს?"</string>
-    <string name="description_contact_photo" msgid="3387458082667894062">"კონტაქტის ფოტო"</string>
     <string name="description_plus_button" msgid="515164827856229880">"პლუსი"</string>
     <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> (სულ <xliff:g id="TOTAL_NUMBER">%s</xliff:g> კონტაქტიდან)"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"თქვენი კონტაქტების სახელები"</string>
@@ -192,7 +192,6 @@
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"თარიღი"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"ლეიბლი"</string>
     <string name="change_photo" msgid="8530597935483526383">"შეცვლა"</string>
-    <string name="primary_photo" msgid="8517942231868516999">"პირველადი ფოტო"</string>
     <string name="description_star" msgid="2605854427360036550">"რჩეული"</string>
     <string name="edit_contact" msgid="7529281274005689512">"კონტაქტის რედაქტირება"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"დახურვა"</string>
@@ -269,7 +268,6 @@
     <string name="header_name_entry" msgid="1592791008096288306">"სახელი"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"ელფოსტა"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"ტელეფონი"</string>
-    <string name="header_photo_entry" msgid="4438023151411853238">"ფოტო"</string>
     <string name="content_description_expand_editor" msgid="1111381475901897470">"კონტაქტების რედაქტირების გაფართოებისათვის, დააჭირეთ."</string>
     <string name="content_description_collapse_editor" msgid="7598061318022977825">"კონტაქტების რედაქტირების შეკუმშვისათვის, დააჭირეთ."</string>
     <string name="content_description_directions" msgid="2686791825798189335">"მიმართულებები მდებარეობამდე"</string>
@@ -284,6 +282,8 @@
     <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"ფოტოს გამოცვლა"</string>
     <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"რედაქტორი ვერ გაიხსნა."</string>
     <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"ინახება აქ:"</string>
+    <!-- no translation found for compact_editor_account_selector_read_only_title (1869435992721760221) -->
+    <skip />
     <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"ამჟამად ინახება აქ: <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. ორმაგად შეეხეთ სხვა ანგარიშის ასარჩევად."</string>
     <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
       <item quantity="other">მიბმული კონტაქტები (<xliff:g id="COUNT">%d</xliff:g>)</item>
@@ -454,22 +454,14 @@
     <string name="chat_jabber" msgid="7561444230307829609">"ჩეთი Jabber-ით"</string>
     <string name="chat" msgid="9025361898797412245">"ჩეთი"</string>
     <string name="description_minus_button" msgid="6908099247930477551">"წაშლა"</string>
-    <!-- no translation found for expand_name_fields_description (6883935911480726652) -->
-    <skip />
-    <!-- no translation found for collapse_name_fields_description (4757877385895561556) -->
-    <skip />
-    <!-- no translation found for expand_phonetic_name_fields_description (3865726859582581741) -->
-    <skip />
-    <!-- no translation found for collapse_phonetic_name_fields_description (9102249481855019452) -->
-    <skip />
-    <!-- no translation found for expand_fields_description (8129294181216760037) -->
-    <skip />
-    <!-- no translation found for collapse_fields_description (1884143625854637874) -->
-    <skip />
-    <!-- no translation found for announce_expanded_fields (1075947220478530622) -->
-    <skip />
-    <!-- no translation found for announce_collapsed_fields (6414231530177338704) -->
-    <skip />
+    <string name="expand_name_fields_description" msgid="6883935911480726652">"სახელების ველების გაფართოება"</string>
+    <string name="collapse_name_fields_description" msgid="4757877385895561556">"სახელების ველების ჩაკეცვა"</string>
+    <string name="expand_phonetic_name_fields_description" msgid="3865726859582581741">"ფონეტიკური სახელების ველების გაფართოება"</string>
+    <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"ფონეტიკური სახელების ველების ჩაკეცვა"</string>
+    <string name="expand_fields_description" msgid="8129294181216760037">"გაფართოება"</string>
+    <string name="collapse_fields_description" msgid="1884143625854637874">"ჩაკეცვა"</string>
+    <string name="announce_expanded_fields" msgid="1075947220478530622">"გაფართოებულია"</string>
+    <string name="announce_collapsed_fields" msgid="6414231530177338704">"ჩაკეცილია"</string>
     <string name="list_filter_all_accounts" msgid="8908683398914322369">"ყველა კონტაქტი"</string>
     <string name="list_filter_all_starred" msgid="5031734941601931356">"ვარსკვლავიანი"</string>
     <string name="list_filter_customize" msgid="4789963356004169321">"მორგება"</string>
@@ -555,7 +547,8 @@
     <string name="share_favorite_contacts" msgid="4280926751003081042">"რჩეული კონტაქტების გაზიარება"</string>
     <string name="share_contacts" msgid="8109287987498711664">"ყველა კონტაქტის გაზიარება"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"კონტაქტების გაზიარება ვერ მოხერხდა."</string>
-    <string name="dialog_import_export" msgid="4360648034889921624">"კონტაქტების იმპორტი/ექსპორტი"</string>
+    <!-- no translation found for dialog_export (1628001095187741417) -->
+    <skip />
     <string name="dialog_import" msgid="2431698729761448759">"კონტაქტების იმპორტი"</string>
     <string name="share_error" msgid="948429331673358107">"ამ კონტაქტის გაზიარება შეუძლებელია."</string>
     <string name="no_contact_to_share" msgid="1276397530378323033">"გასაზიარებელი კონტაქტები არ არის."</string>
@@ -570,7 +563,10 @@
     <string name="menu_clear_frequents" msgid="7688250191932838833">"ხშირი კონტაქტების წაშლა"</string>
     <string name="menu_select_sim" msgid="3603578201960504010">"აირჩიეთ SIM ბარათი"</string>
     <string name="menu_accounts" msgid="1424330057450189074">"ანგარიშების მართვა"</string>
-    <string name="menu_import_export" msgid="26217871113229507">"იმპორტი/ექსპორტი"</string>
+    <!-- no translation found for menu_import (6107961135813836467) -->
+    <skip />
+    <!-- no translation found for menu_export (2658783911863503902) -->
+    <skip />
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"დაბლოკილი ნომრები"</string>
     <string name="contact_status_update_attribution" msgid="752179367353018597">"<xliff:g id="SOURCE">%1$s</xliff:g>-ის საშუალებით"</string>
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> <xliff:g id="SOURCE">%2$s</xliff:g>-ის მეშვეობით"</string>
@@ -604,4 +600,8 @@
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> წმ."</string>
     <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> წთ. და <xliff:g id="SECONDS">%s</xliff:g> წმ."</string>
     <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> სთ. <xliff:g id="MINUTES_1">%s</xliff:g> წთ. <xliff:g id="SECONDS">%s</xliff:g> წმ."</string>
+    <!-- no translation found for dynamic_shortcut_disabled_message (249939425761315252) -->
+    <skip />
+    <!-- no translation found for dynamic_shortcut_contact_removed_message (6845645831837615899) -->
+    <skip />
 </resources>
diff --git a/res/values-kk-rKZ/strings.xml b/res/values-kk-rKZ/strings.xml
index 0f241c3..6410e53 100644
--- a/res/values-kk-rKZ/strings.xml
+++ b/res/values-kk-rKZ/strings.xml
@@ -67,6 +67,7 @@
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Ұсынылған контактілер"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Барлық контактілер"</string>
     <string name="contactsJoinedMessage" msgid="3343535986195643136">"Контактілер байланыстырылды"</string>
+    <string name="contact_deleted_named_toast" msgid="6558941164987421174">"<xliff:g id="NAME">%s</xliff:g> жойылған"</string>
     <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
       <item quantity="other">Контактілер жойылды</item>
       <item quantity="one">Контакт жойылды</item>
@@ -113,11 +114,11 @@
     <string name="emptyMainList" msgid="2772242747899664460">"Контактілер тізімі бос"</string>
     <string name="contactSavedToast" msgid="9171862279493213075">"Контакт сақталды"</string>
     <string name="contactUnlinkedToast" msgid="7122823195786012553">"Контактілердің байланысы жойылды"</string>
-    <string name="contactSavedErrorToast" msgid="3207250533172944892">"Контакт өзгерістерін сақтай алмады."</string>
-    <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Контакт байланысын жою мүмкін болмады."</string>
-    <string name="contactJoinErrorToast" msgid="3977932531264809035">"Контактіні байланыстыру мүмкін болмады."</string>
-    <string name="contactGenericErrorToast" msgid="7774911165341591714">"Контактіні сақтау кезіндегі қате."</string>
-    <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"Жаңа контакт фотосуреті сақталмады."</string>
+    <string name="contactSavedErrorToast" msgid="4827033473908688031">"Контакт өзгерістері сақталмады"</string>
+    <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"Контактіні ажырату мүмкін болмады"</string>
+    <string name="contactJoinErrorToast" msgid="5735129234573327701">"Контактіні байланыстыру мүмкін болмады"</string>
+    <string name="contactGenericErrorToast" msgid="3885457515665783976">"Контактіні сақтау қатесі"</string>
+    <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Контакт суретінің өзгерістері сақталмады"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"Белгі жүктелген жоқ"</string>
     <string name="groupSavedToast" msgid="6491495462357722285">"Белгі сақталды"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Белгі жойылған"</string>
@@ -126,7 +127,7 @@
     <string name="groupUpdatedToast" msgid="3667977658676267687">"Белгі жаңартылды"</string>
     <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Белгіден жойылған"</string>
     <string name="groupMembersAddedToast" msgid="4824834898718972768">"Белгіге қосылды"</string>
-    <string name="groupSavedErrorToast" msgid="8121032018490980184">"Белгі өзгертулері сақталмады."</string>
+    <string name="groupSavedErrorToast" msgid="2355891714292740162">"Белгі өзгертулері сақталмады"</string>
     <string name="groupExistsErrorMessage" msgid="5196811283836946189">"Бұл белгіше бұрыннан бар"</string>
     <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
       <item quantity="other">Телефон нөмірі бар <xliff:g id="COUNT">%d</xliff:g> контакт</item>
@@ -147,7 +148,6 @@
     <string name="callAgain" msgid="3197312117049874778">"Қайта қоңырау шалу"</string>
     <string name="returnCall" msgid="8171961914203617813">"Қоңырауды қайтару"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"\"<xliff:g id="EMAIL">%s</xliff:g>\" контактілерге қосылсын ба?"</string>
-    <string name="description_contact_photo" msgid="3387458082667894062">"контакт фотосуреті"</string>
     <string name="description_plus_button" msgid="515164827856229880">"қосу"</string>
     <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g>, барлық <xliff:g id="TOTAL_NUMBER">%s</xliff:g> контактілерден"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"Контактілеріңіздің аттары"</string>
@@ -192,7 +192,6 @@
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Күні"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Белгі"</string>
     <string name="change_photo" msgid="8530597935483526383">"Өзгерту"</string>
-    <string name="primary_photo" msgid="8517942231868516999">"Негізгі фотосурет"</string>
     <string name="description_star" msgid="2605854427360036550">"сүйікті"</string>
     <string name="edit_contact" msgid="7529281274005689512">"Контактіні жөндеу"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"жабу"</string>
@@ -269,7 +268,6 @@
     <string name="header_name_entry" msgid="1592791008096288306">"Аты"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"Электрондық пошта"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"Телефон"</string>
-    <string name="header_photo_entry" msgid="4438023151411853238">"Фотосурет"</string>
     <string name="content_description_expand_editor" msgid="1111381475901897470">"Контактілер өңдегішті кеңейту үшін басыңыз."</string>
     <string name="content_description_collapse_editor" msgid="7598061318022977825">"Контактілер өңдегішті тасалау үшін басыңыз."</string>
     <string name="content_description_directions" msgid="2686791825798189335">"орынға бағыттар"</string>
@@ -284,6 +282,8 @@
     <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Фотосуретті өзгерту"</string>
     <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Өңдегішті ашу сәтсіз аяқталды."</string>
     <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Келесіге сақтау"</string>
+    <!-- no translation found for compact_editor_account_selector_read_only_title (1869435992721760221) -->
+    <skip />
     <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"Қазіргі уақытта <xliff:g id="ACCOUNT_NAME">%s</xliff:g> есептік жазбасына сақталуда. Басқа есептік жазбаны таңдау үшін екі рет түртіңіз."</string>
     <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
       <item quantity="other">Байланыстырылған контактілер (<xliff:g id="COUNT">%d</xliff:g>)</item>
@@ -454,22 +454,14 @@
     <string name="chat_jabber" msgid="7561444230307829609">"Jabber арқылы чаттасу"</string>
     <string name="chat" msgid="9025361898797412245">"Чат"</string>
     <string name="description_minus_button" msgid="6908099247930477551">"жою"</string>
-    <!-- no translation found for expand_name_fields_description (6883935911480726652) -->
-    <skip />
-    <!-- no translation found for collapse_name_fields_description (4757877385895561556) -->
-    <skip />
-    <!-- no translation found for expand_phonetic_name_fields_description (3865726859582581741) -->
-    <skip />
-    <!-- no translation found for collapse_phonetic_name_fields_description (9102249481855019452) -->
-    <skip />
-    <!-- no translation found for expand_fields_description (8129294181216760037) -->
-    <skip />
-    <!-- no translation found for collapse_fields_description (1884143625854637874) -->
-    <skip />
-    <!-- no translation found for announce_expanded_fields (1075947220478530622) -->
-    <skip />
-    <!-- no translation found for announce_collapsed_fields (6414231530177338704) -->
-    <skip />
+    <string name="expand_name_fields_description" msgid="6883935911480726652">"Аты-жөні өрістерін жаю"</string>
+    <string name="collapse_name_fields_description" msgid="4757877385895561556">"Аты-жөні өрістерін жию"</string>
+    <string name="expand_phonetic_name_fields_description" msgid="3865726859582581741">"Фонетикалық аты-жөні өрістерін жаю"</string>
+    <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Фонетикалық аты-жөні өрістерін жию"</string>
+    <string name="expand_fields_description" msgid="8129294181216760037">"Жаю"</string>
+    <string name="collapse_fields_description" msgid="1884143625854637874">"Жию"</string>
+    <string name="announce_expanded_fields" msgid="1075947220478530622">"Жайылды"</string>
+    <string name="announce_collapsed_fields" msgid="6414231530177338704">"Жиылды"</string>
     <string name="list_filter_all_accounts" msgid="8908683398914322369">"Барлық контактілер"</string>
     <string name="list_filter_all_starred" msgid="5031734941601931356">"Жұлдызшалы"</string>
     <string name="list_filter_customize" msgid="4789963356004169321">"Реттеу"</string>
@@ -555,7 +547,8 @@
     <string name="share_favorite_contacts" msgid="4280926751003081042">"Таңдаулы контактілерді бөлісу"</string>
     <string name="share_contacts" msgid="8109287987498711664">"Барлық контактілерді бөлісу"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"Контактілерді бөлісу сәтсіз аяқталды."</string>
-    <string name="dialog_import_export" msgid="4360648034889921624">"Контактілерді импорттау/экспорттау"</string>
+    <!-- no translation found for dialog_export (1628001095187741417) -->
+    <skip />
     <string name="dialog_import" msgid="2431698729761448759">"Контактілерді импорттау"</string>
     <string name="share_error" msgid="948429331673358107">"Бұл контактіні бөлісу мүмкін болмады"</string>
     <string name="no_contact_to_share" msgid="1276397530378323033">"Бөлісетін контактілер жоқ."</string>
@@ -570,7 +563,10 @@
     <string name="menu_clear_frequents" msgid="7688250191932838833">"Жиі хабарласатындарды өшіру"</string>
     <string name="menu_select_sim" msgid="3603578201960504010">"SIM картасын таңдау"</string>
     <string name="menu_accounts" msgid="1424330057450189074">"Есептік жазбаларды басқару"</string>
-    <string name="menu_import_export" msgid="26217871113229507">"Импорттау/экспорттау"</string>
+    <!-- no translation found for menu_import (6107961135813836467) -->
+    <skip />
+    <!-- no translation found for menu_export (2658783911863503902) -->
+    <skip />
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"Бөгелген нөмірлер"</string>
     <string name="contact_status_update_attribution" msgid="752179367353018597">"<xliff:g id="SOURCE">%1$s</xliff:g> арқылы"</string>
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> <xliff:g id="SOURCE">%2$s</xliff:g> арқылы"</string>
@@ -604,4 +600,8 @@
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> сек"</string>
     <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> мин <xliff:g id="SECONDS">%s</xliff:g> сек"</string>
     <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> сағ <xliff:g id="MINUTES_1">%s</xliff:g> мин <xliff:g id="SECONDS">%s</xliff:g> сек"</string>
+    <!-- no translation found for dynamic_shortcut_disabled_message (249939425761315252) -->
+    <skip />
+    <!-- no translation found for dynamic_shortcut_contact_removed_message (6845645831837615899) -->
+    <skip />
 </resources>
diff --git a/res/values-km-rKH/strings.xml b/res/values-km-rKH/strings.xml
index ccb7076..5ee0f50 100644
--- a/res/values-km-rKH/strings.xml
+++ b/res/values-km-rKH/strings.xml
@@ -67,6 +67,7 @@
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"ទំនាក់ទំនង​ដែល​បាន​ស្នើ"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"ទំនាក់ទំនង​ទាំងអស់"</string>
     <string name="contactsJoinedMessage" msgid="3343535986195643136">"បានតភ្ជាប់ទំនាក់ទំនង"</string>
+    <string name="contact_deleted_named_toast" msgid="6558941164987421174">"បាន​លុប <xliff:g id="NAME">%s</xliff:g>"</string>
     <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
       <item quantity="other">បានលុបទំនាក់ទំនង</item>
       <item quantity="one">បានលុបទំនាក់ទំនង</item>
@@ -113,11 +114,11 @@
     <string name="emptyMainList" msgid="2772242747899664460">"បញ្ជីទំនាក់ទំនងរបស់អ្នកគឺទទេ"</string>
     <string name="contactSavedToast" msgid="9171862279493213075">"បាន​រក្សាទុក​ទំនាក់ទំនង"</string>
     <string name="contactUnlinkedToast" msgid="7122823195786012553">"ទំនាក់ទំនងដែលមិនបានតភ្ជាប់"</string>
-    <string name="contactSavedErrorToast" msgid="3207250533172944892">"មិន​អាច​រក្សាទុក​ការ​ប្ដូរ​ទំនាក់ទំនង។"</string>
-    <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"មិនអាចផ្តាច់ទំនាក់ទំនងបានទេ"</string>
-    <string name="contactJoinErrorToast" msgid="3977932531264809035">"មិនអាចតភ្ជាប់ទំនាក់ទំនងបានទេ"</string>
-    <string name="contactGenericErrorToast" msgid="7774911165341591714">"មានកំហុសក្នុងការរក្សាទុកទំនាក់ទំនង"</string>
-    <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"មិនអាចរក្សាទុកការប្ដូររូបថតទំនាក់ទំនង។"</string>
+    <string name="contactSavedErrorToast" msgid="4827033473908688031">"មិន​អាច​រក្សាទុក​ការ​ប្ដូរ​ទំនាក់ទំនង​បាន​ទេ"</string>
+    <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"មិនអាចផ្តាច់ទំនាក់ទំនងបានទេ"</string>
+    <string name="contactJoinErrorToast" msgid="5735129234573327701">"មិនអាចតភ្ជាប់ទំនាក់ទំនងបានទេ"</string>
+    <string name="contactGenericErrorToast" msgid="3885457515665783976">"មាន​បញ្ហា​រក្សាទុក​ទំនាក់ទំនង"</string>
+    <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"មិនអាចរក្សាទុកការប្ដូររូបថតទំនាក់ទំនង​បាន​ទេ"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"បាន​បរាជ័យ​ក្នុង​ការ​ផ្ទុក​ស្លាក"</string>
     <string name="groupSavedToast" msgid="6491495462357722285">"បាន​រក្សាទុក​ស្លាក"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"បានលុបស្លាក"</string>
@@ -126,7 +127,7 @@
     <string name="groupUpdatedToast" msgid="3667977658676267687">"បាន​ធ្វើ​​បច្ចុប្បន្នភាព​ស្លាក"</string>
     <string name="groupMembersRemovedToast" msgid="3510563559799376603">"បាន​យក​ចេញ​ពី​ស្លាក"</string>
     <string name="groupMembersAddedToast" msgid="4824834898718972768">"បាន​បន្ថែម​ទៅ​ស្លាក"</string>
-    <string name="groupSavedErrorToast" msgid="8121032018490980184">"មិនអាចរក្សាទុកការផ្លាស់ប្តូរស្លាក​បាន​ទេ។"</string>
+    <string name="groupSavedErrorToast" msgid="2355891714292740162">"មិនអាចរក្សាទុកការផ្លាស់ប្តូរស្លាក​បាន​ទេ"</string>
     <string name="groupExistsErrorMessage" msgid="5196811283836946189">"ស្លាក​នោះ​មាន​រួច​ហើយ"</string>
     <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
       <item quantity="other">ទំនាក់ទំនង <xliff:g id="COUNT">%d</xliff:g> ដែលមានលេខទូរស័ព្ទ</item>
@@ -147,7 +148,6 @@
     <string name="callAgain" msgid="3197312117049874778">"ហៅ​ម្ដងទៀត"</string>
     <string name="returnCall" msgid="8171961914203617813">"ហៅ​ទៅវិញ"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"បញ្ចូល \"<xliff:g id="EMAIL">%s</xliff:g>\" ទៅ​ក្នុង​ទំនាក់ទំនង?"</string>
-    <string name="description_contact_photo" msgid="3387458082667894062">"រូបថត​ទំនាក់ទំនង"</string>
     <string name="description_plus_button" msgid="515164827856229880">"បូក"</string>
     <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> នៃ​ទំនាក់ទំនង <xliff:g id="TOTAL_NUMBER">%s</xliff:g>"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"ឈ្មោះ​នៃ​ទំនាក់ទំនង​របស់​អ្នក"</string>
@@ -192,7 +192,6 @@
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"កាលបរិច្ឆេទ"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"ស្លាក"</string>
     <string name="change_photo" msgid="8530597935483526383">"ផ្លាស់ប្ដូរ"</string>
-    <string name="primary_photo" msgid="8517942231868516999">"រូបថតបឋម"</string>
     <string name="description_star" msgid="2605854427360036550">"សំណព្វ"</string>
     <string name="edit_contact" msgid="7529281274005689512">"កែ​ទំនាក់ទំនង"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"បិទ"</string>
@@ -269,7 +268,6 @@
     <string name="header_name_entry" msgid="1592791008096288306">"ឈ្មោះ"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"អ៊ីមែល"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"ទូរស័ព្ទ"</string>
-    <string name="header_photo_entry" msgid="4438023151411853238">"រូបថត"</string>
     <string name="content_description_expand_editor" msgid="1111381475901897470">"ចុចដើម្បីពង្រីកកម្មវិធីកែប្រែទំនាក់ទំនង។"</string>
     <string name="content_description_collapse_editor" msgid="7598061318022977825">"ចុចដើម្បីបង្រួមកម្មវិធីកែប្រែទំនាក់ទំនង។"</string>
     <string name="content_description_directions" msgid="2686791825798189335">"ទិសដៅ​ទៅ​ទីតាំង"</string>
@@ -284,6 +282,8 @@
     <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"ប្ដូររូបថត"</string>
     <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"បានបរាជ័យក្នុងការបើកកម្មវិធីកែ"</string>
     <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"រក្សាទុកក្នុង"</string>
+    <!-- no translation found for compact_editor_account_selector_read_only_title (1869435992721760221) -->
+    <skip />
     <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"បច្ចុប្បន្នកំពុងរក្សាទុកទៅ <xliff:g id="ACCOUNT_NAME">%s</xliff:g>។ សូូមប៉ះពីរដងដើម្បីជ្រើសគណនីផ្សេងទៀត។"</string>
     <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
       <item quantity="other">ទំនាក់ទំនងដែលបានតភ្ជាប់ (<xliff:g id="COUNT">%d</xliff:g>)</item>
@@ -454,22 +454,14 @@
     <string name="chat_jabber" msgid="7561444230307829609">"ជជែក​ដោយ​ប្រើ Jabber"</string>
     <string name="chat" msgid="9025361898797412245">"ជជែក"</string>
     <string name="description_minus_button" msgid="6908099247930477551">"លុប​"</string>
-    <!-- no translation found for expand_name_fields_description (6883935911480726652) -->
-    <skip />
-    <!-- no translation found for collapse_name_fields_description (4757877385895561556) -->
-    <skip />
-    <!-- no translation found for expand_phonetic_name_fields_description (3865726859582581741) -->
-    <skip />
-    <!-- no translation found for collapse_phonetic_name_fields_description (9102249481855019452) -->
-    <skip />
-    <!-- no translation found for expand_fields_description (8129294181216760037) -->
-    <skip />
-    <!-- no translation found for collapse_fields_description (1884143625854637874) -->
-    <skip />
-    <!-- no translation found for announce_expanded_fields (1075947220478530622) -->
-    <skip />
-    <!-- no translation found for announce_collapsed_fields (6414231530177338704) -->
-    <skip />
+    <string name="expand_name_fields_description" msgid="6883935911480726652">"ពង្រីកវាលឈ្មោះ"</string>
+    <string name="collapse_name_fields_description" msgid="4757877385895561556">"លាក់​​វាល​ឈ្មោះ"</string>
+    <string name="expand_phonetic_name_fields_description" msgid="3865726859582581741">"ពង្រីក​វាលឈ្មោះ​តាម​សូរសព្ទ"</string>
+    <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"លាក់​វាល​ឈ្មោះ​តាម​សូរស័ព្ទ"</string>
+    <string name="expand_fields_description" msgid="8129294181216760037">"ពង្រីក"</string>
+    <string name="collapse_fields_description" msgid="1884143625854637874">"លាក់"</string>
+    <string name="announce_expanded_fields" msgid="1075947220478530622">"បានពង្រីក"</string>
+    <string name="announce_collapsed_fields" msgid="6414231530177338704">"បានលាក់"</string>
     <string name="list_filter_all_accounts" msgid="8908683398914322369">"ទំនាក់ទំនង​ទាំងអស់"</string>
     <string name="list_filter_all_starred" msgid="5031734941601931356">"បាន​ដាក់​ផ្កាយ"</string>
     <string name="list_filter_customize" msgid="4789963356004169321">"ប្ដូរ​តាម​តម្រូវ​ការ"</string>
@@ -555,7 +547,8 @@
     <string name="share_favorite_contacts" msgid="4280926751003081042">"ចែករំលែកទំនាក់ទំនង​ដែល​ចូលចិត្ត"</string>
     <string name="share_contacts" msgid="8109287987498711664">"ចែករំលែកទំនាក់ទំនងទាំងអស់"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"ការចែករំលែកទំនាក់ទំនង​មិន​បាន​សម្រេច។"</string>
-    <string name="dialog_import_export" msgid="4360648034889921624">"នាំចេញ/នាំចូល​ទំនាក់ទំនង"</string>
+    <!-- no translation found for dialog_export (1628001095187741417) -->
+    <skip />
     <string name="dialog_import" msgid="2431698729761448759">"នាំចូល​ទំនាក់ទំនង"</string>
     <string name="share_error" msgid="948429331673358107">"ទំនាក់ទំនង​នេះ​មិន​អាច​ចែករំលែក​បាន​ទេ។"</string>
     <string name="no_contact_to_share" msgid="1276397530378323033">"មិនមានទំនាក់ទំនងដើម្បីចែករំលែកទេ។"</string>
@@ -570,7 +563,10 @@
     <string name="menu_clear_frequents" msgid="7688250191932838833">"សម្អាត​ញឹកញាប់"</string>
     <string name="menu_select_sim" msgid="3603578201960504010">"ជ្រើស​ស៊ី​ម​កាត"</string>
     <string name="menu_accounts" msgid="1424330057450189074">"គ្រប់គ្រង​គណនី"</string>
-    <string name="menu_import_export" msgid="26217871113229507">"នាំចេញ/នាំចូល"</string>
+    <!-- no translation found for menu_import (6107961135813836467) -->
+    <skip />
+    <!-- no translation found for menu_export (2658783911863503902) -->
+    <skip />
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"លេខបានរារាំង"</string>
     <string name="contact_status_update_attribution" msgid="752179367353018597">"តាម​រយៈ <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> តាម​រយៈ <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
@@ -604,4 +600,8 @@
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> វិនាទី"</string>
     <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> នាទី <xliff:g id="SECONDS">%s</xliff:g> វិនាទី"</string>
     <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> ម៉ោង <xliff:g id="MINUTES_1">%s</xliff:g> នាទី <xliff:g id="SECONDS">%s</xliff:g> វិនាទី"</string>
+    <!-- no translation found for dynamic_shortcut_disabled_message (249939425761315252) -->
+    <skip />
+    <!-- no translation found for dynamic_shortcut_contact_removed_message (6845645831837615899) -->
+    <skip />
 </resources>
diff --git a/res/values-kn-rIN/strings.xml b/res/values-kn-rIN/strings.xml
index b9f68b8..9777bd5 100644
--- a/res/values-kn-rIN/strings.xml
+++ b/res/values-kn-rIN/strings.xml
@@ -67,6 +67,7 @@
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"ಸೂಚಿಸಲಾದ ಸಂಪರ್ಕಗಳು"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"ಎಲ್ಲಾ ಸಂಪರ್ಕಗಳು"</string>
     <string name="contactsJoinedMessage" msgid="3343535986195643136">"ಸಂಪರ್ಕಗಳನ್ನು ಲಿಂಕ್ ಮಾಡಲಾಗಿದೆ"</string>
+    <string name="contact_deleted_named_toast" msgid="6558941164987421174">"<xliff:g id="NAME">%s</xliff:g> ಅಳಿಸಲಾಗಿದೆ"</string>
     <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
       <item quantity="one">ಸಂಪರ್ಕಗಳನ್ನು ಅಳಿಸಲಾಗಿದೆ</item>
       <item quantity="other">ಸಂಪರ್ಕಗಳನ್ನು ಅಳಿಸಲಾಗಿದೆ</item>
@@ -113,11 +114,11 @@
     <string name="emptyMainList" msgid="2772242747899664460">"ನಿಮ್ಮ ಸಂಪರ್ಕಗಳ ಪಟ್ಟಿಯು ಖಾಲಿಯಾಗಿದೆ"</string>
     <string name="contactSavedToast" msgid="9171862279493213075">"ಸಂಪರ್ಕ‌ವನ್ನು ಉಳಿಸಲಾಗಿದೆ"</string>
     <string name="contactUnlinkedToast" msgid="7122823195786012553">"ಸಂಪರ್ಕಗಳನ್ನು ಅನ್‌ಲಿಂಕ್ ಮಾಡಲಾಗಿದೆ"</string>
-    <string name="contactSavedErrorToast" msgid="3207250533172944892">"ಸಂಪರ್ಕ ಬದಲಾವಣೆಗಳನ್ನು ಉಳಿಸಲಾಗಲಿಲ್ಲ."</string>
-    <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"ಸಂಪರ್ಕದ ಲಿಂಕ್ ರದ್ದು ಮಾಡಲಾಗಲಿಲ್ಲ."</string>
-    <string name="contactJoinErrorToast" msgid="3977932531264809035">"ಸಂಪರ್ಕವನ್ನು ಲಿಂಕ್ ಮಾಡಲಾಗಲಿಲ್ಲ."</string>
-    <string name="contactGenericErrorToast" msgid="7774911165341591714">"ಸಂಪರ್ಕವನ್ನು ಉಳಿಸುವಲ್ಲಿ ದೋಷ."</string>
-    <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"ಸಂಪರ್ಕ ಫೋಟೋ ಬದಲಾವಣೆಗಳನ್ನು ಉಳಿಸಲಾಗಲಿಲ್ಲ."</string>
+    <string name="contactSavedErrorToast" msgid="4827033473908688031">"ಸಂಪರ್ಕ ಬದಲಾವಣೆಗಳನ್ನು ಉಳಿಸಲಾಗಲಿಲ್ಲ"</string>
+    <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"ಸಂಪರ್ಕದ ಲಿಂಕ್ ರದ್ದು ಮಾಡಲಾಗಲಿಲ್ಲ"</string>
+    <string name="contactJoinErrorToast" msgid="5735129234573327701">"ಸಂಪರ್ಕವನ್ನು ಲಿಂಕ್ ಮಾಡಲಾಗಲಿಲ್ಲ"</string>
+    <string name="contactGenericErrorToast" msgid="3885457515665783976">"ಸಂಪರ್ಕವನ್ನು ಉಳಿಸುವಲ್ಲಿ ದೋಷ"</string>
+    <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"ಸಂಪರ್ಕ ಫೋಟೋ ಬದಲಾವಣೆಗಳನ್ನು ಉಳಿಸಲಾಗಲಿಲ್ಲ"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"ಲೇಬಲ್ ಲೋಡ್ ಮಾಡಲು ವಿಫಲವಾಗಿದೆ"</string>
     <string name="groupSavedToast" msgid="6491495462357722285">"ಲೇಬಲ್ ಉಳಿಸಲಾಗಿದೆ"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"ಲೇಬಲ್ ಅಳಿಸಲಾಗಿದೆ"</string>
@@ -126,7 +127,7 @@
     <string name="groupUpdatedToast" msgid="3667977658676267687">"ಲೇಬಲ್ ಅಪ್‌ಡೇಟ್ ಮಾಡಲಾಗಿದೆ"</string>
     <string name="groupMembersRemovedToast" msgid="3510563559799376603">"ಲೇಬಲ್‌ನಿಂದ ತೆಗೆದುಹಾಕಲಾಗಿದೆ"</string>
     <string name="groupMembersAddedToast" msgid="4824834898718972768">"ಲೇಬಲ್‌ಗೆ ಸೇರಿಸಲಾಗಿದೆ"</string>
-    <string name="groupSavedErrorToast" msgid="8121032018490980184">"ಲೇಬಲ್ ಬದಲಾವಣೆಗಳನ್ನು ಉಳಿಸಲಾಗಲಿಲ್ಲ."</string>
+    <string name="groupSavedErrorToast" msgid="2355891714292740162">"ಲೇಬಲ್ ಬದಲಾವಣೆಗಳನ್ನು ಉಳಿಸಲಾಗಲಿಲ್ಲ"</string>
     <string name="groupExistsErrorMessage" msgid="5196811283836946189">"ಆ ಲೇಬಲ್ ಈಗಾಗಲೇ ಅಸ್ತಿತ್ವದಲ್ಲಿದೆ"</string>
     <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
       <item quantity="one">ಫೋನ್‌ ಸಂಖ್ಯೆಗಳೊಂದಿಗೆ <xliff:g id="COUNT">%d</xliff:g> ಸಂಪರ್ಕಗಳು</item>
@@ -147,7 +148,6 @@
     <string name="callAgain" msgid="3197312117049874778">"ಮತ್ತೆ ಕರೆ ಮಾಡಿ"</string>
     <string name="returnCall" msgid="8171961914203617813">"ಹಿಂತಿರುಗುವಿಕೆ ಕರೆ"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"\"<xliff:g id="EMAIL">%s</xliff:g>\" ಗೆ ಸಂಪರ್ಕಗಳನ್ನು ಸೇರಿಸುವುದೇ?"</string>
-    <string name="description_contact_photo" msgid="3387458082667894062">"ಸಂಪರ್ಕ ಫೋಟೋ"</string>
     <string name="description_plus_button" msgid="515164827856229880">"ಪ್ಲಸ್‌"</string>
     <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="TOTAL_NUMBER">%s</xliff:g> ರಲ್ಲಿ <xliff:g id="CURRENT_NUMBER">%s</xliff:g> ಸಂಪರ್ಕಗಳು"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"ನಿಮ್ಮ ಸಂಪರ್ಕಗಳ ಹೆಸರುಗಳು"</string>
@@ -192,7 +192,6 @@
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"ದಿನಾಂಕ"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"ಲೇಬಲ್"</string>
     <string name="change_photo" msgid="8530597935483526383">"ಬದಲಾಯಿಸು"</string>
-    <string name="primary_photo" msgid="8517942231868516999">"ಪ್ರಾಥಮಿಕ ಫೋಟೋ"</string>
     <string name="description_star" msgid="2605854427360036550">"ಮೆಚ್ಚಿನ"</string>
     <string name="edit_contact" msgid="7529281274005689512">"ಸಂಪರ್ಕವನ್ನು ಎಡಿಟ್ ಮಾಡಿ"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"ಮುಚ್ಚು"</string>
@@ -269,7 +268,6 @@
     <string name="header_name_entry" msgid="1592791008096288306">"ಹೆಸರು"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"ಇಮೇಲ್"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"ಫೋನ್"</string>
-    <string name="header_photo_entry" msgid="4438023151411853238">"ಫೋಟೋ"</string>
     <string name="content_description_expand_editor" msgid="1111381475901897470">"ಸಂಪರ್ಕ ಸಂಪಾದಕವನ್ನು ವಿಸ್ತರಿಸಲು ಕ್ಲಿಕ್ ಮಾಡಿ."</string>
     <string name="content_description_collapse_editor" msgid="7598061318022977825">"ಸಂಪರ್ಕ ಸಂಪಾದಕವನ್ನು ಕುಗ್ಗಿಸಲು ಕ್ಲಿಕ್ ಮಾಡಿ."</string>
     <string name="content_description_directions" msgid="2686791825798189335">"ಸ್ಥಳಕ್ಕಾಗಿ ದಿಕ್ಕುಗಳು"</string>
@@ -284,6 +282,8 @@
     <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"ಫೋಟೋ ಬದಲಾಯಿಸಿ"</string>
     <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"ಸಂಪಾದಕವನ್ನು ತೆರೆಯಲು ವಿಫಲವಾಗಿದೆ."</string>
     <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"ಇದಕ್ಕೆ ಉಳಿಸಲಾಗುತ್ತಿದೆ"</string>
+    <!-- no translation found for compact_editor_account_selector_read_only_title (1869435992721760221) -->
+    <skip />
     <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"ಪ್ರಸ್ತುತ <xliff:g id="ACCOUNT_NAME">%s</xliff:g> ಖಾತೆಗೆ ಉಳಿಸಲಾಗುತ್ತಿದೆ. ಬೇರೆ ಖಾತೆಯನ್ನು ಆಯ್ಕೆಮಾಡಲು ಡಬಲ್ ಟ್ಯಾಪ್ ಮಾಡಿ."</string>
     <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
       <item quantity="one">ಲಿಂಕ್ ಮಾಡಲಾದ ಸಂಪರ್ಕಗಳು (<xliff:g id="COUNT">%d</xliff:g>)</item>
@@ -319,8 +319,8 @@
     <string name="editor_delete_view_description_short" msgid="7335518371270844912">"<xliff:g id="DATA_KIND">%s</xliff:g> ಅಳಿಸು"</string>
     <string name="photo_view_description_not_checked" msgid="8876314195990885177">"<xliff:g id="USER_NAME">%s </xliff:g><xliff:g id="ACCOUNT_TYPE">%s </xliff:g> ಅವರಿಂದ ಫೋಟೋ ಗುರುತಿಸಲಾಗಿಲ್ಲ"</string>
     <string name="photo_view_description_checked" msgid="3906597168607472795">"<xliff:g id="USER_NAME">%s </xliff:g><xliff:g id="ACCOUNT_TYPE">%s </xliff:g> ಅವರಿಂದ ಫೋಟೋ ಗುರುತಿಸಲಾಗಿದೆ"</string>
-    <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"ಅಜ್ಞಾತ ಖಾತೆಯಿಂದ ಫೋಟೋವನ್ನು ಗುರುತಿಸಲಾಗಿಲ್ಲ"</string>
-    <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"ಅಜ್ಞಾತ ಖಾತೆಯಿಂದ ಫೋಟೋವನ್ನು ಗುರುತಿಸಲಾಗಿದೆ"</string>
+    <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"ಅಪರಿಚಿತ ಖಾತೆಯಿಂದ ಫೋಟೋವನ್ನು ಗುರುತಿಸಲಾಗಿಲ್ಲ"</string>
+    <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"ಅಪರಿಚಿತ ಖಾತೆಯಿಂದ ಫೋಟೋವನ್ನು ಗುರುತಿಸಲಾಗಿದೆ"</string>
     <string name="locale_change_in_progress" msgid="6975676844194755501">"ಭಾಷೆಯ ಬದಲಾವಣೆಯನ್ನು ಪ್ರತಿಬಿಂಬಿಸಲು ಸಂಪರ್ಕ ಪಟ್ಟಿಯನ್ನು ಅಪ್‌ಡೇಟ್ ಮಾಡಲಾಗುತ್ತಿದೆ.\n\nದಯವಿಟ್ಟು ಕಾಯಿರಿ..."</string>
     <string name="menu_duplicates" msgid="4129802988372197257">"ನಕಲಿಗಳು"</string>
     <string name="navigation_drawer_open" msgid="1126498472143250642">"ನ್ಯಾವಿಗೇಶನ್ ಡ್ರಾಯರ್ ತೆರೆಯಿರಿ"</string>
@@ -454,22 +454,14 @@
     <string name="chat_jabber" msgid="7561444230307829609">"Jabber ಬಳಸಿಕೊಂಡು ಚಾಟ್‌ ಮಾಡಿ"</string>
     <string name="chat" msgid="9025361898797412245">"ಚಾಟ್"</string>
     <string name="description_minus_button" msgid="6908099247930477551">"ಅಳಿಸು"</string>
-    <!-- no translation found for expand_name_fields_description (6883935911480726652) -->
-    <skip />
-    <!-- no translation found for collapse_name_fields_description (4757877385895561556) -->
-    <skip />
-    <!-- no translation found for expand_phonetic_name_fields_description (3865726859582581741) -->
-    <skip />
-    <!-- no translation found for collapse_phonetic_name_fields_description (9102249481855019452) -->
-    <skip />
-    <!-- no translation found for expand_fields_description (8129294181216760037) -->
-    <skip />
-    <!-- no translation found for collapse_fields_description (1884143625854637874) -->
-    <skip />
-    <!-- no translation found for announce_expanded_fields (1075947220478530622) -->
-    <skip />
-    <!-- no translation found for announce_collapsed_fields (6414231530177338704) -->
-    <skip />
+    <string name="expand_name_fields_description" msgid="6883935911480726652">"ಹೆಸರಿನ ಕ್ಷೇತ್ರಗಳನ್ನು ವಿಸ್ತರಿಸಿ"</string>
+    <string name="collapse_name_fields_description" msgid="4757877385895561556">"ಹೆಸರಿನ ಕ್ಷೇತ್ರಗಳನ್ನು ಸಂಕುಚಿಸಿ"</string>
+    <string name="expand_phonetic_name_fields_description" msgid="3865726859582581741">"ಫೋನೆಟಿಕ್ ಹೆಸರಿನ ಕ್ಷೇತ್ರಗಳನ್ನು ವಿಸ್ತರಿಸಿ"</string>
+    <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"ಫೋನೆಟಿಕ್ ಹೆಸರಿನ ಕ್ಷೇತ್ರಗಳನ್ನು ಸಂಕುಚಿಸಿ"</string>
+    <string name="expand_fields_description" msgid="8129294181216760037">"ವಿಸ್ತರಿಸು"</string>
+    <string name="collapse_fields_description" msgid="1884143625854637874">"ಸಂಕುಚಿಸು"</string>
+    <string name="announce_expanded_fields" msgid="1075947220478530622">"ವಿಸ್ತರಿಸಲಾಗಿದೆ"</string>
+    <string name="announce_collapsed_fields" msgid="6414231530177338704">"ಸಂಕುಚಿಸಲಾಗಿದೆ"</string>
     <string name="list_filter_all_accounts" msgid="8908683398914322369">"ಎಲ್ಲಾ ಸಂಪರ್ಕಗಳು"</string>
     <string name="list_filter_all_starred" msgid="5031734941601931356">"ನಕ್ಷತ್ರ ಹಾಕಿರುವುದು"</string>
     <string name="list_filter_customize" msgid="4789963356004169321">"ಕಸ್ಟಮೈಸ್ ಮಾಡು"</string>
@@ -492,7 +484,7 @@
     <string name="cancel_import_confirmation_message" msgid="3929951040347726757">"<xliff:g id="FILENAME">%s</xliff:g> ಆಮದು ಮಾಡುವುದನ್ನು ರದ್ದುಗೊಳಿಸುವುದೇ?"</string>
     <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"<xliff:g id="FILENAME">%s</xliff:g> ರಫ್ತು ಮಾಡುವುದನ್ನು ರದ್ದುಗೊಳಿಸುವುದೇ?"</string>
     <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"vCard ಆಮದು/ರಫ್ತು ರದ್ದುಗೊಳಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ"</string>
-    <string name="fail_reason_unknown" msgid="1714092345030570863">"ಅಜ್ಞಾತ ದೋಷ."</string>
+    <string name="fail_reason_unknown" msgid="1714092345030570863">"ಅಪರಿಚಿತ ದೋಷ."</string>
     <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"\"<xliff:g id="FILE_NAME">%s</xliff:g>\" ಅನ್ನು ತೆರೆಯಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ: <xliff:g id="EXACT_REASON">%s</xliff:g>."</string>
     <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"ರಫ್ತುದಾರರನ್ನು ಪ್ರಾರಂಭಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
     <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"ಯಾವುದೇ ರಫ್ತುಮಾಡಬಹುದಾದ ಸಂಪರ್ಕವಿಲ್ಲ."</string>
@@ -555,7 +547,8 @@
     <string name="share_favorite_contacts" msgid="4280926751003081042">"ಮೆಚ್ಚಿನ ಸಂಪರ್ಕಗಳನ್ನು ಹಂಚಿಕೊಳ್ಳಿ"</string>
     <string name="share_contacts" msgid="8109287987498711664">"ಎಲ್ಲ ಸಂಪರ್ಕಗಳನ್ನು ಹಂಚಿಕೊಳ್ಳಿ"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"ಸಂಪರ್ಕಗಳನ್ನು ಹಂಚಿಕೊಳ್ಳಲು ವಿಫಲವಾಗಿದೆ."</string>
-    <string name="dialog_import_export" msgid="4360648034889921624">"ಸಂಪರ್ಕಗಳನ್ನು ಆಮದು/ರಪ್ತು ಮಾಡಿ"</string>
+    <!-- no translation found for dialog_export (1628001095187741417) -->
+    <skip />
     <string name="dialog_import" msgid="2431698729761448759">"ಸಂಪರ್ಕಗಳನ್ನು ಆಮದು ಮಾಡಿ"</string>
     <string name="share_error" msgid="948429331673358107">"ಈ ಸಂಪರ್ಕವನ್ನು ಹಂಚಿಕೊಳ್ಳಲು ಸಾಧ್ಯವಿಲ್ಲ."</string>
     <string name="no_contact_to_share" msgid="1276397530378323033">"ಹಂಚಿಕೊಳ್ಳಲು ಯಾವುದೇ ಸಂಪರ್ಕಗಳಿಲ್ಲ."</string>
@@ -570,7 +563,10 @@
     <string name="menu_clear_frequents" msgid="7688250191932838833">"ಪುನರಾವರ್ತನೆಗಳನ್ನು ತೆರವುಗೊಳಿಸಿ"</string>
     <string name="menu_select_sim" msgid="3603578201960504010">"ಸಿಮ್‌ ಕಾರ್ಡ್ ಆಯ್ಕೆಮಾಡಿ"</string>
     <string name="menu_accounts" msgid="1424330057450189074">"ಖಾತೆಗಳನ್ನು ನಿರ್ವಹಿಸಿ"</string>
-    <string name="menu_import_export" msgid="26217871113229507">"ಆಮದು/ರಫ್ತು ಮಾಡು"</string>
+    <!-- no translation found for menu_import (6107961135813836467) -->
+    <skip />
+    <!-- no translation found for menu_export (2658783911863503902) -->
+    <skip />
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"ನಿರ್ಬಂಧಿಸಲಾದ ಸಂಖ್ಯೆಗಳು"</string>
     <string name="contact_status_update_attribution" msgid="752179367353018597">"<xliff:g id="SOURCE">%1$s</xliff:g> ಮೂಲಕ"</string>
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> <xliff:g id="SOURCE">%2$s</xliff:g> ಮೂಲಕ"</string>
@@ -604,4 +600,8 @@
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> ಸೆ"</string>
     <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> ನಿಮಿ <xliff:g id="SECONDS">%s</xliff:g> ಸೆ"</string>
     <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> ಗಂ <xliff:g id="MINUTES_1">%s</xliff:g> ನಿಮಿಷ <xliff:g id="SECONDS">%s</xliff:g> ಸೆ"</string>
+    <!-- no translation found for dynamic_shortcut_disabled_message (249939425761315252) -->
+    <skip />
+    <!-- no translation found for dynamic_shortcut_contact_removed_message (6845645831837615899) -->
+    <skip />
 </resources>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index f17d6c4..1a60f3c 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -67,6 +67,7 @@
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"추천 연락처"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"모든 연락처"</string>
     <string name="contactsJoinedMessage" msgid="3343535986195643136">"연락처가 연결되었습니다."</string>
+    <string name="contact_deleted_named_toast" msgid="6558941164987421174">"<xliff:g id="NAME">%s</xliff:g>님이 삭제됨"</string>
     <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
       <item quantity="other">연락처 삭제됨</item>
       <item quantity="one">연락처 삭제됨</item>
@@ -113,11 +114,11 @@
     <string name="emptyMainList" msgid="2772242747899664460">"연락처 목록이 비어 있음"</string>
     <string name="contactSavedToast" msgid="9171862279493213075">"연락처가 저장되었습니다."</string>
     <string name="contactUnlinkedToast" msgid="7122823195786012553">"연락처 연결 해제됨"</string>
-    <string name="contactSavedErrorToast" msgid="3207250533172944892">"연락처 변경사항을 저장할 수 없습니다."</string>
-    <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"연락처를 연결 해제하지 못했습니다."</string>
-    <string name="contactJoinErrorToast" msgid="3977932531264809035">"연락처를 연결할 수 없습니다."</string>
-    <string name="contactGenericErrorToast" msgid="7774911165341591714">"연락처를 저장하는 중에 오류가 발생했습니다."</string>
-    <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"연락처 사진 변경사항을 저장하지 못했습니다."</string>
+    <string name="contactSavedErrorToast" msgid="4827033473908688031">"연락처 변경사항을 저장할 수 없습니다."</string>
+    <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"연락처를 연결 해제하지 못했습니다."</string>
+    <string name="contactJoinErrorToast" msgid="5735129234573327701">"연락처를 연결할 수 없습니다."</string>
+    <string name="contactGenericErrorToast" msgid="3885457515665783976">"연락처를 저장하는 중에 오류가 발생했습니다."</string>
+    <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"연락처 사진 변경사항을 저장하지 못했습니다."</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"라벨을 로드하지 못함"</string>
     <string name="groupSavedToast" msgid="6491495462357722285">"라벨을 저장했습니다."</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"라벨이 삭제되었습니다."</string>
@@ -126,7 +127,7 @@
     <string name="groupUpdatedToast" msgid="3667977658676267687">"라벨 업데이트됨"</string>
     <string name="groupMembersRemovedToast" msgid="3510563559799376603">"라벨에서 삭제됨"</string>
     <string name="groupMembersAddedToast" msgid="4824834898718972768">"라벨에 추가됨"</string>
-    <string name="groupSavedErrorToast" msgid="8121032018490980184">"라벨 변경사항을 저장할 수 없습니다."</string>
+    <string name="groupSavedErrorToast" msgid="2355891714292740162">"라벨 변경사항을 저장할 수 없습니다."</string>
     <string name="groupExistsErrorMessage" msgid="5196811283836946189">"이미 존재하는 라벨입니다."</string>
     <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
       <item quantity="other">전화번호가 포함된 연락처 <xliff:g id="COUNT">%d</xliff:g>개</item>
@@ -147,7 +148,6 @@
     <string name="callAgain" msgid="3197312117049874778">"다시 걸기"</string>
     <string name="returnCall" msgid="8171961914203617813">"전화 걸기"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"\'<xliff:g id="EMAIL">%s</xliff:g>\'을(를) 주소록에 추가하겠습니까?"</string>
-    <string name="description_contact_photo" msgid="3387458082667894062">"주소록 사진"</string>
     <string name="description_plus_button" msgid="515164827856229880">"더하기"</string>
     <string name="exporting_contact_list_progress" msgid="560522409559101193">"연락처 <xliff:g id="CURRENT_NUMBER">%s</xliff:g>개(총 <xliff:g id="TOTAL_NUMBER">%s</xliff:g>개) 내보내는 중"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"연락처 명단"</string>
@@ -192,7 +192,6 @@
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"날짜"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"라벨"</string>
     <string name="change_photo" msgid="8530597935483526383">"변경"</string>
-    <string name="primary_photo" msgid="8517942231868516999">"기본 사진"</string>
     <string name="description_star" msgid="2605854427360036550">"즐겨찾기"</string>
     <string name="edit_contact" msgid="7529281274005689512">"연락처 수정"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"닫기"</string>
@@ -269,7 +268,6 @@
     <string name="header_name_entry" msgid="1592791008096288306">"이름"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"이메일"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"전화"</string>
-    <string name="header_photo_entry" msgid="4438023151411853238">"사진"</string>
     <string name="content_description_expand_editor" msgid="1111381475901897470">"연락처 편집기를 펼치려면 클릭하세요."</string>
     <string name="content_description_collapse_editor" msgid="7598061318022977825">"연락처 편집기를 접으려면 클릭하세요."</string>
     <string name="content_description_directions" msgid="2686791825798189335">"길찾기"</string>
@@ -284,6 +282,8 @@
     <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"사진 변경"</string>
     <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"편집기를 열지 못했습니다."</string>
     <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"다음에 저장"</string>
+    <!-- no translation found for compact_editor_account_selector_read_only_title (1869435992721760221) -->
+    <skip />
     <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"현재 <xliff:g id="ACCOUNT_NAME">%s</xliff:g>에 저장 중입니다. 다른 계정을 선택하려면 두 번 탭하세요."</string>
     <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
       <item quantity="other">연결된 연락처(<xliff:g id="COUNT">%d</xliff:g>개)</item>
@@ -454,22 +454,14 @@
     <string name="chat_jabber" msgid="7561444230307829609">"Jabber로 채팅"</string>
     <string name="chat" msgid="9025361898797412245">"채팅"</string>
     <string name="description_minus_button" msgid="6908099247930477551">"삭제"</string>
-    <!-- no translation found for expand_name_fields_description (6883935911480726652) -->
-    <skip />
-    <!-- no translation found for collapse_name_fields_description (4757877385895561556) -->
-    <skip />
-    <!-- no translation found for expand_phonetic_name_fields_description (3865726859582581741) -->
-    <skip />
-    <!-- no translation found for collapse_phonetic_name_fields_description (9102249481855019452) -->
-    <skip />
-    <!-- no translation found for expand_fields_description (8129294181216760037) -->
-    <skip />
-    <!-- no translation found for collapse_fields_description (1884143625854637874) -->
-    <skip />
-    <!-- no translation found for announce_expanded_fields (1075947220478530622) -->
-    <skip />
-    <!-- no translation found for announce_collapsed_fields (6414231530177338704) -->
-    <skip />
+    <string name="expand_name_fields_description" msgid="6883935911480726652">"이름 입력란 펼치기"</string>
+    <string name="collapse_name_fields_description" msgid="4757877385895561556">"이름 입력란 접기"</string>
+    <string name="expand_phonetic_name_fields_description" msgid="3865726859582581741">"이름(소리나는 대로) 입력란 펼치기"</string>
+    <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"이름(소리나는 대로) 입력란 접기"</string>
+    <string name="expand_fields_description" msgid="8129294181216760037">"펼치기"</string>
+    <string name="collapse_fields_description" msgid="1884143625854637874">"접기"</string>
+    <string name="announce_expanded_fields" msgid="1075947220478530622">"펼쳐짐"</string>
+    <string name="announce_collapsed_fields" msgid="6414231530177338704">"접힘"</string>
     <string name="list_filter_all_accounts" msgid="8908683398914322369">"모든 연락처"</string>
     <string name="list_filter_all_starred" msgid="5031734941601931356">"별표"</string>
     <string name="list_filter_customize" msgid="4789963356004169321">"맞춤설정"</string>
@@ -555,7 +547,8 @@
     <string name="share_favorite_contacts" msgid="4280926751003081042">"자주 사용하는 연락처 공유"</string>
     <string name="share_contacts" msgid="8109287987498711664">"모든 연락처 공유"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"연락처를 공유할 수 없습니다."</string>
-    <string name="dialog_import_export" msgid="4360648034889921624">"주소록 가져오기/내보내기"</string>
+    <!-- no translation found for dialog_export (1628001095187741417) -->
+    <skip />
     <string name="dialog_import" msgid="2431698729761448759">"주소록 가져오기"</string>
     <string name="share_error" msgid="948429331673358107">"연락처를 공유할 수 없습니다."</string>
     <string name="no_contact_to_share" msgid="1276397530378323033">"공유할 연락처가 없습니다."</string>
@@ -570,7 +563,10 @@
     <string name="menu_clear_frequents" msgid="7688250191932838833">"자주 연락하는 사람들 목록 삭제"</string>
     <string name="menu_select_sim" msgid="3603578201960504010">"SIM 카드 선택"</string>
     <string name="menu_accounts" msgid="1424330057450189074">"계정 관리"</string>
-    <string name="menu_import_export" msgid="26217871113229507">"가져오기/내보내기"</string>
+    <!-- no translation found for menu_import (6107961135813836467) -->
+    <skip />
+    <!-- no translation found for menu_export (2658783911863503902) -->
+    <skip />
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"차단된 번호"</string>
     <string name="contact_status_update_attribution" msgid="752179367353018597">"출처: <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g>(출처: <xliff:g id="SOURCE">%2$s</xliff:g>)"</string>
@@ -604,4 +600,8 @@
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g>초"</string>
     <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g>분 <xliff:g id="SECONDS">%s</xliff:g>초"</string>
     <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g>시간 <xliff:g id="MINUTES_1">%s</xliff:g>분 <xliff:g id="SECONDS">%s</xliff:g>초"</string>
+    <!-- no translation found for dynamic_shortcut_disabled_message (249939425761315252) -->
+    <skip />
+    <!-- no translation found for dynamic_shortcut_contact_removed_message (6845645831837615899) -->
+    <skip />
 </resources>
diff --git a/res/values-ky-rKG/strings.xml b/res/values-ky-rKG/strings.xml
index 3829f94..fb5b00a 100644
--- a/res/values-ky-rKG/strings.xml
+++ b/res/values-ky-rKG/strings.xml
@@ -67,6 +67,7 @@
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Сунушталган байланыштар"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Бардык байланыштар"</string>
     <string name="contactsJoinedMessage" msgid="3343535986195643136">"Байланыштар шилтемеленди"</string>
+    <string name="contact_deleted_named_toast" msgid="6558941164987421174">"<xliff:g id="NAME">%s</xliff:g> жок кылынды"</string>
     <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
       <item quantity="other">Байланыштар жок кылынды</item>
       <item quantity="one">Байланыш жок кылынды</item>
@@ -113,11 +114,11 @@
     <string name="emptyMainList" msgid="2772242747899664460">"Байланыштар тизмеңиз бош"</string>
     <string name="contactSavedToast" msgid="9171862279493213075">"Байланыш сакталды"</string>
     <string name="contactUnlinkedToast" msgid="7122823195786012553">"Байланыштар ажыратылды"</string>
-    <string name="contactSavedErrorToast" msgid="3207250533172944892">"Байланыштын өзгөрүүлөрү сакталган жок."</string>
-    <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Байланыш ажыратылбай койду."</string>
-    <string name="contactJoinErrorToast" msgid="3977932531264809035">"Байланыш шилтемеленбей койду."</string>
-    <string name="contactGenericErrorToast" msgid="7774911165341591714">"Байланышты сактоодогу ката."</string>
-    <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"Байланыштын сүрөт өзгөрүүлөрү сакталган жок."</string>
+    <string name="contactSavedErrorToast" msgid="4827033473908688031">"Байланыштын өзгөрүүлөрү сакталган жок."</string>
+    <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"Байланыш ажыратылбай койду."</string>
+    <string name="contactJoinErrorToast" msgid="5735129234573327701">"Байланыш шилтемеленбей койду."</string>
+    <string name="contactGenericErrorToast" msgid="3885457515665783976">"Байланышты сактоодогу ката."</string>
+    <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Байланыштын сүрөт өзгөрүүлөрү сакталган жок."</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"Энбелги жүктөлгөн жок"</string>
     <string name="groupSavedToast" msgid="6491495462357722285">"Энбелги сакталды"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Энбелги жок кылынды"</string>
@@ -126,7 +127,7 @@
     <string name="groupUpdatedToast" msgid="3667977658676267687">"Энбелги жаңыртылды"</string>
     <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Энбелгиден алынып салынды"</string>
     <string name="groupMembersAddedToast" msgid="4824834898718972768">"Энге кошулду"</string>
-    <string name="groupSavedErrorToast" msgid="8121032018490980184">"Энбелгинин өзгөрүүлөрүн сактай алган жок."</string>
+    <string name="groupSavedErrorToast" msgid="2355891714292740162">"Энбелгинин өзгөрүүлөрүн сактай алган жок."</string>
     <string name="groupExistsErrorMessage" msgid="5196811283836946189">"Ал энбелги мурунтан эле бар"</string>
     <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
       <item quantity="other">телефон номерлери менен <xliff:g id="COUNT">%d</xliff:g> байланыш</item>
@@ -147,7 +148,6 @@
     <string name="callAgain" msgid="3197312117049874778">"Дагы чалуу"</string>
     <string name="returnCall" msgid="8171961914203617813">"Кайра чалуу"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Байланыштарга \"<xliff:g id="EMAIL">%s</xliff:g>\" кошосузбу?"</string>
-    <string name="description_contact_photo" msgid="3387458082667894062">"байланыштын сүрөтү"</string>
     <string name="description_plus_button" msgid="515164827856229880">"кошуу"</string>
     <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="TOTAL_NUMBER">%s</xliff:g> байланыштын ичинен <xliff:g id="CURRENT_NUMBER">%s</xliff:g>"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"Байланыштарыңыздын аттары"</string>
@@ -192,7 +192,6 @@
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Дата"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Энбелги"</string>
     <string name="change_photo" msgid="8530597935483526383">"Өзгөртүү"</string>
-    <string name="primary_photo" msgid="8517942231868516999">"Негизги сүрөт"</string>
     <string name="description_star" msgid="2605854427360036550">"сүйүктүү"</string>
     <string name="edit_contact" msgid="7529281274005689512">"Байланышты түзөтүү"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"жабуу"</string>
@@ -269,7 +268,6 @@
     <string name="header_name_entry" msgid="1592791008096288306">"Ысымы"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"Электрондук почта"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"Телефон"</string>
-    <string name="header_photo_entry" msgid="4438023151411853238">"Сүрөт"</string>
     <string name="content_description_expand_editor" msgid="1111381475901897470">"Байланыш түзөткүчүн жайып көрсөтүү үчүн чыкылдатыңыз."</string>
     <string name="content_description_collapse_editor" msgid="7598061318022977825">"Байланыш түзөткүчүн жыйыштыруу үчүн чыкылдатыңыз."</string>
     <string name="content_description_directions" msgid="2686791825798189335">"жайгашуу ордуна багыттоолор"</string>
@@ -284,6 +282,8 @@
     <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Сүрөттү өзгөртүү"</string>
     <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Түзөткүч ачылбай калды."</string>
     <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Төмөнкүгө сакталууда"</string>
+    <!-- no translation found for compact_editor_account_selector_read_only_title (1869435992721760221) -->
+    <skip />
     <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"Учурда <xliff:g id="ACCOUNT_NAME">%s</xliff:g> ичине сакталууда. Башка каттоо эсебин тандоо үчүн эки жолу таптаңыз."</string>
     <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
       <item quantity="other">Шилтемеленген байланыштар (<xliff:g id="COUNT">%d</xliff:g>)</item>
@@ -538,22 +538,14 @@
     <!-- no translation found for chat (9025361898797412245) -->
     <skip />
     <string name="description_minus_button" msgid="6908099247930477551">"жок кылуу"</string>
-    <!-- no translation found for expand_name_fields_description (6883935911480726652) -->
-    <skip />
-    <!-- no translation found for collapse_name_fields_description (4757877385895561556) -->
-    <skip />
-    <!-- no translation found for expand_phonetic_name_fields_description (3865726859582581741) -->
-    <skip />
-    <!-- no translation found for collapse_phonetic_name_fields_description (9102249481855019452) -->
-    <skip />
-    <!-- no translation found for expand_fields_description (8129294181216760037) -->
-    <skip />
-    <!-- no translation found for collapse_fields_description (1884143625854637874) -->
-    <skip />
-    <!-- no translation found for announce_expanded_fields (1075947220478530622) -->
-    <skip />
-    <!-- no translation found for announce_collapsed_fields (6414231530177338704) -->
-    <skip />
+    <string name="expand_name_fields_description" msgid="6883935911480726652">"Адамдын аты-жөнү жазылган талааларды жайып көрсөтүү"</string>
+    <string name="collapse_name_fields_description" msgid="4757877385895561556">"Адамдын аты-жөнү жазылган талааларды жыйыштыруу"</string>
+    <string name="expand_phonetic_name_fields_description" msgid="3865726859582581741">"Ысымдардын транскрипциясы жазылган талааларды жайып көрсөтүү"</string>
+    <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Ысымдардын транскрипциясы жазылган талааларды жыйыштыруу"</string>
+    <string name="expand_fields_description" msgid="8129294181216760037">"Жайып көрсөтүү"</string>
+    <string name="collapse_fields_description" msgid="1884143625854637874">"Жыйыштыруу"</string>
+    <string name="announce_expanded_fields" msgid="1075947220478530622">"Жайылып көрсөтүлдү"</string>
+    <string name="announce_collapsed_fields" msgid="6414231530177338704">"Жыйыштырылды"</string>
     <!-- no translation found for list_filter_all_accounts (8908683398914322369) -->
     <skip />
     <!-- no translation found for list_filter_all_starred (5031734941601931356) -->
@@ -658,7 +650,8 @@
     <string name="share_favorite_contacts" msgid="4280926751003081042">"Сүйүктүү байланыштарды бөлүшүү"</string>
     <string name="share_contacts" msgid="8109287987498711664">"Бардык байланыштар менен бөлүшүү"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"Байланыштар бөлүшүлбөй койду."</string>
-    <string name="dialog_import_export" msgid="4360648034889921624">"Байланыштарды өткөрүп алуу/берүү"</string>
+    <!-- no translation found for dialog_export (1628001095187741417) -->
+    <skip />
     <string name="dialog_import" msgid="2431698729761448759">"Байланыштарды өткөрүп алуу"</string>
     <string name="share_error" msgid="948429331673358107">"Бул байланышты бөлүшүү мүмкүн эмес."</string>
     <string name="no_contact_to_share" msgid="1276397530378323033">"Бөлүшө турган байланыш жок."</string>
@@ -677,7 +670,10 @@
     <string name="menu_clear_frequents" msgid="7688250191932838833">"Көп чалуулар тизмесин тазалоо"</string>
     <string name="menu_select_sim" msgid="3603578201960504010">"SIM карта тандаңыз"</string>
     <string name="menu_accounts" msgid="1424330057450189074">"Каттоо эсептерин башкаруу"</string>
-    <string name="menu_import_export" msgid="26217871113229507">"Импорттоо/экспорттоо"</string>
+    <!-- no translation found for menu_import (6107961135813836467) -->
+    <skip />
+    <!-- no translation found for menu_export (2658783911863503902) -->
+    <skip />
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"Бөгөттөлгөн номерлер"</string>
     <!-- no translation found for contact_status_update_attribution (752179367353018597) -->
     <skip />
@@ -713,4 +709,8 @@
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> сек"</string>
     <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> мүн. <xliff:g id="SECONDS">%s</xliff:g> сек"</string>
     <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> с <xliff:g id="MINUTES_1">%s</xliff:g> мүн <xliff:g id="SECONDS">%s</xliff:g> сек"</string>
+    <!-- no translation found for dynamic_shortcut_disabled_message (249939425761315252) -->
+    <skip />
+    <!-- no translation found for dynamic_shortcut_contact_removed_message (6845645831837615899) -->
+    <skip />
 </resources>
diff --git a/res/values-lo-rLA/strings.xml b/res/values-lo-rLA/strings.xml
index 6a4263a..0193774 100644
--- a/res/values-lo-rLA/strings.xml
+++ b/res/values-lo-rLA/strings.xml
@@ -67,6 +67,7 @@
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"ລາຍຊື່ຜູ່ຕິດຕໍ່ທີ່ແນະນຳ"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"ລາຍຊື່ຜູ່ຕິດຕໍ່ທັງໝົດ"</string>
     <string name="contactsJoinedMessage" msgid="3343535986195643136">"ລາຍ​ຊື່​ຕິດ​ຕໍ່​ລິ້ງ​ແລ້ວ"</string>
+    <string name="contact_deleted_named_toast" msgid="6558941164987421174">"ລຶບ <xliff:g id="NAME">%s</xliff:g> ອອກແລ້ວ"</string>
     <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
       <item quantity="other">ລາຍຊື່ຜູ້ຕິດຕໍ່ຖືກລຶບອອກແລ້ວ</item>
       <item quantity="one">ລາຍຊື່ຜູ້ຕິດຕໍ່ຖືກລຶບອອກແລ້ວ</item>
@@ -113,11 +114,11 @@
     <string name="emptyMainList" msgid="2772242747899664460">"ລາຍຊື່ຜູ້ຕິດຕໍ່ຂອງທ່ານຫວ່າງເປົ່າ"</string>
     <string name="contactSavedToast" msgid="9171862279493213075">"ບັນທຶກລາຍຊື່ຜູ່ຕິດຕໍ່ແລ້ວ"</string>
     <string name="contactUnlinkedToast" msgid="7122823195786012553">"ຖອນ​ລິ້ງ​ລາຍ​ຊື່​ຕິດ​ຕໍ່​ແລ້ວ"</string>
-    <string name="contactSavedErrorToast" msgid="3207250533172944892">"ບໍ່ສາມາດບັນທຶກການແກ້ໄຂລາຍຊື່ຜູ່ຕິດຕໍ່ໄດ້."</string>
-    <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"ບໍ່​ສາ​ມາດ​ຖອນ​ລິ້ງ​ລາຍ​ຊື່​ຕິດ​ຕໍ່​ໄດ້."</string>
-    <string name="contactJoinErrorToast" msgid="3977932531264809035">"ບໍ່​ສາ​ມາດ​ລິ້ງ​ລາຍ​ຊື່​ຜູ້​ຕິດ​ຕໍ່​ໄດ້."</string>
-    <string name="contactGenericErrorToast" msgid="7774911165341591714">"ບັນ​ທຶກ​ລາຍ​ຊື່​ຕິດ​ຕໍ່​ຂັດ​ຂ້ອງ."</string>
-    <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"ບໍ່​ສາ​ມາດ​ບັນ​ທຶກ​ການ​ປ່ຽນ​ແປງ​ຮູບ​ລາຍ​ຊື່​ຕິດ​ຕໍ່​ໄດ້."</string>
+    <string name="contactSavedErrorToast" msgid="4827033473908688031">"ບໍ່ສາມາດບັນທຶກການແກ້ໄຂລາຍຊື່ຜູ້ຕິດຕໍ່ໄດ້"</string>
+    <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"ບໍ່ສາມາດຍົກເລີກການລິ້ງລາຍຊື່ຜູ້ຕິດຕໍ່ໄດ້"</string>
+    <string name="contactJoinErrorToast" msgid="5735129234573327701">"ບໍ່ສາມາດລິ້ງລາຍຊື່ຜູ້ຕິດຕໍ່ໄດ້"</string>
+    <string name="contactGenericErrorToast" msgid="3885457515665783976">"ເກີດຄວາມຜິດພາດໃນການບັນທຶກລາຍຊື່ຜູ້ຕິດຕໍ່"</string>
+    <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"ບໍ່ສາມາດບັນທຶກການປ່ຽນແປງຮູບລາຍຊື່ຜູ້ຕິດຕໍ່ໄດ້"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"ໂຫຼດປ້າຍກຳກັບບໍ່ສຳເລັດ"</string>
     <string name="groupSavedToast" msgid="6491495462357722285">"ບັນທຶກປ້າຍກຳກັບແລ້ວ"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"ລຶບປ້າຍກຳກັບແລ້ວ"</string>
@@ -126,7 +127,7 @@
     <string name="groupUpdatedToast" msgid="3667977658676267687">"ອັບເດດປ້າຍກຳກັບແລ້ວ"</string>
     <string name="groupMembersRemovedToast" msgid="3510563559799376603">"ລຶບອອກຈາກປ້າຍກຳກັບແລ້ວ"</string>
     <string name="groupMembersAddedToast" msgid="4824834898718972768">"ເພີ່ມໃສ່ປ້າຍກຳກັບແລ້ວ"</string>
-    <string name="groupSavedErrorToast" msgid="8121032018490980184">"ບໍ່ສາມາດບັນທຶກການປ່ຽນແປງປ້າຍກຳກັບໄດ້."</string>
+    <string name="groupSavedErrorToast" msgid="2355891714292740162">"ບໍ່ສາມາດບັນທຶກການປ່ຽນແປງປ້າຍກຳກັບໄດ້"</string>
     <string name="groupExistsErrorMessage" msgid="5196811283836946189">"ມີປ້າຍກຳກັບນັ້ນຢູ່ກ່ອນແລ້ວ"</string>
     <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
       <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ລາຍຊື່ພ້ອມເບີໂທລະສັບ</item>
@@ -147,7 +148,6 @@
     <string name="callAgain" msgid="3197312117049874778">"ໂທອີກເທື່ອນຶ່ງ"</string>
     <string name="returnCall" msgid="8171961914203617813">"ໂທກັບ"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"ເພີ່ມ \"<xliff:g id="EMAIL">%s</xliff:g>\" ໃສ່ລາຍຊື່ຜູ່ຕິດຕໍ່?"</string>
-    <string name="description_contact_photo" msgid="3387458082667894062">"ຮູບພາບລາຍຊື່ຜູ່ຕິດຕໍ່"</string>
     <string name="description_plus_button" msgid="515164827856229880">"ບວກ"</string>
     <string name="exporting_contact_list_progress" msgid="560522409559101193">"ລາຍຊື່ຜູ່ຕິດຕໍ່ <xliff:g id="CURRENT_NUMBER">%s</xliff:g> ຈາກທັງໝົດ  <xliff:g id="TOTAL_NUMBER">%s</xliff:g> ລາຍຊື່"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"ຊື່ຂອງລາຍຊື່ຜູ່ຕິດຕໍ່ຂອງທ່ານ"</string>
@@ -192,7 +192,6 @@
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"ວັນທີ"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"ປ້າຍກຳກັບ"</string>
     <string name="change_photo" msgid="8530597935483526383">"ປ່ຽນແປງ"</string>
-    <string name="primary_photo" msgid="8517942231868516999">"ຮູບ​ຖ່າຍ​ຕົ້ນ​ຕໍ"</string>
     <string name="description_star" msgid="2605854427360036550">"ໝາຍດາວ"</string>
     <string name="edit_contact" msgid="7529281274005689512">"ແກ້ໄຂລາຍຊື່ຜູ່ຕິດຕໍ່"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"ປິດ"</string>
@@ -269,7 +268,6 @@
     <string name="header_name_entry" msgid="1592791008096288306">"ຊື່"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"ອີເມວ"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"ໂທລະສັບ"</string>
-    <string name="header_photo_entry" msgid="4438023151411853238">"ຮູບພາບ"</string>
     <string name="content_description_expand_editor" msgid="1111381475901897470">"ຄ​ລິກ​ເພື່ອ​ຂະ​ຫຍາຍເຄື່ອງກວດ​ແກ້​ລາຍ​ຊື່​ຕິດ​ຕໍ່."</string>
     <string name="content_description_collapse_editor" msgid="7598061318022977825">"ຄ​ລິກ​ເພື່ອ​ຫຍໍ້​ເຄື່ອງກວດ​ແກ້​ລາຍ​ຊື່​ຕິດ​ຕໍ່."</string>
     <string name="content_description_directions" msgid="2686791825798189335">"​ເສັ້ນ​ທາງ​ໄປ​ຫາ​ສະ​ຖານ​ທີ່"</string>
@@ -284,6 +282,8 @@
     <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"ປ່ຽນຮູບ"</string>
     <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"ເປີດ​ເຄື່ອງ​ຕັດ​ຕໍ່​ບໍ່​ສຳ​ເລັດ."</string>
     <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"ກຳ​ລັງ​ບັນ​ທຶກ​ໃສ່"</string>
+    <!-- no translation found for compact_editor_account_selector_read_only_title (1869435992721760221) -->
+    <skip />
     <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"ປະ​ຈຸ​ບັນ​ກຳ​ລັງ​ບັນ​ທຶກ​ໃສ່ <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. ແຕະ​ສອງ​ເທື່ອ​ ເພື່ອ​ເລືອກ​ບັນ​ຊີອື່ນ."</string>
     <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
       <item quantity="other">ລາຍ​ຊື່​ຕິດ​ຕໍ່​ລິ້ງ​ແລ້ວ (<xliff:g id="COUNT">%d</xliff:g>)</item>
@@ -454,22 +454,14 @@
     <string name="chat_jabber" msgid="7561444230307829609">"ສົນທະນາໂດຍໃຊ້ Jabber"</string>
     <string name="chat" msgid="9025361898797412245">"ສົນທະນາ"</string>
     <string name="description_minus_button" msgid="6908099247930477551">"ລຶບ"</string>
-    <!-- no translation found for expand_name_fields_description (6883935911480726652) -->
-    <skip />
-    <!-- no translation found for collapse_name_fields_description (4757877385895561556) -->
-    <skip />
-    <!-- no translation found for expand_phonetic_name_fields_description (3865726859582581741) -->
-    <skip />
-    <!-- no translation found for collapse_phonetic_name_fields_description (9102249481855019452) -->
-    <skip />
-    <!-- no translation found for expand_fields_description (8129294181216760037) -->
-    <skip />
-    <!-- no translation found for collapse_fields_description (1884143625854637874) -->
-    <skip />
-    <!-- no translation found for announce_expanded_fields (1075947220478530622) -->
-    <skip />
-    <!-- no translation found for announce_collapsed_fields (6414231530177338704) -->
-    <skip />
+    <string name="expand_name_fields_description" msgid="6883935911480726652">"ຂະຫຍາຍຊ່ອງຂໍ້ມູນຊື່"</string>
+    <string name="collapse_name_fields_description" msgid="4757877385895561556">"ຫຍໍ້ຊ່ອງຂໍ້ມູນຊື່"</string>
+    <string name="expand_phonetic_name_fields_description" msgid="3865726859582581741">"ຂະຫຍາຍຊ່ອງຂໍ້ມູນການອອກສຽງຊື່"</string>
+    <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"ຫຍໍ້ຊ່ອງຂໍ້ມູນການອອກສຽງຊື່"</string>
+    <string name="expand_fields_description" msgid="8129294181216760037">"ຂະຫຍາຍ"</string>
+    <string name="collapse_fields_description" msgid="1884143625854637874">"ຫຍໍ້ລົງ"</string>
+    <string name="announce_expanded_fields" msgid="1075947220478530622">"ຂະຫຍາຍແລ້ວ"</string>
+    <string name="announce_collapsed_fields" msgid="6414231530177338704">"ຫຍໍ້ແລ້ວ"</string>
     <string name="list_filter_all_accounts" msgid="8908683398914322369">"ລາຍຊື່ຜູ່ຕິດຕໍ່ທັງໝົດ"</string>
     <string name="list_filter_all_starred" msgid="5031734941601931356">"ຕິດດາວແລ້ວ"</string>
     <string name="list_filter_customize" msgid="4789963356004169321">"ປັບແຕ່ງ"</string>
@@ -555,7 +547,8 @@
     <string name="share_favorite_contacts" msgid="4280926751003081042">"ແບ່ງປັນລາຍຊື່ຜູ້ຕິດຕໍ່ທີ່ມັກ"</string>
     <string name="share_contacts" msgid="8109287987498711664">"ແບ່ງປັນທຸກລາຍຊື່ຜູ້ຕິດຕໍ່"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"ແບ່ງປັນລາຍຊື່ຜູ້ຕິດຕໍ່ບໍ່ສຳເລັດ."</string>
-    <string name="dialog_import_export" msgid="4360648034889921624">"ນຳເຂົ້າ/ສົ່ງອອກ ລາຍຊື່ຜູ່ຕິດຕໍ່"</string>
+    <!-- no translation found for dialog_export (1628001095187741417) -->
+    <skip />
     <string name="dialog_import" msgid="2431698729761448759">"ນຳເຂົ້າລາຍຊື່ຜູ່ຕິດຕໍ່"</string>
     <string name="share_error" msgid="948429331673358107">"ບໍ່ສາມາດແບ່ງປັນລາຍຊື່ຜູ່ຕິດຕໍ່ນີ້ໄດ້"</string>
     <string name="no_contact_to_share" msgid="1276397530378323033">"ບໍ່ມີລາຍຊື່ຜູ້ຕິດຕໍ່ທີ່ຈະແບ່ງປັນ."</string>
@@ -570,7 +563,10 @@
     <string name="menu_clear_frequents" msgid="7688250191932838833">"ລຶບລາຍຊື່ທີ່ຕິດຕໍ່ເລື້ອຍໆ"</string>
     <string name="menu_select_sim" msgid="3603578201960504010">"ເລືອກ SIM ກາດ"</string>
     <string name="menu_accounts" msgid="1424330057450189074">"ຈັດການບັນຊີ"</string>
-    <string name="menu_import_export" msgid="26217871113229507">"ນຳເຂົ້າ/ສົ່ງອອກ"</string>
+    <!-- no translation found for menu_import (6107961135813836467) -->
+    <skip />
+    <!-- no translation found for menu_export (2658783911863503902) -->
+    <skip />
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"ເບີໂທທີ່ບລັອກໄວ້"</string>
     <string name="contact_status_update_attribution" msgid="752179367353018597">"ຜ່ານ <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> ຜ່ານ <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
@@ -604,4 +600,8 @@
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> ວິ"</string>
     <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> ນທ <xliff:g id="SECONDS">%s</xliff:g> ວິ"</string>
     <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> ຊມ <xliff:g id="MINUTES_1">%s</xliff:g> ນທ <xliff:g id="SECONDS">%s</xliff:g> ວິ"</string>
+    <!-- no translation found for dynamic_shortcut_disabled_message (249939425761315252) -->
+    <skip />
+    <!-- no translation found for dynamic_shortcut_contact_removed_message (6845645831837615899) -->
+    <skip />
 </resources>
diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml
index f242abe..400b263 100644
--- a/res/values-lt/strings.xml
+++ b/res/values-lt/strings.xml
@@ -67,6 +67,7 @@
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Siūlomi adresatai"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Visi kontaktai"</string>
     <string name="contactsJoinedMessage" msgid="3343535986195643136">"Kontaktai susieti"</string>
+    <string name="contact_deleted_named_toast" msgid="6558941164987421174">"<xliff:g id="NAME">%s</xliff:g> ištrintas (-a)"</string>
     <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
       <item quantity="one">kontaktas ištrintas</item>
       <item quantity="few">kontaktai ištrinti</item>
@@ -119,11 +120,11 @@
     <string name="emptyMainList" msgid="2772242747899664460">"Kontaktų sąrašas tuščias"</string>
     <string name="contactSavedToast" msgid="9171862279493213075">"Kontaktas išsaugotas"</string>
     <string name="contactUnlinkedToast" msgid="7122823195786012553">"Kontaktai atsieti"</string>
-    <string name="contactSavedErrorToast" msgid="3207250533172944892">"Nepavyko išsaugoti kontakto pakeitimų."</string>
-    <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Nepavyko atsieti kontakto."</string>
-    <string name="contactJoinErrorToast" msgid="3977932531264809035">"Nepavyko susieti kontakto."</string>
-    <string name="contactGenericErrorToast" msgid="7774911165341591714">"Išsaugant kontaktą įvyko klaida."</string>
-    <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"Nepavyko išsaugoti kontakto nuotraukos pakeitimų."</string>
+    <string name="contactSavedErrorToast" msgid="4827033473908688031">"Nepavyko išsaugoti kontakto pakeitimų"</string>
+    <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"Nepavyko atsieti kontakto"</string>
+    <string name="contactJoinErrorToast" msgid="5735129234573327701">"Nepavyko susieti kontakto"</string>
+    <string name="contactGenericErrorToast" msgid="3885457515665783976">"Išsaugant kontaktą įvyko klaida"</string>
+    <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Nepavyko išsaugoti kontakto nuotraukos pakeitimų"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"Nepavyko įkelti etiketės"</string>
     <string name="groupSavedToast" msgid="6491495462357722285">"Etiketė išsaugota"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Etiketė ištrinta"</string>
@@ -132,7 +133,7 @@
     <string name="groupUpdatedToast" msgid="3667977658676267687">"Etiketė atnaujinta"</string>
     <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Pašalinta iš etiketės"</string>
     <string name="groupMembersAddedToast" msgid="4824834898718972768">"Pridėta prie etiketės"</string>
-    <string name="groupSavedErrorToast" msgid="8121032018490980184">"Nepavyko išsaugoti etiketės pakeitimų."</string>
+    <string name="groupSavedErrorToast" msgid="2355891714292740162">"Nepavyko išsaugoti etiketės pakeitimų"</string>
     <string name="groupExistsErrorMessage" msgid="5196811283836946189">"Ši etiketė jau yra"</string>
     <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
       <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> kontaktas su telefonų numeriais</item>
@@ -159,7 +160,6 @@
     <string name="callAgain" msgid="3197312117049874778">"Skambinti dar kartą"</string>
     <string name="returnCall" msgid="8171961914203617813">"Grįžtamasis skambutis"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Pridėti „<xliff:g id="EMAIL">%s</xliff:g>“ prie adresatų?"</string>
-    <string name="description_contact_photo" msgid="3387458082667894062">"adresato nuotrauka"</string>
     <string name="description_plus_button" msgid="515164827856229880">"plius"</string>
     <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> iš <xliff:g id="TOTAL_NUMBER">%s</xliff:g> adresatų"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"Kontaktų vardai"</string>
@@ -206,7 +206,6 @@
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Data"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Etiketė"</string>
     <string name="change_photo" msgid="8530597935483526383">"Pakeisti"</string>
-    <string name="primary_photo" msgid="8517942231868516999">"Pagrindinė nuotrauka"</string>
     <string name="description_star" msgid="2605854427360036550">"įtraukti į adresyną"</string>
     <string name="edit_contact" msgid="7529281274005689512">"Redaguoti kontaktą"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"uždaryti"</string>
@@ -283,7 +282,6 @@
     <string name="header_name_entry" msgid="1592791008096288306">"Vardas"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"El. paštas"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"Telefonas"</string>
-    <string name="header_photo_entry" msgid="4438023151411853238">"Nuotrauka"</string>
     <string name="content_description_expand_editor" msgid="1111381475901897470">"Spustelėkite, kad išskleistumėte kontaktų redagavimo priemonę."</string>
     <string name="content_description_collapse_editor" msgid="7598061318022977825">"Spustelėkite, kad sutrauktumėte kontaktų redagavimo priemonę."</string>
     <string name="content_description_directions" msgid="2686791825798189335">"nuorodos į vietovę"</string>
@@ -298,6 +296,8 @@
     <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Keisti nuotrauką"</string>
     <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Nepavyko atidaryti redagavimo priemonės."</string>
     <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Saugojimo vieta"</string>
+    <!-- no translation found for compact_editor_account_selector_read_only_title (1869435992721760221) -->
+    <skip />
     <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"Šiuo metu išsaugoma <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Dukart palieskite, kad pasirinktumėte kitą paskyrą."</string>
     <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
       <item quantity="one">Susieti kontaktai (<xliff:g id="COUNT">%d</xliff:g>)</item>
@@ -476,22 +476,14 @@
     <string name="chat_jabber" msgid="7561444230307829609">"Kalbėti naudojant „Jabber“"</string>
     <string name="chat" msgid="9025361898797412245">"Kalbėti"</string>
     <string name="description_minus_button" msgid="6908099247930477551">"ištrinti"</string>
-    <!-- no translation found for expand_name_fields_description (6883935911480726652) -->
-    <skip />
-    <!-- no translation found for collapse_name_fields_description (4757877385895561556) -->
-    <skip />
-    <!-- no translation found for expand_phonetic_name_fields_description (3865726859582581741) -->
-    <skip />
-    <!-- no translation found for collapse_phonetic_name_fields_description (9102249481855019452) -->
-    <skip />
-    <!-- no translation found for expand_fields_description (8129294181216760037) -->
-    <skip />
-    <!-- no translation found for collapse_fields_description (1884143625854637874) -->
-    <skip />
-    <!-- no translation found for announce_expanded_fields (1075947220478530622) -->
-    <skip />
-    <!-- no translation found for announce_collapsed_fields (6414231530177338704) -->
-    <skip />
+    <string name="expand_name_fields_description" msgid="6883935911480726652">"Išskleisti vardų laukus"</string>
+    <string name="collapse_name_fields_description" msgid="4757877385895561556">"Sutraukti vardų laukus"</string>
+    <string name="expand_phonetic_name_fields_description" msgid="3865726859582581741">"Išskleisti fonetinių vardų laukus"</string>
+    <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Sutraukti fonetinių vardų laukus"</string>
+    <string name="expand_fields_description" msgid="8129294181216760037">"Išskleisti"</string>
+    <string name="collapse_fields_description" msgid="1884143625854637874">"Sutraukti"</string>
+    <string name="announce_expanded_fields" msgid="1075947220478530622">"Išskleista"</string>
+    <string name="announce_collapsed_fields" msgid="6414231530177338704">"Sutraukta"</string>
     <string name="list_filter_all_accounts" msgid="8908683398914322369">"Visi kontaktai"</string>
     <string name="list_filter_all_starred" msgid="5031734941601931356">"Pažymėta žvaigždute"</string>
     <string name="list_filter_customize" msgid="4789963356004169321">"Tinkinti"</string>
@@ -577,7 +569,8 @@
     <string name="share_favorite_contacts" msgid="4280926751003081042">"Bendrinti mėgstamiausius kontaktus"</string>
     <string name="share_contacts" msgid="8109287987498711664">"Bendrinti visus kontaktus"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"Nepavyko bendrinti kontaktų."</string>
-    <string name="dialog_import_export" msgid="4360648034889921624">"Import. / eksport. kont."</string>
+    <!-- no translation found for dialog_export (1628001095187741417) -->
+    <skip />
     <string name="dialog_import" msgid="2431698729761448759">"Importuoti kontaktus"</string>
     <string name="share_error" msgid="948429331673358107">"Šio kontakto negalima bendrinti."</string>
     <string name="no_contact_to_share" msgid="1276397530378323033">"Nėra bendrintinų kontaktų."</string>
@@ -592,7 +585,10 @@
     <string name="menu_clear_frequents" msgid="7688250191932838833">"Valyti dažniausiai naudojamus"</string>
     <string name="menu_select_sim" msgid="3603578201960504010">"Pasirinkti SIM kortelę"</string>
     <string name="menu_accounts" msgid="1424330057450189074">"Tvarkyti paskyras"</string>
-    <string name="menu_import_export" msgid="26217871113229507">"Importuoti / eksportuoti"</string>
+    <!-- no translation found for menu_import (6107961135813836467) -->
+    <skip />
+    <!-- no translation found for menu_export (2658783911863503902) -->
+    <skip />
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"Užblokuoti numeriai"</string>
     <string name="contact_status_update_attribution" msgid="752179367353018597">"naudojant „<xliff:g id="SOURCE">%1$s</xliff:g>“"</string>
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> naudojant „<xliff:g id="SOURCE">%2$s</xliff:g>“"</string>
@@ -628,4 +624,8 @@
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> sek."</string>
     <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> min. <xliff:g id="SECONDS">%s</xliff:g> sek."</string>
     <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> val. <xliff:g id="MINUTES_1">%s</xliff:g> min. <xliff:g id="SECONDS">%s</xliff:g> sek."</string>
+    <!-- no translation found for dynamic_shortcut_disabled_message (249939425761315252) -->
+    <skip />
+    <!-- no translation found for dynamic_shortcut_contact_removed_message (6845645831837615899) -->
+    <skip />
 </resources>
diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml
index 9d37b71..d3d6a31 100644
--- a/res/values-lv/strings.xml
+++ b/res/values-lv/strings.xml
@@ -67,6 +67,7 @@
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Ieteiktās kontaktpersonas"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Visas kontaktpersonas"</string>
     <string name="contactsJoinedMessage" msgid="3343535986195643136">"Kontaktpersonas tika saistītas."</string>
+    <string name="contact_deleted_named_toast" msgid="6558941164987421174">"Kontaktpers. <xliff:g id="NAME">%s</xliff:g> dzēsta"</string>
     <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
       <item quantity="zero">Kontaktpersonas ir izdzēstas</item>
       <item quantity="one">Kontaktpersonas ir izdzēstas</item>
@@ -116,11 +117,11 @@
     <string name="emptyMainList" msgid="2772242747899664460">"Jūsu kontaktpersonu saraksts ir tukšs."</string>
     <string name="contactSavedToast" msgid="9171862279493213075">"Kontaktpersona ir saglabāta."</string>
     <string name="contactUnlinkedToast" msgid="7122823195786012553">"Kontaktpersonas ir atsaistītas"</string>
-    <string name="contactSavedErrorToast" msgid="3207250533172944892">"Nevarēja saglabāt kontaktpersonas datu izmaiņas."</string>
-    <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Nevarēja atsaistīt kontaktpersonu."</string>
-    <string name="contactJoinErrorToast" msgid="3977932531264809035">"Nevarēja saistīt kontaktpersonu."</string>
-    <string name="contactGenericErrorToast" msgid="7774911165341591714">"Saglabājot kontaktpersonu, radās kļūda."</string>
-    <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"Nevarēja saglabāt kontaktpersonas fotoattēla izmaiņas."</string>
+    <string name="contactSavedErrorToast" msgid="4827033473908688031">"Nevarēja saglabāt kontaktpersonas datu izmaiņas."</string>
+    <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"Nevarēja atsaistīt kontaktpersonu."</string>
+    <string name="contactJoinErrorToast" msgid="5735129234573327701">"Nevarēja saistīt kontaktpersonu."</string>
+    <string name="contactGenericErrorToast" msgid="3885457515665783976">"Saglabājot kontaktpersonu, radās kļūda."</string>
+    <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Nevarēja saglabāt kontaktpersonas fotoattēla izmaiņas."</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"Neizdevās ielādēt iezīmi"</string>
     <string name="groupSavedToast" msgid="6491495462357722285">"Iezīme ir saglabāta."</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Iezīme izdzēsta"</string>
@@ -129,7 +130,7 @@
     <string name="groupUpdatedToast" msgid="3667977658676267687">"Iezīme atjaunināta"</string>
     <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Noņemtas no iezīmes"</string>
     <string name="groupMembersAddedToast" msgid="4824834898718972768">"Pievienota iezīmei"</string>
-    <string name="groupSavedErrorToast" msgid="8121032018490980184">"Nevarēja saglabāt iezīmes izmaiņas."</string>
+    <string name="groupSavedErrorToast" msgid="2355891714292740162">"Nevarēja saglabāt iezīmes izmaiņas."</string>
     <string name="groupExistsErrorMessage" msgid="5196811283836946189">"Attiecīgā iezīme jau pastāv."</string>
     <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
       <item quantity="zero"><xliff:g id="COUNT">%d</xliff:g> kontaktpersonas ar tālruņa numuriem</item>
@@ -153,7 +154,6 @@
     <string name="callAgain" msgid="3197312117049874778">"Zvanīt vēlreiz"</string>
     <string name="returnCall" msgid="8171961914203617813">"Atzvanīt"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Vai pievienot “<xliff:g id="EMAIL">%s</xliff:g>” kontaktpersonām?"</string>
-    <string name="description_contact_photo" msgid="3387458082667894062">"kontaktpersonas fotoattēls"</string>
     <string name="description_plus_button" msgid="515164827856229880">"pluss"</string>
     <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> no <xliff:g id="TOTAL_NUMBER">%s</xliff:g> kontaktpersonas(-ām)"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"Kontaktpersonu vārdi"</string>
@@ -199,7 +199,6 @@
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Datums"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Iezīme"</string>
     <string name="change_photo" msgid="8530597935483526383">"Mainīt"</string>
-    <string name="primary_photo" msgid="8517942231868516999">"Galvenais foto"</string>
     <string name="description_star" msgid="2605854427360036550">"izlase"</string>
     <string name="edit_contact" msgid="7529281274005689512">"Kontaktpersonu rediģēšana"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"aizvērt"</string>
@@ -276,7 +275,6 @@
     <string name="header_name_entry" msgid="1592791008096288306">"Nosaukums"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"E-pasta adrese"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"Tālrunis"</string>
-    <string name="header_photo_entry" msgid="4438023151411853238">"Fotoattēls"</string>
     <string name="content_description_expand_editor" msgid="1111381475901897470">"Noklikšķiniet, lai izvērstu kontaktpersonu redaktoru."</string>
     <string name="content_description_collapse_editor" msgid="7598061318022977825">"Noklikšķiniet, lai sakļautu kontaktpersonu redaktoru."</string>
     <string name="content_description_directions" msgid="2686791825798189335">"norādes uz atrašanās vietu"</string>
@@ -291,6 +289,8 @@
     <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Mainīt fotoattēlu"</string>
     <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Neizdevās atvērt redaktoru."</string>
     <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Tiks saglabāts šajā kontā:"</string>
+    <!-- no translation found for compact_editor_account_selector_read_only_title (1869435992721760221) -->
+    <skip />
     <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"Pašlaik notiek saglabāšana kontā <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Veiciet dubultskārienu, lai izvēlētos citu kontu."</string>
     <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
       <item quantity="zero">Saistītas kontaktpersonas (<xliff:g id="COUNT">%d</xliff:g>)</item>
@@ -465,22 +465,14 @@
     <string name="chat_jabber" msgid="7561444230307829609">"Tērzēt, izmantojot Jabber"</string>
     <string name="chat" msgid="9025361898797412245">"Tērzēt"</string>
     <string name="description_minus_button" msgid="6908099247930477551">"dzēst"</string>
-    <!-- no translation found for expand_name_fields_description (6883935911480726652) -->
-    <skip />
-    <!-- no translation found for collapse_name_fields_description (4757877385895561556) -->
-    <skip />
-    <!-- no translation found for expand_phonetic_name_fields_description (3865726859582581741) -->
-    <skip />
-    <!-- no translation found for collapse_phonetic_name_fields_description (9102249481855019452) -->
-    <skip />
-    <!-- no translation found for expand_fields_description (8129294181216760037) -->
-    <skip />
-    <!-- no translation found for collapse_fields_description (1884143625854637874) -->
-    <skip />
-    <!-- no translation found for announce_expanded_fields (1075947220478530622) -->
-    <skip />
-    <!-- no translation found for announce_collapsed_fields (6414231530177338704) -->
-    <skip />
+    <string name="expand_name_fields_description" msgid="6883935911480726652">"Izvērst nosaukumu laukus"</string>
+    <string name="collapse_name_fields_description" msgid="4757877385895561556">"Sakļaut nosaukumu laukus"</string>
+    <string name="expand_phonetic_name_fields_description" msgid="3865726859582581741">"Izvērst vārda izrunas laukus"</string>
+    <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Sakļaut vārda izrunas laukus"</string>
+    <string name="expand_fields_description" msgid="8129294181216760037">"Izvērst"</string>
+    <string name="collapse_fields_description" msgid="1884143625854637874">"Sakļaut"</string>
+    <string name="announce_expanded_fields" msgid="1075947220478530622">"Izvērsts"</string>
+    <string name="announce_collapsed_fields" msgid="6414231530177338704">"Sakļauts"</string>
     <string name="list_filter_all_accounts" msgid="8908683398914322369">"Visas kontaktpersonas"</string>
     <string name="list_filter_all_starred" msgid="5031734941601931356">"Atzīmēts ar zvaigznīti"</string>
     <string name="list_filter_customize" msgid="4789963356004169321">"Pielāgot"</string>
@@ -566,7 +558,8 @@
     <string name="share_favorite_contacts" msgid="4280926751003081042">"Kopīgot izlases kontaktpersonas"</string>
     <string name="share_contacts" msgid="8109287987498711664">"Kopīgot visas kontaktpersonas"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"Neizdevās kopīgot kontaktpersonas."</string>
-    <string name="dialog_import_export" msgid="4360648034889921624">"K. pers. imports/eksports"</string>
+    <!-- no translation found for dialog_export (1628001095187741417) -->
+    <skip />
     <string name="dialog_import" msgid="2431698729761448759">"Kontaktpersonu importēšana"</string>
     <string name="share_error" msgid="948429331673358107">"Šo kontaktpersonu nevar kopīgot."</string>
     <string name="no_contact_to_share" msgid="1276397530378323033">"Nav nevienas kopīgojamas kontaktpersonas."</string>
@@ -581,7 +574,10 @@
     <string name="menu_clear_frequents" msgid="7688250191932838833">"Dzēst bieži lietotos kontaktus"</string>
     <string name="menu_select_sim" msgid="3603578201960504010">"Atlasiet SIM karti"</string>
     <string name="menu_accounts" msgid="1424330057450189074">"Pārvaldīt kontus"</string>
-    <string name="menu_import_export" msgid="26217871113229507">"Importēt/eksportēt"</string>
+    <!-- no translation found for menu_import (6107961135813836467) -->
+    <skip />
+    <!-- no translation found for menu_export (2658783911863503902) -->
+    <skip />
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"Bloķētie numuri"</string>
     <string name="contact_status_update_attribution" msgid="752179367353018597">"izmantojot <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g>, izmantojot <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
@@ -616,4 +612,8 @@
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> s"</string>
     <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
     <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> h <xliff:g id="MINUTES_1">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
+    <!-- no translation found for dynamic_shortcut_disabled_message (249939425761315252) -->
+    <skip />
+    <!-- no translation found for dynamic_shortcut_contact_removed_message (6845645831837615899) -->
+    <skip />
 </resources>
diff --git a/res/values-mk-rMK/strings.xml b/res/values-mk-rMK/strings.xml
index 8e30d53..2d3e57e 100644
--- a/res/values-mk-rMK/strings.xml
+++ b/res/values-mk-rMK/strings.xml
@@ -67,6 +67,7 @@
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Препорачани контакти"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Сите контакти"</string>
     <string name="contactsJoinedMessage" msgid="3343535986195643136">"Контактите се поврзани"</string>
+    <string name="contact_deleted_named_toast" msgid="6558941164987421174">"<xliff:g id="NAME">%s</xliff:g> е избришан"</string>
     <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
       <item quantity="one">Контактот е избришан</item>
       <item quantity="other">Контактите се избришани</item>
@@ -113,11 +114,11 @@
     <string name="emptyMainList" msgid="2772242747899664460">"Списокот со контакти е празен"</string>
     <string name="contactSavedToast" msgid="9171862279493213075">"Контактот е зачуван"</string>
     <string name="contactUnlinkedToast" msgid="7122823195786012553">"Контактите се раздвоени"</string>
-    <string name="contactSavedErrorToast" msgid="3207250533172944892">"Не можеа да се зачуваат промените на контактот."</string>
-    <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Не може да се прекине врската со контактот."</string>
-    <string name="contactJoinErrorToast" msgid="3977932531264809035">"Не можеше да се поврзе контактот."</string>
-    <string name="contactGenericErrorToast" msgid="7774911165341591714">"Грешка при зачувување на контактот."</string>
-    <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"Не можеше да се зачуваат промените на фотографијата на контактот."</string>
+    <string name="contactSavedErrorToast" msgid="4827033473908688031">"Не можеше да се зачуваат промените на контактот"</string>
+    <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"Не можеше да се прекине врската со контактот"</string>
+    <string name="contactJoinErrorToast" msgid="5735129234573327701">"Не можеше да се поврзе контактот"</string>
+    <string name="contactGenericErrorToast" msgid="3885457515665783976">"Грешка при зачувување на контактот"</string>
+    <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Не можеше да се зачуваат промените на фотографијата на контактот"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"Етикетата не успеа да се вчита"</string>
     <string name="groupSavedToast" msgid="6491495462357722285">"Етикетата е зачувана"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Етикетата е избришана"</string>
@@ -126,7 +127,7 @@
     <string name="groupUpdatedToast" msgid="3667977658676267687">"Етикетата е ажурирана"</string>
     <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Отстрането од етикетата"</string>
     <string name="groupMembersAddedToast" msgid="4824834898718972768">"Додадено на етикетата"</string>
-    <string name="groupSavedErrorToast" msgid="8121032018490980184">"Промените на етикетата не можеше да се зачуваат."</string>
+    <string name="groupSavedErrorToast" msgid="2355891714292740162">"Не можеше да се зачуваат промените на етикетата"</string>
     <string name="groupExistsErrorMessage" msgid="5196811283836946189">"Етикетата веќе постои"</string>
     <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
       <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> контакт со телефонски број</item>
@@ -147,7 +148,6 @@
     <string name="callAgain" msgid="3197312117049874778">"Повикај повторно"</string>
     <string name="returnCall" msgid="8171961914203617813">"Врати повик"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Додај „<xliff:g id="EMAIL">%s</xliff:g>“ во контакти?"</string>
-    <string name="description_contact_photo" msgid="3387458082667894062">"фотографија за контакт"</string>
     <string name="description_plus_button" msgid="515164827856229880">"плус"</string>
     <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> од <xliff:g id="TOTAL_NUMBER">%s</xliff:g> контакти"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"Имиња на вашите контакти"</string>
@@ -192,7 +192,6 @@
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Датум"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Етикета"</string>
     <string name="change_photo" msgid="8530597935483526383">"Промени"</string>
-    <string name="primary_photo" msgid="8517942231868516999">"Пр. фотографија"</string>
     <string name="description_star" msgid="2605854427360036550">"омилено"</string>
     <string name="edit_contact" msgid="7529281274005689512">"Уреди контакт"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"затвори"</string>
@@ -269,7 +268,6 @@
     <string name="header_name_entry" msgid="1592791008096288306">"Име"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"E-пошта"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"Телефон"</string>
-    <string name="header_photo_entry" msgid="4438023151411853238">"Фотографија"</string>
     <string name="content_description_expand_editor" msgid="1111381475901897470">"Кликнете за да го проширите уредникот за контакти."</string>
     <string name="content_description_collapse_editor" msgid="7598061318022977825">"Кликнете за да го соберете уредникот за контакти."</string>
     <string name="content_description_directions" msgid="2686791825798189335">"насоки до локација"</string>
@@ -284,6 +282,8 @@
     <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Промени фотографија"</string>
     <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Не успеа да го отвори уредникот."</string>
     <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Се зачувува на"</string>
+    <!-- no translation found for compact_editor_account_selector_read_only_title (1869435992721760221) -->
+    <skip />
     <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"Моментално се зачувува на <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Допрете двапати за да изберете друга сметка."</string>
     <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
       <item quantity="one">Поврзан контакт (<xliff:g id="COUNT">%d</xliff:g>)</item>
@@ -454,22 +454,14 @@
     <string name="chat_jabber" msgid="7561444230307829609">"Разговор на Jabber"</string>
     <string name="chat" msgid="9025361898797412245">"Разговор"</string>
     <string name="description_minus_button" msgid="6908099247930477551">"избриши"</string>
-    <!-- no translation found for expand_name_fields_description (6883935911480726652) -->
-    <skip />
-    <!-- no translation found for collapse_name_fields_description (4757877385895561556) -->
-    <skip />
-    <!-- no translation found for expand_phonetic_name_fields_description (3865726859582581741) -->
-    <skip />
-    <!-- no translation found for collapse_phonetic_name_fields_description (9102249481855019452) -->
-    <skip />
-    <!-- no translation found for expand_fields_description (8129294181216760037) -->
-    <skip />
-    <!-- no translation found for collapse_fields_description (1884143625854637874) -->
-    <skip />
-    <!-- no translation found for announce_expanded_fields (1075947220478530622) -->
-    <skip />
-    <!-- no translation found for announce_collapsed_fields (6414231530177338704) -->
-    <skip />
+    <string name="expand_name_fields_description" msgid="6883935911480726652">"Прошири ги полињата за име"</string>
+    <string name="collapse_name_fields_description" msgid="4757877385895561556">"Собери ги полињата за име"</string>
+    <string name="expand_phonetic_name_fields_description" msgid="3865726859582581741">"Прошири ги полињата за фонетско име"</string>
+    <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Собери ги полињата за фонетско име"</string>
+    <string name="expand_fields_description" msgid="8129294181216760037">"Прошири"</string>
+    <string name="collapse_fields_description" msgid="1884143625854637874">"Собери"</string>
+    <string name="announce_expanded_fields" msgid="1075947220478530622">"Проширени"</string>
+    <string name="announce_collapsed_fields" msgid="6414231530177338704">"Собрани"</string>
     <string name="list_filter_all_accounts" msgid="8908683398914322369">"Сите контакти"</string>
     <string name="list_filter_all_starred" msgid="5031734941601931356">"Со ѕвезда"</string>
     <string name="list_filter_customize" msgid="4789963356004169321">"Приспособи"</string>
@@ -555,7 +547,8 @@
     <string name="share_favorite_contacts" msgid="4280926751003081042">"Споделете омилени контакти"</string>
     <string name="share_contacts" msgid="8109287987498711664">"Споделете ги сите контакти"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"Споделувањето на контактите не успеа."</string>
-    <string name="dialog_import_export" msgid="4360648034889921624">"Извршете увоз/извоз на контакти"</string>
+    <!-- no translation found for dialog_export (1628001095187741417) -->
+    <skip />
     <string name="dialog_import" msgid="2431698729761448759">"Извршете увоз на контакти"</string>
     <string name="share_error" msgid="948429331673358107">"Контактов не може да се сподели."</string>
     <string name="no_contact_to_share" msgid="1276397530378323033">"Нема контакти за споделување."</string>
@@ -570,7 +563,10 @@
     <string name="menu_clear_frequents" msgid="7688250191932838833">"Исчисти чести"</string>
     <string name="menu_select_sim" msgid="3603578201960504010">"Изберете СИМ-картичка"</string>
     <string name="menu_accounts" msgid="1424330057450189074">"Управувај со сметки"</string>
-    <string name="menu_import_export" msgid="26217871113229507">"Изврши увоз/извоз"</string>
+    <!-- no translation found for menu_import (6107961135813836467) -->
+    <skip />
+    <!-- no translation found for menu_export (2658783911863503902) -->
+    <skip />
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"Блокирани броеви"</string>
     <string name="contact_status_update_attribution" msgid="752179367353018597">"од <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"на <xliff:g id="DATE">%1$s</xliff:g> од <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
@@ -604,4 +600,8 @@
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> сек."</string>
     <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> мин. <xliff:g id="SECONDS">%s</xliff:g> сек."</string>
     <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> час <xliff:g id="MINUTES_1">%s</xliff:g> мин. <xliff:g id="SECONDS">%s</xliff:g> сек."</string>
+    <!-- no translation found for dynamic_shortcut_disabled_message (249939425761315252) -->
+    <skip />
+    <!-- no translation found for dynamic_shortcut_contact_removed_message (6845645831837615899) -->
+    <skip />
 </resources>
diff --git a/res/values-ml-rIN/strings.xml b/res/values-ml-rIN/strings.xml
index 2c560e0..e65cfd9 100644
--- a/res/values-ml-rIN/strings.xml
+++ b/res/values-ml-rIN/strings.xml
@@ -67,6 +67,7 @@
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"നിര്‍ദ്ദേശിച്ച കോണ്‍ടാക്റ്റുകള്‍"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"എല്ലാ കോൺടാക്റ്റുകളും"</string>
     <string name="contactsJoinedMessage" msgid="3343535986195643136">"ലിങ്കുചെയ്ത കോൺടാക്റ്റുകൾ"</string>
+    <string name="contact_deleted_named_toast" msgid="6558941164987421174">"<xliff:g id="NAME">%s</xliff:g> എന്ന കോൺടാക്റ്റിനെ ഇല്ലാതാക്കി"</string>
     <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
       <item quantity="other">കോൺടാക്റ്റുകൾ ഇല്ലാതാക്കി</item>
       <item quantity="one">കോൺടാക്റ്റ് ഇല്ലാതാക്കി</item>
@@ -113,11 +114,11 @@
     <string name="emptyMainList" msgid="2772242747899664460">"നിങ്ങളുടെ കോൺടാക്‌റ്റ് ലിസ്‌റ്റ് ശൂന്യമാണ്"</string>
     <string name="contactSavedToast" msgid="9171862279493213075">"കോൺടാക്റ്റ് സംരക്ഷിച്ചു"</string>
     <string name="contactUnlinkedToast" msgid="7122823195786012553">"കോൺടാക്റ്റുകൾ അൺലിങ്കുചെയ്തു"</string>
-    <string name="contactSavedErrorToast" msgid="3207250533172944892">"കോൺടാക്റ്റ് മാറ്റങ്ങൾ സംരക്ഷിക്കാനായില്ല."</string>
-    <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"കോൺടാക്റ്റ് അൺലിങ്കുചെയ്യാനായില്ല."</string>
-    <string name="contactJoinErrorToast" msgid="3977932531264809035">"കോൺടാക്റ്റ് ലിങ്കുചെയ്യാൻ കഴിഞ്ഞില്ല."</string>
-    <string name="contactGenericErrorToast" msgid="7774911165341591714">"കോൺടാക്റ്റ് സംരക്ഷിക്കുന്നതില്‍ പിശക്"</string>
-    <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"കോൺടാക്റ്റ് ഫോട്ടോ മാറ്റങ്ങൾ സംരക്ഷിക്കാനായില്ല."</string>
+    <string name="contactSavedErrorToast" msgid="4827033473908688031">"കോൺടാക്റ്റ് മാറ്റങ്ങൾ സംരക്ഷിക്കാനായില്ല"</string>
+    <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"കോൺടാക്റ്റ് അൺലിങ്കുചെയ്യാനായില്ല"</string>
+    <string name="contactJoinErrorToast" msgid="5735129234573327701">"കോൺടാക്റ്റ് ലിങ്കുചെയ്യാനായില്ല"</string>
+    <string name="contactGenericErrorToast" msgid="3885457515665783976">"കോൺടാക്റ്റ് സംരക്ഷിക്കുന്നതില്‍ പിശക്"</string>
+    <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"കോൺടാക്റ്റ് ഫോട്ടോയിലെ മാറ്റങ്ങൾ സംരക്ഷിക്കാനായില്ല"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"ലേബൽ ലോഡുചെയ്യുന്നത് പരാജയപ്പെട്ടു"</string>
     <string name="groupSavedToast" msgid="6491495462357722285">"ലേബൽ സംരക്ഷിച്ചു"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"ലേബൽ ഇല്ലാതാക്കി"</string>
@@ -126,7 +127,7 @@
     <string name="groupUpdatedToast" msgid="3667977658676267687">"ലേബൽ അപ്ഡേറ്റുചെയ്‌തു"</string>
     <string name="groupMembersRemovedToast" msgid="3510563559799376603">"ലേബലിൽ നിന്ന് നീക്കംചെയ്‌തു"</string>
     <string name="groupMembersAddedToast" msgid="4824834898718972768">"ലേബലിൽ ചേർത്തു"</string>
-    <string name="groupSavedErrorToast" msgid="8121032018490980184">"ലേബൽ മാറ്റങ്ങൾ സംരക്ഷിക്കാനായില്ല."</string>
+    <string name="groupSavedErrorToast" msgid="2355891714292740162">"ലേബൽ മാറ്റങ്ങൾ സംരക്ഷിക്കാനായില്ല"</string>
     <string name="groupExistsErrorMessage" msgid="5196811283836946189">"ആ ലേബൽ നിലവിലുണ്ട്"</string>
     <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
       <item quantity="other">ഫോൺ നമ്പറുള്ള <xliff:g id="COUNT">%d</xliff:g> കോൺടാക്‌റ്റുകൾ</item>
@@ -147,7 +148,6 @@
     <string name="callAgain" msgid="3197312117049874778">"വീണ്ടും വിളിക്കുക"</string>
     <string name="returnCall" msgid="8171961914203617813">"കോളിലേക്ക് മടങ്ങുക"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"കോൺടാക്റ്റുകളിലേക്ക് \"<xliff:g id="EMAIL">%s</xliff:g>\" ചേർക്കണോ?"</string>
-    <string name="description_contact_photo" msgid="3387458082667894062">"കോൺടാക്‌‌റ്റിന്റെ ഫോട്ടോ"</string>
     <string name="description_plus_button" msgid="515164827856229880">"പ്ലസ്"</string>
     <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> / <xliff:g id="TOTAL_NUMBER">%s</xliff:g> കോൺടാക്റ്റുകൾ"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"നിങ്ങളുടെ കോൺടാക്റ്റുകളുടെ പേരുകൾ"</string>
@@ -192,7 +192,6 @@
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"തീയതി"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"ലേബൽ"</string>
     <string name="change_photo" msgid="8530597935483526383">"മാറ്റുക"</string>
-    <string name="primary_photo" msgid="8517942231868516999">"പ്രാഥമിക ഫോട്ടോ"</string>
     <string name="description_star" msgid="2605854427360036550">"പ്രിയപ്പെട്ടതാക്കുക"</string>
     <string name="edit_contact" msgid="7529281274005689512">"കോൺടാ‌ക്‌റ്റ് തിരുത്തുക"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"അടയ്‌ക്കുക"</string>
@@ -269,7 +268,6 @@
     <string name="header_name_entry" msgid="1592791008096288306">"പേര്"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"ഇമെയിൽ"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"ഫോണ്‍"</string>
-    <string name="header_photo_entry" msgid="4438023151411853238">"ഫോട്ടോ"</string>
     <string name="content_description_expand_editor" msgid="1111381475901897470">"കോൺടാക്‌റ്റ് എഡിറ്റർ വിപുലീകരിക്കാൻ ക്ലിക്കുചെയ്യുക."</string>
     <string name="content_description_collapse_editor" msgid="7598061318022977825">"കോൺടാക്‌റ്റ് എഡിറ്റർ ചുരുക്കാൻ ക്ലിക്കുചെയ്യുക."</string>
     <string name="content_description_directions" msgid="2686791825798189335">"ലൊക്കേഷനിലേക്കുള്ള വഴികൾ"</string>
@@ -284,6 +282,8 @@
     <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"ഫോട്ടോ മാറ്റുക"</string>
     <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"എഡിറ്റർ തുറക്കുന്നത് പരാജയപ്പെട്ടു."</string>
     <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"ഇതിലേക്ക് സംരക്ഷിക്കുന്നു"</string>
+    <!-- no translation found for compact_editor_account_selector_read_only_title (1869435992721760221) -->
+    <skip />
     <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"നിലവിൽ <xliff:g id="ACCOUNT_NAME">%s</xliff:g> എന്ന അക്കൗണ്ടിലേക്ക് സംരക്ഷിക്കുന്നു. മറ്റൊരു അക്കൗണ്ടിലേക്ക് സംരക്ഷിക്കാൻ രണ്ടുതവണ ടാപ്പുചെയ്യുക."</string>
     <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
       <item quantity="other">ലിങ്കുചെയ്ത കോൺടാക്റ്റുകൾ (<xliff:g id="COUNT">%d</xliff:g>)</item>
@@ -454,22 +454,14 @@
     <string name="chat_jabber" msgid="7561444230307829609">"Jabber ഉപയോഗിച്ച് ചാറ്റുചെയ്യുക"</string>
     <string name="chat" msgid="9025361898797412245">"ചാറ്റുചെയ്യുക"</string>
     <string name="description_minus_button" msgid="6908099247930477551">"ഇല്ലാതാക്കുക"</string>
-    <!-- no translation found for expand_name_fields_description (6883935911480726652) -->
-    <skip />
-    <!-- no translation found for collapse_name_fields_description (4757877385895561556) -->
-    <skip />
-    <!-- no translation found for expand_phonetic_name_fields_description (3865726859582581741) -->
-    <skip />
-    <!-- no translation found for collapse_phonetic_name_fields_description (9102249481855019452) -->
-    <skip />
-    <!-- no translation found for expand_fields_description (8129294181216760037) -->
-    <skip />
-    <!-- no translation found for collapse_fields_description (1884143625854637874) -->
-    <skip />
-    <!-- no translation found for announce_expanded_fields (1075947220478530622) -->
-    <skip />
-    <!-- no translation found for announce_collapsed_fields (6414231530177338704) -->
-    <skip />
+    <string name="expand_name_fields_description" msgid="6883935911480726652">"പേരിന്റെ ഫീൽഡുകൾ വികസിപ്പിക്കുക"</string>
+    <string name="collapse_name_fields_description" msgid="4757877385895561556">"പേരിന്റെ ഫീൽഡുകൾ ചുരുക്കുക"</string>
+    <string name="expand_phonetic_name_fields_description" msgid="3865726859582581741">"ഫൊണറ്റിക് പേരിന്റെ ഫീൽഡുകൾ വികസിപ്പിക്കുക"</string>
+    <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"ഫൊണറ്റിക് പേരിന്റെ ഫീൽഡുകൾ ചുരുക്കുക"</string>
+    <string name="expand_fields_description" msgid="8129294181216760037">"വികസിപ്പിക്കുക"</string>
+    <string name="collapse_fields_description" msgid="1884143625854637874">"ചുരുക്കുക"</string>
+    <string name="announce_expanded_fields" msgid="1075947220478530622">"വികസിപ്പിച്ചു"</string>
+    <string name="announce_collapsed_fields" msgid="6414231530177338704">"ചുരുക്കി"</string>
     <string name="list_filter_all_accounts" msgid="8908683398914322369">"എല്ലാ കോൺടാക്റ്റുകളും"</string>
     <string name="list_filter_all_starred" msgid="5031734941601931356">"നക്ഷത്രമിട്ടവ"</string>
     <string name="list_filter_customize" msgid="4789963356004169321">"ഇഷ്‌ടാനുസൃതമാക്കുക"</string>
@@ -555,7 +547,8 @@
     <string name="share_favorite_contacts" msgid="4280926751003081042">"പ്രിയപ്പെട്ട കോൺടാക്റ്റുകൾ പങ്കിടുക"</string>
     <string name="share_contacts" msgid="8109287987498711664">"എല്ലാ കോൺടാക്റ്റുകളും പങ്കിടുക"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"കോൺടാക്റ്റുകൾ പങ്കിടുന്നത് പരാജയം."</string>
-    <string name="dialog_import_export" msgid="4360648034889921624">"കോൺടാക്റ്റുകൾ ഇമ്പോർട്ടുചെയ്യുക/എക്‌സ്പോർട്ടുചെയ്യുക"</string>
+    <!-- no translation found for dialog_export (1628001095187741417) -->
+    <skip />
     <string name="dialog_import" msgid="2431698729761448759">"കോൺടാക്റ്റുകൾ ഇമ്പോർട്ടുചെയ്യുക"</string>
     <string name="share_error" msgid="948429331673358107">"ഈ കോൺടാക്റ്റ് പങ്കിടാനാകില്ല."</string>
     <string name="no_contact_to_share" msgid="1276397530378323033">"പങ്കിടാൻ കോൺടാക്റ്റുകളൊന്നും ഇല്ല."</string>
@@ -570,7 +563,10 @@
     <string name="menu_clear_frequents" msgid="7688250191932838833">"സ്ഥിരംവിളിക്കുന്നവരെ മായ്‌ക്കൂ"</string>
     <string name="menu_select_sim" msgid="3603578201960504010">"സിം കാർഡ് തിരഞ്ഞെടുക്കുക"</string>
     <string name="menu_accounts" msgid="1424330057450189074">"മാനേജുചെയ്യുക"</string>
-    <string name="menu_import_export" msgid="26217871113229507">"ഇമ്പോർട്ടുചെയ്യുക/എക്‌സ്‌പോർട്ടുചെയ്യുക"</string>
+    <!-- no translation found for menu_import (6107961135813836467) -->
+    <skip />
+    <!-- no translation found for menu_export (2658783911863503902) -->
+    <skip />
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"ബ്ലോക്കുചെയ്ത നമ്പറുകൾ"</string>
     <string name="contact_status_update_attribution" msgid="752179367353018597">"<xliff:g id="SOURCE">%1$s</xliff:g> വഴി"</string>
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="SOURCE">%2$s</xliff:g> വഴി <xliff:g id="DATE">%1$s</xliff:g>"</string>
@@ -604,4 +600,8 @@
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> സെ."</string>
     <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> മി <xliff:g id="SECONDS">%s</xliff:g> സെ"</string>
     <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> മണിക്കൂർ <xliff:g id="MINUTES_1">%s</xliff:g> മിനിറ്റ് <xliff:g id="SECONDS">%s</xliff:g> സെക്കൻഡ്"</string>
+    <!-- no translation found for dynamic_shortcut_disabled_message (249939425761315252) -->
+    <skip />
+    <!-- no translation found for dynamic_shortcut_contact_removed_message (6845645831837615899) -->
+    <skip />
 </resources>
diff --git a/res/values-mn-rMN/strings.xml b/res/values-mn-rMN/strings.xml
index a65dd3a..746e7df 100644
--- a/res/values-mn-rMN/strings.xml
+++ b/res/values-mn-rMN/strings.xml
@@ -67,6 +67,7 @@
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Санал болгосон харилцагчид"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Бүх харилцагчид"</string>
     <string name="contactsJoinedMessage" msgid="3343535986195643136">"Холбосон харилцагчид"</string>
+    <string name="contact_deleted_named_toast" msgid="6558941164987421174">"<xliff:g id="NAME">%s</xliff:g>-г устгасан"</string>
     <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
       <item quantity="other">Харилцагчийг устгасан</item>
       <item quantity="one">Харилцагчийг устгасан</item>
@@ -113,11 +114,11 @@
     <string name="emptyMainList" msgid="2772242747899664460">"Таны харилцагчдын жагсаалт хоосон байна"</string>
     <string name="contactSavedToast" msgid="9171862279493213075">"Харилцагчийг хадгалсан"</string>
     <string name="contactUnlinkedToast" msgid="7122823195786012553">"Харилцагчийг салгасан"</string>
-    <string name="contactSavedErrorToast" msgid="3207250533172944892">"Харилцагчийн өөрчлөлтүүдийг хадгалж чадсангүй."</string>
-    <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Харилцагчийг салгаж чадсангүй."</string>
-    <string name="contactJoinErrorToast" msgid="3977932531264809035">"Харилцагчийг холбож чадсангүй."</string>
-    <string name="contactGenericErrorToast" msgid="7774911165341591714">"Харилцагчийн хаягийг хадгалахад алдаа гарлаа."</string>
-    <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"Харилцагчийн зургийн өөрчлөлтийг хадгалж чадсангүй."</string>
+    <string name="contactSavedErrorToast" msgid="4827033473908688031">"Харилцагчийн өөрчлөлтүүдийг хадгалж чадсангүй"</string>
+    <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"Харилцагчийг салгаж чадсангүй"</string>
+    <string name="contactJoinErrorToast" msgid="5735129234573327701">"Харилцагчийг холбож чадсангүй"</string>
+    <string name="contactGenericErrorToast" msgid="3885457515665783976">"Харилцагчийг хадгалахад алдаа гарсан"</string>
+    <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Харилцагчийн зургийн өөрчлөлтийг хадгалж чадсангүй"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"Шошгыг ачаалж чадсангүй"</string>
     <string name="groupSavedToast" msgid="6491495462357722285">"Шошгыг хадгалсан"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Шошгыг устгасан"</string>
@@ -126,7 +127,7 @@
     <string name="groupUpdatedToast" msgid="3667977658676267687">"Шошгыг шинэчилсэн"</string>
     <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Шошгоос хассан"</string>
     <string name="groupMembersAddedToast" msgid="4824834898718972768">"Шошгонд нэмсэн"</string>
-    <string name="groupSavedErrorToast" msgid="8121032018490980184">"Шошгын өөрчлөлтийг хадгалж чадсангүй."</string>
+    <string name="groupSavedErrorToast" msgid="2355891714292740162">"Шошгын өөрчлөлтийг хадгалж чадсангүй"</string>
     <string name="groupExistsErrorMessage" msgid="5196811283836946189">"Энэ шошго байна"</string>
     <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
       <item quantity="other">Утасны дугаар бүхий <xliff:g id="COUNT">%d</xliff:g> хаяг байна</item>
@@ -147,7 +148,6 @@
     <string name="callAgain" msgid="3197312117049874778">"Дахин залгана уу"</string>
     <string name="returnCall" msgid="8171961914203617813">"Буцааж залгах"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"\"<xliff:g id="EMAIL">%s</xliff:g>\"-г харилцагчдад нэмэх үү?"</string>
-    <string name="description_contact_photo" msgid="3387458082667894062">"харилцагчийн зураг"</string>
     <string name="description_plus_button" msgid="515164827856229880">"нэмэх"</string>
     <string name="exporting_contact_list_progress" msgid="560522409559101193">"нийт <xliff:g id="TOTAL_NUMBER">%s</xliff:g> харилцагчдын <xliff:g id="CURRENT_NUMBER">%s</xliff:g>"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"Таны харилцагчдын нэрс"</string>
@@ -192,7 +192,6 @@
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Огноо"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Шошго"</string>
     <string name="change_photo" msgid="8530597935483526383">"Солих"</string>
-    <string name="primary_photo" msgid="8517942231868516999">"Ерөнхий зураг"</string>
     <string name="description_star" msgid="2605854427360036550">"дуртай"</string>
     <string name="edit_contact" msgid="7529281274005689512">"Харилцагчийг засварлах"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"хаах"</string>
@@ -269,7 +268,6 @@
     <string name="header_name_entry" msgid="1592791008096288306">"Нэр"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"Имэйл"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"Утас"</string>
-    <string name="header_photo_entry" msgid="4438023151411853238">"Зураг"</string>
     <string name="content_description_expand_editor" msgid="1111381475901897470">"Харилцагчдын засварлагчийг дэлгэхийг хүсвэл дарна уу."</string>
     <string name="content_description_collapse_editor" msgid="7598061318022977825">"Харилцагчдын засварлагчийг буулгахыг хүсвэл дарна уу."</string>
     <string name="content_description_directions" msgid="2686791825798189335">"байршил руу очих чиглэл"</string>
@@ -284,6 +282,8 @@
     <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Зураг солих"</string>
     <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Засварлагчийг нээж чадсангүй."</string>
     <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Дараахад хадгалж байна"</string>
+    <!-- no translation found for compact_editor_account_selector_read_only_title (1869435992721760221) -->
+    <skip />
     <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"Одоогоор <xliff:g id="ACCOUNT_NAME">%s</xliff:g>-д хадгалж байна. Өөр бүртгэл сонгохын тулд хоёр товшино уу."</string>
     <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
       <item quantity="other">Холбосон харилцагч (<xliff:g id="COUNT">%d</xliff:g>)</item>
@@ -454,22 +454,14 @@
     <string name="chat_jabber" msgid="7561444230307829609">"Jabber ашиглан чатлах"</string>
     <string name="chat" msgid="9025361898797412245">"Чат"</string>
     <string name="description_minus_button" msgid="6908099247930477551">"устгах"</string>
-    <!-- no translation found for expand_name_fields_description (6883935911480726652) -->
-    <skip />
-    <!-- no translation found for collapse_name_fields_description (4757877385895561556) -->
-    <skip />
-    <!-- no translation found for expand_phonetic_name_fields_description (3865726859582581741) -->
-    <skip />
-    <!-- no translation found for collapse_phonetic_name_fields_description (9102249481855019452) -->
-    <skip />
-    <!-- no translation found for expand_fields_description (8129294181216760037) -->
-    <skip />
-    <!-- no translation found for collapse_fields_description (1884143625854637874) -->
-    <skip />
-    <!-- no translation found for announce_expanded_fields (1075947220478530622) -->
-    <skip />
-    <!-- no translation found for announce_collapsed_fields (6414231530177338704) -->
-    <skip />
+    <string name="expand_name_fields_description" msgid="6883935911480726652">"Нэрийн талбарыг дэлгэх"</string>
+    <string name="collapse_name_fields_description" msgid="4757877385895561556">"Нэрийн талбарыг хумих"</string>
+    <string name="expand_phonetic_name_fields_description" msgid="3865726859582581741">"Галиглах нэрийн талбарыг дэлгэх"</string>
+    <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Галиглах нэрийн талбарыг хумих"</string>
+    <string name="expand_fields_description" msgid="8129294181216760037">"Дэлгэх"</string>
+    <string name="collapse_fields_description" msgid="1884143625854637874">"Хумих"</string>
+    <string name="announce_expanded_fields" msgid="1075947220478530622">"Дэлгэсэн"</string>
+    <string name="announce_collapsed_fields" msgid="6414231530177338704">"Хумисан"</string>
     <string name="list_filter_all_accounts" msgid="8908683398914322369">"Бүх харилцагчид"</string>
     <string name="list_filter_all_starred" msgid="5031734941601931356">"Одтой"</string>
     <string name="list_filter_customize" msgid="4789963356004169321">"Тохируулах"</string>
@@ -557,7 +549,8 @@
     <string name="share_favorite_contacts" msgid="4280926751003081042">"Дуртай харилцагчдаа хуваалцах"</string>
     <string name="share_contacts" msgid="8109287987498711664">"Бүх харилцагчдыг хуваалцах"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"Харилцагчдыг хуваалцаж чадсангүй."</string>
-    <string name="dialog_import_export" msgid="4360648034889921624">"Харилцагч импорт/экспорт"</string>
+    <!-- no translation found for dialog_export (1628001095187741417) -->
+    <skip />
     <string name="dialog_import" msgid="2431698729761448759">"Харилцагч импортлох"</string>
     <string name="share_error" msgid="948429331673358107">"Энэ харилцагчийг хуваалцах боломжгүй."</string>
     <string name="no_contact_to_share" msgid="1276397530378323033">"Хуваалцах харилцагчид байхгүй байна."</string>
@@ -572,7 +565,10 @@
     <string name="menu_clear_frequents" msgid="7688250191932838833">"Байнга харилцсаныг арилгах"</string>
     <string name="menu_select_sim" msgid="3603578201960504010">"SIM карт сонгоно уу"</string>
     <string name="menu_accounts" msgid="1424330057450189074">"Бүртгэлийг удирдах"</string>
-    <string name="menu_import_export" msgid="26217871113229507">"Импорт/экспорт"</string>
+    <!-- no translation found for menu_import (6107961135813836467) -->
+    <skip />
+    <!-- no translation found for menu_export (2658783911863503902) -->
+    <skip />
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"Блоклосон дугаар"</string>
     <string name="contact_status_update_attribution" msgid="752179367353018597">"<xliff:g id="SOURCE">%1$s</xliff:g>-р"</string>
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> <xliff:g id="SOURCE">%2$s</xliff:g>-р"</string>
@@ -606,4 +602,8 @@
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> сек"</string>
     <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> мин <xliff:g id="SECONDS">%s</xliff:g> сек"</string>
     <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> цаг <xliff:g id="MINUTES_1">%s</xliff:g> мин <xliff:g id="SECONDS">%s</xliff:g> сек"</string>
+    <!-- no translation found for dynamic_shortcut_disabled_message (249939425761315252) -->
+    <skip />
+    <!-- no translation found for dynamic_shortcut_contact_removed_message (6845645831837615899) -->
+    <skip />
 </resources>
diff --git a/res/values-mr-rIN/strings.xml b/res/values-mr-rIN/strings.xml
index dac1fa4..b79b805 100644
--- a/res/values-mr-rIN/strings.xml
+++ b/res/values-mr-rIN/strings.xml
@@ -67,6 +67,7 @@
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"सूचित संपर्क"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"सर्व संपर्क"</string>
     <string name="contactsJoinedMessage" msgid="3343535986195643136">"संपर्कांचा दुवा साधला"</string>
+    <string name="contact_deleted_named_toast" msgid="6558941164987421174">"<xliff:g id="NAME">%s</xliff:g> हटविले"</string>
     <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
       <item quantity="one">संपर्क हटविला</item>
       <item quantity="other">संपर्क हटविले</item>
@@ -113,11 +114,11 @@
     <string name="emptyMainList" msgid="2772242747899664460">"आपली संपर्क सूची रिक्त आहे"</string>
     <string name="contactSavedToast" msgid="9171862279493213075">"संपर्क जतन केला"</string>
     <string name="contactUnlinkedToast" msgid="7122823195786012553">"संपर्कांचा दुवा रद्द केला"</string>
-    <string name="contactSavedErrorToast" msgid="3207250533172944892">"संपर्क बदल जतन करू शकलो नाही."</string>
-    <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"संपर्काचा दुवा रद्द करणे शक्य झाले नाही."</string>
-    <string name="contactJoinErrorToast" msgid="3977932531264809035">"संपर्काचा दुवा जोडणे शक्य झाले नाही."</string>
-    <string name="contactGenericErrorToast" msgid="7774911165341591714">"संपर्क जतन करताना त्रुटी."</string>
-    <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"संपर्क फोटो बदल जतन करणे शक्य झाले नाही."</string>
+    <string name="contactSavedErrorToast" msgid="4827033473908688031">"संपर्क बदल जतन करणे शक्य झाले नाही"</string>
+    <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"संपर्काचा दुवा रद्द करणे शक्य झाले नाही"</string>
+    <string name="contactJoinErrorToast" msgid="5735129234573327701">"संपर्काचा दुवा जोडणे शक्य झाले नाही"</string>
+    <string name="contactGenericErrorToast" msgid="3885457515665783976">"संपर्क जतन करताना त्रुटी"</string>
+    <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"संपर्क फोटो बदल जतन करणे शक्य झाले नाही"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"लेबल लोड करण्यात अयशस्वी झाले"</string>
     <string name="groupSavedToast" msgid="6491495462357722285">"लेबल जतन केले"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"लेबल हटविले"</string>
@@ -126,7 +127,7 @@
     <string name="groupUpdatedToast" msgid="3667977658676267687">"लेबल अद्यतनित केले"</string>
     <string name="groupMembersRemovedToast" msgid="3510563559799376603">"लेबल मधून काढले"</string>
     <string name="groupMembersAddedToast" msgid="4824834898718972768">"लेबलमध्ये जोडले"</string>
-    <string name="groupSavedErrorToast" msgid="8121032018490980184">"लेबल बदल जतन करणे शक्य झाले नाही."</string>
+    <string name="groupSavedErrorToast" msgid="2355891714292740162">"लेबल बदल जतन करणे शक्य झाले नाही"</string>
     <string name="groupExistsErrorMessage" msgid="5196811283836946189">"ते लेबल आधीपासून अस्तित्वात आहे"</string>
     <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
       <item quantity="one">फोन नंबरसह <xliff:g id="COUNT">%d</xliff:g> संपर्क</item>
@@ -147,7 +148,6 @@
     <string name="callAgain" msgid="3197312117049874778">"पुन्हा कॉल करा"</string>
     <string name="returnCall" msgid="8171961914203617813">"उलट कॉल करा"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"संपर्कांमध्ये \"<xliff:g id="EMAIL">%s</xliff:g>\" जोडायचे?"</string>
-    <string name="description_contact_photo" msgid="3387458082667894062">"संपर्क फोटो"</string>
     <string name="description_plus_button" msgid="515164827856229880">"अधिक"</string>
     <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="TOTAL_NUMBER">%s</xliff:g> पैकी <xliff:g id="CURRENT_NUMBER">%s</xliff:g> संपर्क"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"आपल्या संपर्कांची नावे"</string>
@@ -192,7 +192,6 @@
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"तारीख"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"लेबल"</string>
     <string name="change_photo" msgid="8530597935483526383">"बदला"</string>
-    <string name="primary_photo" msgid="8517942231868516999">"प्राथमिक फोटो"</string>
     <string name="description_star" msgid="2605854427360036550">"आवडते"</string>
     <string name="edit_contact" msgid="7529281274005689512">"संपर्क संपादित करा"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"बंद करा"</string>
@@ -269,7 +268,6 @@
     <string name="header_name_entry" msgid="1592791008096288306">"नाव"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"ईमेल करा"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"फोन"</string>
-    <string name="header_photo_entry" msgid="4438023151411853238">"फोटो"</string>
     <string name="content_description_expand_editor" msgid="1111381475901897470">"संपर्क संपादक विस्तृत करण्‍यासाठी क्लिक करा."</string>
     <string name="content_description_collapse_editor" msgid="7598061318022977825">"संपर्क संपादक संकुचित करण्‍यासाठी क्लिक करा."</string>
     <string name="content_description_directions" msgid="2686791825798189335">"स्थानाचे दिशानिर्देश"</string>
@@ -284,6 +282,8 @@
     <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"फोटो बदला"</string>
     <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"संपादक उघडण्यात अयशस्वी."</string>
     <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"यावर जतन करीत आहे"</string>
+    <!-- no translation found for compact_editor_account_selector_read_only_title (1869435992721760221) -->
+    <skip />
     <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"सध्या <xliff:g id="ACCOUNT_NAME">%s</xliff:g> मध्ये जतन करीत आहे. भिन्न खाते निवडण्यासाठी दोनदा टॅप करा."</string>
     <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
       <item quantity="one">दुवा जोडलेला संपर्क (<xliff:g id="COUNT">%d</xliff:g>)</item>
@@ -454,22 +454,14 @@
     <string name="chat_jabber" msgid="7561444230307829609">"Jabber चा वापर करून चॅट करा"</string>
     <string name="chat" msgid="9025361898797412245">"चॅट करा"</string>
     <string name="description_minus_button" msgid="6908099247930477551">"हटवा"</string>
-    <!-- no translation found for expand_name_fields_description (6883935911480726652) -->
-    <skip />
-    <!-- no translation found for collapse_name_fields_description (4757877385895561556) -->
-    <skip />
-    <!-- no translation found for expand_phonetic_name_fields_description (3865726859582581741) -->
-    <skip />
-    <!-- no translation found for collapse_phonetic_name_fields_description (9102249481855019452) -->
-    <skip />
-    <!-- no translation found for expand_fields_description (8129294181216760037) -->
-    <skip />
-    <!-- no translation found for collapse_fields_description (1884143625854637874) -->
-    <skip />
-    <!-- no translation found for announce_expanded_fields (1075947220478530622) -->
-    <skip />
-    <!-- no translation found for announce_collapsed_fields (6414231530177338704) -->
-    <skip />
+    <string name="expand_name_fields_description" msgid="6883935911480726652">"नाव फील्ड विस्तृत करा"</string>
+    <string name="collapse_name_fields_description" msgid="4757877385895561556">"नाव फील्ड संकुचित करा"</string>
+    <string name="expand_phonetic_name_fields_description" msgid="3865726859582581741">"ध्वन्यात्मक नाव फील्ड विस्तृत करा"</string>
+    <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"ध्वन्यात्मक नाव फील्ड संकुचित करा"</string>
+    <string name="expand_fields_description" msgid="8129294181216760037">"विस्तृत करा"</string>
+    <string name="collapse_fields_description" msgid="1884143625854637874">"संकुचित करा"</string>
+    <string name="announce_expanded_fields" msgid="1075947220478530622">"विस्तृत केले"</string>
+    <string name="announce_collapsed_fields" msgid="6414231530177338704">"संकुचित केले"</string>
     <string name="list_filter_all_accounts" msgid="8908683398914322369">"सर्व संपर्क"</string>
     <string name="list_filter_all_starred" msgid="5031734941601931356">"तारांकित"</string>
     <string name="list_filter_customize" msgid="4789963356004169321">"सानुकूलिकरण करा"</string>
@@ -555,7 +547,8 @@
     <string name="share_favorite_contacts" msgid="4280926751003081042">"आवडते संपर्क सामायिक करा"</string>
     <string name="share_contacts" msgid="8109287987498711664">"सर्व संपर्क सामायिक करा"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"संपर्क सामायिक करण्यात अयशस्वी झाले."</string>
-    <string name="dialog_import_export" msgid="4360648034889921624">"संपर्क आयात/निर्यात कराcts"</string>
+    <!-- no translation found for dialog_export (1628001095187741417) -->
+    <skip />
     <string name="dialog_import" msgid="2431698729761448759">"संपर्क आयात करा"</string>
     <string name="share_error" msgid="948429331673358107">"हा संपर्क सामायिक केला जाऊ शकत नाही."</string>
     <string name="no_contact_to_share" msgid="1276397530378323033">"सामायिक करण्यासाठी कोणतेही संपर्क नाहीत."</string>
@@ -570,7 +563,10 @@
     <string name="menu_clear_frequents" msgid="7688250191932838833">"वारंवारता साफ करा"</string>
     <string name="menu_select_sim" msgid="3603578201960504010">"सिम कार्ड निवडा"</string>
     <string name="menu_accounts" msgid="1424330057450189074">"खाती व्यवस्थापित करा"</string>
-    <string name="menu_import_export" msgid="26217871113229507">"आयात/निर्यात"</string>
+    <!-- no translation found for menu_import (6107961135813836467) -->
+    <skip />
+    <!-- no translation found for menu_export (2658783911863503902) -->
+    <skip />
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"अवरोधित केलेले नंबर"</string>
     <string name="contact_status_update_attribution" msgid="752179367353018597">"<xliff:g id="SOURCE">%1$s</xliff:g> द्वारे"</string>
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="SOURCE">%2$s</xliff:g> द्वारे <xliff:g id="DATE">%1$s</xliff:g>"</string>
@@ -604,4 +600,8 @@
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> सेकंद"</string>
     <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> मि. <xliff:g id="SECONDS">%s</xliff:g>सेकंद"</string>
     <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> ता. <xliff:g id="MINUTES_1">%s</xliff:g> मि. <xliff:g id="SECONDS">%s</xliff:g> सेकंद"</string>
+    <!-- no translation found for dynamic_shortcut_disabled_message (249939425761315252) -->
+    <skip />
+    <!-- no translation found for dynamic_shortcut_contact_removed_message (6845645831837615899) -->
+    <skip />
 </resources>
diff --git a/res/values-ms-rMY/strings.xml b/res/values-ms-rMY/strings.xml
index bb16958..5e36aaf 100644
--- a/res/values-ms-rMY/strings.xml
+++ b/res/values-ms-rMY/strings.xml
@@ -67,6 +67,7 @@
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Kenalan cadangan"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Semua kenalan"</string>
     <string name="contactsJoinedMessage" msgid="3343535986195643136">"Kenalan dipaut"</string>
+    <string name="contact_deleted_named_toast" msgid="6558941164987421174">"<xliff:g id="NAME">%s</xliff:g> dipadamkan"</string>
     <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
       <item quantity="other">Kenalan dipadamkan</item>
       <item quantity="one">Kenalan dipadamkan</item>
@@ -113,11 +114,11 @@
     <string name="emptyMainList" msgid="2772242747899664460">"Senarai kenalan anda kosong"</string>
     <string name="contactSavedToast" msgid="9171862279493213075">"Kenalan disimpan."</string>
     <string name="contactUnlinkedToast" msgid="7122823195786012553">"Kenalan dinyahpaut"</string>
-    <string name="contactSavedErrorToast" msgid="3207250533172944892">"Tidak dapat menyimpan perubahan kenalan."</string>
-    <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Tidak dapat menyahpaut kenalan."</string>
-    <string name="contactJoinErrorToast" msgid="3977932531264809035">"Tidak dapat memaut kenalan."</string>
-    <string name="contactGenericErrorToast" msgid="7774911165341591714">"Ralat semasa menyimpan kenalan."</string>
-    <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"Tidak dapat menyimpan perubahan foto kenalan."</string>
+    <string name="contactSavedErrorToast" msgid="4827033473908688031">"Tidak dapat menyimpan perubahan kenalan"</string>
+    <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"Tidak dapat menyahpaut kenalan"</string>
+    <string name="contactJoinErrorToast" msgid="5735129234573327701">"Tidak dapat memaut kenalan"</string>
+    <string name="contactGenericErrorToast" msgid="3885457515665783976">"Ralat menyimpan kenalan"</string>
+    <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Tidak dapat menyimpan perubahan foto kenalan"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"Gagal memuatkan label"</string>
     <string name="groupSavedToast" msgid="6491495462357722285">"Label disimpan"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Label dipadamkan"</string>
@@ -126,7 +127,7 @@
     <string name="groupUpdatedToast" msgid="3667977658676267687">"Label dikemaskinikan"</string>
     <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Dialih keluar daripada label"</string>
     <string name="groupMembersAddedToast" msgid="4824834898718972768">"Ditambahkan pada label"</string>
-    <string name="groupSavedErrorToast" msgid="8121032018490980184">"Tidak dapat menyimpan perubahan label."</string>
+    <string name="groupSavedErrorToast" msgid="2355891714292740162">"Tidak dapat menyimpan perubahan label"</string>
     <string name="groupExistsErrorMessage" msgid="5196811283836946189">"Label itu sudah wujud"</string>
     <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
       <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> kenalan dengan nombor telefon</item>
@@ -147,7 +148,6 @@
     <string name="callAgain" msgid="3197312117049874778">"Panggil semula"</string>
     <string name="returnCall" msgid="8171961914203617813">"Balas panggilan"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Tambah \"<xliff:g id="EMAIL">%s</xliff:g>\" kepada kenalan?"</string>
-    <string name="description_contact_photo" msgid="3387458082667894062">"foto kenalan"</string>
     <string name="description_plus_button" msgid="515164827856229880">"tambah"</string>
     <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> daripada <xliff:g id="TOTAL_NUMBER">%s</xliff:g> kenalan"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"Nama kenalan anda"</string>
@@ -192,7 +192,6 @@
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Tarikh"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Label"</string>
     <string name="change_photo" msgid="8530597935483526383">"Tukar"</string>
-    <string name="primary_photo" msgid="8517942231868516999">"Foto utama"</string>
     <string name="description_star" msgid="2605854427360036550">"kegemaran"</string>
     <string name="edit_contact" msgid="7529281274005689512">"Edit kenalan"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"tutup"</string>
@@ -269,7 +268,6 @@
     <string name="header_name_entry" msgid="1592791008096288306">"Nama"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"E-mel"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"Telefon"</string>
-    <string name="header_photo_entry" msgid="4438023151411853238">"Foto"</string>
     <string name="content_description_expand_editor" msgid="1111381475901897470">"Klik untuk kembangkan editor kenalan."</string>
     <string name="content_description_collapse_editor" msgid="7598061318022977825">"Klik untuk runtuhkan editor kenalan."</string>
     <string name="content_description_directions" msgid="2686791825798189335">"arah ke lokasi"</string>
@@ -284,6 +282,8 @@
     <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Tukar foto"</string>
     <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Gagal membuka editor."</string>
     <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Menyimpan ke"</string>
+    <!-- no translation found for compact_editor_account_selector_read_only_title (1869435992721760221) -->
+    <skip />
     <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"Pada masa ini menyimpan ke <xliff:g id="ACCOUNT_NAME">%s</xliff:g> . Ketik dua kali untuk memilih akaun yang lain."</string>
     <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
       <item quantity="other">Kenalan dipaut (<xliff:g id="COUNT">%d</xliff:g>)</item>
@@ -454,22 +454,14 @@
     <string name="chat_jabber" msgid="7561444230307829609">"Sembang menggunakan Jabber"</string>
     <string name="chat" msgid="9025361898797412245">"Sembang"</string>
     <string name="description_minus_button" msgid="6908099247930477551">"padam"</string>
-    <!-- no translation found for expand_name_fields_description (6883935911480726652) -->
-    <skip />
-    <!-- no translation found for collapse_name_fields_description (4757877385895561556) -->
-    <skip />
-    <!-- no translation found for expand_phonetic_name_fields_description (3865726859582581741) -->
-    <skip />
-    <!-- no translation found for collapse_phonetic_name_fields_description (9102249481855019452) -->
-    <skip />
-    <!-- no translation found for expand_fields_description (8129294181216760037) -->
-    <skip />
-    <!-- no translation found for collapse_fields_description (1884143625854637874) -->
-    <skip />
-    <!-- no translation found for announce_expanded_fields (1075947220478530622) -->
-    <skip />
-    <!-- no translation found for announce_collapsed_fields (6414231530177338704) -->
-    <skip />
+    <string name="expand_name_fields_description" msgid="6883935911480726652">"Kembangkan medan nama"</string>
+    <string name="collapse_name_fields_description" msgid="4757877385895561556">"Runtuhkan medan nama"</string>
+    <string name="expand_phonetic_name_fields_description" msgid="3865726859582581741">"Kembangkan medan nama fonetik"</string>
+    <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Runtuhkan medan nama fonetik"</string>
+    <string name="expand_fields_description" msgid="8129294181216760037">"Kembangkan"</string>
+    <string name="collapse_fields_description" msgid="1884143625854637874">"Runtuhkan"</string>
+    <string name="announce_expanded_fields" msgid="1075947220478530622">"Dikembangkan"</string>
+    <string name="announce_collapsed_fields" msgid="6414231530177338704">"Diruntuhkan"</string>
     <string name="list_filter_all_accounts" msgid="8908683398914322369">"Semua kenalan"</string>
     <string name="list_filter_all_starred" msgid="5031734941601931356">"Dibintangkan"</string>
     <string name="list_filter_customize" msgid="4789963356004169321">"Peribadikan"</string>
@@ -557,7 +549,8 @@
     <string name="share_favorite_contacts" msgid="4280926751003081042">"Kongsi kenalan kegemaran"</string>
     <string name="share_contacts" msgid="8109287987498711664">"Kongsi semua kenalan"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"Gagal berkongsi kenalan."</string>
-    <string name="dialog_import_export" msgid="4360648034889921624">"Import/Eksport kenalan"</string>
+    <!-- no translation found for dialog_export (1628001095187741417) -->
+    <skip />
     <string name="dialog_import" msgid="2431698729761448759">"Import kenalan"</string>
     <string name="share_error" msgid="948429331673358107">"Kenalan ini tidak boleh dikongsi."</string>
     <string name="no_contact_to_share" msgid="1276397530378323033">"Tiada kenalan untuk dikongsi."</string>
@@ -572,7 +565,10 @@
     <string name="menu_clear_frequents" msgid="7688250191932838833">"Padam bersih kerap dihubungi"</string>
     <string name="menu_select_sim" msgid="3603578201960504010">"Pilih kad SIM"</string>
     <string name="menu_accounts" msgid="1424330057450189074">"Urus akaun"</string>
-    <string name="menu_import_export" msgid="26217871113229507">"Import/eksport"</string>
+    <!-- no translation found for menu_import (6107961135813836467) -->
+    <skip />
+    <!-- no translation found for menu_export (2658783911863503902) -->
+    <skip />
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"Nombor yang disekat"</string>
     <string name="contact_status_update_attribution" msgid="752179367353018597">"melalui <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> melalui <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
@@ -606,4 +602,8 @@
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> saat"</string>
     <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> saat"</string>
     <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> jam <xliff:g id="MINUTES_1">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> saat"</string>
+    <!-- no translation found for dynamic_shortcut_disabled_message (249939425761315252) -->
+    <skip />
+    <!-- no translation found for dynamic_shortcut_contact_removed_message (6845645831837615899) -->
+    <skip />
 </resources>
diff --git a/res/values-my-rMM/strings.xml b/res/values-my-rMM/strings.xml
index 631fef1..aafe8d6 100644
--- a/res/values-my-rMM/strings.xml
+++ b/res/values-my-rMM/strings.xml
@@ -67,6 +67,7 @@
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"အကြုံပြုလိုသော အဆက်အသွယ်များ"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"လိပ်စာများအားလုံး"</string>
     <string name="contactsJoinedMessage" msgid="3343535986195643136">"ကွင်းဆက်ထားသည့် အဆက်အသွယ်များ"</string>
+    <string name="contact_deleted_named_toast" msgid="6558941164987421174">"<xliff:g id="NAME">%s</xliff:g> ကို ဖျက်လိုက်ပါသည်"</string>
     <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
       <item quantity="other"> အဆက်အသွယ် ဖျက်ခဲ့သည်</item>
       <item quantity="one"> အဆက်အသွယ် ဖျက်ခဲ့သည်</item>
@@ -113,11 +114,11 @@
     <string name="emptyMainList" msgid="2772242747899664460">"သင့်အဆက်အသွယ်များစာရင်းတွင် မည်သူမျှမရှိပါ"</string>
     <string name="contactSavedToast" msgid="9171862279493213075">"အဆက်အသွယ်အား သိမ်းဆည်းပြီးပါပြီ"</string>
     <string name="contactUnlinkedToast" msgid="7122823195786012553">"အဆက်အသွယ်များကို ကွင်းဆက်ဖြုတ်လိုက်ပြီ"</string>
-    <string name="contactSavedErrorToast" msgid="3207250533172944892">"လိပ်စာပြောင်းလဲမှုအား သိမ်းဆည်းလို့မရပါ"</string>
-    <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"အဆက်အသွယ်ကို လင့်ခ်ဖြုတ်၍မရပါ"</string>
-    <string name="contactJoinErrorToast" msgid="3977932531264809035">"အဆက်အသွယ်ကို ကွင်းဆက်ချိတ်၍မရပါ။"</string>
-    <string name="contactGenericErrorToast" msgid="7774911165341591714">"အဆက်အသွယ် သိမ်းဆည်းရာတွင် ပြဿနာရှိနေသည်။"</string>
-    <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"အဆက်အသွယ်၏ ဓာတ်ပုံပြောင်းလဲမှု သိမ်းဆည်းနိုင်ခြင်းမရှိပါ။"</string>
+    <string name="contactSavedErrorToast" msgid="4827033473908688031">"အဆက်အသွယ်ပြောင်းလဲမှုများကို သိမ်းဆည်း၍မရပါ"</string>
+    <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"အဆက်အသွယ်ကို လင့်ခ်ဖြုတ်၍မရပါ"</string>
+    <string name="contactJoinErrorToast" msgid="5735129234573327701">"အဆက်အသွယ်ကို လင့်ခ်ချိတ်ဆက်၍မရပါ"</string>
+    <string name="contactGenericErrorToast" msgid="3885457515665783976">"အဆက်အသွယ်သိမ်းဆည်းရာတွင် အမှားအယွင်းရှိပါသည်"</string>
+    <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"အဆက်အသွယ်ဓာတ်ပုံပြောင်းလဲမှုများကို သိမ်းဆည်း၍မရပါ"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"အညွှန်းဖော်ပြ၍မရပါ"</string>
     <string name="groupSavedToast" msgid="6491495462357722285">"အညွှန်းကို သိမ်းပြီးပါပြီ"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"အညွှန်းဖျက်ပြီးပါပြီ"</string>
@@ -126,7 +127,7 @@
     <string name="groupUpdatedToast" msgid="3667977658676267687">"အညွှန်းကို အပ်ဒိတ်လုပ်ပြီးပါပြီ"</string>
     <string name="groupMembersRemovedToast" msgid="3510563559799376603">"အညွှန်းမှ ဖယ်ရှားပြီးပါပြီ"</string>
     <string name="groupMembersAddedToast" msgid="4824834898718972768">"အညွှန်းသို့ ထည့်ထားပါသည်"</string>
-    <string name="groupSavedErrorToast" msgid="8121032018490980184">"အညွှန်းအပြောင်းအလဲများကို သိမ်း၍မရပါ။"</string>
+    <string name="groupSavedErrorToast" msgid="2355891714292740162">"အညွှန်းပြောင်းလဲမှုများကို သိမ်းဆည်း၍မရပါ"</string>
     <string name="groupExistsErrorMessage" msgid="5196811283836946189">"ထိုအညွှန်းမှာ ရှိပြီးသားဖြစ်ပါသည်"</string>
     <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
       <item quantity="other">ဖုန်းနံပါတ်များပါသောအဆက်အသွယ်<xliff:g id="COUNT">%d</xliff:g>ခု</item>
@@ -147,7 +148,6 @@
     <string name="callAgain" msgid="3197312117049874778">"ပြန်လည်ခေါ်ဆိုရန်"</string>
     <string name="returnCall" msgid="8171961914203617813">"ဖုန်းပြန်ခေါ်ရန်"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"\"<xliff:g id="EMAIL">%s</xliff:g>\" ကို လိပ်စာထဲ ထည့်မလား?"</string>
-    <string name="description_contact_photo" msgid="3387458082667894062">"လိပ်စာမှ ဓာတ်ပုံ"</string>
     <string name="description_plus_button" msgid="515164827856229880">"အပေါင်း"</string>
     <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> ၏ <xliff:g id="TOTAL_NUMBER">%s</xliff:g> လိပ်စာ"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"အဆက်အသွယ်များ၏နာမည်များ"</string>
@@ -192,7 +192,6 @@
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"ရက်စွဲ"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"အညွှန်း"</string>
     <string name="change_photo" msgid="8530597935483526383">"ပြောင်းရန်"</string>
-    <string name="primary_photo" msgid="8517942231868516999">"အဓိက ဓာတ်ပုံ"</string>
     <string name="description_star" msgid="2605854427360036550">"အနှစ်သက်ဆုံး"</string>
     <string name="edit_contact" msgid="7529281274005689512">"အဆက်အသွယ်အားပြင်ရန်"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"ပိတ်ရန်"</string>
@@ -269,7 +268,6 @@
     <string name="header_name_entry" msgid="1592791008096288306">"အမည်"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"အီးမေးလ်"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"ဖုန်း"</string>
-    <string name="header_photo_entry" msgid="4438023151411853238">"ဓာတ်ပုံ"</string>
     <string name="content_description_expand_editor" msgid="1111381475901897470">"အဆက်အသွယ် အယ်ဒီတာအား ချဲ့ရန် ကလစ်နှိပ်ပါ။"</string>
     <string name="content_description_collapse_editor" msgid="7598061318022977825">"အဆက်အသွယ် အယ်ဒီတာအား ခေါက်ချရန် ကလစ်နှိပ်ပါ။"</string>
     <string name="content_description_directions" msgid="2686791825798189335">"တည်နေရာများသို့ လမ်းညွှန်ချက်"</string>
@@ -284,6 +282,8 @@
     <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"ဓာတ်ပုံပြောင်းရန်"</string>
     <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"တည်းဖြတ်သူကို ဖွင့်ခြင်းမအောင်မြင်ပါ။"</string>
     <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"သိမ်းဆည်းရန်နေရာ"</string>
+    <!-- no translation found for compact_editor_account_selector_read_only_title (1869435992721760221) -->
+    <skip />
     <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"လောလောဆယ်မှာ <xliff:g id="ACCOUNT_NAME">%s</xliff:g>သို့ သိမ်းဆည်းနေသည်။ အခြားအကောင့်ကို ရွေးရန် နှစ်ကြိမ် တို့ပါ။"</string>
     <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
       <item quantity="other">ကွင်းဆက်ချိတ်ထားသည့်အကောင့် (<xliff:g id="COUNT">%d</xliff:g>) ခု</item>
@@ -454,22 +454,14 @@
     <string name="chat_jabber" msgid="7561444230307829609">"Jabber သုံး၍ ချတ်လုပ်ရန်"</string>
     <string name="chat" msgid="9025361898797412245">"ချတ်လုပ်ရန်"</string>
     <string name="description_minus_button" msgid="6908099247930477551">"ဖျက်ရန်"</string>
-    <!-- no translation found for expand_name_fields_description (6883935911480726652) -->
-    <skip />
-    <!-- no translation found for collapse_name_fields_description (4757877385895561556) -->
-    <skip />
-    <!-- no translation found for expand_phonetic_name_fields_description (3865726859582581741) -->
-    <skip />
-    <!-- no translation found for collapse_phonetic_name_fields_description (9102249481855019452) -->
-    <skip />
-    <!-- no translation found for expand_fields_description (8129294181216760037) -->
-    <skip />
-    <!-- no translation found for collapse_fields_description (1884143625854637874) -->
-    <skip />
-    <!-- no translation found for announce_expanded_fields (1075947220478530622) -->
-    <skip />
-    <!-- no translation found for announce_collapsed_fields (6414231530177338704) -->
-    <skip />
+    <string name="expand_name_fields_description" msgid="6883935911480726652">"အမည်အကွက်များ ချဲ့ပြရန်"</string>
+    <string name="collapse_name_fields_description" msgid="4757877385895561556">"အမည်အကွက်များ ချုံ့ပြရန်"</string>
+    <string name="expand_phonetic_name_fields_description" msgid="3865726859582581741">"အသံထွက်အမည်အကွက်များ ချဲ့ပြရန်"</string>
+    <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"အသံထွက်အမည်အကွက်များ ချုံ့ပြရန်"</string>
+    <string name="expand_fields_description" msgid="8129294181216760037">"ချဲ့ကြည့်ရန်"</string>
+    <string name="collapse_fields_description" msgid="1884143625854637874">"ချုံ့ပြရန်"</string>
+    <string name="announce_expanded_fields" msgid="1075947220478530622">"ချဲ့ထားသည်"</string>
+    <string name="announce_collapsed_fields" msgid="6414231530177338704">"ချုံ့ထားသည်"</string>
     <string name="list_filter_all_accounts" msgid="8908683398914322369">"အဆက်အသွယ်အားလုံး"</string>
     <string name="list_filter_all_starred" msgid="5031734941601931356">"ကြယ်ပွင့်ပြထားသော"</string>
     <string name="list_filter_customize" msgid="4789963356004169321">"စိတ်ကြိုက်ကြည့်ရန်"</string>
@@ -555,7 +547,8 @@
     <string name="share_favorite_contacts" msgid="4280926751003081042">"အကြိုက်ဆုံးအဆက်အသွယ်များကို မျှဝေရန်"</string>
     <string name="share_contacts" msgid="8109287987498711664">"အဆက်အသွယ်အားလုံးမျှဝေရန်"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"အဆက်အသွယ်များ မျှဝေ၍မရပါ။"</string>
-    <string name="dialog_import_export" msgid="4360648034889921624">"အဆက်အသွယ်များ တင်သွင်း/တင်ပို့ရန်"</string>
+    <!-- no translation found for dialog_export (1628001095187741417) -->
+    <skip />
     <string name="dialog_import" msgid="2431698729761448759">"အဆက်အသွယ်များ တင်သွင်းရန်"</string>
     <string name="share_error" msgid="948429331673358107">"ဤအဆက်အသွယ်ကို မျှဝေ၍မရပါ။"</string>
     <string name="no_contact_to_share" msgid="1276397530378323033">"မျှဝေရန်အဆက်အသွယ် မရှိပါ။"</string>
@@ -570,7 +563,10 @@
     <string name="menu_clear_frequents" msgid="7688250191932838833">"မကြာခဏဆက်သွယ်လေ့ရှိသူများကို ရှင်းရန်"</string>
     <string name="menu_select_sim" msgid="3603578201960504010">"SIM ကဒ်ကို ရွေးရန်"</string>
     <string name="menu_accounts" msgid="1424330057450189074">"အကောင့်များစီမံခန့်ခွဲရန်"</string>
-    <string name="menu_import_export" msgid="26217871113229507">"တင်သွင်း/တင်ပို့ရန်"</string>
+    <!-- no translation found for menu_import (6107961135813836467) -->
+    <skip />
+    <!-- no translation found for menu_export (2658783911863503902) -->
+    <skip />
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"ပိတ်ဆို့ထားသည့် နံပါတ်များ"</string>
     <string name="contact_status_update_attribution" msgid="752179367353018597">"<xliff:g id="SOURCE">%1$s</xliff:g> မှတဆင့်"</string>
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> <xliff:g id="SOURCE">%2$s</xliff:g> မှတဆင့်"</string>
@@ -604,4 +600,8 @@
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> စက္ကန့်"</string>
     <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> မိနစ် <xliff:g id="SECONDS">%s</xliff:g> စက္ကန့်"</string>
     <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> နာရီ <xliff:g id="MINUTES_1">%s</xliff:g> မိနစ် <xliff:g id="SECONDS">%s</xliff:g> စက္ကန့်"</string>
+    <!-- no translation found for dynamic_shortcut_disabled_message (249939425761315252) -->
+    <skip />
+    <!-- no translation found for dynamic_shortcut_contact_removed_message (6845645831837615899) -->
+    <skip />
 </resources>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index a1c1a93..fa99660 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -67,6 +67,7 @@
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Forslag"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Alle kontakter"</string>
     <string name="contactsJoinedMessage" msgid="3343535986195643136">"Kontaktene er sammenknyttet"</string>
+    <string name="contact_deleted_named_toast" msgid="6558941164987421174">"<xliff:g id="NAME">%s</xliff:g> er slettet"</string>
     <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
       <item quantity="other">Kontakter er slettet</item>
       <item quantity="one">Kontakten er slettet</item>
@@ -113,11 +114,11 @@
     <string name="emptyMainList" msgid="2772242747899664460">"Kontaktlisten din er tom"</string>
     <string name="contactSavedToast" msgid="9171862279493213075">"Kontakt er lagret"</string>
     <string name="contactUnlinkedToast" msgid="7122823195786012553">"Tilknytningen mellom kontaktene er fjernet"</string>
-    <string name="contactSavedErrorToast" msgid="3207250533172944892">"Kunne ikke lagre kontaktendringene."</string>
-    <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Kunne ikke fjerne tilknytningen for kontakten."</string>
-    <string name="contactJoinErrorToast" msgid="3977932531264809035">"Kunne ikke knytte sammen kontakten."</string>
-    <string name="contactGenericErrorToast" msgid="7774911165341591714">"Feil ved lagring av kontakt."</string>
-    <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"Kunne ikke lagre endringene av kontaktbildene."</string>
+    <string name="contactSavedErrorToast" msgid="4827033473908688031">"Kunne ikke lagre kontaktendringene"</string>
+    <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"Kunne ikke fjerne tilknytningen for kontakten"</string>
+    <string name="contactJoinErrorToast" msgid="5735129234573327701">"Kunne ikke tilknytte kontakten"</string>
+    <string name="contactGenericErrorToast" msgid="3885457515665783976">"Feil ved lagring av kontakt"</string>
+    <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Kunne ikke lagre endringene av kontaktbildene"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"Kunne ikke laste inn etiketten"</string>
     <string name="groupSavedToast" msgid="6491495462357722285">"Etiketten er lagret"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Etiketten er slettet"</string>
@@ -126,7 +127,7 @@
     <string name="groupUpdatedToast" msgid="3667977658676267687">"Etiketten ble oppdatert"</string>
     <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Fjernet fra etiketten"</string>
     <string name="groupMembersAddedToast" msgid="4824834898718972768">"Lagt til i etiketten"</string>
-    <string name="groupSavedErrorToast" msgid="8121032018490980184">"Kunne ikke lagre etikettendringene."</string>
+    <string name="groupSavedErrorToast" msgid="2355891714292740162">"Kunne ikke lagre etikettendringene"</string>
     <string name="groupExistsErrorMessage" msgid="5196811283836946189">"Denne etiketten finnes allerede"</string>
     <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
       <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> kontakter med telefonnumre</item>
@@ -147,7 +148,6 @@
     <string name="callAgain" msgid="3197312117049874778">"Ring på nytt"</string>
     <string name="returnCall" msgid="8171961914203617813">"Ring tilbake"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Legg til «<xliff:g id="EMAIL">%s</xliff:g>» som kontakt?"</string>
-    <string name="description_contact_photo" msgid="3387458082667894062">"kontaktbilde"</string>
     <string name="description_plus_button" msgid="515164827856229880">"plussknapp"</string>
     <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> av <xliff:g id="TOTAL_NUMBER">%s</xliff:g> kontakter"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"Navn på kontakter"</string>
@@ -192,7 +192,6 @@
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Dato"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Etikett"</string>
     <string name="change_photo" msgid="8530597935483526383">"Endre"</string>
-    <string name="primary_photo" msgid="8517942231868516999">"Hovedbilde"</string>
     <string name="description_star" msgid="2605854427360036550">"favoritt"</string>
     <string name="edit_contact" msgid="7529281274005689512">"Rediger kontakt"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"lukk"</string>
@@ -269,7 +268,6 @@
     <string name="header_name_entry" msgid="1592791008096288306">"Navn"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"E-post"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"Telefon"</string>
-    <string name="header_photo_entry" msgid="4438023151411853238">"Foto"</string>
     <string name="content_description_expand_editor" msgid="1111381475901897470">"Klikk for å utvide redigeringsvinduet for kontakter"</string>
     <string name="content_description_collapse_editor" msgid="7598061318022977825">"Klikk for å skjule redigeringsvinduet for kontakter"</string>
     <string name="content_description_directions" msgid="2686791825798189335">"veibeskrivelse til posisjon"</string>
@@ -284,6 +282,8 @@
     <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Bytt bilde"</string>
     <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Kunne ikke åpne redigeringsvinduet."</string>
     <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Lagres i"</string>
+    <!-- no translation found for compact_editor_account_selector_read_only_title (1869435992721760221) -->
+    <skip />
     <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"Lagrer på <xliff:g id="ACCOUNT_NAME">%s</xliff:g> for øyeblikket. Dobbelttrykk for å velge en annen konto."</string>
     <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
       <item quantity="other">Sammenknyttede kontakter (<xliff:g id="COUNT">%d</xliff:g>)</item>
@@ -454,22 +454,14 @@
     <string name="chat_jabber" msgid="7561444230307829609">"Nettprat med Jabber"</string>
     <string name="chat" msgid="9025361898797412245">"Nettprat"</string>
     <string name="description_minus_button" msgid="6908099247930477551">"slett"</string>
-    <!-- no translation found for expand_name_fields_description (6883935911480726652) -->
-    <skip />
-    <!-- no translation found for collapse_name_fields_description (4757877385895561556) -->
-    <skip />
-    <!-- no translation found for expand_phonetic_name_fields_description (3865726859582581741) -->
-    <skip />
-    <!-- no translation found for collapse_phonetic_name_fields_description (9102249481855019452) -->
-    <skip />
-    <!-- no translation found for expand_fields_description (8129294181216760037) -->
-    <skip />
-    <!-- no translation found for collapse_fields_description (1884143625854637874) -->
-    <skip />
-    <!-- no translation found for announce_expanded_fields (1075947220478530622) -->
-    <skip />
-    <!-- no translation found for announce_collapsed_fields (6414231530177338704) -->
-    <skip />
+    <string name="expand_name_fields_description" msgid="6883935911480726652">"Vis navnefelt"</string>
+    <string name="collapse_name_fields_description" msgid="4757877385895561556">"Skjul navnefelt"</string>
+    <string name="expand_phonetic_name_fields_description" msgid="3865726859582581741">"Vis fonetiske navnefelt"</string>
+    <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Skjul fonetiske navnefelt"</string>
+    <string name="expand_fields_description" msgid="8129294181216760037">"Vis"</string>
+    <string name="collapse_fields_description" msgid="1884143625854637874">"Skjul"</string>
+    <string name="announce_expanded_fields" msgid="1075947220478530622">"Utvidet"</string>
+    <string name="announce_collapsed_fields" msgid="6414231530177338704">"Skjult"</string>
     <string name="list_filter_all_accounts" msgid="8908683398914322369">"Alle kontakter"</string>
     <string name="list_filter_all_starred" msgid="5031734941601931356">"Stjernemerket"</string>
     <string name="list_filter_customize" msgid="4789963356004169321">"Tilpass"</string>
@@ -555,7 +547,8 @@
     <string name="share_favorite_contacts" msgid="4280926751003081042">"Del favorittkontaktene"</string>
     <string name="share_contacts" msgid="8109287987498711664">"Del alle kontaktene"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"Kunne ikke dele kontaktene."</string>
-    <string name="dialog_import_export" msgid="4360648034889921624">"Imp./eksp. kontakter"</string>
+    <!-- no translation found for dialog_export (1628001095187741417) -->
+    <skip />
     <string name="dialog_import" msgid="2431698729761448759">"Importer kontakter"</string>
     <string name="share_error" msgid="948429331673358107">"Denne kontakten kan ikke deles."</string>
     <string name="no_contact_to_share" msgid="1276397530378323033">"Det finnes ingen kontakter å dele."</string>
@@ -570,7 +563,10 @@
     <string name="menu_clear_frequents" msgid="7688250191932838833">"Fjern ofte kontaktede personer"</string>
     <string name="menu_select_sim" msgid="3603578201960504010">"Velg SIM-kort"</string>
     <string name="menu_accounts" msgid="1424330057450189074">"Administrer kontoer"</string>
-    <string name="menu_import_export" msgid="26217871113229507">"Importér/eksportér"</string>
+    <!-- no translation found for menu_import (6107961135813836467) -->
+    <skip />
+    <!-- no translation found for menu_export (2658783911863503902) -->
+    <skip />
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"Blokkerte telefonnumre"</string>
     <string name="contact_status_update_attribution" msgid="752179367353018597">"via <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> via <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
@@ -604,4 +600,8 @@
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> sek"</string>
     <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> sek"</string>
     <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> t <xliff:g id="MINUTES_1">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> sek"</string>
+    <!-- no translation found for dynamic_shortcut_disabled_message (249939425761315252) -->
+    <skip />
+    <!-- no translation found for dynamic_shortcut_contact_removed_message (6845645831837615899) -->
+    <skip />
 </resources>
diff --git a/res/values-ne-rNP/strings.xml b/res/values-ne-rNP/strings.xml
index b31d9a4..15a6c0c 100644
--- a/res/values-ne-rNP/strings.xml
+++ b/res/values-ne-rNP/strings.xml
@@ -67,6 +67,7 @@
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"सुझाव गरिएका सम्पर्कहरू"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"सबै सम्पर्कहरू"</string>
     <string name="contactsJoinedMessage" msgid="3343535986195643136">"सम्पर्क ठेगानाहरू लिंक गरियो"</string>
+    <string name="contact_deleted_named_toast" msgid="6558941164987421174">"<xliff:g id="NAME">%s</xliff:g> मेटियो"</string>
     <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
       <item quantity="other">सम्पर्क ठेगानाहरू मेटिए</item>
       <item quantity="one"> सम्पर्क ठेगाना मेटियो</item>
@@ -113,11 +114,11 @@
     <string name="emptyMainList" msgid="2772242747899664460">"तपाईंको सम्पर्क ठेगानाहरूको सूची खाली छ"</string>
     <string name="contactSavedToast" msgid="9171862279493213075">"सम्पर्क बचत गरियो।"</string>
     <string name="contactUnlinkedToast" msgid="7122823195786012553">"सम्पर्क ठेगानाहरू अनलिंक गरियो"</string>
-    <string name="contactSavedErrorToast" msgid="3207250533172944892">"सम्पर्क परिवर्तनहरू सुरक्षित गर्न सकेन।"</string>
-    <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"सम्पर्क अनलिंक गर्न सकेन।"</string>
-    <string name="contactJoinErrorToast" msgid="3977932531264809035">"सम्पर्क ठेगाना लिंक गर्न सकिएन।"</string>
-    <string name="contactGenericErrorToast" msgid="7774911165341591714">"सम्पर्क सुरक्षित गर्दा त्रूटि।"</string>
-    <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"सम्पर्क तस्बिर परिवर्तनहरू सुरक्षित गर्न सकिएन।"</string>
+    <string name="contactSavedErrorToast" msgid="4827033473908688031">"सम्पर्कमा गरिएका परिवर्तनहरू सुरक्षित गर्न सकिएन"</string>
+    <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"सम्पर्कलाई अनलिंक गर्न सकिएन"</string>
+    <string name="contactJoinErrorToast" msgid="5735129234573327701">"सम्पर्क ठेगानामा लिंक गर्न सकिएन"</string>
+    <string name="contactGenericErrorToast" msgid="3885457515665783976">"सम्पर्क सुरक्षित गर्दा त्रुटि भयो"</string>
+    <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"सम्पर्क सम्बन्धी तस्बिरमा गरिएका परिवर्तनहरू सुरक्षित गर्न सकिएन"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"लेबल लोड गर्न सकिएन"</string>
     <string name="groupSavedToast" msgid="6491495462357722285">"लेबललाई सुरक्षित गरियो"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"लेबल मेटाइयो"</string>
@@ -126,7 +127,7 @@
     <string name="groupUpdatedToast" msgid="3667977658676267687">"लेबललाई अद्यावधिक गरियो"</string>
     <string name="groupMembersRemovedToast" msgid="3510563559799376603">"लेबलबाट हटाइयो"</string>
     <string name="groupMembersAddedToast" msgid="4824834898718972768">"लेबलमा थपियो"</string>
-    <string name="groupSavedErrorToast" msgid="8121032018490980184">"लेबलमा गरिएका परिवर्तनहरूलाई सुरक्षित गर्न सकिएन।"</string>
+    <string name="groupSavedErrorToast" msgid="2355891714292740162">"लेबलमा गरिएका परिवर्तनहरूलाई सुरक्षित गर्न सकिएन"</string>
     <string name="groupExistsErrorMessage" msgid="5196811283836946189">"उक्त लेबल पहिले नै अवस्थित छ"</string>
     <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
       <item quantity="other"><xliff:g id="COUNT">%d</xliff:g>सम्पर्कहरू फोन नम्बर सहित</item>
@@ -147,7 +148,6 @@
     <string name="callAgain" msgid="3197312117049874778">"फेरि कल गर्नुहोस्"</string>
     <string name="returnCall" msgid="8171961914203617813">"कल फर्काउनुहोस्"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"\"<xliff:g id="EMAIL">%s</xliff:g>\" लाई सम्पर्कमा थप्ने?"</string>
-    <string name="description_contact_photo" msgid="3387458082667894062">"तस्बिर सम्पर्क गर्नुहोस्"</string>
     <string name="description_plus_button" msgid="515164827856229880">"जोड"</string>
     <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g>को <xliff:g id="TOTAL_NUMBER">%s</xliff:g> सम्पर्क"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"तपाईँका सम्पर्कहरूका नामहरू"</string>
@@ -192,7 +192,6 @@
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"मिति"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"लेबल"</string>
     <string name="change_photo" msgid="8530597935483526383">"परिवर्तन गर्नुहोस्"</string>
-    <string name="primary_photo" msgid="8517942231868516999">"प्राथमिक तस्बिर"</string>
     <string name="description_star" msgid="2605854427360036550">"मनपर्ने"</string>
     <string name="edit_contact" msgid="7529281274005689512">"सम्पर्क सम्पादन गर्नुहोस्"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"बन्द गर्नुहोस्"</string>
@@ -269,7 +268,6 @@
     <string name="header_name_entry" msgid="1592791008096288306">"नाम"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"इमेल"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"फोन"</string>
-    <string name="header_photo_entry" msgid="4438023151411853238">"तस्बिर"</string>
     <string name="content_description_expand_editor" msgid="1111381475901897470">"सम्पर्क सम्पादक विस्तार गर्न क्लिक गर्नुहोस्।"</string>
     <string name="content_description_collapse_editor" msgid="7598061318022977825">"सम्पर्क सम्पादक समाप्त गर्न क्लिक गर्नुहोस्।"</string>
     <string name="content_description_directions" msgid="2686791825798189335">"स्थानको लागि निर्देशनहरू"</string>
@@ -284,6 +282,8 @@
     <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"तस्बिर परिवर्तन गर्नुहोस्"</string>
     <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"सम्पादक खोल्न असफल भयो।"</string>
     <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"यसमा सुरक्षित गर्दै"</string>
+    <!-- no translation found for compact_editor_account_selector_read_only_title (1869435992721760221) -->
+    <skip />
     <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"<xliff:g id="ACCOUNT_NAME">%s</xliff:g> मा हाल सुरक्षित गर्दै। भिन्‍न खाता परिवर्तन गर्न डबल ट्याप गर्नुहोस्।"</string>
     <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
       <item quantity="other">लिंक गरिएका सम्पर्क ठेगानाहरू (<xliff:g id="COUNT">%d</xliff:g>)</item>
@@ -454,22 +454,14 @@
     <string name="chat_jabber" msgid="7561444230307829609">"ज्याबरको  प्रयोग गरेर च्याट गर्नुहोस्"</string>
     <string name="chat" msgid="9025361898797412245">"कुराकानी"</string>
     <string name="description_minus_button" msgid="6908099247930477551">"मेटाउनुहोस्"</string>
-    <!-- no translation found for expand_name_fields_description (6883935911480726652) -->
-    <skip />
-    <!-- no translation found for collapse_name_fields_description (4757877385895561556) -->
-    <skip />
-    <!-- no translation found for expand_phonetic_name_fields_description (3865726859582581741) -->
-    <skip />
-    <!-- no translation found for collapse_phonetic_name_fields_description (9102249481855019452) -->
-    <skip />
-    <!-- no translation found for expand_fields_description (8129294181216760037) -->
-    <skip />
-    <!-- no translation found for collapse_fields_description (1884143625854637874) -->
-    <skip />
-    <!-- no translation found for announce_expanded_fields (1075947220478530622) -->
-    <skip />
-    <!-- no translation found for announce_collapsed_fields (6414231530177338704) -->
-    <skip />
+    <string name="expand_name_fields_description" msgid="6883935911480726652">"नामका क्षेत्रहरू विस्तृत गर्नुहोस्"</string>
+    <string name="collapse_name_fields_description" msgid="4757877385895561556">"नामका क्षेत्रहरू संक्षिप्त गर्नुहोस्"</string>
+    <string name="expand_phonetic_name_fields_description" msgid="3865726859582581741">"ध्वनितात्त्विक नामका क्षेत्रहरू विस्तृत गर्नुहोस्"</string>
+    <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"ध्वनितात्त्विक नामका क्षेत्रहरू विस्तृत गर्नुहोस्"</string>
+    <string name="expand_fields_description" msgid="8129294181216760037">"विस्तृत गर्नुहोस्"</string>
+    <string name="collapse_fields_description" msgid="1884143625854637874">"संक्षिप्त गर्नुहोस्"</string>
+    <string name="announce_expanded_fields" msgid="1075947220478530622">"विस्तृत गरियो"</string>
+    <string name="announce_collapsed_fields" msgid="6414231530177338704">"संक्षिप्त गरियो"</string>
     <string name="list_filter_all_accounts" msgid="8908683398914322369">"सबै सम्पर्कहरू"</string>
     <string name="list_filter_all_starred" msgid="5031734941601931356">"ताराङ्कित"</string>
     <string name="list_filter_customize" msgid="4789963356004169321">"व्यक्तिगत् बनाउनुहोस्"</string>
@@ -555,7 +547,8 @@
     <string name="share_favorite_contacts" msgid="4280926751003081042">"मनपर्ने सम्पर्कहरू आदान-प्रदान गर्नुहोस्"</string>
     <string name="share_contacts" msgid="8109287987498711664">"सबै सम्पर्क आदान-प्रदान गर्ने"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"सम्पर्कहरू आदान-प्रदान गर्न सकिएन।"</string>
-    <string name="dialog_import_export" msgid="4360648034889921624">"आयात/निर्यात सम्पर्कहरू"</string>
+    <!-- no translation found for dialog_export (1628001095187741417) -->
+    <skip />
     <string name="dialog_import" msgid="2431698729761448759">"सम्पर्कहरू आयात गर्नुहोस्"</string>
     <string name="share_error" msgid="948429331673358107">"यो सम्पर्क साझेदारी गर्न मिल्दैन।"</string>
     <string name="no_contact_to_share" msgid="1276397530378323033">"आदान-प्रदान गर्न कुनै सम्पर्क ठेगानाहरू छैनन्।"</string>
@@ -570,7 +563,10 @@
     <string name="menu_clear_frequents" msgid="7688250191932838833">"बारम्बार गरिएको क्लियर गर्नुहोस्"</string>
     <string name="menu_select_sim" msgid="3603578201960504010">"सिम कार्ड चयन गर्नुहोस्"</string>
     <string name="menu_accounts" msgid="1424330057450189074">"खाताहरू व्यवस्थापन गर्नुहोस्"</string>
-    <string name="menu_import_export" msgid="26217871113229507">"आयात/निर्यात"</string>
+    <!-- no translation found for menu_import (6107961135813836467) -->
+    <skip />
+    <!-- no translation found for menu_export (2658783911863503902) -->
+    <skip />
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"रोकिएका नम्बरहरू"</string>
     <string name="contact_status_update_attribution" msgid="752179367353018597">"<xliff:g id="SOURCE">%1$s</xliff:g>मार्फत"</string>
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> मार्फत <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
@@ -604,4 +600,8 @@
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> सेकेन्ड"</string>
     <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> मिनेट <xliff:g id="SECONDS">%s</xliff:g> सेकेन्ड"</string>
     <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> घन्टा <xliff:g id="MINUTES_1">%s</xliff:g> मिनेट <xliff:g id="SECONDS">%s</xliff:g> सेेकेन्ड"</string>
+    <!-- no translation found for dynamic_shortcut_disabled_message (249939425761315252) -->
+    <skip />
+    <!-- no translation found for dynamic_shortcut_contact_removed_message (6845645831837615899) -->
+    <skip />
 </resources>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index 34ab784..cedb880 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -67,6 +67,7 @@
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Mogelijke contacten"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Alle contacten"</string>
     <string name="contactsJoinedMessage" msgid="3343535986195643136">"Contacten gekoppeld"</string>
+    <string name="contact_deleted_named_toast" msgid="6558941164987421174">"<xliff:g id="NAME">%s</xliff:g> verwijderd"</string>
     <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
       <item quantity="other">Contacten verwijderd</item>
       <item quantity="one">Contact verwijderd</item>
@@ -113,11 +114,11 @@
     <string name="emptyMainList" msgid="2772242747899664460">"Je contactenlijst is leeg"</string>
     <string name="contactSavedToast" msgid="9171862279493213075">"Contact opgeslagen"</string>
     <string name="contactUnlinkedToast" msgid="7122823195786012553">"Contacten losgekoppeld"</string>
-    <string name="contactSavedErrorToast" msgid="3207250533172944892">"Kan wijzigingen in contact niet opslaan."</string>
-    <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Kan contact niet loskoppelen."</string>
-    <string name="contactJoinErrorToast" msgid="3977932531264809035">"Kan contact niet linken."</string>
-    <string name="contactGenericErrorToast" msgid="7774911165341591714">"Fout bij opslaan van contact."</string>
-    <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"Kan wijzigingen in contactfoto niet opslaan."</string>
+    <string name="contactSavedErrorToast" msgid="4827033473908688031">"Kan wijzigingen in contact niet opslaan"</string>
+    <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"Kan link voor contact niet verwijderen"</string>
+    <string name="contactJoinErrorToast" msgid="5735129234573327701">"Kan contact niet linken"</string>
+    <string name="contactGenericErrorToast" msgid="3885457515665783976">"Fout bij opslaan van contact"</string>
+    <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Kan wijzigingen in contactfoto niet opslaan"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"Kan label niet laden"</string>
     <string name="groupSavedToast" msgid="6491495462357722285">"Label opgeslagen"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Label verwijderd"</string>
@@ -126,7 +127,7 @@
     <string name="groupUpdatedToast" msgid="3667977658676267687">"Label geüpdatet"</string>
     <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Verwijderd uit label"</string>
     <string name="groupMembersAddedToast" msgid="4824834898718972768">"Toegevoegd aan label"</string>
-    <string name="groupSavedErrorToast" msgid="8121032018490980184">"Kan labelwijzigingen niet opslaan."</string>
+    <string name="groupSavedErrorToast" msgid="2355891714292740162">"Kan labelwijzigingen niet opslaan"</string>
     <string name="groupExistsErrorMessage" msgid="5196811283836946189">"Dat label bestaat al"</string>
     <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
       <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> contacten met telefoonnummers</item>
@@ -147,7 +148,6 @@
     <string name="callAgain" msgid="3197312117049874778">"Opnieuw bellen"</string>
     <string name="returnCall" msgid="8171961914203617813">"Terugbellen"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Voeg \"<xliff:g id="EMAIL">%s</xliff:g>\" toe aan contactpersonen?"</string>
-    <string name="description_contact_photo" msgid="3387458082667894062">"contactfoto"</string>
     <string name="description_plus_button" msgid="515164827856229880">"plus"</string>
     <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> van <xliff:g id="TOTAL_NUMBER">%s</xliff:g> contacten"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"Namen van je contacten"</string>
@@ -192,7 +192,6 @@
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Datum"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Labelen"</string>
     <string name="change_photo" msgid="8530597935483526383">"Wijzigen"</string>
-    <string name="primary_photo" msgid="8517942231868516999">"Primaire foto"</string>
     <string name="description_star" msgid="2605854427360036550">"favoriet"</string>
     <string name="edit_contact" msgid="7529281274005689512">"Contact bewerken"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"sluiten"</string>
@@ -269,7 +268,6 @@
     <string name="header_name_entry" msgid="1592791008096288306">"Naam"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"E-mail"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"Telefoon"</string>
-    <string name="header_photo_entry" msgid="4438023151411853238">"Foto"</string>
     <string name="content_description_expand_editor" msgid="1111381475901897470">"Klik om contacteditor uit te vouwen."</string>
     <string name="content_description_collapse_editor" msgid="7598061318022977825">"Klik om contacteditor samen te vouwen."</string>
     <string name="content_description_directions" msgid="2686791825798189335">"routebeschrijving naar locatie"</string>
@@ -284,6 +282,8 @@
     <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Foto wijzigen"</string>
     <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Kan editor niet openen."</string>
     <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Opslaan in"</string>
+    <!-- no translation found for compact_editor_account_selector_read_only_title (1869435992721760221) -->
+    <skip />
     <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"Wordt momenteel opgeslagen in <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Dubbeltik om een ander account te kiezen."</string>
     <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
       <item quantity="other">Gelinkte contacten (<xliff:g id="COUNT">%d</xliff:g>)</item>
@@ -454,22 +454,14 @@
     <string name="chat_jabber" msgid="7561444230307829609">"Chatten via Jabber"</string>
     <string name="chat" msgid="9025361898797412245">"Chat"</string>
     <string name="description_minus_button" msgid="6908099247930477551">"verwijderen"</string>
-    <!-- no translation found for expand_name_fields_description (6883935911480726652) -->
-    <skip />
-    <!-- no translation found for collapse_name_fields_description (4757877385895561556) -->
-    <skip />
-    <!-- no translation found for expand_phonetic_name_fields_description (3865726859582581741) -->
-    <skip />
-    <!-- no translation found for collapse_phonetic_name_fields_description (9102249481855019452) -->
-    <skip />
-    <!-- no translation found for expand_fields_description (8129294181216760037) -->
-    <skip />
-    <!-- no translation found for collapse_fields_description (1884143625854637874) -->
-    <skip />
-    <!-- no translation found for announce_expanded_fields (1075947220478530622) -->
-    <skip />
-    <!-- no translation found for announce_collapsed_fields (6414231530177338704) -->
-    <skip />
+    <string name="expand_name_fields_description" msgid="6883935911480726652">"Naamvelden uitvouwen"</string>
+    <string name="collapse_name_fields_description" msgid="4757877385895561556">"Naamvelden samenvouwen"</string>
+    <string name="expand_phonetic_name_fields_description" msgid="3865726859582581741">"Fonetische naamvelden uitvouwen"</string>
+    <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Fonetische naamvelden samenvouwen"</string>
+    <string name="expand_fields_description" msgid="8129294181216760037">"Uitvouwen"</string>
+    <string name="collapse_fields_description" msgid="1884143625854637874">"Samenvouwen"</string>
+    <string name="announce_expanded_fields" msgid="1075947220478530622">"Uitgevouwen"</string>
+    <string name="announce_collapsed_fields" msgid="6414231530177338704">"Samengevouwen"</string>
     <string name="list_filter_all_accounts" msgid="8908683398914322369">"Alle contacten"</string>
     <string name="list_filter_all_starred" msgid="5031734941601931356">"Met ster"</string>
     <string name="list_filter_customize" msgid="4789963356004169321">"Aanpassen"</string>
@@ -555,7 +547,8 @@
     <string name="share_favorite_contacts" msgid="4280926751003081042">"Favoriete contacten delen"</string>
     <string name="share_contacts" msgid="8109287987498711664">"Alle contacten delen"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"Kan contacten niet delen."</string>
-    <string name="dialog_import_export" msgid="4360648034889921624">"Contacten importeren/exporteren"</string>
+    <!-- no translation found for dialog_export (1628001095187741417) -->
+    <skip />
     <string name="dialog_import" msgid="2431698729761448759">"Contacten importeren"</string>
     <string name="share_error" msgid="948429331673358107">"Dit contact kan niet worden gedeeld."</string>
     <string name="no_contact_to_share" msgid="1276397530378323033">"Er zijn geen contacten om te delen."</string>
@@ -570,7 +563,10 @@
     <string name="menu_clear_frequents" msgid="7688250191932838833">"Regelmatige contacten wissen"</string>
     <string name="menu_select_sim" msgid="3603578201960504010">"Simkaart selecteren"</string>
     <string name="menu_accounts" msgid="1424330057450189074">"Accounts beheren"</string>
-    <string name="menu_import_export" msgid="26217871113229507">"Importeren/exporteren"</string>
+    <!-- no translation found for menu_import (6107961135813836467) -->
+    <skip />
+    <!-- no translation found for menu_export (2658783911863503902) -->
+    <skip />
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"Geblokkeerde nummers"</string>
     <string name="contact_status_update_attribution" msgid="752179367353018597">"via <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> via <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
@@ -604,4 +600,8 @@
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> sec"</string>
     <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> sec"</string>
     <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> u <xliff:g id="MINUTES_1">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> sec"</string>
+    <!-- no translation found for dynamic_shortcut_disabled_message (249939425761315252) -->
+    <skip />
+    <!-- no translation found for dynamic_shortcut_contact_removed_message (6845645831837615899) -->
+    <skip />
 </resources>
diff --git a/res/values-pa-rIN/strings.xml b/res/values-pa-rIN/strings.xml
index 3780bd6..c0bfeea 100644
--- a/res/values-pa-rIN/strings.xml
+++ b/res/values-pa-rIN/strings.xml
@@ -67,6 +67,7 @@
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"ਸੁਝਾਏ ਗਏ ਸੰਪਰਕ"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"ਸਾਰੇ ਸੰਪਰਕ"</string>
     <string name="contactsJoinedMessage" msgid="3343535986195643136">"ਸੰਪਰਕ ਲਿੰਕ ਕੀਤੇ ਗਏ"</string>
+    <string name="contact_deleted_named_toast" msgid="6558941164987421174">"<xliff:g id="NAME">%s</xliff:g> ਨੂੰ ਮਿਟਾਇਆ ਗਿਆ"</string>
     <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
       <item quantity="one"> ਸੰਪਰਕ ਹਟਾਏ</item>
       <item quantity="other"> ਸੰਪਰਕ ਹਟਾਏ</item>
@@ -113,11 +114,11 @@
     <string name="emptyMainList" msgid="2772242747899664460">"ਤੁਹਾਡੀ ਸੰਪਰਕਾਂ ਦੀ ਸੂਚੀ ਖਾਲੀ ਹੈ"</string>
     <string name="contactSavedToast" msgid="9171862279493213075">"ਸੰਪਰਕ ਸਹੇਜਿਆ"</string>
     <string name="contactUnlinkedToast" msgid="7122823195786012553">"ਸੰਪਰਕ ਅਨਲਿੰਕ ਕੀਤੇ"</string>
-    <string name="contactSavedErrorToast" msgid="3207250533172944892">"ਸੰਪਰਕ ਬਦਲਾਵਾਂ ਨੂੰ ਸੁਰੱਖਿਅਤ ਨਹੀਂ ਕਰ ਸਕਿਆ।"</string>
-    <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"ਸੰਪਰਕ ਅਣਲਿੰਕ ਨਹੀਂ ਕਰ ਸਕਿਆ"</string>
-    <string name="contactJoinErrorToast" msgid="3977932531264809035">"ਸੰਪਰਕ ਲਿੰਕ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ।"</string>
-    <string name="contactGenericErrorToast" msgid="7774911165341591714">"ਸੰਪਰਕ ਸਹੇਜਣ ਦੌਰਾਨ ਗਲਤੀ।"</string>
-    <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"ਸੰਪਰਕ ਫੋਟੋ ਦੇ ਪਰਿਵਰਤਨਾਂ ਨੂੰ ਸੁਰੱਖਿਅਤ ਨਹੀਂ ਕਰ ਸਕਿਆ।"</string>
+    <string name="contactSavedErrorToast" msgid="4827033473908688031">"ਸੰਪਰਕ ਵਿੱਚ ਤਬਦੀਲੀਆਂ ਨੂੰ ਰੱਖਿਅਤ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ"</string>
+    <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"ਸੰਪਰਕ ਅਣਲਿੰਕ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ"</string>
+    <string name="contactJoinErrorToast" msgid="5735129234573327701">"ਸੰਪਰਕ ਨੂੰ ਲਿੰਕ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ"</string>
+    <string name="contactGenericErrorToast" msgid="3885457515665783976">"ਸੰਪਰਕ ਰੱਖਿਅਤ ਕਰਨ ਦੌਰਾਨ ਗੜਬੜ"</string>
+    <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"ਸੰਪਰਕ ਦੀ ਫ਼ੋਟੋ ਦੀਆਂ ਤਬਦੀਲੀਆਂ ਨੂੰ ਰੱਖਿਅਤ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"ਲੇਬਲ ਲੋਡ ਕਰਨਾ ਅਸਫਲ ਰਿਹਾ"</string>
     <string name="groupSavedToast" msgid="6491495462357722285">"ਲੇਬਲ ਰੱਖਿਅਤ ਕੀਤਾ ਗਿਆ"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"ਲੇਬਲ ਮਿਟਾਇਆ ਗਿਆ"</string>
@@ -126,7 +127,7 @@
     <string name="groupUpdatedToast" msgid="3667977658676267687">"ਲੇਬਲ ਅੱਪਡੇਟ ਕੀਤਾ ਗਿਆ"</string>
     <string name="groupMembersRemovedToast" msgid="3510563559799376603">"ਲੇਬਲ ਤੋਂ ਹਟਾਏ ਗਏ"</string>
     <string name="groupMembersAddedToast" msgid="4824834898718972768">"ਲੇਬਲ ਵਿੱਚ ਸ਼ਾਮਲ ਕੀਤਾ ਗਿਆ"</string>
-    <string name="groupSavedErrorToast" msgid="8121032018490980184">"ਲੇਬਲ ਬਦਲਾਆਂ ਨੂੰ ਰੱਖਿਅਤ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ।"</string>
+    <string name="groupSavedErrorToast" msgid="2355891714292740162">"ਲੇਬਲ ਤਬਦੀਲੀਆਂ ਨੂੰ ਰੱਖਿਅਤ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ"</string>
     <string name="groupExistsErrorMessage" msgid="5196811283836946189">"ਇਹ ਲੇਬਲ ਪਹਿਲਾਂ ਹੀ ਮੌਜੂਦ ਹੈ"</string>
     <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
       <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> ਫੋਨ ਨੰਬਰਾਂ ਵਾਲੇ ਸੰਪਰਕ</item>
@@ -147,7 +148,6 @@
     <string name="callAgain" msgid="3197312117049874778">"ਦੁਬਾਰਾ ਕਾਲ ਕਰੋ"</string>
     <string name="returnCall" msgid="8171961914203617813">"ਕਾਲ ਤੇ ਵਾਪਸ ਜਾਓ"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"ਕੀ \"<xliff:g id="EMAIL">%s</xliff:g>\" ਨੂੰ ਸੰਪਰਕਾਂ ਵਿੱਚ ਸ਼ਾਮਲ ਕਰਨਾ ਹੈ?"</string>
-    <string name="description_contact_photo" msgid="3387458082667894062">"ਸੰਪਰਕ ਫੋਟੋ"</string>
     <string name="description_plus_button" msgid="515164827856229880">"ਪਲਸ"</string>
     <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="TOTAL_NUMBER">%s</xliff:g> ਸੰਪਰਕਾਂ ਵਿੱਚੋਂ <xliff:g id="CURRENT_NUMBER">%s</xliff:g>"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"ਤੁਹਾਡੇ ਸੰਪਰਕਾਂ ਦੇ ਨਾਮ"</string>
@@ -192,7 +192,6 @@
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"ਮਿਤੀ"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"ਲੇਬਲ ਕਰੋ"</string>
     <string name="change_photo" msgid="8530597935483526383">"ਬਦਲੋ"</string>
-    <string name="primary_photo" msgid="8517942231868516999">"ਪ੍ਰਾਈਮਰੀ ਫੋਟੋ"</string>
     <string name="description_star" msgid="2605854427360036550">"ਮਨਪਸੰਦ"</string>
     <string name="edit_contact" msgid="7529281274005689512">"ਸੰਪਰਕ ਸੰਪਾਦਿਤ ਕਰੋ"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"ਬੰਦ ਕਰੋ"</string>
@@ -269,7 +268,6 @@
     <string name="header_name_entry" msgid="1592791008096288306">"ਨਾਮ"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"ਈਮੇਲ"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"ਫੋਨ"</string>
-    <string name="header_photo_entry" msgid="4438023151411853238">"ਫੋਟੋ"</string>
     <string name="content_description_expand_editor" msgid="1111381475901897470">"ਸੰਪਰਕ ਸੰਪਾਦਕ ਦਾ ਵਿਸਤਾਰ ਕਰਨ ਲਈ ਕਲਿਕ ਕਰੋ।"</string>
     <string name="content_description_collapse_editor" msgid="7598061318022977825">"ਸੰਪਰਕ ਸੰਪਾਦਕ ਨਸ਼ਟ ਕਰਨ ਲਈ ਕਲਿਕ ਕਰੋ।"</string>
     <string name="content_description_directions" msgid="2686791825798189335">"ਨਿਰਧਾਰਿਤ ਸਥਾਨ ਲਈ ਨਿਰਦੇਸ਼"</string>
@@ -284,6 +282,8 @@
     <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"ਫੋਟੋ ਬਦਲੋ"</string>
     <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"ਸੰਪਾਦਕ ਨੂੰ ਖੋਲ੍ਹਣ ਵਿੱਚ ਅਸਫਲ।"</string>
     <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"ਏਥੇ ਰੱਖਿਅਤ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ"</string>
+    <!-- no translation found for compact_editor_account_selector_read_only_title (1869435992721760221) -->
+    <skip />
     <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"ਮੌਜੂਦਾ ਤੌਰ \'ਤੇ <xliff:g id="ACCOUNT_NAME">%s</xliff:g> ਵਿੱਚ ਰੱਖਿਅਤ ਕਰ ਰਿਹਾ ਹੈ। ਇੱਕ ਵੱਖਰਾ ਖਾਤਾ ਚੁਣਨ ਲਈ ਦੋ ਵਾਰ ਟੈਪ ਕਰੋ।"</string>
     <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
       <item quantity="one"> ਲਿੰਕ ਕੀਤੇ ਗਏ ਸੰਪਰਕ ( <xliff:g id="COUNT">%d</xliff:g> )</item>
@@ -454,22 +454,14 @@
     <string name="chat_jabber" msgid="7561444230307829609">"Jabber ਵਰਤਦੇ ਹੋਏ ਚੈਟ ਕਰੋ"</string>
     <string name="chat" msgid="9025361898797412245">"ਚੈਟ"</string>
     <string name="description_minus_button" msgid="6908099247930477551">"ਮਿਟਾਓ"</string>
-    <!-- no translation found for expand_name_fields_description (6883935911480726652) -->
-    <skip />
-    <!-- no translation found for collapse_name_fields_description (4757877385895561556) -->
-    <skip />
-    <!-- no translation found for expand_phonetic_name_fields_description (3865726859582581741) -->
-    <skip />
-    <!-- no translation found for collapse_phonetic_name_fields_description (9102249481855019452) -->
-    <skip />
-    <!-- no translation found for expand_fields_description (8129294181216760037) -->
-    <skip />
-    <!-- no translation found for collapse_fields_description (1884143625854637874) -->
-    <skip />
-    <!-- no translation found for announce_expanded_fields (1075947220478530622) -->
-    <skip />
-    <!-- no translation found for announce_collapsed_fields (6414231530177338704) -->
-    <skip />
+    <string name="expand_name_fields_description" msgid="6883935911480726652">"ਨਾਮ ਖੇਤਰਾਂਂ ਦਾ ਵਿਸਤਾਰ ਕਰੋ"</string>
+    <string name="collapse_name_fields_description" msgid="4757877385895561556">"ਨਾਮ ਖੇਤਰਾਂ ਨੂੰ ਸੁੰਗੇੜੋ"</string>
+    <string name="expand_phonetic_name_fields_description" msgid="3865726859582581741">"ਫ਼ੋਨੈਟਿਕ ਨਾਮ ਖੇਤਰਾਂ ਦਾ ਵਿਸਤਾਰ ਕਰੋ"</string>
+    <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"ਫ਼ੋਨੈਟਿਕ ਨਾਮ ਖੇਤਰਾਂ ਨੂੰ ਸੁੰਗੇੜੋ"</string>
+    <string name="expand_fields_description" msgid="8129294181216760037">"ਵਿਸਤਾਰ ਕਰੋ"</string>
+    <string name="collapse_fields_description" msgid="1884143625854637874">"ਸੁੰਗੇੜੋ"</string>
+    <string name="announce_expanded_fields" msgid="1075947220478530622">"ਵਿਸਤਾਰ ਕੀਤਾ ਗਿਆ"</string>
+    <string name="announce_collapsed_fields" msgid="6414231530177338704">"ਸੁੰਗੇੜਿਆ ਗਿਆ"</string>
     <string name="list_filter_all_accounts" msgid="8908683398914322369">"ਸਾਰੇ ਸੰਪਰਕ"</string>
     <string name="list_filter_all_starred" msgid="5031734941601931356">"ਸਿਤਾਰਾਯੁਕਤ"</string>
     <string name="list_filter_customize" msgid="4789963356004169321">"ਵਿਸ਼ੇਸ਼-ਵਿਉਂਤਬੱਧ ਕਰੋ"</string>
@@ -555,7 +547,8 @@
     <string name="share_favorite_contacts" msgid="4280926751003081042">"ਮਨਪਸੰਦ ਸੰਪਰਕਾਂ ਨੂੰ ਸਾਂਝਾ ਕਰੋ"</string>
     <string name="share_contacts" msgid="8109287987498711664">"ਸਾਰੇ ਸੰਪਰਕ ਸਾਂਝੇ ਕਰੋ"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"ਸੰਪਰਕ ਸਾਂਝੇ ਕਰਨਾ ਅਸਫਲ ਰਿਹਾ।"</string>
-    <string name="dialog_import_export" msgid="4360648034889921624">"ਸੰਪਰਕ ਆਯਾਤ/ਨਿਰਯਾਤ ਕਰੋ"</string>
+    <!-- no translation found for dialog_export (1628001095187741417) -->
+    <skip />
     <string name="dialog_import" msgid="2431698729761448759">"ਸੰਪਰਕ ਆਯਾਤ ਕਰੋ"</string>
     <string name="share_error" msgid="948429331673358107">"ਇਸ ਸੰਪਰਕ ਨੂੰ ਸਾਂਝਾ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ।"</string>
     <string name="no_contact_to_share" msgid="1276397530378323033">"ਸਾਂਝਾ ਕਰਨ ਲਈ ਕੋਈ ਸੰਪਰਕ ਨਹੀਂ ਹਨ।"</string>
@@ -570,7 +563,10 @@
     <string name="menu_clear_frequents" msgid="7688250191932838833">"ਅਕਸਰ ਆਉਣ ਵਾਲਿਆਂ ਨੂੰ ਸਾਫ਼ ਕਰੋ"</string>
     <string name="menu_select_sim" msgid="3603578201960504010">"SIM ਕਾਰਡ ਚੁਣੋ"</string>
     <string name="menu_accounts" msgid="1424330057450189074">"ਖਾਤੇ ਪ੍ਰਬੰਧਿਤ ਕਰੋ"</string>
-    <string name="menu_import_export" msgid="26217871113229507">"ਆਯਾਤ/ਨਿਰਯਾਤ ਕਰੋ"</string>
+    <!-- no translation found for menu_import (6107961135813836467) -->
+    <skip />
+    <!-- no translation found for menu_export (2658783911863503902) -->
+    <skip />
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"ਬਲੌਕ ਕੀਤੇ ਨੰਬਰ"</string>
     <string name="contact_status_update_attribution" msgid="752179367353018597">"<xliff:g id="SOURCE">%1$s</xliff:g> ਦੇ ਰਾਹੀਂ"</string>
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="SOURCE">%2$s</xliff:g> ਦੇ ਰਾਹੀਂ <xliff:g id="DATE">%1$s</xliff:g>"</string>
@@ -604,4 +600,8 @@
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> ਸਕਿੰਟ"</string>
     <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> ਮਿੰਟ <xliff:g id="SECONDS">%s</xliff:g> ਸਕਿੰਟ"</string>
     <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> ਘੰਟੇ <xliff:g id="MINUTES_1">%s</xliff:g> ਮਿੰਟ <xliff:g id="SECONDS">%s</xliff:g> ਸਕਿੰਟ"</string>
+    <!-- no translation found for dynamic_shortcut_disabled_message (249939425761315252) -->
+    <skip />
+    <!-- no translation found for dynamic_shortcut_contact_removed_message (6845645831837615899) -->
+    <skip />
 </resources>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index 53e5310..1bd4749 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -67,6 +67,7 @@
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Sugerowane kontakty"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Wszystkie kontakty"</string>
     <string name="contactsJoinedMessage" msgid="3343535986195643136">"Kontakty zostały połączone"</string>
+    <string name="contact_deleted_named_toast" msgid="6558941164987421174">"Kontakt <xliff:g id="NAME">%s</xliff:g> usunięty"</string>
     <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
       <item quantity="few">Kontakty zostały usunięte</item>
       <item quantity="many">Kontakty zostały usunięte</item>
@@ -119,11 +120,11 @@
     <string name="emptyMainList" msgid="2772242747899664460">"Twoja lista kontaktów jest pusta"</string>
     <string name="contactSavedToast" msgid="9171862279493213075">"Kontakt został zapisany"</string>
     <string name="contactUnlinkedToast" msgid="7122823195786012553">"Kontakty zostały odłączone"</string>
-    <string name="contactSavedErrorToast" msgid="3207250533172944892">"Nie można zapisać zmian kontaktu."</string>
-    <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Nie udało się odłączyć kontaktu."</string>
-    <string name="contactJoinErrorToast" msgid="3977932531264809035">"Nie udało się połączyć kontaktu."</string>
-    <string name="contactGenericErrorToast" msgid="7774911165341591714">"Błąd podczas zapisywania kontaktu."</string>
-    <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"Nie udało się zapisać zmian wprowadzonych w zdjęciu kontaktu."</string>
+    <string name="contactSavedErrorToast" msgid="4827033473908688031">"Nie udało się zapisać zmian kontaktu"</string>
+    <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"Nie udało się odłączyć kontaktu"</string>
+    <string name="contactJoinErrorToast" msgid="5735129234573327701">"Nie udało się połączyć kontaktu"</string>
+    <string name="contactGenericErrorToast" msgid="3885457515665783976">"Podczas zapisywania kontaktu wystąpił błąd"</string>
+    <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Nie udało się zapisać zmian zdjęcia kontaktu"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"Nie udało się załadować etykiety"</string>
     <string name="groupSavedToast" msgid="6491495462357722285">"Etykieta została zapisana"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Etykieta usunięta"</string>
@@ -132,7 +133,7 @@
     <string name="groupUpdatedToast" msgid="3667977658676267687">"Etykieta została zaktualizowana"</string>
     <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Usunięty z etykiety"</string>
     <string name="groupMembersAddedToast" msgid="4824834898718972768">"Dodano do etykiety"</string>
-    <string name="groupSavedErrorToast" msgid="8121032018490980184">"Nie udało się zapisać zmian w etykiecie."</string>
+    <string name="groupSavedErrorToast" msgid="2355891714292740162">"Nie udało się zapisać zmian etykiety"</string>
     <string name="groupExistsErrorMessage" msgid="5196811283836946189">"Ta etykieta już istnieje"</string>
     <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
       <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> kontakty z numerami telefonu</item>
@@ -159,7 +160,6 @@
     <string name="callAgain" msgid="3197312117049874778">"Zadzwoń ponownie"</string>
     <string name="returnCall" msgid="8171961914203617813">"Połączenie zwrotne"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Czy dodać adres „<xliff:g id="EMAIL">%s</xliff:g>” do kontaktów?"</string>
-    <string name="description_contact_photo" msgid="3387458082667894062">"zdjęcie kontaktu"</string>
     <string name="description_plus_button" msgid="515164827856229880">"plus"</string>
     <string name="exporting_contact_list_progress" msgid="560522409559101193">"Kontakt <xliff:g id="CURRENT_NUMBER">%s</xliff:g> z <xliff:g id="TOTAL_NUMBER">%s</xliff:g>"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"Imiona i nazwiska oraz nazwy w Twoich kontaktach"</string>
@@ -206,7 +206,6 @@
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Data"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Dodaj etykietę"</string>
     <string name="change_photo" msgid="8530597935483526383">"Zmień"</string>
-    <string name="primary_photo" msgid="8517942231868516999">"Główne zdjęcie"</string>
     <string name="description_star" msgid="2605854427360036550">"ulubione"</string>
     <string name="edit_contact" msgid="7529281274005689512">"Edytuj kontakt"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"zamknij"</string>
@@ -283,7 +282,6 @@
     <string name="header_name_entry" msgid="1592791008096288306">"Imię i nazwisko"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"E-mail"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"Telefon"</string>
-    <string name="header_photo_entry" msgid="4438023151411853238">"Zdjęcie"</string>
     <string name="content_description_expand_editor" msgid="1111381475901897470">"Kliknij, by rozwinąć edytor kontaktów."</string>
     <string name="content_description_collapse_editor" msgid="7598061318022977825">"Kliknij, by zwinąć edytor kontaktów."</string>
     <string name="content_description_directions" msgid="2686791825798189335">"trasa do lokalizacji"</string>
@@ -298,6 +296,8 @@
     <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Zmień zdjęcie"</string>
     <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Nie udało się otworzyć edytora."</string>
     <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Zapisz na koncie"</string>
+    <!-- no translation found for compact_editor_account_selector_read_only_title (1869435992721760221) -->
+    <skip />
     <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"Obecnie zapisujesz na koncie <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Kliknij dwukrotnie, by wybrać inne."</string>
     <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
       <item quantity="few">Kontakty połączone (<xliff:g id="COUNT">%d</xliff:g>)</item>
@@ -476,22 +476,14 @@
     <string name="chat_jabber" msgid="7561444230307829609">"Czat w Jabberze"</string>
     <string name="chat" msgid="9025361898797412245">"Czat"</string>
     <string name="description_minus_button" msgid="6908099247930477551">"usuń"</string>
-    <!-- no translation found for expand_name_fields_description (6883935911480726652) -->
-    <skip />
-    <!-- no translation found for collapse_name_fields_description (4757877385895561556) -->
-    <skip />
-    <!-- no translation found for expand_phonetic_name_fields_description (3865726859582581741) -->
-    <skip />
-    <!-- no translation found for collapse_phonetic_name_fields_description (9102249481855019452) -->
-    <skip />
-    <!-- no translation found for expand_fields_description (8129294181216760037) -->
-    <skip />
-    <!-- no translation found for collapse_fields_description (1884143625854637874) -->
-    <skip />
-    <!-- no translation found for announce_expanded_fields (1075947220478530622) -->
-    <skip />
-    <!-- no translation found for announce_collapsed_fields (6414231530177338704) -->
-    <skip />
+    <string name="expand_name_fields_description" msgid="6883935911480726652">"Rozwiń pola imion i nazwisk"</string>
+    <string name="collapse_name_fields_description" msgid="4757877385895561556">"Zwiń pola imion i nazwisk"</string>
+    <string name="expand_phonetic_name_fields_description" msgid="3865726859582581741">"Rozwiń pola imion i nazwisk zapisanych fonetycznie"</string>
+    <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Zwiń pola imion i nazwisk zapisanych fonetycznie"</string>
+    <string name="expand_fields_description" msgid="8129294181216760037">"Rozwiń"</string>
+    <string name="collapse_fields_description" msgid="1884143625854637874">"Zwiń"</string>
+    <string name="announce_expanded_fields" msgid="1075947220478530622">"Rozwinięto"</string>
+    <string name="announce_collapsed_fields" msgid="6414231530177338704">"Zwinięto"</string>
     <string name="list_filter_all_accounts" msgid="8908683398914322369">"Wszystkie kontakty"</string>
     <string name="list_filter_all_starred" msgid="5031734941601931356">"Oznaczone gwiazdką"</string>
     <string name="list_filter_customize" msgid="4789963356004169321">"Dostosuj"</string>
@@ -577,7 +569,8 @@
     <string name="share_favorite_contacts" msgid="4280926751003081042">"Udostępnij ulubione kontakty"</string>
     <string name="share_contacts" msgid="8109287987498711664">"Udostępnij wszystkie kontakty"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"Nie udało się udostępnić kontaktów."</string>
-    <string name="dialog_import_export" msgid="4360648034889921624">"Importuj/eksportuj kontakty"</string>
+    <!-- no translation found for dialog_export (1628001095187741417) -->
+    <skip />
     <string name="dialog_import" msgid="2431698729761448759">"Importuj kontakty"</string>
     <string name="share_error" msgid="948429331673358107">"Tego kontaktu nie można udostępniać."</string>
     <string name="no_contact_to_share" msgid="1276397530378323033">"Brak kontaktów do udostępnienia."</string>
@@ -592,7 +585,10 @@
     <string name="menu_clear_frequents" msgid="7688250191932838833">"Wyczyść częste kontakty"</string>
     <string name="menu_select_sim" msgid="3603578201960504010">"Wybierz kartę SIM"</string>
     <string name="menu_accounts" msgid="1424330057450189074">"Zarządzaj kontami"</string>
-    <string name="menu_import_export" msgid="26217871113229507">"Importuj/eksportuj"</string>
+    <!-- no translation found for menu_import (6107961135813836467) -->
+    <skip />
+    <!-- no translation found for menu_export (2658783911863503902) -->
+    <skip />
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"Zablokowane numery"</string>
     <string name="contact_status_update_attribution" msgid="752179367353018597">"przez: <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g>, przez: <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
@@ -628,4 +624,8 @@
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> s"</string>
     <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
     <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> godz. <xliff:g id="MINUTES_1">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
+    <!-- no translation found for dynamic_shortcut_disabled_message (249939425761315252) -->
+    <skip />
+    <!-- no translation found for dynamic_shortcut_contact_removed_message (6845645831837615899) -->
+    <skip />
 </resources>
diff --git a/res/values-pt-rBR/strings.xml b/res/values-pt-rBR/strings.xml
index 91f88cc..61e48e1 100644
--- a/res/values-pt-rBR/strings.xml
+++ b/res/values-pt-rBR/strings.xml
@@ -67,6 +67,7 @@
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Contatos sugeridos"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Todos os contatos"</string>
     <string name="contactsJoinedMessage" msgid="3343535986195643136">"Contatos vinculados"</string>
+    <string name="contact_deleted_named_toast" msgid="6558941164987421174">"<xliff:g id="NAME">%s</xliff:g> excluído"</string>
     <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
       <item quantity="one">Contatos excluídos</item>
       <item quantity="other">Contatos excluídos</item>
@@ -113,11 +114,11 @@
     <string name="emptyMainList" msgid="2772242747899664460">"Sua lista de contatos está vazia"</string>
     <string name="contactSavedToast" msgid="9171862279493213075">"O contato foi salvo"</string>
     <string name="contactUnlinkedToast" msgid="7122823195786012553">"Contatos desvinculados"</string>
-    <string name="contactSavedErrorToast" msgid="3207250533172944892">"Não foi possível salvar as alterações do contato."</string>
-    <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Não foi possível desvincular contato."</string>
-    <string name="contactJoinErrorToast" msgid="3977932531264809035">"Não foi possível vincular o contato."</string>
-    <string name="contactGenericErrorToast" msgid="7774911165341591714">"Erro ao salvar contato."</string>
-    <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"Não foi possível salvar as alterações da foto de contato."</string>
+    <string name="contactSavedErrorToast" msgid="4827033473908688031">"Não foi possível salvar as alterações do contato"</string>
+    <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"Não foi possível desvincular contato"</string>
+    <string name="contactJoinErrorToast" msgid="5735129234573327701">"Não foi possível vincular o contato"</string>
+    <string name="contactGenericErrorToast" msgid="3885457515665783976">"Erro ao salvar o contato"</string>
+    <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Não foi possível salvar as alterações da foto de contato"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"Falha ao carregar o marcador"</string>
     <string name="groupSavedToast" msgid="6491495462357722285">"Marcador salvo"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Marcador excluído"</string>
@@ -126,7 +127,7 @@
     <string name="groupUpdatedToast" msgid="3667977658676267687">"Marcador atualizado"</string>
     <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Removido do marcador"</string>
     <string name="groupMembersAddedToast" msgid="4824834898718972768">"Adicionado ao marcador"</string>
-    <string name="groupSavedErrorToast" msgid="8121032018490980184">"Não foi possível salvar as alterações do marcador."</string>
+    <string name="groupSavedErrorToast" msgid="2355891714292740162">"Não foi possível salvar as alterações do marcador"</string>
     <string name="groupExistsErrorMessage" msgid="5196811283836946189">"Este marcador já existe"</string>
     <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
       <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> contatos com números de telefone</item>
@@ -147,7 +148,6 @@
     <string name="callAgain" msgid="3197312117049874778">"Ligar novamente"</string>
     <string name="returnCall" msgid="8171961914203617813">"Retornar chamada"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Adicionar \"<xliff:g id="EMAIL">%s</xliff:g>\" aos contatos?"</string>
-    <string name="description_contact_photo" msgid="3387458082667894062">"foto do contato"</string>
     <string name="description_plus_button" msgid="515164827856229880">"mais"</string>
     <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> de <xliff:g id="TOTAL_NUMBER">%s</xliff:g> contatos"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"Nomes dos seus contatos"</string>
@@ -192,7 +192,6 @@
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Data"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Marcador"</string>
     <string name="change_photo" msgid="8530597935483526383">"Alterar"</string>
-    <string name="primary_photo" msgid="8517942231868516999">"Foto principal"</string>
     <string name="description_star" msgid="2605854427360036550">"favorito"</string>
     <string name="edit_contact" msgid="7529281274005689512">"Editar contato"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"fechar"</string>
@@ -269,7 +268,6 @@
     <string name="header_name_entry" msgid="1592791008096288306">"Nome"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"E-mail"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"Telefone"</string>
-    <string name="header_photo_entry" msgid="4438023151411853238">"Foto"</string>
     <string name="content_description_expand_editor" msgid="1111381475901897470">"Clique para expandir o editor de contatos."</string>
     <string name="content_description_collapse_editor" msgid="7598061318022977825">"Clique para recolher o editor de contatos."</string>
     <string name="content_description_directions" msgid="2686791825798189335">"rotas até o local"</string>
@@ -284,6 +282,8 @@
     <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Alterar foto"</string>
     <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Falha ao abrir o editor."</string>
     <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Salvar em"</string>
+    <!-- no translation found for compact_editor_account_selector_read_only_title (1869435992721760221) -->
+    <skip />
     <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"Salvando em <xliff:g id="ACCOUNT_NAME">%s</xliff:g> no momento. Toque duas vezes para escolher uma conta diferente."</string>
     <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
       <item quantity="one">Contatos vinculados (<xliff:g id="COUNT">%d</xliff:g>)</item>
@@ -454,22 +454,14 @@
     <string name="chat_jabber" msgid="7561444230307829609">"Bater papo usando o Jabber"</string>
     <string name="chat" msgid="9025361898797412245">"Bate-papo"</string>
     <string name="description_minus_button" msgid="6908099247930477551">"excluir"</string>
-    <!-- no translation found for expand_name_fields_description (6883935911480726652) -->
-    <skip />
-    <!-- no translation found for collapse_name_fields_description (4757877385895561556) -->
-    <skip />
-    <!-- no translation found for expand_phonetic_name_fields_description (3865726859582581741) -->
-    <skip />
-    <!-- no translation found for collapse_phonetic_name_fields_description (9102249481855019452) -->
-    <skip />
-    <!-- no translation found for expand_fields_description (8129294181216760037) -->
-    <skip />
-    <!-- no translation found for collapse_fields_description (1884143625854637874) -->
-    <skip />
-    <!-- no translation found for announce_expanded_fields (1075947220478530622) -->
-    <skip />
-    <!-- no translation found for announce_collapsed_fields (6414231530177338704) -->
-    <skip />
+    <string name="expand_name_fields_description" msgid="6883935911480726652">"Expandir campos de nome"</string>
+    <string name="collapse_name_fields_description" msgid="4757877385895561556">"Recolher campos de nome"</string>
+    <string name="expand_phonetic_name_fields_description" msgid="3865726859582581741">"Expandir campos de nome fonético"</string>
+    <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Recolher campos de nome fonético"</string>
+    <string name="expand_fields_description" msgid="8129294181216760037">"Expandir"</string>
+    <string name="collapse_fields_description" msgid="1884143625854637874">"Recolher"</string>
+    <string name="announce_expanded_fields" msgid="1075947220478530622">"Expandido"</string>
+    <string name="announce_collapsed_fields" msgid="6414231530177338704">"Recolhido"</string>
     <string name="list_filter_all_accounts" msgid="8908683398914322369">"Todos os contatos"</string>
     <string name="list_filter_all_starred" msgid="5031734941601931356">"Com estrela"</string>
     <string name="list_filter_customize" msgid="4789963356004169321">"Personalizar"</string>
@@ -555,7 +547,8 @@
     <string name="share_favorite_contacts" msgid="4280926751003081042">"Compartilhar contatos favoritos"</string>
     <string name="share_contacts" msgid="8109287987498711664">"Compartilhar todos os contatos"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"Falha ao compartilhar contatos."</string>
-    <string name="dialog_import_export" msgid="4360648034889921624">"Importar/Exportar contatos"</string>
+    <!-- no translation found for dialog_export (1628001095187741417) -->
+    <skip />
     <string name="dialog_import" msgid="2431698729761448759">"Importar contatos"</string>
     <string name="share_error" msgid="948429331673358107">"Este contato não pode ser compartilhado."</string>
     <string name="no_contact_to_share" msgid="1276397530378323033">"Não há contatos para compartilhar."</string>
@@ -570,7 +563,10 @@
     <string name="menu_clear_frequents" msgid="7688250191932838833">"Apagar frequentes"</string>
     <string name="menu_select_sim" msgid="3603578201960504010">"Selecionar cartão SIM"</string>
     <string name="menu_accounts" msgid="1424330057450189074">"Gerenciar contas"</string>
-    <string name="menu_import_export" msgid="26217871113229507">"Importar/Exportar"</string>
+    <!-- no translation found for menu_import (6107961135813836467) -->
+    <skip />
+    <!-- no translation found for menu_export (2658783911863503902) -->
+    <skip />
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"Números bloqueados"</string>
     <string name="contact_status_update_attribution" msgid="752179367353018597">"por meio de <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> via <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
@@ -604,4 +600,8 @@
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> s"</string>
     <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
     <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> h <xliff:g id="MINUTES_1">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
+    <!-- no translation found for dynamic_shortcut_disabled_message (249939425761315252) -->
+    <skip />
+    <!-- no translation found for dynamic_shortcut_contact_removed_message (6845645831837615899) -->
+    <skip />
 </resources>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index 7b02245..ff72785 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -67,6 +67,7 @@
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Contactos sugeridos"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Todos os contactos"</string>
     <string name="contactsJoinedMessage" msgid="3343535986195643136">"Contacts linked"</string>
+    <string name="contact_deleted_named_toast" msgid="6558941164987421174">"O contacto <xliff:g id="NAME">%s</xliff:g> foi eliminado"</string>
     <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
       <item quantity="other">Contactos eliminados</item>
       <item quantity="one">Contacto eliminado</item>
@@ -113,11 +114,11 @@
     <string name="emptyMainList" msgid="2772242747899664460">"A sua lista de contactos está vazia"</string>
     <string name="contactSavedToast" msgid="9171862279493213075">"Contacto guardado"</string>
     <string name="contactUnlinkedToast" msgid="7122823195786012553">"Contactos desassociados"</string>
-    <string name="contactSavedErrorToast" msgid="3207250533172944892">"Não foi possível guardar as alterações do contacto."</string>
-    <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Não foi possível desassociar o contacto."</string>
-    <string name="contactJoinErrorToast" msgid="3977932531264809035">"Não foi possível ligar o contacto."</string>
-    <string name="contactGenericErrorToast" msgid="7774911165341591714">"Ocorreu um erro ao guardar o contacto."</string>
-    <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"Não foi possível guardar as alterações à foto do contacto."</string>
+    <string name="contactSavedErrorToast" msgid="4827033473908688031">"Não foi possível guardar as alterações do contacto"</string>
+    <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"Não foi possível desassociar o contacto"</string>
+    <string name="contactJoinErrorToast" msgid="5735129234573327701">"Não foi possível associar o contacto"</string>
+    <string name="contactGenericErrorToast" msgid="3885457515665783976">"Ocorreu um erro ao guardar o contacto"</string>
+    <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Não foi possível guardar as alterações da foto do contacto"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"Falha ao carregar a etiqueta"</string>
     <string name="groupSavedToast" msgid="6491495462357722285">"Etiqueta guardada"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Etiqueta eliminada"</string>
@@ -126,7 +127,7 @@
     <string name="groupUpdatedToast" msgid="3667977658676267687">"Etiqueta atualizada"</string>
     <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Removido da etiqueta"</string>
     <string name="groupMembersAddedToast" msgid="4824834898718972768">"Adicionado(s) à etiqueta"</string>
-    <string name="groupSavedErrorToast" msgid="8121032018490980184">"Não foi possível guardar as alterações da etiqueta."</string>
+    <string name="groupSavedErrorToast" msgid="2355891714292740162">"Não foi possível guardar as alterações da etiqueta"</string>
     <string name="groupExistsErrorMessage" msgid="5196811283836946189">"Essa etiqueta já existe"</string>
     <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
       <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> contactos com números de telefone</item>
@@ -147,7 +148,6 @@
     <string name="callAgain" msgid="3197312117049874778">"Ligar novamente"</string>
     <string name="returnCall" msgid="8171961914203617813">"Devolver chamada"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Adicionar \"<xliff:g id="EMAIL">%s</xliff:g>\" aos contactos?"</string>
-    <string name="description_contact_photo" msgid="3387458082667894062">"fotografia do contacto"</string>
     <string name="description_plus_button" msgid="515164827856229880">"mais"</string>
     <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> de <xliff:g id="TOTAL_NUMBER">%s</xliff:g> contactos"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"Nomes dos contactos"</string>
@@ -192,7 +192,6 @@
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Data"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Etiqueta"</string>
     <string name="change_photo" msgid="8530597935483526383">"Alterar"</string>
-    <string name="primary_photo" msgid="8517942231868516999">"Fot. principal"</string>
     <string name="description_star" msgid="2605854427360036550">"favorito"</string>
     <string name="edit_contact" msgid="7529281274005689512">"Editar contacto"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"fechar"</string>
@@ -269,7 +268,6 @@
     <string name="header_name_entry" msgid="1592791008096288306">"Nome"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"Email"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"Telemóvel"</string>
-    <string name="header_photo_entry" msgid="4438023151411853238">"Fotografia"</string>
     <string name="content_description_expand_editor" msgid="1111381475901897470">"Clique para expandir o editor de contactos."</string>
     <string name="content_description_collapse_editor" msgid="7598061318022977825">"Clique para reduzir o editor de contactos."</string>
     <string name="content_description_directions" msgid="2686791825798189335">"direções para a localização"</string>
@@ -284,6 +282,8 @@
     <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Alterar foto"</string>
     <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Falha ao abrir o editor."</string>
     <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"A guardar em"</string>
+    <!-- no translation found for compact_editor_account_selector_read_only_title (1869435992721760221) -->
+    <skip />
     <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"A guardar atualmente em <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Toque duas vezes para escolher uma conta diferente."</string>
     <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
       <item quantity="other">Contactos ligados (<xliff:g id="COUNT">%d</xliff:g>)</item>
@@ -454,22 +454,14 @@
     <string name="chat_jabber" msgid="7561444230307829609">"Chat utilizando Jabber"</string>
     <string name="chat" msgid="9025361898797412245">"Chat"</string>
     <string name="description_minus_button" msgid="6908099247930477551">"eliminar"</string>
-    <!-- no translation found for expand_name_fields_description (6883935911480726652) -->
-    <skip />
-    <!-- no translation found for collapse_name_fields_description (4757877385895561556) -->
-    <skip />
-    <!-- no translation found for expand_phonetic_name_fields_description (3865726859582581741) -->
-    <skip />
-    <!-- no translation found for collapse_phonetic_name_fields_description (9102249481855019452) -->
-    <skip />
-    <!-- no translation found for expand_fields_description (8129294181216760037) -->
-    <skip />
-    <!-- no translation found for collapse_fields_description (1884143625854637874) -->
-    <skip />
-    <!-- no translation found for announce_expanded_fields (1075947220478530622) -->
-    <skip />
-    <!-- no translation found for announce_collapsed_fields (6414231530177338704) -->
-    <skip />
+    <string name="expand_name_fields_description" msgid="6883935911480726652">"Expandir os campos de nomes"</string>
+    <string name="collapse_name_fields_description" msgid="4757877385895561556">"Reduzir os campos de nomes"</string>
+    <string name="expand_phonetic_name_fields_description" msgid="3865726859582581741">"Expandir os campos de nomes fonéticos"</string>
+    <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Reduzir os campos de nomes fonéticos"</string>
+    <string name="expand_fields_description" msgid="8129294181216760037">"Expandir"</string>
+    <string name="collapse_fields_description" msgid="1884143625854637874">"Reduzir"</string>
+    <string name="announce_expanded_fields" msgid="1075947220478530622">"Expandido"</string>
+    <string name="announce_collapsed_fields" msgid="6414231530177338704">"Reduzido"</string>
     <string name="list_filter_all_accounts" msgid="8908683398914322369">"Todos os contactos"</string>
     <string name="list_filter_all_starred" msgid="5031734941601931356">"Marcado com estrela"</string>
     <string name="list_filter_customize" msgid="4789963356004169321">"Personalizar"</string>
@@ -555,7 +547,8 @@
     <string name="share_favorite_contacts" msgid="4280926751003081042">"Partilhar contactos favoritos"</string>
     <string name="share_contacts" msgid="8109287987498711664">"Partilhar todos os contactos"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"Falha ao partilhar os contactos."</string>
-    <string name="dialog_import_export" msgid="4360648034889921624">"Importar/export. contactos"</string>
+    <!-- no translation found for dialog_export (1628001095187741417) -->
+    <skip />
     <string name="dialog_import" msgid="2431698729761448759">"Importar contactos"</string>
     <string name="share_error" msgid="948429331673358107">"Não é possível partilhar este contacto."</string>
     <string name="no_contact_to_share" msgid="1276397530378323033">"Não existem contactos para partilhar."</string>
@@ -570,7 +563,10 @@
     <string name="menu_clear_frequents" msgid="7688250191932838833">"Limpar frequentes"</string>
     <string name="menu_select_sim" msgid="3603578201960504010">"Selecionar cartão SIM"</string>
     <string name="menu_accounts" msgid="1424330057450189074">"Gerir contas"</string>
-    <string name="menu_import_export" msgid="26217871113229507">"Importar/exportar"</string>
+    <!-- no translation found for menu_import (6107961135813836467) -->
+    <skip />
+    <!-- no translation found for menu_export (2658783911863503902) -->
+    <skip />
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"Números bloqueados"</string>
     <string name="contact_status_update_attribution" msgid="752179367353018597">"através do <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> através do <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
@@ -604,4 +600,8 @@
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> seg"</string>
     <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> seg"</string>
     <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> h <xliff:g id="MINUTES_1">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> seg"</string>
+    <!-- no translation found for dynamic_shortcut_disabled_message (249939425761315252) -->
+    <skip />
+    <!-- no translation found for dynamic_shortcut_contact_removed_message (6845645831837615899) -->
+    <skip />
 </resources>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index 91f88cc..61e48e1 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -67,6 +67,7 @@
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Contatos sugeridos"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Todos os contatos"</string>
     <string name="contactsJoinedMessage" msgid="3343535986195643136">"Contatos vinculados"</string>
+    <string name="contact_deleted_named_toast" msgid="6558941164987421174">"<xliff:g id="NAME">%s</xliff:g> excluído"</string>
     <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
       <item quantity="one">Contatos excluídos</item>
       <item quantity="other">Contatos excluídos</item>
@@ -113,11 +114,11 @@
     <string name="emptyMainList" msgid="2772242747899664460">"Sua lista de contatos está vazia"</string>
     <string name="contactSavedToast" msgid="9171862279493213075">"O contato foi salvo"</string>
     <string name="contactUnlinkedToast" msgid="7122823195786012553">"Contatos desvinculados"</string>
-    <string name="contactSavedErrorToast" msgid="3207250533172944892">"Não foi possível salvar as alterações do contato."</string>
-    <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Não foi possível desvincular contato."</string>
-    <string name="contactJoinErrorToast" msgid="3977932531264809035">"Não foi possível vincular o contato."</string>
-    <string name="contactGenericErrorToast" msgid="7774911165341591714">"Erro ao salvar contato."</string>
-    <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"Não foi possível salvar as alterações da foto de contato."</string>
+    <string name="contactSavedErrorToast" msgid="4827033473908688031">"Não foi possível salvar as alterações do contato"</string>
+    <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"Não foi possível desvincular contato"</string>
+    <string name="contactJoinErrorToast" msgid="5735129234573327701">"Não foi possível vincular o contato"</string>
+    <string name="contactGenericErrorToast" msgid="3885457515665783976">"Erro ao salvar o contato"</string>
+    <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Não foi possível salvar as alterações da foto de contato"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"Falha ao carregar o marcador"</string>
     <string name="groupSavedToast" msgid="6491495462357722285">"Marcador salvo"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Marcador excluído"</string>
@@ -126,7 +127,7 @@
     <string name="groupUpdatedToast" msgid="3667977658676267687">"Marcador atualizado"</string>
     <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Removido do marcador"</string>
     <string name="groupMembersAddedToast" msgid="4824834898718972768">"Adicionado ao marcador"</string>
-    <string name="groupSavedErrorToast" msgid="8121032018490980184">"Não foi possível salvar as alterações do marcador."</string>
+    <string name="groupSavedErrorToast" msgid="2355891714292740162">"Não foi possível salvar as alterações do marcador"</string>
     <string name="groupExistsErrorMessage" msgid="5196811283836946189">"Este marcador já existe"</string>
     <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
       <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> contatos com números de telefone</item>
@@ -147,7 +148,6 @@
     <string name="callAgain" msgid="3197312117049874778">"Ligar novamente"</string>
     <string name="returnCall" msgid="8171961914203617813">"Retornar chamada"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Adicionar \"<xliff:g id="EMAIL">%s</xliff:g>\" aos contatos?"</string>
-    <string name="description_contact_photo" msgid="3387458082667894062">"foto do contato"</string>
     <string name="description_plus_button" msgid="515164827856229880">"mais"</string>
     <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> de <xliff:g id="TOTAL_NUMBER">%s</xliff:g> contatos"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"Nomes dos seus contatos"</string>
@@ -192,7 +192,6 @@
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Data"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Marcador"</string>
     <string name="change_photo" msgid="8530597935483526383">"Alterar"</string>
-    <string name="primary_photo" msgid="8517942231868516999">"Foto principal"</string>
     <string name="description_star" msgid="2605854427360036550">"favorito"</string>
     <string name="edit_contact" msgid="7529281274005689512">"Editar contato"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"fechar"</string>
@@ -269,7 +268,6 @@
     <string name="header_name_entry" msgid="1592791008096288306">"Nome"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"E-mail"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"Telefone"</string>
-    <string name="header_photo_entry" msgid="4438023151411853238">"Foto"</string>
     <string name="content_description_expand_editor" msgid="1111381475901897470">"Clique para expandir o editor de contatos."</string>
     <string name="content_description_collapse_editor" msgid="7598061318022977825">"Clique para recolher o editor de contatos."</string>
     <string name="content_description_directions" msgid="2686791825798189335">"rotas até o local"</string>
@@ -284,6 +282,8 @@
     <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Alterar foto"</string>
     <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Falha ao abrir o editor."</string>
     <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Salvar em"</string>
+    <!-- no translation found for compact_editor_account_selector_read_only_title (1869435992721760221) -->
+    <skip />
     <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"Salvando em <xliff:g id="ACCOUNT_NAME">%s</xliff:g> no momento. Toque duas vezes para escolher uma conta diferente."</string>
     <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
       <item quantity="one">Contatos vinculados (<xliff:g id="COUNT">%d</xliff:g>)</item>
@@ -454,22 +454,14 @@
     <string name="chat_jabber" msgid="7561444230307829609">"Bater papo usando o Jabber"</string>
     <string name="chat" msgid="9025361898797412245">"Bate-papo"</string>
     <string name="description_minus_button" msgid="6908099247930477551">"excluir"</string>
-    <!-- no translation found for expand_name_fields_description (6883935911480726652) -->
-    <skip />
-    <!-- no translation found for collapse_name_fields_description (4757877385895561556) -->
-    <skip />
-    <!-- no translation found for expand_phonetic_name_fields_description (3865726859582581741) -->
-    <skip />
-    <!-- no translation found for collapse_phonetic_name_fields_description (9102249481855019452) -->
-    <skip />
-    <!-- no translation found for expand_fields_description (8129294181216760037) -->
-    <skip />
-    <!-- no translation found for collapse_fields_description (1884143625854637874) -->
-    <skip />
-    <!-- no translation found for announce_expanded_fields (1075947220478530622) -->
-    <skip />
-    <!-- no translation found for announce_collapsed_fields (6414231530177338704) -->
-    <skip />
+    <string name="expand_name_fields_description" msgid="6883935911480726652">"Expandir campos de nome"</string>
+    <string name="collapse_name_fields_description" msgid="4757877385895561556">"Recolher campos de nome"</string>
+    <string name="expand_phonetic_name_fields_description" msgid="3865726859582581741">"Expandir campos de nome fonético"</string>
+    <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Recolher campos de nome fonético"</string>
+    <string name="expand_fields_description" msgid="8129294181216760037">"Expandir"</string>
+    <string name="collapse_fields_description" msgid="1884143625854637874">"Recolher"</string>
+    <string name="announce_expanded_fields" msgid="1075947220478530622">"Expandido"</string>
+    <string name="announce_collapsed_fields" msgid="6414231530177338704">"Recolhido"</string>
     <string name="list_filter_all_accounts" msgid="8908683398914322369">"Todos os contatos"</string>
     <string name="list_filter_all_starred" msgid="5031734941601931356">"Com estrela"</string>
     <string name="list_filter_customize" msgid="4789963356004169321">"Personalizar"</string>
@@ -555,7 +547,8 @@
     <string name="share_favorite_contacts" msgid="4280926751003081042">"Compartilhar contatos favoritos"</string>
     <string name="share_contacts" msgid="8109287987498711664">"Compartilhar todos os contatos"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"Falha ao compartilhar contatos."</string>
-    <string name="dialog_import_export" msgid="4360648034889921624">"Importar/Exportar contatos"</string>
+    <!-- no translation found for dialog_export (1628001095187741417) -->
+    <skip />
     <string name="dialog_import" msgid="2431698729761448759">"Importar contatos"</string>
     <string name="share_error" msgid="948429331673358107">"Este contato não pode ser compartilhado."</string>
     <string name="no_contact_to_share" msgid="1276397530378323033">"Não há contatos para compartilhar."</string>
@@ -570,7 +563,10 @@
     <string name="menu_clear_frequents" msgid="7688250191932838833">"Apagar frequentes"</string>
     <string name="menu_select_sim" msgid="3603578201960504010">"Selecionar cartão SIM"</string>
     <string name="menu_accounts" msgid="1424330057450189074">"Gerenciar contas"</string>
-    <string name="menu_import_export" msgid="26217871113229507">"Importar/Exportar"</string>
+    <!-- no translation found for menu_import (6107961135813836467) -->
+    <skip />
+    <!-- no translation found for menu_export (2658783911863503902) -->
+    <skip />
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"Números bloqueados"</string>
     <string name="contact_status_update_attribution" msgid="752179367353018597">"por meio de <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> via <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
@@ -604,4 +600,8 @@
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> s"</string>
     <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
     <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> h <xliff:g id="MINUTES_1">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
+    <!-- no translation found for dynamic_shortcut_disabled_message (249939425761315252) -->
+    <skip />
+    <!-- no translation found for dynamic_shortcut_contact_removed_message (6845645831837615899) -->
+    <skip />
 </resources>
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
index cf8546e..40de4b1 100644
--- a/res/values-ro/strings.xml
+++ b/res/values-ro/strings.xml
@@ -67,6 +67,7 @@
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Persoane din agendă sugerate"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Toată agenda"</string>
     <string name="contactsJoinedMessage" msgid="3343535986195643136">"Persoanele de contact au fost asociate"</string>
+    <string name="contact_deleted_named_toast" msgid="6558941164987421174">"S-a șters <xliff:g id="NAME">%s</xliff:g>."</string>
     <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
       <item quantity="few">Persoane de contact șterse</item>
       <item quantity="other">Persoane de contact șterse</item>
@@ -116,11 +117,11 @@
     <string name="emptyMainList" msgid="2772242747899664460">"Lista cu persoane de contact este goală"</string>
     <string name="contactSavedToast" msgid="9171862279493213075">"Persoana din agendă a fost salvată"</string>
     <string name="contactUnlinkedToast" msgid="7122823195786012553">"Persoanele de contact au fost separate"</string>
-    <string name="contactSavedErrorToast" msgid="3207250533172944892">"Nu s-au putut salva modificările aduse persoanei de contact."</string>
-    <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Persoana de contact nu a putut fi separată."</string>
-    <string name="contactJoinErrorToast" msgid="3977932531264809035">"Persoana de contact nu a putut fi asociată."</string>
-    <string name="contactGenericErrorToast" msgid="7774911165341591714">"Eroare la salvarea persoanei de contact."</string>
-    <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"Modificările privind fotografia persoanei de contact nu au putut fi salvate."</string>
+    <string name="contactSavedErrorToast" msgid="4827033473908688031">"Nu s-au putut salva modificările persoanei de contact"</string>
+    <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"Persoana de contact nu a putut fi deconectată"</string>
+    <string name="contactJoinErrorToast" msgid="5735129234573327701">"Persoana de contact nu a putut fi asociată"</string>
+    <string name="contactGenericErrorToast" msgid="3885457515665783976">"Eroare la salvarea persoanei în Agendă"</string>
+    <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Nu s-au putut salva modificările fotografiei persoanei de contact"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"Nu s-a putut încărca eticheta"</string>
     <string name="groupSavedToast" msgid="6491495462357722285">"Eticheta a fost salvată"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Eticheta a fost ștearsă"</string>
@@ -129,7 +130,7 @@
     <string name="groupUpdatedToast" msgid="3667977658676267687">"Etichetă actualizată"</string>
     <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Eliminate din etichetă"</string>
     <string name="groupMembersAddedToast" msgid="4824834898718972768">"Adăugat(e) în etichetă"</string>
-    <string name="groupSavedErrorToast" msgid="8121032018490980184">"Modificările etichetei nu s-au salvat."</string>
+    <string name="groupSavedErrorToast" msgid="2355891714292740162">"Modificările etichetei nu s-au salvat"</string>
     <string name="groupExistsErrorMessage" msgid="5196811283836946189">"Eticheta există deja"</string>
     <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
       <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> persoane de contact cu numere de telefon</item>
@@ -153,7 +154,6 @@
     <string name="callAgain" msgid="3197312117049874778">"Apelați din nou"</string>
     <string name="returnCall" msgid="8171961914203617813">"Apelați înapoi"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Adăugați „<xliff:g id="EMAIL">%s</xliff:g>” în agendă?"</string>
-    <string name="description_contact_photo" msgid="3387458082667894062">"fotografia persoanei din agendă"</string>
     <string name="description_plus_button" msgid="515164827856229880">"plus"</string>
     <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> din <xliff:g id="TOTAL_NUMBER">%s</xliff:g> (de) persoane din agendă"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"Numele persoanelor din agenda dvs."</string>
@@ -199,7 +199,6 @@
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Dată"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Etichetă"</string>
     <string name="change_photo" msgid="8530597935483526383">"Modificați"</string>
-    <string name="primary_photo" msgid="8517942231868516999">"Foto. de bază"</string>
     <string name="description_star" msgid="2605854427360036550">"preferate"</string>
     <string name="edit_contact" msgid="7529281274005689512">"Editați informațiile despre persoana din agendă"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"închideți"</string>
@@ -276,7 +275,6 @@
     <string name="header_name_entry" msgid="1592791008096288306">"Nume"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"E-mail"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"Telefon"</string>
-    <string name="header_photo_entry" msgid="4438023151411853238">"Fotografie"</string>
     <string name="content_description_expand_editor" msgid="1111381475901897470">"Dați clic pentru a extinde editorul persoanei de contact."</string>
     <string name="content_description_collapse_editor" msgid="7598061318022977825">"Dați clic pentru a restrânge editorul persoanei de contact."</string>
     <string name="content_description_directions" msgid="2686791825798189335">"indicații de orientare către locație"</string>
@@ -291,6 +289,8 @@
     <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Schimbați fotografia"</string>
     <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Editorul nu a putut fi deschis."</string>
     <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Se salvează în"</string>
+    <!-- no translation found for compact_editor_account_selector_read_only_title (1869435992721760221) -->
+    <skip />
     <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"În prezent se salvează în <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Atingeți de două ori ca să alegeți alt cont."</string>
     <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
       <item quantity="few">Persoane de contact asociate (<xliff:g id="COUNT">%d</xliff:g>)</item>
@@ -465,22 +465,14 @@
     <string name="chat_jabber" msgid="7561444230307829609">"Conversați prin Jabber"</string>
     <string name="chat" msgid="9025361898797412245">"Conversați prin chat"</string>
     <string name="description_minus_button" msgid="6908099247930477551">"ștergeți"</string>
-    <!-- no translation found for expand_name_fields_description (6883935911480726652) -->
-    <skip />
-    <!-- no translation found for collapse_name_fields_description (4757877385895561556) -->
-    <skip />
-    <!-- no translation found for expand_phonetic_name_fields_description (3865726859582581741) -->
-    <skip />
-    <!-- no translation found for collapse_phonetic_name_fields_description (9102249481855019452) -->
-    <skip />
-    <!-- no translation found for expand_fields_description (8129294181216760037) -->
-    <skip />
-    <!-- no translation found for collapse_fields_description (1884143625854637874) -->
-    <skip />
-    <!-- no translation found for announce_expanded_fields (1075947220478530622) -->
-    <skip />
-    <!-- no translation found for announce_collapsed_fields (6414231530177338704) -->
-    <skip />
+    <string name="expand_name_fields_description" msgid="6883935911480726652">"Extindeți câmpurile de nume"</string>
+    <string name="collapse_name_fields_description" msgid="4757877385895561556">"Restrângeți câmpurile de nume"</string>
+    <string name="expand_phonetic_name_fields_description" msgid="3865726859582581741">"Extindeți câmpurile de nume fonetice"</string>
+    <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Restrângeți câmpurile de nume fonetice"</string>
+    <string name="expand_fields_description" msgid="8129294181216760037">"Extindeți"</string>
+    <string name="collapse_fields_description" msgid="1884143625854637874">"Restrângeți"</string>
+    <string name="announce_expanded_fields" msgid="1075947220478530622">"Extinse"</string>
+    <string name="announce_collapsed_fields" msgid="6414231530177338704">"Restrânse"</string>
     <string name="list_filter_all_accounts" msgid="8908683398914322369">"Toată agenda"</string>
     <string name="list_filter_all_starred" msgid="5031734941601931356">"Cu stea"</string>
     <string name="list_filter_customize" msgid="4789963356004169321">"Personalizați"</string>
@@ -566,7 +558,8 @@
     <string name="share_favorite_contacts" msgid="4280926751003081042">"Trimiteți persoanele preferate"</string>
     <string name="share_contacts" msgid="8109287987498711664">"Trimiteți toată agenda"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"Persoanele de contact nu s-au trimis."</string>
-    <string name="dialog_import_export" msgid="4360648034889921624">"Import/export contacte"</string>
+    <!-- no translation found for dialog_export (1628001095187741417) -->
+    <skip />
     <string name="dialog_import" msgid="2431698729761448759">"Importați Agenda"</string>
     <string name="share_error" msgid="948429331673358107">"Această persoană de contact nu poate fi distribuită."</string>
     <string name="no_contact_to_share" msgid="1276397530378323033">"Nu există persoane de contact de trimis."</string>
@@ -581,7 +574,10 @@
     <string name="menu_clear_frequents" msgid="7688250191932838833">"Șterg. pers. frecv. contact."</string>
     <string name="menu_select_sim" msgid="3603578201960504010">"Selectați cardul SIM"</string>
     <string name="menu_accounts" msgid="1424330057450189074">"Gestionați conturile"</string>
-    <string name="menu_import_export" msgid="26217871113229507">"Importați/exportați"</string>
+    <!-- no translation found for menu_import (6107961135813836467) -->
+    <skip />
+    <!-- no translation found for menu_export (2658783911863503902) -->
+    <skip />
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"Numere blocate"</string>
     <string name="contact_status_update_attribution" msgid="752179367353018597">"de pe <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"La ora <xliff:g id="DATE">%1$s</xliff:g> de pe <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
@@ -616,4 +612,8 @@
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> sec."</string>
     <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> min. <xliff:g id="SECONDS">%s</xliff:g> sec."</string>
     <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> h. <xliff:g id="MINUTES_1">%s</xliff:g> min. <xliff:g id="SECONDS">%s</xliff:g> sec."</string>
+    <!-- no translation found for dynamic_shortcut_disabled_message (249939425761315252) -->
+    <skip />
+    <!-- no translation found for dynamic_shortcut_contact_removed_message (6845645831837615899) -->
+    <skip />
 </resources>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index c97c42a..14460f4 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -67,6 +67,7 @@
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Предлагаемые контакты"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Все контакты"</string>
     <string name="contactsJoinedMessage" msgid="3343535986195643136">"Контакты связаны"</string>
+    <string name="contact_deleted_named_toast" msgid="6558941164987421174">"Контакт <xliff:g id="NAME">%s</xliff:g> удален"</string>
     <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
       <item quantity="one">Контакты удалены</item>
       <item quantity="few">Контакты удалены</item>
@@ -119,11 +120,11 @@
     <string name="emptyMainList" msgid="2772242747899664460">"Контактов нет"</string>
     <string name="contactSavedToast" msgid="9171862279493213075">"Контакт сохранен"</string>
     <string name="contactUnlinkedToast" msgid="7122823195786012553">"Контакты разделены"</string>
-    <string name="contactSavedErrorToast" msgid="3207250533172944892">"Не удалось сохранить изменения."</string>
-    <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Не удалось разделить контакты"</string>
-    <string name="contactJoinErrorToast" msgid="3977932531264809035">"Не удалось связать контакты"</string>
-    <string name="contactGenericErrorToast" msgid="7774911165341591714">"Не удалось сохранить контакт"</string>
-    <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"Не удалось сохранить изменения"</string>
+    <string name="contactSavedErrorToast" msgid="4827033473908688031">"Не удалось сохранить изменения"</string>
+    <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"Не удалось разделить контакты"</string>
+    <string name="contactJoinErrorToast" msgid="5735129234573327701">"Не удалось связать контакты"</string>
+    <string name="contactGenericErrorToast" msgid="3885457515665783976">"Не удалось сохранить контакт"</string>
+    <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Не удалось сохранить изменения"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"Не удалось загрузить ярлык"</string>
     <string name="groupSavedToast" msgid="6491495462357722285">"Ярлык сохранен"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Группа удалена"</string>
@@ -132,7 +133,7 @@
     <string name="groupUpdatedToast" msgid="3667977658676267687">"Ярлык обновлен"</string>
     <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Контакты удалены из группы"</string>
     <string name="groupMembersAddedToast" msgid="4824834898718972768">"Добавлено"</string>
-    <string name="groupSavedErrorToast" msgid="8121032018490980184">"Не удалось сохранить изменения"</string>
+    <string name="groupSavedErrorToast" msgid="2355891714292740162">"Не удалось сохранить изменения"</string>
     <string name="groupExistsErrorMessage" msgid="5196811283836946189">"Такая группа уже существует"</string>
     <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
       <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> контакт с номером телефона</item>
@@ -159,7 +160,6 @@
     <string name="callAgain" msgid="3197312117049874778">"Позвонить снова"</string>
     <string name="returnCall" msgid="8171961914203617813">"Перезвонить"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Добавить в контакты <xliff:g id="EMAIL">%s</xliff:g>?"</string>
-    <string name="description_contact_photo" msgid="3387458082667894062">"фотография контакта"</string>
     <string name="description_plus_button" msgid="515164827856229880">"плюс"</string>
     <string name="exporting_contact_list_progress" msgid="560522409559101193">"Контакт <xliff:g id="CURRENT_NUMBER">%s</xliff:g> из <xliff:g id="TOTAL_NUMBER">%s</xliff:g>"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"Имена контактов"</string>
@@ -206,7 +206,6 @@
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Дата"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Ярлык"</string>
     <string name="change_photo" msgid="8530597935483526383">"Изменить"</string>
-    <string name="primary_photo" msgid="8517942231868516999">"Основное фото"</string>
     <string name="description_star" msgid="2605854427360036550">"избранное"</string>
     <string name="edit_contact" msgid="7529281274005689512">"Изменить контакт"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"закрыть"</string>
@@ -283,7 +282,6 @@
     <string name="header_name_entry" msgid="1592791008096288306">"Имя"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"Адрес эл. почты"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"Телефон"</string>
-    <string name="header_photo_entry" msgid="4438023151411853238">"Фото"</string>
     <string name="content_description_expand_editor" msgid="1111381475901897470">"Нажмите, чтобы развернуть редактор контактов."</string>
     <string name="content_description_collapse_editor" msgid="7598061318022977825">"Нажмите, чтобы свернуть редактор контактов."</string>
     <string name="content_description_directions" msgid="2686791825798189335">"Маршруты"</string>
@@ -298,6 +296,8 @@
     <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Сменить фото"</string>
     <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Не удалось открыть редактор"</string>
     <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Выберите аккаунт"</string>
+    <!-- no translation found for compact_editor_account_selector_read_only_title (1869435992721760221) -->
+    <skip />
     <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"Данные сохраняются в аккаунте <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Чтобы выбрать другой аккаунт, дважды нажмите здесь."</string>
     <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
       <item quantity="one">Связанные контакты (<xliff:g id="COUNT">%d</xliff:g>)</item>
@@ -476,22 +476,14 @@
     <string name="chat_jabber" msgid="7561444230307829609">"Чат через Jabber"</string>
     <string name="chat" msgid="9025361898797412245">"Чат"</string>
     <string name="description_minus_button" msgid="6908099247930477551">"удалить"</string>
-    <!-- no translation found for expand_name_fields_description (6883935911480726652) -->
-    <skip />
-    <!-- no translation found for collapse_name_fields_description (4757877385895561556) -->
-    <skip />
-    <!-- no translation found for expand_phonetic_name_fields_description (3865726859582581741) -->
-    <skip />
-    <!-- no translation found for collapse_phonetic_name_fields_description (9102249481855019452) -->
-    <skip />
-    <!-- no translation found for expand_fields_description (8129294181216760037) -->
-    <skip />
-    <!-- no translation found for collapse_fields_description (1884143625854637874) -->
-    <skip />
-    <!-- no translation found for announce_expanded_fields (1075947220478530622) -->
-    <skip />
-    <!-- no translation found for announce_collapsed_fields (6414231530177338704) -->
-    <skip />
+    <string name="expand_name_fields_description" msgid="6883935911480726652">"Показать дополнительные поля"</string>
+    <string name="collapse_name_fields_description" msgid="4757877385895561556">"Скрыть дополнительные поля"</string>
+    <string name="expand_phonetic_name_fields_description" msgid="3865726859582581741">"Показать поля с транскрипцией имени"</string>
+    <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Скрыть поля с транскрипцией имени"</string>
+    <string name="expand_fields_description" msgid="8129294181216760037">"Показать"</string>
+    <string name="collapse_fields_description" msgid="1884143625854637874">"Скрыть"</string>
+    <string name="announce_expanded_fields" msgid="1075947220478530622">"Поля показаны"</string>
+    <string name="announce_collapsed_fields" msgid="6414231530177338704">"Поля скрыты"</string>
     <string name="list_filter_all_accounts" msgid="8908683398914322369">"Все контакты"</string>
     <string name="list_filter_all_starred" msgid="5031734941601931356">"Помеченные"</string>
     <string name="list_filter_customize" msgid="4789963356004169321">"Настроить"</string>
@@ -577,7 +569,8 @@
     <string name="share_favorite_contacts" msgid="4280926751003081042">"Поделиться избранными контактами"</string>
     <string name="share_contacts" msgid="8109287987498711664">"Поделиться всеми контактами"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"Не удалось поделиться контактами"</string>
-    <string name="dialog_import_export" msgid="4360648034889921624">"Импорт/экспорт контактов"</string>
+    <!-- no translation found for dialog_export (1628001095187741417) -->
+    <skip />
     <string name="dialog_import" msgid="2431698729761448759">"Импорт контактов"</string>
     <string name="share_error" msgid="948429331673358107">"Не удалось передать данные."</string>
     <string name="no_contact_to_share" msgid="1276397530378323033">"Видимых контактов нет"</string>
@@ -592,7 +585,10 @@
     <string name="menu_clear_frequents" msgid="7688250191932838833">"Очистить популярные контакты"</string>
     <string name="menu_select_sim" msgid="3603578201960504010">"Выбрать SIM-карту"</string>
     <string name="menu_accounts" msgid="1424330057450189074">"Настроить аккаунты"</string>
-    <string name="menu_import_export" msgid="26217871113229507">"Импорт/экспорт"</string>
+    <!-- no translation found for menu_import (6107961135813836467) -->
+    <skip />
+    <!-- no translation found for menu_export (2658783911863503902) -->
+    <skip />
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"Заблокированные номера"</string>
     <string name="contact_status_update_attribution" msgid="752179367353018597">"с помощью <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> с помощью <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
@@ -628,4 +624,8 @@
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> сек."</string>
     <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> мин. <xliff:g id="SECONDS">%s</xliff:g> сек."</string>
     <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> ч. <xliff:g id="MINUTES_1">%s</xliff:g> мин. <xliff:g id="SECONDS">%s</xliff:g> сек."</string>
+    <!-- no translation found for dynamic_shortcut_disabled_message (249939425761315252) -->
+    <skip />
+    <!-- no translation found for dynamic_shortcut_contact_removed_message (6845645831837615899) -->
+    <skip />
 </resources>
diff --git a/res/values-si-rLK/strings.xml b/res/values-si-rLK/strings.xml
index 8ac7880..874ee39 100644
--- a/res/values-si-rLK/strings.xml
+++ b/res/values-si-rLK/strings.xml
@@ -67,6 +67,7 @@
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"යෝජිත සම්බන්ධතා"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"සියලුම සම්බන්ධතා"</string>
     <string name="contactsJoinedMessage" msgid="3343535986195643136">"සම්බන්ධතා සබැඳි කරන ලදී"</string>
+    <string name="contact_deleted_named_toast" msgid="6558941164987421174">"<xliff:g id="NAME">%s</xliff:g> මකන ලදී"</string>
     <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
       <item quantity="one">සම්බන්ධතා මකන ලදී</item>
       <item quantity="other">සම්බන්ධතා මකන ලදී</item>
@@ -113,11 +114,11 @@
     <string name="emptyMainList" msgid="2772242747899664460">"ඔබගේ සම්බන්ධතා ලැයිස්තුව හිස්ය"</string>
     <string name="contactSavedToast" msgid="9171862279493213075">"සම්බන්ධතාවය සුරකින ලදි"</string>
     <string name="contactUnlinkedToast" msgid="7122823195786012553">"සම්බන්ධතා සබැඳි ඉවත් කරන ලදී"</string>
-    <string name="contactSavedErrorToast" msgid="3207250533172944892">"සම්බන්ධතා වෙනස්කම් සුරැකීමට නොහැක."</string>
-    <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"සම්බන්ධතාව සබැඳි ඉවත් කිරීමට නොහැකි විය."</string>
-    <string name="contactJoinErrorToast" msgid="3977932531264809035">"සම්බන්ධතාව සබැඳි කළ නොහැකි විය."</string>
-    <string name="contactGenericErrorToast" msgid="7774911165341591714">"සම්බන්ධතාව සුරැකීමේ දෝෂය."</string>
-    <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"සම්බන්ධතා ඡායාරූපය වෙනස් කිරීම් සුරැකිය නොහැකි විය."</string>
+    <string name="contactSavedErrorToast" msgid="4827033473908688031">"සම්බන්ධතාවේ වෙනස් කිරීම් සුරැකීමට නොහැකි විය"</string>
+    <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"සම්බන්ධතාව සබැඳියෙන් ඉවත් කිරීමට නොහැකි විය"</string>
+    <string name="contactJoinErrorToast" msgid="5735129234573327701">"සම්බන්ධතාව සබැඳිමට නොහැකි විය"</string>
+    <string name="contactGenericErrorToast" msgid="3885457515665783976">"සම්බන්ධතාව සුරැකීමේ දෝෂය"</string>
+    <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"සම්බන්ධතා ඡායාරූපයේ වෙනස් කිරීම් සුරැකීමට නොහැකි විය"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"ලේබලය පූරණය කිරීමට අසමත් විය"</string>
     <string name="groupSavedToast" msgid="6491495462357722285">"ලේබලය සුරැකිණි"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"ලේබලය මකන ලදී"</string>
@@ -126,7 +127,7 @@
     <string name="groupUpdatedToast" msgid="3667977658676267687">"ලේබලය යාවත්කාලීන කරන ලදී"</string>
     <string name="groupMembersRemovedToast" msgid="3510563559799376603">"ලේබලයෙන් ඉවත් කෙරිණි"</string>
     <string name="groupMembersAddedToast" msgid="4824834898718972768">"ලේබලයට එක් කෙරිණි"</string>
-    <string name="groupSavedErrorToast" msgid="8121032018490980184">"ලේබල වෙනස් කිරීම් සුරැකීමට නොහැකි විය."</string>
+    <string name="groupSavedErrorToast" msgid="2355891714292740162">"ලේබලයේ වෙනස් කිරීම් සුරැකීමට නොහැකි විය"</string>
     <string name="groupExistsErrorMessage" msgid="5196811283836946189">"එම ලේබලය දැනටමත් පවතී"</string>
     <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
       <item quantity="one">දුරකථන අංක සමඟ සම්බන්ධතාවන් <xliff:g id="COUNT">%d</xliff:g></item>
@@ -147,7 +148,6 @@
     <string name="callAgain" msgid="3197312117049874778">"නැවත අමතන්න"</string>
     <string name="returnCall" msgid="8171961914203617813">"ඇමතුම නැවත ලබා දෙන්න"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"සම්බන්ධතා වලට \"<xliff:g id="EMAIL">%s</xliff:g>\" එක් කරන්නද?"</string>
-    <string name="description_contact_photo" msgid="3387458082667894062">"සම්බන්ධතා ඡායාරූපය"</string>
     <string name="description_plus_button" msgid="515164827856229880">"ධන"</string>
     <string name="exporting_contact_list_progress" msgid="560522409559101193">"සම්බන්ධතා <xliff:g id="TOTAL_NUMBER">%s</xliff:g> කින් <xliff:g id="CURRENT_NUMBER">%s</xliff:g> ක්"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"ඔබගේ සම්බන්ධතා වල නම්"</string>
@@ -192,7 +192,6 @@
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"දිනය"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"ලේබලය"</string>
     <string name="change_photo" msgid="8530597935483526383">"වෙනස් කරන්න"</string>
-    <string name="primary_photo" msgid="8517942231868516999">"ප්‍රාථමික රූප"</string>
     <string name="description_star" msgid="2605854427360036550">"ප්‍රියතම"</string>
     <string name="edit_contact" msgid="7529281274005689512">"සම්බන්ධතාව සංස්කරණය කරන්න"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"වසන්න"</string>
@@ -269,7 +268,6 @@
     <string name="header_name_entry" msgid="1592791008096288306">"නම‍"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"ඊ-තැපෑල"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"දුරකථනය"</string>
-    <string name="header_photo_entry" msgid="4438023151411853238">"ඡායාරූපය"</string>
     <string name="content_description_expand_editor" msgid="1111381475901897470">"සම්බන්ධ සංස්කාරකය දිගහරින්න ක්ලික් කරන්න."</string>
     <string name="content_description_collapse_editor" msgid="7598061318022977825">"සම්බන්ධ සංස්කාරකය හකුලන්න ක්ලික් කරන්න."</string>
     <string name="content_description_directions" msgid="2686791825798189335">"ස්ථානයට දිශාවන්"</string>
@@ -284,6 +282,8 @@
     <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"ඡායාරූපය වෙනස් කරන්න"</string>
     <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"සංස්කාරකය විවෘත කිරීමට නොහැකි විය."</string>
     <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"සුරැකීම"</string>
+    <!-- no translation found for compact_editor_account_selector_read_only_title (1869435992721760221) -->
+    <skip />
     <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"දැනට <xliff:g id="ACCOUNT_NAME">%s</xliff:g> වෙත සුරැකේ. වෙනත් ගිණුමක් තේරීමට දෙවරක් තට්ටු කරන්න."</string>
     <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
       <item quantity="one">සබැඳි කළ සම්බන්ධතා (<xliff:g id="COUNT">%d</xliff:g>)</item>
@@ -454,22 +454,14 @@
     <string name="chat_jabber" msgid="7561444230307829609">"Jabber භාවිතයෙන් කතාබස් කරන්න"</string>
     <string name="chat" msgid="9025361898797412245">"කතාබස්"</string>
     <string name="description_minus_button" msgid="6908099247930477551">"මකන්න"</string>
-    <!-- no translation found for expand_name_fields_description (6883935911480726652) -->
-    <skip />
-    <!-- no translation found for collapse_name_fields_description (4757877385895561556) -->
-    <skip />
-    <!-- no translation found for expand_phonetic_name_fields_description (3865726859582581741) -->
-    <skip />
-    <!-- no translation found for collapse_phonetic_name_fields_description (9102249481855019452) -->
-    <skip />
-    <!-- no translation found for expand_fields_description (8129294181216760037) -->
-    <skip />
-    <!-- no translation found for collapse_fields_description (1884143625854637874) -->
-    <skip />
-    <!-- no translation found for announce_expanded_fields (1075947220478530622) -->
-    <skip />
-    <!-- no translation found for announce_collapsed_fields (6414231530177338704) -->
-    <skip />
+    <string name="expand_name_fields_description" msgid="6883935911480726652">"නම් ක්ෂේත්‍ර දිග හරින්න"</string>
+    <string name="collapse_name_fields_description" msgid="4757877385895561556">"නම් ක්ෂේත්‍ර හකුළන්න"</string>
+    <string name="expand_phonetic_name_fields_description" msgid="3865726859582581741">"ශබ්දිම නම් ක්ෂේත්‍ර දිග හරින්න"</string>
+    <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"ශබ්දිම නම් ක්ෂේත්‍ර හකුළන්න"</string>
+    <string name="expand_fields_description" msgid="8129294181216760037">"දිග හරින්න"</string>
+    <string name="collapse_fields_description" msgid="1884143625854637874">"හකුළන්න"</string>
+    <string name="announce_expanded_fields" msgid="1075947220478530622">"දිග හරින ලදී"</string>
+    <string name="announce_collapsed_fields" msgid="6414231530177338704">"හකුළන ලදී"</string>
     <string name="list_filter_all_accounts" msgid="8908683398914322369">"සියලුම සම්බන්ධතා"</string>
     <string name="list_filter_all_starred" msgid="5031734941601931356">"තරුව සලකුණු කළ"</string>
     <string name="list_filter_customize" msgid="4789963356004169321">"අභිරුචිකරණය"</string>
@@ -555,7 +547,8 @@
     <string name="share_favorite_contacts" msgid="4280926751003081042">"ප්‍රියතම සම්බන්ධතා බෙදා ගන්න"</string>
     <string name="share_contacts" msgid="8109287987498711664">"සියලු සම්බන්ධතා බෙදා ගන්න"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"සම්බන්ධතා බෙදා ගැනීමට අසමත් විය."</string>
-    <string name="dialog_import_export" msgid="4360648034889921624">"සම්බන්ධතා ආයාත/නිර්යාත කිරීම"</string>
+    <!-- no translation found for dialog_export (1628001095187741417) -->
+    <skip />
     <string name="dialog_import" msgid="2431698729761448759">"සම්බන්ධතා ආයාත කරන්න"</string>
     <string name="share_error" msgid="948429331673358107">"මෙම සම්බන්ධතාව බෙදා ගත නොහැක."</string>
     <string name="no_contact_to_share" msgid="1276397530378323033">"බෙදා ගැනීමට සම්බන්ධතා නොමැත."</string>
@@ -570,7 +563,10 @@
     <string name="menu_clear_frequents" msgid="7688250191932838833">"නිතරමයන් හිස් කරන්න"</string>
     <string name="menu_select_sim" msgid="3603578201960504010">"SIM කාඩ්පත තෝරන්න"</string>
     <string name="menu_accounts" msgid="1424330057450189074">"ගිණුම් කළමනාකරණය කරන්න"</string>
-    <string name="menu_import_export" msgid="26217871113229507">"ආයාත/නිර්යාත"</string>
+    <!-- no translation found for menu_import (6107961135813836467) -->
+    <skip />
+    <!-- no translation found for menu_export (2658783911863503902) -->
+    <skip />
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"අවහිර කළ අංක"</string>
     <string name="contact_status_update_attribution" msgid="752179367353018597">"<xliff:g id="SOURCE">%1$s</xliff:g> හරහා"</string>
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="SOURCE">%2$s</xliff:g> ඔස්සේ <xliff:g id="DATE">%1$s</xliff:g>"</string>
@@ -604,4 +600,8 @@
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"තත් <xliff:g id="SECONDS">%s</xliff:g>"</string>
     <string name="callDurationMinuteFormat" msgid="4647095486747447674">"මිනි <xliff:g id="MINUTES">%s</xliff:g> තත් <xliff:g id="SECONDS">%s</xliff:g>"</string>
     <string name="callDurationHourFormat" msgid="7392254193808506640">"පැය <xliff:g id="MINUTES_0">%s</xliff:g> මිනි <xliff:g id="MINUTES_1">%s</xliff:g> තත් <xliff:g id="SECONDS">%s</xliff:g>"</string>
+    <!-- no translation found for dynamic_shortcut_disabled_message (249939425761315252) -->
+    <skip />
+    <!-- no translation found for dynamic_shortcut_contact_removed_message (6845645831837615899) -->
+    <skip />
 </resources>
diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml
index 3cc0915..7c6bbe2 100644
--- a/res/values-sk/strings.xml
+++ b/res/values-sk/strings.xml
@@ -67,6 +67,7 @@
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Navrhnuté kontakty"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Všetky kontakty"</string>
     <string name="contactsJoinedMessage" msgid="3343535986195643136">"Kontakty boli prepojené"</string>
+    <string name="contact_deleted_named_toast" msgid="6558941164987421174">"<xliff:g id="NAME">%s</xliff:g> – odstránený/-á"</string>
     <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
       <item quantity="few">Kontakty boli odstránené</item>
       <item quantity="many">Kontakty boli odstránené</item>
@@ -119,11 +120,11 @@
     <string name="emptyMainList" msgid="2772242747899664460">"Váš zoznam kontaktov je prázdny"</string>
     <string name="contactSavedToast" msgid="9171862279493213075">"Kontakt bol uložený"</string>
     <string name="contactUnlinkedToast" msgid="7122823195786012553">"Kontakty boli odpojené"</string>
-    <string name="contactSavedErrorToast" msgid="3207250533172944892">"Nepodarilo sa uložiť zmeny kontaktu."</string>
-    <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Zrušenie prepojenia kontaktu zlyhalo."</string>
-    <string name="contactJoinErrorToast" msgid="3977932531264809035">"Kontakt sa nepodarilo prepojiť."</string>
-    <string name="contactGenericErrorToast" msgid="7774911165341591714">"Pri ukladaní kontaktu sa vyskytla chyba."</string>
-    <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"Nepodarilo sa uložiť zmeny fotky kontaktu"</string>
+    <string name="contactSavedErrorToast" msgid="4827033473908688031">"Nepodarilo sa uložiť zmeny kontaktu"</string>
+    <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"Zrušenie prepojenia kontaktu zlyhalo"</string>
+    <string name="contactJoinErrorToast" msgid="5735129234573327701">"Kontakt sa nepodarilo prepojiť"</string>
+    <string name="contactGenericErrorToast" msgid="3885457515665783976">"Pri ukladaní kontaktu sa vyskytla chyba"</string>
+    <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Nepodarilo sa uložiť zmeny fotky kontaktu"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"Načítanie štítka zlyhalo"</string>
     <string name="groupSavedToast" msgid="6491495462357722285">"Štítok bol uložený"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Štítok bol odstránený"</string>
@@ -132,7 +133,7 @@
     <string name="groupUpdatedToast" msgid="3667977658676267687">"Štítok bol aktualizovaný"</string>
     <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Odstránené zo štítka"</string>
     <string name="groupMembersAddedToast" msgid="4824834898718972768">"Pridané do štítka"</string>
-    <string name="groupSavedErrorToast" msgid="8121032018490980184">"Zmeny štítka nebolo možné uložiť"</string>
+    <string name="groupSavedErrorToast" msgid="2355891714292740162">"Nepodarilo sa uložiť zmeny štítka"</string>
     <string name="groupExistsErrorMessage" msgid="5196811283836946189">"Daný štítok už existuje"</string>
     <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
       <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> kontakty s telefónnym číslom</item>
@@ -159,7 +160,6 @@
     <string name="callAgain" msgid="3197312117049874778">"Zavolať znova"</string>
     <string name="returnCall" msgid="8171961914203617813">"Zavolať späť"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Chcete pridať „<xliff:g id="EMAIL">%s</xliff:g>“ medzi kontakty?"</string>
-    <string name="description_contact_photo" msgid="3387458082667894062">"fotografia kontaktu"</string>
     <string name="description_plus_button" msgid="515164827856229880">"plus"</string>
     <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> z <xliff:g id="TOTAL_NUMBER">%s</xliff:g> kontaktov"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"Mená vašich kontaktov"</string>
@@ -206,7 +206,6 @@
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Dátum"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Štítok"</string>
     <string name="change_photo" msgid="8530597935483526383">"Zmeniť"</string>
-    <string name="primary_photo" msgid="8517942231868516999">"Hlavná fotka"</string>
     <string name="description_star" msgid="2605854427360036550">"zaradiť medzi obľúbené"</string>
     <string name="edit_contact" msgid="7529281274005689512">"Upraviť kontakt"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"zavrieť"</string>
@@ -283,7 +282,6 @@
     <string name="header_name_entry" msgid="1592791008096288306">"Meno"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"E-mailová adresa"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"Telefón"</string>
-    <string name="header_photo_entry" msgid="4438023151411853238">"Fotka"</string>
     <string name="content_description_expand_editor" msgid="1111381475901897470">"Kliknutím rozbalíte editor kontaktov."</string>
     <string name="content_description_collapse_editor" msgid="7598061318022977825">"Kliknutím zbalíte editor kontaktov."</string>
     <string name="content_description_directions" msgid="2686791825798189335">"trasa do miesta"</string>
@@ -298,6 +296,8 @@
     <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Zmeniť fotku"</string>
     <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Nepodarilo sa otvoriť editor."</string>
     <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Uložiť ako"</string>
+    <!-- no translation found for compact_editor_account_selector_read_only_title (1869435992721760221) -->
+    <skip />
     <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"Kontakty sa momentálne ukladajú do účtu <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Iný účet vyberiete dvojitým klepnutím."</string>
     <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
       <item quantity="few">Prepojené kontakty (<xliff:g id="COUNT">%d</xliff:g>)</item>
@@ -476,22 +476,14 @@
     <string name="chat_jabber" msgid="7561444230307829609">"Zhovárať sa pomocou služby Jabber"</string>
     <string name="chat" msgid="9025361898797412245">"Rozhovor"</string>
     <string name="description_minus_button" msgid="6908099247930477551">"odstrániť"</string>
-    <!-- no translation found for expand_name_fields_description (6883935911480726652) -->
-    <skip />
-    <!-- no translation found for collapse_name_fields_description (4757877385895561556) -->
-    <skip />
-    <!-- no translation found for expand_phonetic_name_fields_description (3865726859582581741) -->
-    <skip />
-    <!-- no translation found for collapse_phonetic_name_fields_description (9102249481855019452) -->
-    <skip />
-    <!-- no translation found for expand_fields_description (8129294181216760037) -->
-    <skip />
-    <!-- no translation found for collapse_fields_description (1884143625854637874) -->
-    <skip />
-    <!-- no translation found for announce_expanded_fields (1075947220478530622) -->
-    <skip />
-    <!-- no translation found for announce_collapsed_fields (6414231530177338704) -->
-    <skip />
+    <string name="expand_name_fields_description" msgid="6883935911480726652">"Rozbaliť polia mien"</string>
+    <string name="collapse_name_fields_description" msgid="4757877385895561556">"Zbaliť polia mien"</string>
+    <string name="expand_phonetic_name_fields_description" msgid="3865726859582581741">"Rozbaliť polia foneticky zadaných mien"</string>
+    <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Zbaliť polia foneticky zadaných mien"</string>
+    <string name="expand_fields_description" msgid="8129294181216760037">"Rozbaliť"</string>
+    <string name="collapse_fields_description" msgid="1884143625854637874">"Zbaliť"</string>
+    <string name="announce_expanded_fields" msgid="1075947220478530622">"Rozbalené"</string>
+    <string name="announce_collapsed_fields" msgid="6414231530177338704">"Zbalené"</string>
     <string name="list_filter_all_accounts" msgid="8908683398914322369">"Všetky kontakty"</string>
     <string name="list_filter_all_starred" msgid="5031734941601931356">"Označené hviezdičkou"</string>
     <string name="list_filter_customize" msgid="4789963356004169321">"Prispôsobiť"</string>
@@ -577,7 +569,8 @@
     <string name="share_favorite_contacts" msgid="4280926751003081042">"Zdieľať obľúbené kontakty"</string>
     <string name="share_contacts" msgid="8109287987498711664">"Zdieľať všetky kontakty"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"Nepodarilo sa zdieľať kontakty."</string>
-    <string name="dialog_import_export" msgid="4360648034889921624">"Importovať alebo exportovať kontakty"</string>
+    <!-- no translation found for dialog_export (1628001095187741417) -->
+    <skip />
     <string name="dialog_import" msgid="2431698729761448759">"Import kontaktov"</string>
     <string name="share_error" msgid="948429331673358107">"Tento kontakt nie je možné zdieľať."</string>
     <string name="no_contact_to_share" msgid="1276397530378323033">"Nemáte žiadne kontakty na zdieľanie"</string>
@@ -592,7 +585,10 @@
     <string name="menu_clear_frequents" msgid="7688250191932838833">"Vymazať často kontakt. osoby"</string>
     <string name="menu_select_sim" msgid="3603578201960504010">"Vybrať SIM kartu"</string>
     <string name="menu_accounts" msgid="1424330057450189074">"Správa účtov"</string>
-    <string name="menu_import_export" msgid="26217871113229507">"Import a export"</string>
+    <!-- no translation found for menu_import (6107961135813836467) -->
+    <skip />
+    <!-- no translation found for menu_export (2658783911863503902) -->
+    <skip />
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"Blokované čísla"</string>
     <string name="contact_status_update_attribution" msgid="752179367353018597">", zdroj: <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g>, zdroj: <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
@@ -628,4 +624,8 @@
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> s"</string>
     <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
     <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> h <xliff:g id="MINUTES_1">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
+    <!-- no translation found for dynamic_shortcut_disabled_message (249939425761315252) -->
+    <skip />
+    <!-- no translation found for dynamic_shortcut_contact_removed_message (6845645831837615899) -->
+    <skip />
 </resources>
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml
index a0faefb..d866a76 100644
--- a/res/values-sl/strings.xml
+++ b/res/values-sl/strings.xml
@@ -67,6 +67,7 @@
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Predlagani stiki"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Vsi stiki"</string>
     <string name="contactsJoinedMessage" msgid="3343535986195643136">"Stika povezana"</string>
+    <string name="contact_deleted_named_toast" msgid="6558941164987421174">"Stik <xliff:g id="NAME">%s</xliff:g> je izbrisan"</string>
     <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
       <item quantity="one">Stik je izbrisan</item>
       <item quantity="two">Stiki so izbrisani</item>
@@ -119,11 +120,11 @@
     <string name="emptyMainList" msgid="2772242747899664460">"Seznam stikov je prazen"</string>
     <string name="contactSavedToast" msgid="9171862279493213075">"Stik je shranjen"</string>
     <string name="contactUnlinkedToast" msgid="7122823195786012553">"Povezava stikov odstranjena"</string>
-    <string name="contactSavedErrorToast" msgid="3207250533172944892">"Sprememb v stikih ni bilo mogoče shraniti."</string>
-    <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Stiku ni bilo mogoče odstraniti povezave."</string>
-    <string name="contactJoinErrorToast" msgid="3977932531264809035">"Stika ni bilo mogoče povezati."</string>
-    <string name="contactGenericErrorToast" msgid="7774911165341591714">"Pri shranjevanju stika je prišlo do napake."</string>
-    <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"Sprememb fotografije stika ni bilo mogoče shraniti."</string>
+    <string name="contactSavedErrorToast" msgid="4827033473908688031">"Sprememb stika ni bilo mogoče shraniti"</string>
+    <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"Stiku ni bilo mogoče odstraniti povezave"</string>
+    <string name="contactJoinErrorToast" msgid="5735129234573327701">"Stiku ni bilo mogoče dodati povezave"</string>
+    <string name="contactGenericErrorToast" msgid="3885457515665783976">"Pri shranjevanju stika je prišlo do napake"</string>
+    <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Sprememb fotografije stika ni bilo mogoče shraniti"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"Nalaganje oznake ni uspelo"</string>
     <string name="groupSavedToast" msgid="6491495462357722285">"Oznaka je shranjena"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Oznaka je izbrisana"</string>
@@ -132,7 +133,7 @@
     <string name="groupUpdatedToast" msgid="3667977658676267687">"Oznaka je posodobljena"</string>
     <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Odstranjeno iz oznake"</string>
     <string name="groupMembersAddedToast" msgid="4824834898718972768">"Dodano v oznako"</string>
-    <string name="groupSavedErrorToast" msgid="8121032018490980184">"Sprememb oznake ni bilo mogoče shraniti."</string>
+    <string name="groupSavedErrorToast" msgid="2355891714292740162">"Sprememb oznake ni bilo mogoče shraniti"</string>
     <string name="groupExistsErrorMessage" msgid="5196811283836946189">"Ta oznake že obstaja"</string>
     <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
       <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> stik s telefonsko številko</item>
@@ -159,7 +160,6 @@
     <string name="callAgain" msgid="3197312117049874778">"Ponovi klic"</string>
     <string name="returnCall" msgid="8171961914203617813">"Povratni klic"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Želite »<xliff:g id="EMAIL">%s</xliff:g>« dodati stikom?"</string>
-    <string name="description_contact_photo" msgid="3387458082667894062">"fotografija stika"</string>
     <string name="description_plus_button" msgid="515164827856229880">"plus"</string>
     <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> od <xliff:g id="TOTAL_NUMBER">%s</xliff:g> stikov"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"Imena stikov"</string>
@@ -206,7 +206,6 @@
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Datum"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Dodaj oznako"</string>
     <string name="change_photo" msgid="8530597935483526383">"Spremeni"</string>
-    <string name="primary_photo" msgid="8517942231868516999">"Glavna fotogr."</string>
     <string name="description_star" msgid="2605854427360036550">"priljubljeno"</string>
     <string name="edit_contact" msgid="7529281274005689512">"Uredi stik"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"zapri"</string>
@@ -283,7 +282,6 @@
     <string name="header_name_entry" msgid="1592791008096288306">"Ime"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"E-pošta"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"Telefon"</string>
-    <string name="header_photo_entry" msgid="4438023151411853238">"Fotografija"</string>
     <string name="content_description_expand_editor" msgid="1111381475901897470">"Kliknite, če želite razširiti urejevalnik stikov."</string>
     <string name="content_description_collapse_editor" msgid="7598061318022977825">"Kliknite, če želite strniti urejevalnik stikov."</string>
     <string name="content_description_directions" msgid="2686791825798189335">"navodila do mesta"</string>
@@ -298,6 +296,8 @@
     <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Sprememba fotografije"</string>
     <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Odpiranje urejevalnika ni uspelo."</string>
     <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Shranjevanje v:"</string>
+    <!-- no translation found for compact_editor_account_selector_read_only_title (1869435992721760221) -->
+    <skip />
     <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"Trenutno se shranjuje v račun <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Če želite izbrati drug račun, se dvakrat dotaknite."</string>
     <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
       <item quantity="one">Povezani stiki (<xliff:g id="COUNT">%d</xliff:g>)</item>
@@ -476,22 +476,14 @@
     <string name="chat_jabber" msgid="7561444230307829609">"Klepet s storitvijo Jabber"</string>
     <string name="chat" msgid="9025361898797412245">"Klepet"</string>
     <string name="description_minus_button" msgid="6908099247930477551">"brisanje"</string>
-    <!-- no translation found for expand_name_fields_description (6883935911480726652) -->
-    <skip />
-    <!-- no translation found for collapse_name_fields_description (4757877385895561556) -->
-    <skip />
-    <!-- no translation found for expand_phonetic_name_fields_description (3865726859582581741) -->
-    <skip />
-    <!-- no translation found for collapse_phonetic_name_fields_description (9102249481855019452) -->
-    <skip />
-    <!-- no translation found for expand_fields_description (8129294181216760037) -->
-    <skip />
-    <!-- no translation found for collapse_fields_description (1884143625854637874) -->
-    <skip />
-    <!-- no translation found for announce_expanded_fields (1075947220478530622) -->
-    <skip />
-    <!-- no translation found for announce_collapsed_fields (6414231530177338704) -->
-    <skip />
+    <string name="expand_name_fields_description" msgid="6883935911480726652">"Razširi imenska polja"</string>
+    <string name="collapse_name_fields_description" msgid="4757877385895561556">"Strni imenska polja"</string>
+    <string name="expand_phonetic_name_fields_description" msgid="3865726859582581741">"Razširi fonetična imenska polja"</string>
+    <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Strni fonetična imenska polja"</string>
+    <string name="expand_fields_description" msgid="8129294181216760037">"Razširi"</string>
+    <string name="collapse_fields_description" msgid="1884143625854637874">"Strni"</string>
+    <string name="announce_expanded_fields" msgid="1075947220478530622">"Razširjeno"</string>
+    <string name="announce_collapsed_fields" msgid="6414231530177338704">"Strnjeno"</string>
     <string name="list_filter_all_accounts" msgid="8908683398914322369">"Vsi stiki"</string>
     <string name="list_filter_all_starred" msgid="5031734941601931356">"Z zvezdico"</string>
     <string name="list_filter_customize" msgid="4789963356004169321">"Prilagodi"</string>
@@ -577,7 +569,8 @@
     <string name="share_favorite_contacts" msgid="4280926751003081042">"Skupna raba priljubljenih stikov"</string>
     <string name="share_contacts" msgid="8109287987498711664">"Skupna raba vseh stikov"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"Dajanje stikov v skupno rabo ni uspelo."</string>
-    <string name="dialog_import_export" msgid="4360648034889921624">"Uvoz/izvoz stikov"</string>
+    <!-- no translation found for dialog_export (1628001095187741417) -->
+    <skip />
     <string name="dialog_import" msgid="2431698729761448759">"Uvoz stikov"</string>
     <string name="share_error" msgid="948429331673358107">"Tega stika ni mogoče dati v skupno rabo."</string>
     <string name="no_contact_to_share" msgid="1276397530378323033">"Ni stikov za skupno rabo."</string>
@@ -592,7 +585,10 @@
     <string name="menu_clear_frequents" msgid="7688250191932838833">"Izbriši seznam pogostih stikov"</string>
     <string name="menu_select_sim" msgid="3603578201960504010">"Izberite kartico SIM"</string>
     <string name="menu_accounts" msgid="1424330057450189074">"Upravljaj račune"</string>
-    <string name="menu_import_export" msgid="26217871113229507">"Uvoz/izvoz"</string>
+    <!-- no translation found for menu_import (6107961135813836467) -->
+    <skip />
+    <!-- no translation found for menu_export (2658783911863503902) -->
+    <skip />
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"Blokirane številke"</string>
     <string name="contact_status_update_attribution" msgid="752179367353018597">"prek <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> prek <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
@@ -628,4 +624,8 @@
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> s"</string>
     <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
     <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> h <xliff:g id="MINUTES_1">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
+    <!-- no translation found for dynamic_shortcut_disabled_message (249939425761315252) -->
+    <skip />
+    <!-- no translation found for dynamic_shortcut_contact_removed_message (6845645831837615899) -->
+    <skip />
 </resources>
diff --git a/res/values-sq-rAL/strings.xml b/res/values-sq-rAL/strings.xml
index 0588bdb..0992dbc 100644
--- a/res/values-sq-rAL/strings.xml
+++ b/res/values-sq-rAL/strings.xml
@@ -67,6 +67,7 @@
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Kontaktet e sugjeruara"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Të gjitha kontaktet"</string>
     <string name="contactsJoinedMessage" msgid="3343535986195643136">"Kontaktet u lidhën"</string>
+    <string name="contact_deleted_named_toast" msgid="6558941164987421174">"<xliff:g id="NAME">%s</xliff:g> u fshi"</string>
     <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
       <item quantity="other">Kontaktet u fshinë</item>
       <item quantity="one">Kontakti u fshi</item>
@@ -113,11 +114,11 @@
     <string name="emptyMainList" msgid="2772242747899664460">"Lista e kontakteve të tua është bosh"</string>
     <string name="contactSavedToast" msgid="9171862279493213075">"Kontakti u ruajt"</string>
     <string name="contactUnlinkedToast" msgid="7122823195786012553">"Kontaktet u shkëputën"</string>
-    <string name="contactSavedErrorToast" msgid="3207250533172944892">"Ndryshimet e kontaktit nuk mund të ruheshin."</string>
-    <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Nuk mund të shkëpusë lidhjen me kontaktin."</string>
-    <string name="contactJoinErrorToast" msgid="3977932531264809035">"Kontakti nuk mund të lidhej."</string>
-    <string name="contactGenericErrorToast" msgid="7774911165341591714">"Gabim gjatë ruajtjes së kontaktit."</string>
-    <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"Ndryshimet e fotografisë së kontaktit nuk mund të ruheshin."</string>
+    <string name="contactSavedErrorToast" msgid="4827033473908688031">"Ndryshimet e kontaktit nuk mund të ruheshin"</string>
+    <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"Nuk mund të shkëpusë lidhjen me kontaktin"</string>
+    <string name="contactJoinErrorToast" msgid="5735129234573327701">"Kontakti nuk mund të lidhej"</string>
+    <string name="contactGenericErrorToast" msgid="3885457515665783976">"Gabim gjatë ruajtjes së kontaktit"</string>
+    <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Ndryshimet e fotografisë së kontaktit nuk mund të ruheshin"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"Dështoi në ngarkimin e etiketës"</string>
     <string name="groupSavedToast" msgid="6491495462357722285">"Etiketa u ruajt"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Etiketa u fshi"</string>
@@ -126,7 +127,7 @@
     <string name="groupUpdatedToast" msgid="3667977658676267687">"Etiketa u përditësua"</string>
     <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Hequr nga etiketa"</string>
     <string name="groupMembersAddedToast" msgid="4824834898718972768">"U shtua në emërtim"</string>
-    <string name="groupSavedErrorToast" msgid="8121032018490980184">"Nuk mund të ruhen ndryshimet e etiketës."</string>
+    <string name="groupSavedErrorToast" msgid="2355891714292740162">"Nuk mund të ruhen ndryshimet e etiketës"</string>
     <string name="groupExistsErrorMessage" msgid="5196811283836946189">"Ky emërtim ekziston tashmë"</string>
     <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
       <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> kontakte me numra telefoni</item>
@@ -147,7 +148,6 @@
     <string name="callAgain" msgid="3197312117049874778">"Telefono përsëri"</string>
     <string name="returnCall" msgid="8171961914203617813">"Ktheji telefonatën"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Të shtohet \"<xliff:g id="EMAIL">%s</xliff:g>\" te kontaktet?"</string>
-    <string name="description_contact_photo" msgid="3387458082667894062">"fotografia e kontaktit"</string>
     <string name="description_plus_button" msgid="515164827856229880">"plus"</string>
     <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> nga gjithsej <xliff:g id="TOTAL_NUMBER">%s</xliff:g> kontakte"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"Emrat e kontakteve të tua"</string>
@@ -192,7 +192,6 @@
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Data"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Etiketa"</string>
     <string name="change_photo" msgid="8530597935483526383">"Ndërro"</string>
-    <string name="primary_photo" msgid="8517942231868516999">"Fotografia parësore"</string>
     <string name="description_star" msgid="2605854427360036550">"i preferuar"</string>
     <string name="edit_contact" msgid="7529281274005689512">"Redakto kontaktin"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"mbyll"</string>
@@ -269,7 +268,6 @@
     <string name="header_name_entry" msgid="1592791008096288306">"Emri"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"Mail-i"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"Telefoni"</string>
-    <string name="header_photo_entry" msgid="4438023151411853238">"Fotografia"</string>
     <string name="content_description_expand_editor" msgid="1111381475901897470">"Kliko për ta zgjeruar redaktorin e kontaktit."</string>
     <string name="content_description_collapse_editor" msgid="7598061318022977825">"Kliko për ta palosur redaktorin e kontaktit."</string>
     <string name="content_description_directions" msgid="2686791825798189335">"drejtime për te vendndodhja"</string>
@@ -284,6 +282,8 @@
     <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Ndrysho fotografinë"</string>
     <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Dështoi në hapjen e redaktorit"</string>
     <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Po ruhet në"</string>
+    <!-- no translation found for compact_editor_account_selector_read_only_title (1869435992721760221) -->
+    <skip />
     <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"Po ruhet aktualisht në <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Trokit dy herë për të zgjedhur një llogari tjetër."</string>
     <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
       <item quantity="other">Kontakte të lidhura (<xliff:g id="COUNT">%d</xliff:g>)</item>
@@ -454,22 +454,14 @@
     <string name="chat_jabber" msgid="7561444230307829609">"Bisedo me Jabber"</string>
     <string name="chat" msgid="9025361898797412245">"Bisedë"</string>
     <string name="description_minus_button" msgid="6908099247930477551">"fshi"</string>
-    <!-- no translation found for expand_name_fields_description (6883935911480726652) -->
-    <skip />
-    <!-- no translation found for collapse_name_fields_description (4757877385895561556) -->
-    <skip />
-    <!-- no translation found for expand_phonetic_name_fields_description (3865726859582581741) -->
-    <skip />
-    <!-- no translation found for collapse_phonetic_name_fields_description (9102249481855019452) -->
-    <skip />
-    <!-- no translation found for expand_fields_description (8129294181216760037) -->
-    <skip />
-    <!-- no translation found for collapse_fields_description (1884143625854637874) -->
-    <skip />
-    <!-- no translation found for announce_expanded_fields (1075947220478530622) -->
-    <skip />
-    <!-- no translation found for announce_collapsed_fields (6414231530177338704) -->
-    <skip />
+    <string name="expand_name_fields_description" msgid="6883935911480726652">"Zgjero fushat e emrit"</string>
+    <string name="collapse_name_fields_description" msgid="4757877385895561556">"Palos fushat e emrit"</string>
+    <string name="expand_phonetic_name_fields_description" msgid="3865726859582581741">"Zgjero fushat fonetike të emrit"</string>
+    <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Palos fushat fonetike të emrit"</string>
+    <string name="expand_fields_description" msgid="8129294181216760037">"Zgjero"</string>
+    <string name="collapse_fields_description" msgid="1884143625854637874">"Palos"</string>
+    <string name="announce_expanded_fields" msgid="1075947220478530622">"U zgjerua"</string>
+    <string name="announce_collapsed_fields" msgid="6414231530177338704">"U palos"</string>
     <string name="list_filter_all_accounts" msgid="8908683398914322369">"Të gjitha kontaktet"</string>
     <string name="list_filter_all_starred" msgid="5031734941601931356">"Me yll"</string>
     <string name="list_filter_customize" msgid="4789963356004169321">"Personalizo"</string>
@@ -555,7 +547,8 @@
     <string name="share_favorite_contacts" msgid="4280926751003081042">"Ndaj kontaktet e preferuara"</string>
     <string name="share_contacts" msgid="8109287987498711664">"Ndaj të gjitha kontaktet"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"Ndarja e kontakteve dështoi."</string>
-    <string name="dialog_import_export" msgid="4360648034889921624">"Importo/eksporto kontaktet"</string>
+    <!-- no translation found for dialog_export (1628001095187741417) -->
+    <skip />
     <string name="dialog_import" msgid="2431698729761448759">"Importo kontaktet"</string>
     <string name="share_error" msgid="948429331673358107">"Ky kontakt nuk mund të shpërndahet"</string>
     <string name="no_contact_to_share" msgid="1276397530378323033">"Nuk ka kontakte për të shpërndarë"</string>
@@ -570,7 +563,10 @@
     <string name="menu_clear_frequents" msgid="7688250191932838833">"Pastro kontaktet e shpeshta"</string>
     <string name="menu_select_sim" msgid="3603578201960504010">"Zgjidh kartën SIM"</string>
     <string name="menu_accounts" msgid="1424330057450189074">"Menaxho llogaritë"</string>
-    <string name="menu_import_export" msgid="26217871113229507">"Importo/eksporto"</string>
+    <!-- no translation found for menu_import (6107961135813836467) -->
+    <skip />
+    <!-- no translation found for menu_export (2658783911863503902) -->
+    <skip />
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"Numrat e bllokuar"</string>
     <string name="contact_status_update_attribution" msgid="752179367353018597">"nëpërmjet <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> nëpërmjet <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
@@ -604,4 +600,8 @@
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> sekonda"</string>
     <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> minuta <xliff:g id="SECONDS">%s</xliff:g> sekonda"</string>
     <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> orë <xliff:g id="MINUTES_1">%s</xliff:g> minuta <xliff:g id="SECONDS">%s</xliff:g> sekonda"</string>
+    <!-- no translation found for dynamic_shortcut_disabled_message (249939425761315252) -->
+    <skip />
+    <!-- no translation found for dynamic_shortcut_contact_removed_message (6845645831837615899) -->
+    <skip />
 </resources>
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
index a152fce..f7142bd 100644
--- a/res/values-sr/strings.xml
+++ b/res/values-sr/strings.xml
@@ -67,6 +67,7 @@
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Предложени контакти"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Сви контакти"</string>
     <string name="contactsJoinedMessage" msgid="3343535986195643136">"Контакти су обједињени"</string>
+    <string name="contact_deleted_named_toast" msgid="6558941164987421174">"<xliff:g id="NAME">%s</xliff:g> је избрисан/а"</string>
     <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
       <item quantity="one">Контакти су избрисани</item>
       <item quantity="few">Контакти су избрисани</item>
@@ -116,11 +117,11 @@
     <string name="emptyMainList" msgid="2772242747899664460">"Листа контаката је празна"</string>
     <string name="contactSavedToast" msgid="9171862279493213075">"Контакт је сачуван"</string>
     <string name="contactUnlinkedToast" msgid="7122823195786012553">"Контакти су раздвојени"</string>
-    <string name="contactSavedErrorToast" msgid="3207250533172944892">"Није могуће сачувати измене контаката."</string>
-    <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Раздвајање контакта на више њих није успело."</string>
-    <string name="contactJoinErrorToast" msgid="3977932531264809035">"Обједињавање контаката није успело."</string>
-    <string name="contactGenericErrorToast" msgid="7774911165341591714">"Дошло је до грешке при чувању контакта."</string>
-    <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"Чување измена слике контакта није успело."</string>
+    <string name="contactSavedErrorToast" msgid="4827033473908688031">"Чување промена контакта није успело"</string>
+    <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"Раздвајање контакта није успело"</string>
+    <string name="contactJoinErrorToast" msgid="5735129234573327701">"Обједињавање контаката није успело"</string>
+    <string name="contactGenericErrorToast" msgid="3885457515665783976">"Грешка при чувању контакта"</string>
+    <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Чување промена слике контакта није успело"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"Учитавање ознаке није успело"</string>
     <string name="groupSavedToast" msgid="6491495462357722285">"Ознака је сачувана"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Ознака је избрисана"</string>
@@ -129,7 +130,7 @@
     <string name="groupUpdatedToast" msgid="3667977658676267687">"Ознака је ажурирана"</string>
     <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Уклонили смо из ознаке"</string>
     <string name="groupMembersAddedToast" msgid="4824834898718972768">"Додато је у ознаку"</string>
-    <string name="groupSavedErrorToast" msgid="8121032018490980184">"Чување промена ознаке није успело."</string>
+    <string name="groupSavedErrorToast" msgid="2355891714292740162">"Чување промена ознаке није успело"</string>
     <string name="groupExistsErrorMessage" msgid="5196811283836946189">"Та ознака већ постоји"</string>
     <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
       <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> контакт са бројем телефона</item>
@@ -153,7 +154,6 @@
     <string name="callAgain" msgid="3197312117049874778">"Позови поново"</string>
     <string name="returnCall" msgid="8171961914203617813">"Узврати позив"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Желите ли да додате имејл адресу „<xliff:g id="EMAIL">%s</xliff:g>“ у контакте?"</string>
-    <string name="description_contact_photo" msgid="3387458082667894062">"слика контакта"</string>
     <string name="description_plus_button" msgid="515164827856229880">"плус"</string>
     <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> од <xliff:g id="TOTAL_NUMBER">%s</xliff:g> контак(а)та"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"Имена контаката"</string>
@@ -199,7 +199,6 @@
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Датум"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Ознака"</string>
     <string name="change_photo" msgid="8530597935483526383">"Промени"</string>
-    <string name="primary_photo" msgid="8517942231868516999">"Главна слика"</string>
     <string name="description_star" msgid="2605854427360036550">"омиљено"</string>
     <string name="edit_contact" msgid="7529281274005689512">"Измени контакт"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"затворите"</string>
@@ -276,7 +275,6 @@
     <string name="header_name_entry" msgid="1592791008096288306">"Име"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"Имејл"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"Телефон"</string>
-    <string name="header_photo_entry" msgid="4438023151411853238">"Слика"</string>
     <string name="content_description_expand_editor" msgid="1111381475901897470">"Кликните да бисте проширили уређивач контаката."</string>
     <string name="content_description_collapse_editor" msgid="7598061318022977825">"Кликните да бисте скупили уређивач контаката."</string>
     <string name="content_description_directions" msgid="2686791825798189335">"упутства до локације"</string>
@@ -291,6 +289,8 @@
     <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Промените слику"</string>
     <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Oтварање уређивача није успело."</string>
     <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Чува се"</string>
+    <!-- no translation found for compact_editor_account_selector_read_only_title (1869435992721760221) -->
+    <skip />
     <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"Тренутно се чува на налогу <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Додирните двапут да бисте изабрали други налог."</string>
     <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
       <item quantity="one">Обједињени контакти (<xliff:g id="COUNT">%d</xliff:g>)</item>
@@ -465,22 +465,14 @@
     <string name="chat_jabber" msgid="7561444230307829609">"Започни ћаскање преко Jabber-а"</string>
     <string name="chat" msgid="9025361898797412245">"Ћаскање"</string>
     <string name="description_minus_button" msgid="6908099247930477551">"избриши"</string>
-    <!-- no translation found for expand_name_fields_description (6883935911480726652) -->
-    <skip />
-    <!-- no translation found for collapse_name_fields_description (4757877385895561556) -->
-    <skip />
-    <!-- no translation found for expand_phonetic_name_fields_description (3865726859582581741) -->
-    <skip />
-    <!-- no translation found for collapse_phonetic_name_fields_description (9102249481855019452) -->
-    <skip />
-    <!-- no translation found for expand_fields_description (8129294181216760037) -->
-    <skip />
-    <!-- no translation found for collapse_fields_description (1884143625854637874) -->
-    <skip />
-    <!-- no translation found for announce_expanded_fields (1075947220478530622) -->
-    <skip />
-    <!-- no translation found for announce_collapsed_fields (6414231530177338704) -->
-    <skip />
+    <string name="expand_name_fields_description" msgid="6883935911480726652">"Проширите поља за име"</string>
+    <string name="collapse_name_fields_description" msgid="4757877385895561556">"Скупите поља за име"</string>
+    <string name="expand_phonetic_name_fields_description" msgid="3865726859582581741">"Проширите поља за фонетско име"</string>
+    <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Скупите поља за фонетско име"</string>
+    <string name="expand_fields_description" msgid="8129294181216760037">"Проширите"</string>
+    <string name="collapse_fields_description" msgid="1884143625854637874">"Скупите"</string>
+    <string name="announce_expanded_fields" msgid="1075947220478530622">"Проширено је"</string>
+    <string name="announce_collapsed_fields" msgid="6414231530177338704">"Скупљено је"</string>
     <string name="list_filter_all_accounts" msgid="8908683398914322369">"Сви контакти"</string>
     <string name="list_filter_all_starred" msgid="5031734941601931356">"Са звездицом"</string>
     <string name="list_filter_customize" msgid="4789963356004169321">"Прилагоди"</string>
@@ -566,7 +558,8 @@
     <string name="share_favorite_contacts" msgid="4280926751003081042">"Дели омиљене контакте"</string>
     <string name="share_contacts" msgid="8109287987498711664">"Дели све контакте"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"Дељење контаката није успело."</string>
-    <string name="dialog_import_export" msgid="4360648034889921624">"Увоз/извоз контаката"</string>
+    <!-- no translation found for dialog_export (1628001095187741417) -->
+    <skip />
     <string name="dialog_import" msgid="2431698729761448759">"Увоз контаката"</string>
     <string name="share_error" msgid="948429331673358107">"Овај контакт не може да се дели."</string>
     <string name="no_contact_to_share" msgid="1276397530378323033">"Нема контаката за дељење."</string>
@@ -581,7 +574,10 @@
     <string name="menu_clear_frequents" msgid="7688250191932838833">"Обриши често контактиране"</string>
     <string name="menu_select_sim" msgid="3603578201960504010">"Изаберите SIM картицу"</string>
     <string name="menu_accounts" msgid="1424330057450189074">"Управљај налозима"</string>
-    <string name="menu_import_export" msgid="26217871113229507">"Увоз/извоз"</string>
+    <!-- no translation found for menu_import (6107961135813836467) -->
+    <skip />
+    <!-- no translation found for menu_export (2658783911863503902) -->
+    <skip />
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"Блокирани бројеви"</string>
     <string name="contact_status_update_attribution" msgid="752179367353018597">"преко <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> преко <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
@@ -616,4 +612,8 @@
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> сек"</string>
     <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> мин <xliff:g id="SECONDS">%s</xliff:g> сек"</string>
     <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> с <xliff:g id="MINUTES_1">%s</xliff:g> мин <xliff:g id="SECONDS">%s</xliff:g> сек"</string>
+    <!-- no translation found for dynamic_shortcut_disabled_message (249939425761315252) -->
+    <skip />
+    <!-- no translation found for dynamic_shortcut_contact_removed_message (6845645831837615899) -->
+    <skip />
 </resources>
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index 539876f..0ce643b 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -67,6 +67,7 @@
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Föreslagna kontakter"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Alla kontakter"</string>
     <string name="contactsJoinedMessage" msgid="3343535986195643136">"Kontakterna har länkats"</string>
+    <string name="contact_deleted_named_toast" msgid="6558941164987421174">"<xliff:g id="NAME">%s</xliff:g> borttagen"</string>
     <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
       <item quantity="other">Kontakterna har tagits bort</item>
       <item quantity="one">Kontakten har tagits bort</item>
@@ -113,11 +114,11 @@
     <string name="emptyMainList" msgid="2772242747899664460">"Kontaktlistan är tom"</string>
     <string name="contactSavedToast" msgid="9171862279493213075">"Kontakt sparad"</string>
     <string name="contactUnlinkedToast" msgid="7122823195786012553">"Länken mellan kontakterna har tagits bort"</string>
-    <string name="contactSavedErrorToast" msgid="3207250533172944892">"Det gick inte att spara ändringarna i kontakten."</string>
-    <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Det gick inte att ta bort länken för kontakten."</string>
-    <string name="contactJoinErrorToast" msgid="3977932531264809035">"Det gick inte att länka kontakten."</string>
-    <string name="contactGenericErrorToast" msgid="7774911165341591714">"Det gick inte att spara kontakten."</string>
-    <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"Det gick inte att spara ändringarna av kontaktfotot."</string>
+    <string name="contactSavedErrorToast" msgid="4827033473908688031">"Det gick inte att spara kontaktändringarna"</string>
+    <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"Det gick inte att ta bort kontaktens länk"</string>
+    <string name="contactJoinErrorToast" msgid="5735129234573327701">"Det gick inte att länka kontakten"</string>
+    <string name="contactGenericErrorToast" msgid="3885457515665783976">"Det gick inte att spara kontakten"</string>
+    <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Det gick inte att spara kontaktfotots ändringar"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"Det gick inte att läsa in etiketten"</string>
     <string name="groupSavedToast" msgid="6491495462357722285">"Etikett sparad"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Etiketten raderad"</string>
@@ -126,7 +127,7 @@
     <string name="groupUpdatedToast" msgid="3667977658676267687">"En etikett uppdaterad"</string>
     <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Borttagen från etikett"</string>
     <string name="groupMembersAddedToast" msgid="4824834898718972768">"Tillagt till etikett"</string>
-    <string name="groupSavedErrorToast" msgid="8121032018490980184">"Det gick inte att spara etikettändringarna."</string>
+    <string name="groupSavedErrorToast" msgid="2355891714292740162">"Det gick inte att spara etikettändringarna"</string>
     <string name="groupExistsErrorMessage" msgid="5196811283836946189">"Den etiketten finns redan"</string>
     <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
       <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> kontakter med telefonnummer</item>
@@ -147,7 +148,6 @@
     <string name="callAgain" msgid="3197312117049874778">"Ring igen"</string>
     <string name="returnCall" msgid="8171961914203617813">"Ring upp"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Vill du lägga till <xliff:g id="EMAIL">%s</xliff:g> i Kontakter?"</string>
-    <string name="description_contact_photo" msgid="3387458082667894062">"kontaktbild"</string>
     <string name="description_plus_button" msgid="515164827856229880">"plus"</string>
     <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> av <xliff:g id="TOTAL_NUMBER">%s</xliff:g> kontakter"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"Dina kontakters namn"</string>
@@ -192,7 +192,6 @@
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Datum"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Etikett"</string>
     <string name="change_photo" msgid="8530597935483526383">"Ändra"</string>
-    <string name="primary_photo" msgid="8517942231868516999">"Primärt foto"</string>
     <string name="description_star" msgid="2605854427360036550">"favorit"</string>
     <string name="edit_contact" msgid="7529281274005689512">"Redigera kontakt"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"stäng"</string>
@@ -269,7 +268,6 @@
     <string name="header_name_entry" msgid="1592791008096288306">"Namn"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"E-post"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"Telefon"</string>
-    <string name="header_photo_entry" msgid="4438023151411853238">"Bild"</string>
     <string name="content_description_expand_editor" msgid="1111381475901897470">"Klicka om du vill expandera kontaktredigeraren."</string>
     <string name="content_description_collapse_editor" msgid="7598061318022977825">"Klicka om du vill komprimera kontaktredigeraren."</string>
     <string name="content_description_directions" msgid="2686791825798189335">"vägbeskrivning till plats"</string>
@@ -284,6 +282,8 @@
     <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Byt bild"</string>
     <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Det gick inte att öppna redigeringsappen."</string>
     <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Sparas till"</string>
+    <!-- no translation found for compact_editor_account_selector_read_only_title (1869435992721760221) -->
+    <skip />
     <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"Kontakterna sparas för närvarande i <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Tryck snabbt två gånger om du vill använda ett annat konto."</string>
     <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
       <item quantity="other">Länkade kontakter (<xliff:g id="COUNT">%d</xliff:g>)</item>
@@ -454,22 +454,14 @@
     <string name="chat_jabber" msgid="7561444230307829609">"Chatta med Jabber"</string>
     <string name="chat" msgid="9025361898797412245">"Chatt"</string>
     <string name="description_minus_button" msgid="6908099247930477551">"ta bort"</string>
-    <!-- no translation found for expand_name_fields_description (6883935911480726652) -->
-    <skip />
-    <!-- no translation found for collapse_name_fields_description (4757877385895561556) -->
-    <skip />
-    <!-- no translation found for expand_phonetic_name_fields_description (3865726859582581741) -->
-    <skip />
-    <!-- no translation found for collapse_phonetic_name_fields_description (9102249481855019452) -->
-    <skip />
-    <!-- no translation found for expand_fields_description (8129294181216760037) -->
-    <skip />
-    <!-- no translation found for collapse_fields_description (1884143625854637874) -->
-    <skip />
-    <!-- no translation found for announce_expanded_fields (1075947220478530622) -->
-    <skip />
-    <!-- no translation found for announce_collapsed_fields (6414231530177338704) -->
-    <skip />
+    <string name="expand_name_fields_description" msgid="6883935911480726652">"Expandera namnfält"</string>
+    <string name="collapse_name_fields_description" msgid="4757877385895561556">"Komprimera namnfält"</string>
+    <string name="expand_phonetic_name_fields_description" msgid="3865726859582581741">"Expandera fonetiska namnfält"</string>
+    <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Komprimera fonetiska namnfält"</string>
+    <string name="expand_fields_description" msgid="8129294181216760037">"Expandera"</string>
+    <string name="collapse_fields_description" msgid="1884143625854637874">"Komprimera"</string>
+    <string name="announce_expanded_fields" msgid="1075947220478530622">"Utökat"</string>
+    <string name="announce_collapsed_fields" msgid="6414231530177338704">"Komprimerat"</string>
     <string name="list_filter_all_accounts" msgid="8908683398914322369">"Alla kontakter"</string>
     <string name="list_filter_all_starred" msgid="5031734941601931356">"Stjärnmärkt"</string>
     <string name="list_filter_customize" msgid="4789963356004169321">"Anpassa"</string>
@@ -555,7 +547,8 @@
     <string name="share_favorite_contacts" msgid="4280926751003081042">"Dela favoritkontakterna"</string>
     <string name="share_contacts" msgid="8109287987498711664">"Dela alla kontakter"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"Det gick inte att dela kontakterna."</string>
-    <string name="dialog_import_export" msgid="4360648034889921624">"Importera/exportera kontakter"</string>
+    <!-- no translation found for dialog_export (1628001095187741417) -->
+    <skip />
     <string name="dialog_import" msgid="2431698729761448759">"Importera kontakter"</string>
     <string name="share_error" msgid="948429331673358107">"Den här kontakten kan inte delas."</string>
     <string name="no_contact_to_share" msgid="1276397530378323033">"Det finns inga kontakter att dela."</string>
@@ -570,7 +563,10 @@
     <string name="menu_clear_frequents" msgid="7688250191932838833">"Rensa listan över kontakter"</string>
     <string name="menu_select_sim" msgid="3603578201960504010">"Välj SIM-kort"</string>
     <string name="menu_accounts" msgid="1424330057450189074">"Hantera konton"</string>
-    <string name="menu_import_export" msgid="26217871113229507">"Importera/exportera"</string>
+    <!-- no translation found for menu_import (6107961135813836467) -->
+    <skip />
+    <!-- no translation found for menu_export (2658783911863503902) -->
+    <skip />
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"Blockerade nummer"</string>
     <string name="contact_status_update_attribution" msgid="752179367353018597">"via <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> via <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
@@ -604,4 +600,8 @@
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> sek"</string>
     <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> sek"</string>
     <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> tim <xliff:g id="MINUTES_1">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> sek"</string>
+    <!-- no translation found for dynamic_shortcut_disabled_message (249939425761315252) -->
+    <skip />
+    <!-- no translation found for dynamic_shortcut_contact_removed_message (6845645831837615899) -->
+    <skip />
 </resources>
diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml
index 73119a4..d7213cf 100644
--- a/res/values-sw/strings.xml
+++ b/res/values-sw/strings.xml
@@ -67,6 +67,7 @@
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Anwani zilizopendekezwa"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Anwani zote"</string>
     <string name="contactsJoinedMessage" msgid="3343535986195643136">"Anwani zimeunganishwa"</string>
+    <string name="contact_deleted_named_toast" msgid="6558941164987421174">"<xliff:g id="NAME">%s</xliff:g> amefutwa"</string>
     <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
       <item quantity="other">Anwani zimefutwa</item>
       <item quantity="one">Anwani imefutwa</item>
@@ -113,11 +114,11 @@
     <string name="emptyMainList" msgid="2772242747899664460">"Orodha yako ya anwani haina kitu"</string>
     <string name="contactSavedToast" msgid="9171862279493213075">"Anwani imehifadhiwa"</string>
     <string name="contactUnlinkedToast" msgid="7122823195786012553">"Imetenganisha anwani"</string>
-    <string name="contactSavedErrorToast" msgid="3207250533172944892">"Haikuweza kuhifadhi mabadiliko ya mwasiliani."</string>
-    <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Haikuweza kutenganisha anwani."</string>
-    <string name="contactJoinErrorToast" msgid="3977932531264809035">"Haikuweza kuunganisha anwani."</string>
-    <string name="contactGenericErrorToast" msgid="7774911165341591714">"Kumekuwa na hitilafu ya kuhifadhi anwani."</string>
-    <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"Haikuweza kuhifadhi mabadiliko ya picha ya unayewasiliana naye."</string>
+    <string name="contactSavedErrorToast" msgid="4827033473908688031">"Imeshindwa kuhifadhi mabadiliko ya maelezo ya unayewasiliana naye"</string>
+    <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"Imeshindwa kutenganisha anwani"</string>
+    <string name="contactJoinErrorToast" msgid="5735129234573327701">"Imeshindwa kuunganisha anwani"</string>
+    <string name="contactGenericErrorToast" msgid="3885457515665783976">"Hitilafu imetokea wakati wa kuhifadhi anwani"</string>
+    <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Imeshindwa kuhifadhi mabadiliko ya picha ya unayewasiliana naye"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"Imeshindwa kupakia lebo"</string>
     <string name="groupSavedToast" msgid="6491495462357722285">"Lebo imehifadhiwa"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Lebo imefutwa"</string>
@@ -126,7 +127,7 @@
     <string name="groupUpdatedToast" msgid="3667977658676267687">"Lebo mesasishwa"</string>
     <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Imeondolewa kwenye lebo"</string>
     <string name="groupMembersAddedToast" msgid="4824834898718972768">"Imeongezwa kwenye lebo"</string>
-    <string name="groupSavedErrorToast" msgid="8121032018490980184">"Imeshindwa kuhifadhi mabadiliko ya lebo."</string>
+    <string name="groupSavedErrorToast" msgid="2355891714292740162">"Imeshindwa kuhifadhi mabadiliko ya lebo"</string>
     <string name="groupExistsErrorMessage" msgid="5196811283836946189">"Lebo hiyo tayari ipo"</string>
     <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
       <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> unaowasiliana nao wenye nambari za simu</item>
@@ -147,7 +148,6 @@
     <string name="callAgain" msgid="3197312117049874778">"Piga simu tena"</string>
     <string name="returnCall" msgid="8171961914203617813">"Mpigie"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Ongeza \"<xliff:g id="EMAIL">%s</xliff:g>\" kwa anwani?"</string>
-    <string name="description_contact_photo" msgid="3387458082667894062">"picha ya anwani"</string>
     <string name="description_plus_button" msgid="515164827856229880">"jumlisha"</string>
     <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> ya anwani <xliff:g id="TOTAL_NUMBER">%s</xliff:g>"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"Majina ya anwani zako"</string>
@@ -192,7 +192,6 @@
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Tarehe"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Lebo"</string>
     <string name="change_photo" msgid="8530597935483526383">"Badilisha"</string>
-    <string name="primary_photo" msgid="8517942231868516999">"Picha ya msingi"</string>
     <string name="description_star" msgid="2605854427360036550">"kipendwa"</string>
     <string name="edit_contact" msgid="7529281274005689512">"Hariri anwani"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"funga"</string>
@@ -269,7 +268,6 @@
     <string name="header_name_entry" msgid="1592791008096288306">"Jina"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"Barua pepe"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"Simu"</string>
-    <string name="header_photo_entry" msgid="4438023151411853238">"Picha"</string>
     <string name="content_description_expand_editor" msgid="1111381475901897470">"Bofya ili upanue kihariri cha anwani."</string>
     <string name="content_description_collapse_editor" msgid="7598061318022977825">"Bofya ili ukunje kihariri cha anwani."</string>
     <string name="content_description_directions" msgid="2686791825798189335">"maelekezo ya kwenda mahali"</string>
@@ -284,6 +282,8 @@
     <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Badilisha picha"</string>
     <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Imeshindwa kufungua kihariri."</string>
     <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Inahifadhi kwenye"</string>
+    <!-- no translation found for compact_editor_account_selector_read_only_title (1869435992721760221) -->
+    <skip />
     <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"Kwa sasa inahifadhi katika <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Gonga mara mbili ili ubadilishe akaunti."</string>
     <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
       <item quantity="other">Anwani (<xliff:g id="COUNT">%d</xliff:g>) zilizounganishwa</item>
@@ -454,22 +454,14 @@
     <string name="chat_jabber" msgid="7561444230307829609">"Piga gumzo kwa kutumia Jabber"</string>
     <string name="chat" msgid="9025361898797412245">"Gumzo"</string>
     <string name="description_minus_button" msgid="6908099247930477551">"futa"</string>
-    <!-- no translation found for expand_name_fields_description (6883935911480726652) -->
-    <skip />
-    <!-- no translation found for collapse_name_fields_description (4757877385895561556) -->
-    <skip />
-    <!-- no translation found for expand_phonetic_name_fields_description (3865726859582581741) -->
-    <skip />
-    <!-- no translation found for collapse_phonetic_name_fields_description (9102249481855019452) -->
-    <skip />
-    <!-- no translation found for expand_fields_description (8129294181216760037) -->
-    <skip />
-    <!-- no translation found for collapse_fields_description (1884143625854637874) -->
-    <skip />
-    <!-- no translation found for announce_expanded_fields (1075947220478530622) -->
-    <skip />
-    <!-- no translation found for announce_collapsed_fields (6414231530177338704) -->
-    <skip />
+    <string name="expand_name_fields_description" msgid="6883935911480726652">"Panua sehemu za majina"</string>
+    <string name="collapse_name_fields_description" msgid="4757877385895561556">"Kunja sehemu za majina"</string>
+    <string name="expand_phonetic_name_fields_description" msgid="3865726859582581741">"Panua sehemu za majina ya kifonetiki"</string>
+    <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Kunja sehemu za majina ya kifonetiki"</string>
+    <string name="expand_fields_description" msgid="8129294181216760037">"Panua"</string>
+    <string name="collapse_fields_description" msgid="1884143625854637874">"Kunja"</string>
+    <string name="announce_expanded_fields" msgid="1075947220478530622">"Imepanuliwa"</string>
+    <string name="announce_collapsed_fields" msgid="6414231530177338704">"Imekunjwa"</string>
     <string name="list_filter_all_accounts" msgid="8908683398914322369">"Anwani zote"</string>
     <string name="list_filter_all_starred" msgid="5031734941601931356">"Zenye Nyota"</string>
     <string name="list_filter_customize" msgid="4789963356004169321">"Badilisha kukufaa"</string>
@@ -557,7 +549,8 @@
     <string name="share_favorite_contacts" msgid="4280926751003081042">"Shiriki anwani unazopenda"</string>
     <string name="share_contacts" msgid="8109287987498711664">"Shiriki anwani zote"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"Imeshindwa kushiriki anwani."</string>
-    <string name="dialog_import_export" msgid="4360648034889921624">"Leta/Hamisha wawasiliani"</string>
+    <!-- no translation found for dialog_export (1628001095187741417) -->
+    <skip />
     <string name="dialog_import" msgid="2431698729761448759">"Ingiza anwani"</string>
     <string name="share_error" msgid="948429331673358107">"Mwasiliani huyu hawezi kushirikishwa."</string>
     <string name="no_contact_to_share" msgid="1276397530378323033">"Hakuna anwani za kushiriki."</string>
@@ -572,7 +565,10 @@
     <string name="menu_clear_frequents" msgid="7688250191932838833">"Futa idadi ya mara ambazo unawasiliana nao"</string>
     <string name="menu_select_sim" msgid="3603578201960504010">"Chagua SIM kadi"</string>
     <string name="menu_accounts" msgid="1424330057450189074">"Dhibiti akaunti"</string>
-    <string name="menu_import_export" msgid="26217871113229507">"Leta/hamisha"</string>
+    <!-- no translation found for menu_import (6107961135813836467) -->
+    <skip />
+    <!-- no translation found for menu_export (2658783911863503902) -->
+    <skip />
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"Nambari zilizozuiwa"</string>
     <string name="contact_status_update_attribution" msgid="752179367353018597">"kupitia <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> kupitia <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
@@ -606,4 +602,8 @@
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"Sekunde <xliff:g id="SECONDS">%s</xliff:g>"</string>
     <string name="callDurationMinuteFormat" msgid="4647095486747447674">"Dakika <xliff:g id="MINUTES">%s</xliff:g> sekunde <xliff:g id="SECONDS">%s</xliff:g>"</string>
     <string name="callDurationHourFormat" msgid="7392254193808506640">"Saa <xliff:g id="MINUTES_0">%s</xliff:g> dakika <xliff:g id="MINUTES_1">%s</xliff:g> sekunde <xliff:g id="SECONDS">%s</xliff:g>"</string>
+    <!-- no translation found for dynamic_shortcut_disabled_message (249939425761315252) -->
+    <skip />
+    <!-- no translation found for dynamic_shortcut_contact_removed_message (6845645831837615899) -->
+    <skip />
 </resources>
diff --git a/res/values-sw600dp/dimens.xml b/res/values-sw600dp/dimens.xml
index 6f6f4e1..8dd1ba9 100644
--- a/res/values-sw600dp/dimens.xml
+++ b/res/values-sw600dp/dimens.xml
@@ -28,10 +28,6 @@
     <dimen name="contact_browser_list_top_margin">18dp</dimen>
 
     <dimen name="quick_contact_photo_container_height">360dip</dimen>
-    <!-- Height of the selection indicator of a tab. -->
-    <dimen name="tab_selected_underline_height">3dp</dimen>
-    <!-- Size of text in tabs. -->
-    <dimen name="tab_text_size">16sp</dimen>
 
     <!-- Because the "join" screen has the vertical scroll bar on right,
       we cannot use @dimen/contact_browser_list_header_left_margin as is. -->
diff --git a/res/values-sw720dp-land/dimens.xml b/res/values-sw720dp-land/dimens.xml
index b89c2c1..baa8498 100644
--- a/res/values-sw720dp-land/dimens.xml
+++ b/res/values-sw720dp-land/dimens.xml
@@ -18,5 +18,4 @@
     <dimen name="group_editor_side_padding">64dip</dimen>
     <dimen name="contact_detail_list_top_padding">32dip</dimen>
     <dimen name="detail_contact_photo_size">256dip</dimen>
-    <dimen name="people_activity_landscape_tabs_text_size">16dp</dimen>
 </resources>
diff --git a/res/values-ta-rIN/strings.xml b/res/values-ta-rIN/strings.xml
index fd9bbf9..59b95d2 100644
--- a/res/values-ta-rIN/strings.xml
+++ b/res/values-ta-rIN/strings.xml
@@ -67,6 +67,7 @@
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"பரிந்துரைக்கப்பட்ட தொடர்புகள்"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"எல்லா தொடர்புகளும்"</string>
     <string name="contactsJoinedMessage" msgid="3343535986195643136">"தொடர்புகள் இணைக்கப்பட்டன"</string>
+    <string name="contact_deleted_named_toast" msgid="6558941164987421174">"<xliff:g id="NAME">%s</xliff:g> நீக்கப்பட்டார்"</string>
     <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
       <item quantity="other">தொடர்புகள் நீக்கப்பட்டன</item>
       <item quantity="one">தொடர்பு நீக்கப்பட்டது</item>
@@ -113,11 +114,11 @@
     <string name="emptyMainList" msgid="2772242747899664460">"உங்கள் தொடர்புகள் பட்டியல் காலியாக உள்ளது"</string>
     <string name="contactSavedToast" msgid="9171862279493213075">"தொடர்பு சேமிக்கப்பட்டது"</string>
     <string name="contactUnlinkedToast" msgid="7122823195786012553">"தொடர்புகள் பிரிக்கப்பட்டன"</string>
-    <string name="contactSavedErrorToast" msgid="3207250533172944892">"தொடர்பின் மாற்றங்களைச் சேமிக்க முடியவில்லை."</string>
-    <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"தொடர்பை அகற்ற முடியவில்லை."</string>
-    <string name="contactJoinErrorToast" msgid="3977932531264809035">"தொடர்பை இணைக்க முடியவில்லை."</string>
-    <string name="contactGenericErrorToast" msgid="7774911165341591714">"தொடர்பைச் சேமிப்பதில் பிழை."</string>
-    <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"தொடர்பின் பட மாற்றங்களைச் சேமிக்க முடியவில்லை."</string>
+    <string name="contactSavedErrorToast" msgid="4827033473908688031">"தொடர்பு மாற்றங்களைச் சேமிக்க முடியவில்லை"</string>
+    <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"தொடர்பை அகற்ற முடியவில்லை"</string>
+    <string name="contactJoinErrorToast" msgid="5735129234573327701">"தொடர்பை இணைக்க முடியவில்லை"</string>
+    <string name="contactGenericErrorToast" msgid="3885457515665783976">"தொடர்பைச் சேமிப்பதில் பிழை"</string>
+    <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"தொடர்புப் பட மாற்றங்களைச் சேமிக்க முடியவில்லை"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"லேபிளை ஏற்ற முடியவில்லை"</string>
     <string name="groupSavedToast" msgid="6491495462357722285">"லேபிள் சேமிக்கப்பட்டது"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"லேபிள் நீக்கப்பட்டது"</string>
@@ -126,7 +127,7 @@
     <string name="groupUpdatedToast" msgid="3667977658676267687">"லேபிள் புதுப்பிக்கப்பட்டது"</string>
     <string name="groupMembersRemovedToast" msgid="3510563559799376603">"லேபிளிலிருந்து அகற்றப்பட்டன"</string>
     <string name="groupMembersAddedToast" msgid="4824834898718972768">"லேபிளில் சேர்க்கப்பட்டது"</string>
-    <string name="groupSavedErrorToast" msgid="8121032018490980184">"லேபிள் மாற்றங்களைச் சேமிக்க முடியவில்லை."</string>
+    <string name="groupSavedErrorToast" msgid="2355891714292740162">"லேபிள் மாற்றங்களைச் சேமிக்க முடியவில்லை"</string>
     <string name="groupExistsErrorMessage" msgid="5196811283836946189">"லேபிள் ஏற்கனவே உள்ளது"</string>
     <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
       <item quantity="other">மொபைல் எண்களுடன் <xliff:g id="COUNT">%d</xliff:g> தொடர்புகள் உள்ளன</item>
@@ -147,7 +148,6 @@
     <string name="callAgain" msgid="3197312117049874778">"மீண்டும் அழை"</string>
     <string name="returnCall" msgid="8171961914203617813">"திரும்பி அழை"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"\"<xliff:g id="EMAIL">%s</xliff:g>\" ஐத் தொடர்புகளில் சேர்க்கவா?"</string>
-    <string name="description_contact_photo" msgid="3387458082667894062">"தொடர்பு படம்"</string>
     <string name="description_plus_button" msgid="515164827856229880">"சேர்"</string>
     <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> தொடர்புகளில் <xliff:g id="TOTAL_NUMBER">%s</xliff:g>"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"உங்கள் தொடர்புகளின் பெயர்கள்"</string>
@@ -192,7 +192,6 @@
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"தேதி"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"லேபிளைச் சேர்"</string>
     <string name="change_photo" msgid="8530597935483526383">"மாற்று"</string>
-    <string name="primary_photo" msgid="8517942231868516999">"முதன்மை படம்"</string>
     <string name="description_star" msgid="2605854427360036550">"பிடித்தது"</string>
     <string name="edit_contact" msgid="7529281274005689512">"தொடர்பைத் திருத்து"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"மூடும்"</string>
@@ -269,7 +268,6 @@
     <string name="header_name_entry" msgid="1592791008096288306">"பெயர்"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"மின்னஞ்சல்"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"ஃபோன்"</string>
-    <string name="header_photo_entry" msgid="4438023151411853238">"படம்"</string>
     <string name="content_description_expand_editor" msgid="1111381475901897470">"தொடர்பு திருத்தியை விரிக்க, கிளிக் செய்க."</string>
     <string name="content_description_collapse_editor" msgid="7598061318022977825">"தொடர்பு திருத்தியைச் சுருக்க, கிளிக் செய்க."</string>
     <string name="content_description_directions" msgid="2686791825798189335">"இடத்தை நோக்கிய திசைகள்"</string>
@@ -284,6 +282,8 @@
     <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"படத்தை மாற்றவும்"</string>
     <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"எடிட்டரைத் திறக்க முடியவில்லை."</string>
     <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"இதில் சேமிக்கிறது"</string>
+    <!-- no translation found for compact_editor_account_selector_read_only_title (1869435992721760221) -->
+    <skip />
     <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"தற்போது <xliff:g id="ACCOUNT_NAME">%s</xliff:g> இல் சேமிக்கிறது. வேறொரு கணக்கைத் தேர்ந்தெடுக்க, இருமுறை தட்டவும்."</string>
     <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
       <item quantity="other">இணைக்கப்பட்ட தொடர்புகள் (<xliff:g id="COUNT">%d</xliff:g>)</item>
@@ -454,22 +454,14 @@
     <string name="chat_jabber" msgid="7561444230307829609">"Jabber இல் அரட்டையடி"</string>
     <string name="chat" msgid="9025361898797412245">"அரட்டை"</string>
     <string name="description_minus_button" msgid="6908099247930477551">"நீக்கு"</string>
-    <!-- no translation found for expand_name_fields_description (6883935911480726652) -->
-    <skip />
-    <!-- no translation found for collapse_name_fields_description (4757877385895561556) -->
-    <skip />
-    <!-- no translation found for expand_phonetic_name_fields_description (3865726859582581741) -->
-    <skip />
-    <!-- no translation found for collapse_phonetic_name_fields_description (9102249481855019452) -->
-    <skip />
-    <!-- no translation found for expand_fields_description (8129294181216760037) -->
-    <skip />
-    <!-- no translation found for collapse_fields_description (1884143625854637874) -->
-    <skip />
-    <!-- no translation found for announce_expanded_fields (1075947220478530622) -->
-    <skip />
-    <!-- no translation found for announce_collapsed_fields (6414231530177338704) -->
-    <skip />
+    <string name="expand_name_fields_description" msgid="6883935911480726652">"பெயர்ப் புலங்களை விரிக்கும்"</string>
+    <string name="collapse_name_fields_description" msgid="4757877385895561556">"பெயர்ப் புலங்களைச் சுருக்கும்"</string>
+    <string name="expand_phonetic_name_fields_description" msgid="3865726859582581741">"ஒலிப்புமுறைப் பெயர்ப் புலங்களை விரிக்கும்"</string>
+    <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"ஒலிப்புமுறைப் பெயர்ப் புலங்களைச் சுருக்கும்"</string>
+    <string name="expand_fields_description" msgid="8129294181216760037">"விரிக்கும்"</string>
+    <string name="collapse_fields_description" msgid="1884143625854637874">"சுருக்கும்"</string>
+    <string name="announce_expanded_fields" msgid="1075947220478530622">"விரிக்கப்பட்டது"</string>
+    <string name="announce_collapsed_fields" msgid="6414231530177338704">"சுருக்கப்பட்டது"</string>
     <string name="list_filter_all_accounts" msgid="8908683398914322369">"எல்லா தொடர்புகளும்"</string>
     <string name="list_filter_all_starred" msgid="5031734941601931356">"நட்சத்திரமிட்டவை"</string>
     <string name="list_filter_customize" msgid="4789963356004169321">"தனிப்பயனாக்கு"</string>
@@ -555,7 +547,8 @@
     <string name="share_favorite_contacts" msgid="4280926751003081042">"பிடித்த தொடர்புகளைப் பகிர்"</string>
     <string name="share_contacts" msgid="8109287987498711664">"எல்லா தொடர்புகளையும் பகிர்"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"தொடர்புகளைப் பகிர முடியவில்லை."</string>
-    <string name="dialog_import_export" msgid="4360648034889921624">"தொடர்புகளை இறக்குமதி/ஏற்றுமதி செய்தல்"</string>
+    <!-- no translation found for dialog_export (1628001095187741417) -->
+    <skip />
     <string name="dialog_import" msgid="2431698729761448759">"தொடர்புகளை இறக்குமதி செய்"</string>
     <string name="share_error" msgid="948429331673358107">"தொடர்பைப் பகிர முடியவில்லை."</string>
     <string name="no_contact_to_share" msgid="1276397530378323033">"பகிர, தொடர்புகள் இல்லை."</string>
@@ -570,7 +563,10 @@
     <string name="menu_clear_frequents" msgid="7688250191932838833">"அடிக்கடி தொடர்புகொண்டவர்களை அழி"</string>
     <string name="menu_select_sim" msgid="3603578201960504010">"சிம் ஐத் தேர்ந்தெடுக்கவும்"</string>
     <string name="menu_accounts" msgid="1424330057450189074">"கணக்குகளை நிர்வகி"</string>
-    <string name="menu_import_export" msgid="26217871113229507">"இறக்குமதி/ஏற்றுமதி"</string>
+    <!-- no translation found for menu_import (6107961135813836467) -->
+    <skip />
+    <!-- no translation found for menu_export (2658783911863503902) -->
+    <skip />
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"தடுக்கப்பட்ட எண்கள்"</string>
     <string name="contact_status_update_attribution" msgid="752179367353018597">"<xliff:g id="SOURCE">%1$s</xliff:g> வழியாக"</string>
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="SOURCE">%2$s</xliff:g> வழியாக <xliff:g id="DATE">%1$s</xliff:g>"</string>
@@ -604,4 +600,8 @@
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> வி"</string>
     <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> நி <xliff:g id="SECONDS">%s</xliff:g> வி"</string>
     <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> ம <xliff:g id="MINUTES_1">%s</xliff:g> நி <xliff:g id="SECONDS">%s</xliff:g> வி"</string>
+    <!-- no translation found for dynamic_shortcut_disabled_message (249939425761315252) -->
+    <skip />
+    <!-- no translation found for dynamic_shortcut_contact_removed_message (6845645831837615899) -->
+    <skip />
 </resources>
diff --git a/res/values-te-rIN/strings.xml b/res/values-te-rIN/strings.xml
index 34c3402..436438f 100644
--- a/res/values-te-rIN/strings.xml
+++ b/res/values-te-rIN/strings.xml
@@ -67,6 +67,7 @@
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"సూచిత పరిచయాలు"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"అన్ని పరిచయాలు"</string>
     <string name="contactsJoinedMessage" msgid="3343535986195643136">"పరిచయాలు లింక్ చేయబడ్డాయి"</string>
+    <string name="contact_deleted_named_toast" msgid="6558941164987421174">"<xliff:g id="NAME">%s</xliff:g> తొలగించబడింది"</string>
     <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
       <item quantity="other">పరిచయాలు తొలగించబడ్డాయి</item>
       <item quantity="one">పరిచయం తొలగించబడింది</item>
@@ -113,11 +114,11 @@
     <string name="emptyMainList" msgid="2772242747899664460">"మీ పరిచయాల జాబితా ఖాళీగా ఉంది"</string>
     <string name="contactSavedToast" msgid="9171862279493213075">"పరిచయం సేవ్ చేయబడింది"</string>
     <string name="contactUnlinkedToast" msgid="7122823195786012553">"పరిచయాలు వేరు చేయబడ్డాయి"</string>
-    <string name="contactSavedErrorToast" msgid="3207250533172944892">"పరిచయ మార్పులను సేవ్ చేయడం సాధ్యపడలేదు."</string>
-    <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"పరిచయాన్ని వేరు చేయడం సాధ్యపడలేదు."</string>
-    <string name="contactJoinErrorToast" msgid="3977932531264809035">"పరిచయాన్ని లింక్ చేయడం సాధ్యపడలేదు."</string>
-    <string name="contactGenericErrorToast" msgid="7774911165341591714">"పరిచయాన్ని సేవ్ చేయడంలో లోపం ఏర్పడింది."</string>
-    <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"పరిచయం ఫోటో మార్పులను సేవ్ చేయలేకపోయింది."</string>
+    <string name="contactSavedErrorToast" msgid="4827033473908688031">"పరిచయం మార్పులను సేవ్ చేయలేకపోయింది"</string>
+    <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"పరిచయాన్ని అన్‌లింక్ చేయలేకపోయింది"</string>
+    <string name="contactJoinErrorToast" msgid="5735129234573327701">"పరిచయాన్ని లింక్ చేయలేకపోయింది"</string>
+    <string name="contactGenericErrorToast" msgid="3885457515665783976">"పరిచయాన్ని సేవ్ చేయడంలో లోపం ఏర్పడింది"</string>
+    <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"పరిచయం ఫోటో మార్పులను సేవ్ చేయలేకపోయింది"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"లేబుల్‌ను లోడ్ చేయడంలో విఫలమైంది"</string>
     <string name="groupSavedToast" msgid="6491495462357722285">"లేబుల్ సేవ్ చేయబడింది"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"లేబుల్ తొలగించబడింది"</string>
@@ -126,7 +127,7 @@
     <string name="groupUpdatedToast" msgid="3667977658676267687">"లేబుల్ నవీకరించబడింది"</string>
     <string name="groupMembersRemovedToast" msgid="3510563559799376603">"లేబుల్ నుండి తీసివేయబడ్డాయి"</string>
     <string name="groupMembersAddedToast" msgid="4824834898718972768">"లేబుల్‌కు జోడించబడింది/జోడించబడ్డాయి"</string>
-    <string name="groupSavedErrorToast" msgid="8121032018490980184">"లేబుల్ మార్పులను సేవ్ చేయలేకపోయింది."</string>
+    <string name="groupSavedErrorToast" msgid="2355891714292740162">"లేబుల్ మార్పులను సేవ్ చేయలేకపోయింది"</string>
     <string name="groupExistsErrorMessage" msgid="5196811283836946189">"ఈ లేబుల్ ఇప్పటికే ఉంది"</string>
     <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
       <item quantity="other">ఫోన్ నంబర్‌లు ఉన్న <xliff:g id="COUNT">%d</xliff:g> పరిచయాలు</item>
@@ -147,7 +148,6 @@
     <string name="callAgain" msgid="3197312117049874778">"మళ్లీ కాల్ చేయి"</string>
     <string name="returnCall" msgid="8171961914203617813">"కాల్‌ను తిరిగి చేయి"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"\"<xliff:g id="EMAIL">%s</xliff:g>\"ని పరిచయాలకు జోడించాలా?"</string>
-    <string name="description_contact_photo" msgid="3387458082667894062">"పరిచయ ఫోటో"</string>
     <string name="description_plus_button" msgid="515164827856229880">"ప్లస్"</string>
     <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="TOTAL_NUMBER">%s</xliff:g> పరిచయాల్లో <xliff:g id="CURRENT_NUMBER">%s</xliff:g>"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"మీ పరిచయాల యొక్క పేర్లు"</string>
@@ -192,7 +192,6 @@
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"తేదీ"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"లేబుల్"</string>
     <string name="change_photo" msgid="8530597935483526383">"మార్చు"</string>
-    <string name="primary_photo" msgid="8517942231868516999">"ప్రాథమిక ఫోటో"</string>
     <string name="description_star" msgid="2605854427360036550">"ఇష్టంగా గుర్తించు"</string>
     <string name="edit_contact" msgid="7529281274005689512">"పరిచయాన్ని సవరించు"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"మూసివేస్తుంది"</string>
@@ -269,7 +268,6 @@
     <string name="header_name_entry" msgid="1592791008096288306">"పేరు"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"ఇమెయిల్"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"ఫోన్"</string>
-    <string name="header_photo_entry" msgid="4438023151411853238">"ఫోటో"</string>
     <string name="content_description_expand_editor" msgid="1111381475901897470">"పరిచయ ఎడిటర్‌ని విస్తరింపజేయడానికి క్లిక్ చేయండి."</string>
     <string name="content_description_collapse_editor" msgid="7598061318022977825">"పరిచయ ఎడిటర్‌ని కుదించడానికి క్లిక్ చేయండి."</string>
     <string name="content_description_directions" msgid="2686791825798189335">"స్థానానికి వెళ్లడానికి దిశలు"</string>
@@ -284,6 +282,8 @@
     <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"ఫోటోను మార్చండి"</string>
     <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"ఎడిటర్‌ను తెరవడం విఫలమైంది."</string>
     <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"దీనికి సేవ్ చేయబడుతోంది"</string>
+    <!-- no translation found for compact_editor_account_selector_read_only_title (1869435992721760221) -->
+    <skip />
     <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"ప్రస్తుతం <xliff:g id="ACCOUNT_NAME">%s</xliff:g>కి సేవ్ చేస్తోంది. వేరే ఖాతాను ఎంచుకోవడానికి రెండుసార్లు నొక్కండి."</string>
     <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
       <item quantity="other">లింక్ చేయబడిన పరిచయాలు (<xliff:g id="COUNT">%d</xliff:g>)</item>
@@ -454,22 +454,14 @@
     <string name="chat_jabber" msgid="7561444230307829609">"Jabberని ఉపయోగించి చాట్ చేయండి"</string>
     <string name="chat" msgid="9025361898797412245">"చాట్ చేయండి"</string>
     <string name="description_minus_button" msgid="6908099247930477551">"తొలగించు"</string>
-    <!-- no translation found for expand_name_fields_description (6883935911480726652) -->
-    <skip />
-    <!-- no translation found for collapse_name_fields_description (4757877385895561556) -->
-    <skip />
-    <!-- no translation found for expand_phonetic_name_fields_description (3865726859582581741) -->
-    <skip />
-    <!-- no translation found for collapse_phonetic_name_fields_description (9102249481855019452) -->
-    <skip />
-    <!-- no translation found for expand_fields_description (8129294181216760037) -->
-    <skip />
-    <!-- no translation found for collapse_fields_description (1884143625854637874) -->
-    <skip />
-    <!-- no translation found for announce_expanded_fields (1075947220478530622) -->
-    <skip />
-    <!-- no translation found for announce_collapsed_fields (6414231530177338704) -->
-    <skip />
+    <string name="expand_name_fields_description" msgid="6883935911480726652">"పేరు ఫీల్డ్‌లను విస్తరింపజేస్తుంది"</string>
+    <string name="collapse_name_fields_description" msgid="4757877385895561556">"పేరు ఫీల్డ్‌లను కుదిస్తుంది"</string>
+    <string name="expand_phonetic_name_fields_description" msgid="3865726859582581741">"ఫొనెటిక్ పేరు ఫీల్డ్‌లను విస్తరింపజేస్తుంది"</string>
+    <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"ఫొనెటిక్ పేరు ఫీల్డ్‌లను కుదిస్తుంది"</string>
+    <string name="expand_fields_description" msgid="8129294181216760037">"విస్తరింపజేస్తుంది"</string>
+    <string name="collapse_fields_description" msgid="1884143625854637874">"కుదిస్తుంది"</string>
+    <string name="announce_expanded_fields" msgid="1075947220478530622">"విస్తరింపజేయబడింది"</string>
+    <string name="announce_collapsed_fields" msgid="6414231530177338704">"కుదించబడింది"</string>
     <string name="list_filter_all_accounts" msgid="8908683398914322369">"అన్ని పరిచయాలు"</string>
     <string name="list_filter_all_starred" msgid="5031734941601931356">"నక్షత్రం గుర్తు ఉన్నవి"</string>
     <string name="list_filter_customize" msgid="4789963356004169321">"అనుకూలీకరించు"</string>
@@ -555,7 +547,8 @@
     <string name="share_favorite_contacts" msgid="4280926751003081042">"ఇష్టమైన పరిచయాలను భాగస్వామ్యం చేయి"</string>
     <string name="share_contacts" msgid="8109287987498711664">"పరిచయాలన్నీ భాగస్వామ్యం చేయి"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"పరిచయాలను భాగస్వామ్యం చేయడంలో విఫలమైంది."</string>
-    <string name="dialog_import_export" msgid="4360648034889921624">"పరిచయాలను దిగుమతి/ఎగుమతి చేయండి"</string>
+    <!-- no translation found for dialog_export (1628001095187741417) -->
+    <skip />
     <string name="dialog_import" msgid="2431698729761448759">"పరిచయాలను దిగుమతి చేయండి"</string>
     <string name="share_error" msgid="948429331673358107">"ఈ పరిచయాన్ని భాగస్వామ్యం చేయడం సాధ్యపడదు."</string>
     <string name="no_contact_to_share" msgid="1276397530378323033">"భాగస్వామ్యం చేయడానికి పరిచయాలు ఏవీ లేవు."</string>
@@ -570,7 +563,10 @@
     <string name="menu_clear_frequents" msgid="7688250191932838833">"తరచుగా ఉన్నవాటిని క్లియర్ చేయి"</string>
     <string name="menu_select_sim" msgid="3603578201960504010">"SIM కార్డును ఎంచుకోండి"</string>
     <string name="menu_accounts" msgid="1424330057450189074">"ఖాతాలను నిర్వహించు"</string>
-    <string name="menu_import_export" msgid="26217871113229507">"దిగుమతి చేయి/ఎగుమతి చేయి"</string>
+    <!-- no translation found for menu_import (6107961135813836467) -->
+    <skip />
+    <!-- no translation found for menu_export (2658783911863503902) -->
+    <skip />
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"బ్లాక్ చేయబడిన నంబర్‌లు"</string>
     <string name="contact_status_update_attribution" msgid="752179367353018597">"<xliff:g id="SOURCE">%1$s</xliff:g> ద్వారా"</string>
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="SOURCE">%2$s</xliff:g> ద్వారా <xliff:g id="DATE">%1$s</xliff:g>"</string>
@@ -604,4 +600,8 @@
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> సెక"</string>
     <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> నిమి <xliff:g id="SECONDS">%s</xliff:g> సెక"</string>
     <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> గం <xliff:g id="MINUTES_1">%s</xliff:g> నిమి <xliff:g id="SECONDS">%s</xliff:g> సెక"</string>
+    <!-- no translation found for dynamic_shortcut_disabled_message (249939425761315252) -->
+    <skip />
+    <!-- no translation found for dynamic_shortcut_contact_removed_message (6845645831837615899) -->
+    <skip />
 </resources>
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml
index 29d9fb2..96856dc 100644
--- a/res/values-th/strings.xml
+++ b/res/values-th/strings.xml
@@ -67,6 +67,7 @@
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"รายชื่อที่แนะนำ"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"รายชื่อติดต่อทั้งหมด"</string>
     <string name="contactsJoinedMessage" msgid="3343535986195643136">"ลิงก์รายชื่อติดต่อแล้ว"</string>
+    <string name="contact_deleted_named_toast" msgid="6558941164987421174">"ลบ <xliff:g id="NAME">%s</xliff:g> แล้ว"</string>
     <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
       <item quantity="other">รายชื่อติดต่อที่ลบแล้ว</item>
       <item quantity="one">รายชื่อติดต่อที่ลบแล้ว</item>
@@ -113,11 +114,11 @@
     <string name="emptyMainList" msgid="2772242747899664460">"รายชื่อติดต่อของคุณว่างเปล่า"</string>
     <string name="contactSavedToast" msgid="9171862279493213075">"บันทึกรายชื่อติดต่อแล้ว"</string>
     <string name="contactUnlinkedToast" msgid="7122823195786012553">"ยกเลิกการลิงก์รายชื่อติดต่อแล้ว"</string>
-    <string name="contactSavedErrorToast" msgid="3207250533172944892">"ไม่สามารถบันทึกการเปลี่ยนแปลงรายชื่อติดต่อ"</string>
-    <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"ไม่สามารถยกเลิกการลิงก์รายชื่อติดต่อ"</string>
-    <string name="contactJoinErrorToast" msgid="3977932531264809035">"ไม่สามารถลิงก์รายชื่อติดต่อ"</string>
-    <string name="contactGenericErrorToast" msgid="7774911165341591714">"เกิดข้อผิดพลาดในการบันทึกรายชื่อติดต่อ"</string>
-    <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"ไม่สามารถบันทึกการเปลี่ยนแปลงในรูปภาพรายชื่อติดต่อ"</string>
+    <string name="contactSavedErrorToast" msgid="4827033473908688031">"ไม่สามารถบันทึกการเปลี่ยนแปลงรายชื่อติดต่อ"</string>
+    <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"ไม่สามารถยกเลิกการลิงก์รายชื่อติดต่อ"</string>
+    <string name="contactJoinErrorToast" msgid="5735129234573327701">"ไม่สามารถลิงก์รายชื่อติดต่อ"</string>
+    <string name="contactGenericErrorToast" msgid="3885457515665783976">"เกิดข้อผิดพลาดในการบันทึกรายชื่อติดต่อ"</string>
+    <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"ไม่สามารถบันทึกการเปลี่ยนแปลงในรูปภาพรายชื่อติดต่อ"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"โหลดป้ายกำกับไม่สำเร็จ"</string>
     <string name="groupSavedToast" msgid="6491495462357722285">"บันทึกป้ายกำกับแล้ว"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"ลบป้ายกำกับออกแล้ว"</string>
@@ -126,7 +127,7 @@
     <string name="groupUpdatedToast" msgid="3667977658676267687">"อัปเดตป้ายกำกับแล้ว"</string>
     <string name="groupMembersRemovedToast" msgid="3510563559799376603">"นำออกจากป้ายกำกับแล้ว"</string>
     <string name="groupMembersAddedToast" msgid="4824834898718972768">"เพิ่มรายชื่อติดต่อไปยังป้ายกำกับแล้ว"</string>
-    <string name="groupSavedErrorToast" msgid="8121032018490980184">"ไม่สามารถบันทึกการเปลี่ยนแปลงป้ายกำกับได้"</string>
+    <string name="groupSavedErrorToast" msgid="2355891714292740162">"ไม่สามารถบันทึกการเปลี่ยนแปลงป้ายกำกับได้"</string>
     <string name="groupExistsErrorMessage" msgid="5196811283836946189">"ป้ายกำกับนี้มีอยู่แล้ว"</string>
     <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
       <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> รายชื่อติดต่อมีหมายเลขโทรศัพท์</item>
@@ -147,7 +148,6 @@
     <string name="callAgain" msgid="3197312117049874778">"โทรอีกครั้ง"</string>
     <string name="returnCall" msgid="8171961914203617813">"โทรกลับ"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"เพิ่ม \"<xliff:g id="EMAIL">%s</xliff:g>\" ในสมุดโทรศัพท์หรือไม่"</string>
-    <string name="description_contact_photo" msgid="3387458082667894062">"ภาพของรายชื่อ"</string>
     <string name="description_plus_button" msgid="515164827856229880">"plus"</string>
     <string name="exporting_contact_list_progress" msgid="560522409559101193">"รายชื่อในสมุดโทรศัพท์ <xliff:g id="CURRENT_NUMBER">%s</xliff:g> จาก <xliff:g id="TOTAL_NUMBER">%s</xliff:g> รายการ"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"ชื่อของรายชื่อในสมุดโทรศัพท์ของคุณ"</string>
@@ -192,7 +192,6 @@
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"วันที่"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"ป้ายกำกับ"</string>
     <string name="change_photo" msgid="8530597935483526383">"เปลี่ยน"</string>
-    <string name="primary_photo" msgid="8517942231868516999">"รูปภาพหลัก"</string>
     <string name="description_star" msgid="2605854427360036550">"รายการโปรด"</string>
     <string name="edit_contact" msgid="7529281274005689512">"แก้ไขรายชื่อติดต่อ"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"ปิด"</string>
@@ -269,7 +268,6 @@
     <string name="header_name_entry" msgid="1592791008096288306">"ชื่อ"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"อีเมล"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"โทรศัพท์"</string>
-    <string name="header_photo_entry" msgid="4438023151411853238">"รูปภาพ"</string>
     <string name="content_description_expand_editor" msgid="1111381475901897470">"คลิกเพื่อขยายตัวแก้ไขรายชื่อติดต่อ"</string>
     <string name="content_description_collapse_editor" msgid="7598061318022977825">"คลิกเพื่อยุบตัวแก้ไขรายชื่อติดต่อ"</string>
     <string name="content_description_directions" msgid="2686791825798189335">"เส้นทางไปยังสถานที่"</string>
@@ -284,6 +282,8 @@
     <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"เปลี่ยนรูปภาพ"</string>
     <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"ไม่สามารถเปิดตัวแก้ไข"</string>
     <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"บันทึกลงใน"</string>
+    <!-- no translation found for compact_editor_account_selector_read_only_title (1869435992721760221) -->
+    <skip />
     <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"ขณะนี้กำลังบันทึกไปยัง <xliff:g id="ACCOUNT_NAME">%s</xliff:g> แตะ 2 ครั้งเพื่อเลือกบัญชีอื่น"</string>
     <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
       <item quantity="other">รายชื่อติดต่อที่ลิงก์ (<xliff:g id="COUNT">%d</xliff:g>)</item>
@@ -454,22 +454,14 @@
     <string name="chat_jabber" msgid="7561444230307829609">"แชทโดยใช้ Jabber"</string>
     <string name="chat" msgid="9025361898797412245">"แชท"</string>
     <string name="description_minus_button" msgid="6908099247930477551">"ลบ"</string>
-    <!-- no translation found for expand_name_fields_description (6883935911480726652) -->
-    <skip />
-    <!-- no translation found for collapse_name_fields_description (4757877385895561556) -->
-    <skip />
-    <!-- no translation found for expand_phonetic_name_fields_description (3865726859582581741) -->
-    <skip />
-    <!-- no translation found for collapse_phonetic_name_fields_description (9102249481855019452) -->
-    <skip />
-    <!-- no translation found for expand_fields_description (8129294181216760037) -->
-    <skip />
-    <!-- no translation found for collapse_fields_description (1884143625854637874) -->
-    <skip />
-    <!-- no translation found for announce_expanded_fields (1075947220478530622) -->
-    <skip />
-    <!-- no translation found for announce_collapsed_fields (6414231530177338704) -->
-    <skip />
+    <string name="expand_name_fields_description" msgid="6883935911480726652">"ขยายช่องชื่อ"</string>
+    <string name="collapse_name_fields_description" msgid="4757877385895561556">"ยุบช่องชื่อ"</string>
+    <string name="expand_phonetic_name_fields_description" msgid="3865726859582581741">"ขยายช่องคำอ่านชื่อ"</string>
+    <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"ยุบช่องคำอ่านชื่อ"</string>
+    <string name="expand_fields_description" msgid="8129294181216760037">"ขยาย"</string>
+    <string name="collapse_fields_description" msgid="1884143625854637874">"ยุบ"</string>
+    <string name="announce_expanded_fields" msgid="1075947220478530622">"ขยายแล้ว"</string>
+    <string name="announce_collapsed_fields" msgid="6414231530177338704">"ยุบแล้ว"</string>
     <string name="list_filter_all_accounts" msgid="8908683398914322369">"รายชื่อติดต่อทั้งหมด"</string>
     <string name="list_filter_all_starred" msgid="5031734941601931356">"ที่ติดดาว"</string>
     <string name="list_filter_customize" msgid="4789963356004169321">"กำหนดค่า"</string>
@@ -555,7 +547,8 @@
     <string name="share_favorite_contacts" msgid="4280926751003081042">"แชร์รายชื่อติดต่อโปรด"</string>
     <string name="share_contacts" msgid="8109287987498711664">"แชร์รายชื่อติดต่อทั้งหมด"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"ไม่สามารถแชร์รายชื่อติดต่อ"</string>
-    <string name="dialog_import_export" msgid="4360648034889921624">"นำเข้า/ส่งออกผู้ติดต่อ"</string>
+    <!-- no translation found for dialog_export (1628001095187741417) -->
+    <skip />
     <string name="dialog_import" msgid="2431698729761448759">"นำเข้าสมุดโทรศัพท์"</string>
     <string name="share_error" msgid="948429331673358107">"ไม่สามารถแชร์รายชื่อติดต่อนี้ได้"</string>
     <string name="no_contact_to_share" msgid="1276397530378323033">"ไม่มีรายชื่อติดต่อที่จะแชร์"</string>
@@ -570,7 +563,10 @@
     <string name="menu_clear_frequents" msgid="7688250191932838833">"ล้างผู้ที่คุณติดต่อด้วยบ่อยๆ"</string>
     <string name="menu_select_sim" msgid="3603578201960504010">"เลือกซิมการ์ด"</string>
     <string name="menu_accounts" msgid="1424330057450189074">"จัดการบัญชี"</string>
-    <string name="menu_import_export" msgid="26217871113229507">"นำเข้า/ส่งออก"</string>
+    <!-- no translation found for menu_import (6107961135813836467) -->
+    <skip />
+    <!-- no translation found for menu_export (2658783911863503902) -->
+    <skip />
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"หมายเลขที่ถูกบล็อก"</string>
     <string name="contact_status_update_attribution" msgid="752179367353018597">"ผ่านทาง <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> ผ่านทาง <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
@@ -604,4 +600,8 @@
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> วินาที"</string>
     <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> นาที <xliff:g id="SECONDS">%s</xliff:g> วินาที"</string>
     <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> ชั่วโมง <xliff:g id="MINUTES_1">%s</xliff:g> นาที <xliff:g id="SECONDS">%s</xliff:g> วินาที"</string>
+    <!-- no translation found for dynamic_shortcut_disabled_message (249939425761315252) -->
+    <skip />
+    <!-- no translation found for dynamic_shortcut_contact_removed_message (6845645831837615899) -->
+    <skip />
 </resources>
diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml
index 35f780e..25b439d 100644
--- a/res/values-tl/strings.xml
+++ b/res/values-tl/strings.xml
@@ -67,6 +67,7 @@
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Mga iminumungkahing contact"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Lahat ng mga contact"</string>
     <string name="contactsJoinedMessage" msgid="3343535986195643136">"Na-link na ang mga contact"</string>
+    <string name="contact_deleted_named_toast" msgid="6558941164987421174">"Na-delete si <xliff:g id="NAME">%s</xliff:g>"</string>
     <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
       <item quantity="one">Na-delete na ang mga contact</item>
       <item quantity="other">Na-delete na ang mga contact</item>
@@ -113,11 +114,11 @@
     <string name="emptyMainList" msgid="2772242747899664460">"Walang laman ang iyong listahan ng mga contact"</string>
     <string name="contactSavedToast" msgid="9171862279493213075">"Na-save ang contact"</string>
     <string name="contactUnlinkedToast" msgid="7122823195786012553">"Na-unlink ang mga contact"</string>
-    <string name="contactSavedErrorToast" msgid="3207250533172944892">"Hindi ma-save ang mga pagbabago sa contact."</string>
-    <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Hindi ma-unlink ang contact."</string>
-    <string name="contactJoinErrorToast" msgid="3977932531264809035">"Hindi ma-link ang contact."</string>
-    <string name="contactGenericErrorToast" msgid="7774911165341591714">"Error sa pagse-save ng contact."</string>
-    <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"Hindi ma-save ang mga pagbabago sa larawan ng contact."</string>
+    <string name="contactSavedErrorToast" msgid="4827033473908688031">"Hindi ma-save ang mga pagbabago sa contact"</string>
+    <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"Hindi ma-unlink ang contact"</string>
+    <string name="contactJoinErrorToast" msgid="5735129234573327701">"Hindi ma-link ang contact"</string>
+    <string name="contactGenericErrorToast" msgid="3885457515665783976">"Error sa pag-save ng contact"</string>
+    <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Hindi ma-save ang mga pagbabago sa larawan ng contact"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"Nabigong i-load ang label"</string>
     <string name="groupSavedToast" msgid="6491495462357722285">"Na-save ang label"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Na-delete ang label"</string>
@@ -126,7 +127,7 @@
     <string name="groupUpdatedToast" msgid="3667977658676267687">"In-update ang label"</string>
     <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Inalis sa label"</string>
     <string name="groupMembersAddedToast" msgid="4824834898718972768">"Idinagdag sa label"</string>
-    <string name="groupSavedErrorToast" msgid="8121032018490980184">"Hindi ma-save ang mga pagbabago sa label."</string>
+    <string name="groupSavedErrorToast" msgid="2355891714292740162">"Hindi ma-save ang mga pagbabago sa label"</string>
     <string name="groupExistsErrorMessage" msgid="5196811283836946189">"Mayroon nang ganyang label"</string>
     <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
       <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> contact na may mga numero ng telepono</item>
@@ -147,7 +148,6 @@
     <string name="callAgain" msgid="3197312117049874778">"Tawagan muli"</string>
     <string name="returnCall" msgid="8171961914203617813">"Pabalik na tawag"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Idagdag ang \"<xliff:g id="EMAIL">%s</xliff:g>\" sa mga contact?"</string>
-    <string name="description_contact_photo" msgid="3387458082667894062">"larawan ng contact"</string>
     <string name="description_plus_button" msgid="515164827856229880">"plus"</string>
     <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> ng <xliff:g id="TOTAL_NUMBER">%s</xliff:g> (na) contact"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"Mga pangalan ng iyong mga contact"</string>
@@ -192,7 +192,6 @@
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Petsa"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Lagyan ng label"</string>
     <string name="change_photo" msgid="8530597935483526383">"Baguhin"</string>
-    <string name="primary_photo" msgid="8517942231868516999">"Pangunahing larawan"</string>
     <string name="description_star" msgid="2605854427360036550">"paborito"</string>
     <string name="edit_contact" msgid="7529281274005689512">"I-edit ang Contact"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"isara"</string>
@@ -269,7 +268,6 @@
     <string name="header_name_entry" msgid="1592791008096288306">"Pangalan"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"Email"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"Telepono"</string>
-    <string name="header_photo_entry" msgid="4438023151411853238">"Larawan"</string>
     <string name="content_description_expand_editor" msgid="1111381475901897470">"I-click upang palawakin ang contact editor."</string>
     <string name="content_description_collapse_editor" msgid="7598061318022977825">"I-click upang i-collapse ang contact editor."</string>
     <string name="content_description_directions" msgid="2686791825798189335">"mga direksyon sa lokasyon"</string>
@@ -284,6 +282,8 @@
     <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Palitan ang larawan"</string>
     <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Hindi nabuksan ang editor."</string>
     <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Sine-save sa"</string>
+    <!-- no translation found for compact_editor_account_selector_read_only_title (1869435992721760221) -->
+    <skip />
     <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"Kasalukuyang naipon sa <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Mag-double tap upang pumili ng ibang account."</string>
     <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
       <item quantity="one">Mga naka-link na contact (<xliff:g id="COUNT">%d</xliff:g>)</item>
@@ -454,22 +454,14 @@
     <string name="chat_jabber" msgid="7561444230307829609">"Makipag-chat gamit ang Jabber"</string>
     <string name="chat" msgid="9025361898797412245">"Makipag-chat"</string>
     <string name="description_minus_button" msgid="6908099247930477551">"tanggalin"</string>
-    <!-- no translation found for expand_name_fields_description (6883935911480726652) -->
-    <skip />
-    <!-- no translation found for collapse_name_fields_description (4757877385895561556) -->
-    <skip />
-    <!-- no translation found for expand_phonetic_name_fields_description (3865726859582581741) -->
-    <skip />
-    <!-- no translation found for collapse_phonetic_name_fields_description (9102249481855019452) -->
-    <skip />
-    <!-- no translation found for expand_fields_description (8129294181216760037) -->
-    <skip />
-    <!-- no translation found for collapse_fields_description (1884143625854637874) -->
-    <skip />
-    <!-- no translation found for announce_expanded_fields (1075947220478530622) -->
-    <skip />
-    <!-- no translation found for announce_collapsed_fields (6414231530177338704) -->
-    <skip />
+    <string name="expand_name_fields_description" msgid="6883935911480726652">"Palawakin ang mga field ng pangalan"</string>
+    <string name="collapse_name_fields_description" msgid="4757877385895561556">"I-collapse ang mga field ng pangalan"</string>
+    <string name="expand_phonetic_name_fields_description" msgid="3865726859582581741">"Palawakin ang mga field ng phonetic na pangalan"</string>
+    <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"I-collapse ang mga field ng phonetic na pangalan"</string>
+    <string name="expand_fields_description" msgid="8129294181216760037">"Palawakin"</string>
+    <string name="collapse_fields_description" msgid="1884143625854637874">"I-collapse"</string>
+    <string name="announce_expanded_fields" msgid="1075947220478530622">"Pinalawak"</string>
+    <string name="announce_collapsed_fields" msgid="6414231530177338704">"Naka-collapse"</string>
     <string name="list_filter_all_accounts" msgid="8908683398914322369">"Lahat ng mga contact"</string>
     <string name="list_filter_all_starred" msgid="5031734941601931356">"Naka-star"</string>
     <string name="list_filter_customize" msgid="4789963356004169321">"I-customize"</string>
@@ -555,7 +547,8 @@
     <string name="share_favorite_contacts" msgid="4280926751003081042">"Ibahagi ang mga paboritong contact"</string>
     <string name="share_contacts" msgid="8109287987498711664">"Ibahagi ang lahat ng contact"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"Nabigong ibahagi ang mga contact."</string>
-    <string name="dialog_import_export" msgid="4360648034889921624">"Mag-import/mag-export ng mga contact"</string>
+    <!-- no translation found for dialog_export (1628001095187741417) -->
+    <skip />
     <string name="dialog_import" msgid="2431698729761448759">"Mag-import ng mga contact"</string>
     <string name="share_error" msgid="948429331673358107">"Hindi maibabahagi ang contact na ito."</string>
     <string name="no_contact_to_share" msgid="1276397530378323033">"Walang ibabahaging mga contact."</string>
@@ -570,7 +563,10 @@
     <string name="menu_clear_frequents" msgid="7688250191932838833">"I-clear ang mga madadalas"</string>
     <string name="menu_select_sim" msgid="3603578201960504010">"Pumili ng SIM card"</string>
     <string name="menu_accounts" msgid="1424330057450189074">"Pamahalaan ang mga account"</string>
-    <string name="menu_import_export" msgid="26217871113229507">"Mag-import/mag-export"</string>
+    <!-- no translation found for menu_import (6107961135813836467) -->
+    <skip />
+    <!-- no translation found for menu_export (2658783911863503902) -->
+    <skip />
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"Mga naka-block na numero"</string>
     <string name="contact_status_update_attribution" msgid="752179367353018597">"sa pamamagitan ng <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> sa pamamagitan ng <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
@@ -604,4 +600,8 @@
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> (na) seg"</string>
     <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> (na) min <xliff:g id="SECONDS">%s</xliff:g> (na) seg"</string>
     <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> (na) oras <xliff:g id="MINUTES_1">%s</xliff:g> (na) min <xliff:g id="SECONDS">%s</xliff:g> (na) seg"</string>
+    <!-- no translation found for dynamic_shortcut_disabled_message (249939425761315252) -->
+    <skip />
+    <!-- no translation found for dynamic_shortcut_contact_removed_message (6845645831837615899) -->
+    <skip />
 </resources>
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index c41b9bf..01a7710 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -67,6 +67,7 @@
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Önerilen kişiler"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Tüm kişiler"</string>
     <string name="contactsJoinedMessage" msgid="3343535986195643136">"Kişiler arasında bağlantı oluşturuldu"</string>
+    <string name="contact_deleted_named_toast" msgid="6558941164987421174">"<xliff:g id="NAME">%s</xliff:g> silindi"</string>
     <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
       <item quantity="other">Kişiler silindi</item>
       <item quantity="one">Kişi silindi</item>
@@ -113,11 +114,11 @@
     <string name="emptyMainList" msgid="2772242747899664460">"Kişi listeniz boş"</string>
     <string name="contactSavedToast" msgid="9171862279493213075">"Kişi kaydedildi"</string>
     <string name="contactUnlinkedToast" msgid="7122823195786012553">"Kişilerin bağlantısı kaldırıldı"</string>
-    <string name="contactSavedErrorToast" msgid="3207250533172944892">"Kişi değişiklikleri kaydedilemedi."</string>
-    <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Kişinin bağlantısı kaldırılamadı."</string>
-    <string name="contactJoinErrorToast" msgid="3977932531264809035">"Kişi bağlanamadı."</string>
-    <string name="contactGenericErrorToast" msgid="7774911165341591714">"Kişi kaydedilirken hata oluştu."</string>
-    <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"Kişi fotoğrafı değişiklikleri kaydedilmedi."</string>
+    <string name="contactSavedErrorToast" msgid="4827033473908688031">"Kişi değişiklikleri kaydedilemedi"</string>
+    <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"Kişinin bağlantısı kaldırılamadı"</string>
+    <string name="contactJoinErrorToast" msgid="5735129234573327701">"Kişi bağlanamadı"</string>
+    <string name="contactGenericErrorToast" msgid="3885457515665783976">"Kişi kaydedilirken hata oluştu"</string>
+    <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Kişi fotoğrafı değişiklikleri kaydedilmedi"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"Etiket yüklenemedi"</string>
     <string name="groupSavedToast" msgid="6491495462357722285">"Etiket kaydedildi"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Etiket silindi"</string>
@@ -126,7 +127,7 @@
     <string name="groupUpdatedToast" msgid="3667977658676267687">"Etiket güncellendi"</string>
     <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Etiketten kaldırıldı"</string>
     <string name="groupMembersAddedToast" msgid="4824834898718972768">"Etikete eklendi"</string>
-    <string name="groupSavedErrorToast" msgid="8121032018490980184">"Etiket değişiklikleri kaydedilemedi."</string>
+    <string name="groupSavedErrorToast" msgid="2355891714292740162">"Etiket değişiklikleri kaydedilemedi"</string>
     <string name="groupExistsErrorMessage" msgid="5196811283836946189">"Bu etiket zaten var"</string>
     <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
       <item quantity="other">Telefon numarası olan <xliff:g id="COUNT">%d</xliff:g> kişi</item>
@@ -147,7 +148,6 @@
     <string name="callAgain" msgid="3197312117049874778">"Tekrar çağrı yap"</string>
     <string name="returnCall" msgid="8171961914203617813">"Geri ara"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"\"<xliff:g id="EMAIL">%s</xliff:g>\" adresi kişilere eklensin mi?"</string>
-    <string name="description_contact_photo" msgid="3387458082667894062">"kişi fotoğrafı"</string>
     <string name="description_plus_button" msgid="515164827856229880">"artı"</string>
     <string name="exporting_contact_list_progress" msgid="560522409559101193">"Toplam <xliff:g id="TOTAL_NUMBER">%s</xliff:g> kişiden <xliff:g id="CURRENT_NUMBER">%s</xliff:g> kişi"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"Kişilerinizin adları"</string>
@@ -192,7 +192,6 @@
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Tarih"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Etiket"</string>
     <string name="change_photo" msgid="8530597935483526383">"Değiştir"</string>
-    <string name="primary_photo" msgid="8517942231868516999">"Birincil fotoğraf"</string>
     <string name="description_star" msgid="2605854427360036550">"favori"</string>
     <string name="edit_contact" msgid="7529281274005689512">"Kişiyi düzenle"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"kapatın"</string>
@@ -269,7 +268,6 @@
     <string name="header_name_entry" msgid="1592791008096288306">"Ad"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"E-posta"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"Telefon"</string>
-    <string name="header_photo_entry" msgid="4438023151411853238">"Fotoğraf"</string>
     <string name="content_description_expand_editor" msgid="1111381475901897470">"Kişi düzenleyiciyi genişletmek için tıklayın."</string>
     <string name="content_description_collapse_editor" msgid="7598061318022977825">"Kişi düzenleyiciyi daraltmak için tıklayın."</string>
     <string name="content_description_directions" msgid="2686791825798189335">"konum için yol tarifi"</string>
@@ -284,6 +282,8 @@
     <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Fotoğrafı değiştir"</string>
     <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Editör açılamadı."</string>
     <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Kaydedilecek hesap:"</string>
+    <!-- no translation found for compact_editor_account_selector_read_only_title (1869435992721760221) -->
+    <skip />
     <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"Şu anda <xliff:g id="ACCOUNT_NAME">%s</xliff:g> hesabına kaydediliyor. Farklı bir hesap seçmek için iki kez hafifçe dokunun."</string>
     <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
       <item quantity="other">Bağlı kişiler (<xliff:g id="COUNT">%d</xliff:g>)</item>
@@ -454,22 +454,14 @@
     <string name="chat_jabber" msgid="7561444230307829609">"Jabber kullanarak sohbet et"</string>
     <string name="chat" msgid="9025361898797412245">"Sohbet"</string>
     <string name="description_minus_button" msgid="6908099247930477551">"sil"</string>
-    <!-- no translation found for expand_name_fields_description (6883935911480726652) -->
-    <skip />
-    <!-- no translation found for collapse_name_fields_description (4757877385895561556) -->
-    <skip />
-    <!-- no translation found for expand_phonetic_name_fields_description (3865726859582581741) -->
-    <skip />
-    <!-- no translation found for collapse_phonetic_name_fields_description (9102249481855019452) -->
-    <skip />
-    <!-- no translation found for expand_fields_description (8129294181216760037) -->
-    <skip />
-    <!-- no translation found for collapse_fields_description (1884143625854637874) -->
-    <skip />
-    <!-- no translation found for announce_expanded_fields (1075947220478530622) -->
-    <skip />
-    <!-- no translation found for announce_collapsed_fields (6414231530177338704) -->
-    <skip />
+    <string name="expand_name_fields_description" msgid="6883935911480726652">"Ad alanları genişletilir"</string>
+    <string name="collapse_name_fields_description" msgid="4757877385895561556">"Ad alanları daraltılır"</string>
+    <string name="expand_phonetic_name_fields_description" msgid="3865726859582581741">"Fonetik ad alanları genişletilir"</string>
+    <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Fonetik ad alanları daraltılır"</string>
+    <string name="expand_fields_description" msgid="8129294181216760037">"Genişletir"</string>
+    <string name="collapse_fields_description" msgid="1884143625854637874">"Daraltır"</string>
+    <string name="announce_expanded_fields" msgid="1075947220478530622">"Genişletildi"</string>
+    <string name="announce_collapsed_fields" msgid="6414231530177338704">"Daraltıldı"</string>
     <string name="list_filter_all_accounts" msgid="8908683398914322369">"Tüm kişiler"</string>
     <string name="list_filter_all_starred" msgid="5031734941601931356">"Yıldızlı"</string>
     <string name="list_filter_customize" msgid="4789963356004169321">"Özelleştir"</string>
@@ -555,7 +547,8 @@
     <string name="share_favorite_contacts" msgid="4280926751003081042">"Favori kişileri paylaş"</string>
     <string name="share_contacts" msgid="8109287987498711664">"Tüm kişileri paylaş"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"Kişiler paylaşılamadı."</string>
-    <string name="dialog_import_export" msgid="4360648034889921624">"Kişileri içe/dışa aktar"</string>
+    <!-- no translation found for dialog_export (1628001095187741417) -->
+    <skip />
     <string name="dialog_import" msgid="2431698729761448759">"Kişileri içe aktar"</string>
     <string name="share_error" msgid="948429331673358107">"Bu kişi paylaşılamıyor."</string>
     <string name="no_contact_to_share" msgid="1276397530378323033">"Paylaşılacak kişi yok."</string>
@@ -570,7 +563,10 @@
     <string name="menu_clear_frequents" msgid="7688250191932838833">"Sık iletişim kurulanları sil"</string>
     <string name="menu_select_sim" msgid="3603578201960504010">"SIM kart seç"</string>
     <string name="menu_accounts" msgid="1424330057450189074">"Hesapları yönet"</string>
-    <string name="menu_import_export" msgid="26217871113229507">"İçe/Dışa Aktar"</string>
+    <!-- no translation found for menu_import (6107961135813836467) -->
+    <skip />
+    <!-- no translation found for menu_export (2658783911863503902) -->
+    <skip />
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"Engellenen numaralar"</string>
     <string name="contact_status_update_attribution" msgid="752179367353018597">"<xliff:g id="SOURCE">%1$s</xliff:g> aracılığıyla"</string>
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="SOURCE">%2$s</xliff:g> üzerinden şu saatte: <xliff:g id="DATE">%1$s</xliff:g>"</string>
@@ -604,4 +600,8 @@
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> sn."</string>
     <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> dk. <xliff:g id="SECONDS">%s</xliff:g> sn."</string>
     <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> sa. <xliff:g id="MINUTES_1">%s</xliff:g> dk. <xliff:g id="SECONDS">%s</xliff:g> sn."</string>
+    <!-- no translation found for dynamic_shortcut_disabled_message (249939425761315252) -->
+    <skip />
+    <!-- no translation found for dynamic_shortcut_contact_removed_message (6845645831837615899) -->
+    <skip />
 </resources>
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
index fdb4c84..017e5e2 100644
--- a/res/values-uk/strings.xml
+++ b/res/values-uk/strings.xml
@@ -67,6 +67,7 @@
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Пропоновані контакти"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Усі контакти"</string>
     <string name="contactsJoinedMessage" msgid="3343535986195643136">"Контакти об’єднано"</string>
+    <string name="contact_deleted_named_toast" msgid="6558941164987421174">"Користувача <xliff:g id="NAME">%s</xliff:g> видалено"</string>
     <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
       <item quantity="one">Контакти видалено</item>
       <item quantity="few">Контакти видалено</item>
@@ -119,11 +120,11 @@
     <string name="emptyMainList" msgid="2772242747899664460">"Ваш список контактів порожній"</string>
     <string name="contactSavedToast" msgid="9171862279493213075">"Контакт збережено"</string>
     <string name="contactUnlinkedToast" msgid="7122823195786012553">"Контакти розділено"</string>
-    <string name="contactSavedErrorToast" msgid="3207250533172944892">"Не вдалося зберегти зміни в контакті."</string>
-    <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Не вдалося розділити контакт."</string>
-    <string name="contactJoinErrorToast" msgid="3977932531264809035">"Не вдалося об’єднати контакти."</string>
-    <string name="contactGenericErrorToast" msgid="7774911165341591714">"Не вдалося зберегти контакт."</string>
-    <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"Не вдалося зберегти зміни у фотографії контакта."</string>
+    <string name="contactSavedErrorToast" msgid="4827033473908688031">"Не вдалося зберегти зміни в контакті"</string>
+    <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"Не вдалося від’єднати контакт"</string>
+    <string name="contactJoinErrorToast" msgid="5735129234573327701">"Не вдалося зв’язати контакти"</string>
+    <string name="contactGenericErrorToast" msgid="3885457515665783976">"Помилка збереження контакта"</string>
+    <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Не вдалося зберегти зміни у фотографії контакта"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"Не вдалося завантажити мітку"</string>
     <string name="groupSavedToast" msgid="6491495462357722285">"Мітку збережено"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Мітку видалено"</string>
@@ -132,7 +133,7 @@
     <string name="groupUpdatedToast" msgid="3667977658676267687">"Мітку оновлено"</string>
     <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Вилучено з мітки"</string>
     <string name="groupMembersAddedToast" msgid="4824834898718972768">"Додано мітку"</string>
-    <string name="groupSavedErrorToast" msgid="8121032018490980184">"Не вдалося зберегти зміни до мітки."</string>
+    <string name="groupSavedErrorToast" msgid="2355891714292740162">"Не вдалося зберегти зміни в мітці"</string>
     <string name="groupExistsErrorMessage" msgid="5196811283836946189">"Ця назва вже існує"</string>
     <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
       <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> контакт із номерами телефону</item>
@@ -159,7 +160,6 @@
     <string name="callAgain" msgid="3197312117049874778">"Набрати знову"</string>
     <string name="returnCall" msgid="8171961914203617813">"Зворот. виклик"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Додати в контакти <xliff:g id="EMAIL">%s</xliff:g>?"</string>
-    <string name="description_contact_photo" msgid="3387458082667894062">"фото контакту"</string>
     <string name="description_plus_button" msgid="515164827856229880">"плюс"</string>
     <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> із <xliff:g id="TOTAL_NUMBER">%s</xliff:g> контактів"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"Імена ваших контактів"</string>
@@ -206,7 +206,6 @@
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Дата"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Мітка"</string>
     <string name="change_photo" msgid="8530597935483526383">"Змінити"</string>
-    <string name="primary_photo" msgid="8517942231868516999">"Основн. фото"</string>
     <string name="description_star" msgid="2605854427360036550">"вибране"</string>
     <string name="edit_contact" msgid="7529281274005689512">"Редаг. контакта"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"закрити"</string>
@@ -283,7 +282,6 @@
     <string name="header_name_entry" msgid="1592791008096288306">"Ім’я"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"Електронна пошта"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"Телефон"</string>
-    <string name="header_photo_entry" msgid="4438023151411853238">"Фото"</string>
     <string name="content_description_expand_editor" msgid="1111381475901897470">"Натисніть, щоб розгорнути редактор контактів."</string>
     <string name="content_description_collapse_editor" msgid="7598061318022977825">"Натисніть, щоб згорнути редактор контактів."</string>
     <string name="content_description_directions" msgid="2686791825798189335">"маршрути до місця"</string>
@@ -298,6 +296,8 @@
     <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Змінити фотографію"</string>
     <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Не вдалося відкрити редактор."</string>
     <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Зберігання в обліковий запис"</string>
+    <!-- no translation found for compact_editor_account_selector_read_only_title (1869435992721760221) -->
+    <skip />
     <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"Зараз контакт зберігається в обліковий запис <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Двічі торкніться, щоб вибрати інший обліковий запис."</string>
     <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
       <item quantity="one">Об’єднані контакти (<xliff:g id="COUNT">%d</xliff:g>)</item>
@@ -476,22 +476,14 @@
     <string name="chat_jabber" msgid="7561444230307829609">"Чат через Jabber"</string>
     <string name="chat" msgid="9025361898797412245">"Чат"</string>
     <string name="description_minus_button" msgid="6908099247930477551">"видалити"</string>
-    <!-- no translation found for expand_name_fields_description (6883935911480726652) -->
-    <skip />
-    <!-- no translation found for collapse_name_fields_description (4757877385895561556) -->
-    <skip />
-    <!-- no translation found for expand_phonetic_name_fields_description (3865726859582581741) -->
-    <skip />
-    <!-- no translation found for collapse_phonetic_name_fields_description (9102249481855019452) -->
-    <skip />
-    <!-- no translation found for expand_fields_description (8129294181216760037) -->
-    <skip />
-    <!-- no translation found for collapse_fields_description (1884143625854637874) -->
-    <skip />
-    <!-- no translation found for announce_expanded_fields (1075947220478530622) -->
-    <skip />
-    <!-- no translation found for announce_collapsed_fields (6414231530177338704) -->
-    <skip />
+    <string name="expand_name_fields_description" msgid="6883935911480726652">"Розгорнути поля імен"</string>
+    <string name="collapse_name_fields_description" msgid="4757877385895561556">"Згорнути поля імен"</string>
+    <string name="expand_phonetic_name_fields_description" msgid="3865726859582581741">"Розгорнути поля вимови імен"</string>
+    <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Згорнути поля вимови імен"</string>
+    <string name="expand_fields_description" msgid="8129294181216760037">"Розгорнути"</string>
+    <string name="collapse_fields_description" msgid="1884143625854637874">"Згорнути"</string>
+    <string name="announce_expanded_fields" msgid="1075947220478530622">"Розгорнуто"</string>
+    <string name="announce_collapsed_fields" msgid="6414231530177338704">"Згорнуто"</string>
     <string name="list_filter_all_accounts" msgid="8908683398914322369">"Усі контакти"</string>
     <string name="list_filter_all_starred" msgid="5031734941601931356">"Із зірочкою"</string>
     <string name="list_filter_customize" msgid="4789963356004169321">"Налаштувати"</string>
@@ -577,7 +569,8 @@
     <string name="share_favorite_contacts" msgid="4280926751003081042">"Поділитися вибраними контактами"</string>
     <string name="share_contacts" msgid="8109287987498711664">"Поділитися всіма контактами"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"Не вдалося поділитися контактами."</string>
-    <string name="dialog_import_export" msgid="4360648034889921624">"Імпорт/експорт контактів"</string>
+    <!-- no translation found for dialog_export (1628001095187741417) -->
+    <skip />
     <string name="dialog_import" msgid="2431698729761448759">"Імпорт контактів"</string>
     <string name="share_error" msgid="948429331673358107">"Цей контакт неможливо надіслати."</string>
     <string name="no_contact_to_share" msgid="1276397530378323033">"Немає контактів, якими можна поділитися."</string>
@@ -592,7 +585,10 @@
     <string name="menu_clear_frequents" msgid="7688250191932838833">"Очистити часті контакти"</string>
     <string name="menu_select_sim" msgid="3603578201960504010">"Вибрати SIM-карту"</string>
     <string name="menu_accounts" msgid="1424330057450189074">"Керувати обліковими записами"</string>
-    <string name="menu_import_export" msgid="26217871113229507">"Імпорт або експорт"</string>
+    <!-- no translation found for menu_import (6107961135813836467) -->
+    <skip />
+    <!-- no translation found for menu_export (2658783911863503902) -->
+    <skip />
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"Заблоковані номери"</string>
     <string name="contact_status_update_attribution" msgid="752179367353018597">"через <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> через <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
@@ -628,4 +624,8 @@
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> с"</string>
     <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> хв <xliff:g id="SECONDS">%s</xliff:g> с"</string>
     <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> год <xliff:g id="MINUTES_1">%s</xliff:g> хв <xliff:g id="SECONDS">%s</xliff:g> с"</string>
+    <!-- no translation found for dynamic_shortcut_disabled_message (249939425761315252) -->
+    <skip />
+    <!-- no translation found for dynamic_shortcut_contact_removed_message (6845645831837615899) -->
+    <skip />
 </resources>
diff --git a/res/values-ur-rPK/strings.xml b/res/values-ur-rPK/strings.xml
index 2a1c9d9..6c1f1d0 100644
--- a/res/values-ur-rPK/strings.xml
+++ b/res/values-ur-rPK/strings.xml
@@ -67,6 +67,7 @@
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"مجوزہ رابطے"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"سبھی رابطے"</string>
     <string name="contactsJoinedMessage" msgid="3343535986195643136">"رابطے لنک ہو گئے"</string>
+    <string name="contact_deleted_named_toast" msgid="6558941164987421174">"<xliff:g id="NAME">%s</xliff:g> حذف ہو گیا"</string>
     <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
       <item quantity="other">رابطے حذف ہو گئے</item>
       <item quantity="one">رابطہ حذف ہو گیا</item>
@@ -113,11 +114,11 @@
     <string name="emptyMainList" msgid="2772242747899664460">"آپ کے رابطوں کی فہرست خالی ہے"</string>
     <string name="contactSavedToast" msgid="9171862279493213075">"رابطہ محفوظ ہوگیا"</string>
     <string name="contactUnlinkedToast" msgid="7122823195786012553">"رابطے اَن لنک ہو گئے"</string>
-    <string name="contactSavedErrorToast" msgid="3207250533172944892">"رابطہ میں تبدیلیاں محفوظ نہیں ہوسکیں۔"</string>
-    <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"رابطہ غیر منسلک نہیں ہو سکا۔"</string>
-    <string name="contactJoinErrorToast" msgid="3977932531264809035">"رابطہ لنک نہیں ہو سکا۔"</string>
-    <string name="contactGenericErrorToast" msgid="7774911165341591714">"رابطہ محفوظ کرتے ہوئے خرابی۔"</string>
-    <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"رابطہ کی تصویر کی تبدیلیاں محفوظ نہیں کی جا سکیں۔"</string>
+    <string name="contactSavedErrorToast" msgid="4827033473908688031">"رابطہ کی تبدیلیاں محفوظ نہیں ہوسکیں"</string>
+    <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"رابطہ کا لنک ختم نہیں ہو سکا"</string>
+    <string name="contactJoinErrorToast" msgid="5735129234573327701">"رابطہ لنک نہیں ہو سکا"</string>
+    <string name="contactGenericErrorToast" msgid="3885457515665783976">"رابطہ محفوظ کرنے میں خرابی"</string>
+    <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"رابطہ کی تصویر کی تبدیلیاں محفوظ نہیں ہو سکیں"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"لیبل لوڈ ہونے میں ناکام"</string>
     <string name="groupSavedToast" msgid="6491495462357722285">"لیبل محفوظ ہو گیا"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"لیبل حذف ہو گیا"</string>
@@ -126,7 +127,7 @@
     <string name="groupUpdatedToast" msgid="3667977658676267687">"لیبل اپ ڈیٹ ہو گیا"</string>
     <string name="groupMembersRemovedToast" msgid="3510563559799376603">"لیبل سے ہٹا دیے گئے"</string>
     <string name="groupMembersAddedToast" msgid="4824834898718972768">"لیبل میں شامل ہو گیا"</string>
-    <string name="groupSavedErrorToast" msgid="8121032018490980184">"لیبل کی تبدیلیاں محفوظ نہیں ہو سکیں۔"</string>
+    <string name="groupSavedErrorToast" msgid="2355891714292740162">"لیبل کی تبدیلیاں محفوظ نہیں ہو سکیں"</string>
     <string name="groupExistsErrorMessage" msgid="5196811283836946189">"یہ لیبل پہلے سے موجود ہے"</string>
     <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
       <item quantity="other">فون نمبرز کے ساتھ <xliff:g id="COUNT">%d</xliff:g> رابطے</item>
@@ -147,7 +148,6 @@
     <string name="callAgain" msgid="3197312117049874778">"دوبارہ کال کریں"</string>
     <string name="returnCall" msgid="8171961914203617813">"کال لوٹائیں"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"\"<xliff:g id="EMAIL">%s</xliff:g>\" کو رابطوں میں شامل کریں؟"</string>
-    <string name="description_contact_photo" msgid="3387458082667894062">"رابطہ کی تصویر"</string>
     <string name="description_plus_button" msgid="515164827856229880">"پلس"</string>
     <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> از <xliff:g id="TOTAL_NUMBER">%s</xliff:g> رابطے"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"آپ کے رابطوں کے نام"</string>
@@ -192,7 +192,6 @@
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"تاریخ"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"لیبل"</string>
     <string name="change_photo" msgid="8530597935483526383">"تبدیل کریں"</string>
-    <string name="primary_photo" msgid="8517942231868516999">"بنیادی تصویر"</string>
     <string name="description_star" msgid="2605854427360036550">"پسندیدہ"</string>
     <string name="edit_contact" msgid="7529281274005689512">"رابطہ میں ترمیم کریں"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"بند کریں"</string>
@@ -269,7 +268,6 @@
     <string name="header_name_entry" msgid="1592791008096288306">"نام"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"ای میل"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"فون"</string>
-    <string name="header_photo_entry" msgid="4438023151411853238">"تصویر"</string>
     <string name="content_description_expand_editor" msgid="1111381475901897470">"رابطہ ایڈیٹر پھیلانے کیلئے کلک کریں۔"</string>
     <string name="content_description_collapse_editor" msgid="7598061318022977825">"رابطہ ایڈیٹر سکیڑنے کیلئے کلک کریں۔"</string>
     <string name="content_description_directions" msgid="2686791825798189335">"مقام کیلئے ڈائریکشنز"</string>
@@ -284,6 +282,8 @@
     <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"تصویر بدلیں"</string>
     <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"ایڈیٹر کھولنے میں ناکام۔"</string>
     <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"اس میں محفوظ ہوگا"</string>
+    <!-- no translation found for compact_editor_account_selector_read_only_title (1869435992721760221) -->
+    <skip />
     <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"فی الحال <xliff:g id="ACCOUNT_NAME">%s</xliff:g> میں محفوظ کیا جا رہا ہے۔ کوئی مختلف اکاؤنٹ منتخـب کرنے کیلئے دو بار تھپتھپائیں۔"</string>
     <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
       <item quantity="other">لنک کردہ رابطے (<xliff:g id="COUNT">%d</xliff:g>)</item>
@@ -454,22 +454,14 @@
     <string name="chat_jabber" msgid="7561444230307829609">"‏Jabber کے ذریعے چیٹ کریں"</string>
     <string name="chat" msgid="9025361898797412245">"چیٹ"</string>
     <string name="description_minus_button" msgid="6908099247930477551">"حذف کریں"</string>
-    <!-- no translation found for expand_name_fields_description (6883935911480726652) -->
-    <skip />
-    <!-- no translation found for collapse_name_fields_description (4757877385895561556) -->
-    <skip />
-    <!-- no translation found for expand_phonetic_name_fields_description (3865726859582581741) -->
-    <skip />
-    <!-- no translation found for collapse_phonetic_name_fields_description (9102249481855019452) -->
-    <skip />
-    <!-- no translation found for expand_fields_description (8129294181216760037) -->
-    <skip />
-    <!-- no translation found for collapse_fields_description (1884143625854637874) -->
-    <skip />
-    <!-- no translation found for announce_expanded_fields (1075947220478530622) -->
-    <skip />
-    <!-- no translation found for announce_collapsed_fields (6414231530177338704) -->
-    <skip />
+    <string name="expand_name_fields_description" msgid="6883935911480726652">"نام کی فیلڈز کو پھیلائیں"</string>
+    <string name="collapse_name_fields_description" msgid="4757877385895561556">"نام کی فیلڈز کو سکیڑیں"</string>
+    <string name="expand_phonetic_name_fields_description" msgid="3865726859582581741">"فونیٹک نام کی فیلڈز کو پھیلائیں"</string>
+    <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"فونیٹک نام کی فیلڈز کو سکیڑیں"</string>
+    <string name="expand_fields_description" msgid="8129294181216760037">"پھیلائیں"</string>
+    <string name="collapse_fields_description" msgid="1884143625854637874">"سکیڑیں"</string>
+    <string name="announce_expanded_fields" msgid="1075947220478530622">"پھیلا ہوا"</string>
+    <string name="announce_collapsed_fields" msgid="6414231530177338704">"سکڑا ہوا"</string>
     <string name="list_filter_all_accounts" msgid="8908683398914322369">"سبھی رابطے"</string>
     <string name="list_filter_all_starred" msgid="5031734941601931356">"ستارے کے نشان والے"</string>
     <string name="list_filter_customize" msgid="4789963356004169321">"مرضی کے مطابق بنائیں"</string>
@@ -555,7 +547,8 @@
     <string name="share_favorite_contacts" msgid="4280926751003081042">"پسندیدہ رابطوں کا اشتراک کریں"</string>
     <string name="share_contacts" msgid="8109287987498711664">"سارے رابطوں کا اشتراک کریں"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"رابطوں کا اشتراک کرنے میں ناکام۔"</string>
-    <string name="dialog_import_export" msgid="4360648034889921624">"رابطے درآمد/برآمد کریں"</string>
+    <!-- no translation found for dialog_export (1628001095187741417) -->
+    <skip />
     <string name="dialog_import" msgid="2431698729761448759">"رابطے درآمد کریں"</string>
     <string name="share_error" msgid="948429331673358107">"اس رابطہ کا اشتراک نہیں کیا جا سکتا۔"</string>
     <string name="no_contact_to_share" msgid="1276397530378323033">"اشتراک کرنے کے لئے کوئی رابطے نہیں ہیں۔"</string>
@@ -570,7 +563,10 @@
     <string name="menu_clear_frequents" msgid="7688250191932838833">"اکثر و بیشتر کو صاف کریں"</string>
     <string name="menu_select_sim" msgid="3603578201960504010">"‏SIM کارڈ منتخب کریں"</string>
     <string name="menu_accounts" msgid="1424330057450189074">"اکاؤنٹس کا نظم کریں"</string>
-    <string name="menu_import_export" msgid="26217871113229507">"درآمد/برآمد کریں"</string>
+    <!-- no translation found for menu_import (6107961135813836467) -->
+    <skip />
+    <!-- no translation found for menu_export (2658783911863503902) -->
+    <skip />
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"مسدود کردہ نمبرز"</string>
     <string name="contact_status_update_attribution" msgid="752179367353018597">"بذریعہ <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> بذریعہ <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
@@ -604,4 +600,8 @@
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> سیکنڈ"</string>
     <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> منٹ <xliff:g id="SECONDS">%s</xliff:g> سیکنڈ"</string>
     <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> گھنٹے <xliff:g id="MINUTES_1">%s</xliff:g> منٹ <xliff:g id="SECONDS">%s</xliff:g> سیکنڈ"</string>
+    <!-- no translation found for dynamic_shortcut_disabled_message (249939425761315252) -->
+    <skip />
+    <!-- no translation found for dynamic_shortcut_contact_removed_message (6845645831837615899) -->
+    <skip />
 </resources>
diff --git a/res/values-uz-rUZ/strings.xml b/res/values-uz-rUZ/strings.xml
index e42ef61..93711c5 100644
--- a/res/values-uz-rUZ/strings.xml
+++ b/res/values-uz-rUZ/strings.xml
@@ -67,6 +67,7 @@
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Taklif etilgan kontaktlar"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Barcha kontaktlar"</string>
     <string name="contactsJoinedMessage" msgid="3343535986195643136">"Kontaktlar bog‘landi"</string>
+    <string name="contact_deleted_named_toast" msgid="6558941164987421174">"<xliff:g id="NAME">%s</xliff:g> o‘chirib tashlandi"</string>
     <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
       <item quantity="other">Kontaktlar o‘chirildi</item>
       <item quantity="one">Kontakt o‘chirildi</item>
@@ -113,11 +114,11 @@
     <string name="emptyMainList" msgid="2772242747899664460">"Kontaktlar ro‘yxati bo‘sh"</string>
     <string name="contactSavedToast" msgid="9171862279493213075">"Kontakt saqlandi"</string>
     <string name="contactUnlinkedToast" msgid="7122823195786012553">"Kontaktlar ajratildi"</string>
-    <string name="contactSavedErrorToast" msgid="3207250533172944892">"Kontakt o‘zgarishlari saqlanmadi."</string>
-    <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Kontaktni ajratib bo‘lmadi."</string>
-    <string name="contactJoinErrorToast" msgid="3977932531264809035">"Kontaktni bog‘lab bo‘lmadi."</string>
-    <string name="contactGenericErrorToast" msgid="7774911165341591714">"Kontakt saqlanishda xatolik."</string>
-    <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"Kontakt rasmi o‘zgarmadi."</string>
+    <string name="contactSavedErrorToast" msgid="4827033473908688031">"Kontakt ma’lumotlariga kiritilgan o‘zgarishlar saqlanmadi."</string>
+    <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"Kontaktni ajratib bo‘lmadi."</string>
+    <string name="contactJoinErrorToast" msgid="5735129234573327701">"Kontaktni bog‘lab bo‘lmadi."</string>
+    <string name="contactGenericErrorToast" msgid="3885457515665783976">"Kontaktni saqlashda xatolik yuz berdi."</string>
+    <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Kontakt suratiga kiritilgan o‘zgarishlar saqlanmadi."</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"Yorliqni yuklashda xatolik yuz berdi"</string>
     <string name="groupSavedToast" msgid="6491495462357722285">"Yorliq saqlandi"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Yorliq o‘chirib tashlandi"</string>
@@ -126,7 +127,7 @@
     <string name="groupUpdatedToast" msgid="3667977658676267687">"Yorliq yangilandi"</string>
     <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Yorliqdan olib tashlandi"</string>
     <string name="groupMembersAddedToast" msgid="4824834898718972768">"Yorliqqa qo‘shildi"</string>
-    <string name="groupSavedErrorToast" msgid="8121032018490980184">"Yorliqdagi o‘zgarishlarni saqlab bo‘lmadi."</string>
+    <string name="groupSavedErrorToast" msgid="2355891714292740162">"Yorliqqa kiritilgan o‘zgarishlarni saqlab bo‘lmadi."</string>
     <string name="groupExistsErrorMessage" msgid="5196811283836946189">"Bunday yorliq allaqachon mavjud"</string>
     <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
       <item quantity="other">Telefon raqami bor <xliff:g id="COUNT">%d</xliff:g> ta kontakt</item>
@@ -147,7 +148,6 @@
     <string name="callAgain" msgid="3197312117049874778">"Yana qo‘ng‘iroq qilish"</string>
     <string name="returnCall" msgid="8171961914203617813">"Qo‘ng‘iroqni qaytarish"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Kontaktlarga \"<xliff:g id="EMAIL">%s</xliff:g>\" qo‘shilsinmi?"</string>
-    <string name="description_contact_photo" msgid="3387458082667894062">"kontakt surati"</string>
     <string name="description_plus_button" msgid="515164827856229880">"plyus"</string>
     <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="TOTAL_NUMBER">%s</xliff:g> dan <xliff:g id="CURRENT_NUMBER">%s</xliff:g>ta kontakt"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"Kontaktlaringiz nomi"</string>
@@ -192,7 +192,6 @@
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Sana"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Yorliq"</string>
     <string name="change_photo" msgid="8530597935483526383">"O‘zgartirish"</string>
-    <string name="primary_photo" msgid="8517942231868516999">"Asosiy rasm"</string>
     <string name="description_star" msgid="2605854427360036550">"ajratilgan"</string>
     <string name="edit_contact" msgid="7529281274005689512">"Kontaktni tahrirlash"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"yopish"</string>
@@ -269,7 +268,6 @@
     <string name="header_name_entry" msgid="1592791008096288306">"Ism"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"E-pochta"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"Telefon"</string>
-    <string name="header_photo_entry" msgid="4438023151411853238">"Rasm"</string>
     <string name="content_description_expand_editor" msgid="1111381475901897470">"Kontaktni tahrirlash oynasini ochish uchun bosing."</string>
     <string name="content_description_collapse_editor" msgid="7598061318022977825">"Kontaktni tahrirlash oynasini yopish uchun bosing."</string>
     <string name="content_description_directions" msgid="2686791825798189335">"manzilga yo\'nalishlar"</string>
@@ -284,6 +282,8 @@
     <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Suratni o‘zgartirish"</string>
     <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Muharrirni ochib bo‘lmadi."</string>
     <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Qayerga saqlansin"</string>
+    <!-- no translation found for compact_editor_account_selector_read_only_title (1869435992721760221) -->
+    <skip />
     <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"Hozirda <xliff:g id="ACCOUNT_NAME">%s</xliff:g> hisobiga saqlanmoqda. Boshqa hisobni tanlash uchun ikki marta bosing."</string>
     <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
       <item quantity="other">Bog‘langan kontaktlar (<xliff:g id="COUNT">%d</xliff:g>)</item>
@@ -454,22 +454,14 @@
     <string name="chat_jabber" msgid="7561444230307829609">"Jabber orqali chat qilish"</string>
     <string name="chat" msgid="9025361898797412245">"Chat"</string>
     <string name="description_minus_button" msgid="6908099247930477551">"o‘chirib tashlash"</string>
-    <!-- no translation found for expand_name_fields_description (6883935911480726652) -->
-    <skip />
-    <!-- no translation found for collapse_name_fields_description (4757877385895561556) -->
-    <skip />
-    <!-- no translation found for expand_phonetic_name_fields_description (3865726859582581741) -->
-    <skip />
-    <!-- no translation found for collapse_phonetic_name_fields_description (9102249481855019452) -->
-    <skip />
-    <!-- no translation found for expand_fields_description (8129294181216760037) -->
-    <skip />
-    <!-- no translation found for collapse_fields_description (1884143625854637874) -->
-    <skip />
-    <!-- no translation found for announce_expanded_fields (1075947220478530622) -->
-    <skip />
-    <!-- no translation found for announce_collapsed_fields (6414231530177338704) -->
-    <skip />
+    <string name="expand_name_fields_description" msgid="6883935911480726652">"Ism maydonlarini ko‘rsatish"</string>
+    <string name="collapse_name_fields_description" msgid="4757877385895561556">"Ism maydonlarini berkitish"</string>
+    <string name="expand_phonetic_name_fields_description" msgid="3865726859582581741">"Fonetik ism maydonlarini ko‘rsatish"</string>
+    <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Fonetik ism maydonlarini berkitish"</string>
+    <string name="expand_fields_description" msgid="8129294181216760037">"Ko‘rsatish"</string>
+    <string name="collapse_fields_description" msgid="1884143625854637874">"Berkitish"</string>
+    <string name="announce_expanded_fields" msgid="1075947220478530622">"Ko‘rsatilmoqda"</string>
+    <string name="announce_collapsed_fields" msgid="6414231530177338704">"Berkitildi"</string>
     <string name="list_filter_all_accounts" msgid="8908683398914322369">"Barcha kontaktlar"</string>
     <string name="list_filter_all_starred" msgid="5031734941601931356">"Yulduzcha qo‘yilganlar"</string>
     <string name="list_filter_customize" msgid="4789963356004169321">"Sozlash"</string>
@@ -555,7 +547,8 @@
     <string name="share_favorite_contacts" msgid="4280926751003081042">"Sevimli kontaktlarni yuborish"</string>
     <string name="share_contacts" msgid="8109287987498711664">"Barcha kontaktlarni yuborish"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"Kontaktlarni yuborib bo‘lmadi."</string>
-    <string name="dialog_import_export" msgid="4360648034889921624">"Kontaktlarni import/eksport qilish"</string>
+    <!-- no translation found for dialog_export (1628001095187741417) -->
+    <skip />
     <string name="dialog_import" msgid="2431698729761448759">"Kontaktlarni import qilish"</string>
     <string name="share_error" msgid="948429331673358107">"Bu kontaktni yuborib bo‘lmaydi."</string>
     <string name="no_contact_to_share" msgid="1276397530378323033">"Yuborish uchun hech qanday kontakt yo‘q."</string>
@@ -570,7 +563,10 @@
     <string name="menu_clear_frequents" msgid="7688250191932838833">"Tez-tez aloqa qiling. tozalash"</string>
     <string name="menu_select_sim" msgid="3603578201960504010">"SIM kartani tanlash"</string>
     <string name="menu_accounts" msgid="1424330057450189074">"Hisoblarni boshqarish"</string>
-    <string name="menu_import_export" msgid="26217871113229507">"Import/eksport"</string>
+    <!-- no translation found for menu_import (6107961135813836467) -->
+    <skip />
+    <!-- no translation found for menu_export (2658783911863503902) -->
+    <skip />
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"Bloklangan raqamlar"</string>
     <string name="contact_status_update_attribution" msgid="752179367353018597">"<xliff:g id="SOURCE">%1$s</xliff:g> orqali"</string>
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> – <xliff:g id="SOURCE">%2$s</xliff:g> orqali"</string>
@@ -604,4 +600,8 @@
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> son."</string>
     <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> daq. <xliff:g id="SECONDS">%s</xliff:g> son."</string>
     <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> soat <xliff:g id="MINUTES_1">%s</xliff:g> daq. <xliff:g id="SECONDS">%s</xliff:g> son."</string>
+    <!-- no translation found for dynamic_shortcut_disabled_message (249939425761315252) -->
+    <skip />
+    <!-- no translation found for dynamic_shortcut_contact_removed_message (6845645831837615899) -->
+    <skip />
 </resources>
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
index 8d99d2f..bb08a78 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -67,6 +67,7 @@
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Liên hệ được đề xuất"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Tất cả liên hệ"</string>
     <string name="contactsJoinedMessage" msgid="3343535986195643136">"Đã liên kết liên hệ"</string>
+    <string name="contact_deleted_named_toast" msgid="6558941164987421174">"Đã xóa <xliff:g id="NAME">%s</xliff:g>"</string>
     <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
       <item quantity="other">Liên hệ đã bị xóa</item>
       <item quantity="one">Liên hệ đã bị xóa</item>
@@ -113,11 +114,11 @@
     <string name="emptyMainList" msgid="2772242747899664460">"Danh sách liên hệ của bạn trống"</string>
     <string name="contactSavedToast" msgid="9171862279493213075">"Đã lưu địa chỉ liên hệ"</string>
     <string name="contactUnlinkedToast" msgid="7122823195786012553">"Đã hủy liên kết liên hệ"</string>
-    <string name="contactSavedErrorToast" msgid="3207250533172944892">"Không thể lưu thay đổi của địa chỉ liên hệ."</string>
-    <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Không thể hủy liên kết liên hệ."</string>
-    <string name="contactJoinErrorToast" msgid="3977932531264809035">"Không thể liên kết liên hệ."</string>
-    <string name="contactGenericErrorToast" msgid="7774911165341591714">"Lỗi khi lưu địa chỉ liên hệ."</string>
-    <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"Không thể lưu thay đổi đối với ảnh của liên hệ."</string>
+    <string name="contactSavedErrorToast" msgid="4827033473908688031">"Không thể lưu thay đổi đối với liên hệ"</string>
+    <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"Không thể hủy liên kết liên hệ"</string>
+    <string name="contactJoinErrorToast" msgid="5735129234573327701">"Không thể liên kết liên hệ"</string>
+    <string name="contactGenericErrorToast" msgid="3885457515665783976">"Đã xảy ra lỗi khi lưu liên hệ"</string>
+    <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Không thể lưu thay đổi đối với ảnh của liên hệ"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"Không tải được nhãn"</string>
     <string name="groupSavedToast" msgid="6491495462357722285">"Đã lưu nhãn"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Đã xóa nhãn"</string>
@@ -126,7 +127,7 @@
     <string name="groupUpdatedToast" msgid="3667977658676267687">"Đã cập nhật nhãn"</string>
     <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Đã bị xóa khỏi nhãn"</string>
     <string name="groupMembersAddedToast" msgid="4824834898718972768">"Đã thêm vào nhãn"</string>
-    <string name="groupSavedErrorToast" msgid="8121032018490980184">"Không thể lưu thay đổi đối với nhãn."</string>
+    <string name="groupSavedErrorToast" msgid="2355891714292740162">"Không thể lưu thay đổi đối với nhãn"</string>
     <string name="groupExistsErrorMessage" msgid="5196811283836946189">"Nhãn đó đã tồn tại"</string>
     <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
       <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> liên hệ có số điện thoại</item>
@@ -147,7 +148,6 @@
     <string name="callAgain" msgid="3197312117049874778">"Gọi lại"</string>
     <string name="returnCall" msgid="8171961914203617813">"Gọi lại"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Thêm \"<xliff:g id="EMAIL">%s</xliff:g>\" vào danh bạ?"</string>
-    <string name="description_contact_photo" msgid="3387458082667894062">"ảnh của liên hệ"</string>
     <string name="description_plus_button" msgid="515164827856229880">"cộng"</string>
     <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> trong tổng số <xliff:g id="TOTAL_NUMBER">%s</xliff:g> liên hệ"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"Tên danh bạ của bạn"</string>
@@ -192,7 +192,6 @@
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Ngày"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Nhãn"</string>
     <string name="change_photo" msgid="8530597935483526383">"Thay đổi"</string>
-    <string name="primary_photo" msgid="8517942231868516999">"Ảnh chính"</string>
     <string name="description_star" msgid="2605854427360036550">"Yêu thích"</string>
     <string name="edit_contact" msgid="7529281274005689512">"Chỉnh sửa liên hệ"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"đóng"</string>
@@ -269,7 +268,6 @@
     <string name="header_name_entry" msgid="1592791008096288306">"Tên"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"Email"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"Điện thoại"</string>
-    <string name="header_photo_entry" msgid="4438023151411853238">"Ảnh"</string>
     <string name="content_description_expand_editor" msgid="1111381475901897470">"Nhấp để mở rộng trình chỉnh sửa liên hệ."</string>
     <string name="content_description_collapse_editor" msgid="7598061318022977825">"Nhấp để thu gọn trình chỉnh sửa liên hệ."</string>
     <string name="content_description_directions" msgid="2686791825798189335">"chỉ đường tới địa điểm"</string>
@@ -284,6 +282,8 @@
     <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Thay đổi ảnh"</string>
     <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Không mở được trình chỉnh sửa."</string>
     <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Lưu vào"</string>
+    <!-- no translation found for compact_editor_account_selector_read_only_title (1869435992721760221) -->
+    <skip />
     <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"Hiện đang lưu vào <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Hãy nhấn đúp để chọn tài khoản khác."</string>
     <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
       <item quantity="other">Liên hệ được liên kết (<xliff:g id="COUNT">%d</xliff:g>)</item>
@@ -454,22 +454,14 @@
     <string name="chat_jabber" msgid="7561444230307829609">"Trò chuyện sử dụng Jabber"</string>
     <string name="chat" msgid="9025361898797412245">"Trò chuyện"</string>
     <string name="description_minus_button" msgid="6908099247930477551">"xóa"</string>
-    <!-- no translation found for expand_name_fields_description (6883935911480726652) -->
-    <skip />
-    <!-- no translation found for collapse_name_fields_description (4757877385895561556) -->
-    <skip />
-    <!-- no translation found for expand_phonetic_name_fields_description (3865726859582581741) -->
-    <skip />
-    <!-- no translation found for collapse_phonetic_name_fields_description (9102249481855019452) -->
-    <skip />
-    <!-- no translation found for expand_fields_description (8129294181216760037) -->
-    <skip />
-    <!-- no translation found for collapse_fields_description (1884143625854637874) -->
-    <skip />
-    <!-- no translation found for announce_expanded_fields (1075947220478530622) -->
-    <skip />
-    <!-- no translation found for announce_collapsed_fields (6414231530177338704) -->
-    <skip />
+    <string name="expand_name_fields_description" msgid="6883935911480726652">"Mở rộng trường tên"</string>
+    <string name="collapse_name_fields_description" msgid="4757877385895561556">"Thu gọn trường tên"</string>
+    <string name="expand_phonetic_name_fields_description" msgid="3865726859582581741">"Mở rộng trường tên theo phiên âm"</string>
+    <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Thu gọn trường tên theo phiên âm"</string>
+    <string name="expand_fields_description" msgid="8129294181216760037">"Mở rộng"</string>
+    <string name="collapse_fields_description" msgid="1884143625854637874">"Thu gọn"</string>
+    <string name="announce_expanded_fields" msgid="1075947220478530622">"Đã mở rộng"</string>
+    <string name="announce_collapsed_fields" msgid="6414231530177338704">"Đã thu gọn"</string>
     <string name="list_filter_all_accounts" msgid="8908683398914322369">"Tất cả địa chỉ liên hệ"</string>
     <string name="list_filter_all_starred" msgid="5031734941601931356">"Được gắn dấu sao"</string>
     <string name="list_filter_customize" msgid="4789963356004169321">"Tùy chỉnh"</string>
@@ -555,7 +547,8 @@
     <string name="share_favorite_contacts" msgid="4280926751003081042">"Chia sẻ liên hệ yêu thích"</string>
     <string name="share_contacts" msgid="8109287987498711664">"Chia sẻ tất cả các liên hệ"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"Không chia sẻ được liên hệ."</string>
-    <string name="dialog_import_export" msgid="4360648034889921624">"Nhập/xuất danh bạ"</string>
+    <!-- no translation found for dialog_export (1628001095187741417) -->
+    <skip />
     <string name="dialog_import" msgid="2431698729761448759">"Nhập danh bạ"</string>
     <string name="share_error" msgid="948429331673358107">"Không thể chia sẻ địa chỉ liên hệ này."</string>
     <string name="no_contact_to_share" msgid="1276397530378323033">"Không có liên hệ nào để chia sẻ."</string>
@@ -570,7 +563,10 @@
     <string name="menu_clear_frequents" msgid="7688250191932838833">"Xóa DS liên hệ thường xuyên"</string>
     <string name="menu_select_sim" msgid="3603578201960504010">"Chọn thẻ SIM"</string>
     <string name="menu_accounts" msgid="1424330057450189074">"Quản lý tài khoản"</string>
-    <string name="menu_import_export" msgid="26217871113229507">"Nhập/xuất"</string>
+    <!-- no translation found for menu_import (6107961135813836467) -->
+    <skip />
+    <!-- no translation found for menu_export (2658783911863503902) -->
+    <skip />
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"Số bị chặn"</string>
     <string name="contact_status_update_attribution" msgid="752179367353018597">" qua <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> qua <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
@@ -604,4 +600,8 @@
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> giây"</string>
     <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> phút <xliff:g id="SECONDS">%s</xliff:g> giây"</string>
     <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> giờ <xliff:g id="MINUTES_1">%s</xliff:g> phút <xliff:g id="SECONDS">%s</xliff:g> giây"</string>
+    <!-- no translation found for dynamic_shortcut_disabled_message (249939425761315252) -->
+    <skip />
+    <!-- no translation found for dynamic_shortcut_contact_removed_message (6845645831837615899) -->
+    <skip />
 </resources>
diff --git a/res/values-w470dp/dimens.xml b/res/values-w470dp/dimens.xml
deleted file mode 100644
index 2c04e5d..0000000
--- a/res/values-w470dp/dimens.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2014 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.
--->
-<resources>
-
-    <!-- The width the that the tabs occupy in the ActionBar when in landscape mode.
-         470dp is the height of a "normal" screen. We should leave 240dp for
-         the title and menu items -->
-    <dimen name="people_activity_landscape_tabs_width">230dip</dimen>
-    <!-- The size of the text displayed in the ActionBar tabs in landscape mode.
-         Text in the tabs should must be width dependent, otherwise it won't fit in the tabs.
-         In portrait mode, the tabs look okay when overflowing their allocated space.
-         We have to be more careful in landscape. -->
-    <dimen name="people_activity_landscape_tabs_text_size">9dp</dimen>
-
-</resources>
\ No newline at end of file
diff --git a/res/values-w590dp/dimens.xml b/res/values-w590dp/dimens.xml
deleted file mode 100644
index 2fff6ca..0000000
--- a/res/values-w590dp/dimens.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2014 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.
--->
-<resources>
-
-    <!-- The width the that the tabs occupy in the ActionBar when in landscape mode.
-         590dp is almost the height of a "large" screen. We should leave 240dp for
-         the title and menu items -->
-    <dimen name="people_activity_landscape_tabs_width">350dip</dimen>
-    <!-- The size of the text displayed in the ActionBar tabs in landscape mode.
-         Text in the tabs should must be width dependent, otherwise it won't fit in the tabs.
-         In portrait mode, the tabs look okay when overflowing their allocated space.
-         We have to be more careful in landscape. -->
-    <dimen name="people_activity_landscape_tabs_text_size">14dp</dimen>
-
-</resources>
\ No newline at end of file
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index 1c212a5..fb89020 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -67,6 +67,7 @@
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"建议的联系人"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"所有联系人"</string>
     <string name="contactsJoinedMessage" msgid="3343535986195643136">"联系人已关联"</string>
+    <string name="contact_deleted_named_toast" msgid="6558941164987421174">"已删除<xliff:g id="NAME">%s</xliff:g>"</string>
     <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
       <item quantity="other">已删除联系人</item>
       <item quantity="one">已删除联系人</item>
@@ -113,11 +114,11 @@
     <string name="emptyMainList" msgid="2772242747899664460">"联系人列表是空的"</string>
     <string name="contactSavedToast" msgid="9171862279493213075">"联系人已保存"</string>
     <string name="contactUnlinkedToast" msgid="7122823195786012553">"已将联系人取消关联"</string>
-    <string name="contactSavedErrorToast" msgid="3207250533172944892">"无法保存联系人更改。"</string>
-    <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"无法取消关联此联系人。"</string>
-    <string name="contactJoinErrorToast" msgid="3977932531264809035">"无法关联该联系人。"</string>
-    <string name="contactGenericErrorToast" msgid="7774911165341591714">"保存此联系人时出错。"</string>
-    <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"无法保存联系人照片更改。"</string>
+    <string name="contactSavedErrorToast" msgid="4827033473908688031">"无法保存对联系人的更改"</string>
+    <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"无法取消关联联系人"</string>
+    <string name="contactJoinErrorToast" msgid="5735129234573327701">"无法关联联系人"</string>
+    <string name="contactGenericErrorToast" msgid="3885457515665783976">"保存联系人时出错"</string>
+    <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"无法保存对联系人照片的更改"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"无法加载标签"</string>
     <string name="groupSavedToast" msgid="6491495462357722285">"标签已保存"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"已删除标签"</string>
@@ -126,7 +127,7 @@
     <string name="groupUpdatedToast" msgid="3667977658676267687">"已更新标签"</string>
     <string name="groupMembersRemovedToast" msgid="3510563559799376603">"已从标签中移除"</string>
     <string name="groupMembersAddedToast" msgid="4824834898718972768">"已添加到标签"</string>
-    <string name="groupSavedErrorToast" msgid="8121032018490980184">"无法保存对标签的修改。"</string>
+    <string name="groupSavedErrorToast" msgid="2355891714292740162">"无法保存对标签的修改"</string>
     <string name="groupExistsErrorMessage" msgid="5196811283836946189">"该标签已存在"</string>
     <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
       <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> 个有电话号码的联系人</item>
@@ -147,7 +148,6 @@
     <string name="callAgain" msgid="3197312117049874778">"重拨"</string>
     <string name="returnCall" msgid="8171961914203617813">"回拨"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"将“<xliff:g id="EMAIL">%s</xliff:g>”添加到通讯录?"</string>
-    <string name="description_contact_photo" msgid="3387458082667894062">"联系人照片"</string>
     <string name="description_plus_button" msgid="515164827856229880">"添加"</string>
     <string name="exporting_contact_list_progress" msgid="560522409559101193">"第 <xliff:g id="CURRENT_NUMBER">%s</xliff:g> 个联系人(共 <xliff:g id="TOTAL_NUMBER">%s</xliff:g> 个)"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"联系人姓名"</string>
@@ -192,7 +192,6 @@
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"日期"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"标签"</string>
     <string name="change_photo" msgid="8530597935483526383">"更改"</string>
-    <string name="primary_photo" msgid="8517942231868516999">"主照片"</string>
     <string name="description_star" msgid="2605854427360036550">"收藏"</string>
     <string name="edit_contact" msgid="7529281274005689512">"编辑联系人"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"关闭"</string>
@@ -269,7 +268,6 @@
     <string name="header_name_entry" msgid="1592791008096288306">"姓名"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"电子邮件地址"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"电话号码"</string>
-    <string name="header_photo_entry" msgid="4438023151411853238">"照片"</string>
     <string name="content_description_expand_editor" msgid="1111381475901897470">"点按即可展开联系人编辑器。"</string>
     <string name="content_description_collapse_editor" msgid="7598061318022977825">"点按即可收起联系人编辑器。"</string>
     <string name="content_description_directions" msgid="2686791825798189335">"到特定地点的路线"</string>
@@ -284,6 +282,8 @@
     <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"更换照片"</string>
     <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"无法开启编辑器。"</string>
     <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"保存到"</string>
+    <!-- no translation found for compact_editor_account_selector_read_only_title (1869435992721760221) -->
+    <skip />
     <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"目前正在保存到 <xliff:g id="ACCOUNT_NAME">%s</xliff:g>。点按两次可选择其他帐号。"</string>
     <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
       <item quantity="other">已关联的联系人(<xliff:g id="COUNT">%d</xliff:g> 位)</item>
@@ -454,22 +454,14 @@
     <string name="chat_jabber" msgid="7561444230307829609">"使用 Jabber 聊天"</string>
     <string name="chat" msgid="9025361898797412245">"聊天"</string>
     <string name="description_minus_button" msgid="6908099247930477551">"删除"</string>
-    <!-- no translation found for expand_name_fields_description (6883935911480726652) -->
-    <skip />
-    <!-- no translation found for collapse_name_fields_description (4757877385895561556) -->
-    <skip />
-    <!-- no translation found for expand_phonetic_name_fields_description (3865726859582581741) -->
-    <skip />
-    <!-- no translation found for collapse_phonetic_name_fields_description (9102249481855019452) -->
-    <skip />
-    <!-- no translation found for expand_fields_description (8129294181216760037) -->
-    <skip />
-    <!-- no translation found for collapse_fields_description (1884143625854637874) -->
-    <skip />
-    <!-- no translation found for announce_expanded_fields (1075947220478530622) -->
-    <skip />
-    <!-- no translation found for announce_collapsed_fields (6414231530177338704) -->
-    <skip />
+    <string name="expand_name_fields_description" msgid="6883935911480726652">"展开姓名字段"</string>
+    <string name="collapse_name_fields_description" msgid="4757877385895561556">"折叠姓名字段"</string>
+    <string name="expand_phonetic_name_fields_description" msgid="3865726859582581741">"展开姓名拼音字段"</string>
+    <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"折叠姓名拼音字段"</string>
+    <string name="expand_fields_description" msgid="8129294181216760037">"展开"</string>
+    <string name="collapse_fields_description" msgid="1884143625854637874">"折叠"</string>
+    <string name="announce_expanded_fields" msgid="1075947220478530622">"已展开"</string>
+    <string name="announce_collapsed_fields" msgid="6414231530177338704">"已折叠"</string>
     <string name="list_filter_all_accounts" msgid="8908683398914322369">"所有联系人"</string>
     <string name="list_filter_all_starred" msgid="5031734941601931356">"已加星标"</string>
     <string name="list_filter_customize" msgid="4789963356004169321">"自定义"</string>
@@ -555,7 +547,8 @@
     <string name="share_favorite_contacts" msgid="4280926751003081042">"分享收藏的联系人"</string>
     <string name="share_contacts" msgid="8109287987498711664">"分享所有联系人"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"无法分享联系人。"</string>
-    <string name="dialog_import_export" msgid="4360648034889921624">"导入/导出联系人"</string>
+    <!-- no translation found for dialog_export (1628001095187741417) -->
+    <skip />
     <string name="dialog_import" msgid="2431698729761448759">"导入联系人"</string>
     <string name="share_error" msgid="948429331673358107">"无法分享此联系人。"</string>
     <string name="no_contact_to_share" msgid="1276397530378323033">"没有可分享的联系人。"</string>
@@ -570,7 +563,10 @@
     <string name="menu_clear_frequents" msgid="7688250191932838833">"清除常用联系人"</string>
     <string name="menu_select_sim" msgid="3603578201960504010">"选择SIM卡"</string>
     <string name="menu_accounts" msgid="1424330057450189074">"管理帐号"</string>
-    <string name="menu_import_export" msgid="26217871113229507">"导入/导出"</string>
+    <!-- no translation found for menu_import (6107961135813836467) -->
+    <skip />
+    <!-- no translation found for menu_export (2658783911863503902) -->
+    <skip />
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"已屏蔽的号码"</string>
     <string name="contact_status_update_attribution" msgid="752179367353018597">"来源:<xliff:g id="SOURCE">%1$s</xliff:g>"</string>
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"时间:<xliff:g id="DATE">%1$s</xliff:g>,来源:<xliff:g id="SOURCE">%2$s</xliff:g>"</string>
@@ -604,4 +600,8 @@
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> 秒"</string>
     <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> 分钟 <xliff:g id="SECONDS">%s</xliff:g> 秒"</string>
     <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> 小时 <xliff:g id="MINUTES_1">%s</xliff:g> 分钟 <xliff:g id="SECONDS">%s</xliff:g> 秒"</string>
+    <!-- no translation found for dynamic_shortcut_disabled_message (249939425761315252) -->
+    <skip />
+    <!-- no translation found for dynamic_shortcut_contact_removed_message (6845645831837615899) -->
+    <skip />
 </resources>
diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml
index f4be5f9..d80a6c4 100644
--- a/res/values-zh-rHK/strings.xml
+++ b/res/values-zh-rHK/strings.xml
@@ -67,6 +67,7 @@
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"建議的聯絡人"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"所有聯絡人"</string>
     <string name="contactsJoinedMessage" msgid="3343535986195643136">"已連結聯絡人"</string>
+    <string name="contact_deleted_named_toast" msgid="6558941164987421174">"已刪除<xliff:g id="NAME">%s</xliff:g>"</string>
     <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
       <item quantity="other">已刪除聯絡人</item>
       <item quantity="one">已刪除聯絡人</item>
@@ -113,11 +114,11 @@
     <string name="emptyMainList" msgid="2772242747899664460">"您的聯絡人名單是空白的"</string>
     <string name="contactSavedToast" msgid="9171862279493213075">"聯絡人記錄已儲存"</string>
     <string name="contactUnlinkedToast" msgid="7122823195786012553">"已解除連結聯絡人"</string>
-    <string name="contactSavedErrorToast" msgid="3207250533172944892">"無法儲存聯絡人變更。"</string>
-    <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"無法解除連結聯絡人。"</string>
-    <string name="contactJoinErrorToast" msgid="3977932531264809035">"無法連結聯絡人。"</string>
-    <string name="contactGenericErrorToast" msgid="7774911165341591714">"儲存聯絡人時發生錯誤。"</string>
-    <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"無法儲存聯絡人相片變更。"</string>
+    <string name="contactSavedErrorToast" msgid="4827033473908688031">"無法儲存聯絡人變更"</string>
+    <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"無法解除連結聯絡人"</string>
+    <string name="contactJoinErrorToast" msgid="5735129234573327701">"無法連結聯絡人"</string>
+    <string name="contactGenericErrorToast" msgid="3885457515665783976">"儲存聯絡人時發生錯誤"</string>
+    <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"無法儲存聯絡人相片變更"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"無法載入標籤"</string>
     <string name="groupSavedToast" msgid="6491495462357722285">"已儲存標籤"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"已刪除標籤"</string>
@@ -126,7 +127,7 @@
     <string name="groupUpdatedToast" msgid="3667977658676267687">"已更新標籤"</string>
     <string name="groupMembersRemovedToast" msgid="3510563559799376603">"已從標籤中移除"</string>
     <string name="groupMembersAddedToast" msgid="4824834898718972768">"已新增至標籤"</string>
-    <string name="groupSavedErrorToast" msgid="8121032018490980184">"無法儲存標籤變更。"</string>
+    <string name="groupSavedErrorToast" msgid="2355891714292740162">"無法儲存標籤變更"</string>
     <string name="groupExistsErrorMessage" msgid="5196811283836946189">"該標籤已存在"</string>
     <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
       <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> 位有電話號碼的聯絡人</item>
@@ -147,7 +148,6 @@
     <string name="callAgain" msgid="3197312117049874778">"重撥"</string>
     <string name="returnCall" msgid="8171961914203617813">"回覆來電"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"要將「<xliff:g id="EMAIL">%s</xliff:g>」加到通訊錄嗎?"</string>
-    <string name="description_contact_photo" msgid="3387458082667894062">"聯絡人相片"</string>
     <string name="description_plus_button" msgid="515164827856229880">"加號"</string>
     <string name="exporting_contact_list_progress" msgid="560522409559101193">"第 <xliff:g id="CURRENT_NUMBER">%s</xliff:g> 位聯絡人,共 <xliff:g id="TOTAL_NUMBER">%s</xliff:g> 位"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"您的聯絡人姓名"</string>
@@ -192,7 +192,6 @@
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"日期"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"標籤"</string>
     <string name="change_photo" msgid="8530597935483526383">"變更"</string>
-    <string name="primary_photo" msgid="8517942231868516999">"主要相片"</string>
     <string name="description_star" msgid="2605854427360036550">"我的最愛"</string>
     <string name="edit_contact" msgid="7529281274005689512">"編輯聯絡人"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"關閉"</string>
@@ -269,7 +268,6 @@
     <string name="header_name_entry" msgid="1592791008096288306">"名稱"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"電郵"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"電話"</string>
-    <string name="header_photo_entry" msgid="4438023151411853238">"相片"</string>
     <string name="content_description_expand_editor" msgid="1111381475901897470">"按一下以展開聯絡人編輯器。"</string>
     <string name="content_description_collapse_editor" msgid="7598061318022977825">"按一下以收合聯絡人編輯器。"</string>
     <string name="content_description_directions" msgid="2686791825798189335">"規劃前往特定地點的路線"</string>
@@ -284,6 +282,8 @@
     <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"變更相片"</string>
     <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"無法打開編輯器。"</string>
     <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"正在儲存至以下帳戶:"</string>
+    <!-- no translation found for compact_editor_account_selector_read_only_title (1869435992721760221) -->
+    <skip />
     <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"目前儲存至 <xliff:g id="ACCOUNT_NAME">%s</xliff:g>。連按兩下即可選擇另一個帳戶。"</string>
     <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
       <item quantity="other">已連結的聯絡人 (<xliff:g id="COUNT">%d</xliff:g>)</item>
@@ -454,22 +454,14 @@
     <string name="chat_jabber" msgid="7561444230307829609">"使用 Jabber 進行即時通訊"</string>
     <string name="chat" msgid="9025361898797412245">"即時通訊"</string>
     <string name="description_minus_button" msgid="6908099247930477551">"刪除"</string>
-    <!-- no translation found for expand_name_fields_description (6883935911480726652) -->
-    <skip />
-    <!-- no translation found for collapse_name_fields_description (4757877385895561556) -->
-    <skip />
-    <!-- no translation found for expand_phonetic_name_fields_description (3865726859582581741) -->
-    <skip />
-    <!-- no translation found for collapse_phonetic_name_fields_description (9102249481855019452) -->
-    <skip />
-    <!-- no translation found for expand_fields_description (8129294181216760037) -->
-    <skip />
-    <!-- no translation found for collapse_fields_description (1884143625854637874) -->
-    <skip />
-    <!-- no translation found for announce_expanded_fields (1075947220478530622) -->
-    <skip />
-    <!-- no translation found for announce_collapsed_fields (6414231530177338704) -->
-    <skip />
+    <string name="expand_name_fields_description" msgid="6883935911480726652">"展開姓名欄位"</string>
+    <string name="collapse_name_fields_description" msgid="4757877385895561556">"收合名稱欄位"</string>
+    <string name="expand_phonetic_name_fields_description" msgid="3865726859582581741">"展開姓名拼音欄位"</string>
+    <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"收合姓名拼音欄位"</string>
+    <string name="expand_fields_description" msgid="8129294181216760037">"展開"</string>
+    <string name="collapse_fields_description" msgid="1884143625854637874">"收合"</string>
+    <string name="announce_expanded_fields" msgid="1075947220478530622">"已展開"</string>
+    <string name="announce_collapsed_fields" msgid="6414231530177338704">"已收合"</string>
     <string name="list_filter_all_accounts" msgid="8908683398914322369">"所有聯絡人"</string>
     <string name="list_filter_all_starred" msgid="5031734941601931356">"已加星號"</string>
     <string name="list_filter_customize" msgid="4789963356004169321">"自訂"</string>
@@ -555,7 +547,8 @@
     <string name="share_favorite_contacts" msgid="4280926751003081042">"分享常用聯絡人"</string>
     <string name="share_contacts" msgid="8109287987498711664">"分享所有聯絡人"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"無法分享聯絡人。"</string>
-    <string name="dialog_import_export" msgid="4360648034889921624">"匯入/匯出聯絡人資料"</string>
+    <!-- no translation found for dialog_export (1628001095187741417) -->
+    <skip />
     <string name="dialog_import" msgid="2431698729761448759">"匯入通訊錄"</string>
     <string name="share_error" msgid="948429331673358107">"無法分享這位聯絡人的資料。"</string>
     <string name="no_contact_to_share" msgid="1276397530378323033">"沒有聯絡人可供分享。"</string>
@@ -570,7 +563,10 @@
     <string name="menu_clear_frequents" msgid="7688250191932838833">"清除常用聯絡人"</string>
     <string name="menu_select_sim" msgid="3603578201960504010">"選取 SIM 卡"</string>
     <string name="menu_accounts" msgid="1424330057450189074">"管理帳戶"</string>
-    <string name="menu_import_export" msgid="26217871113229507">"匯入/匯出"</string>
+    <!-- no translation found for menu_import (6107961135813836467) -->
+    <skip />
+    <!-- no translation found for menu_export (2658783911863503902) -->
+    <skip />
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"已封鎖的號碼"</string>
     <string name="contact_status_update_attribution" msgid="752179367353018597">"透過 <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> (透過 <xliff:g id="SOURCE">%2$s</xliff:g>)"</string>
@@ -604,4 +600,8 @@
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> 秒"</string>
     <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> 分鐘 <xliff:g id="SECONDS">%s</xliff:g> 秒"</string>
     <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> 小時 <xliff:g id="MINUTES_1">%s</xliff:g> 分 <xliff:g id="SECONDS">%s</xliff:g> 秒"</string>
+    <!-- no translation found for dynamic_shortcut_disabled_message (249939425761315252) -->
+    <skip />
+    <!-- no translation found for dynamic_shortcut_contact_removed_message (6845645831837615899) -->
+    <skip />
 </resources>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index 309178a..1dd0d47 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -67,6 +67,7 @@
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"建議聯絡人"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"所有聯絡人"</string>
     <string name="contactsJoinedMessage" msgid="3343535986195643136">"聯絡人連結完成"</string>
+    <string name="contact_deleted_named_toast" msgid="6558941164987421174">"已刪除<xliff:g id="NAME">%s</xliff:g>"</string>
     <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
       <item quantity="other">已刪除聯絡人</item>
       <item quantity="one">已刪除聯絡人</item>
@@ -113,11 +114,11 @@
     <string name="emptyMainList" msgid="2772242747899664460">"您的聯絡人清單沒有任何項目"</string>
     <string name="contactSavedToast" msgid="9171862279493213075">"聯絡人已儲存"</string>
     <string name="contactUnlinkedToast" msgid="7122823195786012553">"已取消連結聯絡人"</string>
-    <string name="contactSavedErrorToast" msgid="3207250533172944892">"無法儲存聯絡人變更。"</string>
-    <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"無法取消連結聯絡人。"</string>
-    <string name="contactJoinErrorToast" msgid="3977932531264809035">"無法連結聯絡人。"</string>
-    <string name="contactGenericErrorToast" msgid="7774911165341591714">"儲存聯絡人時發生錯誤。"</string>
-    <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"無法儲存聯絡人相片變更。"</string>
+    <string name="contactSavedErrorToast" msgid="4827033473908688031">"無法儲存變更後的聯絡人資訊"</string>
+    <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"無法取消連結聯絡人"</string>
+    <string name="contactJoinErrorToast" msgid="5735129234573327701">"無法連結聯絡人"</string>
+    <string name="contactGenericErrorToast" msgid="3885457515665783976">"儲存聯絡人時發生錯誤"</string>
+    <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"無法儲存變更後的聯絡人相片"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"無法載入標籤"</string>
     <string name="groupSavedToast" msgid="6491495462357722285">"已儲存標籤"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"已刪除標籤"</string>
@@ -126,7 +127,7 @@
     <string name="groupUpdatedToast" msgid="3667977658676267687">"已更新標籤"</string>
     <string name="groupMembersRemovedToast" msgid="3510563559799376603">"已從標籤中移除"</string>
     <string name="groupMembersAddedToast" msgid="4824834898718972768">"已新增到標籤中"</string>
-    <string name="groupSavedErrorToast" msgid="8121032018490980184">"無法儲存標籤的變更內容。"</string>
+    <string name="groupSavedErrorToast" msgid="2355891714292740162">"無法儲存變更後的標籤"</string>
     <string name="groupExistsErrorMessage" msgid="5196811283836946189">"該標籤已存在"</string>
     <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
       <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> 位有電話號碼的聯絡人</item>
@@ -147,7 +148,6 @@
     <string name="callAgain" msgid="3197312117049874778">"重撥"</string>
     <string name="returnCall" msgid="8171961914203617813">"回電"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"要將「<xliff:g id="EMAIL">%s</xliff:g>」加到通訊錄嗎?"</string>
-    <string name="description_contact_photo" msgid="3387458082667894062">"聯絡人相片"</string>
     <string name="description_plus_button" msgid="515164827856229880">"加號"</string>
     <string name="exporting_contact_list_progress" msgid="560522409559101193">"第 <xliff:g id="CURRENT_NUMBER">%s</xliff:g> 位聯絡人,共 <xliff:g id="TOTAL_NUMBER">%s</xliff:g> 位"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"您的聯絡人姓名"</string>
@@ -192,7 +192,6 @@
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"日期"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"標籤"</string>
     <string name="change_photo" msgid="8530597935483526383">"變更"</string>
-    <string name="primary_photo" msgid="8517942231868516999">"主要相片"</string>
     <string name="description_star" msgid="2605854427360036550">"我的收藏"</string>
     <string name="edit_contact" msgid="7529281274005689512">"編輯聯絡人"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"關閉"</string>
@@ -269,7 +268,6 @@
     <string name="header_name_entry" msgid="1592791008096288306">"姓名"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"電子郵件"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"電話"</string>
-    <string name="header_photo_entry" msgid="4438023151411853238">"相片"</string>
     <string name="content_description_expand_editor" msgid="1111381475901897470">"按一下即可展開聯絡人編輯器。"</string>
     <string name="content_description_collapse_editor" msgid="7598061318022977825">"按一下即可收合聯絡人編輯器。"</string>
     <string name="content_description_directions" msgid="2686791825798189335">"規劃前往特定地點的路線"</string>
@@ -284,6 +282,8 @@
     <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"更換相片"</string>
     <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"無法開啟編輯器。"</string>
     <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"儲存到"</string>
+    <!-- no translation found for compact_editor_account_selector_read_only_title (1869435992721760221) -->
+    <skip />
     <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"正在儲存到 <xliff:g id="ACCOUNT_NAME">%s</xliff:g>。輕觸兩下即可選擇其他帳戶。"</string>
     <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
       <item quantity="other">已連結的聯絡人 (<xliff:g id="COUNT">%d</xliff:g> 位)</item>
@@ -454,22 +454,14 @@
     <string name="chat_jabber" msgid="7561444230307829609">"使用 Jabber 進行即時通訊"</string>
     <string name="chat" msgid="9025361898797412245">"即時通訊"</string>
     <string name="description_minus_button" msgid="6908099247930477551">"刪除"</string>
-    <!-- no translation found for expand_name_fields_description (6883935911480726652) -->
-    <skip />
-    <!-- no translation found for collapse_name_fields_description (4757877385895561556) -->
-    <skip />
-    <!-- no translation found for expand_phonetic_name_fields_description (3865726859582581741) -->
-    <skip />
-    <!-- no translation found for collapse_phonetic_name_fields_description (9102249481855019452) -->
-    <skip />
-    <!-- no translation found for expand_fields_description (8129294181216760037) -->
-    <skip />
-    <!-- no translation found for collapse_fields_description (1884143625854637874) -->
-    <skip />
-    <!-- no translation found for announce_expanded_fields (1075947220478530622) -->
-    <skip />
-    <!-- no translation found for announce_collapsed_fields (6414231530177338704) -->
-    <skip />
+    <string name="expand_name_fields_description" msgid="6883935911480726652">"展開姓名欄位"</string>
+    <string name="collapse_name_fields_description" msgid="4757877385895561556">"收合姓名欄位"</string>
+    <string name="expand_phonetic_name_fields_description" msgid="3865726859582581741">"展開姓名拼音欄位"</string>
+    <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"收合姓名拼音欄位"</string>
+    <string name="expand_fields_description" msgid="8129294181216760037">"展開"</string>
+    <string name="collapse_fields_description" msgid="1884143625854637874">"收合"</string>
+    <string name="announce_expanded_fields" msgid="1075947220478530622">"已展開"</string>
+    <string name="announce_collapsed_fields" msgid="6414231530177338704">"已收合"</string>
     <string name="list_filter_all_accounts" msgid="8908683398914322369">"所有聯絡人"</string>
     <string name="list_filter_all_starred" msgid="5031734941601931356">"已加星號"</string>
     <string name="list_filter_customize" msgid="4789963356004169321">"自訂"</string>
@@ -555,7 +547,8 @@
     <string name="share_favorite_contacts" msgid="4280926751003081042">"分享常用聯絡人資料"</string>
     <string name="share_contacts" msgid="8109287987498711664">"分享所有聯絡人資料"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"無法分享聯絡人資料。"</string>
-    <string name="dialog_import_export" msgid="4360648034889921624">"匯入/匯出聯絡人"</string>
+    <!-- no translation found for dialog_export (1628001095187741417) -->
+    <skip />
     <string name="dialog_import" msgid="2431698729761448759">"匯入聯絡人"</string>
     <string name="share_error" msgid="948429331673358107">"無法分享這位聯絡人。"</string>
     <string name="no_contact_to_share" msgid="1276397530378323033">"沒有任何聯絡人資料可分享。"</string>
@@ -570,7 +563,10 @@
     <string name="menu_clear_frequents" msgid="7688250191932838833">"清除常用聯絡人"</string>
     <string name="menu_select_sim" msgid="3603578201960504010">"選取 SIM 卡"</string>
     <string name="menu_accounts" msgid="1424330057450189074">"管理帳戶"</string>
-    <string name="menu_import_export" msgid="26217871113229507">"匯入/匯出"</string>
+    <!-- no translation found for menu_import (6107961135813836467) -->
+    <skip />
+    <!-- no translation found for menu_export (2658783911863503902) -->
+    <skip />
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"已封鎖的號碼"</string>
     <string name="contact_status_update_attribution" msgid="752179367353018597">"透過 <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> (透過 <xliff:g id="SOURCE">%2$s</xliff:g>)"</string>
@@ -604,4 +600,8 @@
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> 秒"</string>
     <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> 分鐘 <xliff:g id="SECONDS">%s</xliff:g> 秒"</string>
     <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> 小時 <xliff:g id="MINUTES_1">%s</xliff:g> 分鐘 <xliff:g id="SECONDS">%s</xliff:g> 秒"</string>
+    <!-- no translation found for dynamic_shortcut_disabled_message (249939425761315252) -->
+    <skip />
+    <!-- no translation found for dynamic_shortcut_contact_removed_message (6845645831837615899) -->
+    <skip />
 </resources>
diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml
index 57402df..497f302 100644
--- a/res/values-zu/strings.xml
+++ b/res/values-zu/strings.xml
@@ -67,6 +67,7 @@
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Othintana nabo abasikiselwayo"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Bonke othintana nabo"</string>
     <string name="contactsJoinedMessage" msgid="3343535986195643136">"Oxhumana nabo baxhunyiwe"</string>
+    <string name="contact_deleted_named_toast" msgid="6558941164987421174">"<xliff:g id="NAME">%s</xliff:g> kususiwe"</string>
     <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
       <item quantity="one">Oxhumana nabo basusiwe</item>
       <item quantity="other">Oxhumana nabo basusiwe</item>
@@ -113,11 +114,11 @@
     <string name="emptyMainList" msgid="2772242747899664460">"Uhlu lwakho loxhumana nabo alunalutho"</string>
     <string name="contactSavedToast" msgid="9171862279493213075">"Oxhumana naye olondoloziwe"</string>
     <string name="contactUnlinkedToast" msgid="7122823195786012553">"Oxhumana nabo basuswe ukuxhumana"</string>
-    <string name="contactSavedErrorToast" msgid="3207250533172944892">"Yehlulekile ukulondoloza izinguquko zoxhumana nabo."</string>
-    <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Ayikwazanga ukususa isixhumanisi koxhumana naye."</string>
-    <string name="contactJoinErrorToast" msgid="3977932531264809035">"Ayikwazanga ukuxhuma oxhumana naye."</string>
-    <string name="contactGenericErrorToast" msgid="7774911165341591714">"Iphutha lokulondoloza oxhumana naye."</string>
-    <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"Ayikwazanga ukulondoloza izinguquko zesithombe sokuxhumana."</string>
+    <string name="contactSavedErrorToast" msgid="4827033473908688031">"Ayikwazanga ukulondoloza ushintsho loxhumana naye"</string>
+    <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"Ayikwazanga ukususa ukuxhumanisa oxhumana naye"</string>
+    <string name="contactJoinErrorToast" msgid="5735129234573327701">"Ayikwazanga ukuxhumanisa oxhumana naye"</string>
+    <string name="contactGenericErrorToast" msgid="3885457515665783976">"Iphutha lokulondoloza oxhumana naye"</string>
+    <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Ayikwazanga ukulondoloza ushintsho lwesithombe loxhumana naye"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"Yehlulekile ukulayisha ilebula"</string>
     <string name="groupSavedToast" msgid="6491495462357722285">"Ilebula ilondoloziwe"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Ilebula isusiwe"</string>
@@ -126,7 +127,7 @@
     <string name="groupUpdatedToast" msgid="3667977658676267687">"Ilebula libuyekeziwe"</string>
     <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Kususiwe kulebula"</string>
     <string name="groupMembersAddedToast" msgid="4824834898718972768">"Kungeziwe kulebuli"</string>
-    <string name="groupSavedErrorToast" msgid="8121032018490980184">"Ayikwazanga ukulondoloza ushintsho lwelebula."</string>
+    <string name="groupSavedErrorToast" msgid="2355891714292740162">"Ayikwazanga ukulondoloza ushintsho lwelebula"</string>
     <string name="groupExistsErrorMessage" msgid="5196811283836946189">"Leyo lebuli isivele ikhona"</string>
     <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
       <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> oxhumana nabo abanezinombolo zefoni</item>
@@ -147,7 +148,6 @@
     <string name="callAgain" msgid="3197312117049874778">"Shayela futhi"</string>
     <string name="returnCall" msgid="8171961914203617813">"Buyisela ikholi"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Faka  \"<xliff:g id="EMAIL">%s</xliff:g>\"  kothintana nabo?"</string>
-    <string name="description_contact_photo" msgid="3387458082667894062">"isithombe sothintana naye"</string>
     <string name="description_plus_button" msgid="515164827856229880">"kuhlanganise"</string>
     <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> kothintana nabo abangu-<xliff:g id="TOTAL_NUMBER">%s</xliff:g>"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"Amagama othintana nabo"</string>
@@ -192,7 +192,6 @@
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Idethi"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Ilebula"</string>
     <string name="change_photo" msgid="8530597935483526383">"Guqula"</string>
-    <string name="primary_photo" msgid="8517942231868516999">"Isithombe esiyinhloko"</string>
     <string name="description_star" msgid="2605854427360036550">"intandokazi"</string>
     <string name="edit_contact" msgid="7529281274005689512">"Hlela othintana naye"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"vala"</string>
@@ -269,7 +268,6 @@
     <string name="header_name_entry" msgid="1592791008096288306">"Igama"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"I-imeyili"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"Ifoni"</string>
-    <string name="header_photo_entry" msgid="4438023151411853238">"Isithombe"</string>
     <string name="content_description_expand_editor" msgid="1111381475901897470">"Chofoza ukuze unwebe isihleli soxhumana naye."</string>
     <string name="content_description_collapse_editor" msgid="7598061318022977825">"Chofoza ukuze ugoqe isihleli soxhumana naye."</string>
     <string name="content_description_directions" msgid="2686791825798189335">"izikhombisi-ndlela eziya endaweni"</string>
@@ -284,6 +282,8 @@
     <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Guqula isithombe"</string>
     <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Yehlulekile ukuvula umhleli."</string>
     <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Ukulondoloza ku-"</string>
+    <!-- no translation found for compact_editor_account_selector_read_only_title (1869435992721760221) -->
+    <skip />
     <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"Okwamanje ilondoloza ku-<xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Thepha kabili ukuze ukhethe i-akhawunti ehlukile."</string>
     <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
       <item quantity="one">Oxhumana nabo abaxhunyiwe (<xliff:g id="COUNT">%d</xliff:g>)</item>
@@ -454,22 +454,14 @@
     <string name="chat_jabber" msgid="7561444230307829609">"Xoxa usebenzisa i-Jabber"</string>
     <string name="chat" msgid="9025361898797412245">"Xoxa"</string>
     <string name="description_minus_button" msgid="6908099247930477551">"susa"</string>
-    <!-- no translation found for expand_name_fields_description (6883935911480726652) -->
-    <skip />
-    <!-- no translation found for collapse_name_fields_description (4757877385895561556) -->
-    <skip />
-    <!-- no translation found for expand_phonetic_name_fields_description (3865726859582581741) -->
-    <skip />
-    <!-- no translation found for collapse_phonetic_name_fields_description (9102249481855019452) -->
-    <skip />
-    <!-- no translation found for expand_fields_description (8129294181216760037) -->
-    <skip />
-    <!-- no translation found for collapse_fields_description (1884143625854637874) -->
-    <skip />
-    <!-- no translation found for announce_expanded_fields (1075947220478530622) -->
-    <skip />
-    <!-- no translation found for announce_collapsed_fields (6414231530177338704) -->
-    <skip />
+    <string name="expand_name_fields_description" msgid="6883935911480726652">"Nweba izinkambu zegama"</string>
+    <string name="collapse_name_fields_description" msgid="4757877385895561556">"Goqa izinkambu zegama"</string>
+    <string name="expand_phonetic_name_fields_description" msgid="3865726859582581741">"Nweba izinkambu zegama lefonetiki"</string>
+    <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Goqa izinkambu zegama lefonetiki"</string>
+    <string name="expand_fields_description" msgid="8129294181216760037">"Nweba"</string>
+    <string name="collapse_fields_description" msgid="1884143625854637874">"Goqa"</string>
+    <string name="announce_expanded_fields" msgid="1075947220478530622">"Kunwetshiwe"</string>
+    <string name="announce_collapsed_fields" msgid="6414231530177338704">"Kugoqiwe"</string>
     <string name="list_filter_all_accounts" msgid="8908683398914322369">"Bonke othintana nabo"</string>
     <string name="list_filter_all_starred" msgid="5031734941601931356">"Okunenkanyezi"</string>
     <string name="list_filter_customize" msgid="4789963356004169321">"Enza ngendlela oyifisayo"</string>
@@ -555,7 +547,8 @@
     <string name="share_favorite_contacts" msgid="4280926751003081042">"Yabelana ngoxhumana nabo obathandayo"</string>
     <string name="share_contacts" msgid="8109287987498711664">"Yabelana bonke oxhumana nabo"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"Yehlulekile ukwabelana ngoxhumana nabo."</string>
-    <string name="dialog_import_export" msgid="4360648034889921624">"Ngenisa/Thekelisa othintana nabo"</string>
+    <!-- no translation found for dialog_export (1628001095187741417) -->
+    <skip />
     <string name="dialog_import" msgid="2431698729761448759">"Ngenisa othintana nabo"</string>
     <string name="share_error" msgid="948429331673358107">"Lona oxhumana naye ngeke ukwazi ukwabelana ngaye."</string>
     <string name="no_contact_to_share" msgid="1276397530378323033">"Abekho oxhumana nabo ongabelana nabo."</string>
@@ -570,7 +563,10 @@
     <string name="menu_clear_frequents" msgid="7688250191932838833">"Sula oxhumana nabo njalo"</string>
     <string name="menu_select_sim" msgid="3603578201960504010">"Khetha ikhadi le-SIM"</string>
     <string name="menu_accounts" msgid="1424330057450189074">"Phatha ama-akhawunti"</string>
-    <string name="menu_import_export" msgid="26217871113229507">"Ngenisa/Thekelisa"</string>
+    <!-- no translation found for menu_import (6107961135813836467) -->
+    <skip />
+    <!-- no translation found for menu_export (2658783911863503902) -->
+    <skip />
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"Izinombolo ezivinjiwe"</string>
     <string name="contact_status_update_attribution" msgid="752179367353018597">"nge <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> nge- <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
@@ -604,4 +600,8 @@
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> isekhondi"</string>
     <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> iminithi <xliff:g id="SECONDS">%s</xliff:g> isekhondi"</string>
     <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> ihora <xliff:g id="MINUTES_1">%s</xliff:g> iminithi <xliff:g id="SECONDS">%s</xliff:g> isekhondi"</string>
+    <!-- no translation found for dynamic_shortcut_disabled_message (249939425761315252) -->
+    <skip />
+    <!-- no translation found for dynamic_shortcut_contact_removed_message (6845645831837615899) -->
+    <skip />
 </resources>
diff --git a/res/values/colors.xml b/res/values/colors.xml
index 607b7a0..081d579 100644
--- a/res/values/colors.xml
+++ b/res/values/colors.xml
@@ -33,6 +33,7 @@
     <color name="action_bar_button_text_color">#FFFFFF</color>
 
     <color name="actionbar_background_color">@color/primary_color</color>
+    <color name="actionbar_background_color_dark">@color/primary_color_dark</color>
 
     <color name="contextual_selection_bar_color">#f6f6f6</color>
     <!-- Color of the status bar above the contextual selection bar. -->
@@ -41,9 +42,6 @@
     <color name="primary_color_dark">#0277bd</color>
     <color name="primary_color">#0288d1</color>
 
-    <color name="group_primary_color_dark">#546E7A</color>
-    <color name="group_primary_color">#607D8B</color>
-
     <!-- Color of the selected tab underline -->
     <color name="contacts_accent_color">#FFFFFF</color>
 
@@ -73,12 +71,6 @@
     <!-- Color of disabled text and unfocused hint text inside the contact editor. 25% black. -->
     <color name="editor_disabled_text_color">#40000000</color>
 
-    <!-- Color of button background in compact photo picker. -->
-    <color name="google_grey_600">#757575</color>
-
-    <!-- Color of button text in compact photo picker, 85% white. -->
-    <color name="photo_action_button_color">#D9FFFFFF</color>
-
     <!-- Color of text on disabled link contacts button, 25% black. -->
     <color name="disabled_button_text">#40000000</color>
 
@@ -88,6 +80,12 @@
     <!-- Color of background of all empty states. -->
     <color name="empty_state_background">#efefef</color>
 
+    <!-- Colors of swipeRefreshLayout's spinning circle. -->
+    <color name="swipe_refresh_color1">#0f9d58</color>
+    <color name="swipe_refresh_color2">#dd4b37</color>
+    <color name="swipe_refresh_color3">#4285f4</color>
+    <color name="swipe_refresh_color4">#f4b400</color>
+
     <!-- Color of hamburger icon in promo -->
     <color name="hamburger_feature_highlight_inner_color">#00ffffff</color>
 
@@ -197,11 +195,6 @@
     <!-- Color for icons in the actionbar -->
     <color name="actionbar_icon_color">#ffffff</color>
 
-    <color name="tab_ripple_color">@color/tab_accent_color</color>
-    <color name="tab_accent_color">#ffffff</color>
-    <color name="tab_selected_underline_color">@color/tab_accent_color</color>
-    <color name="tab_unread_count_background_color">#700f4b70</color>
-
     <!-- Color of the title to the Frequently Contacted section -->
     <color name="frequently_contacted_title_color">@color/actionbar_background_color</color>
 
@@ -214,7 +207,6 @@
     <color name="actionbar_text_color_black">#DF000000</color>
     <!-- Solid grey for status bar overlay-->
     <color name="actionbar_color_grey_solid">#777777</color>
-    <color name="actionbar_unselected_text_color">#a6ffffff</color>
 
     <!-- Text color of the search box text as entered by user  -->
     <color name="searchbox_text_color">#000000</color>
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index f3e73ff..bcea910 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -90,15 +90,6 @@
         padding between TextView's in the readonly Raw Contact Editor. -->
     <dimen name="editor_padding_between_read_only_editor_views">9dp</dimen>
 
-    <!-- Padding above and below the photo editor. This value is chosen to give 19dp of apparent
-        padding between TextView's and the photo's ImageView. -->
-    <dimen name="editor_padding_around_read_only_photo_editor">15dp</dimen>
-
-    <!-- Padding below the photo editor. This value is larger than
-        editor_padding_between_editor_views, since ImageView's don't have space between the bottom
-        of their visual bottom, like an EditText does. -->
-    <dimen name="editor_padding_below_photo">9dp</dimen>
-
     <!-- Width of the Type-Label in the Editor -->
     <dimen name="editor_type_label_width">150dip</dimen>
 
@@ -237,16 +228,6 @@
     <dimen name="quickcontact_expanding_button_section_height">48dp</dimen>
     <dimen name="quickcontact_expanding_button_section_padding">8dp</dimen>
 
-    <!-- The width the that the tabs occupy in the ActionBar when in landscape mode.
-         426dp is the height of a "small" screen. We should leave 240dp for
-         the title and menu items -->
-    <dimen name="people_activity_landscape_tabs_width">186dip</dimen>
-    <!-- The size of the text displayed in the ActionBar tabs in landscape mode.
-         Text in the tabs should must be width dependent, otherwise it won't fit in the tabs.
-         In portrait mode, the tabs look okay when overflowing their allocated space.
-         We have to be more careful in landscape. -->
-    <dimen name="people_activity_landscape_tabs_text_size">8dp</dimen>
-
     <!-- Top margin of the text message when provider status is busy -->
     <dimen name="update_contact_list_top_margin">188dp</dimen>
 
@@ -260,9 +241,6 @@
 
     <dimen name="contact_browser_list_item_height">56dp</dimen>
 
-    <!-- Ideal item width in photo picker -->
-    <dimen name="photo_picker_item_ideal_width">135dp</dimen>
-
     <!-- Margin between name field and whatever fields are above it. -->
     <dimen name="compact_editor_name_top_margin">8dp</dimen>
 
@@ -294,6 +272,9 @@
     <!-- Minimum height for group name EditText -->
     <dimen name="group_name_edit_text_min_height">48dp</dimen>
 
+    <!-- Distance to pull down before causing a refresh. -->
+    <dimen name="pull_to_refresh_distance">40dp</dimen>
+
     <!-- Elevation of contact list header -->
     <dimen name="contact_list_header_elevation">2dp</dimen>
 
@@ -427,17 +408,8 @@
     <!-- Offset of bottom margin of the floating action button used when dialpad is up -->
     <dimen name="floating_action_button_dialpad_margin_bottom_offset">4dp</dimen>
 
-    <!-- Height of the selection indicator of a tab. -->
-    <dimen name="tab_selected_underline_height">2dp</dimen>
     <!-- Size of text in tabs. -->
-    <dimen name="tab_text_size">14sp</dimen>
     <dimen name="tab_elevation">2dp</dimen>
-    <dimen name="tab_unread_count_background_size">16dp</dimen>
-    <dimen name="tab_unread_count_background_radius">2dp</dimen>
-    <dimen name="tab_unread_count_margin_left">10dp</dimen>
-    <dimen name="tab_unread_count_margin_top">2dp</dimen>
-    <dimen name="tab_unread_count_text_size">12sp</dimen>
-    <dimen name="tab_unread_count_text_padding">2dp</dimen>
 
     <!-- Padding around the icon in the search box. -->
     <dimen name="search_box_icon_margin">4dp</dimen>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 70ca005..5af7000 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -172,6 +172,9 @@
     <!-- Toast shown after two contacts have been linked by a user action. [CHAR LIMIT=NONE] -->
     <string name="contactsJoinedMessage">Contacts linked</string>
 
+    <!-- Toast shown after contact deleted when no display name is given. [CHAR LIMIT=20]-->
+    <string name="contact_deleted_named_toast"><xliff:g id="name">%s</xliff:g> deleted</string>
+
     <!-- Toast shown after contacts that the user has selected are deleted by a user action. [CHAR LIMIT=30] -->
     <plurals name="contacts_deleted_toast">
         <item quantity="one">Contact deleted</item>
@@ -293,6 +296,9 @@
     <!-- The text displayed when there's no contacts in the main contacts list [CHAR LIMIT=70] -->
     <string name="emptyMainList">Your contacts list is empty</string>
 
+    <!-- Toast displayed when a contact is saved [CHAR LIMIT=30] -->
+    <string name="contactSavedNamedToast"><xliff:g id="display_name">%s</xliff:g> saved</string>
+
     <!-- Toast displayed when a contact is saved [CHAR LIMIT=NONE] -->
     <string name="contactSavedToast">Contact saved</string>
 
@@ -384,12 +390,6 @@
          the email address, e.g. "Add xyz@foo.com to contacts?" -->
     <string name="add_contact_dlg_message_fmt">Add \"<xliff:g id="email">%s</xliff:g>\" to contacts?</string>
 
-    <!-- String describing the Contact Photo Image
-
-         Used by AccessibilityService to announce the purpose of the view.
-    -->
-    <string name="description_contact_photo">contact photo</string>
-
     <!-- String describing the Contact Editor Plus button
 
          Used by AccessibilityService to announce the purpose of the button.
@@ -517,9 +517,6 @@
     <!-- Button used for changing a photo in the Raw Contact Editor [CHAR LIMIT=15] -->
     <string name="change_photo">Change</string>
 
-    <!-- RadioButton that determines whether a raw contact's photo should be used for the entire contact [CHAR LIMIT=25] -->
-    <string name="primary_photo">Primary photo</string>
-
     <!-- String describing the Star/Favorite checkbox
 
          Used by AccessibilityService to announce the purpose of the view.
@@ -686,12 +683,12 @@
     <!-- Message in the contact editor prompt that asks the user which account they want to save the newly created contact to. [CHAR LIMIT=NONE] -->
     <string name="contact_editor_prompt_multiple_accounts">Choose a default account for new contacts:</string>
 
-    <!-- Title of the ContactEditorActivity when creating a new contact. The char
+    <!-- Title of the editor activity when creating a new contact. The char
          limit is short and cannot be increased, since this needs to be displayed in a single line
          at a pre-determined text size. [CHAR LIMIT=20] -->
     <string name="contact_editor_title_new_contact">Add new contact</string>
 
-    <!-- Title of the ContactEditorActivity when editing a contact that already exists. The char
+    <!-- Title of the editor activity when editing a contact that already exists. The char
          limit is short and cannot be increased, since this needs to be displayed in a single line
          at a pre-determined text size. [CHAR LIMIT=20] -->
     <string name="contact_editor_title_existing_contact">Edit contact</string>
@@ -765,8 +762,6 @@
     <string name="header_email_entry">Email</string>
     <!-- Content description for the phone fields header entry [CHAR LIMIT=NONE] -->
     <string name="header_phone_entry">Phone</string>
-    <!-- Content description for the camera icon beside the photo section in the Raw Contact Editor [CHAR LIMIT=NONE] -->
-    <string name="header_photo_entry">Photo</string>
 
     <!-- Content description for the expand button inside the raw contact editor's header. [CHAR LIMIT=NONE] -->
     <string name="content_description_expand_editor">Click to expand contact editor.</string>
@@ -807,6 +802,9 @@
     <!-- Label for the account selector to indicate which account a contact will be saved to. [CHAR LIMIT=30] -->
     <string name="compact_editor_account_selector_title">Saving to</string>
 
+    <!-- Label for the account selector to indicate which read-only account is being viewed. [CHAR LIMIT=30] -->
+    <string name="compact_editor_account_selector_read_only_title">Viewing</string>
+
     <!-- Content description for the account selector to indicate which account a contact will be saved to. [CHAR LIMIT=NONE] -->
     <string name="compact_editor_account_selector_description">Currently saving to <xliff:g id="account_name">%s</xliff:g>. Double-tap to pick a different account.</string>
 
@@ -864,12 +862,6 @@
     <!-- Title of profile photos that are from your various accounts -->
     <string name="from_your_accounts">From your accounts</string>
 
-    <!-- Button used in photo picker to open camera [CHAR LIMIT=30]-->
-    <string name="take_a_photo_button">Take a photo</string>
-
-    <!-- Button used in photo picker to open photo/gallery [CHAR LIMIT=20]-->
-    <string name="all_photos_button">All photos</string>
-
     <!-- Title of photo picker [CHAR LIMIT=30]-->
     <string name="photo_picker_title">Choose photo</string>
 
@@ -1603,7 +1595,7 @@
     <string name="share_contacts_failure">Failed to share contacts.</string>
 
     <!-- Dialog title when selecting the bulk operation to perform from a list. [CHAR LIMIT=36] -->
-    <string name="dialog_import_export">Import/export contacts</string>
+    <string name="dialog_export">Export contacts</string>
 
     <!-- Dialog title when importing contacts from an external source. [CHAR LIMIT=36] -->
     <string name="dialog_import">Import contacts</string>
@@ -1652,8 +1644,11 @@
     <!-- The menu item to open the list of accounts. [CHAR LIMIT=60]-->
     <string name="menu_accounts">Manage accounts</string>
 
-    <!-- The menu item to bulk import or bulk export contacts from SIM card or SD card.  [CHAR LIMIT=30]-->
-    <string name="menu_import_export">Import/export</string>
+    <!-- The menu item to bulk import contacts from SIM card or SD card.  [CHAR LIMIT=30]-->
+    <string name="menu_import">Import</string>
+
+    <!-- The menu item to bulk export contacts from SIM card or SD card.  [CHAR LIMIT=30]-->
+    <string name="menu_export">Export</string>
 
     <!-- The menu item to open blocked numbers activity [CHAR LIMIT=60]-->
     <string name="menu_blocked_numbers">Blocked numbers</string>
diff --git a/res/values/styles.xml b/res/values/styles.xml
index 432f0a8..e7b6582 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -41,10 +41,6 @@
 
     <style name="PeopleTheme" parent="@android:style/Theme.Material.Light">
         <item name="android:actionBarStyle">@style/ContactsActionBarStyle</item>
-        <!-- Style for the tab bar (for the divider between tabs) -->
-        <item name="android:actionBarTabBarStyle">@style/ContactsActionBarTabBarStyle</item>
-        <!-- Style for the tab bar text (for text on tabs) -->
-        <item name="android:actionBarTabTextStyle">@style/ContactsActionBarTabTextStyle</item>
         <!--  Drawable for the back button -->
         <item name="android:homeAsUpIndicator">@drawable/ic_back_arrow</item>
         <!-- Style for the overflow button in the actionbar. -->
@@ -103,21 +99,10 @@
         <item name="android:listSelector">?android:attr/listChoiceBackgroundIndicator</item>
     </style>
 
-    <style name="GroupActivityTheme" parent="@style/PeopleActivityTheme">
-        <item name="android:colorPrimaryDark">@color/group_primary_color_dark</item>
-        <item name="colorPrimaryDark">@color/group_primary_color_dark</item>
-    </style>
-
     <style name="PeopleThemeAppCompat" parent="Theme.AppCompat.Light">
         <!-- Styles that require AppCompat compatibility, remember to update both sets -->
         <item name="android:actionBarStyle">@style/ContactsActionBarStyleAppCompat</item>
         <item name="actionBarStyle">@style/ContactsActionBarStyleAppCompat</item>
-        <!-- Style for the tab bar (for the divider between tabs) -->
-        <item name="android:actionBarTabBarStyle">@style/ContactsActionBarTabBarStyle</item>
-        <item name="actionBarTabBarStyle">@style/ContactsActionBarTabBarStyle</item>
-        <!-- Style for the tab bar text (for text on tabs) -->
-        <item name="android:actionBarTabTextStyle">@style/ContactsActionBarTabTextStyle</item>
-        <item name="actionBarTabTextStyle">@style/ContactsActionBarTabTextStyle</item>
         <item name="android:actionButtonStyle">@style/ContactsActionButtonStyle</item>
         <item name="actionButtonStyle">@style/ContactsActionButtonStyle</item>
         <!--  Drawable for the back button -->
@@ -249,22 +234,6 @@
         <item name="android:textColor">@color/actionbar_text_color_black</item>
     </style>
 
-    <!-- Styling for the tab bar; handles styling of the divider line. -->
-    <style name="ContactsActionBarTabBarStyle"
-           parent="@android:style/Widget.Material.ActionBar.TabBar">
-        <item name="android:showDividers">none</item>
-    </style>
-
-    <!-- Text style for tabs. -->
-    <style name="ContactsActionBarTabTextStyle"
-           parent="android:style/Widget.Material.Light.ActionBar.TabText">
-        <item name="android:textColor">@color/tab_text_color</item>
-        <item name="android:textSize">@dimen/tab_text_size</item>
-        <item name="android:fontFamily">@string/tab_font_family</item>
-        <item name="android:elevation">0dp</item>
-        <item name="android:textStyle">bold</item>
-    </style>
-
     <!-- Action bar overflow menu icon. -->
     <style name="ContactsActionBarOverflowQP"
            parent="Widget.AppCompat.Light.ActionButton.Overflow">
diff --git a/res/xml/preference_display_options.xml b/res/xml/preference_display_options.xml
index f7a6514..bf7e871 100644
--- a/res/xml/preference_display_options.xml
+++ b/res/xml/preference_display_options.xml
@@ -51,8 +51,13 @@
 
     <Preference
         android:icon="@null"
-        android:key="importExport"
-        android:title="@string/menu_import_export"/>
+        android:key="import"
+        android:title="@string/menu_import"/>
+
+    <Preference
+        android:icon="@null"
+        android:key="export"
+        android:title="@string/menu_export"/>
 
     <Preference
         android:icon="@null"
diff --git a/src-bind/com/android/contactsbind/Assistants.java b/src-bind/com/android/contactsbind/Assistants.java
deleted file mode 100644
index 3fba91c..0000000
--- a/src-bind/com/android/contactsbind/Assistants.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * 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.contactsbind;
-
-import android.content.Context;
-import android.content.Intent;
-
-/**
- * Creates default implementations of contacts assistants.
- */
-public final class Assistants {
-
-    private Assistants() {
-    }
-
-    /**
-     * Returns an Intent to start an Activity to clean up duplicate contacts or null
-     * if it is not a supported feature.
-     */
-    public static Intent getDuplicatesActivityIntent(Context context) {
-        return null;
-    }
-}
diff --git a/src-bind/com/android/contactsbind/ObjectFactory.java b/src-bind/com/android/contactsbind/ObjectFactory.java
index ecdb967..83b8f4d 100644
--- a/src-bind/com/android/contactsbind/ObjectFactory.java
+++ b/src-bind/com/android/contactsbind/ObjectFactory.java
@@ -15,9 +15,13 @@
 
 import com.android.contacts.common.logging.Logger;
 import com.android.contacts.common.preference.PreferenceManager;
+import com.android.contactsbind.search.AutocompleteHelper;
 import com.android.contacts.common.util.DeviceLocalAccountTypeFactory;
 
+import android.app.Fragment;
 import android.content.Context;
+import android.content.Intent;
+import android.net.Uri;
 
 /**
  * Creates default bindings for overlays.
@@ -30,7 +34,23 @@
 
     public static PreferenceManager getPreferenceManager(Context context) { return null; }
 
+    public static AutocompleteHelper getAutocompleteHelper(Context context) {
+        return null;
+    }
+
     public static DeviceLocalAccountTypeFactory getDeviceLocalAccountTypeFactory(Context context) {
         return new DeviceLocalAccountTypeFactory.Default(context);
     }
+
+    public static Fragment getDuplicatesFragment() {
+        return null;
+    }
+
+    public static Fragment getDuplicatesUtilFragment() {
+        return null;
+    }
+
+    public static Intent getContactSheetIntent(Context context, Uri contactLookupUri) {
+        return null;
+    }
 }
diff --git a/src-bind/com/android/contactsbind/experiments/Flags.java b/src-bind/com/android/contactsbind/experiments/Flags.java
index 5bf47e8..4c29958 100644
--- a/src-bind/com/android/contactsbind/experiments/Flags.java
+++ b/src-bind/com/android/contactsbind/experiments/Flags.java
@@ -17,8 +17,6 @@
 
 import android.content.Context;
 
-import com.android.contacts.common.Experiments;
-
 import java.util.HashMap;
 import java.util.Map;
 
@@ -30,7 +28,7 @@
 
     private static Flags sInstance;
 
-    private Map<String,Boolean> mMap;
+    private Map<String, Object> mMap;
 
     public static Flags getInstance(Context context) {
         if (sInstance == null) {
@@ -44,6 +42,10 @@
     }
 
     public boolean getBoolean(String flagName) {
-        return mMap.containsKey(flagName) ? mMap.get(flagName) : false;
+        return mMap.containsKey(flagName) ? (boolean) mMap.get(flagName) : false;
+    }
+
+    public int getInteger(String flagName) {
+        return mMap.containsKey(flagName) ? ((Integer) mMap.get(flagName)).intValue() : 0;
     }
 }
diff --git a/src-bind/com/android/contactsbind/search/AutocompleteHelper.java b/src-bind/com/android/contactsbind/search/AutocompleteHelper.java
new file mode 100644
index 0000000..c37a828
--- /dev/null
+++ b/src-bind/com/android/contactsbind/search/AutocompleteHelper.java
@@ -0,0 +1,39 @@
+/*
+ * 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.contactsbind.search;
+
+import android.database.Cursor;
+
+public final class AutocompleteHelper {
+
+    public static final String TAG = "Autocomplete";
+
+    public interface Listener {
+        void onAutocompletesAvailable(Cursor cursor);
+    }
+
+    private AutocompleteHelper() {
+    }
+
+    public void setListener(Listener listener) {
+    }
+
+    public void setProjection(String[] projection) {
+    }
+
+    public void setQuery(String query) {
+    }
+}
\ No newline at end of file
diff --git a/src/com/android/contacts/ContactSaveService.java b/src/com/android/contacts/ContactSaveService.java
index c514a45..b278144 100755
--- a/src/com/android/contacts/ContactSaveService.java
+++ b/src/com/android/contacts/ContactSaveService.java
@@ -51,7 +51,7 @@
 import android.util.Log;
 import android.widget.Toast;
 
-import com.android.contacts.activities.ContactEditorBaseActivity;
+import com.android.contacts.activities.CompactContactEditorActivity;
 import com.android.contacts.common.compat.CompatUtils;
 import com.android.contacts.common.database.ContactUpdateUtils;
 import com.android.contacts.common.model.AccountTypeManager;
@@ -215,13 +215,13 @@
         } catch (Exception exception) {
             final int resId;
             switch (saveMode) {
-                case ContactEditorBaseActivity.ContactEditor.SaveMode.SPLIT:
+                case CompactContactEditorActivity.ContactEditor.SaveMode.SPLIT:
                     resId = R.string.contactUnlinkErrorToast;
                     break;
-                case ContactEditorBaseActivity.ContactEditor.SaveMode.RELOAD:
+                case CompactContactEditorActivity.ContactEditor.SaveMode.RELOAD:
                     resId = R.string.contactJoinErrorToast;
                     break;
-                case ContactEditorBaseActivity.ContactEditor.SaveMode.CLOSE:
+                case CompactContactEditorActivity.ContactEditor.SaveMode.CLOSE:
                     resId = R.string.contactSavedErrorToast;
                     break;
                 default:
@@ -743,7 +743,8 @@
 
         ContentValues values = new ContentValues();
         // TODO: Move this into the contact editor where it belongs. This needs to be integrated
-        // with the way other intent extras that are passed to the {@link ContactEditorActivity}.
+        // with the way other intent extras that are passed to the
+        // {@link CompactContactEditorActivity}.
         values.clear();
         values.put(Data.MIMETYPE, GroupMembership.CONTENT_ITEM_TYPE);
         values.put(GroupMembership.GROUP_ROW_ID, ContentUris.parseId(groupUri));
diff --git a/src/com/android/contacts/ContactsDrawerActivity.java b/src/com/android/contacts/ContactsDrawerActivity.java
index 729d75f..9990e9f 100644
--- a/src/com/android/contacts/ContactsDrawerActivity.java
+++ b/src/com/android/contacts/ContactsDrawerActivity.java
@@ -22,7 +22,6 @@
 import android.content.Intent;
 import android.graphics.Color;
 import android.graphics.PorterDuff;
-import android.net.Uri;
 import android.os.Bundle;
 import android.provider.ContactsContract.Intents;
 import android.support.annotation.LayoutRes;
@@ -32,10 +31,7 @@
 import android.support.v4.widget.DrawerLayout;
 import android.support.v7.app.ActionBarDrawerToggle;
 import android.support.v7.app.AppCompatActivity;
-import android.support.v7.widget.LinearLayoutManager;
-import android.support.v7.widget.RecyclerView;
 import android.support.v7.widget.Toolbar;
-import android.util.DisplayMetrics;
 import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.Menu;
@@ -46,10 +42,9 @@
 import android.widget.LinearLayout;
 import android.widget.Toast;
 
-import com.android.contacts.activities.GroupMembersActivity;
+import com.android.contacts.activities.ActionBarAdapter;
 import com.android.contacts.common.ContactsUtils;
 import com.android.contacts.common.compat.CompatUtils;
-import com.android.contacts.common.editor.SelectAccountDialogFragment;
 import com.android.contacts.common.list.AccountFilterActivity;
 import com.android.contacts.common.list.ContactListFilter;
 import com.android.contacts.common.list.ContactListFilterController;
@@ -60,8 +55,10 @@
 import com.android.contacts.common.util.AccountsListAdapter.AccountListFilter;
 import com.android.contacts.common.util.ImplicitIntentsUtil;
 import com.android.contacts.common.util.ViewUtil;
-import com.android.contacts.editor.ContactEditorFragment;
+import com.android.contacts.editor.CompactContactEditorFragment;
+import com.android.contacts.editor.SelectAccountDialogFragment;
 import com.android.contacts.group.GroupListItem;
+import com.android.contacts.group.GroupMembersFragment;
 import com.android.contacts.group.GroupMetaData;
 import com.android.contacts.group.GroupNameEditDialogFragment;
 import com.android.contacts.group.GroupUtil;
@@ -69,12 +66,14 @@
 import com.android.contacts.group.GroupsFragment.GroupsListener;
 import com.android.contacts.interactions.AccountFiltersFragment;
 import com.android.contacts.interactions.AccountFiltersFragment.AccountFiltersListener;
+import com.android.contacts.list.DefaultContactBrowseListFragment;
+import com.android.contacts.list.MultiSelectContactsListFragment;
 import com.android.contacts.quickcontact.QuickContactActivity;
 import com.android.contacts.common.model.account.AccountDisplayInfo;
 import com.android.contacts.common.model.account.AccountDisplayInfoFactory;
 import com.android.contacts.util.SharedPreferenceUtil;
-import com.android.contactsbind.Assistants;
 import com.android.contactsbind.HelpUtils;
+import com.android.contactsbind.ObjectFactory;
 
 import java.util.HashMap;
 import java.util.Iterator;
@@ -91,6 +90,15 @@
         NavigationView.OnNavigationItemSelectedListener,
         SelectAccountDialogFragment.Listener {
 
+    /** Possible views of Contacts app. */
+    public enum ContactsView {
+        NONE,
+        ALL_CONTACTS,
+        DUPLICATES,
+        GROUP_VIEW,
+        ACCOUNT_VIEW,
+    }
+
     protected static String TAG = "ContactsDrawerActivity";
 
     private static final String TAG_GROUPS = "groups";
@@ -99,15 +107,9 @@
     private static final String TAG_GROUP_NAME_EDIT_DIALOG = "groupNameEditDialog";
 
     private static final String KEY_NEW_GROUP_ACCOUNT = "newGroupAccount";
+    private static final String KEY_CONTACTS_VIEW = "contactsView";
 
-    protected static final String ACTION_CREATE_GROUP = "createGroup";
-
-    // TODO(wenyiw): remove all the code related to these constants after switching to fragments.
-    // Positions of "all contacts" and "duplicates" in navigation drawer.
-    private static final int ALL_CONTACTS_POSITION = 1;
-    private static final int DUPLICATES_POSITION = 2;
-    // Gap between two menu groups, including a separator, a menu group header.
-    private static final int GAP_BETWEEN_TWO_MENU_GROUPS = 2;
+    protected ContactsView mCurrentView;
 
     private class ContactsActionBarDrawerToggle extends ActionBarDrawerToggle {
 
@@ -129,6 +131,33 @@
                 mMenuClickedBefore = true;
             }
             invalidateOptionsMenu();
+            // Stop search and selection mode like Gmail and Keep. Otherwise, if user switches to
+            // another fragment in navigation drawer, the current search/selection mode will be
+            // overlaid by the action bar of the newly-created fragment.
+            stopSearchAndSelection();
+        }
+
+        private void stopSearchAndSelection() {
+            final MultiSelectContactsListFragment listFragment;
+            if (isAllContactsView() || isAccountView()) {
+                listFragment = getAllFragment();
+            } else if (isGroupView()) {
+                listFragment = getGroupFragment();
+            } else {
+                listFragment = null;
+            }
+            if (listFragment == null) {
+                return;
+            }
+            final ActionBarAdapter actionBarAdapter = listFragment.getActionBarAdapter();
+            if (actionBarAdapter == null) {
+                return;
+            }
+            if (actionBarAdapter.isSearchMode()) {
+                actionBarAdapter.setSearchMode(false);
+            } else if (actionBarAdapter.isSelectionMode()) {
+                actionBarAdapter.setSelectionMode(false);
+            }
         }
 
         @Override
@@ -163,17 +192,15 @@
     protected GroupsFragment mGroupsFragment;
     protected AccountFiltersFragment mAccountFiltersFragment;
 
-    // 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 swicthing to fragments.
-    protected Map<Long, MenuItem> mGroupMenuMap = new HashMap<>();
-    protected Map<ContactListFilter, MenuItem> mFilterMenuMap = new HashMap<>();
-    protected Map<Integer, MenuItem> mIdMenuMap = new HashMap<>();
-
     // The account the new group will be created under.
     private AccountWithDataSet mNewGroupAccount;
 
-    private int mPositionOfLastGroup;
+    // 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.
+    protected Map<Long, MenuItem> mGroupMenuMap = new HashMap<>();
+    protected Map<ContactListFilter, MenuItem> mFilterMenuMap = new HashMap<>();
+    protected Map<Integer, MenuItem> mIdMenuMap = new HashMap<>();
 
     @Override
     protected void onCreate(Bundle savedState) {
@@ -198,57 +225,52 @@
         mDrawer.setDrawerListener(mToggle);
         mToggle.syncState();
 
+        // Set up navigation mode.
+        if (savedState != null) {
+            mCurrentView = ContactsView.values()[savedState.getInt(KEY_CONTACTS_VIEW)];
+        } else {
+            mCurrentView = ContactsView.ALL_CONTACTS;
+        }
+
         // Set up hamburger menu items.
         mNavigationView = (NavigationView) findViewById(R.id.nav_view);
         mNavigationView.setNavigationItemSelectedListener(this);
-
-        final Menu menu = mNavigationView.getMenu();
-
-        final MenuItem allContacts = menu.findItem(R.id.nav_all_contacts);
-        mIdMenuMap.put(R.id.nav_all_contacts, allContacts);
-
-        if (Assistants.getDuplicatesActivityIntent(this) == null) {
-            menu.removeItem(R.id.nav_find_duplicates);
-        } else {
-            final MenuItem findDup = menu.findItem(R.id.nav_find_duplicates);
-            mIdMenuMap.put(R.id.nav_find_duplicates, findDup);
-        }
-
-        if (!HelpUtils.isHelpAndFeedbackAvailable()) {
-            menu.removeItem(R.id.nav_help);
-        }
+        setUpMenu();
 
         loadGroupsAndFilters();
 
-        if (isDuplicatesActivity()) {
-            clearCheckedMenus();
-            mIdMenuMap.get(R.id.nav_find_duplicates).setCheckable(true);
-            mIdMenuMap.get(R.id.nav_find_duplicates).setChecked(true);
-            maybeUpdateScrollPosition(DUPLICATES_POSITION);
-        }
-
         if (savedState != null && savedState.containsKey(KEY_NEW_GROUP_ACCOUNT)) {
             mNewGroupAccount = AccountWithDataSet.unstringify(
                     savedState.getString(KEY_NEW_GROUP_ACCOUNT));
         }
     }
 
-    private void maybeUpdateScrollPosition(int position) {
-        if (mDrawer.isDrawerOpen(GravityCompat.START)) {
-            if (Log.isLoggable(TAG, Log.VERBOSE)) Log.v(TAG, "Don't scroll menu when drawer open");
-            return;
+    private void setUpMenu() {
+        final Menu menu = mNavigationView.getMenu();
+
+        if (ObjectFactory.getDuplicatesFragment() == null) {
+            menu.removeItem(R.id.nav_find_duplicates);
+        } else {
+            final MenuItem findDupMenu = menu.findItem(R.id.nav_find_duplicates);
+            mIdMenuMap.put(R.id.nav_find_duplicates, findDupMenu);
+            if (isDuplicatesView()) {
+                updateMenuSelection(findDupMenu);
+            }
         }
-        final RecyclerView recyclerView = (RecyclerView) mNavigationView.getChildAt(0);
-        final LinearLayoutManager layoutManager =
-                (LinearLayoutManager) recyclerView.getLayoutManager();
 
-        // Get screen height
-        final DisplayMetrics metrics = getResources().getDisplayMetrics();
-        final int height = metrics.heightPixels;
+        if (!HelpUtils.isHelpAndFeedbackAvailable()) {
+            menu.removeItem(R.id.nav_help);
+        }
 
-        // Set 1/3 screen height as offset if possible.
-        layoutManager.scrollToPositionWithOffset(position, height / 3);
-        recyclerView.requestLayout();
+        final MenuItem allContactsMenu = menu.findItem(R.id.nav_all_contacts);
+        mIdMenuMap.put(R.id.nav_all_contacts, allContactsMenu);
+        if (isAllContactsView()) {
+            updateMenuSelection(allContactsMenu);
+        }
+    }
+
+    public Toolbar getToolbar() {
+        return mToolbar;
     }
 
     @Override
@@ -257,6 +279,7 @@
         if (mNewGroupAccount != null) {
             outState.putString(KEY_NEW_GROUP_ACCOUNT, mNewGroupAccount.stringify());
         }
+        outState.putInt(KEY_CONTACTS_VIEW, mCurrentView.ordinal());
     }
 
     @Override
@@ -276,36 +299,6 @@
         }
     }
 
-    @Override
-    protected void onNewIntent(Intent newIntent) {
-        if (ACTION_CREATE_GROUP.equals(newIntent.getAction())) {
-            final Uri groupUri = newIntent.getData();
-            if (groupUri == null) {
-                Toast.makeText(this, R.string.groupSavedErrorToast, Toast.LENGTH_SHORT).show();
-                return;
-            }
-            if (Log.isLoggable(TAG, Log.VERBOSE)) Log.v(TAG, "Received group URI " + groupUri);
-            Toast.makeText(this, R.string.groupCreatedToast, Toast.LENGTH_SHORT).show();
-            startActivity(GroupUtil.createViewGroupIntent(this, groupUri, /* title */ null));
-            if (shouldFinish()) {
-                // If we created a group while viewing the members of an existing group (i.e.
-                // while on GroupMembersActivity), finish the current GroupMembersActivity so that
-                // hitting back from the new GroupMembersActivity that was just stared will open
-                // the all contacts list. See b/30047708.
-                finish();
-            }
-        } else {
-            super.onNewIntent(newIntent);
-        }
-    }
-
-    /**
-     * Returns true if child class is DuplicatesActivity
-     */
-    protected boolean isDuplicatesActivity() {
-        return false;
-    }
-
     // Set up fragment manager to load groups and filters.
     protected void loadGroupsAndFilters() {
         final FragmentManager fragmentManager = getFragmentManager();
@@ -350,7 +343,7 @@
         subMenu.removeGroup(R.id.nav_groups_items);
         mGroupMenuMap = new HashMap<>();
 
-        mPositionOfLastGroup = DUPLICATES_POSITION + GAP_BETWEEN_TWO_MENU_GROUPS;
+        final GroupMetaData groupMetaData = getGroupMetaData();
 
         if (groupListItems != null) {
             // Add each group
@@ -358,11 +351,14 @@
                 if (GroupUtil.isEmptyFFCGroup(groupListItem)) {
                     continue;
                 }
-                mPositionOfLastGroup++;
                 final String title = groupListItem.getTitle();
                 final MenuItem menuItem =
-                        subMenu.add(R.id.nav_groups_items, Menu.NONE, mPositionOfLastGroup, title);
+                        subMenu.add(R.id.nav_groups_items, Menu.NONE, Menu.NONE, title);
                 mGroupMenuMap.put(groupListItem.getGroupId(), menuItem);
+                if (isGroupView() && groupMetaData != null
+                        && groupMetaData.groupId == groupListItem.getGroupId()) {
+                    updateMenuSelection(menuItem);
+                }
                 menuItem.setIcon(R.drawable.ic_menu_label);
                 menuItem.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
                     @Override
@@ -372,6 +368,7 @@
                             public void run() {
                                 onGroupMenuItemClicked(groupListItem.getGroupId(),
                                         groupListItem.getTitle());
+                                updateMenuSelection(menuItem);
                             }
                         });
                         mDrawer.closeDrawer(GravityCompat.START);
@@ -386,10 +383,9 @@
             return;
         }
 
-        mPositionOfLastGroup++;
         // Create a menu item in the sub menu to add new groups
         final MenuItem menuItem = subMenu.add(R.id.nav_groups_items, Menu.NONE,
-                mPositionOfLastGroup, getString(R.string.menu_new_group_action_bar));
+                Menu.NONE, getString(R.string.menu_new_group_action_bar));
         menuItem.setIcon(R.drawable.ic_add);
         menuItem.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
             @Override
@@ -405,36 +401,45 @@
             }
         });
 
-        if (getGroupMetaData() != null) {
-            updateGroupMenu(getGroupMetaData());
+        if (isGroupView() && groupMetaData != null) {
+            updateGroupMenu(groupMetaData);
         }
     }
 
-    protected void updateGroupMenu(GroupMetaData groupMetaData) {
+    public void updateGroupMenu(GroupMetaData groupMetaData) {
         clearCheckedMenus();
         if (groupMetaData != null && mGroupMenuMap != null
                 && mGroupMenuMap.get(groupMetaData.groupId) != null) {
-            mGroupMenuMap.get(groupMetaData.groupId).setCheckable(true);
-            mGroupMenuMap.get(groupMetaData.groupId).setChecked(true);
-            maybeUpdateScrollPosition(mGroupMenuMap.get(groupMetaData.groupId).getOrder());
+            setMenuChecked(mGroupMenuMap.get(groupMetaData.groupId), true);
         }
     }
 
-    /**
-     * Returns group metadata if the child class is {@link GroupMembersActivity}, and null
-     * otherwise.
-     */
     protected GroupMetaData getGroupMetaData() {
         return null;
     }
 
-    protected void onGroupMenuItemClicked(long groupId, String title) {
-        startActivity(GroupUtil.createViewGroupIntent(this, groupId, title));
-        if (shouldFinish()) {
-            finish();
-        }
+    protected boolean isGroupView() {
+        return mCurrentView == ContactsView.GROUP_VIEW;
     }
 
+    protected boolean isDuplicatesView() {
+        return mCurrentView == ContactsView.DUPLICATES;
+    }
+
+    protected boolean isAllContactsView() {
+        return mCurrentView == ContactsView.ALL_CONTACTS;
+    }
+
+    protected boolean isAccountView() {
+        return mCurrentView == ContactsView.ACCOUNT_VIEW;
+    }
+
+    public boolean isInSecondLevel() {
+        return isGroupView() || isDuplicatesView();
+    }
+
+    protected abstract void onGroupMenuItemClicked(long groupId, String title);
+
     protected void onCreateGroupMenuItemClicked() {
         // Select the account to create the group
         final Bundle extras = getIntent().getExtras();
@@ -466,16 +471,17 @@
             return;
         }
 
-        int positionOfLastFilter = mPositionOfLastGroup + GAP_BETWEEN_TWO_MENU_GROUPS;
 
         for (int i = 0; i < accountFilterItems.size(); i++) {
-            positionOfLastFilter++;
             final ContactListFilter filter = accountFilterItems.get(i);
             final AccountDisplayInfo displayableAccount =
                     accountDisplayFactory.getAccountDisplayInfoFor(filter);
             final CharSequence menuName = displayableAccount.getNameLabel();
             final MenuItem menuItem = subMenu.add(R.id.nav_filters_items, Menu.NONE,
-                    positionOfLastFilter, menuName);
+                    Menu.NONE, menuName);
+            if (isAccountView() && filter == mContactListFilterController.getFilter()) {
+                updateMenuSelection(menuItem);
+            }
             mFilterMenuMap.put(filter, menuItem);
             final Intent intent = new Intent();
             intent.putExtra(AccountFilterActivity.EXTRA_CONTACT_LIST_FILTER, filter);
@@ -485,12 +491,8 @@
                     mToggle.runWhenIdle(new Runnable() {
                         @Override
                         public void run() {
-                            AccountFilterUtil.handleAccountFilterResult(
-                                    mContactListFilterController, AppCompatActivity.RESULT_OK,
-                                    intent);
-                            if (shouldFinish()) {
-                                finish();
-                            }
+                            onFilterMenuItemClicked(intent);
+                            updateMenuSelection(menuItem);
                         }
                     });
                     mDrawer.closeDrawer(GravityCompat.START);
@@ -512,40 +514,29 @@
             menuItem.setActionView(view);
         }
 
-        if (getContactListFilter() != null) {
-            updateFilterMenu(getContactListFilter());
+        if (isAccountView()) {
+            updateFilterMenu(mContactListFilterController.getFilter());
         }
     }
 
-    protected void updateFilterMenu(ContactListFilter filter) {
+    public void updateFilterMenu(ContactListFilter filter) {
         clearCheckedMenus();
         if (filter != null && filter.isContactsFilterType()) {
             if (mIdMenuMap != null && mIdMenuMap.get(R.id.nav_all_contacts) != null) {
-                mIdMenuMap.get(R.id.nav_all_contacts).setCheckable(true);
-                mIdMenuMap.get(R.id.nav_all_contacts).setChecked(true);
-                maybeUpdateScrollPosition(ALL_CONTACTS_POSITION);
+                setMenuChecked(mIdMenuMap.get(R.id.nav_all_contacts), true);
             }
         } else {
             if (mFilterMenuMap != null && mFilterMenuMap.get(filter) != null) {
-                mFilterMenuMap.get(filter).setCheckable(true);
-                mFilterMenuMap.get(filter).setChecked(true);
-                maybeUpdateScrollPosition(mFilterMenuMap.get(filter).getOrder());
+                setMenuChecked(mFilterMenuMap.get(filter), true);
             }
         }
     }
 
-    /**
-     * Returns the current filter if the child class is PeopleActivity, and null otherwise.
-     */
-    protected ContactListFilter getContactListFilter() {
-        return null;
+    protected void onFilterMenuItemClicked(Intent intent) {
+        AccountFilterUtil.handleAccountFilterResult(mContactListFilterController,
+                AppCompatActivity.RESULT_OK, intent);
     }
 
-    /**
-     * Returns true if the child activity should finish after launching another activity.
-     */
-    protected abstract boolean shouldFinish();
-
     @Override
     public boolean onNavigationItemSelected(final MenuItem item) {
         final int id = item.getItemId();
@@ -559,7 +550,10 @@
                 } else if (id == R.id.nav_all_contacts) {
                     switchToAllContacts();
                 } else if (id == R.id.nav_find_duplicates) {
-                    launchFindDuplicates();
+                    if (!isDuplicatesView()) {
+                        launchFindDuplicates();
+                        updateMenuSelection(item);
+                    }
                 } else if (item.getIntent() != null) {
                     ImplicitIntentsUtil.startActivityInApp(ContactsDrawerActivity.this,
                             item.getIntent());
@@ -576,57 +570,55 @@
     private Intent createPreferenceIntent() {
         final Intent intent = new Intent(this, ContactsPreferenceActivity.class);
         intent.putExtra(ContactsPreferenceActivity.EXTRA_NEW_LOCAL_PROFILE,
-                ContactEditorFragment.INTENT_EXTRA_NEW_LOCAL_PROFILE);
-        intent.putExtra(ContactsPreferenceActivity.EXTRA_MODE_FULLY_EXPANDED,
-                QuickContactActivity.MODE_FULLY_EXPANDED);
-        intent.putExtra(ContactsPreferenceActivity.EXTRA_PREVIOUS_SCREEN_TYPE,
-                QuickContactActivity.EXTRA_PREVIOUS_SCREEN_TYPE);
+                CompactContactEditorFragment.INTENT_EXTRA_NEW_LOCAL_PROFILE);
         return intent;
     }
 
-    protected void switchToAllContacts() {
+    public void switchToAllContacts() {
+        resetFilter();
+
+        final Menu menu = mNavigationView.getMenu();
+        final MenuItem allContacts = menu.findItem(R.id.nav_all_contacts);
+        updateMenuSelection(allContacts);
+
+        setTitle(getString(R.string.contactsList));
+    }
+
+    protected void resetFilter() {
         final Intent intent = new Intent();
-        final ContactListFilter filter = createContactsFilter();
+        final ContactListFilter filter = AccountFilterUtil.createContactsFilter(this);
         intent.putExtra(AccountFilterActivity.EXTRA_CONTACT_LIST_FILTER, filter);
         AccountFilterUtil.handleAccountFilterResult(
                 mContactListFilterController, AppCompatActivity.RESULT_OK, intent);
-        if (shouldFinish()) {
-            finish();
-        }
     }
 
-    protected void launchFindDuplicates() {
-        ImplicitIntentsUtil.startActivityInAppIfPossible(this,
-                Assistants.getDuplicatesActivityIntent(this));
-    }
+    protected abstract void launchFindDuplicates();
 
-    /**
-     * Returns a {@link ContactListFilter} of type
-     * {@link ContactListFilter#FILTER_TYPE_ALL_ACCOUNTS}, or if a custom "Contacts to display"
-     * filter has been set, then one of type {@link ContactListFilter#FILTER_TYPE_CUSTOM}.
-     */
-    protected ContactListFilter createContactsFilter() {
-        final int filterType =
-                ContactListFilterController.getInstance(this).isCustomFilterPersisted()
-                        ? ContactListFilter.FILTER_TYPE_CUSTOM
-                        : ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS;
-        return ContactListFilter.createFilterWithType(filterType);
-    }
+    protected abstract DefaultContactBrowseListFragment getAllFragment();
+
+    protected abstract GroupMembersFragment getGroupFragment();
+
+    public abstract void showFabWithAnimation(boolean showFab);
 
     private void clearCheckedMenus() {
         clearCheckedMenu(mFilterMenuMap);
         clearCheckedMenu(mGroupMenuMap);
         clearCheckedMenu(mIdMenuMap);
     }
+
     private void clearCheckedMenu(Map<?, MenuItem> map) {
         final Iterator it = map.entrySet().iterator();
         while (it.hasNext()) {
-            Entry pair = (Entry)it.next();
-            map.get(pair.getKey()).setCheckable(false);
-            map.get(pair.getKey()).setChecked(false);
+            Entry pair = (Entry) it.next();
+            setMenuChecked(map.get(pair.getKey()), false);
         }
     }
 
+    private void setMenuChecked(MenuItem menuItem, boolean checked) {
+        menuItem.setCheckable(checked);
+        menuItem.setChecked(checked);
+    }
+
     private void selectAccountForNewGroup() {
         final List<AccountWithDataSet> accounts = AccountTypeManager.getInstance(this)
                 .getGroupWritableAccounts();
@@ -649,11 +641,17 @@
     @Override
     public void onAccountChosen(AccountWithDataSet account, Bundle extraArgs) {
         mNewGroupAccount = account;
-        GroupNameEditDialogFragment.newInstanceForCreation(mNewGroupAccount, ACTION_CREATE_GROUP)
+        GroupNameEditDialogFragment.newInstanceForCreation(
+                mNewGroupAccount, GroupUtil.ACTION_CREATE_GROUP)
                 .show(getFragmentManager(), TAG_GROUP_NAME_EDIT_DIALOG);
     }
 
     @Override
     public void onAccountSelectorCancelled() {
     }
+
+    private void updateMenuSelection(MenuItem menuItem) {
+        clearCheckedMenus();
+        setMenuChecked(menuItem, true);
+    }
 }
diff --git a/src/com/android/contacts/DynamicShortcuts.java b/src/com/android/contacts/DynamicShortcuts.java
index 2e873d8..72e5fec 100644
--- a/src/com/android/contacts/DynamicShortcuts.java
+++ b/src/com/android/contacts/DynamicShortcuts.java
@@ -78,23 +78,6 @@
     private static final int LONG_LABEL_MAX_LENGTH = 30;
     private static final int MAX_SHORTCUTS = 3;
 
-    /**
-     * How long  to wait after a change to the contacts content uri before updating the shortcuts
-     * This increases the likelihood that multiple updates will be coalesced in the case that
-     * the updates are happening rapidly
-     *
-     * TODO: this should probably be externally configurable to make it easier to manually test the
-     * behavior
-     */
-    private static final int CONTENT_CHANGE_MIN_UPDATE_DELAY_MILLIS = 10000; // 10 seconds
-    /**
-     * The maximum time to wait before updating the shortcuts that may have changed.
-     *
-     * TODO: this should probably be externally configurable to make it easier to manually test the
-     * behavior
-     */
-    private static final int CONTENT_CHANGE_MAX_UPDATE_DELAY_MILLIS = 24*60*60*1000; // 1 day
-
     // The spec specifies that it should be 44dp @ xxxhdpi
     // Note that ShortcutManager.getIconMaxWidth and ShortcutManager.getMaxHeight return different
     // (larger) values.
@@ -110,6 +93,8 @@
     private final ShortcutManager mShortcutManager;
     private int mShortLabelMaxLength = SHORT_LABEL_MAX_LENGTH;
     private int mLongLabelMaxLength = LONG_LABEL_MAX_LENGTH;
+    private final int mContentChangeMinUpdateDelay;
+    private final int mContentChangeMaxUpdateDelay;
 
     public DynamicShortcuts(Context context) {
         this(context, context.getContentResolver(), (ShortcutManager)
@@ -121,6 +106,10 @@
         mContext = context;
         mContentResolver = contentResolver;
         mShortcutManager = shortcutManager;
+        mContentChangeMinUpdateDelay = Flags.getInstance(mContext)
+                .getInteger(Experiments.DYNAMIC_MIN_CONTENT_CHANGE_UPDATE_DELAY_MILLIS);
+        mContentChangeMaxUpdateDelay = Flags.getInstance(mContext)
+                .getInteger(Experiments.DYNAMIC_MAX_CONTENT_CHANGE_UPDATE_DELAY_MILLIS);
     }
 
     @VisibleForTesting
@@ -365,8 +354,8 @@
                 // that complexity.
                 .addTriggerContentUri(new JobInfo.TriggerContentUri(ContactsContract.AUTHORITY_URI,
                         JobInfo.TriggerContentUri.FLAG_NOTIFY_FOR_DESCENDANTS))
-                .setTriggerContentUpdateDelay(CONTENT_CHANGE_MIN_UPDATE_DELAY_MILLIS)
-                .setTriggerContentMaxDelay(CONTENT_CHANGE_MAX_UPDATE_DELAY_MILLIS).build();
+                .setTriggerContentUpdateDelay(mContentChangeMinUpdateDelay)
+                .setTriggerContentMaxDelay(mContentChangeMaxUpdateDelay).build();
         final JobScheduler scheduler = (JobScheduler)
                 mContext.getSystemService(Context.JOB_SCHEDULER_SERVICE);
         scheduler.schedule(job);
diff --git a/src/com/android/contacts/GroupMetaDataLoader.java b/src/com/android/contacts/GroupMetaDataLoader.java
index 18a975d..57aa67b 100644
--- a/src/com/android/contacts/GroupMetaDataLoader.java
+++ b/src/com/android/contacts/GroupMetaDataLoader.java
@@ -64,7 +64,7 @@
         if (groupUri == null) {
             throw new IllegalArgumentException("Uri must not be null");
         }
-        if (!groupUri.toString().startsWith(Groups.CONTENT_URI.toString())) {
+        if (!GroupUtil.isGroupUri(groupUri)) {
             throw new IllegalArgumentException("Invalid group Uri: " + groupUri);
         }
         return groupUri;
diff --git a/src/com/android/contacts/activities/ActionBarAdapter.java b/src/com/android/contacts/activities/ActionBarAdapter.java
index e046e71..824d4ea 100644
--- a/src/com/android/contacts/activities/ActionBarAdapter.java
+++ b/src/com/android/contacts/activities/ActionBarAdapter.java
@@ -20,11 +20,8 @@
 import android.animation.ValueAnimator;
 import android.app.Activity;
 import android.content.Context;
-import android.content.SharedPreferences;
 import android.content.res.ColorStateList;
-import android.content.res.TypedArray;
 import android.os.Bundle;
-import android.preference.PreferenceManager;
 import android.support.v4.content.ContextCompat;
 import android.support.v7.app.ActionBar;
 import android.support.v7.widget.Toolbar;
@@ -69,41 +66,26 @@
 
         void onAction(int action);
 
-        /**
-         * Called when the user selects a tab.  The new tab can be obtained using
-         * {@link #getCurrentTab}.
-         */
-        void onSelectedTabChanged();
-
         void onUpButtonPressed();
     }
 
     private static final String EXTRA_KEY_SEARCH_MODE = "navBar.searchMode";
     private static final String EXTRA_KEY_QUERY = "navBar.query";
-    private static final String EXTRA_KEY_SELECTED_TAB = "navBar.selectedTab";
     private static final String EXTRA_KEY_SELECTED_MODE = "navBar.selectionMode";
 
-    private static final String PERSISTENT_LAST_TAB = "actionBarAdapter.lastTab";
-
     private boolean mSelectionMode;
     private boolean mSearchMode;
     private String mQueryString;
 
     private EditText mSearchView;
     private View mClearSearchView;
-    /** The view that represents tabs when we are in portrait mode **/
-    private View mPortraitTabs;
-    /** The view that represents tabs when we are in landscape mode **/
-    private View mLandscapeTabs;
     private View mSearchContainer;
     private View mSelectionContainer;
 
-    private int mMaxPortraitTabHeight;
     private int mMaxToolbarContentInsetStart;
     private int mActionBarAnimationDuration;
 
     private final Activity mActivity;
-    private final SharedPreferences mPrefs;
 
     private Listener mListener;
 
@@ -122,29 +104,16 @@
 
     private ValueAnimator mStatusBarAnimator;
 
-    public interface TabState {
-        public static int ALL = 0;
-
-        public static int COUNT = 1;
-        public static int DEFAULT = ALL;
-    }
-
-    private int mCurrentTab = TabState.DEFAULT;
-
     public ActionBarAdapter(Activity activity, Listener listener, ActionBar actionBar,
-            View portraitTabs, View landscapeTabs, Toolbar toolbar) {
-        this(activity, listener, actionBar, portraitTabs, landscapeTabs, toolbar,
-                R.string.hint_findContacts);
+            Toolbar toolbar) {
+        this(activity, listener, actionBar, toolbar, R.string.hint_findContacts);
     }
 
     public ActionBarAdapter(Activity activity, Listener listener, ActionBar actionBar,
-            View portraitTabs, View landscapeTabs, Toolbar toolbar, int searchHintResId) {
+            Toolbar toolbar, int searchHintResId) {
         mActivity = activity;
         mListener = listener;
         mActionBar = actionBar;
-        mPrefs = PreferenceManager.getDefaultSharedPreferences(mActivity);
-        mPortraitTabs = portraitTabs;
-        mLandscapeTabs = landscapeTabs;
         mToolbar = toolbar;
         mToolBarFrame = (FrameLayout) mToolbar.getParent();
         mMaxToolbarContentInsetStart = mToolbar.getContentInsetStart();
@@ -153,7 +122,6 @@
                 mActivity.getResources().getInteger(R.integer.action_bar_animation_duration);
 
         setupSearchAndSelectionViews();
-        setupTabs(mActivity);
     }
 
     public void setShowHomeIcon(boolean showHomeIcon) {
@@ -164,22 +132,10 @@
         mShowHomeAsUp = showHomeAsUp;
     }
 
-    public EditText getSearchView() {
-        return mSearchView;
-    }
-
     public View getSelectionContainer() {
         return mSelectionContainer;
     }
 
-    private void setupTabs(Context context) {
-        final TypedArray attributeArray = context.obtainStyledAttributes(
-                new int[]{android.R.attr.actionBarSize});
-        mMaxPortraitTabHeight = attributeArray.getDimensionPixelSize(0, 0);
-        // Hide tabs initially
-        setPortraitTabHeight(0);
-    }
-
     private void setupSearchAndSelectionViews() {
         final LayoutInflater inflater = (LayoutInflater) mToolbar.getContext().getSystemService(
                 Context.LAYOUT_INFLATER_SERVICE);
@@ -234,19 +190,11 @@
         if (savedState == null) {
             mSearchMode = request.isSearchMode();
             mQueryString = request.getQueryString();
-            mCurrentTab = loadLastTabPreference();
             mSelectionMode = false;
         } else {
             mSearchMode = savedState.getBoolean(EXTRA_KEY_SEARCH_MODE);
             mSelectionMode = savedState.getBoolean(EXTRA_KEY_SELECTED_MODE);
             mQueryString = savedState.getString(EXTRA_KEY_QUERY);
-
-            // Just set to the field here.  The listener will be notified by update().
-            mCurrentTab = savedState.getInt(EXTRA_KEY_SELECTED_TAB);
-        }
-        if (mCurrentTab >= TabState.COUNT || mCurrentTab < 0) {
-            // Invalid tab index was saved (b/12938207). Restore the default.
-            mCurrentTab = TabState.DEFAULT;
         }
         // Show tabs or the expanded {@link SearchView}, depending on whether or not we are in
         // search mode.
@@ -289,30 +237,6 @@
     }
 
     /**
-     * Save the current tab selection, and notify the listener.
-     */
-    public void setCurrentTab(int tab) {
-        setCurrentTab(tab, true);
-    }
-
-    /**
-     * Save the current tab selection.
-     */
-    public void setCurrentTab(int tab, boolean notifyListener) {
-        if (tab == mCurrentTab) {
-            return;
-        }
-        mCurrentTab = tab;
-
-        if (notifyListener && mListener != null) mListener.onSelectedTabChanged();
-        saveLastTabPreference(mCurrentTab);
-    }
-
-    public int getCurrentTab() {
-        return mCurrentTab;
-    }
-
-    /**
      * @return Whether in search mode, i.e. if the search view is visible/expanded.
      *
      * Note even if the action bar is in search mode, if the query is empty, the search fragment
@@ -448,18 +372,12 @@
         // to adding the desired container.
         if (skipAnimation || isSwitchingFromSearchToSelection) {
             if (isTabHeightChanging || isSwitchingFromSearchToSelection) {
-                mToolbar.removeView(mLandscapeTabs);
                 mToolbar.removeView(mSearchContainer);
                 mToolBarFrame.removeView(mSelectionContainer);
                 if (mSelectionMode) {
-                    setPortraitTabHeight(0);
                     addSelectionContainer();
                 } else if (mSearchMode) {
-                    setPortraitTabHeight(0);
                     addSearchContainer();
-                } else {
-                    setPortraitTabHeight(mMaxPortraitTabHeight);
-                    addLandscapeViewPagerTabs();
                 }
                 updateDisplayOptions(isSearchModeChanging);
             }
@@ -468,25 +386,21 @@
 
         // Handle a switch to/from selection mode, due to UI interaction.
         if (isSelectionModeChanging) {
-            mToolbar.removeView(mLandscapeTabs);
             if (mSelectionMode) {
                 addSelectionContainer();
                 mSelectionContainer.setAlpha(0);
                 mSelectionContainer.animate().alpha(1).setDuration(mActionBarAnimationDuration);
-                animateTabHeightChange(mMaxPortraitTabHeight, 0);
                 updateDisplayOptions(isSearchModeChanging);
             } else {
                 if (mListener != null) {
                     mListener.onAction(Action.BEGIN_STOPPING_SEARCH_AND_SELECTION_MODE);
                 }
                 mSelectionContainer.setAlpha(1);
-                animateTabHeightChange(0, mMaxPortraitTabHeight);
                 mSelectionContainer.animate().alpha(0).setDuration(mActionBarAnimationDuration)
                         .withEndAction(new Runnable() {
                     @Override
                     public void run() {
                         updateDisplayOptions(isSearchModeChanging);
-                        addLandscapeViewPagerTabs();
                         mToolBarFrame.removeView(mSelectionContainer);
                     }
                 });
@@ -495,22 +409,18 @@
 
         // Handle a switch to/from search mode, due to UI interaction.
         if (isSearchModeChanging) {
-            mToolbar.removeView(mLandscapeTabs);
             if (mSearchMode) {
                 addSearchContainer();
                 mSearchContainer.setAlpha(0);
                 mSearchContainer.animate().alpha(1).setDuration(mActionBarAnimationDuration);
-                animateTabHeightChange(mMaxPortraitTabHeight, 0);
                 updateDisplayOptions(isSearchModeChanging);
             } else {
                 mSearchContainer.setAlpha(1);
-                animateTabHeightChange(0, mMaxPortraitTabHeight);
                 mSearchContainer.animate().alpha(0).setDuration(mActionBarAnimationDuration)
                         .withEndAction(new Runnable() {
                     @Override
                     public void run() {
                         updateDisplayOptions(isSearchModeChanging);
-                        addLandscapeViewPagerTabs();
                         mToolbar.removeView(mSearchContainer);
                     }
                 });
@@ -584,9 +494,8 @@
                     mActivity, R.color.contextual_selection_bar_status_bar_color);
             runStatusBarAnimation(/* colorTo */ cabStatusBarColor);
         } else {
-            final int normalStatusBarColor = mActivity instanceof GroupMembersActivity
-                    ? ContextCompat.getColor(mActivity, R.color.group_primary_color_dark)
-                    : ContextCompat.getColor(mActivity, R.color.primary_color_dark);
+            final int normalStatusBarColor = ContextCompat.getColor(
+                    mActivity, R.color.primary_color_dark);
             if (shouldAnimate) {
                 runStatusBarAnimation(/* colorTo */ normalStatusBarColor);
             } else {
@@ -618,13 +527,6 @@
         }
     }
 
-    private void addLandscapeViewPagerTabs() {
-        if (mLandscapeTabs != null) {
-            mToolbar.removeView(mLandscapeTabs);
-            mToolbar.addView(mLandscapeTabs);
-        }
-    }
-
     private void addSearchContainer() {
         mToolbar.removeView(mSearchContainer);
         mToolbar.addView(mSearchContainer);
@@ -659,7 +561,6 @@
             }
             if (!mSearchMode && !mSelectionMode) {
                 mListener.onAction(Action.STOP_SEARCH_AND_SELECTION_MODE);
-                mListener.onSelectedTabChanged();
             }
         }
         updateDisplayOptionsInner();
@@ -675,7 +576,6 @@
         outState.putBoolean(EXTRA_KEY_SEARCH_MODE, mSearchMode);
         outState.putBoolean(EXTRA_KEY_SELECTED_MODE, mSelectionMode);
         outState.putString(EXTRA_KEY_QUERY, mQueryString);
-        outState.putInt(EXTRA_KEY_SELECTED_TAB, mCurrentTab);
     }
 
     public void setFocusOnSearchView() {
@@ -690,41 +590,4 @@
             imm.showSoftInput(view, 0);
         }
     }
-
-    private void saveLastTabPreference(int tab) {
-        mPrefs.edit().putInt(PERSISTENT_LAST_TAB, tab).apply();
-    }
-
-    private int loadLastTabPreference() {
-        try {
-            return mPrefs.getInt(PERSISTENT_LAST_TAB, TabState.DEFAULT);
-        } catch (IllegalArgumentException e) {
-            // Preference is corrupt?
-            return TabState.DEFAULT;
-        }
-    }
-
-    private void animateTabHeightChange(int start, int end) {
-        if (mPortraitTabs == null) {
-            return;
-        }
-        final ValueAnimator animator = ValueAnimator.ofInt(start, end);
-        animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
-            @Override
-            public void onAnimationUpdate(ValueAnimator valueAnimator) {
-                int value = (Integer) valueAnimator.getAnimatedValue();
-                setPortraitTabHeight(value);
-            }
-        });
-        animator.setDuration(100).start();
-    }
-
-    private void setPortraitTabHeight(int height) {
-        if (mPortraitTabs == null) {
-            return;
-        }
-        ViewGroup.LayoutParams layoutParams = mPortraitTabs.getLayoutParams();
-        layoutParams.height = height;
-        mPortraitTabs.setLayoutParams(layoutParams);
-    }
 }
diff --git a/src/com/android/contacts/activities/CompactContactEditorActivity.java b/src/com/android/contacts/activities/CompactContactEditorActivity.java
index dc16049..7de2e27 100644
--- a/src/com/android/contacts/activities/CompactContactEditorActivity.java
+++ b/src/com/android/contacts/activities/CompactContactEditorActivity.java
@@ -16,18 +16,35 @@
 
 package com.android.contacts.activities;
 
-import com.android.contacts.R;
-import com.android.contacts.common.activity.RequestPermissionsActivity;
-import com.android.contacts.common.model.RawContactDeltaList;
-import com.android.contacts.detail.PhotoSelectionHandler;
-import com.android.contacts.editor.CompactContactEditorFragment;
-import com.android.contacts.editor.CompactPhotoSelectionFragment;
-import com.android.contacts.editor.PhotoSourceDialogFragment;
-
+import android.app.ActionBar;
+import android.app.Dialog;
 import android.app.FragmentTransaction;
+import android.content.ContentValues;
 import android.content.Intent;
 import android.net.Uri;
 import android.os.Bundle;
+import android.provider.ContactsContract.Contacts;
+import android.provider.ContactsContract.QuickContact;
+import android.provider.ContactsContract.RawContacts;
+import android.util.Log;
+import android.view.View;
+import android.view.inputmethod.InputMethodManager;
+
+import com.android.contacts.ContactSaveService;
+import com.android.contacts.ContactsActivity;
+import com.android.contacts.R;
+import com.android.contacts.common.activity.RequestPermissionsActivity;
+import com.android.contacts.common.model.AccountTypeManager;
+import com.android.contacts.common.model.RawContactDeltaList;
+import com.android.contacts.common.model.account.AccountType;
+import com.android.contacts.common.model.account.AccountWithDataSet;
+import com.android.contacts.common.util.ImplicitIntentsUtil;
+import com.android.contacts.detail.PhotoSelectionHandler;
+import com.android.contacts.editor.CompactContactEditorFragment;
+import com.android.contacts.editor.EditorIntents;
+import com.android.contacts.editor.PhotoSourceDialogFragment;
+import com.android.contacts.interactions.ContactDeletionInteraction;
+import com.android.contacts.util.DialogManager;
 
 import java.io.FileNotFoundException;
 import java.util.ArrayList;
@@ -35,18 +52,151 @@
 /**
  * Contact editor with only the most important fields displayed initially.
  */
-public class CompactContactEditorActivity extends ContactEditorBaseActivity implements
-        PhotoSourceDialogFragment.Listener, CompactPhotoSelectionFragment.Listener {
+public class CompactContactEditorActivity extends ContactsActivity implements
+        PhotoSourceDialogFragment.Listener,
+        DialogManager.DialogShowingViewActivity {
+    private static final String TAG = "ContactEditorActivity";
+
+    public static final String ACTION_JOIN_COMPLETED = "joinCompleted";
+    public static final String ACTION_SAVE_COMPLETED = "saveCompleted";
+
+    public static final int RESULT_CODE_SPLIT = 2;
+    // 3 used for ContactDeletionInteraction.RESULT_CODE_DELETED
+    public static final int RESULT_CODE_EDITED = 4;
+
+    /**
+     * The contact will be saved to the device local account when this is set for an insert. This
+     * is necessary because {@link android.accounts.Account} cannot be created with null values
+     * for the name and type and an Account is needed for
+     * {@link android.provider.ContactsContract.Intents.Insert#EXTRA_ACCOUNT}
+     */
+    public static final String EXTRA_SAVE_TO_DEVICE_FLAG =
+            "com.android.contacts.SAVE_TO_DEVICE_FLAG";
 
     private static final String TAG_COMPACT_EDITOR = "compact_editor";
-    private static final String TAG_PHOTO_SELECTION = "photo_selector";
 
     private static final String STATE_PHOTO_MODE = "photo_mode";
-    private static final String STATE_IS_PHOTO_SELECTION = "is_photo_selection";
     private static final String STATE_ACTION_BAR_TITLE = "action_bar_title";
     private static final String STATE_PHOTO_URI = "photo_uri";
 
     /**
+     * Boolean intent key that specifies that this activity should finish itself
+     * (instead of launching a new view intent) after the editor changes have been
+     * saved.
+     */
+    public static final String INTENT_KEY_FINISH_ACTIVITY_ON_SAVE_COMPLETED =
+            "finishActivityOnSaveCompleted";
+
+    /**
+     * Contract for contact editors Fragments that are managed by this Activity.
+     */
+    public interface ContactEditor {
+
+        /**
+         * Modes that specify what the AsyncTask has to perform after saving
+         */
+        interface SaveMode {
+            /**
+             * Close the editor after saving
+             */
+            int CLOSE = 0;
+
+            /**
+             * Reload the data so that the user can continue editing
+             */
+            int RELOAD = 1;
+
+            /**
+             * Split the contact after saving
+             */
+            int SPLIT = 2;
+
+            /**
+             * Join another contact after saving
+             */
+            int JOIN = 3;
+
+            /**
+             * Navigate to the compact editor view after saving.
+             */
+            int COMPACT = 4;
+        }
+
+        /**
+         * The status of the contact editor.
+         */
+        interface Status {
+            /**
+             * The loader is fetching data
+             */
+            int LOADING = 0;
+
+            /**
+             * Not currently busy. We are waiting for the user to enter data
+             */
+            int EDITING = 1;
+
+            /**
+             * The data is currently being saved. This is used to prevent more
+             * auto-saves (they shouldn't overlap)
+             */
+            int SAVING = 2;
+
+            /**
+             * Prevents any more saves. This is used if in the following cases:
+             * - After Save/Close
+             * - After Revert
+             * - After the user has accepted an edit suggestion
+             * - After the user chooses to expand the compact editor
+             */
+            int CLOSING = 3;
+
+            /**
+             * Prevents saving while running a child activity.
+             */
+            int SUB_ACTIVITY = 4;
+        }
+
+        /**
+         * Sets the hosting Activity that will receive callbacks from the contact editor.
+         */
+        void setListener(CompactContactEditorFragment.Listener listener);
+
+        /**
+         * Initialize the contact editor.
+         */
+        void load(String action, Uri lookupUri, Bundle intentExtras);
+
+        /**
+         * Applies extras from the hosting Activity to the first writable raw contact.
+         */
+        void setIntentExtras(Bundle extras);
+
+        /**
+         * Saves or creates the contact based on the mode, and if successful
+         * finishes the activity.
+         */
+        boolean save(int saveMode);
+
+        /**
+         * If there are no unsaved changes, just close the editor, otherwise the user is prompted
+         * before discarding unsaved changes.
+         */
+        boolean revert();
+
+        /**
+         * Invoked after the contact is saved.
+         */
+        void onSaveCompleted(boolean hadChanges, int saveMode, boolean saveSucceeded,
+                Uri contactLookupUri, Long joinContactId);
+
+        /**
+         * Invoked after the contact is joined.
+         */
+        void onJoinCompleted(Uri uri);
+    }
+
+    /**
      * Displays a PopupWindow with photo edit options.
      */
     private final class CompactPhotoSelectionHandler extends PhotoSelectionHandler {
@@ -59,18 +209,12 @@
             @Override
             public void onRemovePictureChosen() {
                 getEditorFragment().removePhoto();
-                if (mIsPhotoSelection) {
-                    showEditorFragment();
-                }
             }
 
             @Override
             public void onPhotoSelected(Uri uri) throws FileNotFoundException {
                 mPhotoUri = uri;
                 getEditorFragment().updatePhoto(uri);
-                if (mIsPhotoSelection) {
-                    showEditorFragment();
-                }
 
                 // Re-create the photo handler the next time we need it so that additional photo
                 // selections create a new temp file (and don't hit the one that was just added
@@ -85,16 +229,12 @@
 
             @Override
             public void onPhotoSelectionDismissed() {
-                if (mIsPhotoSelection) {
-                    showEditorFragment();
-                }
             }
         }
 
         private final CompactPhotoActionListener mPhotoActionListener;
-        private boolean mIsPhotoSelection;
 
-        public CompactPhotoSelectionHandler(int photoMode, boolean isPhotoSelection) {
+        public CompactPhotoSelectionHandler(int photoMode) {
             // We pass a null changeAnchorView since we are overriding onClick so that we
             // can show the photo options in a dialog instead of a ListPopupWindow (which would
             // be anchored at changeAnchorView).
@@ -103,7 +243,6 @@
             super(CompactContactEditorActivity.this, /* changeAnchorView =*/ null, photoMode,
                     /* isDirectoryContact =*/ false, new RawContactDeltaList());
             mPhotoActionListener = new CompactPhotoActionListener();
-            mIsPhotoSelection = isPhotoSelection;
         }
 
         @Override
@@ -118,11 +257,121 @@
         }
     }
 
-    private CompactPhotoSelectionFragment mPhotoSelectionFragment;
+    private int mActionBarTitleResId;
+    private ContactEditor mFragment;
+    private boolean mFinishActivityOnSaveCompleted;
+    private DialogManager mDialogManager = new DialogManager(this);
+
     private CompactPhotoSelectionHandler mPhotoSelectionHandler;
     private Uri mPhotoUri;
     private int mPhotoMode;
-    private boolean mIsPhotoSelection;
+
+    private final CompactContactEditorFragment.Listener  mFragmentListener =
+            new CompactContactEditorFragment.Listener() {
+
+                @Override
+                public void onDeleteRequested(Uri contactUri) {
+                    ContactDeletionInteraction.start(
+                            CompactContactEditorActivity.this, contactUri, true);
+                }
+
+                @Override
+                public void onReverted() {
+                    finish();
+                }
+
+                @Override
+                public void onSaveFinished(Intent resultIntent) {
+                    if (mFinishActivityOnSaveCompleted) {
+                        setResult(resultIntent == null ? RESULT_CANCELED : RESULT_OK, resultIntent);
+                    } else if (resultIntent != null) {
+                        // If it's a smart profile Intent it must be started "for result"
+                        if (QuickContact.ACTION_QUICK_CONTACT.equals(resultIntent.getAction())) {
+                            ImplicitIntentsUtil.startActivityInApp(
+                                    CompactContactEditorActivity.this, resultIntent);
+                        } else {
+                            startActivityForResult(resultIntent, /* requestCode */ 0);
+                        }
+
+                        ImplicitIntentsUtil.startActivityInApp(
+                                CompactContactEditorActivity.this, resultIntent);
+                    }
+                    finish();
+                }
+
+                @Override
+                public void onContactSplit(Uri newLookupUri) {
+                    setResult(RESULT_CODE_SPLIT, /* data */ null);
+                    finish();
+                }
+
+                @Override
+                public void onContactNotFound() {
+                    finish();
+                }
+
+                @Override
+                public void onEditOtherContactRequested(
+                        Uri contactLookupUri, ArrayList<ContentValues> values) {
+                    final Intent intent = EditorIntents.createEditOtherContactIntent(
+                            CompactContactEditorActivity.this, contactLookupUri, values);
+                    ImplicitIntentsUtil.startActivityInApp(
+                            CompactContactEditorActivity.this, intent);
+                    finish();
+                }
+
+                @Override
+                public void onCustomCreateContactActivityRequested(AccountWithDataSet account,
+                        Bundle intentExtras) {
+                    final AccountTypeManager accountTypes =
+                            AccountTypeManager.getInstance(CompactContactEditorActivity.this);
+                    final AccountType accountType = accountTypes.getAccountType(
+                            account.type, account.dataSet);
+
+                    Intent intent = new Intent();
+                    intent.setClassName(accountType.syncAdapterPackageName,
+                            accountType.getCreateContactActivityClassName());
+                    intent.setAction(Intent.ACTION_INSERT);
+                    intent.setType(Contacts.CONTENT_ITEM_TYPE);
+                    if (intentExtras != null) {
+                        intent.putExtras(intentExtras);
+                    }
+                    intent.putExtra(RawContacts.ACCOUNT_NAME, account.name);
+                    intent.putExtra(RawContacts.ACCOUNT_TYPE, account.type);
+                    intent.putExtra(RawContacts.DATA_SET, account.dataSet);
+                    intent.setFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
+                            | Intent.FLAG_ACTIVITY_FORWARD_RESULT);
+                    startActivity(intent);
+                    finish();
+                }
+
+                @Override
+                public void onCustomEditContactActivityRequested(AccountWithDataSet account,
+                        Uri rawContactUri, Bundle intentExtras, boolean redirect) {
+                    final AccountTypeManager accountTypes =
+                            AccountTypeManager.getInstance(CompactContactEditorActivity.this);
+                    final AccountType accountType = accountTypes.getAccountType(
+                            account.type, account.dataSet);
+
+                    Intent intent = new Intent();
+                    intent.setClassName(accountType.syncAdapterPackageName,
+                            accountType.getEditContactActivityClassName());
+                    intent.setAction(Intent.ACTION_EDIT);
+                    intent.setData(rawContactUri);
+                    if (intentExtras != null) {
+                        intent.putExtras(intentExtras);
+                    }
+
+                    if (redirect) {
+                        intent.setFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
+                                | Intent.FLAG_ACTIVITY_FORWARD_RESULT);
+                        startActivity(intent);
+                        finish();
+                    } else {
+                        startActivity(intent);
+                    }
+                }
+            };
 
     @Override
     public void onCreate(Bundle savedState) {
@@ -132,54 +381,122 @@
             return;
         }
 
+        final Intent intent = getIntent();
+        final String action = intent.getAction();
+
+        // Determine whether or not this activity should be finished after the user is done
+        // editing the contact or if this activity should launch another activity to view the
+        // contact's details.
+        mFinishActivityOnSaveCompleted = intent.getBooleanExtra(
+                INTENT_KEY_FINISH_ACTIVITY_ON_SAVE_COMPLETED, false);
+
+        // The only situation where action could be ACTION_JOIN_COMPLETED is if the
+        // user joined the contact with another and closed the activity before
+        // the save operation was completed.  The activity should remain closed then.
+        if (ACTION_JOIN_COMPLETED.equals(action)) {
+            finish();
+            return;
+        }
+
+        if (ACTION_SAVE_COMPLETED.equals(action)) {
+            finish();
+            return;
+        }
+
+        final ActionBar actionBar = getActionBar();
+        if (actionBar != null) {
+            if (Intent.ACTION_EDIT.equals(action)) {
+                mActionBarTitleResId = R.string.contact_editor_title_existing_contact;
+            } else {
+                mActionBarTitleResId = R.string.contact_editor_title_new_contact;
+            }
+            actionBar.setTitle(getResources().getString(mActionBarTitleResId));
+            actionBar.setDisplayShowHomeEnabled(true);
+            actionBar.setDisplayHomeAsUpEnabled(true);
+            actionBar.setHomeAsUpIndicator(R.drawable.ic_close_dk);
+        }
+
         setContentView(R.layout.compact_contact_editor_activity);
 
         if (savedState == null) {
             // Create the editor and photo selection fragments
             mFragment = new CompactContactEditorFragment();
-            mPhotoSelectionFragment = new CompactPhotoSelectionFragment();
             getFragmentManager().beginTransaction()
                     .add(R.id.fragment_container, getEditorFragment(), TAG_COMPACT_EDITOR)
-                    .add(R.id.fragment_container, mPhotoSelectionFragment, TAG_PHOTO_SELECTION)
-                    .hide(mPhotoSelectionFragment)
                     .commit();
         } else {
             // Restore state
             mPhotoMode = savedState.getInt(STATE_PHOTO_MODE);
-            mIsPhotoSelection = savedState.getBoolean(STATE_IS_PHOTO_SELECTION);
             mActionBarTitleResId = savedState.getInt(STATE_ACTION_BAR_TITLE);
             mPhotoUri = Uri.parse(savedState.getString(STATE_PHOTO_URI));
 
             // Show/hide the editor and photo selection fragments (w/o animations)
             mFragment = (CompactContactEditorFragment) getFragmentManager()
                     .findFragmentByTag(TAG_COMPACT_EDITOR);
-            mPhotoSelectionFragment = (CompactPhotoSelectionFragment) getFragmentManager()
-                    .findFragmentByTag(TAG_PHOTO_SELECTION);
             final FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
-            if (mIsPhotoSelection) {
-                fragmentTransaction.hide(getEditorFragment()).show(mPhotoSelectionFragment);
-                getActionBar().setTitle(getResources().getString(R.string.photo_picker_title));
-            } else {
-                fragmentTransaction.show(getEditorFragment()).hide(mPhotoSelectionFragment);
-                getActionBar().setTitle(getResources().getString(mActionBarTitleResId));
-            }
-            fragmentTransaction.commit();
+            fragmentTransaction.show(getEditorFragment()).commit();
+            getActionBar().setTitle(getResources().getString(mActionBarTitleResId));
         }
 
         // Set listeners
         mFragment.setListener(mFragmentListener);
-        mPhotoSelectionFragment.setListener(this);
 
         // Load editor data (even if it's hidden)
-        final String action = getIntent().getAction();
         final Uri uri = Intent.ACTION_EDIT.equals(action) ? getIntent().getData() : null;
         mFragment.load(action, uri, getIntent().getExtras());
     }
 
+    @Override
+    protected void onPause() {
+        super.onPause();
+        final InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
+        final View currentFocus = getCurrentFocus();
+        if (imm != null && currentFocus != null) {
+            imm.hideSoftInputFromWindow(currentFocus.getWindowToken(), 0);
+        }
+    }
+
+    @Override
+    protected void onNewIntent(Intent intent) {
+        super.onNewIntent(intent);
+
+        if (mFragment == null) {
+            return;
+        }
+
+        final String action = intent.getAction();
+        if (Intent.ACTION_EDIT.equals(action)) {
+            mFragment.setIntentExtras(intent.getExtras());
+        } else if (ACTION_SAVE_COMPLETED.equals(action)) {
+            mFragment.onSaveCompleted(true,
+                    intent.getIntExtra(CompactContactEditorFragment.SAVE_MODE_EXTRA_KEY,
+                            ContactEditor.SaveMode.CLOSE),
+                    intent.getBooleanExtra(ContactSaveService.EXTRA_SAVE_SUCCEEDED, false),
+                    intent.getData(),
+                    intent.getLongExtra(CompactContactEditorFragment.JOIN_CONTACT_ID_EXTRA_KEY, -1));
+        } else if (ACTION_JOIN_COMPLETED.equals(action)) {
+            mFragment.onJoinCompleted(intent.getData());
+        }
+    }
+
+    @Override
+    protected Dialog onCreateDialog(int id, Bundle args) {
+        if (DialogManager.isManagedId(id)) return mDialogManager.onCreateDialog(id, args);
+
+        // Nobody knows about the Dialog
+        Log.w(TAG, "Unknown dialog requested, id: " + id + ", args: " + args);
+        return null;
+    }
+
+    @Override
+    public DialogManager getDialogManager() {
+        return mDialogManager;
+    }
+
+    @Override
     protected void onSaveInstanceState(Bundle outState) {
         super.onSaveInstanceState(outState);
         outState.putInt(STATE_PHOTO_MODE, mPhotoMode);
-        outState.putBoolean(STATE_IS_PHOTO_SELECTION, mIsPhotoSelection);
         outState.putInt(STATE_ACTION_BAR_TITLE, mActionBarTitleResId);
         outState.putString(STATE_PHOTO_URI,
                 mPhotoUri != null ? mPhotoUri.toString() : Uri.EMPTY.toString());
@@ -198,53 +515,20 @@
 
     @Override
     public void onBackPressed() {
-        if (mIsPhotoSelection) {
-            mIsPhotoSelection = false;
-            showEditorFragment();
-        } else {
-            super.onBackPressed();
+        if (mFragment != null) {
+            mFragment.revert();
         }
     }
 
     /**
-     * Displays photos from all raw contacts, clicking one set it as the super primary photo.
-     */
-    public void selectPhoto(ArrayList<CompactPhotoSelectionFragment.Photo> photos, int photoMode) {
-        mPhotoMode = photoMode;
-        mIsPhotoSelection = true;
-        mPhotoSelectionFragment.setPhotos(photos, photoMode);
-        showPhotoSelectionFragment();
-    }
-
-    /**
      * Opens a dialog showing options for the user to change their photo (take, choose, or remove
      * photo).
      */
     public void changePhoto(int photoMode) {
         mPhotoMode = photoMode;
-        mIsPhotoSelection = false;
         PhotoSourceDialogFragment.show(this, mPhotoMode);
     }
 
-    private void showPhotoSelectionFragment() {
-        getFragmentManager().beginTransaction()
-                .setCustomAnimations(android.R.animator.fade_in, android.R.animator.fade_out)
-                .hide(getEditorFragment())
-                .show(mPhotoSelectionFragment)
-                .commit();
-        getActionBar().setTitle(getResources().getString(R.string.photo_picker_title));
-    }
-
-    private void showEditorFragment() {
-        getFragmentManager().beginTransaction()
-                .setCustomAnimations(android.R.animator.fade_in, android.R.animator.fade_out)
-                .hide(mPhotoSelectionFragment)
-                .show((CompactContactEditorFragment) mFragment)
-                .commit();
-        getActionBar().setTitle(getResources().getString(mActionBarTitleResId));
-        mIsPhotoSelection = false;
-    }
-
     @Override
     public void onRemovePictureChosen() {
         getPhotoSelectionHandler().getListener().onRemovePictureChosen();
@@ -260,16 +544,9 @@
         getPhotoSelectionHandler().getListener().onPickFromGalleryChosen();
     }
 
-    @Override
-    public void onPhotoSelected(CompactPhotoSelectionFragment.Photo photo) {
-        getEditorFragment().setPrimaryPhoto(photo);
-        showEditorFragment();
-    }
-
     private PhotoSelectionHandler getPhotoSelectionHandler() {
         if (mPhotoSelectionHandler == null) {
-            mPhotoSelectionHandler = new CompactPhotoSelectionHandler(
-                    mPhotoMode, mIsPhotoSelection);
+            mPhotoSelectionHandler = new CompactPhotoSelectionHandler(mPhotoMode);
         }
         return mPhotoSelectionHandler;
     }
diff --git a/src/com/android/contacts/activities/ContactEditorActivity.java b/src/com/android/contacts/activities/ContactEditorActivity.java
deleted file mode 100644
index 293e8c0..0000000
--- a/src/com/android/contacts/activities/ContactEditorActivity.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright (C) 2010 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.activities;
-
-import com.android.contacts.R;
-import com.android.contacts.common.activity.RequestPermissionsActivity;
-import com.android.contacts.editor.ContactEditorFragment;
-import com.android.contacts.util.DialogManager;
-
-import android.content.Intent;
-import android.net.Uri;
-import android.os.Bundle;
-
-/**
- * Contact editor with all fields displayed.
- */
-public class ContactEditorActivity extends ContactEditorBaseActivity
-        implements DialogManager.DialogShowingViewActivity {
-
-    @Override
-    public void onCreate(Bundle savedState) {
-        super.onCreate(savedState);
-
-        if (RequestPermissionsActivity.startPermissionActivity(this)) {
-            return;
-        }
-
-        setContentView(R.layout.contact_editor_activity);
-
-        mFragment = (ContactEditorFragment) getFragmentManager().findFragmentById(
-                R.id.contact_editor_fragment);
-        mFragment.setListener(mFragmentListener);
-
-        final String action = getIntent().getAction();
-        final Uri uri = ContactEditorBaseActivity.ACTION_EDIT.equals(action)
-                || Intent.ACTION_EDIT.equals(action) ? getIntent().getData() : null;
-        mFragment.load(action, uri, getIntent().getExtras());
-    }
-}
diff --git a/src/com/android/contacts/activities/ContactEditorBaseActivity.java b/src/com/android/contacts/activities/ContactEditorBaseActivity.java
deleted file mode 100644
index 55fcddb..0000000
--- a/src/com/android/contacts/activities/ContactEditorBaseActivity.java
+++ /dev/null
@@ -1,398 +0,0 @@
-/*
- * Copyright (C) 2015 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.activities;
-
-import android.app.ActionBar;
-import android.app.Dialog;
-import android.content.ContentValues;
-import android.content.Intent;
-import android.net.Uri;
-import android.os.Bundle;
-import android.provider.ContactsContract.Contacts;
-import android.provider.ContactsContract.RawContacts;
-import android.util.Log;
-import android.view.View;
-import android.view.inputmethod.InputMethodManager;
-
-import com.android.contacts.ContactSaveService;
-import com.android.contacts.ContactsActivity;
-import com.android.contacts.R;
-import com.android.contacts.common.model.AccountTypeManager;
-import com.android.contacts.common.model.account.AccountType;
-import com.android.contacts.common.model.account.AccountWithDataSet;
-import com.android.contacts.common.util.ImplicitIntentsUtil;
-import com.android.contacts.editor.ContactEditorBaseFragment;
-import com.android.contacts.editor.ContactEditorFragment;
-import com.android.contacts.editor.EditorIntents;
-import com.android.contacts.interactions.ContactDeletionInteraction;
-import com.android.contacts.util.DialogManager;
-
-import java.util.ArrayList;
-
-/**
- * Base Activity for contact editors.
- */
-abstract public class ContactEditorBaseActivity extends ContactsActivity
-        implements DialogManager.DialogShowingViewActivity {
-    protected static final String TAG = "ContactEditorActivity";
-
-    /**
-     * Intent action to edit a contact with all available field inputs displayed.
-     *
-     * Only used to open the "fully expanded" editor -- {@link ContactEditorActivity}.
-     */
-    public static final String ACTION_EDIT = "com.android.contacts.action.FULL_EDIT";
-
-    /**
-     * Intent action to insert a new contact with all available field inputs displayed.
-     *
-     * Only used to open the "fully expanded" editor -- {@link ContactEditorActivity}.
-     */
-    public static final String ACTION_INSERT = "com.android.contacts.action.FULL_INSERT";
-
-    public static final String ACTION_JOIN_COMPLETED = "joinCompleted";
-    public static final String ACTION_SAVE_COMPLETED = "saveCompleted";
-
-    public static final int RESULT_CODE_SPLIT = 2;
-    // 3 used for ContactDeletionInteraction.RESULT_CODE_DELETED
-    public static final int RESULT_CODE_EDITED = 4;
-
-    /**
-     * The contact will be saved to the device local account when this is set for an insert. This
-     * is necessary because {@link android.accounts.Account} cannot be created with null values
-     * for the name and type and an Account is needed for
-     * {@link android.provider.ContactsContract.Intents.Insert#EXTRA_ACCOUNT}
-     */
-    public static final String EXTRA_SAVE_TO_DEVICE_FLAG =
-            "com.android.contacts.SAVE_TO_DEVICE_FLAG";
-
-
-    protected int mActionBarTitleResId;
-
-    /**
-     * Contract for contact editors Fragments that are managed by this Activity.
-     */
-    public interface ContactEditor {
-
-        /**
-         * Modes that specify what the AsyncTask has to perform after saving
-         */
-        public interface SaveMode {
-            /**
-             * Close the editor after saving
-             */
-            public static final int CLOSE = 0;
-
-            /**
-             * Reload the data so that the user can continue editing
-             */
-            public static final int RELOAD = 1;
-
-            /**
-             * Split the contact after saving
-             */
-            public static final int SPLIT = 2;
-
-            /**
-             * Join another contact after saving
-             */
-            public static final int JOIN = 3;
-
-            /**
-             * Navigate to the compact editor view after saving.
-             */
-            public static final int COMPACT = 4;
-        }
-
-        /**
-         * The status of the contact editor.
-         */
-        public interface Status {
-            /**
-             * The loader is fetching data
-             */
-            public static final int LOADING = 0;
-
-            /**
-             * Not currently busy. We are waiting for the user to enter data
-             */
-            public static final int EDITING = 1;
-
-            /**
-             * The data is currently being saved. This is used to prevent more
-             * auto-saves (they shouldn't overlap)
-             */
-            public static final int SAVING = 2;
-
-            /**
-             * Prevents any more saves. This is used if in the following cases:
-             * - After Save/Close
-             * - After Revert
-             * - After the user has accepted an edit suggestion
-             * - After the user chooses to expand the compact editor
-             */
-            public static final int CLOSING = 3;
-
-            /**
-             * Prevents saving while running a child activity.
-             */
-            public static final int SUB_ACTIVITY = 4;
-        }
-
-        /**
-         * Sets the hosting Activity that will receive callbacks from the contact editor.
-         */
-        void setListener(ContactEditorBaseFragment.Listener listener);
-
-        /**
-         * Initialize the contact editor.
-         */
-        void load(String action, Uri lookupUri, Bundle intentExtras);
-
-        /**
-         * Applies extras from the hosting Activity to the first writable raw contact.
-         */
-        void setIntentExtras(Bundle extras);
-
-        /**
-         * Saves or creates the contact based on the mode, and if successful
-         * finishes the activity.
-         */
-        boolean save(int saveMode);
-
-        /**
-         * If there are no unsaved changes, just close the editor, otherwise the user is prompted
-         * before discarding unsaved changes.
-         */
-        boolean revert();
-
-        /**
-         * Invoked after the contact is saved.
-         */
-        void onSaveCompleted(boolean hadChanges, int saveMode, boolean saveSucceeded,
-                Uri contactLookupUri, Long joinContactId);
-
-        /**
-         * Invoked after the contact is joined.
-         */
-        void onJoinCompleted(Uri uri);
-    }
-
-    /**
-     * Boolean intent key that specifies that this activity should finish itself
-     * (instead of launching a new view intent) after the editor changes have been
-     * saved.
-     */
-    public static final String INTENT_KEY_FINISH_ACTIVITY_ON_SAVE_COMPLETED =
-            "finishActivityOnSaveCompleted";
-
-    protected ContactEditor mFragment;
-    private boolean mFinishActivityOnSaveCompleted;
-
-    private DialogManager mDialogManager = new DialogManager(this);
-
-    @Override
-    public void onCreate(Bundle savedState) {
-        super.onCreate(savedState);
-
-        final Intent intent = getIntent();
-        final String action = intent.getAction();
-
-        // Determine whether or not this activity should be finished after the user is done
-        // editing the contact or if this activity should launch another activity to view the
-        // contact's details.
-        mFinishActivityOnSaveCompleted = intent.getBooleanExtra(
-                INTENT_KEY_FINISH_ACTIVITY_ON_SAVE_COMPLETED, false);
-
-        // The only situation where action could be ACTION_JOIN_COMPLETED is if the
-        // user joined the contact with another and closed the activity before
-        // the save operation was completed.  The activity should remain closed then.
-        if (ACTION_JOIN_COMPLETED.equals(action)) {
-            finish();
-            return;
-        }
-
-        if (ACTION_SAVE_COMPLETED.equals(action)) {
-            finish();
-            return;
-        }
-
-        ActionBar actionBar = getActionBar();
-        if (actionBar != null) {
-            if (Intent.ACTION_EDIT.equals(action) || ACTION_EDIT.equals(action)) {
-                mActionBarTitleResId = R.string.contact_editor_title_existing_contact;
-            } else {
-                mActionBarTitleResId = R.string.contact_editor_title_new_contact;
-            }
-            actionBar.setTitle(getResources().getString(mActionBarTitleResId));
-            actionBar.setDisplayShowHomeEnabled(true);
-            actionBar.setDisplayHomeAsUpEnabled(true);
-            actionBar.setHomeAsUpIndicator(R.drawable.ic_close_dk);
-        }
-    }
-
-    @Override
-    protected void onPause() {
-        super.onPause();
-        final InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
-        final View currentFocus = getCurrentFocus();
-        if (imm != null && currentFocus != null) {
-            imm.hideSoftInputFromWindow(currentFocus.getWindowToken(), 0);
-        }
-    }
-
-    @Override
-    protected void onNewIntent(Intent intent) {
-        super.onNewIntent(intent);
-
-        if (mFragment == null) {
-            return;
-        }
-
-        String action = intent.getAction();
-        if (Intent.ACTION_EDIT.equals(action) || ACTION_EDIT.equals(action)) {
-            mFragment.setIntentExtras(intent.getExtras());
-        } else if (ACTION_SAVE_COMPLETED.equals(action)) {
-            mFragment.onSaveCompleted(true,
-                    intent.getIntExtra(ContactEditorFragment.SAVE_MODE_EXTRA_KEY,
-                            ContactEditor.SaveMode.CLOSE),
-                    intent.getBooleanExtra(ContactSaveService.EXTRA_SAVE_SUCCEEDED, false),
-                    intent.getData(),
-                    intent.getLongExtra(ContactEditorFragment.JOIN_CONTACT_ID_EXTRA_KEY, -1));
-        } else if (ACTION_JOIN_COMPLETED.equals(action)) {
-            mFragment.onJoinCompleted(intent.getData());
-        }
-    }
-
-    @Override
-    protected Dialog onCreateDialog(int id, Bundle args) {
-        if (DialogManager.isManagedId(id)) return mDialogManager.onCreateDialog(id, args);
-
-        // Nobody knows about the Dialog
-        Log.w(TAG, "Unknown dialog requested, id: " + id + ", args: " + args);
-        return null;
-    }
-
-    @Override
-    public void onBackPressed() {
-        if (mFragment != null) {
-            mFragment.revert();
-        }
-    }
-
-    protected final ContactEditorBaseFragment.Listener  mFragmentListener =
-            new ContactEditorBaseFragment.Listener() {
-
-        @Override
-        public void onDeleteRequested(Uri contactUri) {
-            ContactDeletionInteraction.start(ContactEditorBaseActivity.this, contactUri, true);
-        }
-
-        @Override
-        public void onReverted() {
-            finish();
-        }
-
-        @Override
-        public void onSaveFinished(Intent resultIntent) {
-            if (mFinishActivityOnSaveCompleted) {
-                setResult(resultIntent == null ? RESULT_CANCELED : RESULT_OK, resultIntent);
-            } else if (resultIntent != null) {
-                ImplicitIntentsUtil.startActivityInApp(ContactEditorBaseActivity.this,
-                        resultIntent);
-            }
-            finish();
-        }
-
-        @Override
-        public void onContactSplit(Uri newLookupUri) {
-            setResult(RESULT_CODE_SPLIT, /* data */ null);
-            finish();
-        }
-
-        @Override
-        public void onContactNotFound() {
-            finish();
-        }
-
-        @Override
-        public void onEditOtherContactRequested(
-                Uri contactLookupUri, ArrayList<ContentValues> values) {
-            final Intent intent = EditorIntents.createEditOtherContactIntent(
-                    ContactEditorBaseActivity.this, contactLookupUri, values);
-            ImplicitIntentsUtil.startActivityInApp(ContactEditorBaseActivity.this, intent);
-            finish();
-        }
-
-        @Override
-        public void onCustomCreateContactActivityRequested(AccountWithDataSet account,
-                Bundle intentExtras) {
-            final AccountTypeManager accountTypes =
-                    AccountTypeManager.getInstance(ContactEditorBaseActivity.this);
-            final AccountType accountType = accountTypes.getAccountType(
-                    account.type, account.dataSet);
-
-            Intent intent = new Intent();
-            intent.setClassName(accountType.syncAdapterPackageName,
-                    accountType.getCreateContactActivityClassName());
-            intent.setAction(Intent.ACTION_INSERT);
-            intent.setType(Contacts.CONTENT_ITEM_TYPE);
-            if (intentExtras != null) {
-                intent.putExtras(intentExtras);
-            }
-            intent.putExtra(RawContacts.ACCOUNT_NAME, account.name);
-            intent.putExtra(RawContacts.ACCOUNT_TYPE, account.type);
-            intent.putExtra(RawContacts.DATA_SET, account.dataSet);
-            intent.setFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
-                    | Intent.FLAG_ACTIVITY_FORWARD_RESULT);
-            startActivity(intent);
-            finish();
-        }
-
-        @Override
-        public void onCustomEditContactActivityRequested(AccountWithDataSet account,
-                Uri rawContactUri, Bundle intentExtras, boolean redirect) {
-            final AccountTypeManager accountTypes =
-                    AccountTypeManager.getInstance(ContactEditorBaseActivity.this);
-            final AccountType accountType = accountTypes.getAccountType(
-                    account.type, account.dataSet);
-
-            Intent intent = new Intent();
-            intent.setClassName(accountType.syncAdapterPackageName,
-                    accountType.getEditContactActivityClassName());
-            intent.setAction(Intent.ACTION_EDIT);
-            intent.setData(rawContactUri);
-            if (intentExtras != null) {
-                intent.putExtras(intentExtras);
-            }
-
-            if (redirect) {
-                intent.setFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
-                        | Intent.FLAG_ACTIVITY_FORWARD_RESULT);
-                startActivity(intent);
-                finish();
-            } else {
-                startActivity(intent);
-            }
-        }
-    };
-
-    @Override
-    public DialogManager getDialogManager() {
-        return mDialogManager;
-    }
-}
diff --git a/src/com/android/contacts/activities/ContactSelectionActivity.java b/src/com/android/contacts/activities/ContactSelectionActivity.java
index 46e5d9c..d34ebc6 100644
--- a/src/com/android/contacts/activities/ContactSelectionActivity.java
+++ b/src/com/android/contacts/activities/ContactSelectionActivity.java
@@ -146,8 +146,7 @@
         // Add a shadow under the toolbar.
         ViewUtil.addRectangularOutlineProvider(findViewById(R.id.toolbar_parent), getResources());
 
-        mActionBarAdapter = new ActionBarAdapter(this, this, getSupportActionBar(),
-                /* portraitTabs */ null, /* landscapeTabs */ null, mToolbar,
+        mActionBarAdapter = new ActionBarAdapter(this, this, getSupportActionBar(), mToolbar,
                 R.string.enter_contact_name);
         mActionBarAdapter.setShowHomeIcon(true);
         mActionBarAdapter.setShowHomeAsUp(true);
@@ -436,10 +435,6 @@
     }
 
     @Override
-    public void onSelectedTabChanged() {
-    }
-
-    @Override
     public void onUpButtonPressed() {
         onBackPressed();
     }
@@ -493,7 +488,7 @@
 
         @Override
         public void onEditContactAction(Uri contactLookupUri) {
-            startActivityAndForwardResult(EditorIntents.createEditContactIntent(
+            startActivityAndForwardResult(EditorIntents.createCompactEditContactIntent(
                     ContactSelectionActivity.this, contactLookupUri, /* materialPalette =*/ null,
                     /* photoId =*/ -1));
         }
@@ -658,7 +653,8 @@
 
     private void startCreateNewContactActivity() {
         Intent intent = new Intent(Intent.ACTION_INSERT, Contacts.CONTENT_URI);
-        intent.putExtra(ContactEditorActivity.INTENT_KEY_FINISH_ACTIVITY_ON_SAVE_COMPLETED, true);
+        intent.putExtra(CompactContactEditorActivity.
+                INTENT_KEY_FINISH_ACTIVITY_ON_SAVE_COMPLETED, true);
         startActivityAndForwardResult(intent);
     }
 
diff --git a/src/com/android/contacts/activities/GroupMembersActivity.java b/src/com/android/contacts/activities/GroupMembersActivity.java
deleted file mode 100644
index c32842a..0000000
--- a/src/com/android/contacts/activities/GroupMembersActivity.java
+++ /dev/null
@@ -1,623 +0,0 @@
-/*
- * 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.activities;
-
-import android.app.FragmentManager;
-import android.app.FragmentTransaction;
-import android.content.Context;
-import android.content.Intent;
-import android.database.Cursor;
-import android.net.Uri;
-import android.os.AsyncTask;
-import android.os.Bundle;
-import android.provider.ContactsContract.RawContacts;
-import android.support.v4.content.ContextCompat;
-import android.support.v4.view.GravityCompat;
-import android.util.Log;
-import android.view.Menu;
-import android.view.MenuItem;
-import android.widget.Toast;
-
-import com.android.contacts.ContactSaveService;
-import com.android.contacts.ContactsDrawerActivity;
-import com.android.contacts.R;
-import com.android.contacts.common.logging.ListEvent;
-import com.android.contacts.common.logging.Logger;
-import com.android.contacts.common.logging.ScreenEvent.ScreenType;
-import com.android.contacts.common.model.account.AccountWithDataSet;
-import com.android.contacts.common.util.ImplicitIntentsUtil;
-import com.android.contacts.group.GroupMembersFragment;
-import com.android.contacts.group.GroupMetaData;
-import com.android.contacts.group.GroupNameEditDialogFragment;
-import com.android.contacts.group.GroupUtil;
-import com.android.contacts.interactions.GroupDeletionDialogFragment;
-import com.android.contacts.list.ContactsRequest;
-import com.android.contacts.list.MultiSelectContactsListFragment;
-import com.android.contacts.list.UiIntentActions;
-import com.android.contacts.quickcontact.QuickContactActivity;
-
-/**
- * Displays the members of a group and allows the user to edit it.
- */
-public class GroupMembersActivity extends ContactsDrawerActivity implements
-        ActionBarAdapter.Listener,
-        MultiSelectContactsListFragment.OnCheckBoxListActionListener,
-        GroupMembersFragment.GroupMembersListener {
-
-    private static final String TAG = "GroupMembers";
-
-    private static final String KEY_GROUP_URI = "groupUri";
-    private static final String KEY_GROUP_METADATA = "groupMetadata";
-    private static final String KEY_IS_EDIT_MODE = "editMode";
-
-    private static final String TAG_GROUP_MEMBERS = "groupMembers";
-    private static final String TAG_GROUP_NAME_EDIT_DIALOG = "groupNameEditDialog";
-
-    private static final String ACTION_DELETE_GROUP = "deleteGroup";
-    private static final String ACTION_UPDATE_GROUP = "updateGroup";
-    private static final String ACTION_ADD_TO_GROUP = "addToGroup";
-    private static final String ACTION_REMOVE_FROM_GROUP = "removeFromGroup";
-
-    private static final int RESULT_GROUP_ADD_MEMBER = 100;
-
-    /**
-     * Starts an Intent to add/remove the raw contacts for the given contact IDs to/from a group.
-     * Only the raw contacts that belong to the specified account are added or removed.
-     */
-    private static class UpdateGroupMembersAsyncTask extends AsyncTask<Void, Void, Intent> {
-
-        static final int TYPE_ADD = 0;
-        static final int TYPE_REMOVE = 1;
-
-        private final Context mContext;
-        private final int mType;
-        private final long[] mContactIds;
-        private final long mGroupId;
-        private final String mAccountName;
-        private final String mAccountType;
-        private final String mDataSet;
-
-        private UpdateGroupMembersAsyncTask(int type, Context context, long[] contactIds,
-                long groupId, String accountName, String accountType, String dataSet) {
-            mContext = context;
-            mType = type;
-            mContactIds = contactIds;
-            mGroupId = groupId;
-            mAccountName = accountName;
-            mAccountType = accountType;
-            mDataSet = dataSet;
-        }
-
-        @Override
-        protected Intent doInBackground(Void... params) {
-            final long[] rawContactIds = getRawContactIds();
-            if (rawContactIds.length == 0) {
-                return null;
-            }
-            final long[] rawContactIdsToAdd;
-            final long[] rawContactIdsToRemove;
-            final String action;
-            if (mType == TYPE_ADD) {
-                rawContactIdsToAdd = rawContactIds;
-                rawContactIdsToRemove = null;
-                action = GroupMembersActivity.ACTION_ADD_TO_GROUP;
-            } else if (mType == TYPE_REMOVE) {
-                rawContactIdsToAdd = null;
-                rawContactIdsToRemove = rawContactIds;
-                action = GroupMembersActivity.ACTION_REMOVE_FROM_GROUP;
-            } else {
-                throw new IllegalStateException("Unrecognized type " + mType);
-            }
-            return ContactSaveService.createGroupUpdateIntent(
-                    mContext, mGroupId, /* newLabel */ null, rawContactIdsToAdd,
-                    rawContactIdsToRemove, GroupMembersActivity.class, action);
-        }
-
-        // ContactSaveService will log a warning if the raw contact is already a member and keep
-        // going but it is not ideal, we could also prune raw contacts that are already members.
-        private long[] getRawContactIds() {
-            final Uri.Builder builder = RawContacts.CONTENT_URI.buildUpon();
-            // null account names are not valid, see ContactsProvider2#appendAccountFromParameter
-            if (mAccountName != null) {
-                builder.appendQueryParameter(RawContacts.ACCOUNT_NAME, mAccountName);
-                builder.appendQueryParameter(RawContacts.ACCOUNT_TYPE, mAccountType);
-            }
-            if (mDataSet != null) {
-                builder.appendQueryParameter(RawContacts.DATA_SET, mDataSet);
-            }
-            final Uri rawContactUri = builder.build();
-            final String[] projection = new String[]{RawContacts._ID};
-            final StringBuilder selection = new StringBuilder();
-            final String[] selectionArgs = new String[mContactIds.length];
-            for (int i = 0; i < mContactIds.length; i++) {
-                if (i > 0) {
-                    selection.append(" OR ");
-                }
-                selection.append(RawContacts.CONTACT_ID).append("=?");
-                selectionArgs[i] = Long.toString(mContactIds[i]);
-            }
-            final Cursor cursor = mContext.getContentResolver().query(
-                    rawContactUri, projection, selection.toString(), selectionArgs, null, null);
-            final long[] rawContactIds = new long[cursor.getCount()];
-            try {
-                int i = 0;
-                while (cursor.moveToNext()) {
-                    rawContactIds[i] = cursor.getLong(0);
-                    i++;
-                }
-            } finally {
-                cursor.close();
-            }
-            return rawContactIds;
-        }
-
-        @Override
-        protected void onPostExecute(Intent intent) {
-            if (intent == null) {
-                Toast.makeText(mContext, R.string.groupSavedErrorToast, Toast.LENGTH_SHORT).show();
-            } else {
-                mContext.startService(intent);
-            }
-        }
-    }
-
-    private ActionBarAdapter mActionBarAdapter;
-
-    private GroupMembersFragment mMembersFragment;
-
-    private Uri mGroupUri;
-    private boolean mIsEditMode;
-
-    private GroupMetaData mGroupMetaData;
-
-    @Override
-    public void onCreate(Bundle savedState) {
-        super.onCreate(savedState);
-
-        // Parse the Intent
-        if (savedState != null) {
-            mGroupUri = savedState.getParcelable(KEY_GROUP_URI);
-            mIsEditMode = savedState.getBoolean(KEY_IS_EDIT_MODE);
-            mGroupMetaData = savedState.getParcelable(KEY_GROUP_METADATA);
-        } else {
-            mGroupUri = getIntent().getData();
-            setTitle(getIntent().getStringExtra(GroupUtil.EXTRA_GROUP_NAME));
-        }
-        if (mGroupUri == null) {
-            setResultCanceledAndFinish(R.string.groupLoadErrorToast);
-            return;
-        }
-
-        // Set up the view
-        setContentView(R.layout.group_members_activity);
-
-        findViewById(R.id.toolbar_frame).setBackgroundColor(
-                ContextCompat.getColor(this, R.color.group_primary_color));
-
-        // Set up the action bar
-        mActionBarAdapter = new ActionBarAdapter(this, this, getSupportActionBar(),
-                /* portraitTabs */ null, /* landscapeTabs */ null, mToolbar,
-                R.string.enter_contact_name);
-        mActionBarAdapter.setShowHomeIcon(true);
-
-        // Add the members list fragment
-        final FragmentManager fragmentManager = getFragmentManager();
-        mMembersFragment = (GroupMembersFragment)
-                fragmentManager.findFragmentByTag(TAG_GROUP_MEMBERS);
-        if (mMembersFragment == null) {
-            mMembersFragment = GroupMembersFragment.newInstance(getIntent().getData());
-            fragmentManager.beginTransaction().replace(R.id.fragment_container_inner,
-                    mMembersFragment, TAG_GROUP_MEMBERS).commitAllowingStateLoss();
-        }
-        mMembersFragment.setListener(this);
-        if (mGroupMetaData != null && mGroupMetaData.editable) {
-            mMembersFragment.setCheckBoxListListener(this);
-        }
-
-        // Delay action bar initialization until after the fragment is added
-        final ContactsRequest contactsRequest = new ContactsRequest();
-        contactsRequest.setActionCode(ContactsRequest.ACTION_GROUP);
-        mActionBarAdapter.initialize(savedState, contactsRequest);
-    }
-
-    @Override
-    public void onSaveInstanceState(Bundle outState) {
-        super.onSaveInstanceState(outState);
-        if (mActionBarAdapter != null) {
-            mActionBarAdapter.onSaveInstanceState(outState);
-        }
-        outState.putParcelable(KEY_GROUP_URI, mGroupUri);
-        outState.putBoolean(KEY_IS_EDIT_MODE, mIsEditMode);
-        outState.putParcelable(KEY_GROUP_METADATA, mGroupMetaData);
-    }
-
-    // Invoked with results from the ContactSaveService
-    @Override
-    protected void onNewIntent(Intent newIntent) {
-        if (ContactsDrawerActivity.ACTION_CREATE_GROUP.equals(newIntent.getAction())) {
-            super.onNewIntent(newIntent);
-            return;
-        }
-        if (isDeleteAction(newIntent.getAction())) {
-            toast(R.string.groupDeletedToast);
-            setResult(RESULT_OK);
-            finish();
-        } else if (isSaveAction(newIntent.getAction())) {
-            final Uri groupUri = newIntent.getData();
-            if (groupUri == null) {
-                setResultCanceledAndFinish(R.string.groupSavedErrorToast);
-                return;
-            }
-            if (Log.isLoggable(TAG, Log.VERBOSE)) Log.v(TAG, "Received group URI " + groupUri);
-
-            mGroupUri = groupUri;
-
-            toast(getToastMessageForSaveAction(newIntent.getAction()));
-
-            if (mIsEditMode) {
-                // If we're removing group members one at a time, don't reload the fragment so
-                // the user can continue to remove group members one by one
-                if (getGroupCount() == 1) {
-                    // If we're deleting the last group member, exit edit mode
-                    onBackPressed();
-                }
-            } else if (!ACTION_REMOVE_FROM_GROUP.equals(newIntent.getAction())) {
-                replaceGroupMembersFragment();
-                invalidateOptionsMenu();
-            }
-        }
-    }
-
-    private static boolean isDeleteAction(String action) {
-        return ACTION_DELETE_GROUP.equals(action);
-    }
-
-    private static boolean isSaveAction(String action) {
-        return ACTION_UPDATE_GROUP.equals(action)
-                || ACTION_ADD_TO_GROUP.equals(action)
-                || ACTION_REMOVE_FROM_GROUP.equals(action);
-    }
-
-    private static int getToastMessageForSaveAction(String action) {
-        if (ACTION_UPDATE_GROUP.equals(action)) return R.string.groupUpdatedToast;
-        if (ACTION_ADD_TO_GROUP.equals(action)) return R.string.groupMembersAddedToast;
-        if (ACTION_REMOVE_FROM_GROUP.equals(action)) return R.string.groupMembersRemovedToast;
-        throw new IllegalArgumentException("Unhanded contact save action " + action);
-    }
-
-    private int getGroupCount() {
-        return mMembersFragment != null && mMembersFragment.getAdapter() != null
-                ? mMembersFragment.getAdapter().getCount() : -1;
-    }
-
-    private void replaceGroupMembersFragment() {
-        mMembersFragment = GroupMembersFragment.newInstance(mGroupUri);
-        mMembersFragment.setListener(this);
-        final FragmentTransaction transaction = getFragmentManager().beginTransaction();
-        addGroupsAndFiltersFragments(transaction);
-        transaction.replace(R.id.fragment_container_inner, mMembersFragment, TAG_GROUP_MEMBERS)
-                .commitAllowingStateLoss();
-        if (mGroupMetaData != null && mGroupMetaData.editable) {
-            mMembersFragment.setCheckBoxListListener(this);
-        }
-    }
-
-    @Override
-    protected void onGroupMenuItemClicked(long groupId, String title) {
-        if (mGroupMetaData.groupId != groupId) {
-            super.onGroupMenuItemClicked(groupId, title);
-        }
-    }
-
-    @Override
-    protected boolean shouldFinish() {
-        return true;
-    }
-
-    @Override
-    protected void launchFindDuplicates() {
-        super.launchFindDuplicates();
-        finish();
-    }
-
-    public boolean isEditMode() {
-        return mIsEditMode;
-    }
-
-    @Override
-    public boolean onCreateOptionsMenu(Menu menu) {
-        if (mGroupMetaData == null) {
-            // Hide menu options until metadata is fully loaded
-            return false;
-        }
-        super.onCreateOptionsMenu(menu);
-        getMenuInflater().inflate(R.menu.view_group, menu);
-        return true;
-    }
-
-    @Override
-    public boolean onPrepareOptionsMenu(Menu menu) {
-        final boolean isSelectionMode = mActionBarAdapter.isSelectionMode();
-        final boolean isGroupEditable = mGroupMetaData != null && mGroupMetaData.editable;
-        final boolean isGroupReadOnly = mGroupMetaData != null && mGroupMetaData.readOnly;
-
-        setVisible(menu, R.id.menu_add, isGroupEditable && !isSelectionMode);
-        setVisible(menu, R.id.menu_rename_group, !isGroupReadOnly && !isSelectionMode);
-        setVisible(menu, R.id.menu_delete_group, !isGroupReadOnly && !isSelectionMode);
-        setVisible(menu, R.id.menu_edit_group, isGroupEditable && !mIsEditMode && !isSelectionMode
-                && !isGroupEmpty());
-        setVisible(menu, R.id.menu_remove_from_group, isGroupEditable && isSelectionMode &&
-                !mIsEditMode);
-
-        return true;
-    }
-
-    private boolean isGroupEmpty() {
-        return mMembersFragment != null && mMembersFragment.getAdapter() != null &&
-                mMembersFragment.getAdapter().isEmpty();
-    }
-
-    private static void setVisible(Menu menu, int id, boolean visible) {
-        final MenuItem menuItem = menu.findItem(id);
-        if (menuItem != null) {
-            menuItem.setVisible(visible);
-        }
-    }
-
-    public void startGroupAddMemberActivity() {
-        startActivityForResult(GroupUtil.createPickMemberIntent(this, mGroupMetaData,
-                mMembersFragment.getMemberContactIds()), RESULT_GROUP_ADD_MEMBER);
-    }
-
-    @Override
-    public boolean onOptionsItemSelected(MenuItem item) {
-        switch (item.getItemId()) {
-            case android.R.id.home: {
-                onBackPressed();
-                return true;
-            }
-            case R.id.menu_add: {
-                startGroupAddMemberActivity();
-                return true;
-            }
-            case R.id.menu_rename_group: {
-                GroupNameEditDialogFragment.newInstanceForUpdate(
-                        new AccountWithDataSet(mGroupMetaData.accountName,
-                                mGroupMetaData.accountType, mGroupMetaData.dataSet),
-                        ACTION_UPDATE_GROUP, mGroupMetaData.groupId, mGroupMetaData.groupName)
-                        .show(getFragmentManager(), TAG_GROUP_NAME_EDIT_DIALOG);
-                return true;
-            }
-            case R.id.menu_delete_group: {
-                deleteGroup();
-                return true;
-            }
-            case R.id.menu_edit_group: {
-                if (mMembersFragment == null) {
-                    return false;
-                }
-                mIsEditMode = true;
-                mActionBarAdapter.setSelectionMode(true);
-                mMembersFragment.displayDeleteButtons(true);
-                return true;
-            }
-            case R.id.menu_remove_from_group: {
-                if (mMembersFragment == null) {
-                    return false;
-                }
-                logListEvent();
-                removeSelectedContacts();
-                return true;
-            }
-        }
-        return super.onOptionsItemSelected(item);
-    }
-
-    private void deleteGroup() {
-        if (mMembersFragment.getMemberCount() == 0) {
-            final Intent intent = ContactSaveService.createGroupDeletionIntent(this,
-                    mGroupMetaData.groupId);
-            startService(intent);
-            finish();
-        } else {
-            GroupDeletionDialogFragment.show(getFragmentManager(), mGroupMetaData.groupId,
-                    mGroupMetaData.groupName);
-        }
-    }
-
-    private void logListEvent() {
-        Logger.logListEvent(
-                ListEvent.ActionType.REMOVE_LABEL,
-                mMembersFragment.getListType(),
-                mMembersFragment.getAdapter().getCount(),
-                /* clickedIndex */ -1,
-                mMembersFragment.getAdapter().getSelectedContactIdsArray().length);
-    }
-
-    private void removeSelectedContacts() {
-        final long[] contactIds = mMembersFragment.getAdapter().getSelectedContactIdsArray();
-        new UpdateGroupMembersAsyncTask(UpdateGroupMembersAsyncTask.TYPE_REMOVE,
-                this, contactIds, mGroupMetaData.groupId, mGroupMetaData.accountName,
-                mGroupMetaData.accountType, mGroupMetaData.dataSet).execute();
-
-        mActionBarAdapter.setSelectionMode(false);
-    }
-
-    @Override
-    public void onBackPressed() {
-        if (!isSafeToCommitTransactions()) {
-            return;
-        }
-        if (mDrawer.isDrawerOpen(GravityCompat.START)) {
-            mDrawer.closeDrawer(GravityCompat.START);
-        } else if (mIsEditMode) {
-            mIsEditMode = false;
-            mActionBarAdapter.setSelectionMode(false);
-            if (mMembersFragment != null) {
-                mMembersFragment.displayDeleteButtons(false);
-            }
-        } else if (mActionBarAdapter.isSelectionMode()) {
-            mActionBarAdapter.setSelectionMode(false);
-            if (mMembersFragment != null) {
-                mMembersFragment.displayCheckBoxes(false);
-            }
-        } else if (mActionBarAdapter.isSearchMode()) {
-            mActionBarAdapter.setSearchMode(false);
-        } else {
-            switchToAllContacts();
-            super.onBackPressed();
-        }
-    }
-
-    @Override
-    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
-        if (requestCode == RESULT_GROUP_ADD_MEMBER && resultCode == RESULT_OK && data != null) {
-            long[] contactIds = data.getLongArrayExtra(
-                    UiIntentActions.TARGET_CONTACT_IDS_EXTRA_KEY);
-            if (contactIds == null) {
-                final long contactId = data.getLongExtra(
-                        UiIntentActions.TARGET_CONTACT_ID_EXTRA_KEY, -1);
-                if (contactId > -1) {
-                    contactIds = new long[1];
-                    contactIds[0] = contactId;
-                }
-            }
-            new UpdateGroupMembersAsyncTask(UpdateGroupMembersAsyncTask.TYPE_ADD,
-                    this, contactIds, mGroupMetaData.groupId, mGroupMetaData.accountName,
-                    mGroupMetaData.accountType, mGroupMetaData.dataSet).execute();
-        }
-    }
-
-    private void setResultCanceledAndFinish(int resId) {
-        toast(resId);
-        setResult(RESULT_CANCELED);
-        finish();
-    }
-
-    private void toast(int resId) {
-        if (resId >= 0) {
-            Toast.makeText(this, resId, Toast.LENGTH_SHORT).show();
-        }
-    }
-
-    // ActionBarAdapter callbacks
-
-    @Override
-    public void onAction(int action) {
-        switch (action) {
-            case ActionBarAdapter.Listener.Action.START_SELECTION_MODE:
-                if (mMembersFragment != null) {
-                    if (mIsEditMode) {
-                        mMembersFragment.displayDeleteButtons(true);
-                        mActionBarAdapter.setActionBarTitle(getString(R.string.title_edit_group));
-                    } else {
-                        mMembersFragment.displayCheckBoxes(true);
-                    }
-                }
-                invalidateOptionsMenu();
-                showFabWithAnimation(/* showFabWithAnimation = */ false);
-                break;
-            case ActionBarAdapter.Listener.Action.STOP_SEARCH_AND_SELECTION_MODE:
-                mActionBarAdapter.setSearchMode(false);
-                if (mMembersFragment != null) {
-                    if (mIsEditMode) {
-                        mMembersFragment.displayDeleteButtons(false);
-                    } else {
-                        mMembersFragment.displayCheckBoxes(false);
-                    }
-                }
-                invalidateOptionsMenu();
-                showFabWithAnimation(/* showFabWithAnimation */ true);
-                break;
-            case ActionBarAdapter.Listener.Action.BEGIN_STOPPING_SEARCH_AND_SELECTION_MODE:
-                showFabWithAnimation(/* showFabWithAnimation */ true);
-                break;
-        }
-    }
-
-    private void showFabWithAnimation(boolean showFab) {
-        // TODO: b/28497108
-    }
-
-    @Override
-    public void onSelectedTabChanged() {
-    }
-
-    @Override
-    public void onUpButtonPressed() {
-        onBackPressed();
-    }
-
-    // MultiSelect checkbox callbacks
-
-    @Override
-    public void onStartDisplayingCheckBoxes() {
-        mActionBarAdapter.setSelectionMode(true);
-    }
-
-    @Override
-    public void onSelectedContactIdsChanged() {
-        if (mIsEditMode) {
-            mActionBarAdapter.setActionBarTitle(getString(R.string.title_edit_group));
-        } else {
-            mActionBarAdapter.setSelectionCount(mMembersFragment.getSelectedContactIds().size());
-        }
-    }
-
-    @Override
-    public void onStopDisplayingCheckBoxes() {
-        mActionBarAdapter.setSelectionMode(false);
-    }
-
-    // GroupMembersFragment callbacks
-
-    @Override
-    public void onGroupMetadataLoaded(GroupMetaData groupMetaData) {
-        mGroupMetaData = groupMetaData;
-        updateGroupMenu(mGroupMetaData);
-        setTitle(mGroupMetaData.groupName);
-        invalidateOptionsMenu();
-    }
-
-    @Override
-    public void onGroupMetadataLoadFailed() {
-        setResultCanceledAndFinish(R.string.groupLoadErrorToast);
-    }
-
-    protected GroupMetaData getGroupMetaData() {
-        return mGroupMetaData;
-    }
-
-    @Override
-    public void onGroupMemberListItemClicked(int position, Uri contactLookupUri) {
-        final int count = mMembersFragment.getAdapter().getCount();
-        Logger.logListEvent(ListEvent.ActionType.CLICK, ListEvent.ListType.GROUP, count,
-                /* clickedIndex */ position, /* numSelected */ 0);
-        final Intent intent = ImplicitIntentsUtil.composeQuickContactIntent(this,
-                contactLookupUri, QuickContactActivity.MODE_FULLY_EXPANDED);
-        intent.putExtra(QuickContactActivity.EXTRA_PREVIOUS_SCREEN_TYPE, ScreenType.LIST_GROUP);
-        startActivity(intent);
-    }
-
-    @Override
-    public void onGroupMemberListItemDeleted(int position, long contactId) {
-        final long[] contactIds = new long[1];
-        contactIds[0] = contactId;
-        new UpdateGroupMembersAsyncTask(UpdateGroupMembersAsyncTask.TYPE_REMOVE,
-                this, contactIds, mGroupMetaData.groupId, mGroupMetaData.accountName,
-                mGroupMetaData.accountType, mGroupMetaData.dataSet).execute();
-    }
-}
diff --git a/src/com/android/contacts/activities/PeopleActivity.java b/src/com/android/contacts/activities/PeopleActivity.java
index 5b14966..df3f65d 100644
--- a/src/com/android/contacts/activities/PeopleActivity.java
+++ b/src/com/android/contacts/activities/PeopleActivity.java
@@ -20,115 +20,86 @@
 import android.app.Fragment;
 import android.app.FragmentManager;
 import android.app.FragmentTransaction;
-import android.content.ActivityNotFoundException;
+import android.content.ContentResolver;
 import android.content.BroadcastReceiver;
 import android.content.ContentUris;
 import android.content.Context;
 import android.content.Intent;
+import android.content.SyncStatusObserver;
 import android.content.IntentFilter;
-import android.content.pm.PackageManager;
-import android.content.pm.ResolveInfo;
-import android.graphics.Rect;
 import android.net.Uri;
 import android.os.Bundle;
-import android.os.Parcelable;
-import android.provider.ContactsContract.Contacts;
-import android.provider.ContactsContract.Intents;
+import android.os.Handler;
+import android.provider.ContactsContract;
 import android.provider.ContactsContract.ProviderStatus;
-import android.provider.ContactsContract.QuickContact;
 import android.support.design.widget.CoordinatorLayout;
 import android.support.design.widget.Snackbar;
-import android.support.v13.app.FragmentPagerAdapter;
 import android.support.v4.content.LocalBroadcastManager;
 import android.support.v4.view.GravityCompat;
-import android.support.v4.view.PagerAdapter;
-import android.support.v4.view.ViewPager;
-import android.text.TextUtils;
+import android.support.v4.widget.SwipeRefreshLayout;
 import android.util.Log;
 import android.view.Gravity;
 import android.view.KeyCharacterMap;
 import android.view.KeyEvent;
 import android.view.Menu;
-import android.view.MenuInflater;
 import android.view.MenuItem;
 import android.view.SubMenu;
 import android.view.View;
 import android.view.ViewGroup;
-import android.view.accessibility.AccessibilityEvent;
 import android.widget.ImageButton;
 import android.widget.Toast;
 
-import com.android.contacts.common.model.account.AccountDisplayInfo;
-import com.android.contacts.common.model.account.AccountDisplayInfoFactory;
 import com.android.contacts.ContactSaveService;
 import com.android.contacts.ContactsDrawerActivity;
 import com.android.contacts.R;
-import com.android.contacts.activities.ActionBarAdapter.TabState;
+import com.android.contacts.common.Experiments;
 import com.android.contacts.common.activity.RequestPermissionsActivity;
-import com.android.contacts.common.compat.CompatUtils;
-import com.android.contacts.common.interactions.ImportExportDialogFragment;
-import com.android.contacts.common.list.ContactEntryListFragment;
 import com.android.contacts.common.list.ContactListFilter;
-import com.android.contacts.common.list.ContactListFilterController;
-import com.android.contacts.common.list.DirectoryListLoader;
 import com.android.contacts.common.list.ProviderStatusWatcher;
 import com.android.contacts.common.list.ProviderStatusWatcher.ProviderStatusListener;
-import com.android.contacts.common.list.ViewPagerTabs;
-import com.android.contacts.common.logging.ListEvent;
 import com.android.contacts.common.logging.Logger;
 import com.android.contacts.common.logging.ScreenEvent.ScreenType;
 import com.android.contacts.common.model.AccountTypeManager;
 import com.android.contacts.common.model.account.AccountWithDataSet;
+import com.android.contacts.common.util.AccountFilterUtil;
 import com.android.contacts.common.util.Constants;
 import com.android.contacts.common.util.ImplicitIntentsUtil;
 import com.android.contacts.common.widget.FloatingActionButtonController;
-import com.android.contacts.editor.EditorIntents;
-import com.android.contacts.interactions.ContactDeletionInteraction;
-import com.android.contacts.interactions.ContactMultiDeletionInteraction;
-import com.android.contacts.interactions.ContactMultiDeletionInteraction.MultiContactDeleteListener;
+import com.android.contacts.group.GroupMembersFragment;
+import com.android.contacts.group.GroupMetaData;
+import com.android.contacts.group.GroupUtil;
 import com.android.contacts.list.ContactsIntentResolver;
 import com.android.contacts.list.ContactsRequest;
 import com.android.contacts.list.ContactsUnavailableFragment;
 import com.android.contacts.list.DefaultContactBrowseListFragment;
-import com.android.contacts.list.MultiSelectContactsListFragment.OnCheckBoxListActionListener;
-import com.android.contacts.list.OnContactBrowserActionListener;
-import com.android.contacts.list.OnContactsUnavailableActionListener;
-import com.android.contacts.quickcontact.QuickContactActivity;
-import com.android.contacts.util.DialogManager;
-import com.android.contacts.util.SharedPreferenceUtil;
-import com.android.contacts.widget.FloatingActionButtonBehavior;
+import com.android.contacts.util.SyncUtil;
 import com.android.contactsbind.FeatureHighlightHelper;
+import com.android.contactsbind.ObjectFactory;
+import com.android.contactsbind.experiments.Flags;
+import com.android.contacts.widget.FloatingActionButtonBehavior;
 
 import java.util.List;
-import java.util.Locale;
 import java.util.concurrent.atomic.AtomicInteger;
 
 /**
  * Displays a list to browse contacts.
  */
-public class PeopleActivity extends ContactsDrawerActivity implements
-        View.OnCreateContextMenuListener,
-        View.OnClickListener,
-        ActionBarAdapter.Listener,
-        DialogManager.DialogShowingViewActivity,
-        ContactListFilterController.ContactListFilterListener,
-        ProviderStatusListener,
-        MultiContactDeleteListener,
-        DefaultContactBrowseListFragment.FeatureHighlightCallback {
+public class PeopleActivity extends ContactsDrawerActivity implements ProviderStatusListener {
 
     private static final String TAG = "PeopleActivity";
+    private static final String TAG_ALL = "contacts-all";
+    private static final String TAG_UNAVAILABLE = "contacts-unavailable";
+    private static final String TAG_GROUP_VIEW = "contacts-groups";
+    private static final String TAG_DUPLICATES = "contacts-duplicates";
+    private static final String TAG_SECOND_LEVEL = "second-level";
+    // Tag for DuplicatesUtilFragment.java
+    public static final String TAG_DUPLICATES_UTIL = "DuplicatesUtilFragment";
 
-    private static final String ENABLE_DEBUG_OPTIONS_HIDDEN_CODE = "debug debug!";
-
-    private static final int ACTIVITY_REQUEST_CODE_SHARE = 0;
-
-    private final DialogManager mDialogManager = new DialogManager(this);
+    private static final String KEY_GROUP_URI = "groupUri";
 
     private ContactsIntentResolver mIntentResolver;
     private ContactsRequest mRequest;
 
-    private ActionBarAdapter mActionBarAdapter;
-    private List<AccountWithDataSet> mWritableAccounts;
     private FloatingActionButtonController mFloatingActionButtonController;
     private View mFloatingActionButtonContainer;
     private boolean wasLastFabAnimationScaleIn = false;
@@ -139,7 +110,7 @@
 
     private BroadcastReceiver mSaveServiceListener;
 
-    private boolean mOptionsMenuContactsAvailable;
+    private boolean mShouldSwitchToGroupView;
 
     private CoordinatorLayout mLayoutRoot;
 
@@ -148,14 +119,8 @@
      */
     private DefaultContactBrowseListFragment mAllFragment;
 
-    /** ViewPager for swipe */
-    private ViewPager mTabPager;
-    private ViewPagerTabs mViewPagerTabs;
-    private TabPagerAdapter mTabPagerAdapter;
-    private String[] mTabTitles;
-    private final TabPagerListener mTabPagerListener = new TabPagerListener();
-
-    private boolean mEnableDebugMenuOptions;
+    private GroupMembersFragment mMembersFragment;
+    private Uri mGroupUri;
 
     /**
      * True if this activity instance is a re-created one.  i.e. set true after orientation change.
@@ -163,23 +128,58 @@
      */
     private boolean mIsRecreatedInstance;
 
-    /**
-     * If {@link #configureFragments(boolean)} is already called.  Used to avoid calling it twice
-     * in {@link #onStart}.
-     * (This initialization only needs to be done once in onStart() when the Activity was just
-     * created from scratch -- i.e. onCreate() was just called)
-     */
-    private boolean mFragmentInitialized;
-
-    /**
-     * This is to disable {@link #onOptionsItemSelected} when we trying to stop the activity.
-     */
-    private boolean mDisableOptionItemSelected;
-
     /** Sequential ID assigned to each instance; used for logging */
     private final int mInstanceId;
     private static final AtomicInteger sNextInstanceId = new AtomicInteger();
 
+    private Object mStatusChangeListenerHandle;
+
+    private final Handler mHandler = new Handler();
+
+    private SyncStatusObserver mSyncStatusObserver = new SyncStatusObserver() {
+        public void onStatusChanged(int which) {
+            mHandler.post(new Runnable() {
+                public void run() {
+                    onSyncStateUpdated();
+                }
+            });
+        }
+    };
+
+    // Update sync status for accounts in current ContactListFilter
+    private void onSyncStateUpdated() {
+        if (isAllFragmentInSearchMode() || isAllFragmentInSelectionMode()) {
+            return;
+        }
+
+        final ContactListFilter filter = mAllFragment.getFilter();
+        if (filter != null) {
+            final SwipeRefreshLayout swipeRefreshLayout = mAllFragment.getSwipeRefreshLayout();
+            if (swipeRefreshLayout == null) {
+                if (Log.isLoggable(TAG, Log.DEBUG)) {
+                    Log.d(TAG, "Can not load swipeRefreshLayout, swipeRefreshLayout is null");
+                }
+                return;
+            }
+
+            final List<AccountWithDataSet> accounts = AccountTypeManager.getInstance(this)
+                    .getAccounts(/* contactsWritableOnly */ true);
+            final List<Account> syncableAccounts = filter.getSyncableAccounts(accounts);
+            // If one of the accounts is active or pending, use spinning circle to indicate one of
+            // the syncs is in progress.
+            if (syncableAccounts != null && syncableAccounts.size() > 0) {
+                for (Account account: syncableAccounts) {
+                    if (SyncUtil.isSyncStatusPendingOrActive(account)
+                            || SyncUtil.isUnsyncableGoogleAccount(account)) {
+                        swipeRefreshLayout.setRefreshing(true);
+                        return;
+                    }
+                }
+            }
+            swipeRefreshLayout.setRefreshing(false);
+        }
+    }
+
     public PeopleActivity() {
         mInstanceId = sNextInstanceId.getAndIncrement();
         mIntentResolver = new ContactsIntentResolver(this);
@@ -192,7 +192,7 @@
         return String.format("%s@%d", getClass().getSimpleName(), mInstanceId);
     }
 
-    public boolean areContactsAvailable() {
+    private boolean areContactsAvailable() {
         return (mProviderStatus != null) && mProviderStatus.equals(ProviderStatus.STATUS_NORMAL);
     }
 
@@ -200,7 +200,7 @@
      * Initialize fragments that are (or may not be) in the layout.
      *
      * For the fragments that are in the layout, we initialize them in
-     * {@link #createViewsAndFragments(Bundle)} after inflating the layout.
+     * {@link #createViewsAndFragments()} after inflating the layout.
      *
      * However, the {@link ContactsUnavailableFragment} is a special fragment which may not
      * be in the layout, so we have to do the initialization here.
@@ -211,8 +211,6 @@
     public void onAttachFragment(Fragment fragment) {
         if (fragment instanceof ContactsUnavailableFragment) {
             mContactsUnavailableFragment = (ContactsUnavailableFragment)fragment;
-            mContactsUnavailableFragment.setOnContactsUnavailableActionListener(
-                    new ContactsUnavailableFragmentListener());
         }
     }
 
@@ -231,22 +229,16 @@
             finish();
             return;
         }
-        mContactListFilterController = ContactListFilterController.getInstance(this);
-        mContactListFilterController.checkFilterValidity(false);
-        mContactListFilterController.addListener(this);
 
         mProviderStatusWatcher.addListener(this);
 
         mIsRecreatedInstance = (savedState != null);
 
-        // Use FILTER_TYPE_ALL_ACCOUNTS filter if the activity is not a re-created one.
-        // This is useful when user upgrades app while an account filter or a custom filter was
-        // stored in sharedPreference in a previous version of Contacts app.
-        final ContactListFilter filter = mIsRecreatedInstance
-                ? mContactListFilterController.getFilter() : createContactsFilter();
-        persistFilterIfNeeded(filter);
+        if (mIsRecreatedInstance) {
+            mGroupUri = savedState.getParcelable(KEY_GROUP_URI);
+        }
 
-        createViewsAndFragments(savedState);
+        createViewsAndFragments();
 
         if (Log.isLoggable(Constants.PERFORMANCE_TAG, Log.DEBUG)) {
             Log.d(Constants.PERFORMANCE_TAG, "PeopleActivity.onCreate finish");
@@ -254,37 +246,75 @@
         getWindow().setBackgroundDrawable(null);
     }
 
-    private void maybeShowHamburgerFeatureHighlight() {
-        if (!mActionBarAdapter.isSearchMode() && !mActionBarAdapter.isSelectionMode()
-                && SharedPreferenceUtil.getShouldShowHamburgerPromo(this)) {
-            if (FeatureHighlightHelper.showHamburgerFeatureHighlight(this)) {
-                SharedPreferenceUtil.setHamburgerPromoDisplayedBefore(this);
-            }
-        }
-    }
-
     @Override
     protected void onNewIntent(Intent intent) {
-        if (ContactsDrawerActivity.ACTION_CREATE_GROUP.equals(intent.getAction())) {
-            super.onNewIntent(intent);
+        if (GroupUtil.ACTION_CREATE_GROUP.equals(intent.getAction())) {
+            mGroupUri = intent.getData();
+            if (mGroupUri == null) {
+                toast(R.string.groupSavedErrorToast);
+                return;
+            }
+            if (Log.isLoggable(TAG, Log.VERBOSE)) Log.v(TAG, "Received group URI " + mGroupUri);
+            switchToOrUpdateGroupView(intent.getAction());
             return;
         }
 
+        if (isGroupDeleteAction(intent.getAction())) {
+            toast(R.string.groupDeletedToast);
+            popSecondLevel();
+            mCurrentView = ContactsView.ALL_CONTACTS;
+            showFabWithAnimation(/* showFab */ true);
+            return;
+        }
+
+        if (isGroupSaveAction(intent.getAction())) {
+            mGroupUri = intent.getData();
+            if (mGroupUri == null) {
+                popSecondLevel();
+                toast(R.string.groupSavedErrorToast);
+                return;
+            }
+            if (Log.isLoggable(TAG, Log.VERBOSE)) Log.v(TAG, "Received group URI " + mGroupUri);
+            switchToOrUpdateGroupView(intent.getAction());
+        }
+
         setIntent(intent);
+
         if (!processIntent(true)) {
             finish();
             return;
         }
-        mActionBarAdapter.initialize(null, mRequest);
 
         mContactListFilterController.checkFilterValidity(false);
 
-        // Re-configure fragments.
-        configureFragments(true /* from request */);
+        if (!isInSecondLevel()) {
+            // Re-initialize ActionBarAdapter because {@link #onNewIntent(Intent)} doesn't invoke
+            // {@link Fragment#onActivityCreated(Bundle)} where we initialize ActionBarAdapter
+            // initially.
+            mAllFragment.setParameters(/* ContactsRequest */ mRequest, /* fromOnNewIntent */ true);
+            mAllFragment.initializeActionBarAdapter(null);
+        }
+
         initializeFabVisibility();
         invalidateOptionsMenuIfNeeded();
     }
 
+    private static boolean isGroupDeleteAction(String action) {
+        return GroupUtil.ACTION_DELETE_GROUP.equals(action);
+    }
+
+    private static boolean isGroupSaveAction(String action) {
+        return GroupUtil.ACTION_UPDATE_GROUP.equals(action)
+                || GroupUtil.ACTION_ADD_TO_GROUP.equals(action)
+                || GroupUtil.ACTION_REMOVE_FROM_GROUP.equals(action);
+    }
+
+    private void toast(int resId) {
+        if (resId >= 0) {
+            Toast.makeText(this, resId, Toast.LENGTH_SHORT).show();
+        }
+    }
+
     /**
      * Resolve the intent and initialize {@link #mRequest}, and launch another activity if redirect
      * is needed.
@@ -308,90 +338,48 @@
 
         switch (mRequest.getActionCode()) {
             case ContactsRequest.ACTION_VIEW_CONTACT: {
-                final Intent intent = ImplicitIntentsUtil.composeQuickContactIntent(
-                        PeopleActivity.this, mRequest.getContactUri(),
-                        QuickContactActivity.MODE_FULLY_EXPANDED);
-                intent.putExtra(QuickContactActivity.EXTRA_PREVIOUS_SCREEN_TYPE, ScreenType.UNKNOWN);
-                ImplicitIntentsUtil.startActivityInApp(this, intent);
+                ImplicitIntentsUtil.startQuickContact(
+                        this, mRequest.getContactUri(), ScreenType.UNKNOWN);
                 return false;
             }
             case ContactsRequest.ACTION_INSERT_GROUP: {
                 onCreateGroupMenuItemClicked();
                 return true;
             }
+            case ContactsRequest.ACTION_VIEW_GROUP:
+            case ContactsRequest.ACTION_EDIT_GROUP: {
+                mShouldSwitchToGroupView = true;
+                return true;
+            }
         }
         return true;
     }
 
-    private void createViewsAndFragments(Bundle savedState) {
+    private void createViewsAndFragments() {
         setContentView(R.layout.people_activity);
 
         final FragmentManager fragmentManager = getFragmentManager();
 
-        // Hide all tabs (the current tab will later be reshown once a tab is selected)
-        final FragmentTransaction transaction = fragmentManager.beginTransaction();
+        setUpAllFragment(fragmentManager);
 
-        mTabTitles = new String[TabState.COUNT];
-        mTabTitles[TabState.ALL] = getString(R.string.all_contacts_tab_label);
-        mTabPager = getView(R.id.tab_pager);
-        mTabPagerAdapter = new TabPagerAdapter();
-        mTabPager.setAdapter(mTabPagerAdapter);
-        mTabPager.setOnPageChangeListener(mTabPagerListener);
-
-        // Configure toolbar and toolbar tabs. If in landscape mode, we configure tabs differently.
-        final ViewPagerTabs portraitViewPagerTabs
-                = (ViewPagerTabs) findViewById(R.id.lists_pager_header);
-        ViewPagerTabs landscapeViewPagerTabs = null;
-        if (portraitViewPagerTabs ==  null) {
-            landscapeViewPagerTabs = (ViewPagerTabs) getLayoutInflater().inflate(
-                    R.layout.people_activity_tabs_lands, mToolbar, /* attachToRoot = */ false);
-            mViewPagerTabs = landscapeViewPagerTabs;
-        } else {
-            mViewPagerTabs = portraitViewPagerTabs;
+        if (isGroupView()) {
+            mMembersFragment = (GroupMembersFragment)
+                    fragmentManager.findFragmentByTag(TAG_GROUP_VIEW);
         }
-        mViewPagerTabs.setViewPager(mTabPager);
-
-        final String ALL_TAG = "tab-pager-all";
-
-        // Create the fragments and add as children of the view pager.
-        // The pager adapter will only change the visibility; it'll never create/destroy
-        // fragments.
-        // However, if it's after screen rotation, the fragments have been re-created by
-        // the fragment manager, so first see if there're already the target fragments
-        // existing.
-        mAllFragment = (DefaultContactBrowseListFragment)
-                fragmentManager.findFragmentByTag(ALL_TAG);
-
-        if (mAllFragment == null) {
-            mAllFragment = new DefaultContactBrowseListFragment();
-            mAllFragment.setAnimateOnLoad(true);
-            transaction.add(R.id.tab_pager, mAllFragment, ALL_TAG);
-        }
-
-        mAllFragment.setFeatureHighlightCallback(this);
-        mAllFragment.setOnContactListActionListener(new ContactBrowserActionListener());
-        mAllFragment.setCheckBoxListListener(new CheckBoxListListener());
-        mAllFragment.setListType(mContactListFilterController.getFilterListType());
-
-        // Hide all fragments for now.  We adjust visibility when we get onSelectedTabChanged()
-        // from ActionBarAdapter.
-        transaction.hide(mAllFragment);
-
-        transaction.commitAllowingStateLoss();
-        fragmentManager.executePendingTransactions();
-
-        mActionBarAdapter = new ActionBarAdapter(this, this, getSupportActionBar(),
-                portraitViewPagerTabs, landscapeViewPagerTabs, mToolbar);
-        mActionBarAdapter.initialize(savedState, mRequest);
 
         // Configure floating action button
         mFloatingActionButtonContainer = findViewById(R.id.floating_action_button_container);
         final ImageButton floatingActionButton
                 = (ImageButton) findViewById(R.id.floating_action_button);
-        floatingActionButton.setOnClickListener(this);
+        floatingActionButton.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                AccountFilterUtil.startEditorIntent(PeopleActivity.this, getIntent(),
+                        mContactListFilterController.getFilter());
+            }
+        });
         mFloatingActionButtonController = new FloatingActionButtonController(this,
                 mFloatingActionButtonContainer, floatingActionButton);
-        initializeFabVisibility();
 
         invalidateOptionsMenuIfNeeded();
 
@@ -405,41 +393,44 @@
         fabParams.setBehavior(new FloatingActionButtonBehavior());
         fabParams.gravity = Gravity.BOTTOM | Gravity.END;
         mFloatingActionButtonContainer.setLayoutParams(fabParams);
+
+        if (mShouldSwitchToGroupView && !mIsRecreatedInstance) {
+            mGroupUri = mRequest.getContactUri();
+            switchToOrUpdateGroupView(GroupUtil.ACTION_SWITCH_GROUP);
+            mShouldSwitchToGroupView = false;
+        }
     }
 
-    @Override
-    protected void onStart() {
-        if (!mFragmentInitialized) {
-            mFragmentInitialized = true;
-            /* Configure fragments if we haven't.
-             *
-             * Note it's a one-shot initialization, so we want to do this in {@link #onCreate}.
-             *
-             * However, because this method may indirectly touch views in fragments but fragments
-             * created in {@link #configureContentView} using a {@link FragmentTransaction} will NOT
-             * have views until {@link Activity#onCreate} finishes (they would if they were inflated
-             * from a layout), we need to do it here in {@link #onStart()}.
-             *
-             * (When {@link Fragment#onCreateView} is called is different in the former case and
-             * in the latter case, unfortunately.)
-             *
-             * Also, we skip most of the work in it if the activity is a re-created one.
-             * (so the argument.)
-             */
-            configureFragments(!mIsRecreatedInstance);
+    private void setUpAllFragment(FragmentManager fragmentManager) {
+        mAllFragment = (DefaultContactBrowseListFragment)
+                fragmentManager.findFragmentByTag(TAG_ALL);
+
+        if (mAllFragment == null) {
+            mAllFragment = new DefaultContactBrowseListFragment();
+            mAllFragment.setAnimateOnLoad(true);
+            fragmentManager.beginTransaction()
+                    .add(R.id.contacts_list_container, mAllFragment, TAG_ALL)
+                    .commit();
+            fragmentManager.executePendingTransactions();
         }
-        super.onStart();
+
+        mAllFragment.setContactsAvailable(areContactsAvailable());
+        mAllFragment.setListType(mContactListFilterController.getFilterListType());
+        mAllFragment.setParameters(/* ContactsRequest */ mRequest, /* fromOnNewIntent */ false);
     }
 
     @Override
     protected void onPause() {
-        mOptionsMenuContactsAvailable = false;
         mProviderStatusWatcher.stop();
 
         LocalBroadcastManager.getInstance(this).unregisterReceiver(mSaveServiceListener);
 
         super.onPause();
 
+        if (Flags.getInstance(this).getBoolean(Experiments.PULL_TO_REFRESH)) {
+            ContentResolver.removeStatusChangeListener(mStatusChangeListenerHandle);
+            onSyncStateUpdated();
+        }
     }
 
     @Override
@@ -449,17 +440,15 @@
         mProviderStatusWatcher.start();
         updateViewConfiguration(true);
 
-        // Re-register the listener, which may have been cleared when onSaveInstanceState was
-        // called.  See also: onSaveInstanceState
-        mActionBarAdapter.setListener(this);
-        mDisableOptionItemSelected = false;
-        if (mTabPager != null) {
-            mTabPager.setOnPageChangeListener(mTabPagerListener);
+        if (Flags.getInstance(this).getBoolean(Experiments.PULL_TO_REFRESH)) {
+            mStatusChangeListenerHandle = ContentResolver.addStatusChangeListener(
+                    ContentResolver.SYNC_OBSERVER_TYPE_ACTIVE
+                            | ContentResolver.SYNC_OBSERVER_TYPE_PENDING
+                            | ContentResolver.SYNC_OBSERVER_TYPE_SETTINGS,
+                    mSyncStatusObserver);
+            onSyncStateUpdated();
         }
-        // Current tab may have changed since the last onSaveInstanceState().  Make sure
-        // the actual contents match the tab.
-        updateFragmentsVisibility();
-        maybeShowHamburgerFeatureHighlight();
+        initializeFabVisibility();
 
         mSaveServiceListener = new SaveServiceListener();
         LocalBroadcastManager.getInstance(this).registerReceiver(mSaveServiceListener,
@@ -469,94 +458,24 @@
     @Override
     protected void onDestroy() {
         mProviderStatusWatcher.removeListener(this);
-
-        // Some of variables will be null if this Activity redirects Intent.
-        // See also onCreate() or other methods called during the Activity's initialization.
-        if (mActionBarAdapter != null) {
-            mActionBarAdapter.setListener(null);
-        }
-        if (mContactListFilterController != null) {
-            mContactListFilterController.removeListener(this);
-        }
-
         super.onDestroy();
     }
 
-    private void configureFragments(boolean fromRequest) {
-        if (fromRequest) {
-            ContactListFilter filter = null;
-            int actionCode = mRequest.getActionCode();
-            boolean searchMode = mRequest.isSearchMode();
-            final int tabToOpen;
-            switch (actionCode) {
-                case ContactsRequest.ACTION_ALL_CONTACTS:
-                    filter = createContactsFilter();
-                    tabToOpen = TabState.ALL;
-                    break;
-                case ContactsRequest.ACTION_CONTACTS_WITH_PHONES:
-                    filter = ContactListFilter.createFilterWithType(
-                            ContactListFilter.FILTER_TYPE_WITH_PHONE_NUMBERS_ONLY);
-                    tabToOpen = TabState.ALL;
-                    break;
-
-                case ContactsRequest.ACTION_FREQUENT:
-                case ContactsRequest.ACTION_STREQUENT:
-                case ContactsRequest.ACTION_STARRED:
-                    tabToOpen = TabState.ALL;
-                    break;
-                case ContactsRequest.ACTION_VIEW_CONTACT:
-                    tabToOpen = TabState.ALL;
-                    break;
-                default:
-                    tabToOpen = -1;
-                    break;
-            }
-            if (tabToOpen != -1) {
-                mActionBarAdapter.setCurrentTab(tabToOpen);
-            }
-
-            if (filter != null) {
-                mContactListFilterController.setContactListFilter(filter, /* persistent */ false);
-                searchMode = false;
-            }
-
-            if (mRequest.getContactUri() != null) {
-                searchMode = false;
-            }
-
-            mActionBarAdapter.setSearchMode(searchMode);
-            configureContactListFragmentForRequest();
-        }
-
-        configureContactListFragment();
-
-        invalidateOptionsMenuIfNeeded();
-    }
-
     private void initializeFabVisibility() {
-        final boolean hideFab = mActionBarAdapter.isSearchMode()
-                || mActionBarAdapter.isSelectionMode()
-                || !shouldShowFabForAccount();
-        mFloatingActionButtonContainer.setVisibility(hideFab ? View.GONE : View.VISIBLE);
+        mFloatingActionButtonContainer.setVisibility(shouldHideFab() ? View.GONE : View.VISIBLE);
         mFloatingActionButtonController.resetIn();
-        wasLastFabAnimationScaleIn = !hideFab;
+        wasLastFabAnimationScaleIn = !shouldHideFab();
     }
 
-    private boolean shouldShowFabForAccount() {
-        return isCurrentAccountFilterWritable()
-                || isAllContactsFilter(mContactListFilterController.getFilter());
+    private boolean shouldHideFab() {
+        if (mAllFragment != null && mAllFragment.getActionBarAdapter() == null
+                || isInSecondLevel()) {
+            return true;
+        }
+        return isAllFragmentInSearchMode() || isAllFragmentInSelectionMode();
     }
 
-    private boolean isCurrentAccountFilterWritable() {
-        final ContactListFilter currentFilter = mContactListFilterController.getFilter();
-        final AccountWithDataSet accountOfCurrentFilter = new AccountWithDataSet(
-                currentFilter.accountName, currentFilter.accountType, currentFilter.dataSet);
-        return accountOfCurrentFilter.isNullAccount()
-                || (mWritableAccounts != null
-                && mWritableAccounts.contains(accountOfCurrentFilter));
-    }
-
-    private void showFabWithAnimation(boolean showFab) {
+    public void showFabWithAnimation(boolean showFab) {
         if (mFloatingActionButtonContainer == null) {
             return;
         }
@@ -577,356 +496,6 @@
     }
 
     @Override
-    public void onContactListFilterChanged() {
-        if (mAllFragment == null || !mAllFragment.isAdded()) {
-            return;
-        }
-
-        setFilterAndUpdateTitle(mContactListFilterController.getFilter());
-        // Scroll to top after filter is changed.
-        mAllFragment.getListView().setSelection(0);
-        showFabWithAnimation(shouldShowFabForAccount());
-
-        invalidateOptionsMenuIfNeeded();
-    }
-
-    /**
-     * Handler for action bar actions.
-     */
-    @Override
-    public void onAction(int action) {
-        switch (action) {
-            case ActionBarAdapter.Listener.Action.START_SELECTION_MODE:
-                mAllFragment.displayCheckBoxes(true);
-                startSearchOrSelectionMode();
-                break;
-            case ActionBarAdapter.Listener.Action.START_SEARCH_MODE:
-                if (!mIsRecreatedInstance) {
-                    Logger.logScreenView(this, ScreenType.SEARCH);
-                }
-                startSearchOrSelectionMode();
-                break;
-            case ActionBarAdapter.Listener.Action.BEGIN_STOPPING_SEARCH_AND_SELECTION_MODE:
-                showFabWithAnimation(shouldShowFabForAccount());
-                break;
-            case ActionBarAdapter.Listener.Action.STOP_SEARCH_AND_SELECTION_MODE:
-                // If queryString is empty, fragment data will not be reloaded,
-                // so hamburger promo should be checked now.
-                // If not empty, promo should be checked and displayed after reloading. (b/30706521)
-                if (TextUtils.isEmpty(mAllFragment.getQueryString())) {
-                    maybeShowHamburgerFeatureHighlight();
-                }
-                setQueryTextToFragment("");
-                updateFragmentsVisibility();
-                invalidateOptionsMenu();
-                showFabWithAnimation(shouldShowFabForAccount());
-                break;
-            case ActionBarAdapter.Listener.Action.CHANGE_SEARCH_QUERY:
-                final String queryString = mActionBarAdapter.getQueryString();
-                setQueryTextToFragment(queryString);
-                updateDebugOptionsVisibility(
-                        ENABLE_DEBUG_OPTIONS_HIDDEN_CODE.equals(queryString));
-                break;
-            default:
-                throw new IllegalStateException("Unkonwn ActionBarAdapter action: " + action);
-        }
-    }
-
-    private void startSearchOrSelectionMode() {
-        configureFragments(false /* from request */);
-        updateFragmentsVisibility();
-        invalidateOptionsMenu();
-        showFabWithAnimation(/* showFab */ false);
-        if (!SharedPreferenceUtil.getHamburgerPromoTriggerActionHappenedBefore(this)) {
-            SharedPreferenceUtil.setHamburgerPromoTriggerActionHappenedBefore(this);
-        }
-    }
-
-    @Override
-    public void onSelectedTabChanged() {
-        updateFragmentsVisibility();
-    }
-
-    @Override
-    public void onUpButtonPressed() {
-        onBackPressed();
-    }
-
-    private void updateDebugOptionsVisibility(boolean visible) {
-        if (mEnableDebugMenuOptions != visible) {
-            mEnableDebugMenuOptions = visible;
-            invalidateOptionsMenu();
-        }
-    }
-
-    /**
-     * Updates the fragment/view visibility according to the current mode, such as
-     * {@link ActionBarAdapter#isSearchMode()} and {@link ActionBarAdapter#getCurrentTab()}.
-     */
-    private void updateFragmentsVisibility() {
-        int tab = mActionBarAdapter.getCurrentTab();
-
-        if (mActionBarAdapter.isSearchMode() || mActionBarAdapter.isSelectionMode()) {
-            mTabPagerAdapter.setTabsHidden(true);
-        } else {
-            // No smooth scrolling if quitting from the search/selection mode.
-            final boolean wereTabsHidden = mTabPagerAdapter.areTabsHidden()
-                    || mActionBarAdapter.isSelectionMode();
-            mTabPagerAdapter.setTabsHidden(false);
-            if (mTabPager.getCurrentItem() != tab) {
-                mTabPager.setCurrentItem(tab, !wereTabsHidden);
-            }
-        }
-        if (!mActionBarAdapter.isSelectionMode()) {
-            mAllFragment.displayCheckBoxes(false);
-        }
-        invalidateOptionsMenu();
-        showEmptyStateForTab(tab);
-    }
-
-    private void showEmptyStateForTab(int tab) {
-        if (mContactsUnavailableFragment != null) {
-            switch (getTabPositionForTextDirection(tab)) {
-                case TabState.ALL:
-                    mContactsUnavailableFragment.setTabInfo(R.string.noContacts, TabState.ALL);
-                    break;
-            }
-            // When using the mContactsUnavailableFragment the ViewPager doesn't contain two views.
-            // Therefore, we have to trick the ViewPagerTabs into thinking we have changed tabs
-            // when the mContactsUnavailableFragment changes. Otherwise the tab strip won't move.
-            mViewPagerTabs.onPageScrolled(tab, 0, 0);
-        }
-    }
-
-    private class TabPagerListener implements ViewPager.OnPageChangeListener {
-
-        // This package-protected constructor is here because of a possible compiler bug.
-        // PeopleActivity$1.class should be generated due to the private outer/inner class access
-        // needed here.  But for some reason, PeopleActivity$1.class is missing.
-        // Since $1 class is needed as a jvm work around to get access to the inner class,
-        // changing the constructor to package-protected or public will solve the problem.
-        // To verify whether $1 class is needed, javap PeopleActivity$TabPagerListener and look for
-        // references to PeopleActivity$1.
-        //
-        // When the constructor is private and PeopleActivity$1.class is missing, proguard will
-        // correctly catch this and throw warnings and error out the build on user/userdebug builds.
-        //
-        // All private inner classes below also need this fix.
-        TabPagerListener() {}
-
-        @Override
-        public void onPageScrollStateChanged(int state) {
-            if (!mTabPagerAdapter.areTabsHidden()) {
-                mViewPagerTabs.onPageScrollStateChanged(state);
-            }
-        }
-
-        @Override
-        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
-            if (!mTabPagerAdapter.areTabsHidden()) {
-                mViewPagerTabs.onPageScrolled(position, positionOffset, positionOffsetPixels);
-            }
-        }
-
-        @Override
-        public void onPageSelected(int position) {
-            // Make sure not in the search mode, in which case position != TabState.ordinal().
-            if (!mTabPagerAdapter.areTabsHidden()) {
-                mActionBarAdapter.setCurrentTab(position, false);
-                mViewPagerTabs.onPageSelected(position);
-                showEmptyStateForTab(position);
-                invalidateOptionsMenu();
-            }
-        }
-    }
-
-    /**
-     * Adapter for the {@link ViewPager}.  Unlike {@link FragmentPagerAdapter},
-     * {@link #instantiateItem} returns existing fragments, and {@link #instantiateItem}/
-     * {@link #destroyItem} show/hide fragments instead of attaching/detaching.
-     *
-     * In search mode, we always show the "all" fragment, and disable the swipe.  We change the
-     * number of items to 1 to disable the swipe.
-     *
-     * TODO figure out a more straight way to disable swipe.
-     */
-    private class TabPagerAdapter extends PagerAdapter {
-        private final FragmentManager mFragmentManager;
-        private FragmentTransaction mCurTransaction = null;
-
-        private boolean mAreTabsHiddenInTabPager;
-
-        private Fragment mCurrentPrimaryItem;
-
-        public TabPagerAdapter() {
-            mFragmentManager = getFragmentManager();
-        }
-
-        public boolean areTabsHidden() {
-            return mAreTabsHiddenInTabPager;
-        }
-
-        public void setTabsHidden(boolean hideTabs) {
-            if (hideTabs == mAreTabsHiddenInTabPager) {
-                return;
-            }
-            mAreTabsHiddenInTabPager = hideTabs;
-            notifyDataSetChanged();
-        }
-
-        @Override
-        public int getCount() {
-            return mAreTabsHiddenInTabPager ? 1 : TabState.COUNT;
-        }
-
-        /** Gets called when the number of items changes. */
-        @Override
-        public int getItemPosition(Object object) {
-            if (mAreTabsHiddenInTabPager) {
-                if (object == mAllFragment) {
-                    return 0; // Only 1 page in search mode
-                }
-            } else {
-                if (object == mAllFragment) {
-                    return getTabPositionForTextDirection(TabState.ALL);
-                }
-            }
-            return POSITION_NONE;
-        }
-
-        @Override
-        public void startUpdate(ViewGroup container) {
-        }
-
-        private Fragment getFragment(int position) {
-            position = getTabPositionForTextDirection(position);
-            if (mAreTabsHiddenInTabPager) {
-                if (position != 0) {
-                    // This has only been observed in monkey tests.
-                    // Let's log this issue, but not crash
-                    Log.w(TAG, "Request fragment at position=" + position + ", eventhough we " +
-                            "are in search mode");
-                }
-                return mAllFragment;
-            } else {
-                if (position == TabState.ALL) {
-                    return mAllFragment;
-                }
-            }
-            throw new IllegalArgumentException("position: " + position);
-        }
-
-        @Override
-        public Object instantiateItem(ViewGroup container, int position) {
-            if (mCurTransaction == null) {
-                mCurTransaction = mFragmentManager.beginTransaction();
-            }
-            Fragment f = getFragment(position);
-            mCurTransaction.show(f);
-
-            // Non primary pages are not visible.
-            f.setUserVisibleHint(f == mCurrentPrimaryItem);
-            return f;
-        }
-
-        @Override
-        public void destroyItem(ViewGroup container, int position, Object object) {
-            if (mCurTransaction == null) {
-                mCurTransaction = mFragmentManager.beginTransaction();
-            }
-            mCurTransaction.hide((Fragment) object);
-        }
-
-        @Override
-        public void finishUpdate(ViewGroup container) {
-            if (mCurTransaction != null) {
-                mCurTransaction.commitAllowingStateLoss();
-                mCurTransaction = null;
-                mFragmentManager.executePendingTransactions();
-            }
-        }
-
-        @Override
-        public boolean isViewFromObject(View view, Object object) {
-            return ((Fragment) object).getView() == view;
-        }
-
-        @Override
-        public void setPrimaryItem(ViewGroup container, int position, Object object) {
-            Fragment fragment = (Fragment) object;
-            if (mCurrentPrimaryItem != fragment) {
-                if (mCurrentPrimaryItem != null) {
-                    mCurrentPrimaryItem.setUserVisibleHint(false);
-                }
-                if (fragment != null) {
-                    fragment.setUserVisibleHint(true);
-                }
-                mCurrentPrimaryItem = fragment;
-            }
-        }
-
-        @Override
-        public Parcelable saveState() {
-            return null;
-        }
-
-        @Override
-        public void restoreState(Parcelable state, ClassLoader loader) {
-        }
-
-        @Override
-        public CharSequence getPageTitle(int position) {
-            return mTabTitles[position];
-        }
-    }
-
-    private void setQueryTextToFragment(String query) {
-        mAllFragment.setQueryString(query, true);
-        mAllFragment.setVisibleScrollbarEnabled(!mAllFragment.isSearchMode());
-    }
-
-    private void configureContactListFragmentForRequest() {
-        Uri contactUri = mRequest.getContactUri();
-        if (contactUri != null) {
-            mAllFragment.setSelectedContactUri(contactUri);
-        }
-
-        setFilterAndUpdateTitle(mContactListFilterController.getFilter());
-        setQueryTextToFragment(mActionBarAdapter.getQueryString());
-
-        if (mRequest.isDirectorySearchEnabled()) {
-            mAllFragment.setDirectorySearchMode(DirectoryListLoader.SEARCH_MODE_DEFAULT);
-        } else {
-            mAllFragment.setDirectorySearchMode(DirectoryListLoader.SEARCH_MODE_NONE);
-        }
-    }
-
-    private void configureContactListFragment() {
-        // Filter may be changed when this Activity is in background.
-        setFilterAndUpdateTitle(mContactListFilterController.getFilter());
-
-        mAllFragment.setVerticalScrollbarPosition(getScrollBarPosition());
-        mAllFragment.setSelectionVisible(false);
-    }
-
-    private int getScrollBarPosition() {
-        return isRTL() ? View.SCROLLBAR_POSITION_LEFT : View.SCROLLBAR_POSITION_RIGHT;
-    }
-
-    private boolean isRTL() {
-        final Locale locale = Locale.getDefault();
-        return TextUtils.getLayoutDirectionFromLocale(locale) == View.LAYOUT_DIRECTION_RTL;
-    }
-
-    @Override
-    public void onFiltersLoaded(List<ContactListFilter> accountFilterItems) {
-        super.onFiltersLoaded(accountFilterItems);
-        mWritableAccounts =
-                AccountTypeManager.getInstance(this).getAccounts(/* contactWritableOnly */ true);
-        initializeFabVisibility();
-    }
-
-    @Override
     public void onProviderStatusChange() {
         reloadGroupsAndFiltersIfNeeded();
         updateViewConfiguration(false);
@@ -952,51 +521,50 @@
                 && (mProviderStatus.equals(providerStatus))) return;
         mProviderStatus = providerStatus;
 
-        View contactsUnavailableView = findViewById(R.id.contacts_unavailable_view);
+        final FragmentManager fragmentManager= getFragmentManager();
+        final FragmentTransaction transaction = fragmentManager.beginTransaction();
 
         // Change in CP2's provider status may not take effect immediately, see b/30566908.
         // So we need to handle the case where provider status is STATUS_EMPTY and there is
         // actually at least one real account (not "local" account) on device.
-        if ((mProviderStatus.equals(ProviderStatus.STATUS_EMPTY) && hasNonLocalAccount())
-                || mProviderStatus.equals(ProviderStatus.STATUS_NORMAL)) {
-            // Ensure that the mTabPager is visible; we may have made it invisible below.
-            contactsUnavailableView.setVisibility(View.GONE);
-            if (mTabPager != null) {
-                mTabPager.setVisibility(View.VISIBLE);
-            }
-
+        if (shouldShowList()) {
             if (mAllFragment != null) {
+                transaction.show(mAllFragment);
+                mAllFragment.setContactsAvailable(areContactsAvailable());
                 mAllFragment.setEnabled(true);
             }
+            if (mContactsUnavailableFragment != null) {
+                transaction.hide(mContactsUnavailableFragment);
+            }
         } else {
             // Setting up the page so that the user can still use the app
             // even without an account.
             if (mAllFragment != null) {
                 mAllFragment.setEnabled(false);
+                transaction.hide(mAllFragment);
             }
             if (mContactsUnavailableFragment == null) {
                 mContactsUnavailableFragment = new ContactsUnavailableFragment();
-                mContactsUnavailableFragment.setOnContactsUnavailableActionListener(
-                        new ContactsUnavailableFragmentListener());
-                getFragmentManager().beginTransaction()
-                        .replace(R.id.contacts_unavailable_container, mContactsUnavailableFragment)
-                        .commitAllowingStateLoss();
+                transaction.add(R.id.contacts_list_container, mContactsUnavailableFragment,
+                        TAG_UNAVAILABLE);
             }
+            transaction.show(mContactsUnavailableFragment);
             mContactsUnavailableFragment.updateStatus(mProviderStatus);
-
-            // Show the contactsUnavailableView, and hide the mTabPager so that we don't
-            // see it sliding in underneath the contactsUnavailableView at the edges.
-            contactsUnavailableView.setVisibility(View.VISIBLE);
-            if (mTabPager != null) {
-                mTabPager.setVisibility(View.GONE);
-            }
-
-            showEmptyStateForTab(mActionBarAdapter.getCurrentTab());
+        }
+        if (!transaction.isEmpty()) {
+            transaction.commit();
+            fragmentManager.executePendingTransactions();
         }
 
         invalidateOptionsMenuIfNeeded();
     }
 
+    private boolean shouldShowList() {
+        return mProviderStatus != null
+                && ((mProviderStatus.equals(ProviderStatus.STATUS_EMPTY) && hasNonLocalAccount())
+                        || mProviderStatus.equals(ProviderStatus.STATUS_NORMAL));
+    }
+
     // Returns true if there are real accounts (not "local" account) in the list of accounts.
     private boolean hasNonLocalAccount() {
         final List<AccountWithDataSet> allAccounts =
@@ -1010,359 +578,22 @@
         return !allAccounts.get(0).isNullAccount();
     }
 
-    private final class ContactBrowserActionListener implements OnContactBrowserActionListener {
-        ContactBrowserActionListener() {}
-
-        @Override
-        public void onSelectionChange() {
-
-        }
-
-        @Override
-        public void onViewContactAction(int position, Uri contactLookupUri,
-                boolean isEnterpriseContact) {
-            if (isEnterpriseContact) {
-                // No implicit intent as user may have a different contacts app in work profile.
-                QuickContact.showQuickContact(PeopleActivity.this, new Rect(), contactLookupUri,
-                        QuickContactActivity.MODE_FULLY_EXPANDED, null);
-            } else {
-                final Intent intent = ImplicitIntentsUtil.composeQuickContactIntent(
-                        PeopleActivity.this, contactLookupUri,
-                        QuickContactActivity.MODE_FULLY_EXPANDED);
-                final int previousScreen;
-                if (mAllFragment.isSearchMode()) {
-                    previousScreen = ScreenType.SEARCH;
-                } else {
-                    if (isAllContactsFilter(mContactListFilterController.getFilter())) {
-                        if (position < mAllFragment.getAdapter().getNumberOfFavorites()) {
-                            previousScreen = ScreenType.FAVORITES;
-                        } else {
-                            previousScreen = ScreenType.ALL_CONTACTS;
-                        }
-                    } else {
-                        previousScreen = ScreenType.LIST_ACCOUNT;
-                    }
-                }
-                Logger.logListEvent(ListEvent.ActionType.CLICK,
-                        /* listType */ getListTypeIncludingSearch(),
-                        /* count */ mAllFragment.getAdapter().getCount(),
-                        /* clickedIndex */ position, /* numSelected */ 0);
-                intent.putExtra(QuickContactActivity.EXTRA_PREVIOUS_SCREEN_TYPE, previousScreen);
-                ImplicitIntentsUtil.startActivityInApp(PeopleActivity.this, intent);
-            }
-        }
-
-        @Override
-        public void onDeleteContactAction(Uri contactUri) {
-            ContactDeletionInteraction.start(PeopleActivity.this, contactUri, false);
-        }
-
-        @Override
-        public void onFinishAction() {
-            onBackPressed();
-        }
-
-        @Override
-        public void onInvalidSelection() {
-            ContactListFilter filter;
-            ContactListFilter currentFilter = mAllFragment.getFilter();
-            if (currentFilter != null
-                    && currentFilter.filterType == ContactListFilter.FILTER_TYPE_SINGLE_CONTACT) {
-                filter = createContactsFilter();
-                setFilterAndUpdateTitle(filter);
-            } else {
-                filter = ContactListFilter.createFilterWithType(
-                        ContactListFilter.FILTER_TYPE_SINGLE_CONTACT);
-                setFilterAndUpdateTitle(filter, /* restoreSelectedUri */ false);
-            }
-            persistFilterIfNeeded(filter);
-        }
-    }
-
-    private final class CheckBoxListListener implements OnCheckBoxListActionListener {
-        @Override
-        public void onStartDisplayingCheckBoxes() {
-            mActionBarAdapter.setSelectionMode(true);
-            invalidateOptionsMenu();
-        }
-
-        @Override
-        public void onSelectedContactIdsChanged() {
-            mActionBarAdapter.setSelectionCount(mAllFragment.getSelectedContactIds().size());
-            invalidateOptionsMenu();
-        }
-
-        @Override
-        public void onStopDisplayingCheckBoxes() {
-            mActionBarAdapter.setSelectionMode(false);
-        }
-    }
-
-    private class ContactsUnavailableFragmentListener
-            implements OnContactsUnavailableActionListener {
-        ContactsUnavailableFragmentListener() {}
-
-        @Override
-        public void onCreateNewContactAction() {
-            ImplicitIntentsUtil.startActivityInApp(PeopleActivity.this,
-                    EditorIntents.createCompactInsertContactIntent(PeopleActivity.this));
-        }
-
-        @Override
-        public void onAddAccountAction() {
-            final Intent intent = ImplicitIntentsUtil.getIntentForAddingGoogleAccount();
-            ImplicitIntentsUtil.startActivityOutsideApp(PeopleActivity.this, intent);
-        }
-
-        @Override
-        public void onImportContactsFromFileAction() {
-            showImportExportDialogFragment();
-        }
-    }
-
-    @Override
-    public boolean onCreateOptionsMenu(Menu menu) {
-        if (!areContactsAvailable()) {
-            // If contacts aren't available, hide all menu items.
-            return false;
-        }
-        super.onCreateOptionsMenu(menu);
-
-        MenuInflater inflater = getMenuInflater();
-        inflater.inflate(R.menu.people_options, menu);
-
-        return true;
-    }
-
     private void invalidateOptionsMenuIfNeeded() {
-        if (isOptionsMenuChanged()) {
+        if (mAllFragment != null
+                && mAllFragment.getOptionsMenuContactsAvailable() != areContactsAvailable()) {
             invalidateOptionsMenu();
         }
     }
 
-    public boolean isOptionsMenuChanged() {
-        if (mOptionsMenuContactsAvailable != areContactsAvailable()) {
-            return true;
-        }
-
-        if (mAllFragment != null && mAllFragment.isOptionsMenuChanged()) {
-            return true;
-        }
-
-        return false;
-    }
-
-    @Override
-    public boolean onPrepareOptionsMenu(Menu menu) {
-        mOptionsMenuContactsAvailable = areContactsAvailable();
-        if (!mOptionsMenuContactsAvailable) {
-            return false;
-        }
-
-        final boolean isSearchOrSelectionMode = mActionBarAdapter.isSearchMode()
-                || mActionBarAdapter.isSelectionMode();
-        makeMenuItemVisible(menu, R.id.menu_search, !isSearchOrSelectionMode);
-
-        final boolean showSelectedContactOptions = mActionBarAdapter.isSelectionMode()
-                && mAllFragment.getSelectedContactIds().size() != 0;
-        makeMenuItemVisible(menu, R.id.menu_share, showSelectedContactOptions);
-        makeMenuItemVisible(menu, R.id.menu_delete, showSelectedContactOptions);
-        final boolean showLinkContactsOptions = mActionBarAdapter.isSelectionMode()
-                && mAllFragment.getSelectedContactIds().size() > 1;
-        makeMenuItemVisible(menu, R.id.menu_join, showLinkContactsOptions);
-
-        // Debug options need to be visible even in search mode.
-        makeMenuItemVisible(menu, R.id.export_database, mEnableDebugMenuOptions &&
-                hasExportIntentHandler());
-
-        return true;
-    }
-
-    private boolean hasExportIntentHandler() {
-        final Intent intent = new Intent();
-        intent.setAction("com.android.providers.contacts.DUMP_DATABASE");
-        final List<ResolveInfo> receivers = getPackageManager().queryIntentActivities(intent,
-                PackageManager.MATCH_DEFAULT_ONLY);
-        return receivers != null && receivers.size() > 0;
-    }
-
-    private void makeMenuItemVisible(Menu menu, int itemId, boolean visible) {
-        final MenuItem item = menu.findItem(itemId);
-        if (item != null) {
-            item.setVisible(visible);
-        }
-    }
-
-    @Override
-    public boolean onOptionsItemSelected(MenuItem item) {
-        if (mDisableOptionItemSelected) {
-            return false;
-        }
-
-        switch (item.getItemId()) {
-            case android.R.id.home: {
-                // The home icon on the action bar is pressed
-                if (mActionBarAdapter.isUpShowing()) {
-                    // "UP" icon press -- should be treated as "back".
-                    onBackPressed();
-                }
-                return true;
-            }
-            case R.id.menu_search: {
-                onSearchRequested();
-                return true;
-            }
-            case R.id.menu_share: {
-                shareSelectedContacts();
-                return true;
-            }
-            case R.id.menu_join: {
-                Logger.logListEvent(ListEvent.ActionType.LINK,
-                        /* listType */ getListTypeIncludingSearch(),
-                        /* count */ mAllFragment.getAdapter().getCount(), /* clickedIndex */ -1,
-                        /* numSelected */ mAllFragment.getAdapter().getSelectedContactIds().size());
-                joinSelectedContacts();
-                return true;
-            }
-            case R.id.menu_delete: {
-                deleteSelectedContacts();
-                return true;
-            }
-            case R.id.export_database: {
-                final Intent intent = new Intent("com.android.providers.contacts.DUMP_DATABASE");
-                intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
-                ImplicitIntentsUtil.startActivityOutsideApp(this, intent);
-                return true;
-            }
-        }
-        return super.onOptionsItemSelected(item);
-    }
-
-    private void showImportExportDialogFragment(){
-        ImportExportDialogFragment.show(getFragmentManager(), areContactsAvailable(),
-                PeopleActivity.class, ImportExportDialogFragment.EXPORT_MODE_ALL_CONTACTS);
-    }
-
-    @Override
-    public boolean onSearchRequested() { // Search key pressed.
-        if (!mActionBarAdapter.isSelectionMode()) {
-            mActionBarAdapter.setSearchMode(true);
-        }
-        return true;
-    }
-
-    /**
-     * Share all contacts that are currently selected in mAllFragment. This method is pretty
-     * inefficient for handling large numbers of contacts. I don't expect this to be a problem.
-     */
-    private void shareSelectedContacts() {
-        final StringBuilder uriListBuilder = new StringBuilder();
-        for (Long contactId : mAllFragment.getSelectedContactIds()) {
-            final Uri contactUri = ContentUris.withAppendedId(Contacts.CONTENT_URI, contactId);
-            final Uri lookupUri = Contacts.getLookupUri(getContentResolver(), contactUri);
-            if (lookupUri == null) {
-                continue;
-            }
-            final List<String> pathSegments = lookupUri.getPathSegments();
-            if (pathSegments.size() < 2) {
-                continue;
-            }
-            final String lookupKey = pathSegments.get(pathSegments.size() - 2);
-            if (uriListBuilder.length() > 0) {
-                uriListBuilder.append(':');
-            }
-            uriListBuilder.append(Uri.encode(lookupKey));
-        }
-        if (uriListBuilder.length() == 0) {
-            return;
-        }
-        final Uri uri = Uri.withAppendedPath(
-                Contacts.CONTENT_MULTI_VCARD_URI,
-                Uri.encode(uriListBuilder.toString()));
-        final Intent intent = new Intent(Intent.ACTION_SEND);
-        intent.setType(Contacts.CONTENT_VCARD_TYPE);
-        intent.putExtra(Intent.EXTRA_STREAM, uri);
-        try {
-            startActivityForResult(Intent.createChooser(intent, getResources().getQuantityString(
-                    R.plurals.title_share_via,
-                    /* quantity */ mAllFragment.getSelectedContactIds().size()))
-                    , ACTIVITY_REQUEST_CODE_SHARE);
-        } catch (final ActivityNotFoundException ex) {
-            Toast.makeText(this, R.string.share_error, Toast.LENGTH_SHORT).show();
-        }
-    }
-
-    private void joinSelectedContacts() {
-        final Intent intent = ContactSaveService.createJoinSeveralContactsIntent(
-                this, mAllFragment.getSelectedContactIdsArray());
-        this.startService(intent);
-
-        mActionBarAdapter.setSelectionMode(false);
-    }
-
-    private void deleteSelectedContacts() {
-        ContactMultiDeletionInteraction.start(PeopleActivity.this,
-                mAllFragment.getSelectedContactIds());
-    }
-
-    @Override
-    public void onDeletionFinished() {
-        // The parameters count and numSelected are both the number of contacts before deletion.
-        Logger.logListEvent(ListEvent.ActionType.DELETE,
-                /* listType */ getListTypeIncludingSearch(),
-                /* count */ mAllFragment.getAdapter().getCount(), /* clickedIndex */ -1,
-                /* numSelected */ mAllFragment.getSelectedContactIds().size());
-        mActionBarAdapter.setSelectionMode(false);
-    }
-
-    private int getListTypeIncludingSearch() {
-        return mAllFragment.isSearchMode()
-                ? ListEvent.ListType.SEARCH_RESULT : mAllFragment.getListType();
-    }
-
-    @Override
-    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
-        switch (requestCode) {
-            // TODO: Using the new startActivityWithResultFromFragment API this should not be needed
-            // anymore
-            case ContactEntryListFragment.ACTIVITY_REQUEST_CODE_PICKER:
-                if (resultCode == RESULT_OK) {
-                    mAllFragment.onPickerResult(data);
-                }
-            case ACTIVITY_REQUEST_CODE_SHARE:
-                Logger.logListEvent(ListEvent.ActionType.SHARE,
-                    /* listType */ getListTypeIncludingSearch(),
-                    /* count */ mAllFragment.getAdapter().getCount(), /* clickedIndex */ -1,
-                    /* numSelected */ mAllFragment.getAdapter().getSelectedContactIds().size());
-
-// TODO fix or remove multipicker code
-//                else if (resultCode == RESULT_CANCELED && mMode == MODE_PICK_MULTIPLE_PHONES) {
-//                    // Finish the activity if the sub activity was canceled as back key is used
-//                    // to confirm user selection in MODE_PICK_MULTIPLE_PHONES.
-//                    finish();
-//                }
-//                break;
-        }
-    }
-
     @Override
     public boolean onKeyDown(int keyCode, KeyEvent event) {
-        // TODO move to the fragment
-
         // Bring up the search UI if the user starts typing
         final int unicodeChar = event.getUnicodeChar();
         if ((unicodeChar != 0)
                 // If COMBINING_ACCENT is set, it's not a unicode character.
                 && ((unicodeChar & KeyCharacterMap.COMBINING_ACCENT) == 0)
                 && !Character.isWhitespace(unicodeChar)) {
-            if (mActionBarAdapter.isSelectionMode()) {
-                // Ignore keyboard input when in selection mode.
-                return true;
-            }
-            String query = new String(new int[]{unicodeChar}, 0, 1);
-            if (!mActionBarAdapter.isSearchMode()) {
-                mActionBarAdapter.setSearchMode(true);
-                mActionBarAdapter.setQueryString(query);
+            if (mAllFragment.onKeyDown(unicodeChar)) {
                 return true;
             }
         }
@@ -1376,184 +607,101 @@
             return;
         }
 
+        // Handle the back event in drawer first.
         if (mDrawer.isDrawerOpen(GravityCompat.START)) {
             mDrawer.closeDrawer(GravityCompat.START);
-        } else if (FeatureHighlightHelper.tryRemoveHighlight(this)) {
             return;
-        } else if (mActionBarAdapter.isSelectionMode()) {
-            mActionBarAdapter.setSelectionMode(false);
-            mAllFragment.displayCheckBoxes(false);
-        } else if (mActionBarAdapter.isSearchMode()) {
-            mActionBarAdapter.setSearchMode(false);
+        }
 
+        // Handle the back event in "second level".
+        if (isGroupView()) {
+            onBackPressedGroupView();
+            return;
+        }
+
+        if (isDuplicatesView()) {
+            switchToAllContacts();
+            return;
+        }
+
+        // If feature highlight is present, let it handle the back event before mAllFragment.
+        if (FeatureHighlightHelper.tryRemoveHighlight(this)) {
+            return;
+        }
+
+        // Handle the back event in "first level" - mAllFragment.
+        if (maybeHandleInAllFragment()) {
+            return;
+        }
+
+        super.onBackPressed();
+    }
+
+    private void onBackPressedGroupView() {
+        if (mMembersFragment.isEditMode()) {
+            mMembersFragment.exitEditMode();
+        } else if (mMembersFragment.getActionBarAdapter().isSelectionMode()) {
+            mMembersFragment.getActionBarAdapter().setSelectionMode(false);
+            mMembersFragment.displayCheckBoxes(false);
+        } else if (mMembersFragment.getActionBarAdapter().isSearchMode()) {
+            mMembersFragment.getActionBarAdapter().setSearchMode(false);
+        } else {
+            switchToAllContacts();
+        }
+    }
+
+    // Returns true if back event is handled in this method.
+    private boolean maybeHandleInAllFragment() {
+        if (isAllFragmentInSelectionMode()) {
+            mAllFragment.getActionBarAdapter().setSelectionMode(false);
+            return true;
+        }
+
+        if (isAllFragmentInSearchMode()) {
+            mAllFragment.getActionBarAdapter().setSearchMode(false);
             if (mAllFragment.wasSearchResultClicked()) {
                 mAllFragment.resetSearchResultClicked();
             } else {
                 Logger.logScreenView(this, ScreenType.SEARCH_EXIT);
                 Logger.logSearchEvent(mAllFragment.createSearchState());
             }
-        } else if (!isAllContactsFilter(mContactListFilterController.getFilter())) {
-            switchToAllContacts();
-        } else {
-            super.onBackPressed();
+            return true;
         }
+
+        if (!AccountFilterUtil.isAllContactsFilter(mAllFragment.getFilter())
+                && !mAllFragment.isHidden()) {
+            // If mAllFragment is hidden, then mContactsUnavailableFragment is visible so we
+            // don't need to switch to all contacts.
+            switchToAllContacts();
+            return true;
+        }
+
+        return false;
+    }
+
+    private boolean isAllFragmentInSelectionMode() {
+        return mAllFragment.getActionBarAdapter().isSelectionMode();
+    }
+
+    private boolean isAllFragmentInSearchMode() {
+        return mAllFragment.getActionBarAdapter().isSearchMode();
     }
 
     @Override
     protected void onSaveInstanceState(Bundle outState) {
         super.onSaveInstanceState(outState);
-        mActionBarAdapter.onSaveInstanceState(outState);
-
-        // Clear the listener to make sure we don't get callbacks after onSaveInstanceState,
-        // in order to avoid doing fragment transactions after it.
-        // TODO Figure out a better way to deal with the issue.
-        mDisableOptionItemSelected = true;
-        mActionBarAdapter.setListener(null);
-        if (mTabPager != null) {
-            mTabPager.setOnPageChangeListener(null);
-        }
+        outState.putParcelable(KEY_GROUP_URI, mGroupUri);
     }
 
     @Override
     protected void onRestoreInstanceState(Bundle savedInstanceState) {
         super.onRestoreInstanceState(savedInstanceState);
-        // In our own lifecycle, the focus is saved and restore but later taken away by the
-        // ViewPager. As a hack, we force focus on the SearchView if we know that we are searching.
-        // This fixes the keyboard going away on screen rotation
-        if (mActionBarAdapter.isSearchMode()) {
-            mActionBarAdapter.setFocusOnSearchView();
-        }
-    }
-
-    @Override
-    public DialogManager getDialogManager() {
-        return mDialogManager;
-    }
-
-    @Override
-    public void onClick(View view) {
-        switch (view.getId()) {
-            case R.id.floating_action_button:
-                onFabClicked();
-                break;
-            default:
-                Log.wtf(TAG, "Unexpected onClick event from " + view);
-        }
-    }
-
-    public void onFabClicked() {
-        final Intent intent = new Intent(Intent.ACTION_INSERT, Contacts.CONTENT_URI);
-        // Copy our extras into the new intent.
-        intent.putExtras(getIntent());
-
-        final ContactListFilter filter = mContactListFilterController.getFilter();
-        // If we are in account view, we pass the account explicitly in order to
-        // create contact in the account. This will prevent the default account dialog
-        // from being displayed.
-        if (!isAllContactsFilter(filter) && filter.accountName != null &&
-                filter.accountType != null) {
-            final Account account = new Account(filter.accountName, filter.accountType);
-            intent.putExtra(Intents.Insert.EXTRA_ACCOUNT, account);
-            intent.putExtra(Intents.Insert.EXTRA_DATA_SET, filter.dataSet);
-        } else if (isDeviceContactsFilter(filter)) {
-            // It's OK to add this even though it's an implicit intent. If a different app
-            // receives the intent it should just ignore the flag.
-            intent.putExtra(CompactContactEditorActivity.EXTRA_SAVE_TO_DEVICE_FLAG, true);
-        }
-
-        try {
-            ImplicitIntentsUtil.startActivityInApp(PeopleActivity.this, intent);
-        } catch (ActivityNotFoundException ex) {
-            Toast.makeText(PeopleActivity.this, R.string.missing_app,
-                    Toast.LENGTH_SHORT).show();
-        }
-    }
-
-    /**
-     * Returns the tab position adjusted for the text direction.
-     */
-    private int getTabPositionForTextDirection(int position) {
-        if (isRTL()) {
-            return TabState.COUNT - 1 - position;
-        }
-        return position;
-    }
-
-    private void setFilterAndUpdateTitle(ContactListFilter filter) {
-        setFilterAndUpdateTitle(filter, true);
-    }
-
-    private void setFilterAndUpdateTitle(ContactListFilter filter, boolean restoreSelectedUri) {
-        mAllFragment.setFilter(filter, restoreSelectedUri);
-
-        mAllFragment.setListType(mContactListFilterController.getFilterListType());
-
-        updateFilterMenu(filter);
-
-        if (getSupportActionBar() != null) {
-            String actionBarTitle;
-            if (filter.filterType == ContactListFilter.FILTER_TYPE_DEVICE_CONTACTS &&
-                    filter.accountName == null) {
-                actionBarTitle = getString(R.string.account_phone);
-            } else if (!TextUtils.isEmpty(filter.accountName)) {
-                actionBarTitle = getActionBarTitleForAccount(filter);
-            } else {
-                actionBarTitle = getString(R.string.contactsList);
-            }
-            getSupportActionBar().setTitle(actionBarTitle);
-            if (CompatUtils.isNCompatible()) {
-                this.setTitle(actionBarTitle);
-                getWindow().getDecorView()
-                        .sendAccessibilityEvent(AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED);
-            }
-        }
-    }
-
-    private String getActionBarTitleForAccount(ContactListFilter filter) {
-        final AccountDisplayInfoFactory factory =
-                AccountDisplayInfoFactory.forWritableAccounts(this);
-        final AccountDisplayInfo displayableAccount = factory.getAccountDisplayInfoFor(filter);
-        if (displayableAccount.hasGoogleAccountType()) {
-            return getString(R.string.title_from_google);
-        } else {
-            return displayableAccount.withFormattedName(this, R.string.title_from_other_accounts)
-                    .getNameLabel().toString();
-        }
-    }
-
-    // Persist filter only when it's of the type FILTER_TYPE_ALL_ACCOUNTS.
-    private void persistFilterIfNeeded(ContactListFilter filter) {
-        mContactListFilterController.setContactListFilter(filter,
-                /* persistent */ isAllContactsFilter(filter));
-    }
-
-    private boolean isAllContactsFilter(ContactListFilter filter) {
-        return filter != null && filter.isContactsFilterType();
-    }
-
-    private boolean isDeviceContactsFilter(ContactListFilter filter) {
-        return filter.filterType == ContactListFilter.FILTER_TYPE_DEVICE_CONTACTS;
-    }
-
-    @Override
-    protected boolean shouldFinish() {
-        return false;
-    }
-
-    @Override
-    protected ContactListFilter getContactListFilter() {
-        return mContactListFilterController.getFilter();
-    }
-
-    @Override
-    public void onLoadFinishedCallback() {
-        maybeShowHamburgerFeatureHighlight();
+        mGroupUri = savedInstanceState.getParcelable(KEY_GROUP_URI);
     }
 
     private void onGroupDeleted(Intent intent) {
-        if (!ContactSaveService.canUndo(intent)) {
-            return;
-        }
+        if (!ContactSaveService.canUndo(intent)) return;
+
         Snackbar.make(mLayoutRoot, getString(R.string.groupDeletedToast), Snackbar.LENGTH_LONG)
                 .setAction(R.string.undo, new View.OnClickListener() {
                     @Override
@@ -1575,4 +723,101 @@
             }
         }
     }
+
+    @Override
+    protected void onGroupMenuItemClicked(long groupId, String title) {
+        if (isGroupView() && mMembersFragment != null
+                && mMembersFragment.isCurrentGroup(groupId)) {
+            return;
+        }
+        mGroupUri = ContentUris.withAppendedId(ContactsContract.Groups.CONTENT_URI, groupId);
+        switchToOrUpdateGroupView(GroupUtil.ACTION_SWITCH_GROUP);
+    }
+
+    @Override
+    protected void onFilterMenuItemClicked(Intent intent) {
+        // We must pop second level first to "restart" mAllFragment, before changing filter.
+        if (isInSecondLevel()) {
+            popSecondLevel();
+            showFabWithAnimation(/* showFab */ true);
+        }
+        mCurrentView = ContactsView.ACCOUNT_VIEW;
+        super.onFilterMenuItemClicked(intent);
+    }
+
+    private void switchToOrUpdateGroupView(String action) {
+        if (mMembersFragment != null) {
+            mCurrentView = ContactsView.GROUP_VIEW;
+            mMembersFragment.updateDisplayedGroup(mGroupUri, action);
+        } else {
+            switchView(ContactsView.GROUP_VIEW);
+        }
+    }
+
+    @Override
+    protected void launchFindDuplicates() {
+        switchView(ContactsView.DUPLICATES);
+    }
+
+    private void switchView(ContactsView contactsView) {
+        mCurrentView = contactsView;
+        setUpNewFragment();
+    }
+
+    private void setUpNewFragment() {
+        final FragmentManager fragmentManager =  getFragmentManager();
+        final FragmentTransaction transaction = fragmentManager.beginTransaction();
+        if (isGroupView()) {
+            mMembersFragment = GroupMembersFragment.newInstance(mGroupUri);
+            transaction.replace(
+                    R.id.contacts_list_container, mMembersFragment, TAG_GROUP_VIEW);
+        } else if (isDuplicatesView()) {
+            final Fragment duplicatesFragment = ObjectFactory.getDuplicatesFragment();
+            final Fragment duplicatesUtilFragment = ObjectFactory.getDuplicatesUtilFragment();
+            if (duplicatesFragment != null && duplicatesUtilFragment != null) {
+                duplicatesUtilFragment.setTargetFragment(duplicatesFragment, /* requestCode */ 0);
+                transaction.replace(
+                        R.id.contacts_list_container, duplicatesFragment, TAG_DUPLICATES);
+                transaction.add(duplicatesUtilFragment, TAG_DUPLICATES_UTIL);
+            }
+        }
+        transaction.addToBackStack(TAG_SECOND_LEVEL);
+        transaction.commit();
+        fragmentManager.executePendingTransactions();
+
+        resetFilter();
+        showFabWithAnimation(/* showFab */ false);
+    }
+
+    @Override
+    public void switchToAllContacts() {
+        if (isInSecondLevel()) {
+            popSecondLevel();
+        }
+        mCurrentView = ContactsView.ALL_CONTACTS;
+        showFabWithAnimation(/* showFab */ true);
+
+        super.switchToAllContacts();
+    }
+
+    private void popSecondLevel() {
+        getFragmentManager().popBackStackImmediate(
+                TAG_SECOND_LEVEL, FragmentManager.POP_BACK_STACK_INCLUSIVE);
+        mMembersFragment = null;
+    }
+
+    @Override
+    protected DefaultContactBrowseListFragment getAllFragment() {
+        return mAllFragment;
+    }
+
+    @Override
+    protected GroupMembersFragment getGroupFragment() {
+        return mMembersFragment;
+    }
+
+    @Override
+    protected GroupMetaData getGroupMetaData() {
+        return mMembersFragment == null ? null : mMembersFragment.getGroupMetaData();
+    }
 }
diff --git a/src/com/android/contacts/common/Experiments.java b/src/com/android/contacts/common/Experiments.java
index 7d318af..9ddf5b3 100644
--- a/src/com/android/contacts/common/Experiments.java
+++ b/src/com/android/contacts/common/Experiments.java
@@ -21,10 +21,37 @@
 public final class Experiments {
 
     /**
+     * Whether to open contact sheet (aka smart profile) instead of our own QuickContact.
+     */
+    public static final String CONTACT_SHEET = "QuickContact__contact_sheet";
+
+    /**
      * Experiment to enable dynamic strequent shortcuts.
      */
     public static final String DYNAMIC_SHORTCUTS = "Shortcuts__dynamic_shortcuts";
 
+    /**
+     * Experiment to toggle contacts sync using the pull to refresh gesture.
+     */
+    public static final String PULL_TO_REFRESH = "PullToRefresh__pull_to_refresh";
+
+    /**
+     * Search study boolean indicating whether to inject yenta search results before CP2 results.
+     */
+    public static final String SEARCH_YENTA = "Search__yenta";
+
+    /**
+     * Flags for minimum content update time
+     */
+    public static final String DYNAMIC_MIN_CONTENT_CHANGE_UPDATE_DELAY_MILLIS =
+            "Shortcuts__dynamic_min_content_change_update_delay_millis";
+
+    /**
+     * Flags for maximum content update time
+     */
+    public static final String DYNAMIC_MAX_CONTENT_CHANGE_UPDATE_DELAY_MILLIS =
+            "Shortcuts__dynamic_max_content_change_update_delay_millis";
+
     private Experiments() {
     }
 }
diff --git a/src/com/android/contacts/common/interactions/ExportDialogFragment.java b/src/com/android/contacts/common/interactions/ExportDialogFragment.java
new file mode 100644
index 0000000..84a43dd
--- /dev/null
+++ b/src/com/android/contacts/common/interactions/ExportDialogFragment.java
@@ -0,0 +1,230 @@
+/*
+ * Copyright (C) 2010 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.interactions;
+
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.app.Dialog;
+import android.app.DialogFragment;
+import android.app.FragmentManager;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.content.res.Resources;
+import android.database.Cursor;
+import android.net.Uri;
+import android.os.Bundle;
+import android.provider.ContactsContract.Contacts;
+import android.telephony.SubscriptionManager;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ArrayAdapter;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import com.android.contacts.common.R;
+import com.android.contacts.common.util.ImplicitIntentsUtil;
+import com.android.contacts.common.vcard.ExportVCardActivity;
+import com.android.contacts.common.vcard.ShareVCardActivity;
+import com.android.contacts.common.vcard.VCardCommonArguments;
+
+/**
+ * An dialog invoked to import/export contacts.
+ */
+public class ExportDialogFragment extends DialogFragment {
+    public static final String TAG = "ExportDialogFragment";
+
+    public static final int EXPORT_MODE_FAVORITES = 0;
+    public static final int EXPORT_MODE_ALL_CONTACTS = 1;
+    public static final int EXPORT_MODE_DEFAULT = -1;
+
+    private static int mExportMode = EXPORT_MODE_DEFAULT;
+
+    private final String[] LOOKUP_PROJECTION = new String[] {
+            Contacts.LOOKUP_KEY
+    };
+
+    private SubscriptionManager mSubscriptionManager;
+
+    /** Preferred way to show this dialog */
+    public static void show(FragmentManager fragmentManager, Class callingActivity,
+            int exportMode) {
+        final ExportDialogFragment fragment = new ExportDialogFragment();
+        Bundle args = new Bundle();
+        args.putString(VCardCommonArguments.ARG_CALLING_ACTIVITY, callingActivity.getName());
+        fragment.setArguments(args);
+        fragment.show(fragmentManager, TAG);
+        mExportMode = exportMode;
+    }
+
+    @Override
+    public Context getContext() {
+        return getActivity();
+    }
+
+    @Override
+    public void onAttach(Activity activity) {
+        super.onAttach(activity);
+    }
+
+    @Override
+    public Dialog onCreateDialog(Bundle savedInstanceState) {
+        // Wrap our context to inflate list items using the correct theme
+        final Resources res = getActivity().getResources();
+        final LayoutInflater dialogInflater = (LayoutInflater)getActivity()
+                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+        final String callingActivity = getArguments().getString(
+                VCardCommonArguments.ARG_CALLING_ACTIVITY);
+
+        // Adapter that shows a list of string resources
+        final ArrayAdapter<AdapterEntry> adapter = new ArrayAdapter<AdapterEntry>(getActivity(),
+                R.layout.select_dialog_item) {
+            @Override
+            public View getView(int position, View convertView, ViewGroup parent) {
+                final TextView result = (TextView)(convertView != null ? convertView :
+                        dialogInflater.inflate(R.layout.select_dialog_item, parent, false));
+
+                result.setText(getItem(position).mLabel);
+                return result;
+            }
+        };
+
+        if (res.getBoolean(R.bool.config_allow_export)) {
+                adapter.add(new AdapterEntry(getString(R.string.export_to_vcf_file),
+                        R.string.export_to_vcf_file));
+        }
+        if (res.getBoolean(R.bool.config_allow_share_contacts)) {
+            if (mExportMode == EXPORT_MODE_FAVORITES) {
+                // share favorite and frequently contacted contacts from Favorites tab
+                adapter.add(new AdapterEntry(getString(R.string.share_favorite_contacts),
+                        R.string.share_contacts));
+            } else {
+                // share "all" contacts (in groups selected in "Customize") from All tab for now
+                // TODO: change the string to share_visible_contacts if implemented
+                adapter.add(new AdapterEntry(getString(R.string.share_contacts),
+                        R.string.share_contacts));
+            }
+        }
+
+        final DialogInterface.OnClickListener clickListener =
+                new DialogInterface.OnClickListener() {
+            @Override
+            public void onClick(DialogInterface dialog, int which) {
+                boolean dismissDialog;
+                final int resId = adapter.getItem(which).mChoiceResourceId;
+                if (resId == R.string.export_to_vcf_file) {
+                    dismissDialog = true;
+                    final Intent exportIntent = new Intent(
+                            getActivity(), ExportVCardActivity.class);
+                    exportIntent.putExtra(VCardCommonArguments.ARG_CALLING_ACTIVITY,
+                            callingActivity);
+                    getActivity().startActivity(exportIntent);
+                } else if (resId == R.string.share_contacts) {
+                    dismissDialog = true;
+                    if (mExportMode == EXPORT_MODE_FAVORITES) {
+                        doShareFavoriteContacts();
+                    } else { // EXPORT_MODE_ALL_CONTACTS
+                        final Intent exportIntent = new Intent(
+                                getActivity(), ShareVCardActivity.class);
+                        exportIntent.putExtra(VCardCommonArguments.ARG_CALLING_ACTIVITY,
+                                callingActivity);
+                        getActivity().startActivity(exportIntent);
+                    }
+                } else {
+                    dismissDialog = true;
+                    Log.e(TAG, "Unexpected resource: "
+                            + getActivity().getResources().getResourceEntryName(resId));
+                }
+                if (dismissDialog) {
+                    dialog.dismiss();
+                }
+            }
+        };
+        final TextView title = (TextView) View.inflate(getActivity(), R.layout.dialog_title, null);
+        title.setText(R.string.dialog_export);
+        return new AlertDialog.Builder(getActivity())
+                .setCustomTitle(title)
+                .setSingleChoiceItems(adapter, -1, clickListener)
+                .create();
+    }
+
+    private void doShareFavoriteContacts() {
+        try{
+            final Cursor cursor = getActivity().getContentResolver().query(
+                    Contacts.CONTENT_STREQUENT_URI, LOOKUP_PROJECTION, null, null,
+                    Contacts.DISPLAY_NAME + " COLLATE NOCASE ASC");
+            if (cursor != null) {
+                try {
+                    if (!cursor.moveToFirst()) {
+                        Toast.makeText(getActivity(), R.string.no_contact_to_share,
+                                Toast.LENGTH_SHORT).show();
+                        return;
+                    }
+
+                    // Build multi-vcard Uri for sharing
+                    final StringBuilder uriListBuilder = new StringBuilder();
+                    int index = 0;
+                    do {
+                        if (index != 0)
+                            uriListBuilder.append(':');
+                        uriListBuilder.append(cursor.getString(0));
+                        index++;
+                    } while (cursor.moveToNext());
+                    final Uri uri = Uri.withAppendedPath(
+                            Contacts.CONTENT_MULTI_VCARD_URI,
+                            Uri.encode(uriListBuilder.toString()));
+
+                    final Intent intent = new Intent(Intent.ACTION_SEND);
+                    intent.setType(Contacts.CONTENT_VCARD_TYPE);
+                    intent.putExtra(Intent.EXTRA_STREAM, uri);
+                    ImplicitIntentsUtil.startActivityOutsideApp(getActivity(), intent);
+                } finally {
+                    cursor.close();
+                }
+            }
+        } catch (Exception e) {
+            Log.e(TAG, "Sharing contacts failed", e);
+            getActivity().runOnUiThread(new Runnable() {
+                @Override
+                public void run() {
+                    Toast.makeText(getContext(), R.string.share_contacts_failure,
+                            Toast.LENGTH_SHORT).show();
+                }
+            });
+        }
+    }
+
+    private static class AdapterEntry {
+        public final CharSequence mLabel;
+        public final int mChoiceResourceId;
+        public final int mSubscriptionId;
+
+        public AdapterEntry(CharSequence label, int resId, int subId) {
+            mLabel = label;
+            mChoiceResourceId = resId;
+            mSubscriptionId = subId;
+        }
+
+        public AdapterEntry(String label, int resId) {
+            // Store a nonsense value for mSubscriptionId. If this constructor is used,
+            // the mSubscriptionId value should not be read later.
+            this(label, resId, /* subId = */ -1);
+        }
+    }
+}
diff --git a/src/com/android/contacts/common/interactions/ImportExportDialogFragment.java b/src/com/android/contacts/common/interactions/ImportDialogFragment.java
similarity index 65%
rename from src/com/android/contacts/common/interactions/ImportExportDialogFragment.java
rename to src/com/android/contacts/common/interactions/ImportDialogFragment.java
index 7e1b487..0c0ce73 100644
--- a/src/com/android/contacts/common/interactions/ImportExportDialogFragment.java
+++ b/src/com/android/contacts/common/interactions/ImportDialogFragment.java
@@ -23,10 +23,7 @@
 import android.app.FragmentManager;
 import android.content.Context;
 import android.content.DialogInterface;
-import android.content.Intent;
 import android.content.res.Resources;
-import android.database.Cursor;
-import android.net.Uri;
 import android.os.Bundle;
 import android.provider.ContactsContract.Contacts;
 import android.telephony.SubscriptionInfo;
@@ -39,40 +36,29 @@
 import android.view.ViewGroup;
 import android.widget.ArrayAdapter;
 import android.widget.TextView;
-import android.widget.Toast;
 
 import com.android.contacts.common.R;
 import com.android.contacts.common.compat.CompatUtils;
 import com.android.contacts.common.compat.PhoneNumberUtilsCompat;
-import com.android.contacts.common.editor.SelectAccountDialogFragment;
 import com.android.contacts.common.model.AccountTypeManager;
 import com.android.contacts.common.model.account.AccountWithDataSet;
 import com.android.contacts.common.util.AccountSelectionUtil;
 import com.android.contacts.common.util.AccountsListAdapter.AccountListFilter;
-import com.android.contacts.common.util.ImplicitIntentsUtil;
-import com.android.contacts.common.vcard.ExportVCardActivity;
 import com.android.contacts.common.vcard.VCardCommonArguments;
-import com.android.contacts.common.vcard.ShareVCardActivity;
-import com.android.contactsbind.analytics.AnalyticsUtil;
+import com.android.contacts.editor.SelectAccountDialogFragment;
 
 import java.util.List;
 
 /**
  * An dialog invoked to import/export contacts.
  */
-public class ImportExportDialogFragment extends DialogFragment
+public class ImportDialogFragment extends DialogFragment
         implements SelectAccountDialogFragment.Listener {
-    public static final String TAG = "ImportExportDialogFragment";
-
-    public static final int EXPORT_MODE_FAVORITES = 0;
-    public static final int EXPORT_MODE_ALL_CONTACTS = 1;
-    public static final int EXPORT_MODE_DEFAULT = -1;
+    public static final String TAG = "ImportDialogFragment";
 
     private static final String KEY_RES_ID = "resourceId";
     private static final String KEY_SUBSCRIPTION_ID = "subscriptionId";
-    private static final String ARG_CONTACTS_ARE_AVAILABLE = "CONTACTS_ARE_AVAILABLE";
 
-    private static int mExportMode = EXPORT_MODE_DEFAULT;
 
     private final String[] LOOKUP_PROJECTION = new String[] {
             Contacts.LOOKUP_KEY
@@ -81,15 +67,12 @@
     private SubscriptionManager mSubscriptionManager;
 
     /** Preferred way to show this dialog */
-    public static void show(FragmentManager fragmentManager, boolean contactsAreAvailable,
-                            Class callingActivity, int exportMode) {
-        final ImportExportDialogFragment fragment = new ImportExportDialogFragment();
+    public static void show(FragmentManager fragmentManager, Class callingActivity) {
+        final ImportDialogFragment fragment = new ImportDialogFragment();
         Bundle args = new Bundle();
-        args.putBoolean(ARG_CONTACTS_ARE_AVAILABLE, contactsAreAvailable);
         args.putString(VCardCommonArguments.ARG_CALLING_ACTIVITY, callingActivity.getName());
         fragment.setArguments(args);
-        fragment.show(fragmentManager, ImportExportDialogFragment.TAG);
-        mExportMode = exportMode;
+        fragment.show(fragmentManager, TAG);
     }
 
     @Override
@@ -108,7 +91,6 @@
         final Resources res = getActivity().getResources();
         final LayoutInflater dialogInflater = (LayoutInflater)getActivity()
                 .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
-        final boolean contactsAreAvailable = getArguments().getBoolean(ARG_CONTACTS_ARE_AVAILABLE);
         final String callingActivity = getArguments().getString(
                 VCardCommonArguments.ARG_CALLING_ACTIVITY);
 
@@ -162,24 +144,6 @@
             }
         }
 
-        if (res.getBoolean(R.bool.config_allow_export)) {
-            if (contactsAreAvailable) {
-                adapter.add(new AdapterEntry(getString(R.string.export_to_vcf_file),
-                        R.string.export_to_vcf_file));
-            }
-        }
-        if (res.getBoolean(R.bool.config_allow_share_contacts) && contactsAreAvailable) {
-            if (mExportMode == EXPORT_MODE_FAVORITES) {
-                // share favorite and frequently contacted contacts from Favorites tab
-                adapter.add(new AdapterEntry(getString(R.string.share_favorite_contacts),
-                        R.string.share_contacts));
-            } else {
-                // share "all" contacts (in groups selected in "Customize") from All tab for now
-                // TODO: change the string to share_visible_contacts if implemented
-                adapter.add(new AdapterEntry(getString(R.string.share_contacts),
-                        R.string.share_contacts));
-            }
-        }
 
         final DialogInterface.OnClickListener clickListener =
                 new DialogInterface.OnClickListener() {
@@ -190,24 +154,6 @@
                 if (resId == R.string.import_from_sim || resId == R.string.import_from_vcf_file) {
                         dismissDialog = handleImportRequest(resId,
                                 adapter.getItem(which).mSubscriptionId);
-                } else if (resId == R.string.export_to_vcf_file) {
-                    dismissDialog = true;
-                    final Intent exportIntent = new Intent(
-                            getActivity(), ExportVCardActivity.class);
-                    exportIntent.putExtra(VCardCommonArguments.ARG_CALLING_ACTIVITY,
-                            callingActivity);
-                    getActivity().startActivity(exportIntent);
-                } else if (resId == R.string.share_contacts) {
-                    dismissDialog = true;
-                    if (mExportMode == EXPORT_MODE_FAVORITES) {
-                        doShareFavoriteContacts();
-                    } else { // EXPORT_MODE_ALL_CONTACTS
-                        final Intent exportIntent = new Intent(
-                                getActivity(), ShareVCardActivity.class);
-                        exportIntent.putExtra(VCardCommonArguments.ARG_CALLING_ACTIVITY,
-                                callingActivity);
-                        getActivity().startActivity(exportIntent);
-                    }
                 } else {
                     dismissDialog = true;
                     Log.e(TAG, "Unexpected resource: "
@@ -219,61 +165,13 @@
             }
         };
         final TextView title = (TextView) View.inflate(getActivity(), R.layout.dialog_title, null);
-        title.setText(contactsAreAvailable
-                ? R.string.dialog_import_export
-                : R.string.dialog_import);
+        title.setText(R.string.dialog_import);
         return new AlertDialog.Builder(getActivity())
                 .setCustomTitle(title)
                 .setSingleChoiceItems(adapter, -1, clickListener)
                 .create();
     }
 
-    private void doShareFavoriteContacts() {
-        try{
-            final Cursor cursor = getActivity().getContentResolver().query(
-                    Contacts.CONTENT_STREQUENT_URI, LOOKUP_PROJECTION, null, null,
-                    Contacts.DISPLAY_NAME + " COLLATE NOCASE ASC");
-            if (cursor != null) {
-                try {
-                    if (!cursor.moveToFirst()) {
-                        Toast.makeText(getActivity(), R.string.no_contact_to_share,
-                                Toast.LENGTH_SHORT).show();
-                        return;
-                    }
-
-                    // Build multi-vcard Uri for sharing
-                    final StringBuilder uriListBuilder = new StringBuilder();
-                    int index = 0;
-                    do {
-                        if (index != 0)
-                            uriListBuilder.append(':');
-                        uriListBuilder.append(cursor.getString(0));
-                        index++;
-                    } while (cursor.moveToNext());
-                    final Uri uri = Uri.withAppendedPath(
-                            Contacts.CONTENT_MULTI_VCARD_URI,
-                            Uri.encode(uriListBuilder.toString()));
-
-                    final Intent intent = new Intent(Intent.ACTION_SEND);
-                    intent.setType(Contacts.CONTENT_VCARD_TYPE);
-                    intent.putExtra(Intent.EXTRA_STREAM, uri);
-                    ImplicitIntentsUtil.startActivityOutsideApp(getActivity(), intent);
-                } finally {
-                    cursor.close();
-                }
-            }
-        } catch (Exception e) {
-            Log.e(TAG, "Sharing contacts failed", e);
-            getActivity().runOnUiThread(new Runnable() {
-                @Override
-                public void run() {
-                    Toast.makeText(getContext(), R.string.share_contacts_failure,
-                            Toast.LENGTH_SHORT).show();
-                }
-            });
-        }
-    }
-
     /**
      * Handle "import from SIM" and "import from SD".
      *
diff --git a/src/com/android/contacts/common/list/ContactEntryListFragment.java b/src/com/android/contacts/common/list/ContactEntryListFragment.java
index 0c72d68..387b303 100644
--- a/src/com/android/contacts/common/list/ContactEntryListFragment.java
+++ b/src/com/android/contacts/common/list/ContactEntryListFragment.java
@@ -119,7 +119,7 @@
     private boolean mEnabled = true;
 
     private T mAdapter;
-    private View mView;
+    protected View mView;
     private ListView mListView;
 
     /**
diff --git a/src/com/android/contacts/common/list/ContactListFilter.java b/src/com/android/contacts/common/list/ContactListFilter.java
index 8e29308..c6baf41 100644
--- a/src/com/android/contacts/common/list/ContactListFilter.java
+++ b/src/com/android/contacts/common/list/ContactListFilter.java
@@ -16,6 +16,7 @@
 
 package com.android.contacts.common.list;
 
+import android.accounts.Account;
 import android.content.SharedPreferences;
 import android.graphics.drawable.Drawable;
 import android.net.Uri;
@@ -26,6 +27,10 @@
 
 import com.android.contacts.common.logging.ListEvent;
 import com.android.contacts.common.model.account.AccountWithDataSet;
+import com.android.contacts.common.model.account.GoogleAccountType;
+
+import java.util.ArrayList;
+import java.util.List;
 
 /**
  * Contact list filter parameters.
@@ -386,4 +391,59 @@
                 return "(unknown)";
         }
     }
+
+    /**
+     * Returns true if this ContactListFilter contains at least one Google account.
+     * (see {@link #isGoogleAccountType)
+     */
+    public boolean isSyncable(List<AccountWithDataSet> accounts) {
+        // TODO(samchen): Check FILTER_TYPE_CUSTOM
+        if (isGoogleAccountType() && filterType == ContactListFilter.FILTER_TYPE_ACCOUNT) {
+            return true;
+        }
+        if (filterType == ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS
+                || filterType == ContactListFilter.FILTER_TYPE_DEFAULT) {
+            if (accounts != null && accounts.size() > 0) {
+                // 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) {
+                        return true;
+                    }
+                }
+            }
+        }
+        return false;
+    }
+
+    /**
+     * Returns the Google accounts (see {@link #isGoogleAccountType) for this ContactListFilter.
+     */
+    public List<Account> getSyncableAccounts(List<AccountWithDataSet> accounts) {
+        final List<Account> syncableAccounts = new ArrayList<>();
+        // TODO(samchen): Check FILTER_TYPE_CUSTOM
+        if (isGoogleAccountType() && filterType == ContactListFilter.FILTER_TYPE_ACCOUNT) {
+            syncableAccounts.add(new Account(accountName, accountType));
+        } else if (filterType == ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS
+                || 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) {
+                        syncableAccounts.add(new Account(account.name, account.type));
+                    }
+                }
+            }
+        }
+        return syncableAccounts;
+    }
+
+    /**
+     * Returns true if this ContactListFilter is Google account type. (i.e. where
+     * accountType = "com.google" and dataSet = null)
+     */
+    public boolean isGoogleAccountType() {
+        return GoogleAccountType.ACCOUNT_TYPE.equals(accountType) && dataSet == null;
+    }
 }
diff --git a/src/com/android/contacts/common/list/DefaultContactListAdapter.java b/src/com/android/contacts/common/list/DefaultContactListAdapter.java
index cf3f6f6..faade9e 100644
--- a/src/com/android/contacts/common/list/DefaultContactListAdapter.java
+++ b/src/com/android/contacts/common/list/DefaultContactListAdapter.java
@@ -31,6 +31,7 @@
 import android.text.TextUtils;
 import android.view.View;
 
+import com.android.contacts.common.Experiments;
 import com.android.contacts.common.compat.ContactsCompat;
 import com.android.contacts.common.model.account.AccountWithDataSet;
 import com.android.contacts.common.preference.ContactsPreferences;
@@ -115,6 +116,13 @@
                 loader.setUri(builder.build());
                 loader.setProjection(getProjection(true));
                 sortOrder = STREQUENT_SORT;
+                if (Flags.getInstance(getContext()).getBoolean(Experiments.SEARCH_YENTA)
+                        && loader instanceof FavoritesAndContactsLoader
+                        && directoryId == Directory.DEFAULT) {
+                    final FavoritesAndContactsLoader favoritesAndContactsLoader =
+                            (FavoritesAndContactsLoader) loader;
+                    favoritesAndContactsLoader.setAutocompleteQuery(query);
+                }
             }
         } else {
             final ContactListFilter filter = getFilter();
diff --git a/src/com/android/contacts/common/list/FavoritesAndContactsLoader.java b/src/com/android/contacts/common/list/FavoritesAndContactsLoader.java
index d1ae911..c679110 100644
--- a/src/com/android/contacts/common/list/FavoritesAndContactsLoader.java
+++ b/src/com/android/contacts/common/list/FavoritesAndContactsLoader.java
@@ -19,29 +19,33 @@
 import android.content.CursorLoader;
 import android.database.Cursor;
 import android.database.MergeCursor;
-import android.net.Uri;
 import android.os.Bundle;
 import android.provider.ContactsContract.Contacts;
+import android.util.Log;
 
+import com.android.contactsbind.ObjectFactory;
+import com.android.contactsbind.search.AutocompleteHelper;
 import com.google.common.collect.Lists;
 
 import java.util.List;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
 
 /**
  * A loader for use in the default contact list, which will also query for favorite contacts
  * if configured to do so.
  */
-public class FavoritesAndContactsLoader extends CursorLoader {
+public class FavoritesAndContactsLoader extends CursorLoader implements AutocompleteHelper.Listener {
+
+    private static final int AUTOCOMPLETE_TIMEOUT_MS = 1000;
 
     private boolean mLoadFavorites;
 
     private String[] mProjection;
 
-    private Uri mExtraUri;
-    private String[] mExtraProjection;
-    private String mExtraSelection;
-    private String[] mExtraSelectionArgs;
-    private boolean mMergeExtraContactsAfterPrimary;
+    private String mAutocompleteQuery;
+    private CountDownLatch mAutocompleteLatch = new CountDownLatch(1);
+    private Cursor mAutocompleteCursor;
 
     public FavoritesAndContactsLoader(Context context) {
         super(context);
@@ -52,54 +56,51 @@
         mLoadFavorites = flag;
     }
 
+    public void setAutocompleteQuery(String autocompleteQuery) {
+        mAutocompleteQuery = autocompleteQuery;
+    }
+
     public void setProjection(String[] projection) {
         super.setProjection(projection);
         mProjection = projection;
     }
 
-    /** Configure an extra query and merge results in before the primary results. */
-    public void setLoadExtraContactsFirst(Uri uri, String[] projection) {
-        mExtraUri = uri;
-        mExtraProjection = projection;
-        mMergeExtraContactsAfterPrimary = false;
-    }
-
-    /** Configure an extra query and merge results in after the primary results. */
-    public void setLoadExtraContactsLast(Uri uri, String[] projection, String selection,
-            String[] selectionArgs) {
-        mExtraUri = uri;
-        mExtraProjection = projection;
-        mExtraSelection = selection;
-        mExtraSelectionArgs = selectionArgs;
-        mMergeExtraContactsAfterPrimary = true;
-    }
-
-    private boolean canLoadExtraContacts() {
-        return mExtraUri != null && mExtraProjection != null;
-    }
-
     @Override
     public Cursor loadInBackground() {
         List<Cursor> cursors = Lists.newArrayList();
         if (mLoadFavorites) {
             cursors.add(loadFavoritesContacts());
         }
-        if (canLoadExtraContacts() && !mMergeExtraContactsAfterPrimary) {
-            cursors.add(loadExtraContacts());
+
+        if (mAutocompleteQuery != null) {
+            final AutocompleteHelper autocompleteHelper =
+                    ObjectFactory.getAutocompleteHelper(getContext());
+            if (autocompleteHelper != null) {
+                autocompleteHelper.setListener(this);
+                autocompleteHelper.setProjection(mProjection);
+                autocompleteHelper.setQuery(mAutocompleteQuery);
+                try {
+                    if (!mAutocompleteLatch.await(AUTOCOMPLETE_TIMEOUT_MS, TimeUnit.MILLISECONDS)) {
+                        logw("Timeout expired before receiving autocompletions");
+                    }
+                } catch (InterruptedException e) {
+                    logw("Interrupted while waiting for autocompletions");
+                }
+                if (mAutocompleteCursor != null) {
+                    cursors.add(mAutocompleteCursor);
+                    // TODO: exclude these results from the main loader results, see b/30742359
+                }
+            }
         }
-        // ContactsCursor.loadInBackground() can return null; MergeCursor
-        // correctly handles null cursors.
-        Cursor cursor = null;
-        try {
-            cursor = super.loadInBackground();
-        } catch (NullPointerException | SecurityException e) {
-            // Ignore NPEs and SecurityExceptions thrown by providers
+
+        // TODO: if the autocomplete experiment in on, only show those results even if they're empty
+        final Cursor contactsCursor = mAutocompleteQuery == null ? loadContacts() : null;
+        if (mAutocompleteQuery == null) {
+            cursors.add(contactsCursor);
         }
-        final Cursor contactsCursor = cursor;
-        cursors.add(contactsCursor);
-        if (canLoadExtraContacts() && mMergeExtraContactsAfterPrimary) {
-            cursors.add(loadExtraContacts());
-        }
+        // Guard against passing an empty array to the MergeCursor constructor
+        if (cursors.isEmpty()) cursors.add(null);
+
         return new MergeCursor(cursors.toArray(new Cursor[cursors.size()])) {
             @Override
             public Bundle getExtras() {
@@ -109,9 +110,15 @@
         };
     }
 
-    private Cursor loadExtraContacts() {
-        return getContext().getContentResolver().query(
-                mExtraUri, mExtraProjection, mExtraSelection, mExtraSelectionArgs, null);
+    private Cursor loadContacts() {
+        // ContactsCursor.loadInBackground() can return null; MergeCursor
+        // correctly handles null cursors.
+        try {
+            return super.loadInBackground();
+        } catch (NullPointerException | SecurityException e) {
+            // Ignore NPEs and SecurityExceptions thrown by providers
+        }
+        return null;
     }
 
     private Cursor loadFavoritesContacts() {
@@ -119,4 +126,20 @@
                 Contacts.CONTENT_URI, mProjection, Contacts.STARRED + "=?", new String[]{"1"},
                 getSortOrder());
     }
+
+    @Override
+    public void onAutocompletesAvailable(Cursor cursor) {
+        if (cursor == null || cursor.getCount() == 0) {
+            logw("Ignoring null or empty autocompletions");
+        } else {
+            mAutocompleteCursor = cursor;
+            mAutocompleteLatch.countDown();
+        }
+    }
+
+    private static void logw(String message) {
+        if (Log.isLoggable(AutocompleteHelper.TAG, Log.WARN)) {
+            Log.w(AutocompleteHelper.TAG, message);
+        }
+    }
 }
diff --git a/src/com/android/contacts/common/list/MultiSelectEntryContactListAdapter.java b/src/com/android/contacts/common/list/MultiSelectEntryContactListAdapter.java
index 9ab6e1c..dbfd70e 100644
--- a/src/com/android/contacts/common/list/MultiSelectEntryContactListAdapter.java
+++ b/src/com/android/contacts/common/list/MultiSelectEntryContactListAdapter.java
@@ -113,9 +113,6 @@
      * Not guaranteed to work with all configurations of this adapter.
      */
     public void setDisplayCheckBoxes(boolean showCheckBoxes) {
-        if (!mDisplayCheckBoxes && showCheckBoxes) {
-            setSelectedContactIds(new TreeSet<Long>());
-        }
         mDisplayCheckBoxes = showCheckBoxes;
         notifyDataSetChanged();
         if (mSelectedContactsListener != null) {
diff --git a/src/com/android/contacts/common/list/ViewPagerTabStrip.java b/src/com/android/contacts/common/list/ViewPagerTabStrip.java
deleted file mode 100644
index c8ae21a..0000000
--- a/src/com/android/contacts/common/list/ViewPagerTabStrip.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * Copyright (C) 2014 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.list;
-
-import android.content.Context;
-import android.content.res.Resources;
-import android.graphics.Canvas;
-import android.graphics.Paint;
-import android.util.AttributeSet;
-import android.view.View;
-import android.widget.LinearLayout;
-
-import com.android.contacts.common.R;
-
-public class ViewPagerTabStrip extends LinearLayout {
-    private int mSelectedUnderlineThickness;
-    private final Paint mSelectedUnderlinePaint;
-
-    private int mIndexForSelection;
-    private float mSelectionOffset;
-
-    public ViewPagerTabStrip(Context context) {
-        this(context, null);
-    }
-
-    public ViewPagerTabStrip(Context context, AttributeSet attrs) {
-        super(context, attrs);
-
-        final Resources res = context.getResources();
-
-        mSelectedUnderlineThickness =
-                res.getDimensionPixelSize(R.dimen.tab_selected_underline_height);
-        int underlineColor = res.getColor(R.color.tab_selected_underline_color);
-        int backgroundColor = res.getColor(R.color.actionbar_background_color);
-
-        mSelectedUnderlinePaint = new Paint();
-        mSelectedUnderlinePaint.setColor(underlineColor);
-
-        setBackgroundColor(backgroundColor);
-        setWillNotDraw(false);
-    }
-
-    /**
-     * Notifies this view that view pager has been scrolled. We save the tab index
-     * and selection offset for interpolating the position and width of selection
-     * underline.
-     */
-    void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
-        mIndexForSelection = position;
-        mSelectionOffset = positionOffset;
-        invalidate();
-    }
-
-    @Override
-    protected void onDraw(Canvas canvas) {
-        int childCount = getChildCount();
-
-        // Thick colored underline below the current selection
-        if (childCount > 0) {
-            View selectedTitle = getChildAt(mIndexForSelection);
-
-            if (selectedTitle == null) {
-                // The view pager's tab count changed but we weren't notified yet. Ignore this draw
-                // pass, when we get a new selection we will update and draw the selection strip in
-                // the correct place.
-                return;
-            }
-            int selectedLeft = selectedTitle.getLeft();
-            int selectedRight = selectedTitle.getRight();
-            final boolean isRtl = isRtl();
-            final boolean hasNextTab = isRtl ? mIndexForSelection > 0
-                    : (mIndexForSelection < (getChildCount() - 1));
-            if ((mSelectionOffset > 0.0f) && hasNextTab) {
-                // Draw the selection partway between the tabs
-                View nextTitle = getChildAt(mIndexForSelection + (isRtl ? -1 : 1));
-                int nextLeft = nextTitle.getLeft();
-                int nextRight = nextTitle.getRight();
-
-                selectedLeft = (int) (mSelectionOffset * nextLeft +
-                        (1.0f - mSelectionOffset) * selectedLeft);
-                selectedRight = (int) (mSelectionOffset * nextRight +
-                        (1.0f - mSelectionOffset) * selectedRight);
-            }
-
-            int height = getHeight();
-            canvas.drawRect(selectedLeft, height - mSelectedUnderlineThickness,
-                    selectedRight, height, mSelectedUnderlinePaint);
-        }
-    }
-
-    private boolean isRtl() {
-        return getLayoutDirection() == View.LAYOUT_DIRECTION_RTL;
-    }
-}
\ No newline at end of file
diff --git a/src/com/android/contacts/common/list/ViewPagerTabs.java b/src/com/android/contacts/common/list/ViewPagerTabs.java
deleted file mode 100644
index 48de6af..0000000
--- a/src/com/android/contacts/common/list/ViewPagerTabs.java
+++ /dev/null
@@ -1,315 +0,0 @@
-/*
- * Copyright (C) 2014 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.list;
-
-import android.content.Context;
-import android.content.res.ColorStateList;
-import android.content.res.TypedArray;
-import android.graphics.Outline;
-import android.support.v4.view.PagerAdapter;
-import android.support.v4.view.ViewPager;
-import android.util.AttributeSet;
-import android.util.TypedValue;
-import android.view.Gravity;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewOutlineProvider;
-import android.widget.FrameLayout;
-import android.widget.HorizontalScrollView;
-import android.widget.LinearLayout;
-import android.widget.TextView;
-import android.widget.Toast;
-
-import com.android.contacts.common.R;
-import com.android.contacts.common.compat.CompatUtils;
-
-/**
- * Lightweight implementation of ViewPager tabs. This looks similar to traditional actionBar tabs,
- * but allows for the view containing the tabs to be placed anywhere on screen. Text-related
- * attributes can also be assigned in XML - these will get propogated to the child TextViews
- * automatically.
- */
-public class ViewPagerTabs extends HorizontalScrollView implements ViewPager.OnPageChangeListener {
-
-    ViewPager mPager;
-    private ViewPagerTabStrip mTabStrip;
-
-    /**
-     * Linearlayout that will contain the TextViews serving as tabs. This is the only child
-     * of the parent HorizontalScrollView.
-     */
-    final int mTextStyle;
-    final ColorStateList mTextColor;
-    final int mTextSize;
-    final boolean mTextAllCaps;
-    int mPrevSelected = -1;
-    int mSidePadding;
-
-    private int[] mTabIcons;
-    // For displaying the unread count next to the tab icon.
-    private int[] mUnreadCounts;
-
-    private static final ViewOutlineProvider VIEW_BOUNDS_OUTLINE_PROVIDER;
-    static {
-        if (CompatUtils.isLollipopCompatible()) {
-            VIEW_BOUNDS_OUTLINE_PROVIDER = new ViewOutlineProvider() {
-                @Override
-                public void getOutline(View view, Outline outline) {
-                    outline.setRect(0, 0, view.getWidth(), view.getHeight());
-                }
-            };
-        } else {
-            VIEW_BOUNDS_OUTLINE_PROVIDER = null;
-        }
-    }
-
-    private static final int TAB_SIDE_PADDING_IN_DPS = 10;
-
-    // TODO: This should use <declare-styleable> in the future
-    private static final int[] ATTRS = new int[] {
-        android.R.attr.textSize,
-        android.R.attr.textStyle,
-        android.R.attr.textColor,
-        android.R.attr.textAllCaps
-    };
-
-    /**
-     * Simulates actionbar tab behavior by showing a toast with the tab title when long clicked.
-     */
-    private class OnTabLongClickListener implements OnLongClickListener {
-        final int mPosition;
-
-        public OnTabLongClickListener(int position) {
-            mPosition = position;
-        }
-
-        @Override
-        public boolean onLongClick(View v) {
-            final int[] screenPos = new int[2];
-            getLocationOnScreen(screenPos);
-
-            final Context context = getContext();
-            final int width = getWidth();
-            final int height = getHeight();
-            final int screenWidth = context.getResources().getDisplayMetrics().widthPixels;
-
-            Toast toast = Toast.makeText(context, mPager.getAdapter().getPageTitle(mPosition),
-                    Toast.LENGTH_SHORT);
-
-            // Show the toast under the tab
-            toast.setGravity(Gravity.TOP | Gravity.CENTER_HORIZONTAL,
-                    (screenPos[0] + width / 2) - screenWidth / 2, screenPos[1] + height);
-
-            toast.show();
-            return true;
-        }
-    }
-
-    public ViewPagerTabs(Context context) {
-        this(context, null);
-    }
-
-    public ViewPagerTabs(Context context, AttributeSet attrs) {
-        this(context, attrs, 0);
-    }
-
-    public ViewPagerTabs(Context context, AttributeSet attrs, int defStyle) {
-        super(context, attrs, defStyle);
-        setFillViewport(true);
-
-        mSidePadding = (int) (getResources().getDisplayMetrics().density * TAB_SIDE_PADDING_IN_DPS);
-
-        final TypedArray a = context.obtainStyledAttributes(attrs, ATTRS);
-        mTextSize = a.getDimensionPixelSize(0, 0);
-        mTextStyle = a.getInt(1, 0);
-        mTextColor = a.getColorStateList(2);
-        mTextAllCaps = a.getBoolean(3, false);
-
-        mTabStrip = new ViewPagerTabStrip(context);
-        addView(mTabStrip,
-                new FrameLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT));
-        a.recycle();
-
-        if (CompatUtils.isLollipopCompatible()) {
-            // enable shadow casting from view bounds
-            setOutlineProvider(VIEW_BOUNDS_OUTLINE_PROVIDER);
-        }
-    }
-
-    public void setViewPager(ViewPager viewPager) {
-        mPager = viewPager;
-        addTabs(mPager.getAdapter());
-    }
-
-    /**
-     * Set the tab icons and initialize an array for unread counts the same length as the icon
-     * array.
-     *
-     * @param tabIcons An array representing the tab icons in order.
-     */
-    public void configureTabIcons(int[] tabIcons) {
-        mTabIcons = tabIcons;
-        mUnreadCounts = new int[tabIcons.length];
-    }
-
-    public void setUnreadCount(int count, int position) {
-        if (mUnreadCounts == null || position >= mUnreadCounts.length) {
-            return;
-        }
-        mUnreadCounts[position] = count;
-    }
-
-    private void addTabs(PagerAdapter adapter) {
-        mTabStrip.removeAllViews();
-
-        final int count = adapter.getCount();
-        for (int i = 0; i < count; i++) {
-            addTab(adapter.getPageTitle(i), i);
-        }
-    }
-
-    private void addTab(CharSequence tabTitle, final int position) {
-        View tabView;
-        if (mTabIcons != null && position < mTabIcons.length) {
-            View layout = LayoutInflater.from(getContext()).inflate(
-                    R.layout.unread_count_tab, null);
-            View iconView = layout.findViewById(R.id.icon);
-            iconView.setBackgroundResource(mTabIcons[position]);
-            iconView.setContentDescription(tabTitle);
-            TextView textView = (TextView) layout.findViewById(R.id.count);
-            if (mUnreadCounts != null && mUnreadCounts[position] > 0) {
-                textView.setText(Integer.toString(mUnreadCounts[position]));
-                textView.setVisibility(View.VISIBLE);
-                iconView.setContentDescription(getResources().getQuantityString(
-                        R.plurals.tab_title_with_unread_items,
-                        mUnreadCounts[position],
-                        tabTitle.toString(),
-                        mUnreadCounts[position]));
-            } else {
-                textView.setVisibility(View.INVISIBLE);
-                iconView.setContentDescription(tabTitle);
-            }
-            tabView = layout;
-        } else {
-            final TextView textView = new TextView(getContext());
-            textView.setText(tabTitle);
-            textView.setBackgroundResource(R.drawable.view_pager_tab_background);
-
-            // Assign various text appearance related attributes to child views.
-            if (mTextStyle > 0) {
-                textView.setTypeface(textView.getTypeface(), mTextStyle);
-            }
-            if (mTextSize > 0) {
-                textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, mTextSize);
-            }
-            if (mTextColor != null) {
-                textView.setTextColor(mTextColor);
-            }
-            textView.setAllCaps(mTextAllCaps);
-            textView.setGravity(Gravity.CENTER);
-
-            tabView = textView;
-        }
-
-        tabView.setOnClickListener(new OnClickListener() {
-            @Override
-            public void onClick(View v) {
-                mPager.setCurrentItem(getRtlPosition(position));
-            }
-        });
-
-        tabView.setOnLongClickListener(new OnTabLongClickListener(position));
-
-        tabView.setPadding(mSidePadding, 0, mSidePadding, 0);
-
-        mTabStrip.addView(tabView, position, new LinearLayout.LayoutParams(
-                LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT, 1));
-
-        // Default to the first child being selected
-        if (position == 0) {
-            mPrevSelected = 0;
-            tabView.setSelected(true);
-        }
-    }
-
-    /**
-     * Remove a tab at a certain index.
-     *
-     * @param index The index of the tab view we wish to remove.
-     */
-    public void removeTab(int index) {
-        View view = mTabStrip.getChildAt(index);
-        if (view != null) {
-            mTabStrip.removeView(view);
-        }
-    }
-
-    /**
-     * Refresh a tab at a certain index by removing it and reconstructing it.
-     *
-     * @param index The index of the tab view we wish to update.
-     */
-    public void updateTab(int index) {
-        removeTab(index);
-
-        if (index < mPager.getAdapter().getCount()) {
-            addTab(mPager.getAdapter().getPageTitle(index), index);
-        }
-    }
-
-    @Override
-    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
-        position = getRtlPosition(position);
-        int tabStripChildCount = mTabStrip.getChildCount();
-        if ((tabStripChildCount == 0) || (position < 0) || (position >= tabStripChildCount)) {
-            return;
-        }
-
-        mTabStrip.onPageScrolled(position, positionOffset, positionOffsetPixels);
-    }
-
-    @Override
-    public void onPageSelected(int position) {
-        position = getRtlPosition(position);
-        int tabStripChildCount = mTabStrip.getChildCount();
-        if ((tabStripChildCount == 0) || (position < 0) || (position >= tabStripChildCount)) {
-            return;
-        }
-
-        if (mPrevSelected >= 0 && mPrevSelected < tabStripChildCount) {
-            mTabStrip.getChildAt(mPrevSelected).setSelected(false);
-        }
-        final View selectedChild = mTabStrip.getChildAt(position);
-        selectedChild.setSelected(true);
-
-        // Update scroll position
-        final int scrollPos = selectedChild.getLeft() - (getWidth() - selectedChild.getWidth()) / 2;
-        smoothScrollTo(scrollPos, 0);
-        mPrevSelected = position;
-    }
-
-    @Override
-    public void onPageScrollStateChanged(int state) {
-    }
-
-    private int getRtlPosition(int position) {
-        if (getLayoutDirection() == View.LAYOUT_DIRECTION_RTL) {
-            return mTabStrip.getChildCount() - 1 - position;
-        }
-        return position;
-    }
-}
-
diff --git a/src/com/android/contacts/common/model/AccountTypeManager.java b/src/com/android/contacts/common/model/AccountTypeManager.java
index a083219..cf0fb13 100644
--- a/src/com/android/contacts/common/model/AccountTypeManager.java
+++ b/src/com/android/contacts/common/model/AccountTypeManager.java
@@ -580,7 +580,7 @@
             boolean syncable =
                 ContentResolver.getIsSyncable(account, ContactsContract.AUTHORITY) > 0;
 
-            if (syncable) {
+            if (syncable || GoogleAccountType.ACCOUNT_TYPE.equals(account.type)) {
                 List<AccountType> accountTypes = accountTypesByType.get(account.type);
                 if (accountTypes != null) {
                     // Add an account-with-data-set entry for each account type that is
diff --git a/src/com/android/contacts/common/model/Contact.java b/src/com/android/contacts/common/model/Contact.java
index 2187b1d..c84ff2a 100644
--- a/src/com/android/contacts/common/model/Contact.java
+++ b/src/com/android/contacts/common/model/Contact.java
@@ -25,6 +25,7 @@
 import android.provider.ContactsContract.DisplayNameSources;
 
 import com.android.contacts.common.model.account.AccountType;
+import com.android.contacts.common.model.account.SimAccountType;
 import com.android.contacts.common.util.DataStatus;
 import com.android.contacts.group.GroupMetaData;
 
@@ -471,6 +472,19 @@
         return mIsUserProfile;
     }
 
+    /**
+     * @return true if all the raw contacts are from SIM accounts, and false otherwise.
+     */
+    public boolean areAllRawContactsSimAccounts(final Context context) {
+        if (getRawContacts() == null) return false;
+
+        for (RawContact rawContact : getRawContacts()) {
+            final AccountType accountType = rawContact.getAccountType(context);
+            if (!(accountType instanceof SimAccountType)) return false;
+        }
+        return true;
+    }
+
     @Override
     public String toString() {
         return "{requested=" + mRequestedUri + ",lookupkey=" + mLookupKey +
diff --git a/src/com/android/contacts/common/model/RawContactDelta.java b/src/com/android/contacts/common/model/RawContactDelta.java
index 85b0930..afa4a13 100644
--- a/src/com/android/contacts/common/model/RawContactDelta.java
+++ b/src/com/android/contacts/common/model/RawContactDelta.java
@@ -30,11 +30,9 @@
 import android.util.Log;
 
 import com.android.contacts.common.compat.CompatUtils;
-import com.android.contacts.common.model.AccountTypeManager;
-import com.android.contacts.common.model.BuilderWrapper;
-import com.android.contacts.common.model.CPOWrapper;
-import com.android.contacts.common.model.ValuesDelta;
 import com.android.contacts.common.model.account.AccountType;
+import com.android.contacts.common.model.account.AccountWithDataSet;
+
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
 
@@ -236,6 +234,10 @@
         return manager.getAccountType(getAccountType(), getDataSet());
     }
 
+    public AccountWithDataSet getAccountWithDataSet() {
+        return new AccountWithDataSet(getAccountName(), getAccountType(), getDataSet());
+    }
+
     public boolean isVisible() {
         return getValues().isVisible();
     }
diff --git a/src/com/android/contacts/common/model/RawContactModifier.java b/src/com/android/contacts/common/model/RawContactModifier.java
index 3cd200c..be5f8f2 100644
--- a/src/com/android/contacts/common/model/RawContactModifier.java
+++ b/src/com/android/contacts/common/model/RawContactModifier.java
@@ -694,7 +694,7 @@
                 final Integer type = values.getAsInteger(Phone.TYPE);
                 // If the provided phone number provides a custom phone type but not a label,
                 // replace it with mobile (by default) to avoid the "Enter custom label" from
-                // popping up immediately upon entering the ContactEditorFragment
+                // popping up immediately upon entering the CompactContactEditorFragment
                 if (type != null && type == Phone.TYPE_CUSTOM &&
                         TextUtils.isEmpty(values.getAsString(Phone.LABEL))) {
                     values.put(Phone.TYPE, Phone.TYPE_MOBILE);
diff --git a/src/com/android/contacts/common/preference/ContactsPreferenceActivity.java b/src/com/android/contacts/common/preference/ContactsPreferenceActivity.java
index dbf3cb9..f544c7b 100644
--- a/src/com/android/contacts/common/preference/ContactsPreferenceActivity.java
+++ b/src/com/android/contacts/common/preference/ContactsPreferenceActivity.java
@@ -40,15 +40,11 @@
     private static final String TAG_DISPLAY_OPTIONS = "display_options";
 
     private String mNewLocalProfileExtra;
-    private String mPreviousScreenExtra;
-    private int mModeFullyExpanded;
     private boolean mAreContactsAvailable;
 
     private ProviderStatusWatcher mProviderStatusWatcher;
 
     public static final String EXTRA_NEW_LOCAL_PROFILE = "newLocalProfile";
-    public static final String EXTRA_MODE_FULLY_EXPANDED = "modeFullyExpanded";
-    public static final String EXTRA_PREVIOUS_SCREEN_TYPE = "previousScreenType";
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
@@ -62,16 +58,12 @@
         mProviderStatusWatcher = ProviderStatusWatcher.getInstance(this);
 
         mNewLocalProfileExtra = getIntent().getStringExtra(EXTRA_NEW_LOCAL_PROFILE);
-        mModeFullyExpanded = getIntent().getIntExtra(EXTRA_MODE_FULLY_EXPANDED,
-                QuickContact.MODE_LARGE);
-        mPreviousScreenExtra = getIntent().getStringExtra(EXTRA_PREVIOUS_SCREEN_TYPE);
         final int providerStatus = mProviderStatusWatcher.getProviderStatus();
         mAreContactsAvailable = providerStatus == ProviderStatus.STATUS_NORMAL;
 
         if (savedInstanceState == null) {
             final DisplayOptionsPreferenceFragment fragment = DisplayOptionsPreferenceFragment
-                    .newInstance(mNewLocalProfileExtra, mPreviousScreenExtra, mModeFullyExpanded,
-                            mAreContactsAvailable);
+                    .newInstance(mNewLocalProfileExtra, mAreContactsAvailable);
             getFragmentManager().beginTransaction()
                     .replace(android.R.id.content, fragment, TAG_DISPLAY_OPTIONS)
                     .commit();
diff --git a/src/com/android/contacts/common/preference/DisplayOptionsPreferenceFragment.java b/src/com/android/contacts/common/preference/DisplayOptionsPreferenceFragment.java
index 6593619..89208a8 100644
--- a/src/com/android/contacts/common/preference/DisplayOptionsPreferenceFragment.java
+++ b/src/com/android/contacts/common/preference/DisplayOptionsPreferenceFragment.java
@@ -39,7 +39,8 @@
 import com.android.contacts.common.R;
 import com.android.contacts.common.compat.TelecomManagerUtil;
 import com.android.contacts.common.compat.TelephonyManagerCompat;
-import com.android.contacts.common.interactions.ImportExportDialogFragment;
+import com.android.contacts.common.interactions.ImportDialogFragment;
+import com.android.contacts.common.interactions.ExportDialogFragment;
 import com.android.contacts.common.list.ContactListFilter;
 import com.android.contacts.common.list.ContactListFilterController;
 import com.android.contacts.common.logging.ScreenEvent.ScreenType;
@@ -60,9 +61,7 @@
     private static final int REQUEST_CODE_CUSTOM_CONTACTS_FILTER = 0;
 
     private static final String ARG_CONTACTS_AVAILABLE = "are_contacts_available";
-    private static final String ARG_MODE_FULLY_EXPANDED = "mode_fully_expanded";
     private static final String ARG_NEW_LOCAL_PROFILE = "new_local_profile";
-    private static final String ARG_PREVIOUS_SCREEN = "previous_screen";
 
     private static final String KEY_ABOUT = "about";
     private static final String KEY_ACCOUNTS = "accounts";
@@ -70,7 +69,8 @@
     private static final String KEY_BLOCKED_NUMBERS = "blockedNumbers";
     private static final String KEY_DISPLAY_ORDER = "displayOrder";
     private static final String KEY_CUSTOM_CONTACTS_FILTER = "customContactsFilter";
-    private static final String KEY_IMPORT_EXPORT = "importExport";
+    private static final String KEY_IMPORT = "import";
+    private static final String KEY_EXPORT = "export";
     private static final String KEY_MY_INFO = "myInfo";
     private static final String KEY_SORT_ORDER = "sortOrder";
 
@@ -113,8 +113,6 @@
     }
 
     private String mNewLocalProfileExtra;
-    private String mPreviousScreenExtra;
-    private int mModeFullyExpanded;
     private boolean mAreContactsAvailable;
 
     private boolean mHasProfile;
@@ -147,12 +145,10 @@
     };
 
     public static DisplayOptionsPreferenceFragment newInstance(String newLocalProfileExtra,
-            String previousScreenExtra, int modeFullyExpanded, boolean areContactsAvailable) {
+            boolean areContactsAvailable) {
         final DisplayOptionsPreferenceFragment fragment = new DisplayOptionsPreferenceFragment();
         final Bundle args = new Bundle();
         args.putString(ARG_NEW_LOCAL_PROFILE, newLocalProfileExtra);
-        args.putString(ARG_PREVIOUS_SCREEN, previousScreenExtra);
-        args.putInt(ARG_MODE_FULLY_EXPANDED, modeFullyExpanded);
         args.putBoolean(ARG_CONTACTS_AVAILABLE, areContactsAvailable);
         fragment.setArguments(args);
         return fragment;
@@ -175,22 +171,25 @@
         // Load the preferences from an XML resource
         addPreferencesFromResource(R.xml.preference_display_options);
 
-        removeUnsupportedPreferences();
-        addExtraPreferences();
-
         final Bundle args = getArguments();
         mNewLocalProfileExtra = args.getString(ARG_NEW_LOCAL_PROFILE);
-        mPreviousScreenExtra = args.getString(ARG_PREVIOUS_SCREEN);
-        mModeFullyExpanded = args.getInt(ARG_MODE_FULLY_EXPANDED);
         mAreContactsAvailable = args.getBoolean(ARG_CONTACTS_AVAILABLE);
 
+        removeUnsupportedPreferences();
+        addExtraPreferences();
+
         mMyInfoPreference = findPreference(KEY_MY_INFO);
 
         final Preference accountsPreference = findPreference(KEY_ACCOUNTS);
         accountsPreference.setOnPreferenceClickListener(this);
 
-        final Preference importExportPreference = findPreference(KEY_IMPORT_EXPORT);
-        importExportPreference.setOnPreferenceClickListener(this);
+        final Preference importPreference = findPreference(KEY_IMPORT);
+        importPreference.setOnPreferenceClickListener(this);
+
+        final Preference exportPreference = findPreference(KEY_EXPORT);
+        if (exportPreference != null) {
+            exportPreference.setOnPreferenceClickListener(this);
+        }
 
         final Preference blockedNumbersPreference = findPreference(KEY_BLOCKED_NUMBERS);
         if (blockedNumbersPreference != null) {
@@ -248,6 +247,10 @@
         if (!showBlockedNumbers) {
             getPreferenceScreen().removePreference(findPreference(KEY_BLOCKED_NUMBERS));
         }
+
+        if (!mAreContactsAvailable) {
+            getPreferenceScreen().removePreference(findPreference(KEY_EXPORT));
+        }
     }
 
     private void addExtraPreferences() {
@@ -294,23 +297,22 @@
         if (KEY_ABOUT.equals(prefKey)) {
             ((ContactsPreferenceActivity) getActivity()).showAboutFragment();
             return true;
-        } else if (KEY_IMPORT_EXPORT.equals(prefKey)) {
-            ImportExportDialogFragment.show(getFragmentManager(), mAreContactsAvailable,
-                    ContactsPreferenceActivity.class,
-                    ImportExportDialogFragment.EXPORT_MODE_ALL_CONTACTS);
+        } else if (KEY_IMPORT.equals(prefKey)) {
+            ImportDialogFragment.show(getFragmentManager(), ContactsPreferenceActivity.class);
+            return true;
+        } else if (KEY_EXPORT.equals(prefKey)) {
+            ExportDialogFragment.show(getFragmentManager(), ContactsPreferenceActivity.class,
+                    ExportDialogFragment.EXPORT_MODE_ALL_CONTACTS);
             return true;
         } else if (KEY_MY_INFO.equals(prefKey)) {
-            final Intent intent;
             if (mHasProfile) {
                 final Uri uri = ContentUris.withAppendedId(Contacts.CONTENT_URI, mProfileContactId);
-                intent = ImplicitIntentsUtil.composeQuickContactIntent(getContext(), uri,
-                        mModeFullyExpanded);
-                intent.putExtra(mPreviousScreenExtra, ScreenType.ME_CONTACT);
+                ImplicitIntentsUtil.startQuickContact(getActivity(), uri, ScreenType.ME_CONTACT);
             } else {
-                intent = new Intent(Intent.ACTION_INSERT, Contacts.CONTENT_URI);
+                final Intent intent = new Intent(Intent.ACTION_INSERT, Contacts.CONTENT_URI);
                 intent.putExtra(mNewLocalProfileExtra, true);
+                ImplicitIntentsUtil.startActivityInApp(getActivity(), intent);
             }
-            ImplicitIntentsUtil.startActivityInApp(getActivity(), intent);
             return true;
         } else if (KEY_ACCOUNTS.equals(prefKey)) {
             ImplicitIntentsUtil.startActivityOutsideApp(getContext(),
diff --git a/src/com/android/contacts/common/util/AccountFilterUtil.java b/src/com/android/contacts/common/util/AccountFilterUtil.java
index 88c6bed..2e57c65 100644
--- a/src/com/android/contacts/common/util/AccountFilterUtil.java
+++ b/src/com/android/contacts/common/util/AccountFilterUtil.java
@@ -16,19 +16,24 @@
 
 package com.android.contacts.common.util;
 
+import android.accounts.Account;
 import android.app.Activity;
 import android.app.Fragment;
+import android.content.ActivityNotFoundException;
 import android.content.AsyncTaskLoader;
 import android.content.Context;
 import android.content.Intent;
 import android.content.SharedPreferences;
 import android.database.Cursor;
 import android.graphics.drawable.Drawable;
-import android.provider.ContactsContract;
+import android.provider.ContactsContract.Contacts;
+import android.provider.ContactsContract.Intents;
 import android.text.TextUtils;
 import android.util.Log;
+import android.widget.Toast;
 
-import com.android.contacts.common.R;
+import com.android.contacts.R;
+import com.android.contacts.activities.CompactContactEditorActivity;
 import com.android.contacts.common.list.AccountFilterActivity;
 import com.android.contacts.common.list.ContactListFilter;
 import com.android.contacts.common.list.ContactListFilterController;
@@ -158,4 +163,54 @@
     private static AccountWithDataSet getDefaultAccount(Context context) {
         return new ContactsPreferences(context).getDefaultAccount();
     }
+
+    /**
+     * Returns a {@link ContactListFilter} of type
+     * {@link ContactListFilter#FILTER_TYPE_ALL_ACCOUNTS}, or if a custom "Contacts to display"
+     * filter has been set, then one of type {@link ContactListFilter#FILTER_TYPE_CUSTOM}.
+     */
+    public static ContactListFilter createContactsFilter(Context context) {
+        final int filterType =
+                ContactListFilterController.getInstance(context).isCustomFilterPersisted()
+                        ? ContactListFilter.FILTER_TYPE_CUSTOM
+                        : ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS;
+        return ContactListFilter.createFilterWithType(filterType);
+    }
+
+    /**
+     * Start editor intent; and if filter is an account filter, we pass account info to editor so
+     * as to create a contact in that account.
+     */
+    public static void startEditorIntent(Context context, Intent src, ContactListFilter filter) {
+        final Intent intent = new Intent(Intent.ACTION_INSERT, Contacts.CONTENT_URI);
+        intent.putExtras(src);
+
+        // If we are in account view, we pass the account explicitly in order to
+        // create contact in the account. This will prevent the default account dialog
+        // from being displayed.
+        if (!isAllContactsFilter(filter) && filter.accountName != null
+                && filter.accountType != null) {
+            final Account account = new Account(filter.accountName, filter.accountType);
+            intent.putExtra(Intents.Insert.EXTRA_ACCOUNT, account);
+            intent.putExtra(Intents.Insert.EXTRA_DATA_SET, filter.dataSet);
+        } else if (isDeviceContactsFilter(filter)) {
+            // It's OK to add this even though it's an implicit intent. If a different app
+            // receives the intent it should just ignore the flag.
+            intent.putExtra(CompactContactEditorActivity.EXTRA_SAVE_TO_DEVICE_FLAG, true);
+        }
+
+        try {
+            ImplicitIntentsUtil.startActivityInApp(context, intent);
+        } catch (ActivityNotFoundException ex) {
+            Toast.makeText(context, R.string.missing_app, Toast.LENGTH_SHORT).show();
+        }
+    }
+
+    public static boolean isAllContactsFilter(ContactListFilter filter) {
+        return filter != null && filter.isContactsFilterType();
+    }
+
+    public static boolean isDeviceContactsFilter(ContactListFilter filter) {
+        return filter.filterType == ContactListFilter.FILTER_TYPE_DEVICE_CONTACTS;
+    }
 }
diff --git a/src/com/android/contacts/common/util/DateUtils.java b/src/com/android/contacts/common/util/DateUtils.java
index c695ec6..097230c 100644
--- a/src/com/android/contacts/common/util/DateUtils.java
+++ b/src/com/android/contacts/common/util/DateUtils.java
@@ -18,8 +18,6 @@
 
 import android.content.Context;
 import android.text.format.DateFormat;
-import android.text.format.Time;
-
 
 import java.text.ParsePosition;
 import java.text.SimpleDateFormat;
@@ -269,23 +267,4 @@
         }
         return anniversary.getTime();
     }
-
-    /**
-     * Determine the difference, in days between two dates.  Uses similar logic as the
-     * {@link android.text.format.DateUtils.getRelativeTimeSpanString} method.
-     *
-     * @param time Instance of time object to use for calculations.
-     * @param date1 First date to check.
-     * @param date2 Second date to check.
-     * @return The absolute difference in days between the two dates.
-     */
-    public static int getDayDifference(Time time, long date1, long date2) {
-        time.set(date1);
-        int startDay = Time.getJulianDay(date1, time.gmtoff);
-
-        time.set(date2);
-        int currentDay = Time.getJulianDay(date2, time.gmtoff);
-
-        return Math.abs(currentDay - startDay);
-    }
 }
diff --git a/src/com/android/contacts/common/util/ImplicitIntentsUtil.java b/src/com/android/contacts/common/util/ImplicitIntentsUtil.java
index 19d171c..9a0eb93 100644
--- a/src/com/android/contacts/common/util/ImplicitIntentsUtil.java
+++ b/src/com/android/contacts/common/util/ImplicitIntentsUtil.java
@@ -16,6 +16,7 @@
 
 package com.android.contacts.common.util;
 
+import android.app.Activity;
 import android.content.Context;
 import android.content.Intent;
 import android.content.pm.PackageManager;
@@ -27,8 +28,12 @@
 import android.provider.Settings;
 import android.text.TextUtils;
 
+import com.android.contacts.common.Experiments;
+import com.android.contacts.common.logging.ScreenEvent.ScreenType;
 import com.android.contacts.common.model.account.GoogleAccountType;
 import com.android.contacts.quickcontact.QuickContactActivity;
+import com.android.contactsbind.ObjectFactory;
+import com.android.contactsbind.experiments.Flags;
 
 import java.util.List;
 
@@ -96,16 +101,68 @@
     }
 
     /**
+     * Starts QuickContact in app with the default mode and specified previous screen type.
+     */
+    public static void startQuickContact(Activity activity, Uri contactLookupUri,
+            int previousScreenType) {
+        startQuickContact(activity, contactLookupUri, previousScreenType, /* requestCode */ -1);
+    }
+
+    /**
+     * Starts QuickContact for result with the default mode and specified previous screen type.
+     */
+    public static void startQuickContactForResult(Activity activity, Uri contactLookupUri,
+            int previousScreenType, int requestCode) {
+        startQuickContact(activity, contactLookupUri, previousScreenType, requestCode);
+    }
+
+    private static void startQuickContact(Activity activity, Uri contactLookupUri,
+            int previousScreenType, int requestCode) {
+
+        if (Flags.getInstance(activity).getBoolean(Experiments.CONTACT_SHEET)) {
+            final Intent intent = ObjectFactory.getContactSheetIntent(activity, contactLookupUri);
+            if (intent != null) {
+                // We must start ContactSheet "for result" with a requestCode that is >= 0
+                // so that ContactSheet can validate that the caller is a 1P app.
+                activity.startActivityForResult(intent, requestCode >= 0 ? requestCode : 0);
+                return;
+            }
+        }
+
+        final Intent intent = ImplicitIntentsUtil.composeQuickContactIntent(
+                activity, contactLookupUri, previousScreenType);
+
+        // For the non ContactSheet case we only start "for result" if specifically requested.
+        if (requestCode >= 0) {
+            intent.setPackage(activity.getPackageName());
+            activity.startActivityForResult(intent, requestCode);
+        } else {
+            startActivityInApp(activity, intent);
+        }
+    }
+
+    /**
+     * Returns an implicit intent for opening QuickContacts with the default mode and specified
+     * previous screen type.
+     */
+    public static Intent composeQuickContactIntent(Context context, Uri contactLookupUri,
+            int previousScreenType) {
+        return composeQuickContactIntent(context, contactLookupUri,
+                QuickContactActivity.MODE_FULLY_EXPANDED, previousScreenType);
+    }
+
+    /**
      * Returns an implicit intent for opening QuickContacts.
      */
     public static Intent composeQuickContactIntent(Context context, Uri contactLookupUri,
-            int extraMode) {
+            int mode, int previousScreenType) {
         final Intent intent = new Intent(context, QuickContactActivity.class);
         intent.setAction(QuickContact.ACTION_QUICK_CONTACT);
         intent.setData(contactLookupUri);
-        intent.putExtra(QuickContact.EXTRA_MODE, extraMode);
+        intent.putExtra(QuickContact.EXTRA_MODE, mode);
         // Make sure not to show QuickContacts on top of another QuickContacts.
         intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
+        intent.putExtra(QuickContactActivity.EXTRA_PREVIOUS_SCREEN_TYPE, previousScreenType);
         return intent;
     }
 
@@ -134,7 +191,7 @@
 
     public static Intent getIntentForQuickContactLauncherShortcut(Context context, Uri contactUri) {
         final Intent intent = composeQuickContactIntent(context, contactUri,
-                QuickContact.MODE_LARGE);
+                QuickContact.MODE_LARGE, ScreenType.UNKNOWN);
         intent.setPackage(context.getPackageName());
 
         // When starting from the launcher, start in a new, cleared task.
diff --git a/src/com/android/contacts/common/vcard/NfcImportVCardActivity.java b/src/com/android/contacts/common/vcard/NfcImportVCardActivity.java
index 0634df4..6093405 100644
--- a/src/com/android/contacts/common/vcard/NfcImportVCardActivity.java
+++ b/src/com/android/contacts/common/vcard/NfcImportVCardActivity.java
@@ -17,6 +17,8 @@
 package com.android.contacts.common.vcard;
 
 import android.app.Activity;
+import android.app.Notification;
+import android.app.NotificationManager;
 import android.content.ComponentName;
 import android.content.Context;
 import android.content.Intent;
@@ -27,9 +29,11 @@
 import android.nfc.NfcAdapter;
 import android.os.AsyncTask;
 import android.os.Bundle;
+import android.os.Handler;
 import android.os.IBinder;
 import android.provider.ContactsContract.RawContacts;
 import android.util.Log;
+import android.widget.Toast;
 
 import com.android.contacts.common.R;
 import com.android.contacts.common.activity.RequestPermissionsActivity;
@@ -59,6 +63,12 @@
 
     private NdefRecord mRecord;
     private AccountWithDataSet mAccount;
+    private Handler mHandler = new Handler();
+
+    /**
+     * Notification id used when error happened before sending an import request to VCardServer.
+     */
+    private static final int FAILURE_NOTIFICATION_ID = 1;
 
     /* package */ class ImportTask extends AsyncTask<VCardService, Void, ImportRequest> {
         @Override
@@ -81,6 +91,10 @@
 
         @Override
         public void onPostExecute(ImportRequest request) {
+            if (request == null) {
+                // Finish the activity in case of error so it doesn't stay in view.
+                finish();
+            }
             unbindService(NfcImportVCardActivity.this);
         }
     }
@@ -111,6 +125,8 @@
                     parser.addInterpreter(detector);
                     parser.parse(is);
                 } catch (VCardVersionException e2) {
+                    Log.e(TAG, "vCard with unsupported version.");
+                    showFailureNotification(R.string.fail_reason_not_supported);
                     return null;
                 }
             } finally {
@@ -120,14 +136,16 @@
                 }
             }
         } catch (IOException e) {
-            Log.e(TAG, "Failed reading vcard data", e);
+            Log.e(TAG, "Failed reading vCard data", e);
+            showFailureNotification(R.string.fail_reason_io_error);
             return null;
         } catch (VCardNestedException e) {
             Log.w(TAG, "Nested Exception is found (it may be false-positive).");
             // Go through without throwing the Exception, as we may be able to detect the
             // version before it
         } catch (VCardException e) {
-            Log.e(TAG, "Error parsing vcard", e);
+            Log.e(TAG, "Error parsing vCard", e);
+            showFailureNotification(R.string.fail_reason_not_supported);
             return null;
         }
 
@@ -242,7 +260,8 @@
             Log.i(TAG, "Late import failure -- ignoring");
             return;
         }
-        // TODO: report failure
+        showFailureNotification(R.string.vcard_import_request_rejected_message);
+        finish();
     }
 
     @Override
@@ -269,4 +288,22 @@
     public void onComplete() {
         // do nothing
     }
+
+    /* package */ void showFailureNotification(int reasonId) {
+        final NotificationManager notificationManager =
+                (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
+        final Notification notification =
+                NotificationImportExportListener.constructImportFailureNotification(
+                        this,
+                        getString(reasonId));
+        notificationManager.notify(NotificationImportExportListener.FAILURE_NOTIFICATION_TAG,
+                FAILURE_NOTIFICATION_ID, notification);
+        mHandler.post(new Runnable() {
+            @Override
+            public void run() {
+                Toast.makeText(NfcImportVCardActivity.this,
+                        getString(R.string.vcard_import_failed), Toast.LENGTH_LONG).show();
+            }
+        });
+    }
 }
diff --git a/src/com/android/contacts/editor/BaseRawContactEditorView.java b/src/com/android/contacts/editor/BaseRawContactEditorView.java
deleted file mode 100644
index 1cdfafb..0000000
--- a/src/com/android/contacts/editor/BaseRawContactEditorView.java
+++ /dev/null
@@ -1,220 +0,0 @@
-/*
- * Copyright (C) 2009 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.contacts.editor;
-
-import android.content.Context;
-import android.database.Cursor;
-import android.graphics.Bitmap;
-import android.net.Uri;
-import android.provider.ContactsContract.CommonDataKinds.Photo;
-import android.provider.ContactsContract.Data;
-import android.text.TextUtils;
-import android.util.AttributeSet;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.ImageView;
-import android.widget.LinearLayout;
-import android.widget.TextView;
-
-import com.android.contacts.R;
-import com.android.contacts.common.model.RawContactDelta;
-import com.android.contacts.common.model.ValuesDelta;
-import com.android.contacts.common.model.RawContactModifier;
-import com.android.contacts.common.model.account.AccountType;
-import com.android.contacts.common.model.account.AccountType.EditType;
-import com.android.contacts.common.model.account.AccountWithDataSet;
-
-/**
- * Base view that provides common code for the editor interaction for a specific
- * RawContact represented through an {@link RawContactDelta}.
- * <p>
- * Internal updates are performed against {@link ValuesDelta} so that the
- * source {@link RawContact} can be swapped out. Any state-based changes, such as
- * adding {@link Data} rows or changing {@link EditType}, are performed through
- * {@link RawContactModifier} to ensure that {@link AccountType} are enforced.
- */
-public abstract class BaseRawContactEditorView extends LinearLayout {
-
-    private PhotoEditorView mPhoto;
-
-    private View mAccountHeaderContainer;
-    private ImageView mExpandAccountButton;
-    private LinearLayout mCollapsibleSection;
-    private TextView mAccountName;
-    private TextView mAccountType;
-
-    protected Listener mListener;
-
-    public interface Listener {
-        void onExternalEditorRequest(AccountWithDataSet account, Uri uri);
-        void onEditorExpansionChanged();
-    }
-
-    public BaseRawContactEditorView(Context context) {
-        super(context);
-    }
-
-    public BaseRawContactEditorView(Context context, AttributeSet attrs) {
-        super(context, attrs);
-    }
-
-    @Override
-    protected void onFinishInflate() {
-        super.onFinishInflate();
-
-        mPhoto = (PhotoEditorView)findViewById(R.id.edit_photo);
-        mPhoto.setEnabled(isEnabled());
-
-        mAccountHeaderContainer = findViewById(R.id.account_header_container);
-        mExpandAccountButton = (ImageView) findViewById(R.id.account_expander_icon);
-        mExpandAccountButton.setColorFilter(R.color.quantum_black_secondary_text);
-        mCollapsibleSection = (LinearLayout) findViewById(R.id.collapsable_section);
-        mAccountName = (TextView) findViewById(R.id.account_name);
-        mAccountType = (TextView) findViewById(R.id.account_type);
-
-        setCollapsed(false);
-        setCollapsible(true);
-    }
-
-    public void setGroupMetaData(Cursor groupMetaData) {
-    }
-
-
-    public void setListener(Listener listener) {
-        mListener = listener;
-    }
-
-    /**
-     * Assign the given {@link Bitmap} to the internal {@link PhotoEditorView}
-     * in order to update the {@link RawContactDelta} currently being edited.
-     */
-    public void setPhotoEntry(Bitmap bitmap) {
-        mPhoto.setPhotoEntry(bitmap);
-    }
-
-    /**
-     * Assign the given photo {@link Uri} to UI of the {@link PhotoEditorView}, so that it can
-     * display a full sized photo.
-     */
-    public void setFullSizedPhoto(Uri uri) {
-        mPhoto.setFullSizedPhoto(uri);
-    }
-
-    protected void setHasPhotoEditor(boolean hasPhotoEditor) {
-        mPhoto.setVisibility(hasPhotoEditor ? View.VISIBLE : View.GONE);
-    }
-
-    /**
-     * Return true if internal {@link PhotoEditorView} has a {@link Photo} set.
-     */
-    public boolean hasSetPhoto() {
-        return mPhoto.hasSetPhoto();
-    }
-
-    public PhotoEditorView getPhotoEditor() {
-        return mPhoto;
-    }
-
-    /**
-     * @return the RawContact ID that this editor is editing.
-     */
-    public abstract long getRawContactId();
-
-    /**
-     * If {@param isCollapsible} is TRUE, then this editor can be collapsed by clicking on its
-     * account header.
-     */
-    public void setCollapsible(boolean isCollapsible) {
-        if (isCollapsible) {
-            mAccountHeaderContainer.setOnClickListener(new OnClickListener() {
-                @Override
-                public void onClick(View v) {
-                    final int startingHeight = mCollapsibleSection.getMeasuredHeight();
-                    final boolean isCollapsed = isCollapsed();
-                    setCollapsed(!isCollapsed);
-                    // The slideAndFadeIn animation only looks good when collapsing. For expanding,
-                    // it looks like the editor is loading sluggishly. I tried animating the
-                    // clipping bounds instead of the alpha value. But because the editors are very
-                    // tall, this animation looked very similar to doing no animation at all. It
-                    // wasn't worth the significant additional complexity.
-                    if (!isCollapsed) {
-                        EditorAnimator.getInstance().slideAndFadeIn(mCollapsibleSection,
-                                startingHeight);
-                        // We want to place the focus near the top of the screen now that a
-                        // potentially focused editor is being collapsed.
-                        EditorAnimator.placeFocusAtTopOfScreenAfterReLayout(mCollapsibleSection);
-                    } else {
-                        // When expanding we should scroll the expanded view onto the screen.
-                        // Otherwise, user's may not notice that any expansion happened.
-                        EditorAnimator.getInstance().scrollViewToTop(mAccountHeaderContainer);
-                        mCollapsibleSection.requestFocus();
-                    }
-                    if (mListener != null) {
-                        mListener.onEditorExpansionChanged();
-                    }
-                    updateAccountHeaderContentDescription();
-                }
-            });
-            mExpandAccountButton.setVisibility(View.VISIBLE);
-            mAccountHeaderContainer.setClickable(true);
-        } else {
-            mAccountHeaderContainer.setOnClickListener(null);
-            mExpandAccountButton.setVisibility(View.GONE);
-            mAccountHeaderContainer.setClickable(false);
-        }
-    }
-
-    public boolean isCollapsed() {
-        return mCollapsibleSection.getLayoutParams().height == 0;
-    }
-
-    public void setCollapsed(boolean isCollapsed) {
-        final LinearLayout.LayoutParams params
-                = (LayoutParams) mCollapsibleSection.getLayoutParams();
-        if (isCollapsed) {
-            params.height = 0;
-            mCollapsibleSection.setLayoutParams(params);
-            mExpandAccountButton.setImageDrawable(getContext().getDrawable(
-                    R.drawable.ic_menu_expand_minimized_24dp));
-        } else {
-            params.height = ViewGroup.LayoutParams.WRAP_CONTENT;
-            mCollapsibleSection.setLayoutParams(params);
-            mExpandAccountButton.setImageDrawable(getContext().getDrawable(
-                    R.drawable.ic_menu_expand_maximized_24dp));
-        }
-    }
-
-    protected void updateAccountHeaderContentDescription() {
-        final StringBuilder builder = new StringBuilder();
-        builder.append(EditorUiUtils.getAccountInfoContentDescription(
-                mAccountName.getText(), mAccountType.getText()));
-        if (mExpandAccountButton.getVisibility() == View.VISIBLE) {
-            builder.append(getResources().getString(isCollapsed()
-                    ? R.string.content_description_expand_editor
-                    : R.string.content_description_collapse_editor));
-        }
-        mAccountHeaderContainer.setContentDescription(builder);
-    }
-
-    /**
-     * Set the internal state for this view, given a current
-     * {@link RawContactDelta} state and the {@link AccountType} that
-     * apply to that state.
-     */
-    public abstract void setState(RawContactDelta state, AccountType source, ViewIdGenerator vig,
-            boolean isProfile);
-}
diff --git a/src/com/android/contacts/editor/CancelEditDialogFragment.java b/src/com/android/contacts/editor/CancelEditDialogFragment.java
index ba5f9fa..ec937a6 100644
--- a/src/com/android/contacts/editor/CancelEditDialogFragment.java
+++ b/src/com/android/contacts/editor/CancelEditDialogFragment.java
@@ -35,7 +35,7 @@
      * Shows a {@link CancelEditDialogFragment} after setting the given Fragment as the
      * target of the dialog.
      */
-    public static void show(ContactEditorBaseFragment fragment) {
+    public static void show(CompactContactEditorFragment fragment) {
         final CancelEditDialogFragment dialog = new CancelEditDialogFragment();
         dialog.setTargetFragment(fragment, 0);
         dialog.show(fragment.getFragmentManager(), TAG);
@@ -69,4 +69,4 @@
          */
         void onCancelEditConfirmed();
     }
-}
\ No newline at end of file
+}
diff --git a/src/com/android/contacts/editor/CompactContactEditorFragment.java b/src/com/android/contacts/editor/CompactContactEditorFragment.java
index 1d7fa46..4e7c3c5 100644
--- a/src/com/android/contacts/editor/CompactContactEditorFragment.java
+++ b/src/com/android/contacts/editor/CompactContactEditorFragment.java
@@ -16,48 +16,542 @@
 
 package com.android.contacts.editor;
 
-import com.android.contacts.ContactSaveService;
-import com.android.contacts.R;
-import com.android.contacts.activities.CompactContactEditorActivity;
-import com.android.contacts.common.model.RawContactDelta;
-import com.android.contacts.common.model.ValuesDelta;
-import com.android.contacts.common.model.account.AccountWithDataSet;
-import com.android.contacts.util.ContactPhotoUtils;
-
+import android.accounts.Account;
 import android.app.Activity;
+import android.app.Fragment;
+import android.app.LoaderManager;
+import android.content.ActivityNotFoundException;
+import android.content.ContentUris;
+import android.content.ContentValues;
+import android.content.Context;
+import android.content.CursorLoader;
 import android.content.Intent;
+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;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.CommonDataKinds.Email;
+import android.provider.ContactsContract.CommonDataKinds.Event;
+import android.provider.ContactsContract.CommonDataKinds.Organization;
+import android.provider.ContactsContract.CommonDataKinds.Phone;
+import android.provider.ContactsContract.CommonDataKinds.StructuredName;
+import android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
+import android.provider.ContactsContract.Intents;
+import android.provider.ContactsContract.RawContacts;
 import android.text.TextUtils;
 import android.util.Log;
 import android.view.LayoutInflater;
+import android.view.Menu;
+import android.view.MenuInflater;
 import android.view.MenuItem;
 import android.view.View;
 import android.view.ViewGroup;
+import android.widget.AdapterView;
+import android.widget.BaseAdapter;
 import android.widget.LinearLayout;
+import android.widget.ListPopupWindow;
 import android.widget.Toast;
 
+import com.android.contacts.ContactSaveService;
+import com.android.contacts.GroupMetaDataLoader;
+import com.android.contacts.R;
+import com.android.contacts.activities.CompactContactEditorActivity;
+import com.android.contacts.activities.CompactContactEditorActivity.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;
+import com.android.contacts.common.model.AccountTypeManager;
+import com.android.contacts.common.model.Contact;
+import com.android.contacts.common.model.ContactLoader;
+import com.android.contacts.common.model.RawContact;
+import com.android.contacts.common.model.RawContactDelta;
+import com.android.contacts.common.model.RawContactDeltaList;
+import com.android.contacts.common.model.RawContactModifier;
+import com.android.contacts.common.model.ValuesDelta;
+import com.android.contacts.common.model.account.AccountType;
+import com.android.contacts.common.model.account.AccountWithDataSet;
+import com.android.contacts.common.util.ImplicitIntentsUtil;
+import com.android.contacts.common.util.MaterialColorMapUtils;
+import com.android.contacts.editor.AggregationSuggestionEngine.Suggestion;
+import com.android.contacts.list.UiIntentActions;
+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.ObjectFactory;
+import com.android.contactsbind.experiments.Flags;
+
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Lists;
+
 import java.io.FileNotFoundException;
 import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
 
 /**
  * Contact editor with only the most important fields displayed initially.
  */
-public class CompactContactEditorFragment extends ContactEditorBaseFragment implements
+public class CompactContactEditorFragment extends Fragment implements
+        ContactEditor, SplitContactConfirmationDialogFragment.Listener,
+        JoinContactConfirmationDialogFragment.Listener,
+        AggregationSuggestionEngine.Listener, AggregationSuggestionView.Listener,
+        CancelEditDialogFragment.Listener,
         CompactRawContactsEditorView.Listener, CompactPhotoEditorView.Listener {
 
+    static final String TAG = "ContactEditor";
+
+    private static final int LOADER_CONTACT = 1;
+    private static final int LOADER_GROUPS = 2;
+
     private static final String KEY_PHOTO_RAW_CONTACT_ID = "photo_raw_contact_id";
     private static final String KEY_UPDATED_PHOTOS = "updated_photos";
 
+    private static final List<String> VALID_INTENT_ACTIONS = new ArrayList<String>() {{
+        add(Intent.ACTION_EDIT);
+        add(Intent.ACTION_INSERT);
+        add(CompactContactEditorActivity.ACTION_SAVE_COMPLETED);
+    }};
+
+    private static final String KEY_ACTION = "action";
+    private static final String KEY_URI = "uri";
+    private static final String KEY_AUTO_ADD_TO_DEFAULT_GROUP = "autoAddToDefaultGroup";
+    private static final String KEY_DISABLE_DELETE_MENU_OPTION = "disableDeleteMenuOption";
+    private static final String KEY_NEW_LOCAL_PROFILE = "newLocalProfile";
+    private static final String KEY_MATERIAL_PALETTE = "materialPalette";
+    private static final String KEY_PHOTO_ID = "photoId";
+
+    private static final String KEY_VIEW_ID_GENERATOR = "viewidgenerator";
+
+    private static final String KEY_RAW_CONTACTS = "rawContacts";
+
+    private static final String KEY_EDIT_STATE = "state";
+    private static final String KEY_STATUS = "status";
+
+    private static final String KEY_HAS_NEW_CONTACT = "hasNewContact";
+    private static final String KEY_NEW_CONTACT_READY = "newContactDataReady";
+
+    private static final String KEY_IS_EDIT = "isEdit";
+    private static final String KEY_EXISTING_CONTACT_READY = "existingContactDataReady";
+
+    private static final String KEY_RAW_CONTACT_DISPLAY_ALONE_IS_READ_ONLY = "isReadOnly";
+
+    // 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";
+
+    // Aggregation PopupWindow
+    private static final String KEY_AGGREGATION_SUGGESTIONS_RAW_CONTACT_ID =
+            "aggregationSuggestionsRawContactId";
+
+    // Join Activity
+    private static final String KEY_CONTACT_ID_FOR_JOIN = "contactidforjoin";
+
+    private static final String KEY_READ_ONLY_DISPLAY_NAME = "readOnlyDisplayName";
+
+    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;
+
+    /**
+     * An intent extra that forces the editor to add the edited contact
+     * to the default group (e.g. "My Contacts").
+     */
+    public static final String INTENT_EXTRA_ADD_TO_DEFAULT_DIRECTORY = "addToDefaultDirectory";
+
+    public static final String INTENT_EXTRA_NEW_LOCAL_PROFILE = "newLocalProfile";
+
+    public static final String INTENT_EXTRA_DISABLE_DELETE_MENU_OPTION =
+            "disableDeleteMenuOption";
+
+    /**
+     * Intent key to pass the photo palette primary color calculated by
+     * {@link com.android.contacts.quickcontact.QuickContactActivity} to the editor and between
+     * the compact and fully expanded editors.
+     */
+    public static final String INTENT_EXTRA_MATERIAL_PALETTE_PRIMARY_COLOR =
+            "material_palette_primary_color";
+
+    /**
+     * Intent key to pass the photo palette secondary color calculated by
+     * {@link com.android.contacts.quickcontact.QuickContactActivity} to the editor and between
+     * the compact and fully expanded editors.
+     */
+    public static final String INTENT_EXTRA_MATERIAL_PALETTE_SECONDARY_COLOR =
+            "material_palette_secondary_color";
+
+    /**
+     * Intent key to pass the ID of the photo to display on the editor.
+     */
+    // TODO: This can be cleaned up if we decide to not pass the photo id through
+    // QuickContactActivity.
+    public static final String INTENT_EXTRA_PHOTO_ID = "photo_id";
+
+    /**
+     * Intent key to pass the ID of the raw contact id that should be displayed in the full editor
+     * by itself.
+     */
+    public static final String INTENT_EXTRA_RAW_CONTACT_ID_TO_DISPLAY_ALONE =
+            "raw_contact_id_to_display_alone";
+
+    /**
+     * Intent key to pass the boolean value of if the raw contact id that should be displayed
+     * in the full editor by itself is read-only.
+     */
+    public static final String INTENT_EXTRA_RAW_CONTACT_DISPLAY_ALONE_IS_READ_ONLY =
+            "raw_contact_display_alone_is_read_only";
+
+    /**
+     * Intent extra to specify a {@link ContactEditor.SaveMode}.
+     */
+    public static final String SAVE_MODE_EXTRA_KEY = "saveMode";
+
+    /**
+     * Intent extra key for the contact ID to join the current contact to after saving.
+     */
+    public static final String JOIN_CONTACT_ID_EXTRA_KEY = "joinContactId";
+
+    /**
+     * Callbacks for Activities that host contact editors Fragments.
+     */
+    public interface Listener {
+
+        /**
+         * Contact was not found, so somehow close this fragment. This is raised after a contact
+         * is removed via Menu/Delete
+         */
+        void onContactNotFound();
+
+        /**
+         * Contact was split, so we can close now.
+         *
+         * @param newLookupUri The lookup uri of the new contact that should be shown to the user.
+         *                     The editor tries best to chose the most natural contact here.
+         */
+        void onContactSplit(Uri newLookupUri);
+
+        /**
+         * User has tapped Revert, close the fragment now.
+         */
+        void onReverted();
+
+        /**
+         * Contact was saved and the Fragment can now be closed safely.
+         */
+        void onSaveFinished(Intent resultIntent);
+
+        /**
+         * User switched to editing a different contact (a suggestion from the
+         * aggregation engine).
+         */
+        void onEditOtherContactRequested(Uri contactLookupUri,
+                ArrayList<ContentValues> contentValues);
+
+        /**
+         * Contact is being created for an external account that provides its own
+         * new contact activity.
+         */
+        void onCustomCreateContactActivityRequested(AccountWithDataSet account,
+                Bundle intentExtras);
+
+        /**
+         * The edited raw contact belongs to an external account that provides
+         * its own edit activity.
+         *
+         * @param redirect indicates that the current editor should be closed
+         *                 before the custom editor is shown.
+         */
+        void onCustomEditContactActivityRequested(AccountWithDataSet account, Uri rawContactUri,
+                Bundle intentExtras, boolean redirect);
+
+        /**
+         * User has requested that contact be deleted.
+         */
+        void onDeleteRequested(Uri contactUri);
+    }
+
+    /**
+     * Adapter for aggregation suggestions displayed in a PopupWindow when
+     * editor fields change.
+     */
+    private static final class AggregationSuggestionAdapter extends BaseAdapter {
+        private final LayoutInflater mLayoutInflater;
+        private final boolean mSetNewContact;
+        private final AggregationSuggestionView.Listener mListener;
+        private final List<AggregationSuggestionEngine.Suggestion> mSuggestions;
+
+        public AggregationSuggestionAdapter(Activity activity, boolean setNewContact,
+                AggregationSuggestionView.Listener listener, List<Suggestion> suggestions) {
+            mLayoutInflater = activity.getLayoutInflater();
+            mSetNewContact = setNewContact;
+            mListener = listener;
+            mSuggestions = suggestions;
+        }
+
+        @Override
+        public View getView(int position, View convertView, ViewGroup parent) {
+            final Suggestion suggestion = (Suggestion) getItem(position);
+            final AggregationSuggestionView suggestionView =
+                    (AggregationSuggestionView) mLayoutInflater.inflate(
+                            R.layout.aggregation_suggestions_item, null);
+            suggestionView.setNewContact(mSetNewContact);
+            suggestionView.setListener(mListener);
+            suggestionView.bindSuggestion(suggestion);
+            return suggestionView;
+        }
+
+        @Override
+        public long getItemId(int position) {
+            return position;
+        }
+
+        @Override
+        public Object getItem(int position) {
+            return mSuggestions.get(position);
+        }
+
+        @Override
+        public int getCount() {
+            return mSuggestions.size();
+        }
+    }
+
+    protected Context mContext;
+    protected Listener mListener;
+
+    //
+    // Views
+    //
+    protected LinearLayout mContent;
+    protected View mAggregationSuggestionView;
+    protected ListPopupWindow mAggregationSuggestionPopup;
+
+    //
+    // Parameters passed in on {@link #load}
+    //
+    protected String mAction;
+    protected Uri mLookupUri;
+    protected Bundle mIntentExtras;
+    protected boolean mAutoAddToDefaultGroup;
+    protected boolean mDisableDeleteMenuOption;
+    protected boolean mNewLocalProfile;
+    protected MaterialColorMapUtils.MaterialPalette mMaterialPalette;
+
+    //
+    // Helpers
+    //
+    protected ContactEditorUtils mEditorUtils;
+    protected RawContactDeltaComparator mComparator;
+    protected ViewIdGenerator mViewIdGenerator;
+    private AggregationSuggestionEngine mAggregationSuggestionEngine;
+
+    //
+    // Loaded data
+    //
+    // Used to store existing contact data so it can be re-applied during a rebind call,
+    // i.e. account switch.
+    protected ImmutableList<RawContact> mRawContacts;
+    protected Cursor mGroupMetaData;
+
+    //
+    // Editor state
+    //
+    protected RawContactDeltaList mState;
+    protected int mStatus;
+    protected long mRawContactIdToDisplayAlone = -1;
+    protected boolean mRawContactDisplayAloneIsReadOnly = false;
+
+    // Whether to show the new contact blank form and if it's corresponding delta is ready.
+    protected boolean mHasNewContact;
+    protected AccountWithDataSet mAccountWithDataSet;
+    protected boolean mNewContactDataReady;
+    protected boolean mNewContactAccountChanged;
+
+    // Whether it's an edit of existing contact and if it's corresponding delta is ready.
+    protected boolean mIsEdit;
+    protected boolean mExistingContactDataReady;
+
+    // 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;
+
+    // Aggregation PopupWindow
+    private long mAggregationSuggestionsRawContactId;
+
+    // Join Activity
+    protected long mContactIdForJoin;
+
+    // Used to pre-populate the editor with a display name when a user edits a read-only contact.
+    protected String mReadOnlyDisplayName;
+
+    //
+    // Not saved/restored on rotates
+    //
+
+    // The name editor view for the new raw contact that was created so that the user can
+    // edit a read-only contact (to which the new raw contact was joined)
+    protected StructuredNameEditorView mReadOnlyNameEditorView;
+
+    /**
+     * The contact data loader listener.
+     */
+    protected final LoaderManager.LoaderCallbacks<Contact> mContactLoaderListener =
+            new LoaderManager.LoaderCallbacks<Contact>() {
+
+                protected long mLoaderStartTime;
+
+                @Override
+                public Loader<Contact> onCreateLoader(int id, Bundle args) {
+                    mLoaderStartTime = SystemClock.elapsedRealtime();
+                    return new ContactLoader(mContext, mLookupUri, true);
+                }
+
+                @Override
+                public void onLoadFinished(Loader<Contact> loader, Contact contact) {
+                    final long loaderCurrentTime = SystemClock.elapsedRealtime();
+                    Log.v(TAG, "Time needed for loading: " + (loaderCurrentTime-mLoaderStartTime));
+                    if (!contact.isLoaded()) {
+                        // Item has been deleted. Close activity without saving again.
+                        Log.i(TAG, "No contact found. Closing activity");
+                        mStatus = Status.CLOSING;
+                        if (mListener != null) mListener.onContactNotFound();
+                        return;
+                    }
+
+                    mStatus = Status.EDITING;
+                    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));
+                }
+
+                @Override
+                public void onLoaderReset(Loader<Contact> loader) {
+                }
+            };
+
+    /**
+     * The groups meta data loader listener.
+     */
+    protected final LoaderManager.LoaderCallbacks<Cursor> mGroupsLoaderListener =
+            new LoaderManager.LoaderCallbacks<Cursor>() {
+
+                @Override
+                public CursorLoader onCreateLoader(int id, Bundle args) {
+                    return new GroupMetaDataLoader(mContext, ContactsContract.Groups.CONTENT_URI);
+                }
+
+                @Override
+                public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
+                    mGroupMetaData = data;
+                    setGroupMetaData();
+                }
+
+                @Override
+                public void onLoaderReset(Loader<Cursor> loader) {
+                }
+            };
+
     private long mPhotoRawContactId;
     private Bundle mUpdatedPhotos = new Bundle();
 
     @Override
+    public Context getContext() {
+        return getActivity();
+    }
+
+    @Override
+    public void onAttach(Activity activity) {
+        super.onAttach(activity);
+        mContext = activity;
+        mEditorUtils = ContactEditorUtils.create(mContext);
+        mComparator = new RawContactDeltaComparator(mContext);
+    }
+
+    @Override
     public void onCreate(Bundle savedState) {
+        if (savedState != null) {
+            // Restore mUri before calling super.onCreate so that onInitializeLoaders
+            // would already have a uri and an action to work with
+            mAction = savedState.getString(KEY_ACTION);
+            mLookupUri = savedState.getParcelable(KEY_URI);
+        }
+
         super.onCreate(savedState);
 
-        if (savedState != null) {
+        if (savedState == null) {
+            mViewIdGenerator = new ViewIdGenerator();
+
+            // mState can still be null because it may not have have finished loading before
+            // onSaveInstanceState was called.
+            mState = new RawContactDeltaList();
+        } else {
+            mViewIdGenerator = savedState.getParcelable(KEY_VIEW_ID_GENERATOR);
+
+            mAutoAddToDefaultGroup = savedState.getBoolean(KEY_AUTO_ADD_TO_DEFAULT_GROUP);
+            mDisableDeleteMenuOption = savedState.getBoolean(KEY_DISABLE_DELETE_MENU_OPTION);
+            mNewLocalProfile = savedState.getBoolean(KEY_NEW_LOCAL_PROFILE);
+            mMaterialPalette = savedState.getParcelable(KEY_MATERIAL_PALETTE);
+
+            mRawContacts = ImmutableList.copyOf(savedState.<RawContact>getParcelableArrayList(
+                    KEY_RAW_CONTACTS));
+            // NOTE: mGroupMetaData is not saved/restored
+
+            // Read state from savedState. No loading involved here
+            mState = savedState.<RawContactDeltaList> getParcelable(KEY_EDIT_STATE);
+            mStatus = savedState.getInt(KEY_STATUS);
+            mRawContactDisplayAloneIsReadOnly = savedState.getBoolean(
+                    KEY_RAW_CONTACT_DISPLAY_ALONE_IS_READ_ONLY);
+
+            mHasNewContact = savedState.getBoolean(KEY_HAS_NEW_CONTACT);
+            mNewContactDataReady = savedState.getBoolean(KEY_NEW_CONTACT_READY);
+
+            mIsEdit = savedState.getBoolean(KEY_IS_EDIT);
+            mExistingContactDataReady = savedState.getBoolean(KEY_EXISTING_CONTACT_READY);
+
+            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
+            mAggregationSuggestionsRawContactId = savedState.getLong(
+                    KEY_AGGREGATION_SUGGESTIONS_RAW_CONTACT_ID);
+
+            // Join Activity
+            mContactIdForJoin = savedState.getLong(KEY_CONTACT_ID_FOR_JOIN);
+
+            mReadOnlyDisplayName = savedState.getString(KEY_READ_ONLY_DISPLAY_NAME);
+
             mPhotoRawContactId = savedState.getLong(KEY_PHOTO_RAW_CONTACT_ID);
             mUpdatedPhotos = savedState.getParcelable(KEY_UPDATED_PHOTOS);
         }
@@ -74,21 +568,795 @@
     }
 
     @Override
+    public void onActivityCreated(Bundle savedInstanceState) {
+        super.onActivityCreated(savedInstanceState);
+
+        validateAction(mAction);
+
+        if (mState.isEmpty()) {
+            // The delta list may not have finished loading before orientation change happens.
+            // In this case, there will be a saved state but deltas will be missing.  Reload from
+            // database.
+            if (Intent.ACTION_EDIT.equals(mAction)) {
+                // Either
+                // 1) orientation change but load never finished.
+                // 2) not an orientation change so data needs to be loaded for first time.
+                getLoaderManager().initLoader(LOADER_CONTACT, null, mContactLoaderListener);
+                getLoaderManager().initLoader(LOADER_GROUPS, null, mGroupsLoaderListener);
+            }
+        } else {
+            // Orientation change, we already have mState, it was loaded by onCreate
+            bindEditors();
+        }
+
+        // Handle initial actions only when existing state missing
+        if (savedInstanceState == null) {
+            final Account account = mIntentExtras == null ? null :
+                    (Account) mIntentExtras.getParcelable(Intents.Insert.EXTRA_ACCOUNT);
+            final String dataSet = mIntentExtras == null ? null :
+                    mIntentExtras.getString(Intents.Insert.EXTRA_DATA_SET);
+            if (account != null) {
+                mAccountWithDataSet = new AccountWithDataSet(account.name, account.type, dataSet);
+            }
+
+            if (Intent.ACTION_EDIT.equals(mAction)) {
+                mIsEdit = true;
+            } else if (Intent.ACTION_INSERT.equals(mAction)) {
+                mHasNewContact = true;
+                if (mAccountWithDataSet != null) {
+                    createContact(mAccountWithDataSet);
+                } else if (mIntentExtras != null && mIntentExtras.getBoolean(
+                        CompactContactEditorActivity.EXTRA_SAVE_TO_DEVICE_FLAG, false)) {
+                    createContact(null);
+                } else {
+                    // No Account specified. Let the user choose
+                    // Load Accounts async so that we can present them
+                    selectAccountAndCreateContact();
+                }
+            }
+        }
+    }
+
+    /**
+     * Checks if the requested action is valid.
+     *
+     * @param action The action to test.
+     * @throws IllegalArgumentException when the action is invalid.
+     */
+    private static void validateAction(String action) {
+        if (VALID_INTENT_ACTIONS.contains(action)) {
+            return;
+        }
+        throw new IllegalArgumentException(
+                "Unknown action " + action + "; Supported actions: " + VALID_INTENT_ACTIONS);
+    }
+
+    @Override
     public void onSaveInstanceState(Bundle outState) {
+        outState.putString(KEY_ACTION, mAction);
+        outState.putParcelable(KEY_URI, mLookupUri);
+        outState.putBoolean(KEY_AUTO_ADD_TO_DEFAULT_GROUP, mAutoAddToDefaultGroup);
+        outState.putBoolean(KEY_DISABLE_DELETE_MENU_OPTION, mDisableDeleteMenuOption);
+        outState.putBoolean(KEY_NEW_LOCAL_PROFILE, mNewLocalProfile);
+        if (mMaterialPalette != null) {
+            outState.putParcelable(KEY_MATERIAL_PALETTE, mMaterialPalette);
+        }
+        outState.putParcelable(KEY_VIEW_ID_GENERATOR, mViewIdGenerator);
+
+        outState.putParcelableArrayList(KEY_RAW_CONTACTS, mRawContacts == null ?
+                Lists.<RawContact>newArrayList() : Lists.newArrayList(mRawContacts));
+        // NOTE: mGroupMetaData is not saved
+
+        if (hasValidState()) {
+            // Store entities with modifications
+            outState.putParcelable(KEY_EDIT_STATE, mState);
+        }
+        outState.putInt(KEY_STATUS, mStatus);
+        outState.putBoolean(KEY_HAS_NEW_CONTACT, mHasNewContact);
+        outState.putBoolean(KEY_NEW_CONTACT_READY, mNewContactDataReady);
+        outState.putBoolean(KEY_IS_EDIT, mIsEdit);
+        outState.putBoolean(KEY_EXISTING_CONTACT_READY, mExistingContactDataReady);
+        outState.putBoolean(KEY_RAW_CONTACT_DISPLAY_ALONE_IS_READ_ONLY,
+                mRawContactDisplayAloneIsReadOnly);
+
+        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
+        outState.putLong(KEY_AGGREGATION_SUGGESTIONS_RAW_CONTACT_ID,
+                mAggregationSuggestionsRawContactId);
+
+        // Join Activity
+        outState.putLong(KEY_CONTACT_ID_FOR_JOIN, mContactIdForJoin);
+
+        outState.putString(KEY_READ_ONLY_DISPLAY_NAME, mReadOnlyDisplayName);
+
         outState.putLong(KEY_PHOTO_RAW_CONTACT_ID, mPhotoRawContactId);
         outState.putParcelable(KEY_UPDATED_PHOTOS, mUpdatedPhotos);
         super.onSaveInstanceState(outState);
     }
 
     @Override
+    public void onStop() {
+        super.onStop();
+        UiClosables.closeQuietly(mAggregationSuggestionPopup);
+    }
+
+    @Override
+    public void onDestroy() {
+        super.onDestroy();
+        if (mAggregationSuggestionEngine != null) {
+            mAggregationSuggestionEngine.quit();
+        }
+    }
+
+    @Override
+    public void onActivityResult(int requestCode, int resultCode, Intent data) {
+        switch (requestCode) {
+            case REQUEST_CODE_JOIN: {
+                // Ignore failed requests
+                if (resultCode != Activity.RESULT_OK) return;
+                if (data != null) {
+                    final long contactId = ContentUris.parseId(data.getData());
+                    if (hasPendingChanges()) {
+                        // Ask the user if they want to save changes before doing the join
+                        JoinContactConfirmationDialogFragment.show(this, contactId);
+                    } else {
+                        // Do the join immediately
+                        joinAggregate(contactId);
+                    }
+                }
+                break;
+            }
+            case REQUEST_CODE_ACCOUNTS_CHANGED: {
+                // Bail if the account selector was not successful.
+                if (resultCode != Activity.RESULT_OK) {
+                    if (mListener != null) {
+                        mListener.onReverted();
+                    }
+                    return;
+                }
+                // If there's an account specified, use it.
+                if (data != null) {
+                    AccountWithDataSet account = data.getParcelableExtra(
+                            Intents.Insert.EXTRA_ACCOUNT);
+                    if (account != null) {
+                        createContact(account);
+                        return;
+                    }
+                }
+                // If there isn't an account specified, then this is likely a phone-local
+                // contact, so we should continue setting up the editor by automatically selecting
+                // the most appropriate account.
+                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);
+    }
+
+    @Override
+    public void onPrepareOptionsMenu(Menu menu) {
+        // This supports the keyboard shortcut to save changes to a contact but shouldn't be visible
+        // because the custom action bar contains the "save" button now (not the overflow menu).
+        // TODO: Find a better way to handle shortcuts, i.e. onKeyDown()?
+        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);
+            splitMenu.setVisible(false);
+            joinMenu.setVisible(false);
+            deleteMenu.setVisible(false);
+        } else if (Intent.ACTION_EDIT.equals(mAction)) {
+            HelpUtils.prepareHelpMenuItem(mContext, helpMenu, R.string.help_url_people_edit);
+            splitMenu.setVisible(canUnlinkRawContacts());
+            // Cannot join a user profile
+            joinMenu.setVisible(!isEditingUserProfile());
+            deleteMenu.setVisible(!mDisableDeleteMenuOption && !isEditingUserProfile());
+        } else {
+            // something else, so don't show the help menu
+            helpMenu.setVisible(false);
+        }
+
+        // Save menu is invisible when there's only one read only contact in the editor.
+        saveMenu.setVisible(!mRawContactDisplayAloneIsReadOnly);
+        if (saveMenu.isVisible()) {
+            // Since we're using a custom action layout we have to manually hook up the handler.
+            saveMenu.getActionView().setOnClickListener(new View.OnClickListener() {
+                @Override
+                public void onClick(View v) {
+                    onOptionsItemSelected(saveMenu);
+                }
+            });
+        }
+
+        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);
+        }
+    }
+
+    @Override
     public boolean onOptionsItemSelected(MenuItem item) {
         if (item.getItemId() == android.R.id.home) {
             return revert();
         }
-        return super.onOptionsItemSelected(item);
+
+        final Activity activity = getActivity();
+        if (activity == null || activity.isFinishing() || activity.isDestroyed()) {
+            // If we no longer are attached to a running activity want to
+            // drain this event.
+            return true;
+        }
+
+        switch (item.getItemId()) {
+            case R.id.menu_save:
+                return save(SaveMode.CLOSE);
+            case R.id.menu_delete:
+                if (mListener != null) mListener.onDeleteRequested(mLookupUri);
+                return true;
+            case R.id.menu_split:
+                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);
+                return true;
+        }
+
+        return false;
     }
 
     @Override
+    public boolean revert() {
+        if (mState.isEmpty() || !hasPendingChanges()) {
+            onCancelEditConfirmed();
+        } else {
+            CancelEditDialogFragment.show(this);
+        }
+        return true;
+    }
+
+    @Override
+    public void onCancelEditConfirmed() {
+        // When this Fragment is closed we don't want it to auto-save
+        mStatus = Status.CLOSING;
+        if (mListener != null) {
+            mListener.onReverted();
+        }
+    }
+
+    @Override
+    public void onSplitContactConfirmed(boolean hasPendingChanges) {
+        if (mState.isEmpty()) {
+            // This may happen when this Fragment is recreated by the system during users
+            // confirming the split action (and thus this method is called just before onCreate()),
+            // for example.
+            Log.e(TAG, "mState became null during the user's confirming split action. " +
+                    "Cannot perform the save action.");
+            return;
+        }
+
+        if (!hasPendingChanges && mHasNewContact) {
+            // If the user didn't add anything new, we don't want to split out the newly created
+            // raw contact into a name-only contact so remove them.
+            final Iterator<RawContactDelta> iterator = mState.iterator();
+            while (iterator.hasNext()) {
+                final RawContactDelta rawContactDelta = iterator.next();
+                if (rawContactDelta.getRawContactId() < 0) {
+                    iterator.remove();
+                }
+            }
+        }
+        mState.markRawContactsForSplitting();
+        save(SaveMode.SPLIT);
+    }
+
+    private boolean doSplitContactAction() {
+        if (!hasValidState()) return false;
+
+        SplitContactConfirmationDialogFragment.show(this, hasPendingChanges());
+        return true;
+    }
+
+    private boolean doJoinContactAction() {
+        if (!hasValidState() || mLookupUri == null) {
+            return false;
+        }
+
+        // If we just started creating a new contact and haven't added any data, it's too
+        // early to do a join
+        if (mState.size() == 1 && mState.get(0).isContactInsert()
+                && !hasPendingChanges()) {
+            Toast.makeText(mContext, R.string.toast_join_with_empty_contact,
+                    Toast.LENGTH_LONG).show();
+            return true;
+        }
+
+        showJoinAggregateActivity(mLookupUri);
+        return true;
+    }
+
+    @Override
+    public void onJoinContactConfirmed(long joinContactId) {
+        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) {
+            return false;
+        }
+
+        // If we are about to close the editor - there is no need to refresh the data
+        if (saveMode == SaveMode.CLOSE || saveMode == SaveMode.COMPACT
+                || saveMode == SaveMode.SPLIT) {
+            getLoaderManager().destroyLoader(LOADER_CONTACT);
+        }
+
+        mStatus = Status.SAVING;
+
+        if (!hasPendingChanges()) {
+            if (mLookupUri == null && saveMode == SaveMode.RELOAD) {
+                // We don't have anything to save and there isn't even an existing contact yet.
+                // Nothing to do, simply go back to editing mode
+                mStatus = Status.EDITING;
+                return true;
+            }
+            onSaveCompleted(/* hadChanges =*/ false, saveMode,
+                    /* saveSucceeded =*/ mLookupUri != null, mLookupUri, /* joinContactId =*/ null);
+            return true;
+        }
+
+        setEnabled(false);
+
+        return doSaveAction(saveMode, /* joinContactId */ null);
+    }
+
+    //
+    // State accessor methods
+    //
+
+    /**
+     * Check if our internal {@link #mState} is valid, usually checked before
+     * performing user actions.
+     */
+    private boolean hasValidState() {
+        return mState.size() > 0;
+    }
+
+    private boolean isEditingUserProfile() {
+        return mNewLocalProfile || mIsUserProfile;
+    }
+
+    /**
+     * Whether the contact being edited spans multiple raw contacts.
+     * The may also span multiple accounts.
+     */
+    private boolean isEditingMultipleRawContacts() {
+        return mState.size() > 1;
+    }
+
+    /**
+     * Whether the contact being edited is composed of a single read-only raw contact
+     * aggregated with a newly created writable raw contact.
+     */
+    private boolean isEditingReadOnlyRawContactWithNewContact() {
+        return mHasNewContact && mState.size() == 2;
+    }
+
+    /**
+     * Return true if there are any edits to the current contact which need to
+     * be saved.
+     */
+    private boolean hasPendingRawContactChanges(Set<String> excludedMimeTypes) {
+        final AccountTypeManager accountTypes = AccountTypeManager.getInstance(mContext);
+        return RawContactModifier.hasChanges(mState, accountTypes, excludedMimeTypes);
+    }
+
+    /**
+     * We allow unlinking only if there is more than one raw contact, it is not a user-profile,
+     * and unlinking won't result in an empty contact.  For the empty contact case, we only guard
+     * against this when there is a single read-only contact in the aggregate.  If the user
+     * has joined >1 read-only contacts together, we allow them to unlink it, even if they have
+     * never added their own information and unlinking will create a name only contact.
+     */
+    private boolean canUnlinkRawContacts() {
+        return isEditingMultipleRawContacts()
+                && !isEditingUserProfile()
+                && !isEditingReadOnlyRawContactWithNewContact();
+    }
+
+    /**
+     * Determines if changes were made in the editor that need to be saved, while taking into
+     * account that name changes are not real for read-only contacts.
+     * See go/editing-read-only-contacts
+     */
+    private boolean hasPendingChanges() {
+        if (mReadOnlyNameEditorView != null && mReadOnlyDisplayName != null) {
+            // We created a new raw contact delta with a default display name.
+            // We must test for pending changes while ignoring the default display name.
+            final String displayName = mReadOnlyNameEditorView.getDisplayName();
+            if (mReadOnlyDisplayName.equals(displayName)) {
+                final Set<String> excludedMimeTypes = new HashSet<>();
+                excludedMimeTypes.add(StructuredName.CONTENT_ITEM_TYPE);
+                return hasPendingRawContactChanges(excludedMimeTypes);
+            }
+            return true;
+        }
+        return hasPendingRawContactChanges(/* excludedMimeTypes =*/ null);
+    }
+
+    /**
+     * Whether editor inputs and the options menu should be enabled.
+     */
+    private boolean isEnabled() {
+        return mEnabled;
+    }
+
+    /**
+     * Returns the palette extra that was passed in.
+     */
+    private MaterialColorMapUtils.MaterialPalette getMaterialPalette() {
+        return mMaterialPalette;
+    }
+
+    //
+    // Account creation
+    //
+
+    private void selectAccountAndCreateContact() {
+        // If this is a local profile, then skip the logic about showing the accounts changed
+        // activity and create a phone-local contact.
+        if (mNewLocalProfile) {
+            createContact(null);
+            return;
+        }
+
+        // If there is no default account or the accounts have changed such that we need to
+        // prompt the user again, then launch the account prompt.
+        if (mEditorUtils.shouldShowAccountChangedNotification()) {
+            Intent intent = new Intent(mContext, ContactEditorAccountsChangedActivity.class);
+            // Prevent a second instance from being started on rotates
+            intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
+            mStatus = Status.SUB_ACTIVITY;
+            startActivityForResult(intent, REQUEST_CODE_ACCOUNTS_CHANGED);
+        } else {
+            // Otherwise, there should be a default account. Then either create a local contact
+            // (if default account is null) or create a contact with the specified account.
+            AccountWithDataSet defaultAccount = mEditorUtils.getOnlyOrDefaultAccount();
+            createContact(defaultAccount);
+        }
+    }
+
+    /**
+     * Create a contact by automatically selecting the first account. If there's no available
+     * account, a device-local contact should be created.
+     */
+    private void createContact() {
+        final List<AccountWithDataSet> accounts =
+                AccountTypeManager.getInstance(mContext).getAccounts(true);
+        // No Accounts available. Create a phone-local contact.
+        if (accounts.isEmpty()) {
+            createContact(null);
+            return;
+        }
+
+        // We have an account switcher in "create-account" screen, so don't need to ask a user to
+        // select an account here.
+        createContact(accounts.get(0));
+    }
+
+    /**
+     * Shows account creation screen associated with a given account.
+     *
+     * @param account may be null to signal a device-local contact should be created.
+     */
+    private void createContact(AccountWithDataSet account) {
+        final AccountTypeManager accountTypes = AccountTypeManager.getInstance(mContext);
+        final AccountType accountType = accountTypes.getAccountTypeForAccount(account);
+
+        if (accountType.getCreateContactActivityClassName() != null) {
+            if (mListener != null) {
+                mListener.onCustomCreateContactActivityRequested(account, mIntentExtras);
+            }
+        } else {
+            setStateForNewContact(account, accountType, isEditingUserProfile());
+        }
+    }
+
+    //
+    // Data binding
+    //
+
+    private void setState(Contact contact) {
+        // If we have already loaded data, we do not want to change it here to not confuse the user
+        if (!mState.isEmpty()) {
+            Log.v(TAG, "Ignoring background change. This will have to be rebased later");
+            return;
+        }
+
+        mRawContacts = contact.getRawContacts();
+
+        // See if this edit operation needs to be redirected to a custom editor
+        if (mRawContacts.size() == 1) {
+            RawContact rawContact = mRawContacts.get(0);
+            String type = rawContact.getAccountTypeString();
+            String dataSet = rawContact.getDataSet();
+            AccountType accountType = rawContact.getAccountType(mContext);
+            if (accountType.getEditContactActivityClassName() != null &&
+                    !accountType.areContactsWritable()) {
+                if (mListener != null) {
+                    String name = rawContact.getAccountName();
+                    long rawContactId = rawContact.getId();
+                    mListener.onCustomEditContactActivityRequested(
+                            new AccountWithDataSet(name, type, dataSet),
+                            ContentUris.withAppendedId(RawContacts.CONTENT_URI, rawContactId),
+                            mIntentExtras, true);
+                }
+                return;
+            }
+        }
+
+        String readOnlyDisplayName = null;
+        // Check for writable raw contacts.  If there are none, then we need to create one so user
+        // can edit.  For the user profile case, there is already an editable contact.
+        if (!contact.isUserProfile() && !contact.isWritableContact(mContext)) {
+            mHasNewContact = true;
+
+            // This is potentially an asynchronous call and will add deltas to list.
+            selectAccountAndCreateContact();
+
+            readOnlyDisplayName = contact.getDisplayName();
+        } else {
+            mHasNewContact = false;
+        }
+
+        // This also adds deltas to list.  If readOnlyDisplayName is null at this point it is
+        // simply ignored later on by the editor.
+        setStateForExistingContact(readOnlyDisplayName, contact.isUserProfile(), mRawContacts);
+    }
+
+    /**
+     * Prepare {@link #mState} for a newly created phone-local contact.
+     */
+    private void setStateForNewContact(AccountWithDataSet account, AccountType accountType,
+            boolean isUserProfile) {
+        setStateForNewContact(account, accountType, /* oldState =*/ null,
+                /* oldAccountType =*/ null, isUserProfile);
+    }
+
+    /**
+     * Prepare {@link #mState} for a newly created phone-local contact, migrating the state
+     * specified by oldState and oldAccountType.
+     */
+    private void setStateForNewContact(AccountWithDataSet account, AccountType accountType,
+            RawContactDelta oldState, AccountType oldAccountType, boolean isUserProfile) {
+        mStatus = Status.EDITING;
+        mState.add(createNewRawContactDelta(account, accountType, oldState, oldAccountType));
+        mIsUserProfile = isUserProfile;
+        mNewContactDataReady = true;
+        bindEditors();
+    }
+
+    /**
+     * Returns a {@link RawContactDelta} for a new contact suitable for addition into
+     * {@link #mState}.
+     *
+     * If oldState and oldAccountType are specified, the state specified by those parameters
+     * is migrated to the result {@link RawContactDelta}.
+     */
+    private RawContactDelta createNewRawContactDelta(AccountWithDataSet account,
+            AccountType accountType, RawContactDelta oldState, AccountType oldAccountType) {
+        final RawContact rawContact = new RawContact();
+        if (account != null) {
+            rawContact.setAccount(account);
+        } else {
+            rawContact.setAccountToLocal();
+        }
+
+        final RawContactDelta result = new RawContactDelta(
+                ValuesDelta.fromAfter(rawContact.getValues()));
+        if (oldState == null) {
+            // Parse any values from incoming intent
+            RawContactModifier.parseExtras(mContext, accountType, result, mIntentExtras);
+        } else {
+            RawContactModifier.migrateStateForNewContact(
+                    mContext, oldState, result, oldAccountType, accountType);
+        }
+
+        // Ensure we have some default fields (if the account type does not support a field,
+        // ensureKind will not add it, so it is safe to add e.g. Event)
+        RawContactModifier.ensureKindExists(result, accountType, Phone.CONTENT_ITEM_TYPE);
+        RawContactModifier.ensureKindExists(result, accountType, Email.CONTENT_ITEM_TYPE);
+        RawContactModifier.ensureKindExists(result, accountType, Organization.CONTENT_ITEM_TYPE);
+        RawContactModifier.ensureKindExists(result, accountType, Event.CONTENT_ITEM_TYPE);
+        RawContactModifier.ensureKindExists(result, accountType,
+                StructuredPostal.CONTENT_ITEM_TYPE);
+
+        // Set the correct URI for saving the contact as a profile
+        if (mNewLocalProfile) {
+            result.setProfileQueryUri();
+        }
+
+        return result;
+    }
+
+    /**
+     * Prepare {@link #mState} for an existing contact.
+     */
+    private void setStateForExistingContact(String readOnlyDisplayName, boolean isUserProfile,
+            ImmutableList<RawContact> rawContacts) {
+        setEnabled(true);
+        mReadOnlyDisplayName = readOnlyDisplayName;
+
+        mState.addAll(rawContacts.iterator());
+        setIntentExtras(mIntentExtras);
+        mIntentExtras = null;
+
+        // For user profile, change the contacts query URI
+        mIsUserProfile = isUserProfile;
+        boolean localProfileExists = false;
+
+        if (mIsUserProfile) {
+            for (RawContactDelta rawContactDelta : mState) {
+                // For profile contacts, we need a different query URI
+                rawContactDelta.setProfileQueryUri();
+                // Try to find a local profile contact
+                if (rawContactDelta.getValues().getAsString(RawContacts.ACCOUNT_TYPE) == null) {
+                    localProfileExists = true;
+                }
+            }
+            // Editor should always present a local profile for editing
+            // TODO(wjang): Need to figure out when this case comes up.  We can't do this if we're
+            // going to prune all but the one raw contact that we're trying to display by itself.
+            if (!localProfileExists && mRawContactIdToDisplayAlone <= 0) {
+                mState.add(createLocalRawContactDelta());
+            }
+        }
+        mExistingContactDataReady = true;
+        bindEditors();
+    }
+
+    /**
+     * Set the enabled state of editors.
+     */
+    private void setEnabled(boolean enabled) {
+        if (mEnabled != enabled) {
+            mEnabled = enabled;
+
+            // Enable/disable editors
+            if (mContent != null) {
+                int count = mContent.getChildCount();
+                for (int i = 0; i < count; i++) {
+                    mContent.getChildAt(i).setEnabled(enabled);
+                }
+            }
+
+            // Enable/disable aggregation suggestion vies
+            if (mAggregationSuggestionView != null) {
+                LinearLayout itemList = (LinearLayout) mAggregationSuggestionView.findViewById(
+                        R.id.aggregation_suggestions);
+                int count = itemList.getChildCount();
+                for (int i = 0; i < count; i++) {
+                    itemList.getChildAt(i).setEnabled(enabled);
+                }
+            }
+
+            // Maybe invalidate the options menu
+            final Activity activity = getActivity();
+            if (activity != null) activity.invalidateOptionsMenu();
+        }
+    }
+
+    /**
+     * Returns a {@link RawContactDelta} for a local contact suitable for addition into
+     * {@link #mState}.
+     */
+    private static RawContactDelta createLocalRawContactDelta() {
+        final RawContact rawContact = new RawContact();
+        rawContact.setAccountToLocal();
+
+        final RawContactDelta result = new RawContactDelta(
+                ValuesDelta.fromAfter(rawContact.getValues()));
+        result.setProfileQueryUri();
+
+        return result;
+    }
+
+    /**
+     * Bind editors using {@link #mState} and other members initialized from the loaded (or new)
+     * Contact.
+     */
     protected void bindEditors() {
         if (!isReadyToBindEditors()) {
             return;
@@ -97,8 +1365,9 @@
         // Add input fields for the loaded Contact
         final CompactRawContactsEditorView editorView = getContent();
         editorView.setListener(this);
-        editorView.setState(mState, getMaterialPalette(), mViewIdGenerator, mPhotoId,
-                mHasNewContact, mIsUserProfile, mAccountWithDataSet);
+        editorView.setState(mState, getMaterialPalette(), mViewIdGenerator,
+                mHasNewContact, mIsUserProfile, mAccountWithDataSet,
+                mRawContactIdToDisplayAlone, isEditingReadOnlyRawContactWithNewContact());
         if (mHasNewContact && !TextUtils.isEmpty(mReadOnlyDisplayName)) {
             mReadOnlyNameEditorView = editorView.getPrimaryNameEditorView();
             editorView.maybeSetReadOnlyDisplayNameAsPrimary(mReadOnlyDisplayName);
@@ -123,6 +1392,16 @@
         invalidateOptionsMenu();
     }
 
+    /**
+     * Invalidates the options menu if we are still associated with an Activity.
+     */
+    private void invalidateOptionsMenu() {
+        final Activity activity = getActivity();
+        if (activity != null) {
+            activity.invalidateOptionsMenu();
+        }
+    }
+
     private boolean isReadyToBindEditors() {
         if (mState.isEmpty()) {
             if (Log.isLoggable(TAG, Log.VERBOSE)) {
@@ -145,19 +1424,345 @@
         return true;
     }
 
+    /**
+     * Removes a current editor ({@link #mState}) and rebinds new editor for a new account.
+     * Some of old data are reused with new restriction enforced by the new account.
+     *
+     * @param oldState Old data being edited.
+     * @param oldAccount Old account associated with oldState.
+     * @param newAccount New account to be used.
+     */
+    private void rebindEditorsForNewContact(
+            RawContactDelta oldState, AccountWithDataSet oldAccount,
+            AccountWithDataSet newAccount) {
+        AccountTypeManager accountTypes = AccountTypeManager.getInstance(mContext);
+        AccountType oldAccountType = accountTypes.getAccountTypeForAccount(oldAccount);
+        AccountType newAccountType = accountTypes.getAccountTypeForAccount(newAccount);
+
+        if (newAccountType.getCreateContactActivityClassName() != null) {
+            Log.w(TAG, "external activity called in rebind situation");
+            if (mListener != null) {
+                mListener.onCustomCreateContactActivityRequested(newAccount, mIntentExtras);
+            }
+        } else {
+            mExistingContactDataReady = false;
+            mNewContactDataReady = false;
+            mState = new RawContactDeltaList();
+            setStateForNewContact(newAccount, newAccountType, oldState, oldAccountType,
+                    isEditingUserProfile());
+            if (mIsEdit) {
+                setStateForExistingContact(mReadOnlyDisplayName, isEditingUserProfile(),
+                        mRawContacts);
+            }
+        }
+    }
+
+    //
+    // ContactEditor
+    //
+
     @Override
-    protected View getAggregationAnchorView(long rawContactId) {
+    public void setListener(Listener listener) {
+        mListener = listener;
+    }
+
+    @Override
+    public void load(String action, Uri lookupUri, Bundle intentExtras) {
+        mAction = action;
+        mLookupUri = lookupUri;
+        mIntentExtras = intentExtras;
+
+        if (mIntentExtras != null) {
+            mAutoAddToDefaultGroup =
+                    mIntentExtras.containsKey(INTENT_EXTRA_ADD_TO_DEFAULT_DIRECTORY);
+            mNewLocalProfile =
+                    mIntentExtras.getBoolean(INTENT_EXTRA_NEW_LOCAL_PROFILE);
+            mDisableDeleteMenuOption =
+                    mIntentExtras.getBoolean(INTENT_EXTRA_DISABLE_DELETE_MENU_OPTION);
+            if (mIntentExtras.containsKey(INTENT_EXTRA_MATERIAL_PALETTE_PRIMARY_COLOR)
+                    && mIntentExtras.containsKey(INTENT_EXTRA_MATERIAL_PALETTE_SECONDARY_COLOR)) {
+                mMaterialPalette = new MaterialColorMapUtils.MaterialPalette(
+                        mIntentExtras.getInt(INTENT_EXTRA_MATERIAL_PALETTE_PRIMARY_COLOR),
+                        mIntentExtras.getInt(INTENT_EXTRA_MATERIAL_PALETTE_SECONDARY_COLOR));
+            }
+            mRawContactIdToDisplayAlone = mIntentExtras.getLong(
+                    INTENT_EXTRA_RAW_CONTACT_ID_TO_DISPLAY_ALONE, -1);
+            mRawContactDisplayAloneIsReadOnly = mIntentExtras.getBoolean(
+                    INTENT_EXTRA_RAW_CONTACT_DISPLAY_ALONE_IS_READ_ONLY);
+        }
+    }
+
+    @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;
+            }
+        }
+    }
+
+    @Override
+    public void onJoinCompleted(Uri uri) {
+        onSaveCompleted(false, SaveMode.RELOAD, uri != null, uri, /* joinContactId */ null);
+    }
+
+    @Override
+    public void onSaveCompleted(boolean hadChanges, int saveMode, boolean saveSucceeded,
+            Uri contactLookupUri, Long joinContactId) {
+        if (hadChanges) {
+            if (saveSucceeded) {
+                switch (saveMode) {
+                    case SaveMode.JOIN:
+                        break;
+                    case SaveMode.SPLIT:
+                        Toast.makeText(mContext, R.string.contactUnlinkedToast, Toast.LENGTH_SHORT)
+                                .show();
+                        break;
+                    default:
+                        final String displayName = getContent().getPrimaryNameEditorView()
+                                .getDisplayName();
+                        final String toastMessage;
+                        if (!TextUtils.isEmpty(displayName)) {
+                            toastMessage = getResources().getString(
+                                    R.string.contactSavedNamedToast, displayName);
+                        } else {
+                            toastMessage = getResources().getString(R.string.contactSavedToast);
+                        }
+                        Toast.makeText(mContext, toastMessage, Toast.LENGTH_SHORT).show();
+                }
+
+            } else {
+                Toast.makeText(mContext, R.string.contactSavedErrorToast, Toast.LENGTH_LONG).show();
+            }
+        }
+        switch (saveMode) {
+            case SaveMode.CLOSE: {
+                Intent resultIntent = null;
+                if (saveSucceeded && contactLookupUri != null) {
+                    final Uri lookupUri = ContactEditorUtils.maybeConvertToLegacyLookupUri(
+                            mContext, contactLookupUri, mLookupUri);
+                    if (Flags.getInstance(mContext).getBoolean(Experiments.CONTACT_SHEET)) {
+                        resultIntent = ObjectFactory.getContactSheetIntent(mContext, lookupUri);
+                    }
+                    if (resultIntent == null) {
+                        resultIntent = ImplicitIntentsUtil.composeQuickContactIntent(
+                                mContext, lookupUri, ScreenType.EDITOR);
+                        resultIntent.putExtra(QuickContactActivity.EXTRA_CONTACT_EDITED, true);
+                    }
+                } else {
+                    resultIntent = null;
+                }
+                // It is already saved, so prevent it from being saved again
+                mStatus = Status.CLOSING;
+                if (mListener != null) mListener.onSaveFinished(resultIntent);
+                break;
+            }
+            case SaveMode.COMPACT: {
+                // It is already saved, so prevent it from being saved again
+                mStatus = Status.CLOSING;
+                if (mListener != null) mListener.onSaveFinished(/* resultIntent= */ null);
+                break;
+            }
+            case SaveMode.JOIN:
+                if (saveSucceeded && contactLookupUri != null && joinContactId != null) {
+                    joinAggregate(joinContactId);
+                }
+                break;
+            case SaveMode.RELOAD:
+                if (saveSucceeded && contactLookupUri != null) {
+                    // If this was in INSERT, we are changing into an EDIT now.
+                    // If it already was an EDIT, we are changing to the new Uri now
+                    mState = new RawContactDeltaList();
+                    load(Intent.ACTION_EDIT, contactLookupUri, null);
+                    mStatus = Status.LOADING;
+                    getLoaderManager().restartLoader(LOADER_CONTACT, null, mContactLoaderListener);
+                }
+                break;
+
+            case SaveMode.SPLIT:
+                mStatus = Status.CLOSING;
+                if (mListener != null) {
+                    mListener.onContactSplit(contactLookupUri);
+                } else {
+                    Log.d(TAG, "No listener registered, can not call onSplitFinished");
+                }
+                break;
+        }
+    }
+
+    /**
+     * Shows a list of aggregates that can be joined into the currently viewed aggregate.
+     *
+     * @param contactLookupUri the fresh URI for the currently edited contact (after saving it)
+     */
+    private void showJoinAggregateActivity(Uri contactLookupUri) {
+        if (contactLookupUri == null || !isAdded()) {
+            return;
+        }
+
+        mContactIdForJoin = ContentUris.parseId(contactLookupUri);
+        final Intent intent = new Intent(mContext, ContactSelectionActivity.class);
+        intent.setAction(UiIntentActions.PICK_JOIN_CONTACT_ACTION);
+        intent.putExtra(UiIntentActions.TARGET_CONTACT_ID_EXTRA_KEY, mContactIdForJoin);
+        startActivityForResult(intent, REQUEST_CODE_JOIN);
+    }
+
+    //
+    // Aggregation PopupWindow
+    //
+
+    /**
+     * Triggers an asynchronous search for aggregation suggestions.
+     */
+    protected void acquireAggregationSuggestions(Context context,
+            long rawContactId, ValuesDelta valuesDelta) {
+        if (mAggregationSuggestionsRawContactId != rawContactId
+                && mAggregationSuggestionView != null) {
+            mAggregationSuggestionView.setVisibility(View.GONE);
+            mAggregationSuggestionView = null;
+            mAggregationSuggestionEngine.reset();
+        }
+
+        mAggregationSuggestionsRawContactId = rawContactId;
+
+        if (mAggregationSuggestionEngine == null) {
+            mAggregationSuggestionEngine = new AggregationSuggestionEngine(context);
+            mAggregationSuggestionEngine.setListener(this);
+            mAggregationSuggestionEngine.start();
+        }
+
+        mAggregationSuggestionEngine.setContactId(getContactId());
+
+        mAggregationSuggestionEngine.onNameChange(valuesDelta);
+    }
+
+    /**
+     * Returns the contact ID for the currently edited contact or 0 if the contact is new.
+     */
+    private long getContactId() {
+        for (RawContactDelta rawContact : mState) {
+            Long contactId = rawContact.getValues().getAsLong(RawContacts.CONTACT_ID);
+            if (contactId != null) {
+                return contactId;
+            }
+        }
+        return 0;
+    }
+
+    @Override
+    public void onAggregationSuggestionChange() {
+        final Activity activity = getActivity();
+        if ((activity != null && activity.isFinishing())
+                || !isVisible() ||  mState.isEmpty() || mStatus != Status.EDITING) {
+            return;
+        }
+
+        UiClosables.closeQuietly(mAggregationSuggestionPopup);
+
+        if (mAggregationSuggestionEngine.getSuggestedContactCount() == 0) {
+            return;
+        }
+
+        final View anchorView = getAggregationAnchorView();
+        if (anchorView == null) {
+            return; // Raw contact deleted?
+        }
+        mAggregationSuggestionPopup = new ListPopupWindow(mContext, null);
+        mAggregationSuggestionPopup.setAnchorView(anchorView);
+        mAggregationSuggestionPopup.setWidth(anchorView.getWidth());
+        mAggregationSuggestionPopup.setInputMethodMode(ListPopupWindow.INPUT_METHOD_NOT_NEEDED);
+        mAggregationSuggestionPopup.setAdapter(
+                new AggregationSuggestionAdapter(
+                        getActivity(),
+                        mState.size() == 1 && mState.get(0).isContactInsert(),
+                        /* listener =*/ this,
+                        mAggregationSuggestionEngine.getSuggestions()));
+        mAggregationSuggestionPopup.setOnItemClickListener(new AdapterView.OnItemClickListener() {
+            @Override
+            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
+                final AggregationSuggestionView suggestionView = (AggregationSuggestionView) view;
+                suggestionView.handleItemClickEvent();
+                UiClosables.closeQuietly(mAggregationSuggestionPopup);
+                mAggregationSuggestionPopup = null;
+            }
+        });
+        mAggregationSuggestionPopup.show();
+    }
+
+    /**
+     * Returns the editor view that should be used as the anchor for aggregation suggestions.
+     */
+    protected View getAggregationAnchorView() {
         return getContent().getAggregationAnchorView();
     }
 
     @Override
+    public void onJoinAction(long contactId, List<Long> rawContactIdList) {
+        final long rawContactIds[] = new long[rawContactIdList.size()];
+        for (int i = 0; i < rawContactIds.length; i++) {
+            rawContactIds[i] = rawContactIdList.get(i);
+        }
+        try {
+            JoinSuggestedContactDialogFragment.show(this, rawContactIds);
+        } catch (Exception ignored) {
+            // No problem - the activity is no longer available to display the dialog
+        }
+    }
+
+    /**
+     * Joins the suggested contact (specified by the id's of constituent raw
+     * contacts), save all changes, and stay in the editor.
+     */
+    public void doJoinSuggestedContact(long[] rawContactIds) {
+        if (!hasValidState() || mStatus != Status.EDITING) {
+            return;
+        }
+
+        mState.setJoinWithRawContacts(rawContactIds);
+        save(SaveMode.RELOAD);
+    }
+
+    @Override
+    public void onEditAction(Uri contactLookupUri) {
+        SuggestionEditConfirmationDialogFragment.show(this, contactLookupUri);
+    }
+
+    /**
+     * Abandons the currently edited contact and switches to editing the suggested
+     * one, transferring all the data there
+     */
+    public void doEditSuggestedContact(Uri contactUri) {
+        if (mListener != null) {
+            // make sure we don't save this contact when closing down
+            mStatus = Status.CLOSING;
+            mListener.onEditOtherContactRequested(
+                    contactUri, mState.get(0).getContentValues());
+        }
+    }
+
+    /**
+     * Sets group metadata on all bound editors.
+     */
     protected void setGroupMetaData() {
         if (mGroupMetaData != null) {
             getContent().setGroupMetaData(mGroupMetaData);
         }
     }
 
-    @Override
+    /**
+     * Persist the accumulated editor deltas.
+     *
+     * @param joinContactId the raw contact ID to join the contact being saved to after the save,
+     *         may be null.
+     */
     protected boolean doSaveAction(int saveMode, Long joinContactId) {
         final Intent intent = ContactSaveService.createSaveContactIntent(mContext, mState,
                 SAVE_MODE_EXTRA_KEY, saveMode, isEditingUserProfile(),
@@ -167,7 +1772,22 @@
         return startSaveService(mContext, intent, saveMode);
     }
 
-    @Override
+    private boolean startSaveService(Context context, Intent intent, int saveMode) {
+        final boolean result = ContactSaveService.startService(
+                context, intent, saveMode);
+        if (!result) {
+            onCancelEditConfirmed();
+        }
+        return result;
+    }
+
+    //
+    // Join Activity
+    //
+
+    /**
+     * Performs aggregation with the contact selected by the user from suggestions or A-Z list.
+     */
     protected void joinAggregate(final long contactId) {
         final Intent intent = ContactSaveService.createJoinContactsIntent(
                 mContext, mContactIdForJoin, contactId, CompactContactEditorActivity.class,
@@ -191,11 +1811,8 @@
         getContent().updatePhoto(uri);
     }
 
-    public void setPrimaryPhoto(CompactPhotoSelectionFragment.Photo photo) {
-        getContent().setPrimaryPhoto(photo);
-
-        // Update the photo ID we will try to match when selecting the photo to display
-        mPhotoId = photo.photoId;
+    public void setPrimaryPhoto() {
+        getContent().setPrimaryPhoto();
     }
 
     @Override
@@ -237,78 +1854,21 @@
 
     @Override
     public void onPhotoEditorViewClicked() {
-        if (isEditingMultipleRawContacts()) {
-            final ArrayList<CompactPhotoSelectionFragment.Photo> photos = getContent().getPhotos();
-            if (photos.size() > 1) {
-                updatePrimaryForSelection(photos);
-                // For aggregate contacts, the user may select a new super primary photo from among
-                // the (non-default) raw contact photos, or source a new photo.
-                getEditorActivity().selectPhoto(photos, getPhotoMode());
-                return;
-            }
-        }
         // For contacts composed of a single writable raw contact, or raw contacts have no more
         // than 1 photo, clicking the photo view simply opens the source photo dialog
         getEditorActivity().changePhoto(getPhotoMode());
     }
 
-    // This method override photo's primary flag based on photoId and set the photo currently
-    // shown in the editor to be the new primary no matter how many primary photos there are in
-    // the photo picker. This is because the photos returned by "getPhoto" may contain 0, 1,
-    // or 2+ primary photos and when we link contacts in the editor, the photos returned may change.
-    // We need to put check mark on the photo currently shown in editor, so we override "primary".
-    // This doesn't modify anything in the database,so there would be no pending changes.
-    private void updatePrimaryForSelection(ArrayList<CompactPhotoSelectionFragment.Photo> photos) {
-        for (CompactPhotoSelectionFragment.Photo photo : photos) {
-            if (photo.photoId == mPhotoId) {
-                photo.primary = true;
-            } else {
-                photo.primary = false;
-            }
-            updateContentDescription(photo);
-        }
-    }
-
-    private void updateContentDescription(CompactPhotoSelectionFragment.Photo photo) {
-        if (!TextUtils.isEmpty(photo.accountType)) {
-            photo.contentDescription = getResources().getString(photo.primary ?
-                            R.string.photo_view_description_checked :
-                            R.string.photo_view_description_not_checked,
-                    photo.accountType, photo.accountName);
-            photo.contentDescriptionChecked = getResources().getString(
-                    R.string.photo_view_description_checked,
-                    photo.accountType, photo.accountName);
-        } else {
-            photo.contentDescription = getResources().getString(photo.primary ?
-                    R.string.photo_view_description_checked_no_info :
-                    R.string.photo_view_description_not_checked_no_info);
-            photo.contentDescriptionChecked = getResources().getString(
-                    R.string.photo_view_description_checked_no_info);
-        }
-    }
-
     @Override
-    public void onRawContactSelected(Uri uri, long rawContactId, boolean isReadOnly) {
-        final Activity activity = getActivity();
-        if (activity != null && !activity.isFinishing()) {
-            final Intent intent = EditorIntents.createEditContactIntentForRawContact(
-                    activity, uri, rawContactId, isReadOnly);
-            activity.startActivity(intent);
-        }
-    }
-
-    @Override
-    public Bundle getUpdatedPhotos() {
-        return mUpdatedPhotos;
+    public void onRawContactSelected(long rawContactId, boolean isReadOnly) {
+        mRawContactDisplayAloneIsReadOnly = isReadOnly;
+        mRawContactIdToDisplayAlone = rawContactId;
+        bindEditors();
     }
 
     private int getPhotoMode() {
-        if (getContent().isWritablePhotoSet()) {
-            return isEditingMultipleRawContacts()
-                    ? PhotoActionPopup.Modes.MULTIPLE_WRITE_ABLE_PHOTOS
-                    : PhotoActionPopup.Modes.WRITE_ABLE_PHOTO;
-        }
-        return PhotoActionPopup.Modes.NO_PHOTO;
+        return getContent().isWritablePhotoSet() ? PhotoActionPopup.Modes.WRITE_ABLE_PHOTO
+                : PhotoActionPopup.Modes.NO_PHOTO;
     }
 
     private CompactContactEditorActivity getEditorActivity() {
diff --git a/src/com/android/contacts/editor/CompactKindSectionView.java b/src/com/android/contacts/editor/CompactKindSectionView.java
index f550c6d..cbc4772 100644
--- a/src/com/android/contacts/editor/CompactKindSectionView.java
+++ b/src/com/android/contacts/editor/CompactKindSectionView.java
@@ -16,13 +16,6 @@
 
 package com.android.contacts.editor;
 
-import com.android.contacts.R;
-import com.android.contacts.common.model.RawContactDelta;
-import com.android.contacts.common.model.RawContactModifier;
-import com.android.contacts.common.model.ValuesDelta;
-import com.android.contacts.common.model.account.AccountType;
-import com.android.contacts.common.model.dataitem.DataKind;
-
 import android.content.Context;
 import android.database.Cursor;
 import android.provider.ContactsContract.CommonDataKinds.Event;
@@ -37,11 +30,20 @@
 import android.widget.LinearLayout;
 import android.widget.TextView;
 
+import com.android.contacts.R;
+import com.android.contacts.common.model.RawContactDelta;
+import com.android.contacts.common.model.RawContactModifier;
+import com.android.contacts.common.model.ValuesDelta;
+import com.android.contacts.common.model.account.AccountType;
+import com.android.contacts.common.model.dataitem.DataKind;
+
 import java.util.ArrayList;
 import java.util.List;
 
 /**
- * Version of {@link KindSectionView} that supports multiple RawContactDeltas.
+ * Custom view for an entire section of data as segmented by
+ * {@link DataKind} around a {@link Data#MIMETYPE}. This view shows a
+ * section header and a trigger for adding new {@link Data} rows.
  */
 public class CompactKindSectionView extends LinearLayout {
 
@@ -147,7 +149,7 @@
         }
     }
 
-    private KindSectionDataList mKindSectionDataList;
+    private KindSectionData mKindSectionData;
     private ViewIdGenerator mViewIdGenerator;
     private CompactRawContactsEditorView.Listener mListener;
 
@@ -180,6 +182,7 @@
 
     @Override
     protected void onFinishInflate() {
+        super.onFinishInflate();
         setDrawingCacheEnabled(true);
         setAlwaysDrawnWithCacheEnabled(true);
 
@@ -227,7 +230,7 @@
      * and nicknames) are empty.
      */
     public boolean isEmptyName() {
-        if (!StructuredName.CONTENT_ITEM_TYPE.equals(mKindSectionDataList.getMimeType())) {
+        if (!StructuredName.CONTENT_ITEM_TYPE.equals(mKindSectionData.getMimeType())) {
             return false;
         }
         for (int i = 0; i < mEditors.getChildCount(); i++) {
@@ -247,7 +250,7 @@
      * without informing editor listeners.
      */
     public void setName(String displayName) {
-        if (!StructuredName.CONTENT_ITEM_TYPE.equals(mKindSectionDataList.getMimeType())) {
+        if (!StructuredName.CONTENT_ITEM_TYPE.equals(mKindSectionData.getMimeType())) {
             return;
         }
         for (int i = 0; i < mEditors.getChildCount(); i++) {
@@ -270,7 +273,7 @@
     }
 
     public StructuredNameEditorView getPrimaryNameEditorView() {
-        if (!StructuredName.CONTENT_ITEM_TYPE.equals(mKindSectionDataList.getMimeType())
+        if (!StructuredName.CONTENT_ITEM_TYPE.equals(mKindSectionData.getMimeType())
             || mEditors.getChildCount() == 0) {
             return null;
         }
@@ -278,7 +281,7 @@
     }
 
     /**
-     * Binds views for the given {@link KindSectionData} list.
+     * Binds views for the given {@link KindSectionData}.
      *
      * We create a structured name and phonetic name editor for each {@link DataKind} with a
      * {@link StructuredName#CONTENT_ITEM_TYPE} mime type.  The number and order of editors are
@@ -287,15 +290,15 @@
      * Empty name editors are never added and at least one structured name editor is always
      * displayed, even if it is empty.
      */
-    public void setState(KindSectionDataList kindSectionDataList,
+    public void setState(KindSectionData kindSectionData,
             ViewIdGenerator viewIdGenerator, CompactRawContactsEditorView.Listener listener,
             ValuesDelta primaryValuesDelta) {
-        mKindSectionDataList = kindSectionDataList;
+        mKindSectionData = kindSectionData;
         mViewIdGenerator = viewIdGenerator;
         mListener = listener;
 
-        // Set the icon using the first DataKind
-        final DataKind dataKind = mKindSectionDataList.getDataKind();
+        // Set the icon using the DataKind
+        final DataKind dataKind = mKindSectionData.getDataKind();
         if (dataKind != null) {
             mIcon.setImageDrawable(EditorUiUtils.getMimeTypeDrawable(getContext(),
                     dataKind.mimeType));
@@ -313,27 +316,26 @@
     private void rebuildFromState(ValuesDelta primaryValuesDelta) {
         mEditors.removeAllViews();
 
-        final String mimeType = mKindSectionDataList.getMimeType();
-        for (KindSectionData kindSectionData : mKindSectionDataList) {
-            if (StructuredName.CONTENT_ITEM_TYPE.equals(mimeType)) {
-                addNameEditorViews(kindSectionData.getAccountType(),
-                        primaryValuesDelta, kindSectionData.getRawContactDelta());
-            } else if (GroupMembership.CONTENT_ITEM_TYPE.equals(mimeType)) {
-                addGroupEditorView(kindSectionData.getRawContactDelta(),
-                        kindSectionData.getDataKind());
+        final String mimeType = mKindSectionData.getMimeType();
+        if (StructuredName.CONTENT_ITEM_TYPE.equals(mimeType)) {
+            addNameEditorViews(mKindSectionData.getAccountType(),
+                    primaryValuesDelta, mKindSectionData.getRawContactDelta());
+        } else if (GroupMembership.CONTENT_ITEM_TYPE.equals(mimeType)) {
+            addGroupEditorView(mKindSectionData.getRawContactDelta(),
+                    mKindSectionData.getDataKind());
+        } else {
+            final Editor.EditorListener editorListener;
+            if (Nickname.CONTENT_ITEM_TYPE.equals(mimeType)) {
+                editorListener = new OtherNameKindEditorListener();
+            } else if (Event.CONTENT_ITEM_TYPE.equals(mimeType)) {
+                editorListener = new EventEditorListener();
             } else {
-                final Editor.EditorListener editorListener;
-                if (Nickname.CONTENT_ITEM_TYPE.equals(mimeType)) {
-                    editorListener = new OtherNameKindEditorListener();
-                } else if (Event.CONTENT_ITEM_TYPE.equals(mimeType)) {
-                    editorListener = new EventEditorListener();
-                } else {
-                    editorListener = new NonNameEditorListener();
-                }
-                for (ValuesDelta valuesDelta : kindSectionData.getVisibleValuesDeltas()) {
-                    addNonNameEditorView(kindSectionData.getRawContactDelta(),
-                            kindSectionData.getDataKind(), valuesDelta, editorListener);
-                }
+                editorListener = new NonNameEditorListener();
+            }
+            final List<ValuesDelta> valuesDeltas = mKindSectionData.getVisibleValuesDeltas();
+            for (int i = 0; i < valuesDeltas.size(); i++ ) {
+                addNonNameEditorView(mKindSectionData.getRawContactDelta(),
+                        mKindSectionData.getDataKind(), valuesDeltas.get(i), editorListener);
             }
         }
     }
@@ -442,9 +444,9 @@
      */
     public void updateEmptyEditors(boolean shouldAnimate) {
         final boolean isNameKindSection = StructuredName.CONTENT_ITEM_TYPE.equals(
-                mKindSectionDataList.getMimeType());
+                mKindSectionData.getMimeType());
         final boolean isGroupKindSection = GroupMembership.CONTENT_ITEM_TYPE.equals(
-                mKindSectionDataList.getMimeType());
+                mKindSectionData.getMimeType());
 
         if (isNameKindSection) {
             // The name kind section is always visible
@@ -531,7 +533,8 @@
         if (emptyEditors.size() > 1) {
             // If there is more than 1 empty editor, then remove it from the list of editors.
             int deleted = 0;
-            for (final View view : emptyEditors) {
+            for (int i = 0; i < emptyEditors.size(); i++) {
+                final View view = emptyEditors.get(i);
                 // If no child {@link View}s are being focused on within this {@link View}, then
                 // remove this empty editor. We can assume that at least one empty editor has
                 // focus. One way to get two empty editors is by deleting characters from a
@@ -546,9 +549,8 @@
             return;
         }
         // Determine if we should add a new empty editor
-        final DataKind dataKind = mKindSectionDataList.get(0).getDataKind();
-        final RawContactDelta rawContactDelta =
-                mKindSectionDataList.get(0).getRawContactDelta();
+        final DataKind dataKind = mKindSectionData.getDataKind();
+        final RawContactDelta rawContactDelta = mKindSectionData.getRawContactDelta();
         if (dataKind == null // There is nothing we can do.
                 // We have already reached the maximum number of editors, don't add any more.
                 || !RawContactModifier.canInsert(rawContactDelta, dataKind)
@@ -558,7 +560,7 @@
         }
         // Add a new empty editor
         if (mShowOneEmptyEditor) {
-            final String mimeType = mKindSectionDataList.getMimeType();
+            final String mimeType = mKindSectionData.getMimeType();
             if (Nickname.CONTENT_ITEM_TYPE.equals(mimeType) && mEditors.getChildCount() > 0) {
                 return;
             }
diff --git a/src/com/android/contacts/editor/CompactPhotoEditorView.java b/src/com/android/contacts/editor/CompactPhotoEditorView.java
index 899e22a..66fe68a 100644
--- a/src/com/android/contacts/editor/CompactPhotoEditorView.java
+++ b/src/com/android/contacts/editor/CompactPhotoEditorView.java
@@ -16,13 +16,6 @@
 
 package com.android.contacts.editor;
 
-import com.android.contacts.R;
-import com.android.contacts.common.ContactPhotoManager;
-import com.android.contacts.common.model.ValuesDelta;
-import com.android.contacts.common.util.MaterialColorMapUtils.MaterialPalette;
-import com.android.contacts.util.SchedulingUtils;
-import com.android.contacts.widget.QuickContactImageView;
-
 import android.app.Activity;
 import android.content.Context;
 import android.content.res.TypedArray;
@@ -36,6 +29,13 @@
 import android.view.ViewGroup;
 import android.widget.RelativeLayout;
 
+import com.android.contacts.R;
+import com.android.contacts.common.ContactPhotoManager;
+import com.android.contacts.common.model.ValuesDelta;
+import com.android.contacts.common.util.MaterialColorMapUtils.MaterialPalette;
+import com.android.contacts.util.SchedulingUtils;
+import com.android.contacts.widget.QuickContactImageView;
+
 /**
  * Displays a photo and calls the host back when the user clicks it.
  */
@@ -65,6 +65,7 @@
     private View mPhotoIcon;
     private View mPhotoIconOverlay;
     private View mPhotoTouchInterceptOverlay;
+    private MaterialPalette mMaterialPalette;
 
     private boolean mReadOnly;
     private boolean mIsNonDefaultPhotoBound;
@@ -114,17 +115,24 @@
         if (mReadOnly) {
             mPhotoIcon.setVisibility(View.GONE);
             mPhotoIconOverlay.setVisibility(View.GONE);
+            mPhotoTouchInterceptOverlay.setClickable(false);
         } else {
+            mPhotoIcon.setVisibility(View.VISIBLE);
+            mPhotoIconOverlay.setVisibility(View.VISIBLE);
             mPhotoTouchInterceptOverlay.setOnClickListener(this);
         }
     }
 
+    public void setPalette(MaterialPalette palette) {
+        mMaterialPalette = palette;
+    }
+
     /**
      * Tries to bind a full size photo or a bitmap loaded from the given ValuesDelta,
      * and falls back to the default avatar, tinted using the given MaterialPalette (if it's not
      * null);
      */
-    public void setPhoto(ValuesDelta valuesDelta, MaterialPalette materialPalette) {
+    public void setPhoto(ValuesDelta valuesDelta) {
         // Check if we can update to the full size photo immediately
         final Long photoFileId = EditorUiUtils.getPhotoFileId(valuesDelta);
         if (photoFileId != null) {
@@ -143,7 +151,7 @@
             return;
         }
 
-        setDefaultPhoto(materialPalette);
+        setDefaultPhoto(mMaterialPalette);
         adjustDimensions();
     }
 
@@ -203,6 +211,7 @@
     }
 
     private void setDefaultPhoto(MaterialPalette materialPalette) {
+        mIsNonDefaultPhotoBound = false;
         EditorUiUtils.setDefaultPhoto(mPhotoImageView, getResources(), materialPalette);
     }
 
@@ -219,9 +228,7 @@
      * Removes the current bound photo bitmap.
      */
     public void removePhoto() {
-        mPhotoImageView.setImageBitmap(/* bitmap =*/ null);
-        mIsNonDefaultPhotoBound = false;
-        setDefaultPhoto(/* materialPalette =*/ null);
+        setDefaultPhoto(mMaterialPalette);
     }
 
     @Override
diff --git a/src/com/android/contacts/editor/CompactPhotoSelectionFragment.java b/src/com/android/contacts/editor/CompactPhotoSelectionFragment.java
deleted file mode 100644
index 0a8894f..0000000
--- a/src/com/android/contacts/editor/CompactPhotoSelectionFragment.java
+++ /dev/null
@@ -1,360 +0,0 @@
-/*
- * Copyright (C) 2015 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.editor;
-
-import com.android.contacts.R;
-import com.android.contacts.common.ContactPhotoManager;
-import com.android.contacts.common.model.ValuesDelta;
-import com.android.contacts.common.model.account.AccountType;
-
-import android.app.Fragment;
-import android.content.Context;
-import android.net.Uri;
-import android.os.Bundle;
-import android.os.Parcel;
-import android.os.Parcelable;
-import android.provider.ContactsContract;
-import android.util.DisplayMetrics;
-import android.view.Display;
-import android.view.LayoutInflater;
-import android.view.MenuItem;
-import android.view.View;
-import android.view.ViewGroup;
-import android.view.accessibility.AccessibilityEvent;
-import android.widget.AdapterView;
-import android.widget.BaseAdapter;
-import android.widget.GridView;
-import android.widget.ImageView;
-
-import java.util.ArrayList;
-
-/**
- * Displays {@link Photo}s in a grid and calls back the host when one is clicked.
- */
-public class CompactPhotoSelectionFragment extends Fragment {
-
-    private static final String STATE_PHOTOS = "photos";
-    private static final String STATE_PHOTO_MODE = "photoMode";
-    private final int VIEW_TYPE_TAKE_PHOTO = 0;
-    private final int VIEW_TYPE_ALL_PHOTOS = 1;
-    private final int VIEW_TYPE_IMAGE = 2;
-
-    /**
-     * Callbacks hosts this Fragment.
-     */
-    public interface Listener {
-
-        /**
-         * Invoked when the user wants to change their photo.
-         */
-        void onPhotoSelected(Photo photo);
-    }
-
-    /**
-     * Holds a photo {@link ValuesDelta} and {@link AccountType} information to draw
-     * an account type icon over it.
-     */
-    public static final class Photo implements Parcelable {
-
-        public static final Creator<Photo> CREATOR = new Creator<Photo>() {
-
-            public Photo createFromParcel(Parcel in) {
-                return new Photo(in);
-            }
-
-            public Photo[] newArray(int size) {
-                return new Photo[size];
-            }
-        };
-
-        public Photo() {
-        }
-
-        private Photo(Parcel source) {
-            readFromParcel(source);
-        }
-
-        // From AccountType, everything we need to display the account type icon
-        public int titleRes;
-        public int iconRes;
-        public String syncAdapterPackageName;
-
-        public String contentDescription;
-        public String contentDescriptionChecked; // Talkback announcement when the photo is checked
-        public String accountType;
-        public String accountName;
-
-        public ValuesDelta valuesDelta;
-
-        /**
-         * Whether the photo is being displayed for the aggregate contact.
-         * This may be because it is marked super primary or it is the one quick contacts picked
-         * randomly to display because none is marked super primary.
-         */
-        public boolean primary;
-
-        /**
-         * Pointer back to the KindSectionDataList this photo came from.
-         * See {@link CompactRawContactsEditorView#getPhotos}
-         * See {@link CompactRawContactsEditorView#setPrimaryPhoto}
-         */
-        public int kindSectionDataListIndex = -1;
-        public int valuesDeltaListIndex = -1;
-
-        /** Newly taken or selected photo that has not yet been saved to CP2. */
-        public Uri updatedPhotoUri;
-
-        public long photoId;
-
-        @Override
-        public int describeContents() {
-            return 0;
-        }
-
-        @Override
-        public void writeToParcel(Parcel dest, int flags) {
-            dest.writeInt(titleRes);
-            dest.writeInt(iconRes);
-            dest.writeString(syncAdapterPackageName);
-            dest.writeParcelable(valuesDelta, flags);
-            dest.writeInt(primary ? 1 : 0);
-            dest.writeInt(kindSectionDataListIndex);
-            dest.writeInt(valuesDeltaListIndex);
-            dest.writeParcelable(updatedPhotoUri, flags);
-            dest.writeLong(photoId);
-        }
-
-        private void readFromParcel(Parcel source) {
-            final ClassLoader classLoader = getClass().getClassLoader();
-            titleRes = source.readInt();
-            iconRes = source.readInt();
-            syncAdapterPackageName = source.readString();
-            valuesDelta = source.readParcelable(classLoader);
-            primary = source.readInt() == 1;
-            kindSectionDataListIndex = source.readInt();
-            valuesDeltaListIndex = source.readInt();
-            updatedPhotoUri = source.readParcelable(classLoader);
-            photoId = source.readLong();
-        }
-    }
-
-    private final class PhotoAdapter extends BaseAdapter {
-
-        private final Context mContext;
-        private final LayoutInflater mLayoutInflater;
-
-        public PhotoAdapter() {
-            mContext = getContext();
-            mLayoutInflater = LayoutInflater.from(mContext);
-        }
-
-        @Override
-        public int getCount() {
-            return mPhotos == null ? 2 : mPhotos.size() + 2;
-        }
-
-        @Override
-        public Object getItem(int index) {
-            return mPhotos == null ? null : mPhotos.get(index);
-        }
-
-        @Override
-        public long getItemId(int index) {
-            return index;
-        }
-
-        @Override
-        public int getItemViewType(int index) {
-            if (index == 0) {
-                return VIEW_TYPE_TAKE_PHOTO;
-            } else if (index == 1) {
-                return VIEW_TYPE_ALL_PHOTOS;
-            } else {
-                return VIEW_TYPE_IMAGE;
-            }
-        }
-
-        @Override
-        public View getView(int position, View convertView, ViewGroup parent) {
-            if (mPhotos == null) return null;
-
-            // when position is 0 or 1, we should make sure account_type *is not* in convertView
-            // before reusing it.
-            if (getItemViewType(position) == 0){
-                if (convertView == null || convertView.findViewById(R.id.account_type) != null) {
-                    return mLayoutInflater.inflate(R.layout.take_a_photo_button, /* root =*/ null);
-                }
-                return convertView;
-            }
-
-            if (getItemViewType(position) == 1) {
-                if (convertView == null || convertView.findViewById(R.id.account_type) != null) {
-                    return mLayoutInflater.inflate(R.layout.all_photos_button, /* root =*/ null);
-                }
-                return convertView;
-            }
-
-            // when position greater than 1, we should make sure account_type *is* in convertView
-            // before reusing it.
-            position -= 2;
-
-            final View photoItemView;
-            if (convertView == null || convertView.findViewById(R.id.account_type) == null) {
-                photoItemView = mLayoutInflater.inflate(
-                        R.layout.compact_photo_selection_item, /* root =*/ null);
-            } else {
-                photoItemView = convertView;
-            }
-
-            final Photo photo = mPhotos.get(position);
-
-            // Bind the photo
-            final ImageView imageView = (ImageView) photoItemView.findViewById(R.id.image);
-            if (photo.updatedPhotoUri != null) {
-                EditorUiUtils.loadPhoto(ContactPhotoManager.getInstance(mContext),
-                        imageView, photo.updatedPhotoUri);
-            } else {
-                final Long photoFileId = EditorUiUtils.getPhotoFileId(photo.valuesDelta);
-                if (photoFileId != null) {
-                    final Uri photoUri = ContactsContract.DisplayPhoto.CONTENT_URI.buildUpon()
-                            .appendPath(photoFileId.toString()).build();
-                    EditorUiUtils.loadPhoto(ContactPhotoManager.getInstance(mContext),
-                            imageView, photoUri);
-                } else {
-                    imageView.setImageBitmap(EditorUiUtils.getPhotoBitmap(photo.valuesDelta));
-                }
-            }
-
-            // Add the account type icon
-            final ImageView accountTypeImageView = (ImageView)
-                    photoItemView.findViewById(R.id.account_type);
-            accountTypeImageView.setImageDrawable(AccountType.getDisplayIcon(
-                    mContext, photo.titleRes, photo.iconRes, photo.syncAdapterPackageName));
-
-            // Display a check icon over the primary photo
-            final ImageView checkImageView = (ImageView) photoItemView.findViewById(R.id.check);
-            checkImageView.setVisibility(photo.primary ? View.VISIBLE : View.GONE);
-
-            photoItemView.setContentDescription(photo.contentDescription);
-
-            return photoItemView;
-        }
-    }
-
-    private ArrayList<Photo> mPhotos;
-    private int mPhotoMode;
-    private Listener mListener;
-    private GridView mGridView;
-
-    public void setListener(Listener listener) {
-        mListener = listener;
-    }
-
-    public void setPhotos(ArrayList<Photo> photos, int photoMode) {
-        mPhotos = photos;
-        mPhotoMode = photoMode;
-        mGridView.setAccessibilityDelegate(new View.AccessibilityDelegate() {});
-    }
-
-    @Override
-    public void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        if (savedInstanceState != null) {
-            mPhotos = savedInstanceState.getParcelableArrayList(STATE_PHOTOS);
-            mPhotoMode = savedInstanceState.getInt(STATE_PHOTO_MODE, 0);
-        }
-    }
-
-    @Override
-    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedState) {
-        setHasOptionsMenu(true);
-
-        final PhotoAdapter photoAdapter = new PhotoAdapter();
-
-        final View view = inflater.inflate(R.layout.compact_photo_selection_fragment,
-                container, false);
-        mGridView = (GridView) view.findViewById(R.id.grid_view);
-        mGridView.setAdapter(photoAdapter);
-        mGridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
-            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
-                final PhotoSourceDialogFragment.Listener listener =
-                        (PhotoSourceDialogFragment.Listener) getActivity();
-                if (position == 0) {
-                    listener.onTakePhotoChosen();
-                } else if (position == 1) {
-                    listener.onPickFromGalleryChosen();
-                } else {
-                    // Call the host back so it can set the new photo as primary
-                    final Photo photo = (Photo) photoAdapter.getItem(position - 2);
-                    if (mListener != null) {
-                        mListener.onPhotoSelected(photo);
-                    }
-                    handleAccessibility(photo, position);
-                }
-            }
-        });
-
-        final Display display = getActivity().getWindowManager().getDefaultDisplay();
-        final DisplayMetrics outMetrics = new DisplayMetrics ();
-        display.getRealMetrics(outMetrics); // real metrics include the navigation Bar
-
-        final float numColumns = outMetrics.widthPixels /
-                getResources().getDimension(R.dimen.photo_picker_item_ideal_width);
-        mGridView.setNumColumns(Math.round(numColumns));
-
-        return view;
-    }
-
-    private void handleAccessibility(Photo photo, int position) {
-        // Use custom AccessibilityDelegate when closing this fragment to suppress event.
-        mGridView.setAccessibilityDelegate(new View.AccessibilityDelegate() {
-            @Override
-            public boolean onRequestSendAccessibilityEvent(
-                    ViewGroup host, View child,AccessibilityEvent event) {
-                if (event.getEventType() == AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED) {
-                    return false;
-                }
-                return super.onRequestSendAccessibilityEvent(host, child, event);
-            }
-        });
-        final ViewGroup clickedView = (ViewGroup) mGridView.getChildAt(position);
-        clickedView.announceForAccessibility(photo.contentDescriptionChecked);
-    }
-
-    @Override
-    public void onSaveInstanceState(Bundle outState) {
-        outState.putParcelableArrayList(STATE_PHOTOS, mPhotos);
-        outState.putInt(STATE_PHOTO_MODE, mPhotoMode);
-        super.onSaveInstanceState(outState);
-    }
-
-    @Override
-    public boolean onOptionsItemSelected(MenuItem item) {
-        switch (item.getItemId()) {
-            case android.R.id.home:
-                getActivity().onBackPressed();
-                return true;
-            default:
-                return super.onOptionsItemSelected(item);
-        }
-    }
-
-    @Override
-    public Context getContext() {
-        return getActivity();
-    }
-}
\ No newline at end of file
diff --git a/src/com/android/contacts/editor/CompactRawContactsEditorView.java b/src/com/android/contacts/editor/CompactRawContactsEditorView.java
index 40f670a..438618d 100644
--- a/src/com/android/contacts/editor/CompactRawContactsEditorView.java
+++ b/src/com/android/contacts/editor/CompactRawContactsEditorView.java
@@ -16,15 +16,13 @@
 
 package com.android.contacts.editor;
 
-import android.content.ContentUris;
 import android.content.Context;
+import android.content.res.Resources;
 import android.database.Cursor;
-import android.graphics.Bitmap;
+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;
 import android.provider.ContactsContract.CommonDataKinds.Email;
 import android.provider.ContactsContract.CommonDataKinds.Event;
 import android.provider.ContactsContract.CommonDataKinds.GroupMembership;
@@ -42,7 +40,6 @@
 import android.text.TextUtils;
 import android.util.AttributeSet;
 import android.util.Log;
-import android.util.Pair;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
@@ -54,6 +51,8 @@
 import android.widget.TextView;
 
 import com.android.contacts.R;
+import com.android.contacts.common.GeoUtil;
+import com.android.contacts.common.compat.PhoneNumberUtilsCompat;
 import com.android.contacts.common.model.AccountTypeManager;
 import com.android.contacts.common.model.RawContactDelta;
 import com.android.contacts.common.model.RawContactDeltaList;
@@ -65,6 +64,7 @@
 import com.android.contacts.common.model.account.AccountWithDataSet;
 import com.android.contacts.common.model.account.DeviceLocalAccountType;
 import com.android.contacts.common.model.account.SimAccountType;
+import com.android.contacts.common.model.dataitem.CustomDataItem;
 import com.android.contacts.common.model.dataitem.DataKind;
 import com.android.contacts.common.util.AccountsListAdapter;
 import com.android.contacts.common.util.MaterialColorMapUtils;
@@ -78,6 +78,7 @@
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 import java.util.TreeSet;
 
 /**
@@ -87,9 +88,6 @@
 
     static final String TAG = "CompactEditorView";
 
-    private static final KindSectionDataMapEntryComparator
-            KIND_SECTION_DATA_MAP_ENTRY_COMPARATOR = new KindSectionDataMapEntryComparator();
-
     /**
      * Callbacks for hosts of {@link CompactRawContactsEditorView}s.
      */
@@ -126,13 +124,7 @@
         /**
          * Invoked when a rawcontact from linked contacts is selected in editor.
          */
-        public void onRawContactSelected(Uri uri, long rawContactId, boolean isReadOnly);
-
-        /**
-         * Returns the map of raw contact IDs to newly taken or selected photos that have not
-         * yet been saved to CP2.
-         */
-        public Bundle getUpdatedPhotos();
+        void onRawContactSelected(long rawContactId, boolean isReadOnly);
     }
 
     /**
@@ -198,26 +190,6 @@
         }
     }
 
-    /** Used to sort entire kind sections. */
-    private static final class KindSectionDataMapEntryComparator implements
-            Comparator<Map.Entry<String,KindSectionDataList>> {
-
-        final MimeTypeComparator mMimeTypeComparator = new MimeTypeComparator();
-
-        @Override
-        public int compare(Map.Entry<String, KindSectionDataList> entry1,
-                Map.Entry<String, KindSectionDataList> entry2) {
-            if (entry1 == entry2) return 0;
-            if (entry1 == null) return -1;
-            if (entry2 == null) return 1;
-
-            final String mimeType1 = entry1.getKey();
-            final String mimeType2 = entry2.getKey();
-
-            return mMimeTypeComparator.compare(mimeType1, mimeType2);
-        }
-    }
-
     /**
      * Sorts kinds roughly the same as quick contacts; we diverge in the following ways:
      * <ol>
@@ -263,34 +235,6 @@
         }
     }
 
-    /**
-     * Sorts primary accounts and google account types before others.
-     */
-    private static final class EditorComparator implements Comparator<KindSectionData> {
-
-        private RawContactDeltaComparator mRawContactDeltaComparator;
-
-        private EditorComparator(Context context) {
-            mRawContactDeltaComparator = new RawContactDeltaComparator(context);
-        }
-
-        @Override
-        public int compare(KindSectionData kindSectionData1, KindSectionData kindSectionData2) {
-            if (kindSectionData1 == kindSectionData2) return 0;
-            if (kindSectionData1 == null) return -1;
-            if (kindSectionData2 == null) return 1;
-
-            final RawContactDelta rawContactDelta1 = kindSectionData1.getRawContactDelta();
-            final RawContactDelta rawContactDelta2 = kindSectionData2.getRawContactDelta();
-
-            if (rawContactDelta1 == rawContactDelta2) return 0;
-            if (rawContactDelta1 == null) return -1;
-            if (rawContactDelta2 == null) return 1;
-
-            return mRawContactDeltaComparator.compare(rawContactDelta1, rawContactDelta2);
-        }
-    }
-
     public static class SavedState extends BaseSavedState {
 
         public static final Parcelable.Creator<SavedState> CREATOR =
@@ -329,11 +273,15 @@
 
     private ViewIdGenerator mViewIdGenerator;
     private MaterialColorMapUtils.MaterialPalette mMaterialPalette;
-    private long mPhotoId = -1;
     private boolean mHasNewContact;
     private boolean mIsUserProfile;
     private AccountWithDataSet mPrimaryAccount;
-    private Map<String,KindSectionDataList> mKindSectionDataMap = new HashMap<>();
+    private RawContactDeltaList mRawContactDeltas;
+    private RawContactDelta mCurrentRawContactDelta;
+    private long mRawContactIdToDisplayAlone = -1;
+    private boolean mIsEditingReadOnlyRawContactWithNewContact;
+    private Map<String, KindSectionData> mKindSectionDataMap = new HashMap<>();
+    private Set<String> mSortedMimetypes = new TreeSet<>(new MimeTypeComparator());
 
     // Account header
     private View mAccountHeaderContainer;
@@ -342,22 +290,15 @@
     private ImageView mAccountHeaderIcon;
     private ImageView mAccountHeaderExpanderIcon;
 
-    // Raw contacts selector
-    private View mRawContactContainer;
-    private TextView mRawContactSummary;
-
     private CompactPhotoEditorView mPhotoView;
     private ViewGroup mKindSectionViews;
-    private Map<String,List<CompactKindSectionView>> mKindSectionViewsMap = new HashMap<>();
+    private Map<String, CompactKindSectionView> mKindSectionViewMap = new HashMap<>();
     private View mMoreFields;
 
     private boolean mIsExpanded;
 
-    private long mPhotoRawContactId;
     private ValuesDelta mPhotoValuesDelta;
 
-    private Pair<KindSectionData, ValuesDelta> mPrimaryNameKindSectionData;
-
     public CompactRawContactsEditorView(Context context) {
         super(context);
     }
@@ -389,10 +330,6 @@
         mAccountHeaderIcon = (ImageView) findViewById(R.id.account_type_icon);
         mAccountHeaderExpanderIcon = (ImageView) findViewById(R.id.account_expander_icon);
 
-        // Raw contacts selector
-        mRawContactContainer = findViewById(R.id.all_rawcontacts_accounts_container);
-        mRawContactSummary = (TextView) findViewById(R.id.rawcontacts_accounts_summary);
-
         mPhotoView = (CompactPhotoEditorView) findViewById(R.id.photo_editor);
         mKindSectionViews = (LinearLayout) findViewById(R.id.kind_section_views);
         mMoreFields = findViewById(R.id.more_fields);
@@ -447,6 +384,7 @@
     public void removePhoto() {
         mPhotoValuesDelta.setFromTemplate(true);
         mPhotoValuesDelta.put(Photo.PHOTO, (byte[]) null);
+        mPhotoValuesDelta.put(Photo.PHOTO_FILE_ID, (String) null);
 
         mPhotoView.removePhoto();
     }
@@ -485,11 +423,18 @@
     }
 
     private void unsetSuperPrimaryFromAllPhotos() {
-        final List<KindSectionData> kindSectionDataList =
-                mKindSectionDataMap.get(Photo.CONTENT_ITEM_TYPE);
-        for (KindSectionData kindSectionData : kindSectionDataList) {
-            for (ValuesDelta valuesDelta : kindSectionData.getNonEmptyValuesDeltas()) {
-                valuesDelta.setSuperPrimary(false);
+        for (int i = 0; i < mRawContactDeltas.size(); i++) {
+            final RawContactDelta rawContactDelta = mRawContactDeltas.get(i);
+            if (!rawContactDelta.hasMimeEntries(Photo.CONTENT_ITEM_TYPE)) {
+                continue;
+            }
+            final List<ValuesDelta> photosDeltas =
+                    mRawContactDeltas.get(i).getMimeEntries(Photo.CONTENT_ITEM_TYPE);
+            if (photosDeltas == null) {
+                continue;
+            }
+            for (int j = 0; j < photosDeltas.size(); j++) {
+                photosDeltas.get(j).setSuperPrimary(false);
             }
         }
     }
@@ -505,7 +450,7 @@
      * Get the raw contact ID for the CompactHeaderView photo.
      */
     public long getPhotoRawContactId() {
-        return mPhotoRawContactId;
+        return mCurrentRawContactDelta.getRawContactId();
     }
 
     public StructuredNameEditorView getPrimaryNameEditorView() {
@@ -514,119 +459,57 @@
                 ? null : primaryNameKindSectionView.getPrimaryNameEditorView();
     }
 
-    /**
-     * Returns a data holder for every non-default/non-empty photo from each raw contact, whether
-     * the raw contact is writable or not.
-     */
-    public ArrayList<CompactPhotoSelectionFragment.Photo> getPhotos() {
-        final ArrayList<CompactPhotoSelectionFragment.Photo> photos = new ArrayList<>();
-
-        final Bundle updatedPhotos = mListener == null ? null : mListener.getUpdatedPhotos();
-
-        final List<KindSectionData> kindSectionDataList =
-                mKindSectionDataMap.get(Photo.CONTENT_ITEM_TYPE);
-        for (int i = 0; i < kindSectionDataList.size(); i++) {
-            final KindSectionData kindSectionData = kindSectionDataList.get(i);
-            final AccountType accountType = kindSectionData.getAccountType();
-            final List<ValuesDelta> valuesDeltas = kindSectionData.getNonEmptyValuesDeltas();
-            if (valuesDeltas.isEmpty()) continue;
-            for (int j = 0; j < valuesDeltas.size(); j++) {
-                final ValuesDelta valuesDelta = valuesDeltas.get(j);
-                final Bitmap bitmap = EditorUiUtils.getPhotoBitmap(valuesDelta);
-                if (bitmap == null) continue;
-
-                final CompactPhotoSelectionFragment.Photo photo =
-                        new CompactPhotoSelectionFragment.Photo();
-                photo.titleRes = accountType.titleRes;
-                photo.iconRes = accountType.iconRes;
-                photo.syncAdapterPackageName = accountType.syncAdapterPackageName;
-                photo.valuesDelta = valuesDelta;
-                photo.primary = valuesDelta.isSuperPrimary();
-                photo.kindSectionDataListIndex = i;
-                photo.valuesDeltaListIndex = j;
-                photo.photoId = valuesDelta.getId();
-
-                if (updatedPhotos != null) {
-                    photo.updatedPhotoUri = (Uri) updatedPhotos.get(String.valueOf(
-                            kindSectionData.getRawContactDelta().getRawContactId()));
-                }
-
-                final CharSequence accountTypeLabel = accountType.getDisplayLabel(getContext());
-                photo.accountType = accountTypeLabel == null ? "" : accountTypeLabel.toString();
-                final String accountName = kindSectionData.getRawContactDelta().getAccountName();
-                photo.accountName = accountName == null ? "" : accountName;
-
-                photos.add(photo);
-            }
-        }
-
-        return photos;
-    }
 
     /**
-     * Marks the raw contact photo given as primary for the aggregate contact and updates the
-     * UI.
+     * Marks the raw contact photo given as primary for the aggregate contact.
      */
-    public void setPrimaryPhoto(CompactPhotoSelectionFragment.Photo photo) {
-        // Find the values delta to mark as primary
-        final KindSectionDataList kindSectionDataList =
-                mKindSectionDataMap.get(Photo.CONTENT_ITEM_TYPE);
-        if (photo.kindSectionDataListIndex < 0
-                || photo.kindSectionDataListIndex >= kindSectionDataList.size()) {
-            wlog("Invalid kind section data list index");
-            return;
-        }
-        final KindSectionData kindSectionData =
-                kindSectionDataList.get(photo.kindSectionDataListIndex);
-        final List<ValuesDelta> valuesDeltaList = kindSectionData.getNonEmptyValuesDeltas();
-        if (photo.valuesDeltaListIndex >= valuesDeltaList.size()) {
-            wlog("Invalid values delta list index");
-            return;
-        }
+    public void setPrimaryPhoto() {
 
         // Update values delta
-        final ValuesDelta valuesDelta = valuesDeltaList.get(photo.valuesDeltaListIndex);
+        final ValuesDelta valuesDelta = mCurrentRawContactDelta
+                .getSuperPrimaryEntry(Photo.CONTENT_ITEM_TYPE);
+        if (valuesDelta == null) {
+            Log.wtf(TAG, "setPrimaryPhoto: had no ValuesDelta for the current RawContactDelta");
+            return;
+        }
         valuesDelta.setFromTemplate(false);
         unsetSuperPrimaryFromAllPhotos();
         valuesDelta.setSuperPrimary(true);
-
-        // Update the UI
-        mPhotoView.setPhoto(valuesDelta, mMaterialPalette);
     }
 
     public View getAggregationAnchorView() {
-        final List<CompactKindSectionView> kindSectionViews = getKindSectionViews(
-                StructuredName.CONTENT_ITEM_TYPE);
-        if (!kindSectionViews.isEmpty()) {
-            return mKindSectionViews.getChildAt(0).findViewById(R.id.anchor_view);
-        }
-        return null;
+        final StructuredNameEditorView nameEditorView = getPrimaryNameEditorView();
+        return nameEditorView != null ? nameEditorView.findViewById(R.id.anchor_view) : null;
     }
 
     public void setGroupMetaData(Cursor groupMetaData) {
-        final List<CompactKindSectionView> kindSectionViews = getKindSectionViews(
-                GroupMembership.CONTENT_ITEM_TYPE);
-        for (CompactKindSectionView kindSectionView : kindSectionViews) {
-            kindSectionView.setGroupMetaData(groupMetaData);
-            if (mIsExpanded) {
-                kindSectionView.setHideWhenEmpty(false);
-                kindSectionView.updateEmptyEditors(/* shouldAnimate =*/ true);
-            }
+        final CompactKindSectionView groupKindSectionView =
+                mKindSectionViewMap.get(GroupMembership.CONTENT_ITEM_TYPE);
+        if (groupKindSectionView == null) {
+            return;
+        }
+        groupKindSectionView.setGroupMetaData(groupMetaData);
+        if (mIsExpanded) {
+            groupKindSectionView.setHideWhenEmpty(false);
+            groupKindSectionView.updateEmptyEditors(/* shouldAnimate =*/ true);
         }
     }
 
     public void setState(RawContactDeltaList rawContactDeltas,
             MaterialColorMapUtils.MaterialPalette materialPalette, ViewIdGenerator viewIdGenerator,
-            long photoId, boolean hasNewContact, boolean isUserProfile,
-            AccountWithDataSet primaryAccount) {
-        mKindSectionDataMap.clear();
-        mKindSectionViewsMap.clear();
+            boolean hasNewContact, boolean isUserProfile, AccountWithDataSet primaryAccount,
+            long rawContactIdToDisplayAlone, boolean isEditingReadOnlyRawContactWithNewContact) {
+
+        mRawContactDeltas = rawContactDeltas;
+        mRawContactIdToDisplayAlone = rawContactIdToDisplayAlone;
+        mIsEditingReadOnlyRawContactWithNewContact = isEditingReadOnlyRawContactWithNewContact;
+
+        mKindSectionViewMap.clear();
         mKindSectionViews.removeAllViews();
         mMoreFields.setVisibility(View.VISIBLE);
 
         mMaterialPalette = materialPalette;
         mViewIdGenerator = viewIdGenerator;
-        mPhotoId = photoId;
 
         mHasNewContact = hasNewContact;
         mIsUserProfile = isUserProfile;
@@ -642,22 +525,20 @@
             if (mListener != null) mListener.onBindEditorsFailed();
             return;
         }
-        parseRawContactDeltas(rawContactDeltas);
+        pickRawContactDelta();
+        parseRawContactDelta();
         if (mKindSectionDataMap.isEmpty()) {
             elog("No kind section data parsed from RawContactDelta(s)");
             if (mListener != null) mListener.onBindEditorsFailed();
             return;
         }
 
-
-        // Get the primary name kind section data
-        mPrimaryNameKindSectionData =
-                getOrCreateKindSectionDataList(StructuredName.CONTENT_ITEM_TYPE)
-                        .getEntryToWrite(/* id =*/ -1, mPrimaryAccount, mIsUserProfile);
-        if (mPrimaryNameKindSectionData != null) {
-            // Ensure that a structured name and photo exists
+        final KindSectionData nameSectionData =
+                mKindSectionDataMap.get(StructuredName.CONTENT_ITEM_TYPE);
+        // Ensure that a structured name and photo exists
+        if (nameSectionData != null) {
             final RawContactDelta rawContactDelta =
-                    mPrimaryNameKindSectionData.first.getRawContactDelta();
+                    nameSectionData.getRawContactDelta();
             RawContactModifier.ensureKindExists(
                     rawContactDelta,
                     rawContactDelta.getAccountType(mAccountTypeManager),
@@ -669,78 +550,223 @@
         }
 
         // Setup the view
-        addAccountInfo(rawContactDeltas);
         addPhotoView();
+        if (isReadOnlyRawContact()) {
+            // We're want to display the inputs fields for a single read only raw contact
+            addReadOnlyRawContactEditorViews();
+        } else {
+            setupCompactEditorNormally();
+        }
+        if (mListener != null) mListener.onEditorsBound();
+    }
+
+    private void setupCompactEditorNormally() {
+        addAccountInfo();
         addKindSectionViews();
 
         mMoreFields.setVisibility(hasMoreFields() ? View.VISIBLE : View.GONE);
 
         if (mIsExpanded) showAllFields();
-
-        if (mListener != null) mListener.onEditorsBound();
     }
 
-    private void parseRawContactDeltas(RawContactDeltaList rawContactDeltas) {
+    private boolean isReadOnlyRawContact() {
+        return !mCurrentRawContactDelta.getAccountType(mAccountTypeManager).areContactsWritable();
+    }
+
+    private void pickRawContactDelta() {
         // Build the kind section data list map
-        vlog("parse: " + rawContactDeltas.size() + " rawContactDelta(s)");
-        for (int j = 0; j < rawContactDeltas.size(); j++) {
-            final RawContactDelta rawContactDelta = rawContactDeltas.get(j);
+        vlog("parse: " + mRawContactDeltas.size() + " rawContactDelta(s)");
+        for (int j = 0; j < mRawContactDeltas.size(); j++) {
+            final RawContactDelta rawContactDelta = mRawContactDeltas.get(j);
             vlog("parse: " + j + " rawContactDelta" + rawContactDelta);
             if (rawContactDelta == null || !rawContactDelta.isVisible()) continue;
             final AccountType accountType = rawContactDelta.getAccountType(mAccountTypeManager);
             if (accountType == null) continue;
-            final List<DataKind> dataKinds = accountType.getSortedDataKinds();
-            final int dataKindSize = dataKinds == null ? 0 : dataKinds.size();
-            vlog("parse: " + dataKindSize + " dataKinds(s)");
-            for (int i = 0; i < dataKindSize; i++) {
-                final DataKind dataKind = dataKinds.get(i);
-                if (dataKind == null || !dataKind.editable) {
-                    vlog("parse: " + i + " " + dataKind.mimeType + " dropped read-only");
-                    continue;
+
+            if (mRawContactIdToDisplayAlone > 0) {
+                // Look for the raw contact if specified.
+                if (rawContactDelta.getRawContactId().equals(mRawContactIdToDisplayAlone)) {
+                    mCurrentRawContactDelta = rawContactDelta;
+                    return;
                 }
-                final String mimeType = dataKind.mimeType;
-
-                // Skip psuedo mime types
-                if (DataKind.PSEUDO_MIME_TYPE_DISPLAY_NAME.equals(mimeType)
-                        || DataKind.PSEUDO_MIME_TYPE_PHONETIC_NAME.equals(mimeType)) {
-                    vlog("parse: " + i + " " + dataKind.mimeType + " dropped pseudo type");
-                    continue;
-                }
-
-                final KindSectionDataList kindSectionDataList =
-                        getOrCreateKindSectionDataList(mimeType);
-                final KindSectionData kindSectionData =
-                        new KindSectionData(accountType, dataKind, rawContactDelta);
-                kindSectionDataList.add(kindSectionData);
-
-                vlog("parse: " + i + " " + dataKind.mimeType + " " +
-                        kindSectionData.getValuesDeltas().size() + " value(s) " +
-                        kindSectionData.getNonEmptyValuesDeltas().size() + " non-empty value(s) " +
-                        kindSectionData.getVisibleValuesDeltas().size() +
-                        " visible value(s)");
+            } else if (mPrimaryAccount != null
+                    && mPrimaryAccount.equals(rawContactDelta.getAccountWithDataSet())) {
+                // Otherwise try to find the one that matches the default.
+                mCurrentRawContactDelta = rawContactDelta;
+                return;
+            } else if (accountType.areContactsWritable()){
+                // TODO: Find better raw contact delta
+                // Just select an arbitrary writable contact.
+                mCurrentRawContactDelta = rawContactDelta;
             }
         }
+
     }
 
-    private KindSectionDataList getOrCreateKindSectionDataList(String mimeType) {
-        KindSectionDataList kindSectionDataList = mKindSectionDataMap.get(mimeType);
-        if (kindSectionDataList == null) {
-            kindSectionDataList = new KindSectionDataList();
-            mKindSectionDataMap.put(mimeType, kindSectionDataList);
+    private void parseRawContactDelta() {
+        mKindSectionDataMap.clear();
+        mSortedMimetypes.clear();
+
+        final AccountType accountType = mCurrentRawContactDelta.getAccountType(mAccountTypeManager);
+        final List<DataKind> dataKinds = accountType.getSortedDataKinds();
+        final int dataKindSize = dataKinds == null ? 0 : dataKinds.size();
+        vlog("parse: " + dataKindSize + " dataKinds(s)");
+
+        for (int i = 0; i < dataKindSize; i++) {
+            final DataKind dataKind = dataKinds.get(i);
+            if (dataKind == null) {
+                vlog("parse: " + i + " " + dataKind.mimeType + " dropped null data kind");
+                continue;
+            }
+            final String mimeType = dataKind.mimeType;
+
+            // Skip psuedo mime types
+            if (DataKind.PSEUDO_MIME_TYPE_DISPLAY_NAME.equals(mimeType)
+                    || DataKind.PSEUDO_MIME_TYPE_PHONETIC_NAME.equals(mimeType)) {
+                vlog("parse: " + i + " " + dataKind.mimeType + " dropped pseudo type");
+                continue;
+            }
+
+            // Skip custom fields
+            // TODO: Handle them when we implement editing custom fields.
+            if (CustomDataItem.MIMETYPE_CUSTOM_FIELD.equals(mimeType)) {
+                vlog("parse: " + i + " " + dataKind.mimeType + " dropped custom field");
+                continue;
+            }
+
+            final KindSectionData kindSectionData =
+                    new KindSectionData(accountType, dataKind, mCurrentRawContactDelta);
+            mKindSectionDataMap.put(mimeType, kindSectionData);
+            mSortedMimetypes.add(mimeType);
+
+            vlog("parse: " + i + " " + dataKind.mimeType + " " +
+                    kindSectionData.getValuesDeltas().size() + " value(s) " +
+                    kindSectionData.getNonEmptyValuesDeltas().size() + " non-empty value(s) " +
+                    kindSectionData.getVisibleValuesDeltas().size() +
+                    " visible value(s)");
         }
-        return kindSectionDataList;
     }
 
-    private void addAccountInfo(RawContactDeltaList rawContactDeltas) {
-        mAccountHeaderContainer.setVisibility(View.GONE);
-        mRawContactContainer.setVisibility(View.GONE);
+    private void addReadOnlyRawContactEditorViews() {
+        mKindSectionViews.removeAllViews();
+        addAccountInfo();
+        final AccountTypeManager accountTypes = AccountTypeManager.getInstance(
+                getContext());
+        final AccountType type = mCurrentRawContactDelta.getAccountType(accountTypes);
 
-        if (mPrimaryNameKindSectionData == null) return;
-        final RawContactDelta rawContactDelta =
-                mPrimaryNameKindSectionData.first.getRawContactDelta();
+        // Bail if invalid state or source
+        if (type == null) return;
+
+        // Make sure we have StructuredName
+        RawContactModifier.ensureKindExists(
+                mCurrentRawContactDelta, type, StructuredName.CONTENT_ITEM_TYPE);
+
+        ValuesDelta primary;
+
+        // Name
+        final Context context = getContext();
+        final Resources res = context.getResources();
+        primary = mCurrentRawContactDelta.getPrimaryEntry(StructuredName.CONTENT_ITEM_TYPE);
+        final String name = primary != null ? primary.getAsString(StructuredName.DISPLAY_NAME) :
+            getContext().getString(R.string.missing_name);
+        final Drawable nameDrawable = context.getDrawable(R.drawable.ic_person_24dp);
+        final String nameContentDescription = res.getString(R.string.header_name_entry);
+        bindData(nameDrawable, nameContentDescription, name, /* type */ null,
+                /* isFirstEntry */ true);
+
+        // Phones
+        final ArrayList<ValuesDelta> phones = mCurrentRawContactDelta
+                .getMimeEntries(Phone.CONTENT_ITEM_TYPE);
+        final Drawable phoneDrawable = context.getDrawable(R.drawable.ic_phone_24dp);
+        final String phoneContentDescription = res.getString(R.string.header_phone_entry);
+        if (phones != null) {
+            boolean isFirstPhoneBound = true;
+            for (ValuesDelta phone : phones) {
+                final String phoneNumber = phone.getPhoneNumber();
+                if (TextUtils.isEmpty(phoneNumber)) {
+                    continue;
+                }
+                final String formattedNumber = PhoneNumberUtilsCompat.formatNumber(
+                        phoneNumber, phone.getPhoneNormalizedNumber(),
+                        GeoUtil.getCurrentCountryIso(getContext()));
+                CharSequence phoneType = null;
+                if (phone.hasPhoneType()) {
+                    phoneType = Phone.getTypeLabel(
+                            res, phone.getPhoneType(), phone.getPhoneLabel());
+                }
+                bindData(phoneDrawable, phoneContentDescription, formattedNumber, phoneType,
+                        isFirstPhoneBound, true);
+                isFirstPhoneBound = false;
+            }
+        }
+
+        // Emails
+        final ArrayList<ValuesDelta> emails = mCurrentRawContactDelta
+                .getMimeEntries(Email.CONTENT_ITEM_TYPE);
+        final Drawable emailDrawable = context.getDrawable(R.drawable.ic_email_24dp);
+        final String emailContentDescription = res.getString(R.string.header_email_entry);
+        if (emails != null) {
+            boolean isFirstEmailBound = true;
+            for (ValuesDelta email : emails) {
+                final String emailAddress = email.getEmailData();
+                if (TextUtils.isEmpty(emailAddress)) {
+                    continue;
+                }
+                CharSequence emailType = null;
+                if (email.hasEmailType()) {
+                    emailType = Email.getTypeLabel(
+                            res, email.getEmailType(), email.getEmailLabel());
+                }
+                bindData(emailDrawable, emailContentDescription, emailAddress, emailType,
+                        isFirstEmailBound);
+                isFirstEmailBound = false;
+            }
+        }
+
+        mKindSectionViews.setVisibility(mKindSectionViews.getChildCount() > 0 ? VISIBLE : GONE);
+        // Hide the "More fields" link
+        mMoreFields.setVisibility(GONE);
+    }
+
+    private void bindData(Drawable icon, String iconContentDescription, CharSequence data,
+            CharSequence type, boolean isFirstEntry) {
+        bindData(icon, iconContentDescription, data, type, isFirstEntry, false);
+    }
+
+    private void bindData(Drawable icon, String iconContentDescription, CharSequence data,
+            CharSequence type, boolean isFirstEntry, boolean forceLTR) {
+        final LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(
+                Context.LAYOUT_INFLATER_SERVICE);
+        final View field = inflater.inflate(R.layout.item_read_only_field, mKindSectionViews,
+                false);
+        if (isFirstEntry) {
+            final ImageView imageView = (ImageView) field.findViewById(R.id.kind_icon);
+            imageView.setImageDrawable(icon);
+            imageView.setContentDescription(iconContentDescription);
+        } else {
+            final ImageView imageView = (ImageView) field.findViewById(R.id.kind_icon);
+            imageView.setVisibility(View.INVISIBLE);
+            imageView.setContentDescription(null);
+        }
+        final TextView dataView = (TextView) field.findViewById(R.id.data);
+        dataView.setText(data);
+        if (forceLTR) {
+            dataView.setTextDirection(View.TEXT_DIRECTION_LTR);
+        }
+        final TextView typeView = (TextView) field.findViewById(R.id.type);
+        if (!TextUtils.isEmpty(type)) {
+            typeView.setText(type);
+        } else {
+            typeView.setVisibility(View.GONE);
+        }
+        mKindSectionViews.addView(field);
+    }
+
+    private void addAccountInfo() {
+        mAccountHeaderContainer.setVisibility(View.GONE);
 
         final AccountDisplayInfo account =
-                mAccountDisplayInfoFactory.getAccountDisplayInfoFor(rawContactDelta);
+                mAccountDisplayInfoFactory.getAccountDisplayInfoFor(mCurrentRawContactDelta);
 
         // Get the account information for the primary raw contact delta
         final String accountLabel = mIsUserProfile
@@ -750,25 +776,23 @@
         // Either the account header or selector should be shown, not both.
         final List<AccountWithDataSet> accounts =
                 AccountTypeManager.getInstance(getContext()).getAccounts(true);
+
         if (mHasNewContact && !mIsUserProfile) {
             if (accounts.size() > 1) {
-                addAccountSelector(rawContactDelta, accountLabel);
+                addAccountSelector(mCurrentRawContactDelta, accountLabel);
             } else {
                 addAccountHeader(accountLabel);
             }
-        } else if (mIsUserProfile || !shouldHideAccountContainer(rawContactDeltas)) {
-            addAccountHeader(accountLabel);
-        }
-
-        // The raw contact selector should only display linked raw contacts that can be edited in
-        // the full editor (i.e. they are not newly created raw contacts)
-        final RawContactAccountListAdapter adapter =  new RawContactAccountListAdapter(getContext(),
-                getRawContactDeltaListForSelector(rawContactDeltas));
-        if (adapter.getCount() > 0) {
-            final String accountsSummary = getResources().getQuantityString(
-                    R.plurals.compact_editor_linked_contacts_selector_title,
-                    adapter.getCount(), adapter.getCount());
-            addRawContactAccountSelector(accountsSummary, adapter);
+        } else {
+            // The raw contact selector should only display linked raw contacts that can be edited
+            // in the full editor (i.e. they are not newly created raw contacts)
+            final RawContactAccountListAdapter adapter =  new RawContactAccountListAdapter(
+                    getContext(), getRawContactDeltaListForSelector(mRawContactDeltas));
+            if (adapter.getCount() > 0 && !mIsEditingReadOnlyRawContactWithNewContact) {
+                addRawContactAccountSelector(accountLabel, adapter);
+            } else {
+                addAccountHeader(accountLabel);
+            }
         }
     }
 
@@ -778,7 +802,8 @@
         Collections.sort(rawContactDeltas, new RawContactDeltaComparator(getContext()));
 
         final RawContactDeltaList result = new RawContactDeltaList();
-        for (RawContactDelta rawContactDelta : rawContactDeltas) {
+        for (int i = 0; i < rawContactDeltas.size(); i++) {
+            final RawContactDelta rawContactDelta = rawContactDeltas.get(i);
             if (rawContactDelta.isVisible() && rawContactDelta.getRawContactId() > 0) {
                 // Only add raw contacts that can be opened in the editor
                 result.add(rawContactDelta);
@@ -794,23 +819,6 @@
         return result;
     }
 
-    // Returns true if there are multiple writable rawcontacts and no read-only ones,
-    // or there are both writable and read-only rawcontacts.
-    private boolean shouldHideAccountContainer(RawContactDeltaList rawContactDeltas) {
-        int writable = 0;
-        int readonly = 0;
-        for (RawContactDelta rawContactDelta : rawContactDeltas) {
-            if (rawContactDelta.isVisible() && rawContactDelta.getRawContactId() > 0) {
-                if (rawContactDelta.getRawContactAccountType(getContext()).areContactsWritable()) {
-                    writable++;
-                } else {
-                    readonly++;
-                }
-            }
-        }
-        return (writable > 1 || (writable > 0 && readonly > 0));
-    }
-
     private void addAccountHeader(String accountLabel) {
         mAccountHeaderContainer.setVisibility(View.VISIBLE);
 
@@ -819,20 +827,15 @@
         mAccountHeaderName.setText(accountLabel);
 
         // Set the account type
-        final String selectorTitle = getResources().getString(
+        final String selectorTitle = getResources().getString(isReadOnlyRawContact() ?
+                R.string.compact_editor_account_selector_read_only_title :
                 R.string.compact_editor_account_selector_title);
         mAccountHeaderType.setText(selectorTitle);
 
         // Set the icon
-        if (mPrimaryNameKindSectionData != null) {
-            final RawContactDelta rawContactDelta =
-                    mPrimaryNameKindSectionData.first.getRawContactDelta();
-            if (rawContactDelta != null) {
-                final AccountType accountType =
-                        rawContactDelta.getRawContactAccountType(getContext());
-                mAccountHeaderIcon.setImageDrawable(accountType.getDisplayIcon(getContext()));
-            }
-        }
+        final AccountType accountType =
+                mCurrentRawContactDelta.getRawContactAccountType(getContext());
+        mAccountHeaderIcon.setImageDrawable(accountType.getDisplayIcon(getContext()));
 
         // Set the content description
         mAccountHeaderContainer.setContentDescription(
@@ -841,11 +844,7 @@
     }
 
     private void addAccountSelector(final RawContactDelta rawContactDelta, CharSequence nameLabel) {
-        // Show save to default account.
-        addAccountHeader(nameLabel.toString());
-        // Add handlers for choosing another account to save to.
-        mAccountHeaderExpanderIcon.setVisibility(View.VISIBLE);
-        mAccountHeaderContainer.setOnClickListener(new View.OnClickListener() {
+        final View.OnClickListener onClickListener = new View.OnClickListener() {
             @Override
             public void onClick(View v) {
                 final ListPopupWindow popup = new ListPopupWindow(getContext(), null);
@@ -865,6 +864,7 @@
                         UiClosables.closeQuietly(popup);
                         final AccountWithDataSet newAccount = adapter.getItem(position);
                         if (mListener != null && !mPrimaryAccount.equals(newAccount)) {
+                            mIsExpanded = false;
                             mListener.onRebindEditorsForNewContact(
                                     rawContactDelta,
                                     mPrimaryAccount,
@@ -874,21 +874,18 @@
                 });
                 popup.show();
             }
-        });
+        };
+        setUpAccountSelector(nameLabel.toString(), onClickListener);
     }
 
-    private void addRawContactAccountSelector(String accountsSummary,
+    private void addRawContactAccountSelector(String nameLabel,
             final RawContactAccountListAdapter adapter) {
-        mRawContactContainer.setVisibility(View.VISIBLE);
-
-        mRawContactSummary.setText(accountsSummary);
-
-        mRawContactContainer.setOnClickListener(new View.OnClickListener() {
+        final View.OnClickListener onClickListener = new OnClickListener() {
             @Override
             public void onClick(View v) {
                 final ListPopupWindow popup = new ListPopupWindow(getContext(), null);
-                popup.setWidth(mRawContactContainer.getWidth());
-                popup.setAnchorView(mRawContactContainer);
+                popup.setWidth(mAccountHeaderContainer.getWidth());
+                popup.setAnchorView(mAccountHeaderContainer);
                 popup.setAdapter(adapter);
                 popup.setModal(true);
                 popup.setInputMethodMode(ListPopupWindow.INPUT_METHOD_NOT_NEEDED);
@@ -897,128 +894,88 @@
                     public void onItemClick(AdapterView<?> parent, View view, int position,
                                             long id) {
                         UiClosables.closeQuietly(popup);
-
-                        if (mListener != null) {
-                            final long rawContactId = adapter.getItemId(position);
-                            final Uri rawContactUri = ContentUris.withAppendedId(
-                                    ContactsContract.RawContacts.CONTENT_URI, rawContactId);
+                        final long rawContactId = adapter.getItemId(position);
+                        // Only switch if it's actually a different raw contact.
+                        if (rawContactId != mCurrentRawContactDelta.getRawContactId()
+                                && mListener != null) {
                             final RawContactDelta rawContactDelta = adapter.getItem(position);
                             final AccountTypeManager accountTypes = AccountTypeManager.getInstance(
                                     getContext());
                             final AccountType accountType = rawContactDelta.getAccountType(
                                     accountTypes);
                             final boolean isReadOnly = !accountType.areContactsWritable();
-
-                            mListener.onRawContactSelected(rawContactUri, rawContactId, isReadOnly);
+                            // Reset state.
+                            mIsExpanded = false;
+                            mListener.onRawContactSelected(rawContactId, isReadOnly);
                         }
                     }
                 });
                 popup.show();
             }
-        });
+        };
+        setUpAccountSelector(nameLabel, onClickListener);
+    }
+
+    private void setUpAccountSelector(String nameLabel, OnClickListener listener) {
+        addAccountHeader(nameLabel);
+        // Add handlers for choosing another account to save to.
+        mAccountHeaderExpanderIcon.setVisibility(View.VISIBLE);
+        mAccountHeaderContainer.setOnClickListener(listener);
     }
 
     private void addPhotoView() {
-        // Get the kind section data and values delta that we will display in the photo view
-        final KindSectionDataList kindSectionDataList =
-                getOrCreateKindSectionDataList(Photo.CONTENT_ITEM_TYPE);
-        final Pair<KindSectionData,ValuesDelta> photoToDisplay =
-                kindSectionDataList.getEntryToDisplay(mPhotoId);
-        if (photoToDisplay == null) {
-            wlog("photo: no kind section data parsed");
-            mPhotoView.setVisibility(View.GONE);
+        if (!mCurrentRawContactDelta.hasMimeEntries(Photo.CONTENT_ITEM_TYPE)) {
+            wlog("No photo mimetype for this raw contact.");
+            mPhotoView.setVisibility(GONE);
             return;
         } else {
-            mPhotoView.setVisibility(View.VISIBLE);
+            mPhotoView.setVisibility(VISIBLE);
         }
 
+        final ValuesDelta superPrimaryDelta = mCurrentRawContactDelta
+                .getSuperPrimaryEntry(Photo.CONTENT_ITEM_TYPE);
+        if (superPrimaryDelta == null) {
+            Log.wtf(TAG, "addPhotoView: no ValueDelta found for current RawContactDelta"
+                    + "that supports a photo.");
+            mPhotoView.setVisibility(GONE);
+            return;
+        }
         // Set the photo view
-        mPhotoView.setPhoto(photoToDisplay.second, mMaterialPalette);
+        mPhotoView.setPalette(mMaterialPalette);
+        mPhotoView.setPhoto(superPrimaryDelta);
 
-        // Find the raw contact ID and values delta that will be written when the photo is edited
-        final Pair<KindSectionData, ValuesDelta> photoToWrite = kindSectionDataList.getEntryToWrite(
-                mPhotoId, mPrimaryAccount, mIsUserProfile);
-        if (photoToWrite == null) {
+        if (isReadOnlyRawContact()) {
             mPhotoView.setReadOnly(true);
             return;
         }
         mPhotoView.setReadOnly(false);
-        mPhotoRawContactId = photoToWrite.first.getRawContactDelta().getRawContactId();
-        mPhotoValuesDelta = photoToWrite.second;
+        mPhotoValuesDelta = superPrimaryDelta;
     }
 
     private void addKindSectionViews() {
-        // Sort the kinds
-        final TreeSet<Map.Entry<String,KindSectionDataList>> entries =
-                new TreeSet<>(KIND_SECTION_DATA_MAP_ENTRY_COMPARATOR);
-        entries.addAll(mKindSectionDataMap.entrySet());
-
-        vlog("kind: " + entries.size() + " kindSection(s)");
         int i = -1;
-        for (Map.Entry<String, KindSectionDataList> entry : entries) {
+
+        for (String mimeType : mSortedMimetypes) {
             i++;
-
-            final String mimeType = entry.getKey();
-
-            if (StructuredName.CONTENT_ITEM_TYPE.equals(mimeType)) {
-                if (mPrimaryNameKindSectionData == null) {
-                    vlog("kind: " + i + " " + mimeType + " dropped");
-                    continue;
-                }
-                vlog("kind: " + i + " " + mimeType + " using first entry only");
-                final KindSectionDataList kindSectionDataList = new KindSectionDataList();
-                kindSectionDataList.add(mPrimaryNameKindSectionData.first);
-                final CompactKindSectionView kindSectionView = inflateKindSectionView(
-                        mKindSectionViews, kindSectionDataList, mimeType,
-                        mPrimaryNameKindSectionData.second);
-                mKindSectionViews.addView(kindSectionView);
-
-                // Keep a pointer to all the KindSectionsViews for each mimeType
-                getKindSectionViews(mimeType).add(kindSectionView);
-            } else {
-                final KindSectionDataList kindSectionDataList = entry.getValue();
-
-                // Ignore mime types that we've already handled
-                if (Photo.CONTENT_ITEM_TYPE.equals(mimeType)) {
-                    vlog("kind: " + i + " " + mimeType + " dropped");
-                    continue;
-                }
-
-                // Don't show more than one group editor on the compact editor.
-                // Groups will still be editable for each raw contact individually on the full editor.
-                if (GroupMembership.CONTENT_ITEM_TYPE.equals(mimeType)
-                        && kindSectionDataList.size() > 1) {
-                    vlog("kind: " + i + " " + mimeType + " dropped");
-                    continue;
-                }
-
-                if (kindSectionDataList != null && !kindSectionDataList.isEmpty()) {
-                    vlog("kind: " + i + " " + mimeType + " " + kindSectionDataList.size() +
-                            " kindSectionData(s)");
-
-                    final CompactKindSectionView kindSectionView = inflateKindSectionView(
-                            mKindSectionViews, kindSectionDataList, mimeType,
-                            /* primaryValueDelta =*/ null);
-                    mKindSectionViews.addView(kindSectionView);
-
-                    // Keep a pointer to all the KindSectionsViews for each mimeType
-                    getKindSectionViews(mimeType).add(kindSectionView);
-                }
+            // Ignore mime types that we've already handled
+            if (Photo.CONTENT_ITEM_TYPE.equals(mimeType)) {
+                vlog("kind: " + i + " " + mimeType + " dropped");
+                continue;
             }
-        }
-    }
+            final CompactKindSectionView kindSectionView;
+            final KindSectionData kindSectionData = mKindSectionDataMap.get(mimeType);
+            final ValuesDelta primaryDelta = mCurrentRawContactDelta.getPrimaryEntry(mimeType);
+            kindSectionView = inflateKindSectionView(mKindSectionViews, kindSectionData, mimeType,
+                    primaryDelta);
+            mKindSectionViews.addView(kindSectionView);
 
-    private List<CompactKindSectionView> getKindSectionViews(String mimeType) {
-        List<CompactKindSectionView> kindSectionViews = mKindSectionViewsMap.get(mimeType);
-        if (kindSectionViews == null) {
-            kindSectionViews = new ArrayList<>();
-            mKindSectionViewsMap.put(mimeType, kindSectionViews);
+            // Keep a pointer to the KindSectionView for each mimeType
+            mKindSectionViewMap.put(mimeType, kindSectionView);
         }
-        return kindSectionViews;
     }
 
     private CompactKindSectionView inflateKindSectionView(ViewGroup viewGroup,
-            KindSectionDataList kindSectionDataList, String mimeType,
+            KindSectionData kindSectionData, String mimeType,
             ValuesDelta primaryValuesDelta) {
         final CompactKindSectionView kindSectionView = (CompactKindSectionView)
                 mLayoutInflater.inflate(R.layout.compact_item_kind_section, viewGroup,
@@ -1036,12 +993,7 @@
         // they will be the only types you add new values to initially for new contacts
         kindSectionView.setShowOneEmptyEditor(true);
 
-        // Sort non-name editors so they wind up in the order we want
-        if (!StructuredName.CONTENT_ITEM_TYPE.equals(mimeType)) {
-            Collections.sort(kindSectionDataList, new EditorComparator(getContext()));
-        }
-
-        kindSectionView.setState(kindSectionDataList, mViewIdGenerator, mListener,
+        kindSectionView.setState(kindSectionData, mViewIdGenerator, mListener,
                 primaryValuesDelta);
 
         return kindSectionView;
@@ -1057,10 +1009,7 @@
     }
 
     private CompactKindSectionView getPrimaryNameKindSectionView() {
-        final List<CompactKindSectionView> kindSectionViews
-                = mKindSectionViewsMap.get(StructuredName.CONTENT_ITEM_TYPE);
-        return kindSectionViews == null || kindSectionViews.isEmpty()
-                ? null : kindSectionViews.get(0);
+        return mKindSectionViewMap.get(StructuredName.CONTENT_ITEM_TYPE);
     }
 
     private void showAllFields() {
@@ -1078,11 +1027,9 @@
     }
 
     private boolean hasMoreFields() {
-        for (List<CompactKindSectionView> sections : mKindSectionViewsMap.values()) {
-            for (CompactKindSectionView section : sections) {
-                if (section.getVisibility() != View.VISIBLE) {
-                    return true;
-                }
+        for (CompactKindSectionView section : mKindSectionViewMap.values()) {
+            if (section.getVisibility() != View.VISIBLE) {
+                return true;
             }
         }
         return false;
diff --git a/src/com/android/contacts/editor/ContactEditorBaseFragment.java b/src/com/android/contacts/editor/ContactEditorBaseFragment.java
deleted file mode 100644
index 46e6a84..0000000
--- a/src/com/android/contacts/editor/ContactEditorBaseFragment.java
+++ /dev/null
@@ -1,1744 +0,0 @@
-/*
- * Copyright (C) 2015 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.editor;
-
-import android.accounts.Account;
-import android.app.Activity;
-import android.app.Fragment;
-import android.app.LoaderManager;
-import android.content.ActivityNotFoundException;
-import android.content.ContentUris;
-import android.content.ContentValues;
-import android.content.Context;
-import android.content.CursorLoader;
-import android.content.Intent;
-import android.content.Loader;
-import android.database.Cursor;
-import android.media.RingtoneManager;
-import android.net.Uri;
-import android.os.Bundle;
-import android.os.SystemClock;
-import android.provider.ContactsContract;
-import android.provider.ContactsContract.CommonDataKinds.Email;
-import android.provider.ContactsContract.CommonDataKinds.Event;
-import android.provider.ContactsContract.CommonDataKinds.Organization;
-import android.provider.ContactsContract.CommonDataKinds.Phone;
-import android.provider.ContactsContract.CommonDataKinds.StructuredName;
-import android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
-import android.provider.ContactsContract.Contacts;
-import android.provider.ContactsContract.Intents;
-import android.provider.ContactsContract.RawContacts;
-import android.util.Log;
-import android.view.LayoutInflater;
-import android.view.Menu;
-import android.view.MenuInflater;
-import android.view.MenuItem;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.AdapterView;
-import android.widget.BaseAdapter;
-import android.widget.LinearLayout;
-import android.widget.ListPopupWindow;
-import android.widget.Toast;
-
-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.ContactEditorBaseActivity;
-import com.android.contacts.activities.ContactEditorBaseActivity.ContactEditor;
-import com.android.contacts.activities.ContactSelectionActivity;
-import com.android.contacts.common.logging.ScreenEvent.ScreenType;
-import com.android.contacts.common.model.AccountTypeManager;
-import com.android.contacts.common.model.Contact;
-import com.android.contacts.common.model.ContactLoader;
-import com.android.contacts.common.model.RawContact;
-import com.android.contacts.common.model.RawContactDelta;
-import com.android.contacts.common.model.RawContactDeltaList;
-import com.android.contacts.common.model.RawContactModifier;
-import com.android.contacts.common.model.ValuesDelta;
-import com.android.contacts.common.model.account.AccountType;
-import com.android.contacts.common.model.account.AccountWithDataSet;
-import com.android.contacts.common.util.ImplicitIntentsUtil;
-import com.android.contacts.common.util.MaterialColorMapUtils;
-import com.android.contacts.editor.AggregationSuggestionEngine.Suggestion;
-import com.android.contacts.list.UiIntentActions;
-import com.android.contacts.quickcontact.QuickContactActivity;
-import com.android.contacts.util.HelpUtils;
-import com.android.contacts.util.PhoneCapabilityTester;
-import com.android.contacts.util.UiClosables;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.Lists;
-
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
-
-/**
- * Base Fragment for contact editors.
- */
-abstract public class ContactEditorBaseFragment extends Fragment implements
-        ContactEditor, SplitContactConfirmationDialogFragment.Listener,
-        JoinContactConfirmationDialogFragment.Listener,
-        AggregationSuggestionEngine.Listener, AggregationSuggestionView.Listener,
-        CancelEditDialogFragment.Listener {
-
-    static final String TAG = "ContactEditor";
-
-    protected static final int LOADER_CONTACT = 1;
-    protected static final int LOADER_GROUPS = 2;
-
-    private static final List<String> VALID_INTENT_ACTIONS = new ArrayList<String>() {{
-        add(Intent.ACTION_EDIT);
-        add(Intent.ACTION_INSERT);
-        add(ContactEditorBaseActivity.ACTION_EDIT);
-        add(ContactEditorBaseActivity.ACTION_INSERT);
-        add(ContactEditorBaseActivity.ACTION_SAVE_COMPLETED);
-    }};
-
-    private static final String KEY_ACTION = "action";
-    private static final String KEY_URI = "uri";
-    private static final String KEY_AUTO_ADD_TO_DEFAULT_GROUP = "autoAddToDefaultGroup";
-    private static final String KEY_DISABLE_DELETE_MENU_OPTION = "disableDeleteMenuOption";
-    private static final String KEY_NEW_LOCAL_PROFILE = "newLocalProfile";
-    private static final String KEY_MATERIAL_PALETTE = "materialPalette";
-    private static final String KEY_PHOTO_ID = "photoId";
-
-    private static final String KEY_VIEW_ID_GENERATOR = "viewidgenerator";
-
-    private static final String KEY_RAW_CONTACTS = "rawContacts";
-
-    private static final String KEY_EDIT_STATE = "state";
-    private static final String KEY_STATUS = "status";
-
-    private static final String KEY_HAS_NEW_CONTACT = "hasNewContact";
-    private static final String KEY_NEW_CONTACT_READY = "newContactDataReady";
-
-    private static final String KEY_IS_EDIT = "isEdit";
-    private static final String KEY_EXISTING_CONTACT_READY = "existingContactDataReady";
-
-    private static final String KEY_RAW_CONTACT_DISPLAY_ALONE_IS_READ_ONLY = "isReadOnly";
-
-    // 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";
-
-    // Aggregation PopupWindow
-    private static final String KEY_AGGREGATION_SUGGESTIONS_RAW_CONTACT_ID =
-            "aggregationSuggestionsRawContactId";
-
-    // Join Activity
-    private static final String KEY_CONTACT_ID_FOR_JOIN = "contactidforjoin";
-
-    private static final String KEY_READ_ONLY_DISPLAY_NAME = "readOnlyDisplayName";
-
-    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;
-
-    /**
-     * An intent extra that forces the editor to add the edited contact
-     * to the default group (e.g. "My Contacts").
-     */
-    public static final String INTENT_EXTRA_ADD_TO_DEFAULT_DIRECTORY = "addToDefaultDirectory";
-
-    public static final String INTENT_EXTRA_NEW_LOCAL_PROFILE = "newLocalProfile";
-
-    public static final String INTENT_EXTRA_DISABLE_DELETE_MENU_OPTION =
-            "disableDeleteMenuOption";
-
-    /**
-     * Intent key to pass the photo palette primary color calculated by
-     * {@link com.android.contacts.quickcontact.QuickContactActivity} to the editor and between
-     * the compact and fully expanded editors.
-     */
-    public static final String INTENT_EXTRA_MATERIAL_PALETTE_PRIMARY_COLOR =
-            "material_palette_primary_color";
-
-    /**
-     * Intent key to pass the photo palette secondary color calculated by
-     * {@link com.android.contacts.quickcontact.QuickContactActivity} to the editor and between
-     * the compact and fully expanded editors.
-     */
-    public static final String INTENT_EXTRA_MATERIAL_PALETTE_SECONDARY_COLOR =
-            "material_palette_secondary_color";
-
-    /**
-     * Intent key to pass the ID of the photo to display on the editor.
-     */
-    public static final String INTENT_EXTRA_PHOTO_ID = "photo_id";
-
-    /**
-     * Intent key to pass the ID of the raw contact id that should be displayed in the full editor
-     * by itself.
-     */
-    public static final String INTENT_EXTRA_RAW_CONTACT_ID_TO_DISPLAY_ALONE =
-            "raw_contact_id_to_display_alone";
-
-    /**
-     * Intent key to pass the boolean value of if the raw contact id that should be displayed
-     * in the full editor by itself is read-only.
-     */
-    public static final String INTENT_EXTRA_RAW_CONTACT_DISPLAY_ALONE_IS_READ_ONLY =
-            "raw_contact_display_alone_is_read_only";
-
-    /**
-     * Intent extra to specify a {@link ContactEditor.SaveMode}.
-     */
-    public static final String SAVE_MODE_EXTRA_KEY = "saveMode";
-
-    /**
-     * Intent extra key for the contact ID to join the current contact to after saving.
-     */
-    public static final String JOIN_CONTACT_ID_EXTRA_KEY = "joinContactId";
-
-    /**
-     * Callbacks for Activities that host contact editors Fragments.
-     */
-    public interface Listener {
-
-        /**
-         * Contact was not found, so somehow close this fragment. This is raised after a contact
-         * is removed via Menu/Delete
-         */
-        void onContactNotFound();
-
-        /**
-         * Contact was split, so we can close now.
-         *
-         * @param newLookupUri The lookup uri of the new contact that should be shown to the user.
-         *                     The editor tries best to chose the most natural contact here.
-         */
-        void onContactSplit(Uri newLookupUri);
-
-        /**
-         * User has tapped Revert, close the fragment now.
-         */
-        void onReverted();
-
-        /**
-         * Contact was saved and the Fragment can now be closed safely.
-         */
-        void onSaveFinished(Intent resultIntent);
-
-        /**
-         * User switched to editing a different contact (a suggestion from the
-         * aggregation engine).
-         */
-        void onEditOtherContactRequested(Uri contactLookupUri,
-                ArrayList<ContentValues> contentValues);
-
-        /**
-         * Contact is being created for an external account that provides its own
-         * new contact activity.
-         */
-        void onCustomCreateContactActivityRequested(AccountWithDataSet account,
-                Bundle intentExtras);
-
-        /**
-         * The edited raw contact belongs to an external account that provides
-         * its own edit activity.
-         *
-         * @param redirect indicates that the current editor should be closed
-         *                 before the custom editor is shown.
-         */
-        void onCustomEditContactActivityRequested(AccountWithDataSet account, Uri rawContactUri,
-                Bundle intentExtras, boolean redirect);
-
-        /**
-         * User has requested that contact be deleted.
-         */
-        void onDeleteRequested(Uri contactUri);
-    }
-
-    /**
-     * Adapter for aggregation suggestions displayed in a PopupWindow when
-     * editor fields change.
-     */
-    protected static final class AggregationSuggestionAdapter extends BaseAdapter {
-        private final LayoutInflater mLayoutInflater;
-        private final boolean mSetNewContact;
-        private final AggregationSuggestionView.Listener mListener;
-        private final List<AggregationSuggestionEngine.Suggestion> mSuggestions;
-
-        public AggregationSuggestionAdapter(Activity activity, boolean setNewContact,
-                AggregationSuggestionView.Listener listener, List<Suggestion> suggestions) {
-            mLayoutInflater = activity.getLayoutInflater();
-            mSetNewContact = setNewContact;
-            mListener = listener;
-            mSuggestions = suggestions;
-        }
-
-        @Override
-        public View getView(int position, View convertView, ViewGroup parent) {
-            final Suggestion suggestion = (Suggestion) getItem(position);
-            final AggregationSuggestionView suggestionView =
-                    (AggregationSuggestionView) mLayoutInflater.inflate(
-                            R.layout.aggregation_suggestions_item, null);
-            suggestionView.setNewContact(mSetNewContact);
-            suggestionView.setListener(mListener);
-            suggestionView.bindSuggestion(suggestion);
-            return suggestionView;
-        }
-
-        @Override
-        public long getItemId(int position) {
-            return position;
-        }
-
-        @Override
-        public Object getItem(int position) {
-            return mSuggestions.get(position);
-        }
-
-        @Override
-        public int getCount() {
-            return mSuggestions.size();
-        }
-    }
-
-    protected Context mContext;
-    protected Listener mListener;
-
-    //
-    // Views
-    //
-    protected LinearLayout mContent;
-    protected View mAggregationSuggestionView;
-    protected ListPopupWindow mAggregationSuggestionPopup;
-
-    //
-    // Parameters passed in on {@link #load}
-    //
-    protected String mAction;
-    protected Uri mLookupUri;
-    protected Bundle mIntentExtras;
-    protected boolean mAutoAddToDefaultGroup;
-    protected boolean mDisableDeleteMenuOption;
-    protected boolean mNewLocalProfile;
-    protected MaterialColorMapUtils.MaterialPalette mMaterialPalette;
-    protected long mPhotoId = -1;
-
-    //
-    // Helpers
-    //
-    protected ContactEditorUtils mEditorUtils;
-    protected RawContactDeltaComparator mComparator;
-    protected ViewIdGenerator mViewIdGenerator;
-    private AggregationSuggestionEngine mAggregationSuggestionEngine;
-
-    //
-    // Loaded data
-    //
-    // Used to store existing contact data so it can be re-applied during a rebind call,
-    // i.e. account switch.  Only used in {@link ContactEditorFragment}.
-    protected ImmutableList<RawContact> mRawContacts;
-    protected Cursor mGroupMetaData;
-
-    //
-    // Editor state
-    //
-    protected RawContactDeltaList mState;
-    protected int mStatus;
-    protected long mRawContactIdToDisplayAlone = -1;
-    protected boolean mRawContactDisplayAloneIsReadOnly = false;
-
-    // Whether to show the new contact blank form and if it's corresponding delta is ready.
-    protected boolean mHasNewContact;
-    protected AccountWithDataSet mAccountWithDataSet;
-    protected boolean mNewContactDataReady;
-    protected boolean mNewContactAccountChanged;
-
-    // Whether it's an edit of existing contact and if it's corresponding delta is ready.
-    protected boolean mIsEdit;
-    protected boolean mExistingContactDataReady;
-
-    // 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;
-
-    // Aggregation PopupWindow
-    private long mAggregationSuggestionsRawContactId;
-
-    // Join Activity
-    protected long mContactIdForJoin;
-
-    // Used to pre-populate the editor with a display name when a user edits a read-only contact.
-    protected String mReadOnlyDisplayName;
-
-    //
-    // Not saved/restored on rotates
-    //
-
-    // The name editor view for the new raw contact that was created so that the user can
-    // edit a read-only contact (to which the new raw contact was joined)
-    protected StructuredNameEditorView mReadOnlyNameEditorView;
-
-    /**
-     * The contact data loader listener.
-     */
-    protected final LoaderManager.LoaderCallbacks<Contact> mContactLoaderListener =
-            new LoaderManager.LoaderCallbacks<Contact>() {
-
-                protected long mLoaderStartTime;
-
-                @Override
-                public Loader<Contact> onCreateLoader(int id, Bundle args) {
-                    mLoaderStartTime = SystemClock.elapsedRealtime();
-                    return new ContactLoader(mContext, mLookupUri, true);
-                }
-
-                @Override
-                public void onLoadFinished(Loader<Contact> loader, Contact contact) {
-                    final long loaderCurrentTime = SystemClock.elapsedRealtime();
-                    Log.v(TAG, "Time needed for loading: " + (loaderCurrentTime-mLoaderStartTime));
-                    if (!contact.isLoaded()) {
-                        // Item has been deleted. Close activity without saving again.
-                        Log.i(TAG, "No contact found. Closing activity");
-                        mStatus = Status.CLOSING;
-                        if (mListener != null) mListener.onContactNotFound();
-                        return;
-                    }
-
-                    mStatus = Status.EDITING;
-                    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));
-                }
-
-                @Override
-                public void onLoaderReset(Loader<Contact> loader) {
-                }
-            };
-
-    /**
-     * The groups meta data loader listener.
-     */
-    protected final LoaderManager.LoaderCallbacks<Cursor> mGroupsLoaderListener =
-            new LoaderManager.LoaderCallbacks<Cursor>() {
-
-                @Override
-                public CursorLoader onCreateLoader(int id, Bundle args) {
-                    return new GroupMetaDataLoader(mContext, ContactsContract.Groups.CONTENT_URI);
-                }
-
-                @Override
-                public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
-                    mGroupMetaData = data;
-                    setGroupMetaData();
-                }
-
-                @Override
-                public void onLoaderReset(Loader<Cursor> loader) {
-                }
-            };
-
-    @Override
-    public void onAttach(Activity activity) {
-        super.onAttach(activity);
-        mContext = activity;
-        mEditorUtils = ContactEditorUtils.create(mContext);
-        mComparator = new RawContactDeltaComparator(mContext);
-    }
-
-    @Override
-    public void onCreate(Bundle savedState) {
-        if (savedState != null) {
-            // Restore mUri before calling super.onCreate so that onInitializeLoaders
-            // would already have a uri and an action to work with
-            mAction = savedState.getString(KEY_ACTION);
-            mLookupUri = savedState.getParcelable(KEY_URI);
-        }
-
-        super.onCreate(savedState);
-
-        if (savedState == null) {
-            mViewIdGenerator = new ViewIdGenerator();
-        } else {
-            mViewIdGenerator = savedState.getParcelable(KEY_VIEW_ID_GENERATOR);
-
-            mAutoAddToDefaultGroup = savedState.getBoolean(KEY_AUTO_ADD_TO_DEFAULT_GROUP);
-            mDisableDeleteMenuOption = savedState.getBoolean(KEY_DISABLE_DELETE_MENU_OPTION);
-            mNewLocalProfile = savedState.getBoolean(KEY_NEW_LOCAL_PROFILE);
-            mMaterialPalette = savedState.getParcelable(KEY_MATERIAL_PALETTE);
-            mPhotoId = savedState.getLong(KEY_PHOTO_ID);
-
-            mRawContacts = ImmutableList.copyOf(savedState.<RawContact>getParcelableArrayList(
-                    KEY_RAW_CONTACTS));
-            // NOTE: mGroupMetaData is not saved/restored
-
-            // Read state from savedState. No loading involved here
-            mState = savedState.<RawContactDeltaList> getParcelable(KEY_EDIT_STATE);
-            mStatus = savedState.getInt(KEY_STATUS);
-            mRawContactDisplayAloneIsReadOnly = savedState.getBoolean(
-                    KEY_RAW_CONTACT_DISPLAY_ALONE_IS_READ_ONLY);
-
-            mHasNewContact = savedState.getBoolean(KEY_HAS_NEW_CONTACT);
-            mNewContactDataReady = savedState.getBoolean(KEY_NEW_CONTACT_READY);
-
-            mIsEdit = savedState.getBoolean(KEY_IS_EDIT);
-            mExistingContactDataReady = savedState.getBoolean(KEY_EXISTING_CONTACT_READY);
-
-            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
-            mAggregationSuggestionsRawContactId = savedState.getLong(
-                    KEY_AGGREGATION_SUGGESTIONS_RAW_CONTACT_ID);
-
-            // Join Activity
-            mContactIdForJoin = savedState.getLong(KEY_CONTACT_ID_FOR_JOIN);
-
-            mReadOnlyDisplayName = savedState.getString(KEY_READ_ONLY_DISPLAY_NAME);
-        }
-
-        // mState can still be null because it may not have have finished loading before
-        // onSaveInstanceState was called.
-        if (mState == null) {
-            mState = new RawContactDeltaList();
-        }
-    }
-
-    @Override
-    public void onActivityCreated(Bundle savedInstanceState) {
-        super.onActivityCreated(savedInstanceState);
-
-        validateAction(mAction);
-
-        if (mState.isEmpty()) {
-            // The delta list may not have finished loading before orientation change happens.
-            // In this case, there will be a saved state but deltas will be missing.  Reload from
-            // database.
-            if (Intent.ACTION_EDIT.equals(mAction) ||
-                    ContactEditorBaseActivity.ACTION_EDIT.equals(mAction)) {
-                // Either
-                // 1) orientation change but load never finished.
-                // 2) not an orientation change so data needs to be loaded for first time.
-                getLoaderManager().initLoader(LOADER_CONTACT, null, mContactLoaderListener);
-                getLoaderManager().initLoader(LOADER_GROUPS, null, mGroupsLoaderListener);
-            }
-        } else {
-            // Orientation change, we already have mState, it was loaded by onCreate
-            bindEditors();
-        }
-
-        // Handle initial actions only when existing state missing
-        if (savedInstanceState == null) {
-            final Account account = mIntentExtras == null ? null :
-                    (Account) mIntentExtras.getParcelable(Intents.Insert.EXTRA_ACCOUNT);
-            final String dataSet = mIntentExtras == null ? null :
-                    mIntentExtras.getString(Intents.Insert.EXTRA_DATA_SET);
-            if (account != null) {
-                mAccountWithDataSet = new AccountWithDataSet(account.name, account.type, dataSet);
-            }
-
-            if (Intent.ACTION_EDIT.equals(mAction) ||
-                    ContactEditorBaseActivity.ACTION_EDIT.equals(mAction)) {
-                mIsEdit = true;
-            } else if (Intent.ACTION_INSERT.equals(mAction) ||
-                    ContactEditorBaseActivity.ACTION_INSERT.equals(mAction)) {
-                mHasNewContact = true;
-                if (mAccountWithDataSet != null) {
-                    createContact(mAccountWithDataSet);
-                } else if (mIntentExtras != null && mIntentExtras.getBoolean(
-                        ContactEditorBaseActivity.EXTRA_SAVE_TO_DEVICE_FLAG, false)) {
-                    createContact(null);
-                } else {
-                    // No Account specified. Let the user choose
-                    // Load Accounts async so that we can present them
-                    selectAccountAndCreateContact();
-                }
-            }
-        }
-    }
-
-    /**
-     * Checks if the requested action is valid.
-     *
-     * @param action The action to test.
-     * @throws IllegalArgumentException when the action is invalid.
-     */
-    private static void validateAction(String action) {
-        if (VALID_INTENT_ACTIONS.contains(action)) {
-            return;
-        }
-        throw new IllegalArgumentException(
-                "Unknown action " + action + "; Supported actions: " + VALID_INTENT_ACTIONS);
-    }
-
-    @Override
-    public void onSaveInstanceState(Bundle outState) {
-        outState.putString(KEY_ACTION, mAction);
-        outState.putParcelable(KEY_URI, mLookupUri);
-        outState.putBoolean(KEY_AUTO_ADD_TO_DEFAULT_GROUP, mAutoAddToDefaultGroup);
-        outState.putBoolean(KEY_DISABLE_DELETE_MENU_OPTION, mDisableDeleteMenuOption);
-        outState.putBoolean(KEY_NEW_LOCAL_PROFILE, mNewLocalProfile);
-        if (mMaterialPalette != null) {
-            outState.putParcelable(KEY_MATERIAL_PALETTE, mMaterialPalette);
-        }
-        outState.putLong(KEY_PHOTO_ID, mPhotoId);
-
-        outState.putParcelable(KEY_VIEW_ID_GENERATOR, mViewIdGenerator);
-
-        outState.putParcelableArrayList(KEY_RAW_CONTACTS, mRawContacts == null ?
-                Lists.<RawContact>newArrayList() : Lists.newArrayList(mRawContacts));
-        // NOTE: mGroupMetaData is not saved
-
-        if (hasValidState()) {
-            // Store entities with modifications
-            outState.putParcelable(KEY_EDIT_STATE, mState);
-        }
-        outState.putInt(KEY_STATUS, mStatus);
-        outState.putBoolean(KEY_HAS_NEW_CONTACT, mHasNewContact);
-        outState.putBoolean(KEY_NEW_CONTACT_READY, mNewContactDataReady);
-        outState.putBoolean(KEY_IS_EDIT, mIsEdit);
-        outState.putBoolean(KEY_EXISTING_CONTACT_READY, mExistingContactDataReady);
-        outState.putBoolean(KEY_RAW_CONTACT_DISPLAY_ALONE_IS_READ_ONLY,
-                mRawContactDisplayAloneIsReadOnly);
-
-        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
-        outState.putLong(KEY_AGGREGATION_SUGGESTIONS_RAW_CONTACT_ID,
-                mAggregationSuggestionsRawContactId);
-
-        // Join Activity
-        outState.putLong(KEY_CONTACT_ID_FOR_JOIN, mContactIdForJoin);
-
-        outState.putString(KEY_READ_ONLY_DISPLAY_NAME, mReadOnlyDisplayName);
-
-        super.onSaveInstanceState(outState);
-    }
-
-    @Override
-    public void onStop() {
-        super.onStop();
-        UiClosables.closeQuietly(mAggregationSuggestionPopup);
-    }
-
-    @Override
-    public void onDestroy() {
-        super.onDestroy();
-        if (mAggregationSuggestionEngine != null) {
-            mAggregationSuggestionEngine.quit();
-        }
-    }
-
-    @Override
-    public void onActivityResult(int requestCode, int resultCode, Intent data) {
-        switch (requestCode) {
-            case REQUEST_CODE_JOIN: {
-                // Ignore failed requests
-                if (resultCode != Activity.RESULT_OK) return;
-                if (data != null) {
-                    final long contactId = ContentUris.parseId(data.getData());
-                    if (hasPendingChanges()) {
-                        // Ask the user if they want to save changes before doing the join
-                        JoinContactConfirmationDialogFragment.show(this, contactId);
-                    } else {
-                        // Do the join immediately
-                        joinAggregate(contactId);
-                    }
-                }
-                break;
-            }
-            case REQUEST_CODE_ACCOUNTS_CHANGED: {
-                // Bail if the account selector was not successful.
-                if (resultCode != Activity.RESULT_OK) {
-                    if (mListener != null) {
-                        mListener.onReverted();
-                    }
-                    return;
-                }
-                // If there's an account specified, use it.
-                if (data != null) {
-                    AccountWithDataSet account = data.getParcelableExtra(
-                            Intents.Insert.EXTRA_ACCOUNT);
-                    if (account != null) {
-                        createContact(account);
-                        return;
-                    }
-                }
-                // If there isn't an account specified, then this is likely a phone-local
-                // contact, so we should continue setting up the editor by automatically selecting
-                // the most appropriate account.
-                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);
-        }
-    }
-
-    /**
-     * Invalidates the options menu if we are still associated with an Activity.
-     */
-    protected void invalidateOptionsMenu() {
-        final Activity activity = getActivity();
-        if (activity != null) {
-            activity.invalidateOptionsMenu();
-        }
-    }
-
-    @Override
-    public Context getContext() {
-        return getActivity();
-    }
-
-    @Override
-    public void onCreateOptionsMenu(Menu menu, final MenuInflater inflater) {
-        inflater.inflate(R.menu.edit_contact, menu);
-    }
-
-    @Override
-    public void onPrepareOptionsMenu(Menu menu) {
-        // This supports the keyboard shortcut to save changes to a contact but shouldn't be visible
-        // because the custom action bar contains the "save" button now (not the overflow menu).
-        // TODO: Find a better way to handle shortcuts, i.e. onKeyDown()?
-        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 (isInsert(mAction) || mRawContactIdToDisplayAlone != -1) {
-            HelpUtils.prepareHelpMenuItem(mContext, helpMenu, R.string.help_url_people_add);
-            splitMenu.setVisible(false);
-            joinMenu.setVisible(false);
-            deleteMenu.setVisible(false);
-        } else if (isEdit(mAction)) {
-            HelpUtils.prepareHelpMenuItem(mContext, helpMenu, R.string.help_url_people_edit);
-            splitMenu.setVisible(canUnlinkRawContacts());
-            // Cannot join a user profile
-            joinMenu.setVisible(!isEditingUserProfile());
-            deleteMenu.setVisible(!mDisableDeleteMenuOption && !isEditingUserProfile());
-        } else {
-            // something else, so don't show the help menu
-            helpMenu.setVisible(false);
-        }
-
-        // Save menu is invisible when there's only one read only contact in the editor.
-        saveMenu.setVisible(!mRawContactDisplayAloneIsReadOnly);
-        if (saveMenu.isVisible()) {
-            // Since we're using a custom action layout we have to manually hook up the handler.
-            saveMenu.getActionView().setOnClickListener(new View.OnClickListener() {
-                @Override
-                public void onClick(View v) {
-                    onOptionsItemSelected(saveMenu);
-                }
-            });
-        }
-
-        if (mRawContactIdToDisplayAlone != -1 || 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);
-        }
-    }
-
-    @Override
-    public boolean onOptionsItemSelected(MenuItem item) {
-        final Activity activity = getActivity();
-        if (activity == null || activity.isFinishing() || activity.isDestroyed()) {
-            // If we no longer are attached to a running activity want to
-            // drain this event.
-            return true;
-        }
-
-        switch (item.getItemId()) {
-            case R.id.menu_save:
-                return save(SaveMode.CLOSE);
-            case R.id.menu_delete:
-                if (mListener != null) mListener.onDeleteRequested(mLookupUri);
-                return true;
-            case R.id.menu_split:
-                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);
-                return true;
-        }
-
-        return false;
-    }
-
-    @Override
-    public boolean revert() {
-        if (mState.isEmpty() || !hasPendingChanges()) {
-            onCancelEditConfirmed();
-        } else {
-            CancelEditDialogFragment.show(this);
-        }
-        return true;
-    }
-
-    @Override
-    public void onCancelEditConfirmed() {
-        // When this Fragment is closed we don't want it to auto-save
-        mStatus = Status.CLOSING;
-        if (mListener != null) {
-            mListener.onReverted();
-        }
-    }
-
-    @Override
-    public void onSplitContactConfirmed(boolean hasPendingChanges) {
-        if (mState.isEmpty()) {
-            // This may happen when this Fragment is recreated by the system during users
-            // confirming the split action (and thus this method is called just before onCreate()),
-            // for example.
-            Log.e(TAG, "mState became null during the user's confirming split action. " +
-                    "Cannot perform the save action.");
-            return;
-        }
-
-        if (!hasPendingChanges && mHasNewContact) {
-            // If the user didn't add anything new, we don't want to split out the newly created
-            // raw contact into a name-only contact so remove them.
-            final Iterator<RawContactDelta> iterator = mState.iterator();
-            while (iterator.hasNext()) {
-                final RawContactDelta rawContactDelta = iterator.next();
-                if (rawContactDelta.getRawContactId() < 0) {
-                    iterator.remove();
-                }
-            }
-        }
-        mState.markRawContactsForSplitting();
-        save(SaveMode.SPLIT);
-    }
-
-    private boolean doSplitContactAction() {
-        if (!hasValidState()) return false;
-
-        SplitContactConfirmationDialogFragment.show(this, hasPendingChanges());
-        return true;
-    }
-
-    private boolean doJoinContactAction() {
-        if (!hasValidState() || mLookupUri == null) {
-            return false;
-        }
-
-        // If we just started creating a new contact and haven't added any data, it's too
-        // early to do a join
-        if (mState.size() == 1 && mState.get(0).isContactInsert()
-                && !hasPendingChanges()) {
-            Toast.makeText(mContext, R.string.toast_join_with_empty_contact,
-                    Toast.LENGTH_LONG).show();
-            return true;
-        }
-
-        showJoinAggregateActivity(mLookupUri);
-        return true;
-    }
-
-    @Override
-    public void onJoinContactConfirmed(long joinContactId) {
-        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) {
-            return false;
-        }
-
-        // If we are about to close the editor - there is no need to refresh the data
-        if (saveMode == SaveMode.CLOSE || saveMode == SaveMode.COMPACT
-                || saveMode == SaveMode.SPLIT) {
-            getLoaderManager().destroyLoader(LOADER_CONTACT);
-        }
-
-        mStatus = Status.SAVING;
-
-        if (!hasPendingChanges()) {
-            if (mLookupUri == null && saveMode == SaveMode.RELOAD) {
-                // We don't have anything to save and there isn't even an existing contact yet.
-                // Nothing to do, simply go back to editing mode
-                mStatus = Status.EDITING;
-                return true;
-            }
-            onSaveCompleted(/* hadChanges =*/ false, saveMode,
-                    /* saveSucceeded =*/ mLookupUri != null, mLookupUri, /* joinContactId =*/ null);
-            return true;
-        }
-
-        setEnabled(false);
-
-        return doSaveAction(saveMode, /* joinContactId */ null);
-    }
-
-    /**
-     * Persist the accumulated editor deltas.
-     *
-     * @param joinContactId the raw contact ID to join the contact being saved to after the save,
-     *         may be null.
-     */
-    abstract protected boolean doSaveAction(int saveMode, Long joinContactId);
-
-    protected boolean startSaveService(Context context, Intent intent, int saveMode) {
-        final boolean result = ContactSaveService.startService(
-                context, intent, saveMode);
-        if (!result) {
-            onCancelEditConfirmed();
-        }
-        return result;
-    }
-
-    //
-    // State accessor methods
-    //
-
-    /**
-     * Check if our internal {@link #mState} is valid, usually checked before
-     * performing user actions.
-     */
-    protected boolean hasValidState() {
-        return mState.size() > 0;
-    }
-
-    protected boolean isEditingUserProfile() {
-        return mNewLocalProfile || mIsUserProfile;
-    }
-
-    /**
-     * Whether the contact being edited spans multiple raw contacts.
-     * The may also span multiple accounts.
-     */
-    public boolean isEditingMultipleRawContacts() {
-        return mState.size() > 1;
-    }
-
-    /**
-     * Whether the contact being edited is composed of a single read-only raw contact
-     * aggregated with a newly created writable raw contact.
-     */
-    protected boolean isEditingReadOnlyRawContactWithNewContact() {
-        return mHasNewContact && mState.size() == 2;
-    }
-
-    /**
-     * Return true if there are any edits to the current contact which need to
-     * be saved.
-     */
-    protected boolean hasPendingRawContactChanges(Set<String> excludedMimeTypes) {
-        final AccountTypeManager accountTypes = AccountTypeManager.getInstance(mContext);
-        return RawContactModifier.hasChanges(mState, accountTypes, excludedMimeTypes);
-    }
-
-    /**
-     * We allow unlinking only if there is more than one raw contact, it is not a user-profile,
-     * and unlinking won't result in an empty contact.  For the empty contact case, we only guard
-     * against this when there is a single read-only contact in the aggregate.  If the user
-     * has joined >1 read-only contacts together, we allow them to unlink it, even if they have
-     * never added their own information and unlinking will create a name only contact.
-     */
-    protected boolean canUnlinkRawContacts() {
-        return isEditingMultipleRawContacts()
-                && !isEditingUserProfile()
-                && !isEditingReadOnlyRawContactWithNewContact();
-    }
-
-    /**
-     * Determines if changes were made in the editor that need to be saved, while taking into
-     * account that name changes are not real for read-only contacts.
-     * See go/editing-read-only-contacts
-     */
-    protected boolean hasPendingChanges() {
-        if (mReadOnlyNameEditorView != null && mReadOnlyDisplayName != null) {
-            // We created a new raw contact delta with a default display name.
-            // We must test for pending changes while ignoring the default display name.
-            final String displayName = mReadOnlyNameEditorView.getDisplayName();
-            if (mReadOnlyDisplayName.equals(displayName)) {
-                final Set<String> excludedMimeTypes = new HashSet<>();
-                excludedMimeTypes.add(StructuredName.CONTENT_ITEM_TYPE);
-                return hasPendingRawContactChanges(excludedMimeTypes);
-            }
-            return true;
-        }
-        return hasPendingRawContactChanges(/* excludedMimeTypes =*/ null);
-    }
-
-    /**
-     * Whether editor inputs and the options menu should be enabled.
-     */
-    protected boolean isEnabled() {
-        return mEnabled;
-    }
-
-    /**
-     * Returns the palette extra that was passed in.
-     */
-    protected MaterialColorMapUtils.MaterialPalette getMaterialPalette() {
-        return mMaterialPalette;
-    }
-
-    //
-    // Account creation
-    //
-
-    private void selectAccountAndCreateContact() {
-        // If this is a local profile, then skip the logic about showing the accounts changed
-        // activity and create a phone-local contact.
-        if (mNewLocalProfile) {
-            createContact(null);
-            return;
-        }
-
-        // If there is no default account or the accounts have changed such that we need to
-        // prompt the user again, then launch the account prompt.
-        if (mEditorUtils.shouldShowAccountChangedNotification()) {
-            Intent intent = new Intent(mContext, ContactEditorAccountsChangedActivity.class);
-            // Prevent a second instance from being started on rotates
-            intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
-            mStatus = Status.SUB_ACTIVITY;
-            startActivityForResult(intent, REQUEST_CODE_ACCOUNTS_CHANGED);
-        } else {
-            // Otherwise, there should be a default account. Then either create a local contact
-            // (if default account is null) or create a contact with the specified account.
-            final AccountWithDataSet defaultAccount = mEditorUtils.getOnlyOrDefaultAccount();
-            createContact(defaultAccount);
-        }
-    }
-
-    /**
-     * Create a contact by automatically selecting the first account. If there's no available
-     * account, a device-local contact should be created.
-     */
-    protected void createContact() {
-        final List<AccountWithDataSet> accounts =
-                AccountTypeManager.getInstance(mContext).getAccounts(true);
-        // No Accounts available. Create a phone-local contact.
-        if (accounts.isEmpty()) {
-            createContact(null);
-            return;
-        }
-
-        // We have an account switcher in "create-account" screen, so don't need to ask a user to
-        // select an account here.
-        createContact(accounts.get(0));
-    }
-
-    /**
-     * Shows account creation screen associated with a given account.
-     *
-     * @param account may be null to signal a device-local contact should be created.
-     */
-    protected void createContact(AccountWithDataSet account) {
-        final AccountTypeManager accountTypes = AccountTypeManager.getInstance(mContext);
-        final AccountType accountType = accountTypes.getAccountTypeForAccount(account);
-
-        if (accountType.getCreateContactActivityClassName() != null) {
-            if (mListener != null) {
-                mListener.onCustomCreateContactActivityRequested(account, mIntentExtras);
-            }
-        } else {
-            setStateForNewContact(account, accountType, isEditingUserProfile());
-        }
-    }
-
-    //
-    // Data binding
-    //
-
-    private void setState(Contact contact) {
-        // If we have already loaded data, we do not want to change it here to not confuse the user
-        if (!mState.isEmpty()) {
-            Log.v(TAG, "Ignoring background change. This will have to be rebased later");
-            return;
-        }
-
-        // See if this edit operation needs to be redirected to a custom editor
-        mRawContacts = contact.getRawContacts();
-        if (mRawContacts.size() == 1) {
-            RawContact rawContact = mRawContacts.get(0);
-            String type = rawContact.getAccountTypeString();
-            String dataSet = rawContact.getDataSet();
-            AccountType accountType = rawContact.getAccountType(mContext);
-            if (accountType.getEditContactActivityClassName() != null &&
-                    !accountType.areContactsWritable()) {
-                if (mListener != null) {
-                    String name = rawContact.getAccountName();
-                    long rawContactId = rawContact.getId();
-                    mListener.onCustomEditContactActivityRequested(
-                            new AccountWithDataSet(name, type, dataSet),
-                            ContentUris.withAppendedId(RawContacts.CONTENT_URI, rawContactId),
-                            mIntentExtras, true);
-                }
-                return;
-            }
-        }
-
-        String readOnlyDisplayName = null;
-        // Check for writable raw contacts.  If there are none, then we need to create one so user
-        // can edit.  For the user profile case, there is already an editable contact.
-        if (!contact.isUserProfile() && !contact.isWritableContact(mContext)) {
-            mHasNewContact = true;
-
-            // This is potentially an asynchronous call and will add deltas to list.
-            selectAccountAndCreateContact();
-
-            readOnlyDisplayName = contact.getDisplayName();
-        } else {
-            mHasNewContact = false;
-        }
-
-        // This also adds deltas to list.  If readOnlyDisplayName is null at this point it is
-        // simply ignored later on by the editor.
-        setStateForExistingContact(readOnlyDisplayName, contact.isUserProfile(), mRawContacts);
-    }
-
-    /**
-     * Prepare {@link #mState} for a newly created phone-local contact.
-     */
-    private void setStateForNewContact(AccountWithDataSet account, AccountType accountType,
-            boolean isUserProfile) {
-        setStateForNewContact(account, accountType, /* oldState =*/ null,
-                /* oldAccountType =*/ null, isUserProfile);
-    }
-
-    /**
-     * Prepare {@link #mState} for a newly created phone-local contact, migrating the state
-     * specified by oldState and oldAccountType.
-     */
-    protected void setStateForNewContact(AccountWithDataSet account, AccountType accountType,
-            RawContactDelta oldState, AccountType oldAccountType, boolean isUserProfile) {
-        mStatus = Status.EDITING;
-        mState.add(createNewRawContactDelta(account, accountType, oldState, oldAccountType));
-        mIsUserProfile = isUserProfile;
-        mNewContactDataReady = true;
-        bindEditors();
-    }
-
-    /**
-     * Returns a {@link RawContactDelta} for a new contact suitable for addition into
-     * {@link #mState}.
-     *
-     * If oldState and oldAccountType are specified, the state specified by those parameters
-     * is migrated to the result {@link RawContactDelta}.
-     */
-    private RawContactDelta createNewRawContactDelta(AccountWithDataSet account,
-            AccountType accountType, RawContactDelta oldState, AccountType oldAccountType) {
-        final RawContact rawContact = new RawContact();
-        if (account != null) {
-            rawContact.setAccount(account);
-        } else {
-            rawContact.setAccountToLocal();
-        }
-
-        final RawContactDelta result = new RawContactDelta(
-                ValuesDelta.fromAfter(rawContact.getValues()));
-        if (oldState == null) {
-            // Parse any values from incoming intent
-            RawContactModifier.parseExtras(mContext, accountType, result, mIntentExtras);
-        } else {
-            RawContactModifier.migrateStateForNewContact(
-                    mContext, oldState, result, oldAccountType, accountType);
-        }
-
-        // Ensure we have some default fields (if the account type does not support a field,
-        // ensureKind will not add it, so it is safe to add e.g. Event)
-        RawContactModifier.ensureKindExists(result, accountType, Phone.CONTENT_ITEM_TYPE);
-        RawContactModifier.ensureKindExists(result, accountType, Email.CONTENT_ITEM_TYPE);
-        RawContactModifier.ensureKindExists(result, accountType, Organization.CONTENT_ITEM_TYPE);
-        RawContactModifier.ensureKindExists(result, accountType, Event.CONTENT_ITEM_TYPE);
-        RawContactModifier.ensureKindExists(result, accountType,
-                StructuredPostal.CONTENT_ITEM_TYPE);
-
-        // Set the correct URI for saving the contact as a profile
-        if (mNewLocalProfile) {
-            result.setProfileQueryUri();
-        }
-
-        return result;
-    }
-
-    /**
-     * Prepare {@link #mState} for an existing contact.
-     */
-    protected void setStateForExistingContact(String readOnlyDisplayName, boolean isUserProfile,
-            ImmutableList<RawContact> rawContacts) {
-        setEnabled(true);
-        mReadOnlyDisplayName = readOnlyDisplayName;
-
-        mState.addAll(rawContacts.iterator());
-        setIntentExtras(mIntentExtras);
-        mIntentExtras = null;
-
-        // For user profile, change the contacts query URI
-        mIsUserProfile = isUserProfile;
-        boolean localProfileExists = false;
-
-        if (mIsUserProfile) {
-            for (RawContactDelta rawContactDelta : mState) {
-                // For profile contacts, we need a different query URI
-                rawContactDelta.setProfileQueryUri();
-                // Try to find a local profile contact
-                if (rawContactDelta.getValues().getAsString(RawContacts.ACCOUNT_TYPE) == null) {
-                    localProfileExists = true;
-                }
-            }
-            // Editor should always present a local profile for editing
-            if (!localProfileExists) {
-                mState.add(createLocalRawContactDelta());
-            }
-        }
-        mExistingContactDataReady = true;
-        bindEditors();
-    }
-
-    /**
-     * Returns a {@link RawContactDelta} for a local contact suitable for addition into
-     * {@link #mState}.
-     */
-    private static RawContactDelta createLocalRawContactDelta() {
-        final RawContact rawContact = new RawContact();
-        rawContact.setAccountToLocal();
-
-        final RawContactDelta result = new RawContactDelta(
-                ValuesDelta.fromAfter(rawContact.getValues()));
-        result.setProfileQueryUri();
-
-        return result;
-    }
-
-    /**
-     * Sets group metadata on all bound editors.
-     */
-    abstract protected void setGroupMetaData();
-
-    /**
-     * Bind editors using {@link #mState} and other members initialized from the loaded (or new)
-     * Contact.
-     */
-    abstract protected void bindEditors();
-
-    /**
-     * Set the enabled state of editors.
-     */
-    private void setEnabled(boolean enabled) {
-        if (mEnabled != enabled) {
-            mEnabled = enabled;
-
-            // Enable/disable editors
-            if (mContent != null) {
-                int count = mContent.getChildCount();
-                for (int i = 0; i < count; i++) {
-                    mContent.getChildAt(i).setEnabled(enabled);
-                }
-            }
-
-            // Enable/disable aggregation suggestion vies
-            if (mAggregationSuggestionView != null) {
-                LinearLayout itemList = (LinearLayout) mAggregationSuggestionView.findViewById(
-                        R.id.aggregation_suggestions);
-                int count = itemList.getChildCount();
-                for (int i = 0; i < count; i++) {
-                    itemList.getChildAt(i).setEnabled(enabled);
-                }
-            }
-
-            // Maybe invalidate the options menu
-            final Activity activity = getActivity();
-            if (activity != null) activity.invalidateOptionsMenu();
-        }
-    }
-
-    /**
-     * Removes a current editor ({@link #mState}) and rebinds new editor for a new account.
-     * Some of old data are reused with new restriction enforced by the new account.
-     *
-     * @param oldState Old data being edited.
-     * @param oldAccount Old account associated with oldState.
-     * @param newAccount New account to be used.
-     */
-    protected void rebindEditorsForNewContact(
-            RawContactDelta oldState, AccountWithDataSet oldAccount,
-            AccountWithDataSet newAccount) {
-        AccountTypeManager accountTypes = AccountTypeManager.getInstance(mContext);
-        AccountType oldAccountType = accountTypes.getAccountTypeForAccount(oldAccount);
-        AccountType newAccountType = accountTypes.getAccountTypeForAccount(newAccount);
-
-        if (newAccountType.getCreateContactActivityClassName() != null) {
-            Log.w(TAG, "external activity called in rebind situation");
-            if (mListener != null) {
-                mListener.onCustomCreateContactActivityRequested(newAccount, mIntentExtras);
-            }
-        } else {
-            mExistingContactDataReady = false;
-            mNewContactDataReady = false;
-            mState = new RawContactDeltaList();
-            setStateForNewContact(newAccount, newAccountType, oldState, oldAccountType,
-                    isEditingUserProfile());
-            if (mIsEdit) {
-                setStateForExistingContact(mReadOnlyDisplayName, isEditingUserProfile(),
-                        mRawContacts);
-            }
-        }
-    }
-
-    //
-    // ContactEditor
-    //
-
-    @Override
-    public void setListener(Listener listener) {
-        mListener = listener;
-    }
-
-    @Override
-    public void load(String action, Uri lookupUri, Bundle intentExtras) {
-        mAction = action;
-        mLookupUri = lookupUri;
-        mIntentExtras = intentExtras;
-
-        if (mIntentExtras != null) {
-            mAutoAddToDefaultGroup =
-                    mIntentExtras.containsKey(INTENT_EXTRA_ADD_TO_DEFAULT_DIRECTORY);
-            mNewLocalProfile =
-                    mIntentExtras.getBoolean(INTENT_EXTRA_NEW_LOCAL_PROFILE);
-            mDisableDeleteMenuOption =
-                    mIntentExtras.getBoolean(INTENT_EXTRA_DISABLE_DELETE_MENU_OPTION);
-            if (mIntentExtras.containsKey(INTENT_EXTRA_MATERIAL_PALETTE_PRIMARY_COLOR)
-                    && mIntentExtras.containsKey(INTENT_EXTRA_MATERIAL_PALETTE_SECONDARY_COLOR)) {
-                mMaterialPalette = new MaterialColorMapUtils.MaterialPalette(
-                        mIntentExtras.getInt(INTENT_EXTRA_MATERIAL_PALETTE_PRIMARY_COLOR),
-                        mIntentExtras.getInt(INTENT_EXTRA_MATERIAL_PALETTE_SECONDARY_COLOR));
-            }
-            // If the user selected a different photo, don't restore the one from the Intent
-            if (mPhotoId < 0) {
-                mPhotoId = mIntentExtras.getLong(INTENT_EXTRA_PHOTO_ID);
-            }
-            mRawContactIdToDisplayAlone = mIntentExtras.getLong(
-                    INTENT_EXTRA_RAW_CONTACT_ID_TO_DISPLAY_ALONE, -1);
-            mRawContactDisplayAloneIsReadOnly = mIntentExtras.getBoolean(
-                    INTENT_EXTRA_RAW_CONTACT_DISPLAY_ALONE_IS_READ_ONLY);
-        }
-    }
-
-    @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;
-            }
-        }
-    }
-
-    @Override
-    public void onJoinCompleted(Uri uri) {
-        onSaveCompleted(false, SaveMode.RELOAD, uri != null, uri, /* joinContactId */ null);
-    }
-
-    @Override
-    public void onSaveCompleted(boolean hadChanges, int saveMode, boolean saveSucceeded,
-            Uri contactLookupUri, Long joinContactId) {
-        if (hadChanges) {
-            if (saveSucceeded) {
-                switch (saveMode) {
-                    case SaveMode.JOIN:
-                        break;
-                    case SaveMode.SPLIT:
-                        Toast.makeText(mContext, R.string.contactUnlinkedToast, Toast.LENGTH_SHORT)
-                                .show();
-                        break;
-                    default:
-                        Toast.makeText(mContext, R.string.contactSavedToast, Toast.LENGTH_SHORT)
-                                .show();
-                }
-
-            } else {
-                Toast.makeText(mContext, R.string.contactSavedErrorToast, Toast.LENGTH_LONG).show();
-            }
-        }
-        switch (saveMode) {
-            case SaveMode.CLOSE: {
-                final Intent resultIntent;
-                if (saveSucceeded && contactLookupUri != null) {
-                    final Uri lookupUri = maybeConvertToLegacyLookupUri(
-                            mContext, contactLookupUri, mLookupUri);
-                    resultIntent = ImplicitIntentsUtil.composeQuickContactIntent(mContext,
-                            lookupUri, QuickContactActivity.MODE_FULLY_EXPANDED);
-                    resultIntent.putExtra(QuickContactActivity.EXTRA_PREVIOUS_SCREEN_TYPE,
-                            ScreenType.EDITOR);
-                    resultIntent.putExtra(QuickContactActivity.EXTRA_CONTACT_EDITED, true);
-                } else {
-                    resultIntent = null;
-                }
-                // It is already saved, so prevent it from being saved again
-                mStatus = Status.CLOSING;
-                if (mListener != null) mListener.onSaveFinished(resultIntent);
-                break;
-            }
-            case SaveMode.COMPACT: {
-                // It is already saved, so prevent it from being saved again
-                mStatus = Status.CLOSING;
-                if (mListener != null) mListener.onSaveFinished(/* resultIntent= */ null);
-                break;
-            }
-            case SaveMode.JOIN:
-                if (saveSucceeded && contactLookupUri != null && joinContactId != null) {
-                    joinAggregate(joinContactId);
-                }
-                break;
-            case SaveMode.RELOAD:
-                if (saveSucceeded && contactLookupUri != null) {
-                    // If this was in INSERT, we are changing into an EDIT now.
-                    // If it already was an EDIT, we are changing to the new Uri now
-                    mState = new RawContactDeltaList();
-                    load(Intent.ACTION_EDIT, contactLookupUri, null);
-                    mStatus = Status.LOADING;
-                    getLoaderManager().restartLoader(LOADER_CONTACT, null, mContactLoaderListener);
-                }
-                break;
-
-            case SaveMode.SPLIT:
-                mStatus = Status.CLOSING;
-                if (mListener != null) {
-                    mListener.onContactSplit(contactLookupUri);
-                } else {
-                    Log.d(TAG, "No listener registered, can not call onSplitFinished");
-                }
-                break;
-        }
-    }
-
-    /**
-     * Shows a list of aggregates that can be joined into the currently viewed aggregate.
-     *
-     * @param contactLookupUri the fresh URI for the currently edited contact (after saving it)
-     */
-    private void showJoinAggregateActivity(Uri contactLookupUri) {
-        if (contactLookupUri == null || !isAdded()) {
-            return;
-        }
-
-        mContactIdForJoin = ContentUris.parseId(contactLookupUri);
-        final Intent intent = new Intent(mContext, ContactSelectionActivity.class);
-        intent.setAction(UiIntentActions.PICK_JOIN_CONTACT_ACTION);
-        intent.putExtra(UiIntentActions.TARGET_CONTACT_ID_EXTRA_KEY, mContactIdForJoin);
-        startActivityForResult(intent, REQUEST_CODE_JOIN);
-    }
-
-    //
-    // Aggregation PopupWindow
-    //
-
-    /**
-     * Triggers an asynchronous search for aggregation suggestions.
-     */
-    protected void acquireAggregationSuggestions(Context context,
-            long rawContactId, ValuesDelta valuesDelta) {
-        if (mAggregationSuggestionsRawContactId != rawContactId
-                && mAggregationSuggestionView != null) {
-            mAggregationSuggestionView.setVisibility(View.GONE);
-            mAggregationSuggestionView = null;
-            mAggregationSuggestionEngine.reset();
-        }
-
-        mAggregationSuggestionsRawContactId = rawContactId;
-
-        if (mAggregationSuggestionEngine == null) {
-            mAggregationSuggestionEngine = new AggregationSuggestionEngine(context);
-            mAggregationSuggestionEngine.setListener(this);
-            mAggregationSuggestionEngine.start();
-        }
-
-        mAggregationSuggestionEngine.setContactId(getContactId());
-
-        mAggregationSuggestionEngine.onNameChange(valuesDelta);
-    }
-
-    /**
-     * Returns the contact ID for the currently edited contact or 0 if the contact is new.
-     */
-    private long getContactId() {
-        for (RawContactDelta rawContact : mState) {
-            Long contactId = rawContact.getValues().getAsLong(RawContacts.CONTACT_ID);
-            if (contactId != null) {
-                return contactId;
-            }
-        }
-        return 0;
-    }
-
-    @Override
-    public void onAggregationSuggestionChange() {
-        final Activity activity = getActivity();
-        if ((activity != null && activity.isFinishing())
-                || !isVisible() ||  mState.isEmpty() || mStatus != Status.EDITING) {
-            return;
-        }
-
-        UiClosables.closeQuietly(mAggregationSuggestionPopup);
-
-        if (mAggregationSuggestionEngine.getSuggestedContactCount() == 0) {
-            return;
-        }
-
-        final View anchorView = getAggregationAnchorView(mAggregationSuggestionsRawContactId);
-        if (anchorView == null) {
-            return; // Raw contact deleted?
-        }
-        mAggregationSuggestionPopup = new ListPopupWindow(mContext, null);
-        mAggregationSuggestionPopup.setAnchorView(anchorView);
-        mAggregationSuggestionPopup.setWidth(anchorView.getWidth());
-        mAggregationSuggestionPopup.setInputMethodMode(ListPopupWindow.INPUT_METHOD_NOT_NEEDED);
-        mAggregationSuggestionPopup.setAdapter(
-                new AggregationSuggestionAdapter(
-                        getActivity(),
-                        mState.size() == 1 && mState.get(0).isContactInsert(),
-                        /* listener =*/ this,
-                        mAggregationSuggestionEngine.getSuggestions()));
-        mAggregationSuggestionPopup.setOnItemClickListener(new AdapterView.OnItemClickListener() {
-            @Override
-            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
-                final AggregationSuggestionView suggestionView = (AggregationSuggestionView) view;
-                suggestionView.handleItemClickEvent();
-                UiClosables.closeQuietly(mAggregationSuggestionPopup);
-                mAggregationSuggestionPopup = null;
-            }
-        });
-        mAggregationSuggestionPopup.show();
-    }
-
-    /**
-     * Returns the raw contact editor view for the given rawContactId that should be used as the
-     * anchor for aggregation suggestions.
-     */
-    abstract protected View getAggregationAnchorView(long rawContactId);
-
-    /**
-     * Whether the given raw contact ID matches the one used to last load aggregation
-     * suggestions.
-     */
-    protected boolean isAggregationSuggestionRawContactId(long rawContactId) {
-        return mAggregationSuggestionsRawContactId == rawContactId;
-    }
-
-    @Override
-    public void onJoinAction(long contactId, List<Long> rawContactIdList) {
-        final long rawContactIds[] = new long[rawContactIdList.size()];
-        for (int i = 0; i < rawContactIds.length; i++) {
-            rawContactIds[i] = rawContactIdList.get(i);
-        }
-        try {
-            JoinSuggestedContactDialogFragment.show(this, rawContactIds);
-        } catch (Exception ignored) {
-            // No problem - the activity is no longer available to display the dialog
-        }
-    }
-
-    /**
-     * Joins the suggested contact (specified by the id's of constituent raw
-     * contacts), save all changes, and stay in the editor.
-     */
-    protected void doJoinSuggestedContact(long[] rawContactIds) {
-        if (!hasValidState() || mStatus != Status.EDITING) {
-            return;
-        }
-
-        mState.setJoinWithRawContacts(rawContactIds);
-        save(SaveMode.RELOAD);
-    }
-
-    @Override
-    public void onEditAction(Uri contactLookupUri) {
-        SuggestionEditConfirmationDialogFragment.show(this, contactLookupUri);
-    }
-
-    /**
-     * Abandons the currently edited contact and switches to editing the suggested
-     * one, transferring all the data there
-     */
-    protected void doEditSuggestedContact(Uri contactUri) {
-        if (mListener != null) {
-            // make sure we don't save this contact when closing down
-            mStatus = Status.CLOSING;
-            mListener.onEditOtherContactRequested(
-                    contactUri, mState.get(0).getContentValues());
-        }
-    }
-
-    //
-    // Join Activity
-    //
-
-    /**
-     * Performs aggregation with the contact selected by the user from suggestions or A-Z list.
-     */
-    abstract protected void joinAggregate(long contactId);
-
-    //
-    // Utility methods
-    //
-
-    /**
-     * Returns a legacy version of the given contactLookupUri if a legacy Uri was originally
-     * passed to the contact editor.
-     *
-     * @param contactLookupUri The Uri to possibly convert to legacy format.
-     * @param requestLookupUri The lookup Uri originally passed to the contact editor
-     *                         (via Intent data), may be null.
-     */
-    protected static Uri maybeConvertToLegacyLookupUri(Context context, Uri contactLookupUri,
-            Uri requestLookupUri) {
-        final String legacyAuthority = "contacts";
-        final String requestAuthority = requestLookupUri == null
-                ? null : requestLookupUri.getAuthority();
-        if (legacyAuthority.equals(requestAuthority)) {
-            // Build a legacy Uri if that is what was requested by caller
-            final long contactId = ContentUris.parseId(Contacts.lookupContact(
-                    context.getContentResolver(), contactLookupUri));
-            final Uri legacyContentUri = Uri.parse("content://contacts/people");
-            return ContentUris.withAppendedId(legacyContentUri, contactId);
-        }
-        // Otherwise pass back a lookup-style Uri
-        return contactLookupUri;
-    }
-
-    /**
-     * Whether the argument Intent requested a contact insert action or not.
-     */
-    protected static boolean isInsert(Intent intent) {
-        return intent == null ? false : isInsert(intent.getAction());
-    }
-
-    protected static boolean isInsert(String action) {
-        return Intent.ACTION_INSERT.equals(action)
-                || ContactEditorBaseActivity.ACTION_INSERT.equals(action);
-    }
-
-    protected static boolean isEdit(String action) {
-        return Intent.ACTION_EDIT.equals(action)
-                || ContactEditorBaseActivity.ACTION_EDIT.equals(action);
-    }
-}
diff --git a/src/com/android/contacts/editor/ContactEditorFragment.java b/src/com/android/contacts/editor/ContactEditorFragment.java
deleted file mode 100644
index f10120c..0000000
--- a/src/com/android/contacts/editor/ContactEditorFragment.java
+++ /dev/null
@@ -1,604 +0,0 @@
-/*
- * Copyright (C) 2010 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.editor;
-
-import android.app.Activity;
-import android.content.Context;
-import android.content.Intent;
-import android.graphics.Bitmap;
-import android.net.Uri;
-import android.os.Bundle;
-import android.provider.ContactsContract.CommonDataKinds.Photo;
-import android.util.Log;
-import android.view.LayoutInflater;
-import android.view.MenuItem;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.LinearLayout;
-
-import com.android.contacts.ContactSaveService;
-import com.android.contacts.R;
-import com.android.contacts.activities.ContactEditorActivity;
-import com.android.contacts.common.model.AccountTypeManager;
-import com.android.contacts.common.model.RawContactDelta;
-import com.android.contacts.common.model.RawContactDeltaList;
-import com.android.contacts.common.model.ValuesDelta;
-import com.android.contacts.common.model.account.AccountType;
-import com.android.contacts.common.model.account.AccountWithDataSet;
-import com.android.contacts.detail.PhotoSelectionHandler;
-import com.android.contacts.editor.Editor.EditorListener;
-import com.android.contacts.util.ContactPhotoUtils;
-
-import java.io.FileNotFoundException;
-import java.util.Collections;
-import java.util.HashMap;
-
-/**
- * Contact editor with all fields displayed.
- */
-public class ContactEditorFragment extends ContactEditorBaseFragment implements
-        RawContactReadOnlyEditorView.Listener {
-
-    private static final String KEY_EXPANDED_EDITORS = "expandedEditors";
-
-    private static final String KEY_RAW_CONTACT_ID_REQUESTING_PHOTO = "photorequester";
-    private static final String KEY_CURRENT_PHOTO_URI = "currentphotouri";
-    private static final String KEY_UPDATED_PHOTOS = "updatedPhotos";
-
-    // Used to store which raw contact editors have been expanded. Keyed on raw contact ids.
-    private HashMap<Long, Boolean> mExpandedEditors = new HashMap<Long, Boolean>();
-
-    /**
-     * The raw contact for which we started "take photo" or "choose photo from gallery" most
-     * recently.  Used to restore {@link #mCurrentPhotoHandler} after orientation change.
-     */
-    private long mRawContactIdRequestingPhoto;
-
-    /**
-     * The {@link PhotoHandler} for the photo editor for the {@link #mRawContactIdRequestingPhoto}
-     * raw contact.
-     *
-     * A {@link PhotoHandler} is created for each photo editor in {@link #bindPhotoHandler}, but
-     * the only "active" one should get the activity result.  This member represents the active
-     * one.
-     */
-    private PhotoHandler mCurrentPhotoHandler;
-    private Uri mCurrentPhotoUri;
-    private Bundle mUpdatedPhotos = new Bundle();
-
-    public ContactEditorFragment() {
-    }
-
-    @Override
-    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedState) {
-        final View view = inflater.inflate(R.layout.contact_editor_fragment, container, false);
-
-        mContent = (LinearLayout) view.findViewById(R.id.editors);
-
-        setHasOptionsMenu(true);
-
-        return view;
-    }
-
-    @Override
-    public void onCreate(Bundle savedState) {
-        super.onCreate(savedState);
-
-        if (savedState != null) {
-            mExpandedEditors = (HashMap<Long, Boolean>)
-                    savedState.getSerializable(KEY_EXPANDED_EDITORS);
-            mRawContactIdRequestingPhoto = savedState.getLong(
-                    KEY_RAW_CONTACT_ID_REQUESTING_PHOTO);
-            mCurrentPhotoUri = savedState.getParcelable(KEY_CURRENT_PHOTO_URI);
-            mUpdatedPhotos = savedState.getParcelable(KEY_UPDATED_PHOTOS);
-            mRawContactIdToDisplayAlone = savedState.getLong(
-                    ContactEditorBaseFragment.INTENT_EXTRA_RAW_CONTACT_ID_TO_DISPLAY_ALONE, -1);
-        }
-    }
-
-    @Override
-    public void load(String action, Uri lookupUri, Bundle intentExtras) {
-        super.load(action, lookupUri, intentExtras);
-        if (intentExtras != null) {
-            mRawContactIdToDisplayAlone = intentExtras.getLong(
-                    ContactEditorBaseFragment.INTENT_EXTRA_RAW_CONTACT_ID_TO_DISPLAY_ALONE, -1);
-        }
-    }
-
-    @Override
-    public void onStart() {
-        getLoaderManager().initLoader(LOADER_GROUPS, null, mGroupsLoaderListener);
-        super.onStart();
-    }
-
-    @Override
-    public void onExternalEditorRequest(AccountWithDataSet account, Uri uri) {
-        if (mListener != null) {
-            mListener.onCustomEditContactActivityRequested(account, uri, null, false);
-        }
-    }
-
-    @Override
-    public void onEditorExpansionChanged() {
-        updatedExpandedEditorsMap();
-    }
-
-    @Override
-    protected void setGroupMetaData() {
-        if (mGroupMetaData == null) {
-            return;
-        }
-        int editorCount = mContent.getChildCount();
-        for (int i = 0; i < editorCount; i++) {
-            BaseRawContactEditorView editor = (BaseRawContactEditorView) mContent.getChildAt(i);
-            editor.setGroupMetaData(mGroupMetaData);
-        }
-    }
-
-    @Override
-    public boolean onOptionsItemSelected(MenuItem item) {
-        if (item.getItemId() == android.R.id.home) {
-            return revert();
-        }
-        return super.onOptionsItemSelected(item);
-    }
-
-    @Override
-    protected void bindEditors() {
-        // bindEditors() can only bind views if there is data in mState, so immediately return
-        // if mState is null
-        if (mState.isEmpty()) {
-            return;
-        }
-
-        // Check if delta list is ready.  Delta list is populated from existing data and when
-        // editing an read-only contact, it's also populated with newly created data for the
-        // blank form.  When the data is not ready, skip. This method will be called multiple times.
-        if ((mIsEdit && !mExistingContactDataReady) || (mHasNewContact && !mNewContactDataReady)) {
-            return;
-        }
-
-        // Sort the editors
-        Collections.sort(mState, mComparator);
-
-        // Remove any existing editors and rebuild any visible
-        mContent.removeAllViews();
-
-        final LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(
-                Context.LAYOUT_INFLATER_SERVICE);
-        final AccountTypeManager accountTypes = AccountTypeManager.getInstance(mContext);
-        int numRawContacts = mState.size();
-
-        for (int i = 0; i < numRawContacts; i++) {
-            // TODO ensure proper ordering of entities in the list
-            final RawContactDelta rawContactDelta = mState.get(i);
-            if (!rawContactDelta.isVisible()) continue;
-
-            final AccountType type = rawContactDelta.getAccountType(accountTypes);
-            final long rawContactId = rawContactDelta.getRawContactId();
-
-            if (mRawContactIdToDisplayAlone != -1 && mRawContactIdToDisplayAlone != rawContactId) {
-                continue;
-            }
-
-            final BaseRawContactEditorView editor;
-            if (!type.areContactsWritable()) {
-                editor = (BaseRawContactEditorView) inflater.inflate(
-                        R.layout.raw_contact_readonly_editor_view, mContent, false);
-            } else {
-                editor = (RawContactEditorView) inflater.inflate(R.layout.raw_contact_editor_view,
-                        mContent, false);
-            }
-            editor.setListener(this);
-            editor.setEnabled(isEnabled());
-
-            if (mRawContactIdToDisplayAlone != -1) {
-                editor.setCollapsed(false);
-            } else if (mExpandedEditors.containsKey(rawContactId)) {
-                editor.setCollapsed(mExpandedEditors.get(rawContactId));
-            } else {
-                // By default, only the first editor will be expanded.
-                editor.setCollapsed(i != 0);
-            }
-
-            mContent.addView(editor);
-
-            editor.setState(rawContactDelta, type, mViewIdGenerator, isEditingUserProfile());
-            if (mRawContactIdToDisplayAlone != -1) {
-                editor.setCollapsible(false);
-            } else {
-                editor.setCollapsible(numRawContacts > 1);
-            }
-
-            // Set up the photo handler.
-            bindPhotoHandler(editor, type, mState);
-
-            // If a new photo was chosen but not yet saved, we need to update the UI to
-            // reflect this.
-            final Uri photoUri = updatedPhotoUriForRawContact(rawContactId);
-            if (photoUri != null) editor.setFullSizedPhoto(photoUri);
-
-            if (editor instanceof RawContactEditorView) {
-                final Activity activity = getActivity();
-                final RawContactEditorView rawContactEditor = (RawContactEditorView) editor;
-                final ValuesDelta nameValuesDelta = rawContactEditor.getNameEditor().getValues();
-                final EditorListener structuredNameListener = new EditorListener() {
-
-                    @Override
-                    public void onRequest(int request) {
-                        // Make sure the activity is running
-                        if (activity.isFinishing()) {
-                            return;
-                        }
-                        if (!isEditingUserProfile()) {
-                            if (request == EditorListener.FIELD_CHANGED) {
-                                if (!nameValuesDelta.isSuperPrimary()) {
-                                    unsetSuperPrimaryForAllNameEditors();
-                                    nameValuesDelta.setSuperPrimary(true);
-                                }
-                                acquireAggregationSuggestions(activity,
-                                        rawContactEditor.getNameEditor().getRawContactId(),
-                                        rawContactEditor.getNameEditor().getValues());
-                            } else if (request == EditorListener.FIELD_TURNED_EMPTY) {
-                                if (nameValuesDelta.isSuperPrimary()) {
-                                    nameValuesDelta.setSuperPrimary(false);
-                                }
-                            }
-                        }
-                    }
-
-                    @Override
-                    public void onDeleteRequested(Editor removedEditor) {
-                    }
-                };
-
-                final StructuredNameEditorView nameEditor = rawContactEditor.getNameEditor();
-                nameEditor.setEditorListener(structuredNameListener);
-
-                rawContactEditor.setAutoAddToDefaultGroup(mAutoAddToDefaultGroup);
-
-                if (!isEditingUserProfile() && isAggregationSuggestionRawContactId(rawContactId)) {
-                    acquireAggregationSuggestions(activity,
-                            rawContactEditor.getNameEditor().getRawContactId(),
-                            rawContactEditor.getNameEditor().getValues());
-                }
-            }
-        }
-
-        setGroupMetaData();
-
-        // Show editor now that we've loaded state
-        mContent.setVisibility(View.VISIBLE);
-
-        // Refresh Action Bar as the visibility of the join command
-        // Activity can be null if we have been detached from the Activity
-        invalidateOptionsMenu();
-
-        updatedExpandedEditorsMap();
-    }
-
-    private void unsetSuperPrimaryForAllNameEditors() {
-        for (int i = 0; i < mContent.getChildCount(); i++) {
-            final View view = mContent.getChildAt(i);
-            if (view instanceof RawContactEditorView) {
-                final RawContactEditorView rawContactEditorView = (RawContactEditorView) view;
-                final StructuredNameEditorView nameEditorView =
-                        rawContactEditorView.getNameEditor();
-                if (nameEditorView != null) {
-                    final ValuesDelta valuesDelta = nameEditorView.getValues();
-                    if (valuesDelta != null) {
-                        valuesDelta.setSuperPrimary(false);
-                    }
-                }
-            }
-        }
-    }
-
-    /**
-     * Update the values in {@link #mExpandedEditors}.
-     */
-    private void updatedExpandedEditorsMap() {
-        for (int i = 0; i < mContent.getChildCount(); i++) {
-            final View childView = mContent.getChildAt(i);
-            if (childView instanceof BaseRawContactEditorView) {
-                BaseRawContactEditorView childEditor = (BaseRawContactEditorView) childView;
-                mExpandedEditors.put(childEditor.getRawContactId(), childEditor.isCollapsed());
-            }
-        }
-    }
-
-    /**
-     * If we've stashed a temporary file containing a contact's new photo, return its URI.
-     * @param rawContactId identifies the raw-contact whose Bitmap we'll try to return.
-     * @return Uru of photo for specified raw-contact, or null
-     */
-    private Uri updatedPhotoUriForRawContact(long rawContactId) {
-        return (Uri) mUpdatedPhotos.get(String.valueOf(rawContactId));
-    }
-
-    private void bindPhotoHandler(BaseRawContactEditorView editor, AccountType type,
-            RawContactDeltaList state) {
-        final int mode;
-        boolean showIsPrimaryOption;
-        if (type.areContactsWritable()) {
-            if (editor.hasSetPhoto()) {
-                mode = PhotoActionPopup.Modes.WRITE_ABLE_PHOTO;
-                showIsPrimaryOption = hasMoreThanOnePhoto();
-            } else {
-                mode = PhotoActionPopup.Modes.NO_PHOTO;
-                showIsPrimaryOption = false;
-            }
-        } else if (editor.hasSetPhoto() && hasMoreThanOnePhoto()) {
-            mode = PhotoActionPopup.Modes.READ_ONLY_PHOTO;
-            showIsPrimaryOption = true;
-        } else {
-            // Read-only and either no photo or the only photo ==> no options
-            editor.getPhotoEditor().setEditorListener(null);
-            editor.getPhotoEditor().setShowPrimary(false);
-            return;
-        }
-        if (mRawContactIdToDisplayAlone != -1) {
-            showIsPrimaryOption = false;
-        }
-        final PhotoHandler photoHandler = new PhotoHandler(mContext, editor, mode, state);
-        editor.getPhotoEditor().setEditorListener(
-                (PhotoHandler.PhotoEditorListener) photoHandler.getListener());
-        editor.getPhotoEditor().setShowPrimary(showIsPrimaryOption);
-
-        // Note a newly created raw contact gets some random negative ID, so any value is valid
-        // here. (i.e. don't check against -1 or anything.)
-        if (mRawContactIdRequestingPhoto == editor.getRawContactId()) {
-            mCurrentPhotoHandler = photoHandler;
-        }
-    }
-
-    @Override
-    protected boolean doSaveAction(int saveMode, Long joinContactId) {
-        final Intent intent = ContactSaveService.createSaveContactIntent(mContext, mState,
-                SAVE_MODE_EXTRA_KEY, saveMode, isEditingUserProfile(),
-                ((Activity) mContext).getClass(), ContactEditorActivity.ACTION_SAVE_COMPLETED,
-                mUpdatedPhotos, JOIN_CONTACT_ID_EXTRA_KEY, joinContactId);
-        return startSaveService(mContext, intent, saveMode);
-    }
-
-    @Override
-    public void onSaveInstanceState(Bundle outState) {
-        outState.putSerializable(KEY_EXPANDED_EDITORS, mExpandedEditors);
-        outState.putLong(KEY_RAW_CONTACT_ID_REQUESTING_PHOTO, mRawContactIdRequestingPhoto);
-        outState.putParcelable(KEY_CURRENT_PHOTO_URI, mCurrentPhotoUri);
-        outState.putParcelable(KEY_UPDATED_PHOTOS, mUpdatedPhotos);
-        outState.putLong(ContactEditorBaseFragment.INTENT_EXTRA_RAW_CONTACT_ID_TO_DISPLAY_ALONE,
-                mRawContactIdToDisplayAlone);
-        super.onSaveInstanceState(outState);
-    }
-
-    @Override
-    public void onActivityResult(int requestCode, int resultCode, Intent data) {
-        if (mStatus == Status.SUB_ACTIVITY) {
-            mStatus = Status.EDITING;
-        }
-
-        // See if the photo selection handler handles this result.
-        if (mCurrentPhotoHandler != null && mCurrentPhotoHandler.handlePhotoActivityResult(
-                requestCode, resultCode, data)) {
-            return;
-        }
-
-        super.onActivityResult(requestCode, resultCode, data);
-    }
-
-    @Override
-    protected void joinAggregate(final long contactId) {
-        final Intent intent = ContactSaveService.createJoinContactsIntent(
-                mContext, mContactIdForJoin, contactId, ContactEditorActivity.class,
-                ContactEditorActivity.ACTION_JOIN_COMPLETED);
-        mContext.startService(intent);
-    }
-
-    /**
-     * Sets the photo stored in mPhoto and writes it to the RawContact with the given id
-     */
-    private void setPhoto(long rawContact, Bitmap photo, Uri photoUri) {
-        BaseRawContactEditorView requestingEditor = getRawContactEditorView(rawContact);
-
-        if (photo == null || photo.getHeight() <= 0 || photo.getWidth() <= 0) {
-            // This is unexpected.
-            Log.w(TAG, "Invalid bitmap passed to setPhoto()");
-        }
-
-        if (requestingEditor != null) {
-            requestingEditor.setPhotoEntry(photo);
-            // Immediately set all other photos as non-primary. Otherwise the UI can display
-            // multiple photos as "Primary photo".
-            for (int i = 0; i < mContent.getChildCount(); i++) {
-                final View childView = mContent.getChildAt(i);
-                if (childView instanceof BaseRawContactEditorView
-                        && childView != requestingEditor) {
-                    final BaseRawContactEditorView rawContactEditor
-                            = (BaseRawContactEditorView) childView;
-                    rawContactEditor.getPhotoEditor().setSuperPrimary(false);
-                }
-            }
-        } else {
-            Log.w(TAG, "The contact that requested the photo is no longer present.");
-        }
-
-        mUpdatedPhotos.putParcelable(String.valueOf(rawContact), photoUri);
-    }
-
-    /**
-     * Finds raw contact editor view for the given rawContactId.
-     */
-    @Override
-    protected View getAggregationAnchorView(long rawContactId) {
-        BaseRawContactEditorView editorView = getRawContactEditorView(rawContactId);
-        return editorView == null ? null : editorView.findViewById(R.id.anchor_view);
-    }
-
-    public BaseRawContactEditorView getRawContactEditorView(long rawContactId) {
-        for (int i = 0; i < mContent.getChildCount(); i++) {
-            final View childView = mContent.getChildAt(i);
-            if (childView instanceof BaseRawContactEditorView) {
-                final BaseRawContactEditorView editor = (BaseRawContactEditorView) childView;
-                if (editor.getRawContactId() == rawContactId) {
-                    return editor;
-                }
-            }
-        }
-        return null;
-    }
-
-    /**
-     * Returns true if there is currently more than one photo on screen.
-     */
-    private boolean hasMoreThanOnePhoto() {
-        int countWithPicture = 0;
-        final int numEntities = mState.size();
-        for (int i = 0; i < numEntities; i++) {
-            final RawContactDelta entity = mState.get(i);
-            if (entity.isVisible()) {
-                final ValuesDelta primary = entity.getPrimaryEntry(Photo.CONTENT_ITEM_TYPE);
-                if (primary != null && primary.getPhoto() != null) {
-                    countWithPicture++;
-                } else {
-                    final long rawContactId = entity.getRawContactId();
-                    final Uri uri = mUpdatedPhotos.getParcelable(String.valueOf(rawContactId));
-                    if (uri != null) {
-                        try {
-                            mContext.getContentResolver().openInputStream(uri);
-                            countWithPicture++;
-                        } catch (FileNotFoundException e) {
-                        }
-                    }
-                }
-
-                if (countWithPicture > 1) {
-                    return true;
-                }
-            }
-        }
-        return false;
-    }
-
-    /**
-     * Custom photo handler for the editor.  The inner listener that this creates also has a
-     * reference to the editor and acts as an {@link EditorListener}, and uses that editor to hold
-     * state information in several of the listener methods.
-     */
-    private final class PhotoHandler extends PhotoSelectionHandler {
-
-        final long mRawContactId;
-        private final BaseRawContactEditorView mEditor;
-        private final PhotoActionListener mPhotoEditorListener;
-
-        public PhotoHandler(Context context, BaseRawContactEditorView editor, int photoMode,
-                RawContactDeltaList state) {
-            super(context, editor.getPhotoEditor().getChangeAnchorView(), photoMode, false, state);
-            mEditor = editor;
-            mRawContactId = editor.getRawContactId();
-            mPhotoEditorListener = new PhotoEditorListener();
-        }
-
-        @Override
-        public PhotoActionListener getListener() {
-            return mPhotoEditorListener;
-        }
-
-        @Override
-        public void startPhotoActivity(Intent intent, int requestCode, Uri photoUri) {
-            if (getActivity() == null) {
-                return;
-            }
-            mRawContactIdRequestingPhoto = mEditor.getRawContactId();
-            mCurrentPhotoHandler = this;
-            mStatus = Status.SUB_ACTIVITY;
-            mCurrentPhotoUri = photoUri;
-            ContactEditorFragment.this.startActivityForResult(intent, requestCode);
-        }
-
-        private final class PhotoEditorListener extends PhotoSelectionHandler.PhotoActionListener
-                implements EditorListener {
-
-            @Override
-            public void onRequest(int request) {
-                if (!hasValidState()) return;
-
-                if (request == EditorListener.REQUEST_PICK_PHOTO) {
-                    onClick(mEditor.getPhotoEditor());
-                }
-                if (request == EditorListener.REQUEST_PICK_PRIMARY_PHOTO) {
-                    useAsPrimaryChosen();
-                }
-            }
-
-            @Override
-            public void onDeleteRequested(Editor removedEditor) {
-                // The picture cannot be deleted, it can only be removed, which is handled by
-                // onRemovePictureChosen()
-            }
-
-            /**
-             * User has chosen to set the selected photo as the (super) primary photo
-             */
-            public void useAsPrimaryChosen() {
-                // Set the IsSuperPrimary for each editor
-                int count = mContent.getChildCount();
-                for (int i = 0; i < count; i++) {
-                    final View childView = mContent.getChildAt(i);
-                    if (childView instanceof BaseRawContactEditorView) {
-                        final BaseRawContactEditorView editor =
-                                (BaseRawContactEditorView) childView;
-                        final PhotoEditorView photoEditor = editor.getPhotoEditor();
-                        photoEditor.setSuperPrimary(editor == mEditor);
-                    }
-                }
-                bindEditors();
-            }
-
-            /**
-             * User has chosen to remove a picture
-             */
-            @Override
-            public void onRemovePictureChosen() {
-                mEditor.setPhotoEntry(null);
-
-                // Prevent bitmap from being restored if rotate the device.
-                // (only if we first chose a new photo before removing it)
-                mUpdatedPhotos.remove(String.valueOf(mRawContactId));
-                bindEditors();
-            }
-
-            @Override
-            public void onPhotoSelected(Uri uri) throws FileNotFoundException {
-                final Bitmap bitmap = ContactPhotoUtils.getBitmapFromUri(mContext, uri);
-                setPhoto(mRawContactId, bitmap, uri);
-                mCurrentPhotoHandler = null;
-                bindEditors();
-            }
-
-            @Override
-            public Uri getCurrentPhotoUri() {
-                return mCurrentPhotoUri;
-            }
-
-            @Override
-            public void onPhotoSelectionDismissed() {
-                // Nothing to do.
-            }
-        }
-    }
-}
diff --git a/src/com/android/contacts/editor/ContactEditorUtils.java b/src/com/android/contacts/editor/ContactEditorUtils.java
index 3f1a8cb..fc1a887 100644
--- a/src/com/android/contacts/editor/ContactEditorUtils.java
+++ b/src/com/android/contacts/editor/ContactEditorUtils.java
@@ -19,8 +19,11 @@
 import android.accounts.Account;
 import android.accounts.AccountManager;
 import android.app.Activity;
+import android.content.ContentUris;
 import android.content.Context;
 import android.content.Intent;
+import android.net.Uri;
+import android.provider.ContactsContract;
 import android.text.TextUtils;
 
 import com.android.contacts.common.model.AccountTypeManager;
@@ -57,6 +60,30 @@
         return new ContactEditorUtils(context.getApplicationContext());
     }
 
+    /**
+     * Returns a legacy version of the given contactLookupUri if a legacy Uri was originally
+     * passed to the contact editor.
+     *
+     * @param contactLookupUri The Uri to possibly convert to legacy format.
+     * @param requestLookupUri The lookup Uri originally passed to the contact editor
+     *                         (via Intent data), may be null.
+     */
+    static Uri maybeConvertToLegacyLookupUri(Context context, Uri contactLookupUri,
+            Uri requestLookupUri) {
+        final String legacyAuthority = "contacts";
+        final String requestAuthority = requestLookupUri == null
+                ? null : requestLookupUri.getAuthority();
+        if (legacyAuthority.equals(requestAuthority)) {
+            // Build a legacy Uri if that is what was requested by caller
+            final long contactId = ContentUris.parseId(ContactsContract.Contacts.lookupContact(
+                    context.getContentResolver(), contactLookupUri));
+            final Uri legacyContentUri = Uri.parse("content://contacts/people");
+            return ContentUris.withAppendedId(legacyContentUri, contactId);
+        }
+        // Otherwise pass back a lookup-style Uri
+        return contactLookupUri;
+    }
+
     void cleanupForTest() {
         mContactsPrefs.clearDefaultAccount();
     }
diff --git a/src/com/android/contacts/editor/EditorIntents.java b/src/com/android/contacts/editor/EditorIntents.java
index 14476c8..af6ef77 100644
--- a/src/com/android/contacts/editor/EditorIntents.java
+++ b/src/com/android/contacts/editor/EditorIntents.java
@@ -24,8 +24,6 @@
 import android.text.TextUtils;
 
 import com.android.contacts.activities.CompactContactEditorActivity;
-import com.android.contacts.activities.ContactEditorActivity;
-import com.android.contacts.activities.ContactEditorBaseActivity;
 import com.android.contacts.common.model.RawContactDeltaList;
 import com.android.contacts.common.util.MaterialColorMapUtils.MaterialPalette;
 
@@ -70,7 +68,8 @@
             /* Bundle updatedPhotos, */ boolean isNewLocalProfile) {
         final Intent intent = new Intent(Intent.ACTION_INSERT, Contacts.CONTENT_URI,
                 context, CompactContactEditorActivity.class);
-        intent.putExtra(ContactEditorFragment.INTENT_EXTRA_NEW_LOCAL_PROFILE, isNewLocalProfile);
+        intent.putExtra(
+                CompactContactEditorFragment.INTENT_EXTRA_NEW_LOCAL_PROFILE, isNewLocalProfile);
         if (rawContactDeltaList != null || displayName != null || phoneticName != null) {
             putRawContactDeltaValues(intent, rawContactDeltaList, displayName, phoneticName);
         }
@@ -78,16 +77,16 @@
     }
 
     /**
-     * Returns an Intent to edit a different contact (in the fully expaned editor) with whatever
+     * Returns an Intent to edit a different contact in the compact editor with whatever
      * values were already entered on the currently displayed contact editor.
      */
     public static Intent createEditOtherContactIntent(Context context, Uri contactLookupUri,
             ArrayList<ContentValues> contentValues) {
         final Intent intent = new Intent(Intent.ACTION_EDIT, contactLookupUri, context,
-                ContactEditorActivity.class);
+                CompactContactEditorActivity.class);
         intent.setFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
                 | Intent.FLAG_ACTIVITY_FORWARD_RESULT);
-        intent.putExtra(ContactEditorFragment.INTENT_EXTRA_ADD_TO_DEFAULT_DIRECTORY, "");
+        intent.putExtra(CompactContactEditorFragment.INTENT_EXTRA_ADD_TO_DEFAULT_DIRECTORY, "");
 
         // Pass on all the data that has been entered so far
         if (contentValues != null && contentValues.size() != 0) {
@@ -97,67 +96,34 @@
     }
 
     /**
-     * Returns an Intent to start the fully expanded {@link ContactEditorActivity} for an
-     * existing contact.
-     */
-    public static Intent createEditContactIntent(Context context, Uri contactLookupUri,
-            MaterialPalette materialPalette, long photoId) {
-        final Intent intent = new Intent(ContactEditorBaseActivity.ACTION_EDIT, contactLookupUri,
-                context, ContactEditorActivity.class);
-        addContactIntentFlags(intent);
-        putMaterialPalette(intent, materialPalette);
-        putPhotoId(intent, photoId);
-        return intent;
-    }
-
-    /**
-     * Returns an Intent to start the fully expanded {@link ContactEditorActivity} for a
-     * new contact.
-     */
-    public static Intent createInsertContactIntent(Context context,
-            RawContactDeltaList rawContactDeltaList, String displayName, String phoneticName,
-            boolean isNewLocalProfile) {
-        final Intent intent = new Intent(ContactEditorBaseActivity.ACTION_INSERT,
-                Contacts.CONTENT_URI, context, ContactEditorActivity.class);
-        intent.putExtra(ContactEditorFragment.INTENT_EXTRA_NEW_LOCAL_PROFILE, isNewLocalProfile);
-        addContactIntentFlags(intent);
-        putRawContactDeltaValues(intent, rawContactDeltaList, displayName, phoneticName);
-        return intent;
-    }
-
-    /**
-     * Returns an Intent to start the full editor for the given raw contact. The full editor will
-     * only display this one raw contact.
+     * Returns an Intent to start the compact editor for the given raw contact.
      */
     public static Intent createEditContactIntentForRawContact(Context context,
-            Uri rawContactUri, long rawContactId, boolean isReadOnly) {
-        final Intent intent = new Intent(ContactEditorBaseActivity.ACTION_EDIT, rawContactUri,
-                context, ContactEditorActivity.class);
-        intent.putExtra(ContactEditorFragment.INTENT_EXTRA_RAW_CONTACT_ID_TO_DISPLAY_ALONE,
+            Uri contactLookupUri, long rawContactId, boolean isReadOnly) {
+        final Intent intent = new Intent(Intent.ACTION_EDIT, contactLookupUri, context,
+                CompactContactEditorActivity.class);
+        intent.putExtra(CompactContactEditorFragment.INTENT_EXTRA_RAW_CONTACT_ID_TO_DISPLAY_ALONE,
                 rawContactId);
         intent.putExtra(
-                ContactEditorBaseFragment.INTENT_EXTRA_RAW_CONTACT_DISPLAY_ALONE_IS_READ_ONLY,
+                CompactContactEditorFragment.INTENT_EXTRA_RAW_CONTACT_DISPLAY_ALONE_IS_READ_ONLY,
                 isReadOnly);
         return intent;
     }
 
-    private static void addContactIntentFlags(Intent intent) {
-        intent.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
-                | Intent.FLAG_ACTIVITY_FORWARD_RESULT);
-    }
-
     private static void putMaterialPalette(Intent intent, MaterialPalette materialPalette) {
         if (materialPalette != null) {
-            intent.putExtra(ContactEditorBaseFragment.INTENT_EXTRA_MATERIAL_PALETTE_PRIMARY_COLOR,
+            intent.putExtra(
+                    CompactContactEditorFragment.INTENT_EXTRA_MATERIAL_PALETTE_PRIMARY_COLOR,
                     materialPalette.mPrimaryColor);
-            intent.putExtra(ContactEditorBaseFragment.INTENT_EXTRA_MATERIAL_PALETTE_SECONDARY_COLOR,
+            intent.putExtra(
+                    CompactContactEditorFragment.INTENT_EXTRA_MATERIAL_PALETTE_SECONDARY_COLOR,
                     materialPalette.mSecondaryColor);
         }
     }
 
     private static void putPhotoId(Intent intent, long photoId) {
         if (photoId >= 0) {
-            intent.putExtra(ContactEditorBaseFragment.INTENT_EXTRA_PHOTO_ID, photoId);
+            intent.putExtra(CompactContactEditorFragment.INTENT_EXTRA_PHOTO_ID, photoId);
         }
     }
 
diff --git a/src/com/android/contacts/editor/EditorUiUtils.java b/src/com/android/contacts/editor/EditorUiUtils.java
index 89d830b..83c59df 100644
--- a/src/com/android/contacts/editor/EditorUiUtils.java
+++ b/src/com/android/contacts/editor/EditorUiUtils.java
@@ -270,4 +270,5 @@
                 bitmap, size, size, /* filter =*/ false);
         return ContactPhotoUtils.compressBitmap(bitmapScaled);
     }
+
 }
diff --git a/src/com/android/contacts/editor/JoinContactConfirmationDialogFragment.java b/src/com/android/contacts/editor/JoinContactConfirmationDialogFragment.java
index 55a066e..dab7085 100644
--- a/src/com/android/contacts/editor/JoinContactConfirmationDialogFragment.java
+++ b/src/com/android/contacts/editor/JoinContactConfirmationDialogFragment.java
@@ -48,7 +48,7 @@
     /**
      * @param joinContactId The raw contact ID of the contact to join to after confirmation.
      */
-    public static void show(ContactEditorBaseFragment fragment, long joinContactId) {
+    public static void show(CompactContactEditorFragment fragment, long joinContactId) {
         final Bundle args = new Bundle();
         args.putLong(ARG_JOIN_CONTACT_ID, joinContactId);
 
diff --git a/src/com/android/contacts/editor/JoinSuggestedContactDialogFragment.java b/src/com/android/contacts/editor/JoinSuggestedContactDialogFragment.java
index 4d35332..a057a5b 100644
--- a/src/com/android/contacts/editor/JoinSuggestedContactDialogFragment.java
+++ b/src/com/android/contacts/editor/JoinSuggestedContactDialogFragment.java
@@ -28,7 +28,7 @@
 
     private static final String ARG_RAW_CONTACT_IDS = "rawContactIds";
 
-    public static void show(ContactEditorBaseFragment fragment, long[] rawContactIds) {
+    public static void show(CompactContactEditorFragment fragment, long[] rawContactIds) {
         final Bundle args = new Bundle();
         args.putLongArray(ARG_RAW_CONTACT_IDS, rawContactIds);
 
@@ -47,8 +47,8 @@
                         new DialogInterface.OnClickListener() {
                             @Override
                             public void onClick(DialogInterface dialog, int whichButton) {
-                                ContactEditorBaseFragment targetFragment =
-                                        (ContactEditorBaseFragment) getTargetFragment();
+                                CompactContactEditorFragment targetFragment =
+                                        (CompactContactEditorFragment) getTargetFragment();
                                 long rawContactIds[] =
                                         getArguments().getLongArray(ARG_RAW_CONTACT_IDS);
                                 targetFragment.doJoinSuggestedContact(rawContactIds);
@@ -58,4 +58,4 @@
                 .setNegativeButton(android.R.string.no, null)
                 .create();
     }
-}
\ No newline at end of file
+}
diff --git a/src/com/android/contacts/editor/KindSectionData.java b/src/com/android/contacts/editor/KindSectionData.java
index 7e2899f..03aa667 100644
--- a/src/com/android/contacts/editor/KindSectionData.java
+++ b/src/com/android/contacts/editor/KindSectionData.java
@@ -16,14 +16,14 @@
 
 package com.android.contacts.editor;
 
+import android.text.TextUtils;
+
 import com.android.contacts.common.model.RawContactDelta;
 import com.android.contacts.common.model.ValuesDelta;
 import com.android.contacts.common.model.account.AccountType;
 import com.android.contacts.common.model.account.AccountType.EditField;
 import com.android.contacts.common.model.dataitem.DataKind;
 
-import android.text.TextUtils;
-
 import java.util.ArrayList;
 import java.util.List;
 
@@ -118,4 +118,8 @@
     public RawContactDelta getRawContactDelta() {
         return mRawContactDelta;
     }
+
+    public String getMimeType() {
+        return mDataKind.mimeType;
+    }
 }
diff --git a/src/com/android/contacts/editor/KindSectionView.java b/src/com/android/contacts/editor/KindSectionView.java
deleted file mode 100644
index dddc6aa..0000000
--- a/src/com/android/contacts/editor/KindSectionView.java
+++ /dev/null
@@ -1,274 +0,0 @@
-/*
- * Copyright (C) 2009 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.contacts.editor;
-
-import android.content.Context;
-import android.provider.ContactsContract.Data;
-import android.text.TextUtils;
-import android.util.AttributeSet;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.ImageView;
-import android.widget.LinearLayout;
-
-import com.android.contacts.R;
-import com.android.contacts.common.model.RawContactDelta;
-import com.android.contacts.common.model.RawContactModifier;
-import com.android.contacts.common.model.ValuesDelta;
-import com.android.contacts.common.model.dataitem.DataKind;
-import com.android.contacts.editor.Editor.EditorListener;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Custom view for an entire section of data as segmented by
- * {@link DataKind} around a {@link Data#MIMETYPE}. This view shows a
- * section header and a trigger for adding new {@link Data} rows.
- */
-public class KindSectionView extends LinearLayout implements EditorListener {
-
-    public interface Listener {
-
-        /**
-         * Invoked when any editor that is displayed in this section view is deleted by the user.
-         */
-        public void onDeleteRequested(Editor editor);
-    }
-
-    private ViewGroup mEditors;
-    private ImageView mIcon;
-
-    private DataKind mKind;
-    private RawContactDelta mState;
-    private boolean mReadOnly;
-
-    private ViewIdGenerator mViewIdGenerator;
-
-    private LayoutInflater mInflater;
-
-    private Listener mListener;
-
-    public KindSectionView(Context context) {
-        this(context, null);
-    }
-
-    public KindSectionView(Context context, AttributeSet attrs) {
-        super(context, attrs);
-    }
-
-    @Override
-    public void setEnabled(boolean enabled) {
-        super.setEnabled(enabled);
-        if (mEditors != null) {
-            int childCount = mEditors.getChildCount();
-            for (int i = 0; i < childCount; i++) {
-                mEditors.getChildAt(i).setEnabled(enabled);
-            }
-        }
-
-        updateEmptyEditors(/* shouldAnimate = */ true);
-    }
-
-    public boolean isReadOnly() {
-        return mReadOnly;
-    }
-
-    /** {@inheritDoc} */
-    @Override
-    protected void onFinishInflate() {
-        setDrawingCacheEnabled(true);
-        setAlwaysDrawnWithCacheEnabled(true);
-
-        mInflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
-
-        mEditors = (ViewGroup) findViewById(R.id.kind_editors);
-        mIcon = (ImageView) findViewById(R.id.kind_icon);
-    }
-
-    @Override
-    public void onDeleteRequested(Editor editor) {
-        if (getEditorCount() == 1) {
-            // If there is only 1 editor in the section, then don't allow the user to delete it.
-            // Just clear the fields in the editor.
-            editor.clearAllFields();
-        } else {
-            // If there is a listener, let it decide whether to delete the Editor or the entire
-            // KindSectionView so that there is no jank from both animations happening in succession.
-            if (mListener != null) {
-                editor.markDeleted();
-                mListener.onDeleteRequested(editor);
-            } else {
-                editor.deleteEditor();
-            }
-        }
-    }
-
-    @Override
-    public void onRequest(int request) {
-        // If a field has become empty or non-empty, then check if another row
-        // can be added dynamically.
-        if (request == FIELD_TURNED_EMPTY || request == FIELD_TURNED_NON_EMPTY) {
-            updateEmptyEditors(/* shouldAnimate = */ true);
-        }
-    }
-
-    public void setListener(Listener listener) {
-        mListener = listener;
-    }
-
-    public void setState(DataKind kind, RawContactDelta state, boolean readOnly,
-            ViewIdGenerator vig) {
-        mKind = kind;
-        mState = state;
-        mReadOnly = readOnly;
-        mViewIdGenerator = vig;
-
-        setId(mViewIdGenerator.getId(state, kind, null, ViewIdGenerator.NO_VIEW_INDEX));
-
-        // TODO: handle resources from remote packages
-        final String titleString = (kind.titleRes == -1 || kind.titleRes == 0)
-                ? ""
-                : getResources().getString(kind.titleRes);
-        mIcon.setContentDescription(titleString);
-
-        mIcon.setImageDrawable(EditorUiUtils.getMimeTypeDrawable(getContext(), kind.mimeType));
-        if (mIcon.getDrawable() == null) {
-            mIcon.setContentDescription(null);
-        }
-
-        rebuildFromState();
-        updateEmptyEditors(/* shouldAnimate = */ false);
-    }
-
-    /**
-     * Build editors for all current {@link #mState} rows.
-     */
-    private void rebuildFromState() {
-        // Remove any existing editors
-        mEditors.removeAllViews();
-
-        // Check if we are displaying anything here
-        boolean hasEntries = mState.hasMimeEntries(mKind.mimeType);
-
-        if (hasEntries) {
-            for (ValuesDelta entry : mState.getMimeEntries(mKind.mimeType)) {
-                // Skip entries that aren't visible
-                if (!entry.isVisible()) continue;
-
-                createEditorView(entry);
-            }
-        }
-    }
-
-
-    /**
-     * Creates an EditorView for the given entry. This function must be used while constructing
-     * the views corresponding to the the object-model. The resulting EditorView is also added
-     * to the end of mEditors
-     */
-    private View createEditorView(ValuesDelta entry) {
-        final View view;
-        final int layoutResId = EditorUiUtils.getLayoutResourceId(mKind.mimeType);
-        try {
-            view = mInflater.inflate(layoutResId, mEditors, false);
-        } catch (Exception e) {
-            throw new RuntimeException(
-                    "Cannot allocate editor with layout resource ID " +
-                    layoutResId + " for MIME type " + mKind.mimeType +
-                    " with error " + e.toString());
-        }
-        view.setEnabled(isEnabled());
-        if (view instanceof Editor) {
-            Editor editor = (Editor) view;
-            editor.setDeletable(true);
-            editor.setValues(mKind, entry, mState, mReadOnly, mViewIdGenerator);
-            editor.setEditorListener(this);
-        }
-        mEditors.addView(view);
-        return view;
-    }
-
-    /**
-     * Updates the editors being displayed to the user removing extra empty
-     * {@link Editor}s, so there is only max 1 empty {@link Editor} view at a time.
-     */
-    public void updateEmptyEditors(boolean shouldAnimate) {
-
-        final List<View> emptyEditors = getEmptyEditors();
-
-        // If there is more than 1 empty editor, then remove it from the list of editors.
-        if (emptyEditors.size() > 1) {
-            for (final View emptyEditorView : emptyEditors) {
-                // If no child {@link View}s are being focused on within this {@link View}, then
-                // remove this empty editor. We can assume that at least one empty editor has focus.
-                // The only way to get two empty editors is by deleting characters from a non-empty
-                // editor, in which case this editor has focus.
-                if (emptyEditorView.findFocus() == null) {
-                    final Editor editor = (Editor) emptyEditorView;
-                    if (shouldAnimate) {
-                        editor.deleteEditor();
-                    } else {
-                        mEditors.removeView(emptyEditorView);
-                    }
-                }
-            }
-        } else if (mKind == null) {
-            // There is nothing we can do.
-            return;
-        } else if (isReadOnly()) {
-            // We don't show empty editors for read only data kinds.
-            return;
-        } else if (!RawContactModifier.canInsert(mState, mKind)) {
-            // We have already reached the maximum number of editors. Lets not add any more.
-            return;
-        } else if (emptyEditors.size() == 1) {
-            // We have already reached the maximum number of empty editors. Lets not add any more.
-            return;
-        } else {
-            final ValuesDelta values = RawContactModifier.insertChild(mState, mKind);
-            final View newField = createEditorView(values);
-            if (shouldAnimate) {
-                newField.setVisibility(View.GONE);
-                EditorAnimator.getInstance().showFieldFooter(newField);
-            }
-        }
-    }
-
-    /**
-     * Returns a list of empty editor views in this section.
-     */
-    private List<View> getEmptyEditors() {
-        List<View> emptyEditorViews = new ArrayList<View>();
-        for (int i = 0; i < mEditors.getChildCount(); i++) {
-            View view = mEditors.getChildAt(i);
-            if (((Editor) view).isEmpty()) {
-                emptyEditorViews.add(view);
-            }
-        }
-        return emptyEditorViews;
-    }
-
-    public int getEditorCount() {
-        return mEditors.getChildCount();
-    }
-
-    public DataKind getKind() {
-        return mKind;
-    }
-}
diff --git a/src/com/android/contacts/editor/LabeledEditorView.java b/src/com/android/contacts/editor/LabeledEditorView.java
index 519abff..8b29b7e 100644
--- a/src/com/android/contacts/editor/LabeledEditorView.java
+++ b/src/com/android/contacts/editor/LabeledEditorView.java
@@ -303,13 +303,13 @@
                             mEntry.getAsString(mType.customColumn),
                             getContext().getString(mKind.titleRes)));
         } else {
-            if (mType != null) {
+            if (mType != null && mType.labelRes > 0 && mKind.titleRes > 0) {
                 mLabel.setSelection(mEditTypeAdapter.getPosition(mType));
                 mDeleteContainer.setContentDescription(
                         getContext().getString(R.string.editor_delete_view_description,
                                 getContext().getString(mType.labelRes),
                                 getContext().getString(mKind.titleRes)));
-            } else {
+            } else if (mKind.titleRes > 0) {
                 mDeleteContainer.setContentDescription(
                         getContext().getString(R.string.editor_delete_view_description_short,
                                 getContext().getString(mKind.titleRes)));
@@ -380,9 +380,7 @@
     }
 
     protected void rebuildValues() {
-        if (mKind != null) {
-            setValues(mKind, mEntry, mState, mReadOnly, mViewIdGenerator);
-        }
+        setValues(mKind, mEntry, mState, mReadOnly, mViewIdGenerator);
     }
 
     /**
@@ -411,8 +409,9 @@
         final boolean hasTypes = RawContactModifier.hasEditTypes(kind);
         setupLabelButton(hasTypes);
         mLabel.setEnabled(!readOnly && isEnabled());
-        mLabel.setContentDescription(getContext().getResources().getString(mKind.titleRes));
-
+        if (mKind.titleRes > 0) {
+            mLabel.setContentDescription(getContext().getResources().getString(mKind.titleRes));
+        }
         mType = RawContactModifier.getCurrentType(entry, kind);
         rebuildLabel();
     }
diff --git a/src/com/android/contacts/editor/PhotoEditorView.java b/src/com/android/contacts/editor/PhotoEditorView.java
deleted file mode 100644
index f69c935..0000000
--- a/src/com/android/contacts/editor/PhotoEditorView.java
+++ /dev/null
@@ -1,275 +0,0 @@
-/*
- * Copyright (C) 2009 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.contacts.editor;
-
-import android.content.Context;
-import android.graphics.Bitmap;
-import android.graphics.BitmapFactory;
-import android.net.Uri;
-import android.provider.ContactsContract.CommonDataKinds.Photo;
-import android.provider.ContactsContract.DisplayPhoto;
-import android.util.AttributeSet;
-import android.view.View;
-import android.widget.Button;
-import android.widget.ImageView;
-import android.widget.LinearLayout;
-import android.widget.RadioButton;
-
-import com.android.contacts.R;
-import com.android.contacts.common.ContactPhotoManager.DefaultImageProvider;
-import com.android.contacts.common.ContactPhotoManager.DefaultImageRequest;
-import com.android.contacts.common.model.RawContactDelta;
-import com.android.contacts.common.ContactPhotoManager;
-import com.android.contacts.common.ContactsUtils;
-import com.android.contacts.common.model.ValuesDelta;
-import com.android.contacts.common.model.dataitem.DataKind;
-import com.android.contacts.util.ContactPhotoUtils;
-
-/**
- * Simple editor for {@link Photo}.
- */
-public class PhotoEditorView extends LinearLayout implements Editor {
-
-    private ImageView mPhotoImageView;
-    private Button mChangeButton;
-    private RadioButton mPrimaryCheckBox;
-
-    private ValuesDelta mEntry;
-    private EditorListener mListener;
-    private ContactPhotoManager mContactPhotoManager;
-
-    private boolean mHasSetPhoto = false;
-
-    public PhotoEditorView(Context context) {
-        super(context);
-    }
-
-    public PhotoEditorView(Context context, AttributeSet attrs) {
-        super(context, attrs);
-    }
-
-    @Override
-    public void setEnabled(boolean enabled) {
-        super.setEnabled(enabled);
-    }
-
-    @Override
-    public void editNewlyAddedField() {
-        // Never called, since the user never adds a new photo-editor;
-        // you can only change the picture in an existing editor.
-    }
-
-    /** {@inheritDoc} */
-    @Override
-    protected void onFinishInflate() {
-        super.onFinishInflate();
-        mContactPhotoManager = ContactPhotoManager.getInstance(getContext());
-        mPhotoImageView = (ImageView) findViewById(R.id.photo);
-        mPrimaryCheckBox = (RadioButton) findViewById(R.id.primary_checkbox);
-        mChangeButton = (Button) findViewById(R.id.change_button);
-        mPrimaryCheckBox = (RadioButton) findViewById(R.id.primary_checkbox);
-        if (mChangeButton != null) {
-            mChangeButton.setOnClickListener(new OnClickListener() {
-                @Override
-                public void onClick(View v) {
-                    if (mListener != null) {
-                        mListener.onRequest(EditorListener.REQUEST_PICK_PHOTO);
-                    }
-                }
-            });
-        }
-        // Turn off own state management. We do this ourselves on rotation.
-        mPrimaryCheckBox.setSaveEnabled(false);
-        mPrimaryCheckBox.setOnClickListener(new OnClickListener() {
-            @Override
-            public void onClick(View v) {
-                if (mListener != null) {
-                    mListener.onRequest(EditorListener.REQUEST_PICK_PRIMARY_PHOTO);
-                }
-            }
-        });
-    }
-
-    /** {@inheritDoc} */
-    @Override
-    public void onFieldChanged(String column, String value) {
-        throw new UnsupportedOperationException("Photos don't support direct field changes");
-    }
-
-    /** {@inheritDoc} */
-    @Override
-    public void setValues(DataKind kind, ValuesDelta values, RawContactDelta state, boolean readOnly,
-            ViewIdGenerator vig) {
-        mEntry = values;
-
-        setId(vig.getId(state, kind, values, 0));
-
-        mPrimaryCheckBox.setChecked(values != null && values.isSuperPrimary());
-
-        if (values != null) {
-            // Try decoding photo if actual entry
-            final byte[] photoBytes = values.getAsByteArray(Photo.PHOTO);
-            if (photoBytes != null) {
-                final Bitmap photo = BitmapFactory.decodeByteArray(photoBytes, 0,
-                        photoBytes.length);
-
-                mPhotoImageView.setImageBitmap(photo);
-                mHasSetPhoto = true;
-                mEntry.setFromTemplate(false);
-
-                if (values.getAfter() == null || values.getAfter().get(Photo.PHOTO) == null) {
-                    // If the user hasn't updated the PHOTO value, then PHOTO_FILE_ID may contain
-                    // a reference to a larger version of PHOTO that we can bind to the UI.
-                    // Otherwise, we need to wait for a call to #setFullSizedPhoto() to update
-                    // our full sized image.
-                    final Integer photoFileId = values.getAsInteger(Photo.PHOTO_FILE_ID);
-                    if (photoFileId != null) {
-                        final Uri photoUri = DisplayPhoto.CONTENT_URI.buildUpon()
-                                .appendPath(photoFileId.toString()).build();
-                        setFullSizedPhoto(photoUri);
-                    }
-                }
-
-            } else {
-                resetDefault();
-            }
-        } else {
-            resetDefault();
-        }
-    }
-
-    /**
-     * Whether to display a "Primary photo" RadioButton. This is only needed if there are multiple
-     * candidate photos.
-     */
-    public void setShowPrimary(boolean showPrimaryCheckBox) {
-        mPrimaryCheckBox.setVisibility(showPrimaryCheckBox ? View.VISIBLE : View.GONE);
-    }
-
-    /**
-     * Return true if a valid {@link Photo} has been set.
-     */
-    public boolean hasSetPhoto() {
-        return mHasSetPhoto;
-    }
-
-    /**
-     * Assign the given {@link Bitmap} as the new value for the sake of building
-     * {@link ValuesDelta}. We may as well bind a thumbnail to the UI while we are at it.
-     */
-    public void setPhotoEntry(Bitmap photo) {
-        if (photo == null) {
-            // Clear any existing photo and return
-            mEntry.put(Photo.PHOTO, (byte[])null);
-            resetDefault();
-            return;
-        }
-
-        final int size = ContactsUtils.getThumbnailSize(getContext());
-        final Bitmap scaled = Bitmap.createScaledBitmap(photo, size, size, false);
-
-        mPhotoImageView.setImageBitmap(scaled);
-        mHasSetPhoto = true;
-        mEntry.setFromTemplate(false);
-
-        // When the user chooses a new photo mark it as super primary
-        mEntry.setSuperPrimary(true);
-
-        // Even though high-res photos cannot be saved by passing them via
-        // an EntityDeltaList (since they cause the Bundle size limit to be
-        // exceeded), we still pass a low-res thumbnail. This simplifies
-        // code all over the place, because we don't have to test whether
-        // there is a change in EITHER the delta-list OR a changed photo...
-        // this way, there is always a change in the delta-list.
-        final byte[] compressed = ContactPhotoUtils.compressBitmap(scaled);
-        if (compressed != null) {
-            mEntry.setPhoto(compressed);
-        }
-    }
-
-    /**
-     * Bind the {@param photoUri}'s photo to editor's UI. This doesn't affect {@link ValuesDelta}.
-     */
-    public void setFullSizedPhoto(Uri photoUri) {
-        if (photoUri != null) {
-            final DefaultImageProvider fallbackToPreviousImage = new DefaultImageProvider() {
-                @Override
-                public void applyDefaultImage(ImageView view, int extent, boolean darkTheme,
-                        DefaultImageRequest defaultImageRequest) {
-                    // Before we finish setting the full sized image, don't change the current
-                    // image that is set in any way.
-                }
-            };
-            mContactPhotoManager.loadPhoto(mPhotoImageView, photoUri,
-                    mPhotoImageView.getWidth(), /* darkTheme = */ false, /* isCircular = */ false,
-                    /* defaultImageRequest = */ null, fallbackToPreviousImage);
-        }
-    }
-
-    /**
-     * Set the super primary bit on the photo.
-     */
-    public void setSuperPrimary(boolean superPrimary) {
-        mEntry.put(Photo.IS_SUPER_PRIMARY, superPrimary ? 1 : 0);
-    }
-
-    protected void resetDefault() {
-        // Invalid photo, show default "add photo" place-holder
-        mPhotoImageView.setImageDrawable(
-                ContactPhotoManager.getDefaultAvatarDrawableForContact(getResources(), false, null));
-        mHasSetPhoto = false;
-        mEntry.setFromTemplate(true);
-    }
-
-    /** {@inheritDoc} */
-    @Override
-    public void setEditorListener(EditorListener listener) {
-        mListener = listener;
-    }
-
-    @Override
-    public void setDeletable(boolean deletable) {
-        // Photo is not deletable
-    }
-
-    @Override
-    public boolean isEmpty() {
-        return !mHasSetPhoto;
-    }
-
-    @Override
-    public void markDeleted() {
-        // Photo is not deletable
-    }
-
-    @Override
-    public void deleteEditor() {
-        // Photo is not deletable
-    }
-
-    @Override
-    public void clearAllFields() {
-        resetDefault();
-    }
-
-    /**
-     * The change drop down menu should be anchored to this view.
-     */
-    public View getChangeAnchorView() {
-        return mChangeButton;
-    }
-}
diff --git a/src/com/android/contacts/editor/RawContactEditorView.java b/src/com/android/contacts/editor/RawContactEditorView.java
deleted file mode 100644
index 16d7c9c..0000000
--- a/src/com/android/contacts/editor/RawContactEditorView.java
+++ /dev/null
@@ -1,389 +0,0 @@
-/*
- * Copyright (C) 2009 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.contacts.editor;
-
-import android.content.Context;
-import android.database.Cursor;
-import android.os.Bundle;
-import android.os.Parcelable;
-import android.provider.ContactsContract.CommonDataKinds.GroupMembership;
-import android.provider.ContactsContract.CommonDataKinds.Nickname;
-import android.provider.ContactsContract.CommonDataKinds.Photo;
-import android.provider.ContactsContract.CommonDataKinds.StructuredName;
-import android.provider.ContactsContract.Contacts;
-import android.provider.ContactsContract.Data;
-import android.util.AttributeSet;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.ImageView;
-import android.widget.TextView;
-
-import com.android.contacts.common.model.account.AccountDisplayInfo;
-import com.android.contacts.common.model.account.AccountDisplayInfoFactory;
-import com.android.contacts.GroupMetaDataLoader;
-import com.android.contacts.R;
-import com.android.contacts.common.model.account.AccountType;
-import com.android.contacts.common.model.account.AccountType.EditType;
-import com.android.contacts.common.model.dataitem.DataKind;
-import com.android.contacts.common.model.RawContactDelta;
-import com.android.contacts.common.model.ValuesDelta;
-import com.android.contacts.common.model.RawContactModifier;
-
-import com.google.common.base.Objects;
-
-import java.util.ArrayList;
-
-/**
- * Custom view that provides all the editor interaction for a specific
- * {@link Contacts} represented through an {@link RawContactDelta}. Callers can
- * reuse this view and quickly rebuild its contents through
- * {@link #setState(RawContactDelta, AccountType, ViewIdGenerator)}.
- * <p>
- * Internal updates are performed against {@link ValuesDelta} so that the
- * source {@link RawContact} can be swapped out. Any state-based changes, such as
- * adding {@link Data} rows or changing {@link EditType}, are performed through
- * {@link RawContactModifier} to ensure that {@link AccountType} are enforced.
- */
-public class RawContactEditorView extends BaseRawContactEditorView {
-    private static final String KEY_SUPER_INSTANCE_STATE = "superInstanceState";
-
-    private LayoutInflater mInflater;
-
-    private StructuredNameEditorView mName;
-    private PhoneticNameEditorView mPhoneticName;
-    private TextFieldsEditorView mNickName;
-
-    private GroupMembershipView mGroupMembershipView;
-
-    private ViewGroup mFields;
-
-    private TextView mAccountHeaderTypeTextView;
-    private TextView mAccountHeaderNameTextView;
-    private ImageView mAccountIconImageView;
-
-    private long mRawContactId = -1;
-    private boolean mAutoAddToDefaultGroup = true;
-    private Cursor mGroupMetaData;
-    private DataKind mGroupMembershipKind;
-    private RawContactDelta mState;
-
-    private AccountDisplayInfoFactory mAccountDisplayInfoFactory;
-
-    public RawContactEditorView(Context context) {
-        super(context);
-    }
-
-    public RawContactEditorView(Context context, AttributeSet attrs) {
-        super(context, attrs);
-    }
-
-    @Override
-    public void setEnabled(boolean enabled) {
-        super.setEnabled(enabled);
-
-        View view = getPhotoEditor();
-        if (view != null) {
-            view.setEnabled(enabled);
-        }
-
-        if (mName != null) {
-            mName.setEnabled(enabled);
-        }
-
-        if (mPhoneticName != null) {
-            mPhoneticName.setEnabled(enabled);
-        }
-
-        if (mFields != null) {
-            int count = mFields.getChildCount();
-            for (int i = 0; i < count; i++) {
-                mFields.getChildAt(i).setEnabled(enabled);
-            }
-        }
-
-        if (mGroupMembershipView != null) {
-            mGroupMembershipView.setEnabled(enabled);
-        }
-    }
-
-    @Override
-    protected void onFinishInflate() {
-        super.onFinishInflate();
-
-        mInflater = (LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
-
-        mName = (StructuredNameEditorView)findViewById(R.id.edit_name);
-        mName.setDeletable(false);
-
-        mPhoneticName = (PhoneticNameEditorView)findViewById(R.id.edit_phonetic_name);
-        mPhoneticName.setDeletable(false);
-
-        mNickName = (TextFieldsEditorView)findViewById(R.id.edit_nick_name);
-
-        mFields = (ViewGroup)findViewById(R.id.sect_fields);
-
-        mAccountHeaderTypeTextView = (TextView) findViewById(R.id.account_type);
-        mAccountHeaderNameTextView = (TextView) findViewById(R.id.account_name);
-        mAccountIconImageView = (ImageView) findViewById(R.id.account_type_icon);
-
-        mAccountDisplayInfoFactory = AccountDisplayInfoFactory.forAllAccounts(getContext());
-    }
-
-    @Override
-    protected Parcelable onSaveInstanceState() {
-        Bundle bundle = new Bundle();
-        // super implementation of onSaveInstanceState returns null
-        bundle.putParcelable(KEY_SUPER_INSTANCE_STATE, super.onSaveInstanceState());
-        return bundle;
-    }
-
-    @Override
-    protected void onRestoreInstanceState(Parcelable state) {
-        if (state instanceof Bundle) {
-            Bundle bundle = (Bundle) state;
-            super.onRestoreInstanceState(bundle.getParcelable(KEY_SUPER_INSTANCE_STATE));
-            return;
-        }
-        super.onRestoreInstanceState(state);
-    }
-
-    /**
-     * Set the internal state for this view, given a current
-     * {@link RawContactDelta} state and the {@link AccountType} that
-     * apply to that state.
-     */
-    @Override
-    public void setState(RawContactDelta state, AccountType type, ViewIdGenerator vig,
-            boolean isProfile) {
-
-        mState = state;
-
-        // Remove any existing sections
-        mFields.removeAllViews();
-
-        // Bail if invalid state or account type
-        if (state == null || type == null) return;
-
-        setId(vig.getId(state, null, null, ViewIdGenerator.NO_VIEW_INDEX));
-
-        // Make sure we have a StructuredName
-        RawContactModifier.ensureKindExists(state, type, StructuredName.CONTENT_ITEM_TYPE);
-
-        mRawContactId = state.getRawContactId();
-
-        final AccountDisplayInfo account = mAccountDisplayInfoFactory
-                .getAccountDisplayInfoFor(state);
-
-        final String accountTypeLabel;
-        final String accountNameLabel;
-        if (isProfile) {
-            accountTypeLabel = EditorUiUtils.getAccountHeaderLabelForMyProfile(
-                    getContext(), account);
-            accountNameLabel = account.getNameLabel().toString();
-        } else {
-            accountTypeLabel = account.getTypeLabel().toString();
-            accountNameLabel = account.getNameLabel().toString();
-        }
-
-        if (!account.hasDistinctName()) {
-            // Hide this view so the other view will be centered vertically
-            mAccountHeaderNameTextView.setVisibility(View.GONE);
-        } else {
-            mAccountHeaderNameTextView.setVisibility(View.VISIBLE);
-            mAccountHeaderNameTextView.setText(accountNameLabel);
-        }
-        mAccountHeaderTypeTextView.setText(accountTypeLabel);
-        updateAccountHeaderContentDescription();
-
-        mAccountIconImageView.setImageDrawable(state.getRawContactAccountType(getContext())
-                .getDisplayIcon(getContext()));
-
-        // Show photo editor when supported
-        RawContactModifier.ensureKindExists(state, type, Photo.CONTENT_ITEM_TYPE);
-        setHasPhotoEditor((type.getKindForMimetype(Photo.CONTENT_ITEM_TYPE) != null));
-        getPhotoEditor().setEnabled(isEnabled());
-        mName.setEnabled(isEnabled());
-
-        mPhoneticName.setEnabled(isEnabled());
-
-        // Show and hide the appropriate views
-        mFields.setVisibility(View.VISIBLE);
-        mName.setVisibility(View.VISIBLE);
-        mPhoneticName.setVisibility(View.VISIBLE);
-
-        mGroupMembershipKind = type.getKindForMimetype(GroupMembership.CONTENT_ITEM_TYPE);
-        if (mGroupMembershipKind != null) {
-            mGroupMembershipView = (GroupMembershipView)mInflater.inflate(
-                    R.layout.item_group_membership, mFields, false);
-            mGroupMembershipView.setKind(mGroupMembershipKind);
-            mGroupMembershipView.setEnabled(isEnabled());
-        }
-
-        // Create editor sections for each possible data kind
-        for (DataKind kind : type.getSortedDataKinds()) {
-            // Skip kind of not editable
-            if (!kind.editable) continue;
-
-            final String mimeType = kind.mimeType;
-            if (StructuredName.CONTENT_ITEM_TYPE.equals(mimeType)) {
-                // Handle special case editor for structured name
-                final ValuesDelta primary = state.getPrimaryEntry(mimeType);
-                mName.setValues(
-                        type.getKindForMimetype(DataKind.PSEUDO_MIME_TYPE_DISPLAY_NAME),
-                        primary, state, false, vig);
-                final DataKind phoneticNameKind =
-                        type.getKindForMimetype(DataKind.PSEUDO_MIME_TYPE_PHONETIC_NAME);
-                if (phoneticNameKind != null) {
-                    mPhoneticName.setValues(phoneticNameKind, primary, state, false, vig);
-                } else {
-                    mPhoneticName.setVisibility(View.GONE);
-                }
-                // It is useful to use Nickname outside of a KindSectionView so that we can treat it
-                // as a part of StructuredName's fake KindSectionView, even though it uses a
-                // different CP2 mime-type. We do a bit of extra work below to make this possible.
-                final DataKind nickNameKind = type.getKindForMimetype(Nickname.CONTENT_ITEM_TYPE);
-                if (nickNameKind != null) {
-                    ValuesDelta primaryNickNameEntry = state.getPrimaryEntry(nickNameKind.mimeType);
-                    if (primaryNickNameEntry == null) {
-                        primaryNickNameEntry = RawContactModifier.insertChild(state, nickNameKind);
-                    }
-                    mNickName.setValues(nickNameKind, primaryNickNameEntry, state, false, vig);
-                    mNickName.setDeletable(false);
-                } else {
-                    mPhoneticName.setPadding(0, 0, 0, (int) getResources().getDimension(
-                            R.dimen.editor_padding_between_editor_views));
-                    mNickName.setVisibility(View.GONE);
-                }
-            } else if (Photo.CONTENT_ITEM_TYPE.equals(mimeType)) {
-                // Handle special case editor for photos
-                final ValuesDelta primary = state.getPrimaryEntry(mimeType);
-                getPhotoEditor().setValues(kind, primary, state, false, vig);
-            } else if (GroupMembership.CONTENT_ITEM_TYPE.equals(mimeType)) {
-                if (mGroupMembershipView != null) {
-                    mGroupMembershipView.setState(state);
-                    mFields.addView(mGroupMembershipView);
-                }
-            } else if (DataKind.PSEUDO_MIME_TYPE_DISPLAY_NAME.equals(mimeType)
-                    || DataKind.PSEUDO_MIME_TYPE_PHONETIC_NAME.equals(mimeType)
-                    || Nickname.CONTENT_ITEM_TYPE.equals(mimeType)) {
-                // Don't create fields for each of these mime-types. They are handled specially.
-                continue;
-            } else {
-                // Otherwise use generic section-based editors
-                if (kind.fieldList == null) continue;
-                final KindSectionView section = (KindSectionView)mInflater.inflate(
-                        R.layout.item_kind_section, mFields, false);
-                section.setEnabled(isEnabled());
-                section.setState(kind, state, /* readOnly =*/ false, vig);
-                mFields.addView(section);
-            }
-        }
-
-        addToDefaultGroupIfNeeded();
-    }
-
-    @Override
-    public void setGroupMetaData(Cursor groupMetaData) {
-        mGroupMetaData = groupMetaData;
-        addToDefaultGroupIfNeeded();
-        if (mGroupMembershipView != null) {
-            mGroupMembershipView.setGroupMetaData(groupMetaData);
-        }
-    }
-
-    public void setAutoAddToDefaultGroup(boolean flag) {
-        this.mAutoAddToDefaultGroup = flag;
-    }
-
-    /**
-     * If automatic addition to the default group was requested (see
-     * {@link #setAutoAddToDefaultGroup}, checks if the raw contact is in any
-     * group and if it is not adds it to the default group (in case of Google
-     * contacts that's "My Contacts").
-     */
-    private void addToDefaultGroupIfNeeded() {
-        if (!mAutoAddToDefaultGroup || mGroupMetaData == null || mGroupMetaData.isClosed()
-                || mState == null) {
-            return;
-        }
-
-        boolean hasGroupMembership = false;
-        ArrayList<ValuesDelta> entries = mState.getMimeEntries(GroupMembership.CONTENT_ITEM_TYPE);
-        if (entries != null) {
-            for (ValuesDelta values : entries) {
-                Long id = values.getGroupRowId();
-                if (id != null && id.longValue() != 0) {
-                    hasGroupMembership = true;
-                    break;
-                }
-            }
-        }
-
-        if (!hasGroupMembership) {
-            long defaultGroupId = getDefaultGroupId();
-            if (defaultGroupId != -1) {
-                ValuesDelta entry = RawContactModifier.insertChild(mState, mGroupMembershipKind);
-                if (entry != null) {
-                    entry.setGroupRowId(defaultGroupId);
-                }
-            }
-        }
-    }
-
-    /**
-     * Returns the default group (e.g. "My Contacts") for the current raw contact's
-     * account.  Returns -1 if there is no such group.
-     */
-    private long getDefaultGroupId() {
-        String accountType = mState.getAccountType();
-        String accountName = mState.getAccountName();
-        String accountDataSet = mState.getDataSet();
-        mGroupMetaData.moveToPosition(-1);
-        while (mGroupMetaData.moveToNext()) {
-            String name = mGroupMetaData.getString(GroupMetaDataLoader.ACCOUNT_NAME);
-            String type = mGroupMetaData.getString(GroupMetaDataLoader.ACCOUNT_TYPE);
-            String dataSet = mGroupMetaData.getString(GroupMetaDataLoader.DATA_SET);
-            if (name.equals(accountName) && type.equals(accountType)
-                    && Objects.equal(dataSet, accountDataSet)) {
-                long groupId = mGroupMetaData.getLong(GroupMetaDataLoader.GROUP_ID);
-                if (!mGroupMetaData.isNull(GroupMetaDataLoader.AUTO_ADD)
-                            && mGroupMetaData.getInt(GroupMetaDataLoader.AUTO_ADD) != 0) {
-                    return groupId;
-                }
-            }
-        }
-        return -1;
-    }
-
-    public StructuredNameEditorView getNameEditor() {
-        return mName;
-    }
-
-    public TextFieldsEditorView getPhoneticNameEditor() {
-        return mPhoneticName;
-    }
-
-    public TextFieldsEditorView getNickNameEditor() {
-        return mNickName;
-    }
-
-    @Override
-    public long getRawContactId() {
-        return mRawContactId;
-    }
-}
diff --git a/src/com/android/contacts/editor/RawContactReadOnlyEditorView.java b/src/com/android/contacts/editor/RawContactReadOnlyEditorView.java
deleted file mode 100644
index d55403b..0000000
--- a/src/com/android/contacts/editor/RawContactReadOnlyEditorView.java
+++ /dev/null
@@ -1,283 +0,0 @@
-/*
- * Copyright (C) 2009 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.contacts.editor;
-
-import android.content.ContentUris;
-import android.content.Context;
-import android.content.res.Resources;
-import android.graphics.drawable.Drawable;
-import android.provider.ContactsContract.CommonDataKinds.Email;
-import android.provider.ContactsContract.CommonDataKinds.Phone;
-import android.provider.ContactsContract.CommonDataKinds.Photo;
-import android.provider.ContactsContract.CommonDataKinds.StructuredName;
-import android.provider.ContactsContract.RawContacts;
-import android.text.TextUtils;
-import android.util.AttributeSet;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.View.OnClickListener;
-import android.view.ViewGroup;
-import android.widget.Button;
-import android.widget.ImageView;
-import android.widget.TextView;
-
-import com.android.contacts.common.model.account.AccountDisplayInfo;
-import com.android.contacts.common.model.account.AccountDisplayInfoFactory;
-import com.android.contacts.R;
-import com.android.contacts.common.GeoUtil;
-import com.android.contacts.common.compat.PhoneNumberUtilsCompat;
-import com.android.contacts.common.model.RawContactModifier;
-import com.android.contacts.common.model.RawContactDelta;
-import com.android.contacts.common.model.ValuesDelta;
-import com.android.contacts.common.model.account.AccountType;
-import com.android.contacts.common.model.account.AccountWithDataSet;
-import com.android.contacts.common.model.dataitem.DataKind;
-
-import java.util.ArrayList;
-
-/**
- * Custom view that displays external contacts in the edit screen.
- */
-public class RawContactReadOnlyEditorView extends BaseRawContactEditorView
-        implements OnClickListener {
-    private LayoutInflater mInflater;
-
-    private AccountDisplayInfoFactory mAccountDisplayInfoFactory;
-
-    private TextView mName;
-    private Button mEditExternallyButton;
-    private ViewGroup mGeneral;
-
-    private TextView mAccountHeaderTypeTextView;
-    private TextView mAccountHeaderNameTextView;
-    private ImageView mAccountIconImageView;
-
-    private String mAccountName;
-    private String mAccountType;
-    private String mDataSet;
-    private long mRawContactId = -1;
-
-    public RawContactReadOnlyEditorView(Context context) {
-        super(context);
-    }
-
-    public RawContactReadOnlyEditorView(Context context, AttributeSet attrs) {
-        super(context, attrs);
-    }
-
-
-    /** {@inheritDoc} */
-    @Override
-    protected void onFinishInflate() {
-        super.onFinishInflate();
-
-        mInflater = (LayoutInflater)getContext().getSystemService(
-                Context.LAYOUT_INFLATER_SERVICE);
-
-        mName = (TextView) findViewById(R.id.read_only_name);
-        mEditExternallyButton = (Button) findViewById(R.id.button_edit_externally);
-        mEditExternallyButton.setOnClickListener(this);
-        mGeneral = (ViewGroup)findViewById(R.id.sect_general);
-
-        mAccountHeaderTypeTextView = (TextView) findViewById(R.id.account_type);
-        mAccountHeaderNameTextView = (TextView) findViewById(R.id.account_name);
-        mAccountIconImageView = (ImageView) findViewById(R.id.account_type_icon);
-
-        mAccountDisplayInfoFactory = AccountDisplayInfoFactory.forAllAccounts(getContext());
-    }
-
-    /**
-     * Set the internal state for this view, given a current
-     * {@link RawContactDelta} state and the {@link AccountType} that
-     * apply to that state.
-     */
-    @Override
-    public void setState(RawContactDelta state, AccountType type, ViewIdGenerator vig,
-            boolean isProfile) {
-        // Remove any existing sections
-        mGeneral.removeAllViews();
-
-        // Bail if invalid state or source
-        if (state == null || type == null) return;
-
-        // Make sure we have StructuredName
-        RawContactModifier.ensureKindExists(state, type, StructuredName.CONTENT_ITEM_TYPE);
-
-        // Fill in the header info
-        mAccountName = state.getAccountName();
-        mAccountType = state.getAccountType();
-        mDataSet = state.getDataSet();
-
-
-        final AccountDisplayInfo account = mAccountDisplayInfoFactory
-                .getAccountDisplayInfoFor(state);
-
-        final String accountTypeLabel;
-        final String accountNameLabel;
-        if (isProfile) {
-            accountTypeLabel = EditorUiUtils.getAccountHeaderLabelForMyProfile(
-                    getContext(), account);
-            accountNameLabel = account.getNameLabel().toString();
-        } else {
-            accountTypeLabel = account.getTypeLabel().toString();
-            accountNameLabel = account.getNameLabel().toString();
-        }
-
-        if (!account.hasDistinctName()) {
-            // Hide this view so the other view will be centered vertically
-            mAccountHeaderNameTextView.setVisibility(View.GONE);
-        } else {
-            mAccountHeaderNameTextView.setVisibility(View.VISIBLE);
-            mAccountHeaderNameTextView.setText(accountNameLabel);
-        }
-        mAccountHeaderTypeTextView.setText(accountTypeLabel);
-        updateAccountHeaderContentDescription();
-
-        mAccountIconImageView.setImageDrawable(state.getRawContactAccountType(getContext())
-                .getDisplayIcon(getContext()));
-
-        // TODO: Expose data set in the UI somehow?
-
-        mRawContactId = state.getRawContactId();
-
-        ValuesDelta primary;
-
-        // Photo
-        DataKind kind = type.getKindForMimetype(Photo.CONTENT_ITEM_TYPE);
-        if (kind != null) {
-            RawContactModifier.ensureKindExists(state, type, Photo.CONTENT_ITEM_TYPE);
-            boolean hasPhotoEditor = type.getKindForMimetype(Photo.CONTENT_ITEM_TYPE) != null;
-            setHasPhotoEditor(hasPhotoEditor);
-            primary = state.getPrimaryEntry(Photo.CONTENT_ITEM_TYPE);
-            getPhotoEditor().setValues(kind, primary, state, !type.areContactsWritable(), vig);
-        }
-
-        // Name
-        primary = state.getPrimaryEntry(StructuredName.CONTENT_ITEM_TYPE);
-        mName.setText(primary != null ? primary.getAsString(StructuredName.DISPLAY_NAME) :
-                getContext().getString(R.string.missing_name));
-
-        if (type.getEditContactActivityClassName() != null) {
-            mEditExternallyButton.setVisibility(View.VISIBLE);
-        } else {
-            mEditExternallyButton.setVisibility(View.GONE);
-        }
-
-        final Resources res = getContext().getResources();
-        // Phones
-        final ArrayList<ValuesDelta> phones = state.getMimeEntries(Phone.CONTENT_ITEM_TYPE);
-        final Drawable phoneDrawable = getResources().getDrawable(R.drawable.ic_phone_24dp);
-        final String phoneContentDescription = res.getString(R.string.header_phone_entry);
-        if (phones != null) {
-            boolean isFirstPhoneBound = true;
-            for (ValuesDelta phone : phones) {
-                final String phoneNumber = phone.getPhoneNumber();
-                if (TextUtils.isEmpty(phoneNumber)) {
-                    continue;
-                }
-                final String formattedNumber = PhoneNumberUtilsCompat.formatNumber(
-                        phoneNumber, phone.getPhoneNormalizedNumber(),
-                        GeoUtil.getCurrentCountryIso(getContext()));
-                CharSequence phoneType = null;
-                if (phone.hasPhoneType()) {
-                    phoneType = Phone.getTypeLabel(
-                            res, phone.getPhoneType(), phone.getPhoneLabel());
-                }
-                bindData(phoneDrawable, phoneContentDescription, formattedNumber, phoneType,
-                        isFirstPhoneBound, true);
-                isFirstPhoneBound = false;
-            }
-        }
-
-        // Emails
-        final ArrayList<ValuesDelta> emails = state.getMimeEntries(Email.CONTENT_ITEM_TYPE);
-        final Drawable emailDrawable = getResources().getDrawable(R.drawable.ic_email_24dp);
-        final String emailContentDescription = res.getString(R.string.header_email_entry);
-        if (emails != null) {
-            boolean isFirstEmailBound = true;
-            for (ValuesDelta email : emails) {
-                final String emailAddress = email.getEmailData();
-                if (TextUtils.isEmpty(emailAddress)) {
-                    continue;
-                }
-                CharSequence emailType = null;
-                if (email.hasEmailType()) {
-                    emailType = Email.getTypeLabel(
-                            res, email.getEmailType(), email.getEmailLabel());
-                }
-                bindData(emailDrawable, emailContentDescription, emailAddress, emailType,
-                        isFirstEmailBound);
-                isFirstEmailBound = false;
-            }
-        }
-
-        // Hide mGeneral if it's empty
-        if (mGeneral.getChildCount() > 0) {
-            mGeneral.setVisibility(View.VISIBLE);
-        } else {
-            mGeneral.setVisibility(View.GONE);
-        }
-    }
-
-    private void bindData(Drawable icon, String iconContentDescription, CharSequence data,
-            CharSequence type, boolean isFirstEntry) {
-        bindData(icon, iconContentDescription, data, type, isFirstEntry, false);
-    }
-
-    private void bindData(Drawable icon, String iconContentDescription, CharSequence data,
-            CharSequence type, boolean isFirstEntry, boolean forceLTR) {
-        final View field = mInflater.inflate(R.layout.item_read_only_field, mGeneral, false);
-        if (isFirstEntry) {
-            final ImageView imageView = (ImageView) field.findViewById(R.id.kind_icon);
-            imageView.setImageDrawable(icon);
-            imageView.setContentDescription(iconContentDescription);
-        } else {
-            final ImageView imageView = (ImageView) field.findViewById(R.id.kind_icon);
-            imageView.setVisibility(View.INVISIBLE);
-            imageView.setContentDescription(null);
-        }
-        final TextView dataView = (TextView) field.findViewById(R.id.data);
-        dataView.setText(data);
-        if (forceLTR) {
-            dataView.setTextDirection(View.TEXT_DIRECTION_LTR);
-        }
-        final TextView typeView = (TextView) field.findViewById(R.id.type);
-        if (!TextUtils.isEmpty(type)) {
-            typeView.setText(type);
-        } else {
-            typeView.setVisibility(View.GONE);
-        }
-
-        mGeneral.addView(field);
-    }
-
-    @Override
-    public long getRawContactId() {
-        return mRawContactId;
-    }
-
-    @Override
-    public void onClick(View v) {
-        if (v.getId() == R.id.button_edit_externally) {
-            if (mListener != null) {
-                mListener.onExternalEditorRequest(
-                        new AccountWithDataSet(mAccountName, mAccountType, mDataSet),
-                        ContentUris.withAppendedId(RawContacts.CONTENT_URI, mRawContactId));
-            }
-        }
-    }
-}
diff --git a/src/com/android/contacts/common/editor/SelectAccountDialogFragment.java b/src/com/android/contacts/editor/SelectAccountDialogFragment.java
similarity index 97%
rename from src/com/android/contacts/common/editor/SelectAccountDialogFragment.java
rename to src/com/android/contacts/editor/SelectAccountDialogFragment.java
index 96da89a..34fac4f 100644
--- a/src/com/android/contacts/common/editor/SelectAccountDialogFragment.java
+++ b/src/com/android/contacts/editor/SelectAccountDialogFragment.java
@@ -14,7 +14,7 @@
  * limitations under the License
  */
 
-package com.android.contacts.common.editor;
+package com.android.contacts.editor;
 
 import android.app.Activity;
 import android.app.AlertDialog;
@@ -44,9 +44,6 @@
     private static final String KEY_LIST_FILTER = "list_filter";
     private static final String KEY_EXTRA_ARGS = "extra_args";
 
-    public SelectAccountDialogFragment() { // All fragments must have a public default constructor.
-    }
-
     /**
      * Show the dialog.
      *
diff --git a/src/com/android/contacts/editor/SplitContactConfirmationDialogFragment.java b/src/com/android/contacts/editor/SplitContactConfirmationDialogFragment.java
index f3d0ef4..41d45a1 100644
--- a/src/com/android/contacts/editor/SplitContactConfirmationDialogFragment.java
+++ b/src/com/android/contacts/editor/SplitContactConfirmationDialogFragment.java
@@ -49,7 +49,7 @@
         void onSplitContactConfirmed(boolean hasPendingChanges);
     }
 
-    public static void show(ContactEditorBaseFragment fragment, boolean hasPendingChanges) {
+    public static void show(CompactContactEditorFragment fragment, boolean hasPendingChanges) {
         final Bundle args = new Bundle();
         args.putBoolean(ARG_HAS_PENDING_CHANGES, hasPendingChanges);
 
diff --git a/src/com/android/contacts/editor/SuggestionEditConfirmationDialogFragment.java b/src/com/android/contacts/editor/SuggestionEditConfirmationDialogFragment.java
index c13d5ea..31437b4 100644
--- a/src/com/android/contacts/editor/SuggestionEditConfirmationDialogFragment.java
+++ b/src/com/android/contacts/editor/SuggestionEditConfirmationDialogFragment.java
@@ -29,7 +29,7 @@
 
     private static final String ARG_CONTACT_URI = "contactUri";
 
-    public static void show(ContactEditorBaseFragment fragment, Uri contactUri) {
+    public static void show(CompactContactEditorFragment fragment, Uri contactUri) {
         final Bundle args = new Bundle();
         args.putParcelable(ARG_CONTACT_URI, contactUri);
 
@@ -49,8 +49,8 @@
                         new DialogInterface.OnClickListener() {
                             @Override
                             public void onClick(DialogInterface dialog, int whichButton) {
-                                final ContactEditorBaseFragment targetFragment =
-                                        (ContactEditorBaseFragment) getTargetFragment();
+                                final CompactContactEditorFragment targetFragment =
+                                        (CompactContactEditorFragment) getTargetFragment();
                                 final Uri contactUri =
                                         getArguments().getParcelable(ARG_CONTACT_URI);
                                 targetFragment.doEditSuggestedContact(contactUri);
diff --git a/src/com/android/contacts/editor/ViewIdGenerator.java b/src/com/android/contacts/editor/ViewIdGenerator.java
index e7e7948..ad99bf8 100644
--- a/src/com/android/contacts/editor/ViewIdGenerator.java
+++ b/src/com/android/contacts/editor/ViewIdGenerator.java
@@ -25,7 +25,7 @@
 import com.android.contacts.common.model.dataitem.DataKind;
 
 /**
- * A class that provides unique view ids for {@link ContentEditorView}, {@link KindSectionView},
+ * A class that provides unique view ids for {@link ContentEditorView},
  * {@link LabeledEditorView} and {@link EditView} on {@link EditContactActivity}.
  * It is used to assign a unique but consistent id to each view across {@link EditContactActivity}'s
  * lifecycle, so that we can re-construct view state (e.g. focused view) when the screen rotates.
diff --git a/src/com/android/contacts/group/GroupMembersFragment.java b/src/com/android/contacts/group/GroupMembersFragment.java
index d7070f0..fd3c670 100644
--- a/src/com/android/contacts/group/GroupMembersFragment.java
+++ b/src/com/android/contacts/group/GroupMembersFragment.java
@@ -18,31 +18,46 @@
 import android.app.Activity;
 import android.app.LoaderManager.LoaderCallbacks;
 import android.content.CursorLoader;
+import android.content.Intent;
 import android.content.Loader;
 import android.database.Cursor;
 import android.database.CursorWrapper;
 import android.net.Uri;
 import android.os.Bundle;
 import android.provider.ContactsContract.Contacts;
+import android.support.v7.app.AppCompatActivity;
 import android.util.Log;
 import android.view.Gravity;
 import android.view.LayoutInflater;
+import android.view.Menu;
+import android.view.MenuInflater;
+import android.view.MenuItem;
 import android.view.View;
 import android.view.ViewGroup;
 import android.widget.Button;
 import android.widget.FrameLayout;
 import android.widget.ImageView;
 import android.widget.LinearLayout;
+import android.widget.Toast;
 
+import com.android.contacts.ContactSaveService;
+import com.android.contacts.ContactsDrawerActivity;
 import com.android.contacts.GroupMetaDataLoader;
 import com.android.contacts.R;
-import com.android.contacts.activities.GroupMembersActivity;
+import com.android.contacts.activities.ActionBarAdapter;
 import com.android.contacts.common.list.ContactsSectionIndexer;
-import com.android.contacts.common.list.MultiSelectEntryContactListAdapter;
+import com.android.contacts.common.list.MultiSelectEntryContactListAdapter.DeleteContactListener;
+import com.android.contacts.common.logging.ListEvent;
 import com.android.contacts.common.logging.ListEvent.ListType;
+import com.android.contacts.common.logging.Logger;
+import com.android.contacts.common.logging.ScreenEvent;
 import com.android.contacts.common.model.account.AccountWithDataSet;
+import com.android.contacts.common.util.ImplicitIntentsUtil;
 import com.android.contacts.group.GroupMembersAdapter.GroupMembersQuery;
+import com.android.contacts.interactions.GroupDeletionDialogFragment;
+import com.android.contacts.list.ContactsRequest;
 import com.android.contacts.list.MultiSelectContactsListFragment;
+import com.android.contacts.list.UiIntentActions;
 
 import java.util.ArrayList;
 import java.util.HashSet;
@@ -50,33 +65,21 @@
 import java.util.Set;
 
 /** Displays the members of a group. */
-public class GroupMembersFragment extends MultiSelectContactsListFragment<GroupMembersAdapter>
-        implements MultiSelectEntryContactListAdapter.DeleteContactListener {
+public class GroupMembersFragment extends MultiSelectContactsListFragment<GroupMembersAdapter> {
 
     private static final String TAG = "GroupMembers";
 
+    private static final String KEY_IS_EDIT_MODE = "editMode";
     private static final String KEY_GROUP_URI = "groupUri";
     private static final String KEY_GROUP_METADATA = "groupMetadata";
 
+    public static final String TAG_GROUP_NAME_EDIT_DIALOG = "groupNameEditDialog";
+
     private static final String ARG_GROUP_URI = "groupUri";
 
     private static final int LOADER_GROUP_METADATA = 0;
 
-    /** Callbacks for hosts of {@link GroupMembersFragment}. */
-    public interface GroupMembersListener {
-
-        /** Invoked after group metadata for the passed in group URI has loaded. */
-        void onGroupMetadataLoaded(GroupMetaData groupMetaData);
-
-        /** Invoked if group metadata can't be loaded for the passed in group URI. */
-        void onGroupMetadataLoadFailed();
-
-        /** Invoked when a group member in the list is clicked. */
-        void onGroupMemberListItemClicked(int position, Uri contactLookupUri);
-
-        /** Invoked when a the delete button for a group member in the list is clicked. */
-        void onGroupMemberListItemDeleted(int position, long contactId);
-    }
+    private static final int RESULT_GROUP_ADD_MEMBER = 100;
 
     /** Filters out duplicate contacts. */
     private class FilterCursorWrapper extends CursorWrapper {
@@ -178,20 +181,21 @@
         }
     }
 
-    private final LoaderCallbacks<Cursor> mGroupMetadataCallbacks = new LoaderCallbacks<Cursor>() {
+    private final LoaderCallbacks<Cursor> mGroupMetaDataCallbacks = new LoaderCallbacks<Cursor>() {
 
         @Override
         public CursorLoader onCreateLoader(int id, Bundle args) {
-            return new GroupMetaDataLoader(getActivity(), mGroupUri);
+            return new GroupMetaDataLoader(mActivity, mGroupUri);
         }
 
         @Override
         public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
             if (cursor == null || cursor.isClosed() || !cursor.moveToNext()) {
                 Log.e(TAG, "Failed to load group metadata for " + mGroupUri);
-                if (mListener != null) {
-                    mListener.onGroupMetadataLoadFailed();
-                }
+                Toast.makeText(getContext(), R.string.groupLoadErrorToast, Toast.LENGTH_SHORT)
+                        .show();
+                mActivity.setResult(AppCompatActivity.RESULT_CANCELED);
+                mActivity.finish();
                 return;
             }
             mGroupMetaData = new GroupMetaData(getActivity(), cursor);
@@ -202,9 +206,13 @@
         public void onLoaderReset(Loader<Cursor> loader) {}
     };
 
+    private ActionBarAdapter mActionBarAdapter;
+
+    private ContactsDrawerActivity mActivity;
+
     private Uri mGroupUri;
 
-    private GroupMembersListener mListener;
+    private boolean mIsEditMode;
 
     private GroupMetaData mGroupMetaData;
 
@@ -223,12 +231,218 @@
         setPhotoLoaderEnabled(true);
         setSectionHeaderDisplayEnabled(true);
         setHasOptionsMenu(true);
-
         setListType(ListType.GROUP);
     }
 
-    public void setListener(GroupMembersListener listener) {
-        mListener = listener;
+    @Override
+    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
+        if (mGroupMetaData == null) {
+            // Hide menu options until metadata is fully loaded
+            return;
+        }
+        inflater.inflate(R.menu.view_group, menu);
+    }
+
+    @Override
+    public void onPrepareOptionsMenu(Menu menu) {
+        final boolean isSelectionMode = mActionBarAdapter.isSelectionMode();
+        final boolean isGroupEditable = mGroupMetaData != null && mGroupMetaData.editable;
+        final boolean isGroupReadOnly = mGroupMetaData != null && mGroupMetaData.readOnly;
+
+        setVisible(menu, R.id.menu_add, isGroupEditable && !isSelectionMode);
+        setVisible(menu, R.id.menu_rename_group, !isGroupReadOnly && !isSelectionMode);
+        setVisible(menu, R.id.menu_delete_group, !isGroupReadOnly && !isSelectionMode);
+        setVisible(menu, R.id.menu_edit_group, isGroupEditable && !mIsEditMode && !isSelectionMode
+                && !isGroupEmpty());
+        setVisible(menu, R.id.menu_remove_from_group, isGroupEditable && isSelectionMode &&
+                !mIsEditMode);
+    }
+
+    private boolean isGroupEmpty() {
+        return getAdapter() != null && getAdapter().isEmpty();
+    }
+
+    private static void setVisible(Menu menu, int id, boolean visible) {
+        final MenuItem menuItem = menu.findItem(id);
+        if (menuItem != null) {
+            menuItem.setVisible(visible);
+        }
+    }
+
+    private void startGroupAddMemberActivity() {
+        startActivityForResult(GroupUtil.createPickMemberIntent(getContext(), mGroupMetaData,
+                getMemberContactIds()), RESULT_GROUP_ADD_MEMBER);
+    }
+
+    @Override
+    public boolean onOptionsItemSelected(MenuItem item) {
+        switch (item.getItemId()) {
+            case android.R.id.home: {
+                mActivity.onBackPressed();
+                return true;
+            }
+            case R.id.menu_add: {
+                startGroupAddMemberActivity();
+                return true;
+            }
+            case R.id.menu_rename_group: {
+                GroupNameEditDialogFragment.newInstanceForUpdate(
+                        new AccountWithDataSet(mGroupMetaData.accountName,
+                                mGroupMetaData.accountType, mGroupMetaData.dataSet),
+                        GroupUtil.ACTION_UPDATE_GROUP, mGroupMetaData.groupId,
+                        mGroupMetaData.groupName).show(getFragmentManager(),
+                        TAG_GROUP_NAME_EDIT_DIALOG);
+                return true;
+            }
+            case R.id.menu_delete_group: {
+                deleteGroup();
+                return true;
+            }
+            case R.id.menu_edit_group: {
+                mIsEditMode = true;
+                mActionBarAdapter.setSelectionMode(true);
+                displayDeleteButtons(true);
+                return true;
+            }
+            case R.id.menu_remove_from_group: {
+                logListEvent();
+                removeSelectedContacts();
+                return true;
+            }
+        }
+        return super.onOptionsItemSelected(item);
+    }
+
+    private void removeSelectedContacts() {
+        final long[] contactIds = getAdapter().getSelectedContactIdsArray();
+        new UpdateGroupMembersAsyncTask(UpdateGroupMembersAsyncTask.TYPE_REMOVE,
+                getContext(), contactIds, mGroupMetaData.groupId, mGroupMetaData.accountName,
+                mGroupMetaData.accountType, mGroupMetaData.dataSet).execute();
+
+        mActionBarAdapter.setSelectionMode(false);
+    }
+
+    @Override
+    public void onActivityResult(int requestCode, int resultCode, Intent data) {
+        if (requestCode == RESULT_GROUP_ADD_MEMBER && resultCode ==
+                Activity.RESULT_OK && data != null) {
+            long[] contactIds = data.getLongArrayExtra(
+                    UiIntentActions.TARGET_CONTACT_IDS_EXTRA_KEY);
+            if (contactIds == null) {
+                final long contactId = data.getLongExtra(
+                        UiIntentActions.TARGET_CONTACT_ID_EXTRA_KEY, -1);
+                if (contactId > -1) {
+                    contactIds = new long[1];
+                    contactIds[0] = contactId;
+                }
+            }
+            new UpdateGroupMembersAsyncTask(
+                    UpdateGroupMembersAsyncTask.TYPE_ADD,
+                    getContext(), contactIds, mGroupMetaData.groupId, mGroupMetaData.accountName,
+                    mGroupMetaData.accountType, mGroupMetaData.dataSet).execute();
+        }
+    }
+
+    private final ActionBarAdapter.Listener mActionBarListener = new ActionBarAdapter.Listener() {
+        @Override
+        public void onAction(int action) {
+            switch (action) {
+                case ActionBarAdapter.Listener.Action.START_SELECTION_MODE:
+                    if (mIsEditMode) {
+                        displayDeleteButtons(true);
+                        mActionBarAdapter.setActionBarTitle(getString(R.string.title_edit_group));
+                    } else {
+                        displayCheckBoxes(true);
+                    }
+                    mActivity.invalidateOptionsMenu();
+                    break;
+                case ActionBarAdapter.Listener.Action.STOP_SEARCH_AND_SELECTION_MODE:
+                    mActionBarAdapter.setSearchMode(false);
+                    if (mIsEditMode) {
+                        displayDeleteButtons(false);
+                    } else {
+                        displayCheckBoxes(false);
+                    }
+                    mActivity.invalidateOptionsMenu();
+                    break;
+                case ActionBarAdapter.Listener.Action.BEGIN_STOPPING_SEARCH_AND_SELECTION_MODE:
+                    break;
+            }
+        }
+
+        @Override
+        public void onUpButtonPressed() {
+            mActivity.onBackPressed();
+        }
+    };
+
+    private final OnCheckBoxListActionListener mCheckBoxListener =
+            new OnCheckBoxListActionListener() {
+                @Override
+                public void onStartDisplayingCheckBoxes() {
+                    mActionBarAdapter.setSelectionMode(true);
+                }
+
+                @Override
+                public void onSelectedContactIdsChanged() {
+                    if (mActionBarAdapter == null) {
+                        return;
+                    }
+                    if (mIsEditMode) {
+                        mActionBarAdapter.setActionBarTitle(getString(R.string.title_edit_group));
+                    } else {
+                        mActionBarAdapter.setSelectionCount(getSelectedContactIds().size());
+                    }
+                }
+
+                @Override
+                public void onStopDisplayingCheckBoxes() {
+                    mActionBarAdapter.setSelectionMode(false);
+                }
+            };
+
+    private void logListEvent() {
+        Logger.logListEvent(
+                ListEvent.ActionType.REMOVE_LABEL,
+                getListType(),
+                getAdapter().getCount(),
+                /* clickedIndex */ -1,
+                getAdapter().getSelectedContactIdsArray().length);
+    }
+
+    private void deleteGroup() {
+        if (getMemberCount() == 0) {
+            final Intent intent = ContactSaveService.createGroupDeletionIntent(
+                    getContext(), mGroupMetaData.groupId);
+            getContext().startService(intent);
+            mActivity.switchToAllContacts();
+        } else {
+            GroupDeletionDialogFragment.show(getFragmentManager(), mGroupMetaData.groupId,
+                    mGroupMetaData.groupName);
+        }
+    }
+
+    @Override
+    public void onActivityCreated(Bundle savedInstanceState) {
+        super.onActivityCreated(savedInstanceState);
+        mActivity = (ContactsDrawerActivity) getActivity();
+        mActionBarAdapter = new ActionBarAdapter(mActivity, mActionBarListener,
+                mActivity.getSupportActionBar(), mActivity.getToolbar(), R.string.enter_contact_name);
+        mActionBarAdapter.setShowHomeIcon(true);
+        final ContactsRequest contactsRequest = new ContactsRequest();
+        contactsRequest.setActionCode(ContactsRequest.ACTION_GROUP);
+        mActionBarAdapter.initialize(savedInstanceState, contactsRequest);
+        if (mGroupMetaData != null) {
+            mActivity.setTitle(mGroupMetaData.groupName);
+            if (mGroupMetaData.editable) {
+                setCheckBoxListListener(mCheckBoxListener);
+            }
+        }
+    }
+
+    @Override
+    public ActionBarAdapter getActionBarAdapter() {
+        return mActionBarAdapter;
     }
 
     public void displayDeleteButtons(boolean displayDeleteButtons) {
@@ -243,21 +457,35 @@
         return mGroupMemberContactIds.size();
     }
 
+    public boolean isEditMode() {
+        return mIsEditMode;
+    }
+
     @Override
     public void onCreate(Bundle savedState) {
         super.onCreate(savedState);
         if (savedState == null) {
             mGroupUri = getArguments().getParcelable(ARG_GROUP_URI);
         } else {
+            mIsEditMode = savedState.getBoolean(KEY_IS_EDIT_MODE);
             mGroupUri = savedState.getParcelable(KEY_GROUP_URI);
             mGroupMetaData = savedState.getParcelable(KEY_GROUP_METADATA);
         }
+        maybeAttachCheckBoxListener();
+    }
+
+    @Override
+    public void onResume() {
+        super.onResume();
+        // Re-register the listener, which may have been cleared when onSaveInstanceState was
+        // called. See also: onSaveInstanceState
+        mActionBarAdapter.setListener(mActionBarListener);
     }
 
     @Override
     protected void startLoading() {
         if (mGroupMetaData == null || !mGroupMetaData.isValid()) {
-            getLoaderManager().restartLoader(LOADER_GROUP_METADATA, null, mGroupMetadataCallbacks);
+            getLoaderManager().restartLoader(LOADER_GROUP_METADATA, null, mGroupMetaDataCallbacks);
         } else {
             onGroupMetadataLoaded();
         }
@@ -273,7 +501,7 @@
             bindMembersCount(cursorWrapper.getCount());
             super.onLoadFinished(loader, cursorWrapper);
             // Update state of menu items (e.g. "Remove contacts") based on number of group members.
-            getActivity().invalidateOptionsMenu();
+            mActivity.invalidateOptionsMenu();
         }
     }
 
@@ -296,6 +524,11 @@
     @Override
     public void onSaveInstanceState(Bundle outState) {
         super.onSaveInstanceState(outState);
+        if (mActionBarAdapter != null) {
+            mActionBarAdapter.setListener(null);
+            mActionBarAdapter.onSaveInstanceState(outState);
+        }
+        outState.putBoolean(KEY_IS_EDIT_MODE, mIsEditMode);
         outState.putParcelable(KEY_GROUP_URI, mGroupUri);
         outState.putParcelable(KEY_GROUP_METADATA, mGroupMetaData);
     }
@@ -305,9 +538,9 @@
 
         maybeAttachCheckBoxListener();
 
-        if (mListener != null) {
-            mListener.onGroupMetadataLoaded(mGroupMetaData);
-        }
+        mActivity.setTitle(mGroupMetaData.groupName);
+        mActivity.updateGroupMenu(mGroupMetaData);
+        mActivity.invalidateOptionsMenu();
 
         // Start loading the group members
         super.startLoading();
@@ -316,12 +549,7 @@
     private void maybeAttachCheckBoxListener() {
         // Don't attach the multi select check box listener if we can't edit the group
         if (mGroupMetaData != null && mGroupMetaData.editable) {
-            try {
-                setCheckBoxListListener((OnCheckBoxListActionListener) getActivity());
-            } catch (ClassCastException e) {
-                throw new ClassCastException(getActivity() + " must implement " +
-                        OnCheckBoxListActionListener.class.getSimpleName());
-            }
+            setCheckBoxListListener(mCheckBoxListener);
         }
     }
 
@@ -330,7 +558,7 @@
         final GroupMembersAdapter adapter = new GroupMembersAdapter(getContext());
         adapter.setSectionHeaderDisplayEnabled(true);
         adapter.setDisplayPhotos(true);
-        adapter.setDeleteContactListener(this);
+        adapter.setDeleteContactListener(new DeletionListener());
         return adapter;
     }
 
@@ -364,7 +592,8 @@
         addContactsButton.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View v) {
-                ((GroupMembersActivity) getActivity()).startGroupAddMemberActivity();
+                startActivityForResult(GroupUtil.createPickMemberIntent(getContext(),
+                        mGroupMetaData, getMemberContactIds()), RESULT_GROUP_ADD_MEMBER);
             }
         });
         return view;
@@ -380,25 +609,93 @@
             super.onItemClick(position, id);
             return;
         }
-        if (mListener != null) {
-            mListener.onGroupMemberListItemClicked(position, uri);
-        }
+        final int count = getAdapter().getCount();
+        Logger.logListEvent(ListEvent.ActionType.CLICK, ListEvent.ListType.GROUP, count,
+                /* clickedIndex */ position, /* numSelected */ 0);
+        ImplicitIntentsUtil.startQuickContact(
+                getActivity(), uri, ScreenEvent.ScreenType.LIST_GROUP);
     }
 
     @Override
     protected boolean onItemLongClick(int position, long id) {
-        final Activity activity = getActivity();
-        if (activity != null && activity instanceof GroupMembersActivity) {
-            if (((GroupMembersActivity) activity).isEditMode()) {
-                return true;
-            }
+        if (mActivity != null && mIsEditMode) {
+            return true;
         }
         return super.onItemLongClick(position, id);
     }
 
+    private final class DeletionListener implements DeleteContactListener {
+        @Override
+        public void onContactDeleteClicked(int position) {
+            final long contactId = getAdapter().getContactId(position);
+            final long[] contactIds = new long[1];
+            contactIds[0] = contactId;
+            new UpdateGroupMembersAsyncTask(UpdateGroupMembersAsyncTask.TYPE_REMOVE,
+                    getContext(), contactIds, mGroupMetaData.groupId, mGroupMetaData.accountName,
+                    mGroupMetaData.accountType, mGroupMetaData.dataSet).execute();
+        }
+    }
+
+    public GroupMetaData getGroupMetaData() {
+        return mGroupMetaData;
+    }
+
+    public boolean isCurrentGroup(long groupId) {
+        return mGroupMetaData != null && mGroupMetaData.groupId == groupId;
+    }
+
     @Override
-    public void onContactDeleteClicked(int position) {
-        final long contactId = getAdapter().getContactId(position);
-        mListener.onGroupMemberListItemDeleted(position, contactId);
+    public void onDestroy() {
+        if (mActionBarAdapter != null) {
+            mActionBarAdapter.setListener(null);
+        }
+        super.onDestroy();
+    }
+
+    public void updateDisplayedGroup(Uri newGroupUri, String action) {
+        if (!GroupUtil.ACTION_SWITCH_GROUP.equals(action)) {
+            toast(getToastMessageForSaveAction(action));
+        }
+
+        if (isEditMode() && getGroupCount() == 1) {
+            // If we're deleting the last group member, exit edit mode
+            exitEditMode();
+        } else if (!GroupUtil.ACTION_REMOVE_FROM_GROUP.equals(action)) {
+            mGroupUri = newGroupUri;
+            mGroupMetaData = null; // Clear mGroupMetaData to trigger a new load.
+            reloadData();
+            mActivity.invalidateOptionsMenu();
+        }
+    }
+
+    private static int getToastMessageForSaveAction(String action) {
+        switch(action) {
+            case GroupUtil.ACTION_UPDATE_GROUP:
+                return R.string.groupUpdatedToast;
+            case GroupUtil.ACTION_ADD_TO_GROUP:
+                return R.string.groupMembersAddedToast;
+            case GroupUtil.ACTION_REMOVE_FROM_GROUP:
+                return R.string.groupMembersRemovedToast;
+            case GroupUtil.ACTION_CREATE_GROUP:
+                return R.string.groupCreatedToast;
+            default:
+                throw new IllegalArgumentException("Unhandled contact save action " + action);
+        }
+    }
+
+    private void toast(int resId) {
+        if (resId >= 0) {
+            Toast.makeText(getContext(), resId, Toast.LENGTH_SHORT).show();
+        }
+    }
+
+    private int getGroupCount() {
+        return getAdapter() != null ? getAdapter().getCount() : -1;
+    }
+
+    public void exitEditMode() {
+        mIsEditMode = false;
+        mActionBarAdapter.setSelectionMode(false);
+        displayDeleteButtons(false);
     }
 }
diff --git a/src/com/android/contacts/group/GroupUtil.java b/src/com/android/contacts/group/GroupUtil.java
index 6539bc8..8976270 100644
--- a/src/com/android/contacts/group/GroupUtil.java
+++ b/src/com/android/contacts/group/GroupUtil.java
@@ -16,7 +16,6 @@
 
 package com.android.contacts.group;
 
-import android.content.ContentUris;
 import android.content.Context;
 import android.content.Intent;
 import android.database.Cursor;
@@ -28,7 +27,6 @@
 
 import com.android.contacts.GroupListLoader;
 import com.android.contacts.activities.ContactSelectionActivity;
-import com.android.contacts.activities.GroupMembersActivity;
 import com.android.contacts.common.list.ContactsSectionIndexer;
 import com.android.contacts.common.model.account.GoogleAccountType;
 import com.android.contacts.list.UiIntentActions;
@@ -44,12 +42,17 @@
  */
 public final class GroupUtil {
 
+    public static final String ACTION_ADD_TO_GROUP = "addToGroup";
+    public static final String ACTION_CREATE_GROUP = "createGroup";
+    public static final String ACTION_DELETE_GROUP = "deleteGroup";
+    public static final String ACTION_REMOVE_FROM_GROUP = "removeFromGroup";
+    public static final String ACTION_SWITCH_GROUP = "switchGroup";
+    public static final String ACTION_UPDATE_GROUP = "updateGroup";
+
     // System IDs of FFC groups in Google accounts
     private static final Set<String> FFC_GROUPS =
             new HashSet(Arrays.asList("Friends", "Family", "Coworkers"));
 
-    public static final String EXTRA_GROUP_NAME = "groupName";
-
     private GroupUtil() {
     }
 
@@ -88,21 +91,6 @@
                 isFirstGroupInAccount, memberCount, isReadOnly, systemId);
     }
 
-    /** Returns an Intent to view the details of the group identified by the given URI. */
-    public static Intent createViewGroupIntent(Context context, Uri groupUri, String title) {
-        final Intent intent = new Intent(context, GroupMembersActivity.class);
-        intent.setAction(Intent.ACTION_VIEW);
-        intent.setData(groupUri);
-        intent.putExtra(EXTRA_GROUP_NAME, title);
-        return intent;
-    }
-
-    /** Returns an Intent to view the details of the group identified by the given ID. */
-    public static Intent createViewGroupIntent(Context context, long groupId, String title) {
-        return createViewGroupIntent(context,
-                ContentUris.withAppendedId(Groups.CONTENT_URI, groupId), title);
-    }
-
     /** Returns an Intent to pick contacts to add to a group. */
     public static Intent createPickMemberIntent(Context context,
             GroupMetaData groupMetaData, ArrayList<String> memberContactIds) {
@@ -131,6 +119,13 @@
     }
 
     /**
+     * Returns true the URI is a group URI.
+     */
+    public static boolean isGroupUri(Uri uri) {
+        return  uri != null && uri.toString().startsWith(Groups.CONTENT_URI.toString());
+    }
+
+    /**
      * Sort groups alphabetically and in a localized way.
      */
     public static String getGroupsSortOrder() {
diff --git a/src/com/android/contacts/group/UpdateGroupMembersAsyncTask.java b/src/com/android/contacts/group/UpdateGroupMembersAsyncTask.java
new file mode 100644
index 0000000..9b255eb
--- /dev/null
+++ b/src/com/android/contacts/group/UpdateGroupMembersAsyncTask.java
@@ -0,0 +1,130 @@
+/*
+ * 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.group;
+
+import android.content.Context;
+import android.content.Intent;
+import android.database.Cursor;
+import android.net.Uri;
+import android.os.AsyncTask;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.RawContacts;
+import android.widget.Toast;
+
+import com.android.contacts.ContactSaveService;
+import com.android.contacts.R;
+import com.android.contacts.activities.PeopleActivity;
+
+/**
+ * Starts an Intent to add/remove the raw contacts for the given contact IDs to/from a group.
+ * Only the raw contacts that belong to the specified account are added or removed.
+ */
+public class UpdateGroupMembersAsyncTask extends AsyncTask<Void, Void, Intent> {
+    static final int TYPE_ADD = 0;
+    static final int TYPE_REMOVE = 1;
+
+    private final Context mContext;
+    private final int mType;
+    private final long[] mContactIds;
+    private final long mGroupId;
+    private final String mAccountName;
+    private final String mAccountType;
+    private final String mDataSet;
+
+    public UpdateGroupMembersAsyncTask(int type, Context context, long[] contactIds,
+            long groupId, String accountName, String accountType, String dataSet) {
+        mContext = context;
+        mType = type;
+        mContactIds = contactIds;
+        mGroupId = groupId;
+        mAccountName = accountName;
+        mAccountType = accountType;
+        mDataSet = dataSet;
+    }
+
+    @Override
+    protected Intent doInBackground(Void... params) {
+        final long[] rawContactIds = getRawContactIds();
+        if (rawContactIds.length == 0) {
+            return null;
+        }
+        final long[] rawContactIdsToAdd;
+        final long[] rawContactIdsToRemove;
+        final String action;
+        if (mType == TYPE_ADD) {
+            rawContactIdsToAdd = rawContactIds;
+            rawContactIdsToRemove = null;
+            action = GroupUtil.ACTION_ADD_TO_GROUP;
+        } else if (mType == TYPE_REMOVE) {
+            rawContactIdsToAdd = null;
+            rawContactIdsToRemove = rawContactIds;
+            action = GroupUtil.ACTION_REMOVE_FROM_GROUP;
+        } else {
+            throw new IllegalStateException("Unrecognized type " + mType);
+        }
+        return ContactSaveService.createGroupUpdateIntent(
+                mContext, mGroupId, /* newLabel */ null, rawContactIdsToAdd,
+                rawContactIdsToRemove, PeopleActivity.class, action);
+    }
+
+    // TODO(wjang): prune raw contacts that are already in the group; ContactSaveService will
+    // log a warning if the raw contact is already a member and keep going but it is not ideal.
+    private long[] getRawContactIds() {
+        final Uri.Builder builder = RawContacts.CONTENT_URI.buildUpon();
+        // null account names are not valid, see ContactsProvider2#appendAccountFromParameter
+        if (mAccountName != null) {
+            builder.appendQueryParameter(RawContacts.ACCOUNT_NAME, mAccountName);
+            builder.appendQueryParameter(RawContacts.ACCOUNT_TYPE, mAccountType);
+        }
+        if (mDataSet != null) {
+            builder.appendQueryParameter(RawContacts.DATA_SET, mDataSet);
+        }
+        final Uri rawContactUri = builder.build();
+        final String[] projection = new String[]{ContactsContract.RawContacts._ID};
+        final StringBuilder selection = new StringBuilder();
+        final String[] selectionArgs = new String[mContactIds.length];
+        for (int i = 0; i < mContactIds.length; i++) {
+            if (i > 0) {
+                selection.append(" OR ");
+            }
+            selection.append(ContactsContract.RawContacts.CONTACT_ID).append("=?");
+            selectionArgs[i] = Long.toString(mContactIds[i]);
+        }
+        final Cursor cursor = mContext.getContentResolver().query(
+                rawContactUri, projection, selection.toString(), selectionArgs, null, null);
+        final long[] rawContactIds = new long[cursor.getCount()];
+        try {
+            int i = 0;
+            while (cursor.moveToNext()) {
+                rawContactIds[i] = cursor.getLong(0);
+                i++;
+            }
+        } finally {
+            cursor.close();
+        }
+        return rawContactIds;
+    }
+
+    @Override
+    protected void onPostExecute(Intent intent) {
+        if (intent == null) {
+            Toast.makeText(mContext, R.string.groupSavedErrorToast, Toast.LENGTH_SHORT).show();
+        } else {
+            mContext.startService(intent);
+        }
+    }
+}
diff --git a/src/com/android/contacts/interactions/ContactDeletionInteraction.java b/src/com/android/contacts/interactions/ContactDeletionInteraction.java
index c9a5a9b..ec500f3 100644
--- a/src/com/android/contacts/interactions/ContactDeletionInteraction.java
+++ b/src/com/android/contacts/interactions/ContactDeletionInteraction.java
@@ -66,6 +66,7 @@
         Entity.DATA_SET, // 2
         Entity.CONTACT_ID, // 3
         Entity.LOOKUP_KEY, // 4
+        Entity.DISPLAY_NAME, // 5
     };
 
     private static final int COLUMN_INDEX_RAW_CONTACT_ID = 0;
@@ -73,9 +74,11 @@
     private static final int COLUMN_INDEX_DATA_SET = 2;
     private static final int COLUMN_INDEX_CONTACT_ID = 3;
     private static final int COLUMN_INDEX_LOOKUP_KEY = 4;
+    private static final int COLUMN_INDEX_DISPLAY_NAME = 5;
 
     private boolean mActive;
     private Uri mContactUri;
+    private String mDisplayName;
     private boolean mFinishActivityWhenDone;
     private Context mContext;
     private AlertDialog mDialog;
@@ -248,6 +251,7 @@
             final String dataSet = cursor.getString(COLUMN_INDEX_DATA_SET);
             contactId = cursor.getLong(COLUMN_INDEX_CONTACT_ID);
             lookupKey = cursor.getString(COLUMN_INDEX_LOOKUP_KEY);
+            mDisplayName = cursor.getString(COLUMN_INDEX_DISPLAY_NAME);
             AccountType type = accountTypes.getAccountType(accountType, dataSet);
             boolean writable = type == null || type.areContactsWritable();
             if (writable) {
@@ -338,8 +342,14 @@
         if (isAdded() && mFinishActivityWhenDone) {
             getActivity().setResult(RESULT_CODE_DELETED);
             getActivity().finish();
-            final String deleteToastMessage = getResources().getQuantityString(R.plurals
-                    .contacts_deleted_toast, /* quantity */ 1);
+            final String deleteToastMessage;
+            if (mDisplayName == null) {
+                deleteToastMessage = getResources().getQuantityString(
+                        R.plurals.contacts_deleted_toast, /* quantity */ 1);
+            } else {
+                deleteToastMessage = getResources().getString(
+                        R.string.contact_deleted_named_toast, mDisplayName);
+            }
             Toast.makeText(mContext, deleteToastMessage, Toast.LENGTH_LONG).show();
         }
     }
diff --git a/src/com/android/contacts/interactions/ContactMultiDeletionInteraction.java b/src/com/android/contacts/interactions/ContactMultiDeletionInteraction.java
index 173f66e..ff0d978 100644
--- a/src/com/android/contacts/interactions/ContactMultiDeletionInteraction.java
+++ b/src/com/android/contacts/interactions/ContactMultiDeletionInteraction.java
@@ -75,21 +75,22 @@
     private TreeSet<Long> mContactIds;
     private Context mContext;
     private AlertDialog mDialog;
+    private MultiContactDeleteListener mListener;
 
     /**
      * Starts the interaction.
      *
-     * @param activity the activity within which to start the interaction
+     * @param hostFragment the fragment within which to start the interaction
      * @param contactIds the IDs of contacts to be deleted
      * @return the newly created interaction
      */
     public static ContactMultiDeletionInteraction start(
-            Activity activity, TreeSet<Long> contactIds) {
+            Fragment hostFragment, TreeSet<Long> contactIds) {
         if (contactIds == null) {
             return null;
         }
 
-        final FragmentManager fragmentManager = activity.getFragmentManager();
+        final FragmentManager fragmentManager = hostFragment.getFragmentManager();
         ContactMultiDeletionInteraction fragment =
                 (ContactMultiDeletionInteraction) fragmentManager.findFragmentByTag(FRAGMENT_TAG);
         if (fragment == null) {
@@ -291,13 +292,10 @@
     protected void doDeleteContact(long[] contactIds) {
         mContext.startService(ContactSaveService.createDeleteMultipleContactsIntent(mContext,
                 contactIds));
-        notifyListenerActivity();
+        mListener.onDeletionFinished();
     }
 
-    private void notifyListenerActivity() {
-        if (getActivity() instanceof MultiContactDeleteListener) {
-            final MultiContactDeleteListener listener = (MultiContactDeleteListener) getActivity();
-            listener.onDeletionFinished();
-        }
+    public void setListener(MultiContactDeleteListener listener) {
+        mListener = listener;
     }
 }
diff --git a/src/com/android/contacts/interactions/GroupDeletionDialogFragment.java b/src/com/android/contacts/interactions/GroupDeletionDialogFragment.java
index e247536..5c5609d 100644
--- a/src/com/android/contacts/interactions/GroupDeletionDialogFragment.java
+++ b/src/com/android/contacts/interactions/GroupDeletionDialogFragment.java
@@ -23,6 +23,7 @@
 import android.os.Bundle;
 
 import com.android.contacts.ContactSaveService;
+import com.android.contacts.ContactsDrawerActivity;
 import com.android.contacts.R;
 
 /**
@@ -64,8 +65,9 @@
 
     protected void deleteGroup() {
         final long groupId = getArguments().getLong(ARG_GROUP_ID);
-        getActivity().startService(ContactSaveService.createGroupDeletionIntent(
+        final ContactsDrawerActivity activity = ((ContactsDrawerActivity) getActivity());
+        activity.startService(ContactSaveService.createGroupDeletionIntent(
                 getActivity(), groupId));
-        getActivity().finish();
+        activity.switchToAllContacts();
     }
 }
diff --git a/src/com/android/contacts/list/ContactBrowseListFragment.java b/src/com/android/contacts/list/ContactBrowseListFragment.java
index 752201b..c8da194 100644
--- a/src/com/android/contacts/list/ContactBrowseListFragment.java
+++ b/src/com/android/contacts/list/ContactBrowseListFragment.java
@@ -92,7 +92,7 @@
     private boolean mSelectionVerified;
     private int mLastSelectedPosition = -1;
     private boolean mRefreshingContactUri;
-    private ContactListFilter mFilter;
+    protected ContactListFilter mFilter;
     private String mPersistentSelectionPrefix = PERSISTENT_SELECTION_PREFIX;
 
     protected OnContactBrowserActionListener mListener;
@@ -194,11 +194,7 @@
         }
     }
 
-    public void setFilter(ContactListFilter filter) {
-        setFilter(filter, true);
-    }
-
-    public void setFilter(ContactListFilter filter, boolean restoreSelectedUri) {
+    public void updateListFilter(ContactListFilter filter, boolean restoreSelectedUri) {
         if (mFilter == null && filter == null) {
             return;
         }
@@ -210,17 +206,11 @@
 
         Log.v(TAG, "New filter: " + filter);
 
-        setListType(filter.filterType == ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS
-                ? ListType.ALL_CONTACTS : ListType.ACCOUNT);
+        setListType(filter.toListType());
         setLogListEvents(true);
-
         mFilter = filter;
         mLastSelectedPosition = -1;
 
-        if (filter.filterType == ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS) {
-            saveFilter();
-        }
-
         if (restoreSelectedUri) {
             mSelectedContactUri = null;
             restoreSelectedUri(true);
@@ -679,9 +669,4 @@
             return mPersistentSelectionPrefix + "-" + mFilter.getId();
         }
     }
-
-    public boolean isOptionsMenuChanged() {
-        // This fragment does not have an option menu of its own
-        return false;
-    }
 }
diff --git a/src/com/android/contacts/list/ContactsIntentResolver.java b/src/com/android/contacts/list/ContactsIntentResolver.java
index 354ea3a..8e93baf 100644
--- a/src/com/android/contacts/list/ContactsIntentResolver.java
+++ b/src/com/android/contacts/list/ContactsIntentResolver.java
@@ -35,6 +35,7 @@
 import android.util.Log;
 
 import com.android.contacts.common.model.account.AccountWithDataSet;
+import com.android.contacts.group.GroupUtil;
 
 /**
  * Parses a Contacts intent, extracting all relevant parts and packaging them
@@ -150,11 +151,19 @@
             if (ContactsContract.Contacts.CONTENT_TYPE.equals(resolvedType)
                     || android.provider.Contacts.People.CONTENT_TYPE.equals(resolvedType)) {
                 request.setActionCode(ContactsRequest.ACTION_ALL_CONTACTS);
-            } else {
+            } else if (!GroupUtil.isGroupUri(intent.getData())){
                 request.setActionCode(ContactsRequest.ACTION_VIEW_CONTACT);
                 request.setContactUri(intent.getData());
                 intent.setAction(Intent.ACTION_DEFAULT);
                 intent.setData(null);
+            } else {
+                request.setActionCode(ContactsRequest.ACTION_VIEW_GROUP);
+                request.setContactUri(intent.getData());
+            }
+        } else if (Intent.ACTION_EDIT.equals(action)) {
+            if (GroupUtil.isGroupUri(intent.getData())){
+                request.setActionCode(ContactsRequest.ACTION_EDIT_GROUP);
+                request.setContactUri(intent.getData());
             }
         // Since this is the filter activity it receives all intents
         // dispatched from the SearchManager for security reasons
diff --git a/src/com/android/contacts/list/ContactsRequest.java b/src/com/android/contacts/list/ContactsRequest.java
index e9b3a86..de6a4ba 100644
--- a/src/com/android/contacts/list/ContactsRequest.java
+++ b/src/com/android/contacts/list/ContactsRequest.java
@@ -45,6 +45,12 @@
     /** Create a new group */
     public static final int ACTION_INSERT_GROUP = 22;
 
+    /** View a group */
+    public static final int ACTION_VIEW_GROUP = 23;
+
+    /** Edit a group */
+    public static final int ACTION_EDIT_GROUP = 24;
+
     /** Show all starred contacts */
     public static final int ACTION_STARRED = 30;
 
diff --git a/src/com/android/contacts/list/ContactsUnavailableFragment.java b/src/com/android/contacts/list/ContactsUnavailableFragment.java
index 1b122cc..488463d 100644
--- a/src/com/android/contacts/list/ContactsUnavailableFragment.java
+++ b/src/com/android/contacts/list/ContactsUnavailableFragment.java
@@ -17,9 +17,11 @@
 
 import android.app.Fragment;
 import android.content.Context;
+import android.content.Intent;
 import android.content.res.Configuration;
 import android.graphics.PorterDuff;
 import android.os.Bundle;
+import android.provider.ContactsContract.ProviderStatus;
 import android.support.v4.content.ContextCompat;
 import android.view.Gravity;
 import android.view.LayoutInflater;
@@ -33,8 +35,9 @@
 import android.widget.TextView;
 
 import com.android.contacts.R;
-import com.android.contacts.activities.ActionBarAdapter.TabState;
 import com.android.contacts.common.compat.ProviderStatusCompat;
+import com.android.contacts.common.interactions.ImportDialogFragment;
+import com.android.contacts.common.util.ImplicitIntentsUtil;
 
 /**
  * Fragment shown when contacts are unavailable. It contains provider status
@@ -49,19 +52,10 @@
     private Button mImportContactsButton;
     private ProgressBar mProgress;
     private View mButtonsContainer;
-    private int mNoContactsMsgResId = -1;
-    private int mLastTab = -1;
-
-    private OnContactsUnavailableActionListener mListener;
 
     private Integer mProviderStatus;
 
     @Override
-    public void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-    }
-
-    @Override
     public View onCreateView(
             LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
         mView = inflater.inflate(R.layout.contacts_unavailable_fragment, null);
@@ -101,11 +95,6 @@
         return mView;
     }
 
-    public void setOnContactsUnavailableActionListener(
-            OnContactsUnavailableActionListener listener) {
-        mListener = listener;
-    }
-
     public void updateStatus(int providerStatus) {
         mProviderStatus = providerStatus;
         if (mView == null) {
@@ -125,10 +114,7 @@
      * Update views in the fragment when provider status is empty.
      */
     private void updateViewsForEmptyStatus() {
-        setTabInfo(mNoContactsMsgResId, mLastTab);
-        if (mLastTab == TabState.ALL) {
-            updateButtonVisibilty(View.VISIBLE);
-        }
+        updateButtonVisibility(View.VISIBLE);
         mProgress.setVisibility(View.GONE);
     }
 
@@ -141,7 +127,7 @@
         mMessageView.setText(resId);
         mMessageView.setVisibility(View.VISIBLE);
         mImageView.setVisibility(View.GONE);
-        updateButtonVisibilty(View.GONE);
+        updateButtonVisibility(View.GONE);
         mProgress.setVisibility(View.VISIBLE);
 
         final ViewGroup.MarginLayoutParams layoutParams =
@@ -154,43 +140,23 @@
 
     @Override
     public void onClick(View v) {
-        if (mListener == null) {
-            return;
-        }
         switch (v.getId()) {
             case R.id.add_account_button:
-                mListener.onAddAccountAction();
+                final Intent intent = ImplicitIntentsUtil.getIntentForAddingGoogleAccount();
+                ImplicitIntentsUtil.startActivityOutsideApp(getActivity(), intent);
                 break;
             case R.id.import_contacts_button:
-                mListener.onImportContactsFromFileAction();
+                ImportDialogFragment.show(getFragmentManager(), getActivity().getClass());
                 break;
         }
     }
 
-    /**
-     * Set the message to be shown if no data is available for the selected tab
-     *
-     * @param resId - String resource ID of the message , -1 means view will not be visible
-     */
-    public void setTabInfo(int resId, int callerTab) {
-        mNoContactsMsgResId = resId;
-        mLastTab = callerTab;
-        if ((mMessageView != null) && (mProviderStatus != null) &&
-                mProviderStatus.equals(ProviderStatusCompat.STATUS_EMPTY)) {
-            if (resId != -1) {
-                mMessageView.setText(mNoContactsMsgResId);
-                mMessageView.setGravity(Gravity.CENTER_HORIZONTAL);
-                mMessageView.setVisibility(View.VISIBLE);
-                if (callerTab == TabState.ALL) {
-                    updateButtonVisibilty(View.VISIBLE);
-                }
-            } else {
-                mMessageView.setVisibility(View.GONE);
-            }
-        }
+    private boolean areContactsAvailable() {
+        return (mProviderStatus != null) && mProviderStatus.equals(ProviderStatus.STATUS_NORMAL);
     }
 
-    private void updateButtonVisibilty(int visibility) {
+
+    private void updateButtonVisibility(int visibility) {
         if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
             mAddAccountButton.setVisibility(visibility);
             mImportContactsButton.setVisibility(visibility);
diff --git a/src/com/android/contacts/list/DefaultContactBrowseListFragment.java b/src/com/android/contacts/list/DefaultContactBrowseListFragment.java
index afaafb7..dd45fc2 100644
--- a/src/com/android/contacts/list/DefaultContactBrowseListFragment.java
+++ b/src/com/android/contacts/list/DefaultContactBrowseListFragment.java
@@ -15,15 +15,31 @@
  */
 package com.android.contacts.list;
 
+import android.accounts.Account;
+import android.app.Activity;
+import android.content.ActivityNotFoundException;
+import android.content.ContentResolver;
+import android.content.ContentUris;
 import android.content.Context;
 import android.content.CursorLoader;
+import android.content.Intent;
 import android.content.Loader;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
 import android.database.Cursor;
+import android.graphics.Rect;
 import android.net.Uri;
+import android.os.Bundle;
+import android.provider.ContactsContract;
 import android.provider.ContactsContract.Directory;
+import android.support.v4.widget.SwipeRefreshLayout;
 import android.text.TextUtils;
+import android.util.Log;
 import android.view.Gravity;
 import android.view.LayoutInflater;
+import android.view.Menu;
+import android.view.MenuInflater;
+import android.view.MenuItem;
 import android.view.View;
 import android.view.ViewGroup;
 import android.view.accessibility.AccessibilityEvent;
@@ -32,32 +48,188 @@
 import android.widget.ImageView;
 import android.widget.LinearLayout.LayoutParams;
 import android.widget.TextView;
+import android.widget.Toast;
 
+import com.android.contacts.ContactSaveService;
+import com.android.contacts.ContactsDrawerActivity;
 import com.android.contacts.R;
-import com.android.contacts.activities.PeopleActivity;
+import com.android.contacts.activities.ActionBarAdapter;
+import com.android.contacts.common.Experiments;
+import com.android.contacts.common.compat.CompatUtils;
+import com.android.contacts.common.list.ContactEntryListFragment;
 import com.android.contacts.common.list.ContactListAdapter;
 import com.android.contacts.common.list.ContactListFilter;
+import com.android.contacts.common.list.ContactListFilterController;
+import com.android.contacts.common.list.ContactListFilterController.ContactListFilterListener;
 import com.android.contacts.common.list.ContactListItemView;
 import com.android.contacts.common.list.DefaultContactListAdapter;
+import com.android.contacts.common.list.DirectoryListLoader;
 import com.android.contacts.common.list.FavoritesAndContactsLoader;
+import com.android.contacts.common.logging.ListEvent;
+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.AccountWithDataSet;
+import com.android.contacts.common.util.AccountFilterUtil;
+import com.android.contacts.common.util.ImplicitIntentsUtil;
+import com.android.contacts.interactions.ContactDeletionInteraction;
+import com.android.contacts.interactions.ContactMultiDeletionInteraction;
+import com.android.contacts.interactions.ContactMultiDeletionInteraction.MultiContactDeleteListener;
+import com.android.contacts.quickcontact.QuickContactActivity;
+import com.android.contacts.util.SharedPreferenceUtil;
+import com.android.contacts.util.SyncUtil;
+import com.android.contactsbind.experiments.Flags;
+import com.android.contactsbind.FeatureHighlightHelper;
+
+import java.util.List;
+import java.util.Locale;
 
 /**
  * Fragment containing a contact list used for browsing (as compared to
  * picking a contact with one of the PICK intents).
  */
 public class DefaultContactBrowseListFragment extends ContactBrowseListFragment {
+
+    private static final String TAG = "DefaultListFragment";
+    private static final String ENABLE_DEBUG_OPTIONS_HIDDEN_CODE = "debug debug!";
+    private static final String KEY_DELETION_IN_PROGRESS = "deletionInProgress";
+
+    private static final int ACTIVITY_REQUEST_CODE_SHARE = 0;
+
     private View mSearchHeaderView;
     private View mSearchProgress;
     private View mEmptyAccountView;
     private View mEmptyHomeView;
     private View mAccountFilterContainer;
     private TextView mSearchProgressText;
-    private FeatureHighlightCallback mCallback;
+    private SwipeRefreshLayout mSwipeRefreshLayout;
 
-    public interface FeatureHighlightCallback {
-        void onLoadFinishedCallback();
-    }
+    private boolean mContactsAvailable;
+    private boolean mEnableDebugMenuOptions;
+    private boolean mIsRecreatedInstance;
+    private boolean mOptionsMenuContactsAvailable;
+
+    /**
+     * If {@link #configureFragment()} is already called. Used to avoid calling it twice
+     * in {@link #onResume()}.
+     * (This initialization only needs to be done once in onResume() when the Activity was just
+     * created from scratch -- i.e. onCreate() was just called)
+     */
+    private boolean mFragmentInitialized;
+
+    private boolean mFromOnNewIntent;
+
+    /**
+     * This is to tell whether we need to restart ContactMultiDeletionInteraction and set listener.
+     * if screen is rotated while deletion dialog is shown.
+     */
+    private boolean mIsDeletionInProgress;
+
+    /**
+     * This is to disable {@link #onOptionsItemSelected} when we trying to stop the
+     * activity/fragment.
+     */
+    private boolean mDisableOptionItemSelected;
+
+    private ActionBarAdapter mActionBarAdapter;
+    private ContactsDrawerActivity mActivity;
+    private ContactsRequest mContactsRequest;
+    private ContactListFilterController mContactListFilterController;
+
+    private final ContactListFilterListener mFilterListener = new ContactListFilterListener() {
+        @Override
+        public void onContactListFilterChanged() {
+            setFilterAndUpdateTitle(getFilter());
+
+            // Scroll to top after filter is changed.
+            getListView().setSelection(0);
+
+            mActivity.invalidateOptionsMenu();
+        }
+    };
+
+    private final ActionBarAdapter.Listener mActionBarListener = new ActionBarAdapter.Listener() {
+        @Override
+        public void onAction(int action) {
+            switch (action) {
+                case ActionBarAdapter.Listener.Action.START_SELECTION_MODE:
+                    displayCheckBoxes(true);
+                    startSearchOrSelectionMode();
+                    break;
+                case ActionBarAdapter.Listener.Action.START_SEARCH_MODE:
+                    if (!mIsRecreatedInstance) {
+                        Logger.logScreenView(mActivity, ScreenEvent.ScreenType.SEARCH);
+                    }
+                    startSearchOrSelectionMode();
+                    break;
+                case ActionBarAdapter.Listener.Action.BEGIN_STOPPING_SEARCH_AND_SELECTION_MODE:
+                    mActivity.showFabWithAnimation(/* showFab */ true);
+                    break;
+                case ActionBarAdapter.Listener.Action.STOP_SEARCH_AND_SELECTION_MODE:
+                    // If queryString is empty, fragment data will not be reloaded,
+                    // so hamburger promo should be checked now.
+                    // Otherwise, promo should be checked and displayed after reloading, b/30706521.
+                    if (TextUtils.isEmpty(getQueryString())) {
+                        maybeShowHamburgerFeatureHighlight();
+                    }
+                    setQueryTextToFragment("");
+                    maybeHideCheckBoxes();
+                    mActivity.invalidateOptionsMenu();
+                    mActivity.showFabWithAnimation(/* showFab */ true);
+                    // Determine whether the account has pullToRefresh feature
+                    if (Flags.getInstance(getContext()).getBoolean(Experiments.PULL_TO_REFRESH)) {
+                        setSwipeRefreshLayoutEnabledOrNot(getFilter());
+                    }
+                    break;
+                case ActionBarAdapter.Listener.Action.CHANGE_SEARCH_QUERY:
+                    final String queryString = mActionBarAdapter.getQueryString();
+                    setQueryTextToFragment(queryString);
+                    updateDebugOptionsVisibility(
+                            ENABLE_DEBUG_OPTIONS_HIDDEN_CODE.equals(queryString));
+                    break;
+                default:
+                    throw new IllegalStateException("Unknown ActionBarAdapter action: " + action);
+            }
+        }
+
+        private void startSearchOrSelectionMode() {
+            configureContactListFragment();
+            maybeHideCheckBoxes();
+            mActivity.invalidateOptionsMenu();
+            mActivity.showFabWithAnimation(/* showFab */ false);
+
+            final Context context = getContext();
+            if (!SharedPreferenceUtil.getHamburgerPromoTriggerActionHappenedBefore(context)) {
+                SharedPreferenceUtil.setHamburgerPromoTriggerActionHappenedBefore(context);
+            }
+        }
+
+        private void updateDebugOptionsVisibility(boolean visible) {
+            if (mEnableDebugMenuOptions != visible) {
+                mEnableDebugMenuOptions = visible;
+                mActivity.invalidateOptionsMenu();
+            }
+        }
+
+        private void setQueryTextToFragment(String query) {
+            setQueryString(query, true);
+            setVisibleScrollbarEnabled(!isSearchMode());
+        }
+
+        @Override
+        public void onUpButtonPressed() {
+            mActivity.onBackPressed();
+        }
+    };
+
+    private final View.OnClickListener mAddContactListener = new View.OnClickListener() {
+        @Override
+        public void onClick(View v) {
+            AccountFilterUtil.startEditorIntent(getContext(), mActivity.getIntent(), getFilter());
+        }
+    };
 
     public DefaultContactBrowseListFragment() {
         setPhotoLoaderEnabled(true);
@@ -67,10 +239,7 @@
         setSectionHeaderDisplayEnabled(true);
         setVisibleScrollbarEnabled(true);
         setDisplayDirectoryHeader(false);
-    }
-
-    public void setFeatureHighlightCallback(FeatureHighlightCallback callback) {
-        mCallback = callback;
+        setHasOptionsMenu(true);
     }
 
     @Override
@@ -84,14 +253,26 @@
             bindListHeader(data.getCount());
         }
         super.onLoadFinished(loader, data);
-        if (!isSearchMode() && mCallback != null) {
-            mCallback.onLoadFinishedCallback();
+        if (!isSearchMode()) {
+            maybeShowHamburgerFeatureHighlight();
+        }
+    }
+
+    private void maybeShowHamburgerFeatureHighlight() {
+        if (mActionBarAdapter!= null && !mActionBarAdapter.isSearchMode()
+                && !mActionBarAdapter.isSelectionMode()
+                && SharedPreferenceUtil.getShouldShowHamburgerPromo(getContext())) {
+            if (FeatureHighlightHelper.showHamburgerFeatureHighlight(mActivity)) {
+                SharedPreferenceUtil.setHamburgerPromoDisplayedBefore(getContext());
+            }
         }
     }
 
     private void bindListHeader(int numberOfContacts) {
         final ContactListFilter filter = getFilter();
-        if (!isSearchMode() && numberOfContacts <= 0) {
+        // If the phone has at least one Google account whose sync status is unsyncable or pending
+        // or active, we have to make mAccountFilterContainer visible.
+        if (!isSearchMode() && numberOfContacts <= 0 && shouldShowEmptyView(filter)) {
             if (filter != null && filter.isContactsFilterType()) {
                 makeViewVisible(mEmptyHomeView);
             } else {
@@ -114,6 +295,38 @@
         }
     }
 
+    /**
+     * If at least one Google account is unsyncable or its sync status is pending or active, we
+     * should not show empty view even if the number of contacts is 0. We should show sync status
+     * with empty list instead.
+     */
+    private boolean shouldShowEmptyView(ContactListFilter filter) {
+        if (filter == null) {
+            return true;
+        }
+        // TODO(samchen) : Check ContactListFilter.FILTER_TYPE_CUSTOM
+        if (ContactListFilter.FILTER_TYPE_DEFAULT == filter.filterType
+                || ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS == filter.filterType) {
+            final List<AccountWithDataSet> accounts = AccountTypeManager.getInstance(getContext())
+                    .getAccounts(/* contactsWritableOnly */ true);
+            final List<Account> syncableAccounts = filter.getSyncableAccounts(accounts);
+
+            if (syncableAccounts != null && syncableAccounts.size() > 0) {
+                for (Account account : syncableAccounts) {
+                    if (SyncUtil.isSyncStatusPendingOrActive(account)
+                            || SyncUtil.isUnsyncableGoogleAccount(account)) {
+                        return false;
+                    }
+                }
+            }
+        } else if (ContactListFilter.FILTER_TYPE_ACCOUNT == filter.filterType) {
+            final Account account = new Account(filter.accountName, filter.accountType);
+            return !(SyncUtil.isSyncStatusPendingOrActive(account)
+                    || SyncUtil.isUnsyncableGoogleAccount(account));
+        }
+        return true;
+    }
+
     // Show the view that's specified by id and hide the other two.
     private void makeViewVisible(View view) {
         mEmptyAccountView.setVisibility(view == mEmptyAccountView ? View.VISIBLE : View.GONE);
@@ -146,6 +359,11 @@
     }
 
     @Override
+    public ContactListFilter getFilter() {
+        return mContactListFilterController.getFilter();
+    }
+
+    @Override
     protected View inflateView(LayoutInflater inflater, ViewGroup container) {
         final View view = inflater.inflate(R.layout.contact_list_content, null);
 
@@ -176,12 +394,7 @@
         // Set up add contact button.
         final Button addContactButton =
                 (Button) emptyHomeView.findViewById(R.id.add_contact_button);
-        addContactButton.setOnClickListener(new View.OnClickListener() {
-            @Override
-            public void onClick(View v) {
-                ((PeopleActivity) getActivity()).onFabClicked();
-            }
-        });
+        addContactButton.setOnClickListener(mAddContactListener);
         return emptyHomeView;
     }
 
@@ -202,22 +415,36 @@
         // Set up add contact button.
         final Button addContactButton =
                 (Button) emptyAccountView.findViewById(R.id.add_contact_button);
-        addContactButton.setOnClickListener(new View.OnClickListener() {
-            @Override
-            public void onClick(View v) {
-                ((PeopleActivity) getActivity()).onFabClicked();
-            }
-        });
+        addContactButton.setOnClickListener(mAddContactListener);
         return emptyAccountView;
     }
 
     @Override
+    public void onCreate(Bundle savedState) {
+        super.onCreate(savedState);
+        mIsRecreatedInstance = (savedState != null);
+        mContactListFilterController = ContactListFilterController.getInstance(getContext());
+        mContactListFilterController.checkFilterValidity(false);
+        mContactListFilterController.addListener(mFilterListener);
+        // 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);
+    }
+
+    @Override
     protected void onCreateView(LayoutInflater inflater, ViewGroup container) {
         super.onCreateView(inflater, container);
 
+        if (Flags.getInstance(getContext()).getBoolean(Experiments.PULL_TO_REFRESH)) {
+            initSwipeRefreshLayout();
+        }
         // Putting the header view inside a container will allow us to make
         // it invisible later. See checkHeaderViewVisibility()
-        FrameLayout headerContainer = new FrameLayout(inflater.getContext());
+        final FrameLayout headerContainer = new FrameLayout(inflater.getContext());
         mSearchHeaderView = inflater.inflate(R.layout.search_header, null, false);
         headerContainer.addView(mSearchHeaderView);
         getListView().addHeaderView(headerContainer, null, false);
@@ -227,6 +454,169 @@
         mSearchProgressText = (TextView) mSearchHeaderView.findViewById(R.id.totalContactsText);
     }
 
+    private void initSwipeRefreshLayout() {
+        mSwipeRefreshLayout = (SwipeRefreshLayout) mView.findViewById(R.id.swipe_refresh);
+        if (mSwipeRefreshLayout == null) {
+            return;
+        }
+
+        mSwipeRefreshLayout.setEnabled(true);
+        // Request sync contacts
+        mSwipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
+            @Override
+            public void onRefresh() {
+                syncContacts(mFilter);
+            }
+        });
+        mSwipeRefreshLayout.setColorSchemeResources(
+                R.color.swipe_refresh_color1,
+                R.color.swipe_refresh_color2,
+                R.color.swipe_refresh_color3,
+                R.color.swipe_refresh_color4);
+        mSwipeRefreshLayout.setDistanceToTriggerSync(
+                (int) getResources().getDimension(R.dimen.pull_to_refresh_distance));
+    }
+
+    /**
+     * Request sync for the Google accounts (not include Google+ accounts) specified by the given
+     * filter.
+     */
+    private void syncContacts(ContactListFilter filter) {
+        if (filter == null) {
+            return;
+        }
+        final Bundle bundle = new Bundle();
+        bundle.putBoolean(ContentResolver.SYNC_EXTRAS_EXPEDITED, true);
+        bundle.putBoolean(ContentResolver.SYNC_EXTRAS_MANUAL, true);
+
+        final List<AccountWithDataSet> accounts = AccountTypeManager.getInstance(
+                getContext()).getAccounts(/* contactsWritableOnly */ true);
+        final List<Account> syncableAccounts = filter.getSyncableAccounts(accounts);
+        if (syncableAccounts != null && syncableAccounts.size() > 0) {
+            for (Account account : syncableAccounts) {
+                // We can prioritize Contacts sync if sync is not initialized yet.
+                if (!SyncUtil.isSyncStatusPendingOrActive(account)
+                        || SyncUtil.isUnsyncableGoogleAccount(account)) {
+                    ContentResolver.requestSync(account, ContactsContract.AUTHORITY, bundle);
+                }
+            }
+        }
+    }
+
+    @Override
+    public void onActivityCreated(Bundle savedInstanceState) {
+        super.onActivityCreated(savedInstanceState);
+
+        mActivity = (ContactsDrawerActivity) getActivity();
+        mActionBarAdapter = new ActionBarAdapter(mActivity, mActionBarListener,
+                mActivity.getSupportActionBar(), mActivity.getToolbar(),
+                R.string.enter_contact_name);
+        mActionBarAdapter.setShowHomeIcon(true);
+        initializeActionBarAdapter(savedInstanceState);
+        if (isSearchMode()) {
+            mActionBarAdapter.setFocusOnSearchView();
+        }
+
+        setCheckBoxListListener(new CheckBoxListListener());
+        setOnContactListActionListener(new ContactBrowserActionListener());
+        if (savedInstanceState != null && savedInstanceState.getBoolean(KEY_DELETION_IN_PROGRESS)) {
+            deleteSelectedContacts();
+        }
+    }
+
+    public void initializeActionBarAdapter(Bundle savedInstanceState) {
+        if (mActionBarAdapter != null) {
+            mActionBarAdapter.initialize(savedInstanceState, mContactsRequest);
+        }
+    }
+
+    private void configureFragment() {
+        if (mFragmentInitialized && !mFromOnNewIntent) {
+            return;
+        }
+
+        mFragmentInitialized = true;
+
+        if (mFromOnNewIntent || !mIsRecreatedInstance) {
+            mFromOnNewIntent = false;
+            configureFragmentForRequest();
+        }
+
+        configureContactListFragment();
+    }
+
+    private void configureFragmentForRequest() {
+        ContactListFilter filter = null;
+        final int actionCode = mContactsRequest.getActionCode();
+        boolean searchMode = mContactsRequest.isSearchMode();
+        switch (actionCode) {
+            case ContactsRequest.ACTION_ALL_CONTACTS:
+                filter = AccountFilterUtil.createContactsFilter(getContext());
+                break;
+            case ContactsRequest.ACTION_CONTACTS_WITH_PHONES:
+                filter = ContactListFilter.createFilterWithType(
+                        ContactListFilter.FILTER_TYPE_WITH_PHONE_NUMBERS_ONLY);
+                break;
+
+            case ContactsRequest.ACTION_FREQUENT:
+            case ContactsRequest.ACTION_STREQUENT:
+            case ContactsRequest.ACTION_STARRED:
+            case ContactsRequest.ACTION_VIEW_CONTACT:
+            default:
+                break;
+        }
+
+        if (filter != null) {
+            setContactListFilter(filter);
+            searchMode = false;
+        }
+
+        if (mContactsRequest.getContactUri() != null) {
+            searchMode = false;
+        }
+
+        mActionBarAdapter.setSearchMode(searchMode);
+        configureContactListFragmentForRequest();
+    }
+
+    private void configureContactListFragmentForRequest() {
+        final Uri contactUri = mContactsRequest.getContactUri();
+        if (contactUri != null) {
+            setSelectedContactUri(contactUri);
+        }
+
+        setQueryString(mActionBarAdapter.getQueryString(), true);
+        setVisibleScrollbarEnabled(!isSearchMode());
+
+        if (mContactsRequest.isDirectorySearchEnabled()) {
+            setDirectorySearchMode(DirectoryListLoader.SEARCH_MODE_DEFAULT);
+        } else {
+            setDirectorySearchMode(DirectoryListLoader.SEARCH_MODE_NONE);
+        }
+    }
+
+    @Override
+    public void onResume() {
+        super.onResume();
+        configureFragment();
+        maybeShowHamburgerFeatureHighlight();
+        // Re-register the listener, which may have been cleared when onSaveInstanceState was
+        // called. See also: onSaveInstanceState
+        mActionBarAdapter.setListener(mActionBarListener);
+        mDisableOptionItemSelected = false;
+        maybeHideCheckBoxes();
+    }
+
+    private void maybeHideCheckBoxes() {
+        if (!mActionBarAdapter.isSelectionMode()) {
+            displayCheckBoxes(false);
+        }
+    }
+
+    public ActionBarAdapter getActionBarAdapter(){
+        return mActionBarAdapter;
+    }
+
     @Override
     protected void setSearchMode(boolean flag) {
         super.setSearchMode(flag);
@@ -275,4 +665,441 @@
             }
         }
     }
-}
\ No newline at end of file
+
+    public SwipeRefreshLayout getSwipeRefreshLayout() {
+        return mSwipeRefreshLayout;
+    }
+
+    private final class CheckBoxListListener implements OnCheckBoxListActionListener {
+        @Override
+        public void onStartDisplayingCheckBoxes() {
+            mActionBarAdapter.setSelectionMode(true);
+            mActivity.invalidateOptionsMenu();
+        }
+
+        @Override
+        public void onSelectedContactIdsChanged() {
+            mActionBarAdapter.setSelectionCount(getSelectedContactIds().size());
+            mActivity.invalidateOptionsMenu();
+        }
+
+        @Override
+        public void onStopDisplayingCheckBoxes() {
+            mActionBarAdapter.setSelectionMode(false);
+        }
+    }
+
+    private void setFilterAndUpdateTitle(ContactListFilter filter) {
+        setFilterAndUpdateTitle(filter, true);
+    }
+
+    private void setFilterAndUpdateTitle(ContactListFilter filter, boolean restoreSelectedUri) {
+        setContactListFilter(filter);
+        updateListFilter(filter, restoreSelectedUri);
+
+        final String actionBarTitle;
+        if (filter.filterType == ContactListFilter.FILTER_TYPE_DEVICE_CONTACTS) {
+            actionBarTitle = getString(R.string.account_phone);
+        } else if (!TextUtils.isEmpty(filter.accountName)) {
+            actionBarTitle = getActionBarTitleForAccount(filter);
+        } else {
+            actionBarTitle = getString(R.string.contactsList);
+        }
+        mActivity.setTitle(actionBarTitle);
+        mActivity.updateFilterMenu(filter);
+
+        if (CompatUtils.isNCompatible()) {
+            mActivity.getWindow().getDecorView()
+                    .sendAccessibilityEvent(AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED);
+        }
+
+        // Determine whether the account has pullToRefresh feature
+        if (Flags.getInstance(getContext()).getBoolean(Experiments.PULL_TO_REFRESH)) {
+            setSwipeRefreshLayoutEnabledOrNot(filter);
+        }
+    }
+
+    private String getActionBarTitleForAccount(ContactListFilter filter) {
+        final AccountDisplayInfoFactory factory = AccountDisplayInfoFactory
+                .forAllAccounts(getContext());
+        final AccountDisplayInfo account = factory.getAccountDisplayInfoFor(filter);
+        if (account.hasGoogleAccountType()) {
+            return getString(R.string.title_from_google);
+        }
+        return account.withFormattedName(getContext(), R.string.title_from_other_accounts)
+                .getNameLabel().toString();
+    }
+
+    private void setSwipeRefreshLayoutEnabledOrNot(ContactListFilter filter) {
+        final SwipeRefreshLayout swipeRefreshLayout = getSwipeRefreshLayout();
+        if (swipeRefreshLayout == null) {
+            if (Log.isLoggable(TAG, Log.DEBUG)) {
+                Log.d(TAG, "Can not load swipeRefreshLayout, swipeRefreshLayout is null");
+            }
+            return;
+        }
+
+        swipeRefreshLayout.setRefreshing(false);
+        swipeRefreshLayout.setEnabled(false);
+
+        if (filter != null && !mActionBarAdapter.isSearchMode()
+                && !mActionBarAdapter.isSelectionMode()) {
+            final List<AccountWithDataSet> accounts = AccountTypeManager.getInstance(getContext())
+                    .getAccounts(/* contactsWritableOnly */ true);
+            if (filter.isSyncable(accounts)) {
+                swipeRefreshLayout.setEnabled(true);
+            }
+        }
+    }
+
+    private void configureContactListFragment() {
+        // Filter may be changed when activity is in background.
+        setFilterAndUpdateTitle(getFilter());
+        setVerticalScrollbarPosition(getScrollBarPosition());
+        setSelectionVisible(false);
+        mActivity.invalidateOptionsMenu();
+    }
+
+    private int getScrollBarPosition() {
+        final Locale locale = Locale.getDefault();
+        final boolean isRTL =
+                TextUtils.getLayoutDirectionFromLocale(locale) == View.LAYOUT_DIRECTION_RTL;
+        return isRTL ? View.SCROLLBAR_POSITION_LEFT : View.SCROLLBAR_POSITION_RIGHT;
+    }
+
+    private final class ContactBrowserActionListener implements OnContactBrowserActionListener {
+        ContactBrowserActionListener() {}
+
+        @Override
+        public void onSelectionChange() {
+        }
+
+        @Override
+        public void onViewContactAction(int position, Uri contactLookupUri,
+                boolean isEnterpriseContact) {
+            if (isEnterpriseContact) {
+                // No implicit intent as user may have a different contacts app in work profile.
+                ContactsContract.QuickContact.showQuickContact(getContext(), new Rect(),
+                        contactLookupUri, QuickContactActivity.MODE_FULLY_EXPANDED, null);
+            } else {
+                final int previousScreen;
+                if (isSearchMode()) {
+                    previousScreen = ScreenEvent.ScreenType.SEARCH;
+                } else {
+                    if (isAllContactsFilter(getFilter())) {
+                        if (position < getAdapter().getNumberOfFavorites()) {
+                            previousScreen = ScreenEvent.ScreenType.FAVORITES;
+                        } else {
+                            previousScreen = ScreenEvent.ScreenType.ALL_CONTACTS;
+                        }
+                    } else {
+                        previousScreen = ScreenEvent.ScreenType.LIST_ACCOUNT;
+                    }
+                }
+
+                Logger.logListEvent(ListEvent.ActionType.CLICK,
+                        /* listType */ getListTypeIncludingSearch(),
+                        /* count */ getAdapter().getCount(),
+                        /* clickedIndex */ position, /* numSelected */ 0);
+
+                ImplicitIntentsUtil.startQuickContact(
+                        getActivity(), contactLookupUri, previousScreen);
+            }
+        }
+
+        @Override
+        public void onDeleteContactAction(Uri contactUri) {
+            ContactDeletionInteraction.start(mActivity, contactUri, false);
+        }
+
+        @Override
+        public void onFinishAction() {
+            mActivity.onBackPressed();
+        }
+
+        @Override
+        public void onInvalidSelection() {
+            ContactListFilter filter;
+            ContactListFilter currentFilter = getFilter();
+            if (currentFilter != null
+                    && currentFilter.filterType == ContactListFilter.FILTER_TYPE_SINGLE_CONTACT) {
+                filter = AccountFilterUtil.createContactsFilter(getContext());
+                setFilterAndUpdateTitle(filter);
+            } else {
+                filter = ContactListFilter.createFilterWithType(
+                        ContactListFilter.FILTER_TYPE_SINGLE_CONTACT);
+                setFilterAndUpdateTitle(filter, /* restoreSelectedUri */ false);
+            }
+            setContactListFilter(filter);
+        }
+    }
+
+    private boolean isAllContactsFilter(ContactListFilter filter) {
+        return filter != null && filter.isContactsFilterType();
+    }
+
+    public void setContactsAvailable(boolean contactsAvailable) {
+        mContactsAvailable = contactsAvailable;
+    }
+
+    /**
+     * Set filter via ContactListFilterController
+     */
+    private void setContactListFilter(ContactListFilter filter) {
+        mContactListFilterController.setContactListFilter(filter,
+                /* persistent */ isAllContactsFilter(filter));
+    }
+
+    @Override
+    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
+        if (!mContactsAvailable || mActivity.isInSecondLevel()) {
+            // If contacts aren't available or this fragment is not visible, hide all menu items.
+            return;
+        }
+        super.onCreateOptionsMenu(menu, inflater);
+        inflater.inflate(R.menu.people_options, menu);
+    }
+
+    @Override
+    public void onPrepareOptionsMenu(Menu menu) {
+        mOptionsMenuContactsAvailable = mContactsAvailable;
+        if (!mOptionsMenuContactsAvailable) {
+            return;
+        }
+
+        final boolean isSearchOrSelectionMode = mActionBarAdapter.isSearchMode()
+                || mActionBarAdapter.isSelectionMode();
+        makeMenuItemVisible(menu, R.id.menu_search, !isSearchOrSelectionMode);
+
+        final boolean showSelectedContactOptions = mActionBarAdapter.isSelectionMode()
+                && getSelectedContactIds().size() != 0;
+        makeMenuItemVisible(menu, R.id.menu_share, showSelectedContactOptions);
+        makeMenuItemVisible(menu, R.id.menu_delete, showSelectedContactOptions);
+        final boolean showLinkContactsOptions = mActionBarAdapter.isSelectionMode()
+                && getSelectedContactIds().size() > 1;
+        makeMenuItemVisible(menu, R.id.menu_join, showLinkContactsOptions);
+
+        // Debug options need to be visible even in search mode.
+        makeMenuItemVisible(menu, R.id.export_database, mEnableDebugMenuOptions &&
+                hasExportIntentHandler());
+    }
+
+    private void makeMenuItemVisible(Menu menu, int itemId, boolean visible) {
+        final MenuItem item = menu.findItem(itemId);
+        if (item != null) {
+            item.setVisible(visible);
+        }
+    }
+
+    private boolean hasExportIntentHandler() {
+        final Intent intent = new Intent();
+        intent.setAction("com.android.providers.contacts.DUMP_DATABASE");
+        final List<ResolveInfo> receivers =
+                getContext().getPackageManager().queryIntentActivities(intent,
+                PackageManager.MATCH_DEFAULT_ONLY);
+        return receivers != null && receivers.size() > 0;
+    }
+
+    @Override
+    public boolean onOptionsItemSelected(MenuItem item) {
+        if (mDisableOptionItemSelected) {
+            return false;
+        }
+
+        switch (item.getItemId()) {
+            case android.R.id.home: {
+                // The home icon on the action bar is pressed
+                if (mActionBarAdapter.isUpShowing()) {
+                    // "UP" icon press -- should be treated as "back".
+                    mActivity.onBackPressed();
+                }
+                return true;
+            }
+            case R.id.menu_search: {
+                if (!mActionBarAdapter.isSelectionMode()) {
+                    mActionBarAdapter.setSearchMode(true);
+                }
+                return true;
+            }
+            case R.id.menu_share: {
+                shareSelectedContacts();
+                return true;
+            }
+            case R.id.menu_join: {
+                Logger.logListEvent(ListEvent.ActionType.LINK,
+                        /* listType */ getListTypeIncludingSearch(),
+                        /* count */ getAdapter().getCount(), /* clickedIndex */ -1,
+                        /* numSelected */ getAdapter().getSelectedContactIds().size());
+                joinSelectedContacts();
+                return true;
+            }
+            case R.id.menu_delete: {
+                deleteSelectedContacts();
+                return true;
+            }
+            case R.id.export_database: {
+                final Intent intent = new Intent("com.android.providers.contacts.DUMP_DATABASE");
+                intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
+                ImplicitIntentsUtil.startActivityOutsideApp(getContext(), intent);
+                return true;
+            }
+        }
+        return super.onOptionsItemSelected(item);
+    }
+
+    /**
+     * Share all contacts that are currently selected. This method is pretty inefficient for
+     * handling large numbers of contacts. I don't expect this to be a problem.
+     */
+    private void shareSelectedContacts() {
+        final StringBuilder uriListBuilder = new StringBuilder();
+        for (Long contactId : getSelectedContactIds()) {
+            final Uri contactUri = ContentUris.withAppendedId(
+                    ContactsContract.Contacts.CONTENT_URI, contactId);
+            final Uri lookupUri = ContactsContract.Contacts.getLookupUri(
+                    getContext().getContentResolver(), contactUri);
+            if (lookupUri == null) {
+                continue;
+            }
+            final List<String> pathSegments = lookupUri.getPathSegments();
+            if (pathSegments.size() < 2) {
+                continue;
+            }
+            final String lookupKey = pathSegments.get(pathSegments.size() - 2);
+            if (uriListBuilder.length() > 0) {
+                uriListBuilder.append(':');
+            }
+            uriListBuilder.append(Uri.encode(lookupKey));
+        }
+        if (uriListBuilder.length() == 0) {
+            return;
+        }
+        final Uri uri = Uri.withAppendedPath(
+                ContactsContract.Contacts.CONTENT_MULTI_VCARD_URI,
+                Uri.encode(uriListBuilder.toString()));
+        final Intent intent = new Intent(Intent.ACTION_SEND);
+        intent.setType(ContactsContract.Contacts.CONTENT_VCARD_TYPE);
+        intent.putExtra(Intent.EXTRA_STREAM, uri);
+        try {
+            startActivityForResult(Intent.createChooser(intent, getResources().getQuantityString(
+                    R.plurals.title_share_via,/* quantity */ getSelectedContactIds().size()))
+                    , ACTIVITY_REQUEST_CODE_SHARE);
+        } catch (final ActivityNotFoundException ex) {
+            Toast.makeText(getContext(), R.string.share_error, Toast.LENGTH_SHORT).show();
+        }
+    }
+
+    private void joinSelectedContacts() {
+        final Context context = getContext();
+        final Intent intent = ContactSaveService.createJoinSeveralContactsIntent(
+                context, getSelectedContactIdsArray());
+        context.startService(intent);
+
+        mActionBarAdapter.setSelectionMode(false);
+    }
+
+    private void deleteSelectedContacts() {
+        final ContactMultiDeletionInteraction multiDeletionInteraction =
+                ContactMultiDeletionInteraction.start(this, getSelectedContactIds());
+        multiDeletionInteraction.setListener(new MultiDeleteListener());
+        mIsDeletionInProgress = true;
+    }
+
+    private final class MultiDeleteListener implements MultiContactDeleteListener {
+        @Override
+        public void onDeletionFinished() {
+            // The parameters count and numSelected are both the number of contacts before deletion.
+            Logger.logListEvent(ListEvent.ActionType.DELETE,
+                /* listType */ getListTypeIncludingSearch(),
+                /* count */ getAdapter().getCount(), /* clickedIndex */ -1,
+                /* numSelected */ getSelectedContactIds().size());
+            mActionBarAdapter.setSelectionMode(false);
+            mIsDeletionInProgress = false;
+        }
+    }
+
+    private int getListTypeIncludingSearch() {
+        return isSearchMode() ? ListEvent.ListType.SEARCH_RESULT : getListType();
+    }
+
+    public void setParameters(ContactsRequest contactsRequest, boolean fromOnNewIntent) {
+        mContactsRequest = contactsRequest;
+        mFromOnNewIntent = fromOnNewIntent;
+    }
+
+    @Override
+    public void onActivityResult(int requestCode, int resultCode, Intent data) {
+        switch (requestCode) {
+            // TODO: Using the new startActivityWithResultFromFragment API this should not be needed
+            // anymore
+            case ContactEntryListFragment.ACTIVITY_REQUEST_CODE_PICKER:
+                if (resultCode == Activity.RESULT_OK) {
+                    onPickerResult(data);
+                }
+            case ACTIVITY_REQUEST_CODE_SHARE:
+                Logger.logListEvent(ListEvent.ActionType.SHARE,
+                    /* listType */ getListTypeIncludingSearch(),
+                    /* count */ getAdapter().getCount(), /* clickedIndex */ -1,
+                    /* numSelected */ getAdapter().getSelectedContactIds().size());
+
+// TODO fix or remove multipicker code: ag/54762
+//                else if (resultCode == RESULT_CANCELED && mMode == MODE_PICK_MULTIPLE_PHONES) {
+//                    // Finish the activity if the sub activity was canceled as back key is used
+//                    // to confirm user selection in MODE_PICK_MULTIPLE_PHONES.
+//                    finish();
+//                }
+//                break;
+        }
+    }
+
+    public boolean getOptionsMenuContactsAvailable() {
+        return mOptionsMenuContactsAvailable;
+    }
+
+    @Override
+    public void onSaveInstanceState(Bundle outState) {
+        super.onSaveInstanceState(outState);
+        // Clear the listener to make sure we don't get callbacks after onSaveInstanceState,
+        // in order to avoid doing fragment transactions after it.
+        // TODO Figure out a better way to deal with the issue (ag/120686).
+        if (mActionBarAdapter != null) {
+            mActionBarAdapter.setListener(null);
+            mActionBarAdapter.onSaveInstanceState(outState);
+        }
+        mDisableOptionItemSelected = true;
+        outState.putBoolean(KEY_DELETION_IN_PROGRESS, mIsDeletionInProgress);
+    }
+
+    @Override
+    public void onPause() {
+        mOptionsMenuContactsAvailable = false;
+        super.onPause();
+    }
+
+    @Override
+    public void onDestroy() {
+        if (mActionBarAdapter != null) {
+            mActionBarAdapter.setListener(null);
+        }
+        if (mContactListFilterController != null) {
+            mContactListFilterController.removeListener(mFilterListener);
+        }
+        super.onDestroy();
+    }
+
+    public boolean onKeyDown(int unicodeChar) {
+        if (mActionBarAdapter.isSelectionMode()) {
+            // Ignore keyboard input when in selection mode.
+            return true;
+        }
+
+        if (!mActionBarAdapter.isSearchMode()) {
+            final String query = new String(new int[]{unicodeChar}, 0, 1);
+            mActionBarAdapter.setSearchMode(true);
+            mActionBarAdapter.setQueryString(query);
+            return true;
+        }
+
+        return false;
+    }
+}
diff --git a/src/com/android/contacts/list/MultiSelectContactsListFragment.java b/src/com/android/contacts/list/MultiSelectContactsListFragment.java
index f5c6d34..41fd11e 100644
--- a/src/com/android/contacts/list/MultiSelectContactsListFragment.java
+++ b/src/com/android/contacts/list/MultiSelectContactsListFragment.java
@@ -34,6 +34,7 @@
 import android.widget.TextView;
 
 import com.android.contacts.R;
+import com.android.contacts.activities.ActionBarAdapter;
 import com.android.contacts.common.list.ContactEntryListFragment;
 import com.android.contacts.common.list.MultiSelectEntryContactListAdapter;
 import com.android.contacts.common.list.MultiSelectEntryContactListAdapter.SelectedContactsListener;
@@ -129,13 +130,18 @@
             final TreeSet<Long> selectedContactIds = (TreeSet<Long>)
                     savedInstanceState.getSerializable(EXTRA_KEY_SELECTED_CONTACTS);
             getAdapter().setSelectedContactIds(selectedContactIds);
-            if (mCheckBoxListListener != null) {
-                mCheckBoxListListener.onSelectedContactIdsChanged();
-            }
             mSearchResultClicked = savedInstanceState.getBoolean(KEY_SEARCH_RESULT_CLICKED);
         }
     }
 
+    @Override
+    public void onStart() {
+        super.onStart();
+        if (mCheckBoxListListener != null) {
+            mCheckBoxListListener.onSelectedContactIdsChanged();
+        }
+    }
+
     public TreeSet<Long> getSelectedContactIds() {
         return getAdapter().getSelectedContactIds();
     }
@@ -453,4 +459,10 @@
                 listView.getPaddingBottom());
     }
 
+    /**
+     * Returns the {@link ActionBarAdapter} object associated with list fragment.
+     */
+    public ActionBarAdapter getActionBarAdapter() {
+        return null;
+    }
 }
diff --git a/src/com/android/contacts/list/OnContactsUnavailableActionListener.java b/src/com/android/contacts/list/OnContactsUnavailableActionListener.java
deleted file mode 100644
index cc381e4..0000000
--- a/src/com/android/contacts/list/OnContactsUnavailableActionListener.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (C) 2010 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.list;
-
-/**
- * Action callbacks that can be sent by the "contacts unavailable" fragment.
- */
-public interface OnContactsUnavailableActionListener  {
-
-    /**
-     * Creates a new contact.
-     */
-    void onCreateNewContactAction();
-
-    /**
-     * Initiates addition of a contacts account.
-     */
-    void onAddAccountAction();
-
-    /**
-     * Initiates contact import from a file.
-     */
-    void onImportContactsFromFileAction();
-}
diff --git a/src/com/android/contacts/quickcontact/QuickContactActivity.java b/src/com/android/contacts/quickcontact/QuickContactActivity.java
index 40bcd55..15f29a6 100644
--- a/src/com/android/contacts/quickcontact/QuickContactActivity.java
+++ b/src/com/android/contacts/quickcontact/QuickContactActivity.java
@@ -22,7 +22,6 @@
 import android.animation.ArgbEvaluator;
 import android.animation.ObjectAnimator;
 import android.app.Activity;
-import android.app.Fragment;
 import android.app.LoaderManager.LoaderCallbacks;
 import android.app.SearchManager;
 import android.content.ActivityNotFoundException;
@@ -64,9 +63,9 @@
 import android.provider.ContactsContract.CommonDataKinds.Website;
 import android.provider.ContactsContract.Contacts;
 import android.provider.ContactsContract.Data;
+import android.provider.ContactsContract.DataUsageFeedback;
 import android.provider.ContactsContract.Directory;
 import android.provider.ContactsContract.DisplayNameSources;
-import android.provider.ContactsContract.DataUsageFeedback;
 import android.provider.ContactsContract.Intents;
 import android.provider.ContactsContract.QuickContact;
 import android.provider.ContactsContract.RawContacts;
@@ -107,7 +106,7 @@
 import com.android.contacts.ContactsActivity;
 import com.android.contacts.NfcHandler;
 import com.android.contacts.R;
-import com.android.contacts.activities.ContactEditorBaseActivity;
+import com.android.contacts.activities.CompactContactEditorActivity;
 import com.android.contacts.common.CallUtil;
 import com.android.contacts.common.ClipboardUtils;
 import com.android.contacts.common.Collapser;
@@ -119,7 +118,6 @@
 import com.android.contacts.common.compat.EventCompat;
 import com.android.contacts.common.compat.MultiWindowCompat;
 import com.android.contacts.common.dialog.CallSubjectDialog;
-import com.android.contacts.common.editor.SelectAccountDialogFragment;
 import com.android.contacts.common.interactions.TouchPointManager;
 import com.android.contacts.common.lettertiles.LetterTileDrawable;
 import com.android.contacts.common.list.ShortcutIntentBuilder;
@@ -133,8 +131,9 @@
 import com.android.contacts.common.model.Contact;
 import com.android.contacts.common.model.ContactLoader;
 import com.android.contacts.common.model.RawContact;
+import com.android.contacts.common.model.ValuesDelta;
 import com.android.contacts.common.model.account.AccountType;
-import com.android.contacts.common.model.account.AccountWithDataSet;
+import com.android.contacts.common.model.dataitem.CustomDataItem;
 import com.android.contacts.common.model.dataitem.DataItem;
 import com.android.contacts.common.model.dataitem.DataKind;
 import com.android.contacts.common.model.dataitem.EmailDataItem;
@@ -149,10 +148,8 @@
 import com.android.contacts.common.model.dataitem.StructuredNameDataItem;
 import com.android.contacts.common.model.dataitem.StructuredPostalDataItem;
 import com.android.contacts.common.model.dataitem.WebsiteDataItem;
-import com.android.contacts.common.model.dataitem.CustomDataItem;
-import com.android.contacts.common.model.ValuesDelta;
-import com.android.contacts.common.util.ImplicitIntentsUtil;
 import com.android.contacts.common.util.DateUtils;
+import com.android.contacts.common.util.ImplicitIntentsUtil;
 import com.android.contacts.common.util.MaterialColorMapUtils;
 import com.android.contacts.common.util.MaterialColorMapUtils.MaterialPalette;
 import com.android.contacts.common.util.PermissionsUtil;
@@ -161,7 +158,7 @@
 import com.android.contacts.detail.ContactDisplayUtils;
 import com.android.contacts.editor.AggregationSuggestionEngine;
 import com.android.contacts.editor.AggregationSuggestionEngine.Suggestion;
-import com.android.contacts.editor.ContactEditorFragment;
+import com.android.contacts.editor.CompactContactEditorFragment;
 import com.android.contacts.editor.EditorIntents;
 import com.android.contacts.interactions.CalendarInteractionsLoader;
 import com.android.contacts.interactions.CallLogInteractionsLoader;
@@ -185,7 +182,6 @@
 
 import com.google.common.collect.Lists;
 
-import java.lang.SecurityException;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Calendar;
@@ -307,7 +303,6 @@
     private String mPermissionExplanationCardSubHeader = "";
 
     private MultiShrinkScroller mScroller;
-    private SelectAccountDialogFragmentListener mSelectAccountFragmentListener;
     private AsyncTask<Void, Void, Cp2DataCardModel> mEntriesAndActionsTask;
     private AsyncTask<Void, Void, Void> mRecentDataTask;
 
@@ -799,36 +794,6 @@
         }
     }
 
-    /**
-     * Headless fragment used to handle account selection callbacks invoked from
-     * {@link DirectoryContactUtil}.
-     */
-    public static class SelectAccountDialogFragmentListener extends Fragment
-            implements SelectAccountDialogFragment.Listener {
-
-        private QuickContactActivity mQuickContactActivity;
-
-        public SelectAccountDialogFragmentListener() {}
-
-        @Override
-        public void onAccountChosen(AccountWithDataSet account, Bundle extraArgs) {
-            DirectoryContactUtil.createCopy(mQuickContactActivity.mContactData.getContentValues(),
-                    account, mQuickContactActivity);
-        }
-
-        @Override
-        public void onAccountSelectorCancelled() {}
-
-        /**
-         * Set the parent activity. Since rotation can cause this fragment to be used across
-         * more than one activity instance, we need to explicitly set this value instead
-         * of making this class non-static.
-         */
-        public void setQuickContactActivity(QuickContactActivity quickContactActivity) {
-            mQuickContactActivity = quickContactActivity;
-        }
-    }
-
     final MultiShrinkScrollerListener mMultiShrinkScrollerListener
             = new MultiShrinkScrollerListener() {
         @Override
@@ -1150,16 +1115,6 @@
 
         setHeaderNameText(R.string.missing_name);
 
-        mSelectAccountFragmentListener= (SelectAccountDialogFragmentListener) getFragmentManager()
-                .findFragmentByTag(FRAGMENT_TAG_SELECT_ACCOUNT);
-        if (mSelectAccountFragmentListener == null) {
-            mSelectAccountFragmentListener = new SelectAccountDialogFragmentListener();
-            getFragmentManager().beginTransaction().add(0, mSelectAccountFragmentListener,
-                    FRAGMENT_TAG_SELECT_ACCOUNT).commit();
-            mSelectAccountFragmentListener.setRetainInstance(true);
-        }
-        mSelectAccountFragmentListener.setQuickContactActivity(this);
-
         SchedulingUtils.doOnPreDraw(mScroller, /* drawNextFrame = */ true,
                 new Runnable() {
                     @Override
@@ -1210,7 +1165,7 @@
     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
         final boolean deletedOrSplit = requestCode == REQUEST_CODE_CONTACT_EDITOR_ACTIVITY &&
                 (resultCode == ContactDeletionInteraction.RESULT_CODE_DELETED ||
-                resultCode == ContactEditorBaseActivity.RESULT_CODE_SPLIT);
+                resultCode == CompactContactEditorActivity.RESULT_CODE_SPLIT);
         setResult(resultCode, data);
         if (deletedOrSplit) {
             finish();
@@ -1250,7 +1205,7 @@
         }
         Uri lookupUri = intent.getData();
         if (intent.getBooleanExtra(EXTRA_CONTACT_EDITED, false)) {
-            setResult(ContactEditorBaseActivity.RESULT_CODE_EDITED);
+            setResult(CompactContactEditorActivity.RESULT_CODE_EDITED);
         }
 
         // Check to see whether it comes from the old version.
@@ -1660,7 +1615,7 @@
                 mScroller);
 
         if (contactCardEntries.size() == 0 && aboutCardEntries.size() == 0) {
-            initializeNoContactDetailCard();
+            initializeNoContactDetailCard(cp2DataCardModel.areAllRawContactsSimAccounts);
         } else {
             mNoContactDetailsCard.setVisibility(View.GONE);
         }
@@ -1681,8 +1636,9 @@
 
     /**
      * Create a card that shows "Add email" and "Add phone number" entries in grey.
+     * When contact is a SIM contact, only shows "Add phone number".
      */
-    private void initializeNoContactDetailCard() {
+    private void initializeNoContactDetailCard(boolean areAllRawContactsSimAccounts) {
         final Drawable phoneIcon = getResources().getDrawable(
                 R.drawable.ic_phone_24dp).mutate();
         final Entry phonePromptEntry = new Entry(CARD_ENTRY_ID_EDIT_CONTACT,
@@ -1699,25 +1655,28 @@
                 /* thirdExtras = */ null,
                 R.drawable.ic_phone_24dp);
 
-        final Drawable emailIcon = getResources().getDrawable(
-                R.drawable.ic_email_24dp).mutate();
-        final Entry emailPromptEntry = new Entry(CARD_ENTRY_ID_EDIT_CONTACT,
-                emailIcon, getString(R.string.quickcontact_add_email), /* subHeader = */ null,
-                /* subHeaderIcon = */ null,
-                /* text = */ null, /* textIcon = */ null, /* primaryContentDescription = */ null,
-                getEditContactIntent(), /* alternateIcon = */ null,
-                /* alternateIntent = */ null, /* alternateContentDescription = */ null,
-                /* shouldApplyColor = */ true, /* isEditable = */ false,
-                /* EntryContextMenuInfo = */ null, /* thirdIcon = */ null,
-                /* thirdIntent = */ null, /* thirdContentDescription = */ null,
-                /* thirdAction = */ Entry.ACTION_NONE, /* thirdExtras = */ null,
-                R.drawable.ic_email_24dp);
-
         final List<List<Entry>> promptEntries = new ArrayList<>();
         promptEntries.add(new ArrayList<Entry>(1));
-        promptEntries.add(new ArrayList<Entry>(1));
         promptEntries.get(0).add(phonePromptEntry);
-        promptEntries.get(1).add(emailPromptEntry);
+
+        if (!areAllRawContactsSimAccounts) {
+            final Drawable emailIcon = getResources().getDrawable(
+                    R.drawable.ic_email_24dp).mutate();
+            final Entry emailPromptEntry = new Entry(CARD_ENTRY_ID_EDIT_CONTACT,
+                    emailIcon, getString(R.string.quickcontact_add_email), /* subHeader = */ null,
+                    /* subHeaderIcon = */ null,
+                    /* text = */ null, /* textIcon = */ null, /* primaryContentDescription = */ null,
+                    getEditContactIntent(), /* alternateIcon = */ null,
+                    /* alternateIntent = */ null, /* alternateContentDescription = */ null,
+                    /* shouldApplyColor = */ true, /* isEditable = */ false,
+                    /* EntryContextMenuInfo = */ null, /* thirdIcon = */ null,
+                    /* thirdIntent = */ null, /* thirdContentDescription = */ null,
+                    /* thirdAction = */ Entry.ACTION_NONE, /* thirdExtras = */ null,
+                    R.drawable.ic_email_24dp);
+
+            promptEntries.add(new ArrayList<Entry>(1));
+            promptEntries.get(1).add(emailPromptEntry);
+        }
 
         final int subHeaderTextColor = getResources().getColor(
                 R.color.quickcontact_entry_sub_header_text_color);
@@ -1828,6 +1787,7 @@
         dataModel.aboutCardEntries = aboutCardEntries;
         dataModel.contactCardEntries = contactCardEntries;
         dataModel.dataItemsMap = dataItemsMap;
+        dataModel.areAllRawContactsSimAccounts = data.areAllRawContactsSimAccounts(this);
         return dataModel;
     }
 
@@ -1844,6 +1804,7 @@
         public List<List<Entry>> aboutCardEntries;
         public List<List<Entry>> contactCardEntries;
         public String customAboutCardName;
+        public boolean areAllRawContactsSimAccounts;
     }
 
     private static class MutableString {
@@ -3084,8 +3045,8 @@
                     intent.putExtra(Intents.Insert.DATA, values);
 
                     // If the contact can only export to the same account, add it to the intent.
-                    // Otherwise the ContactEditorFragment will show a dialog for selecting an
-                    // account.
+                    // Otherwise the CompactContactEditorFragment will show a dialog for selecting
+                    // an account.
                     if (mContactData.getDirectoryExportSupport() ==
                             Directory.EXPORT_SUPPORT_SAME_ACCOUNT_ONLY) {
                         intent.putExtra(Intents.Insert.EXTRA_ACCOUNT,
@@ -3097,7 +3058,8 @@
 
                     // Add this flag to disable the delete menu option on directory contact joins
                     // with local contacts. The delete option is ambiguous when joining contacts.
-                    intent.putExtra(ContactEditorFragment.INTENT_EXTRA_DISABLE_DELETE_MENU_OPTION,
+                    intent.putExtra(
+                            CompactContactEditorFragment.INTENT_EXTRA_DISABLE_DELETE_MENU_OPTION,
                             true);
 
                     intent.setPackage(getPackageName());
diff --git a/src/com/android/contacts/util/SyncUtil.java b/src/com/android/contacts/util/SyncUtil.java
new file mode 100644
index 0000000..cef2223
--- /dev/null
+++ b/src/com/android/contacts/util/SyncUtil.java
@@ -0,0 +1,52 @@
+/*
+ * 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.util;
+
+import android.accounts.Account;
+import android.content.ContentResolver;
+import android.provider.ContactsContract;
+
+import com.android.contacts.common.model.account.GoogleAccountType;
+
+import java.util.List;
+
+/**
+ * Utilities related to sync.
+ */
+public final class SyncUtil {
+    private static final String TAG = "SyncUtil";
+
+    private SyncUtil() {
+    }
+
+    public static final boolean isSyncStatusPendingOrActive(Account account) {
+        if (account == null) {
+            return false;
+        }
+        return ContentResolver.isSyncPending(account, ContactsContract.AUTHORITY)
+                || ContentResolver.isSyncActive(account, ContactsContract.AUTHORITY);
+    }
+
+    /**
+     * Returns true if the given Google account is not syncable.
+     */
+    public static final boolean isUnsyncableGoogleAccount(Account account) {
+        if (account == null || !GoogleAccountType.ACCOUNT_TYPE.equals(account.type)) {
+            return false;
+        }
+        return ContentResolver.getIsSyncable(account, ContactsContract.AUTHORITY) <= 0;
+    }
+}
diff --git a/tests/Android.mk b/tests/Android.mk
index 6b31593..1148966 100644
--- a/tests/Android.mk
+++ b/tests/Android.mk
@@ -5,8 +5,6 @@
 LOCAL_MODULE_TAGS := tests
 LOCAL_CERTIFICATE := shared
 
-LOCAL_STATIC_JAVA_LIBRARIES := android-support-test
-
 LOCAL_SRC_FILES := $(call all-java-files-under, src)
 
 res_dirs := res ../res-icons
@@ -20,6 +18,7 @@
 LOCAL_MIN_SDK_VERSION := 21
 
 LOCAL_STATIC_JAVA_LIBRARIES += \
+    android-support-test \
     hamcrest-library \
     mockito-target-minus-junit4
 
diff --git a/tests/AndroidManifest.xml b/tests/AndroidManifest.xml
index 65be28a..4e53114 100644
--- a/tests/AndroidManifest.xml
+++ b/tests/AndroidManifest.xml
@@ -98,6 +98,11 @@
         android:label="Contacts app tests">
     </instrumentation>
 
+    <instrumentation android:name="android.support.test.runner.AndroidJUnitRunner"
+        android:targetPackage="com.android.contacts"
+        android:label="Contacts app tests">
+    </instrumentation>
+
     <instrumentation android:name="com.android.contacts.ContactsLaunchPerformance"
         android:targetPackage="com.android.contacts"
         android:label="Contacts launch performance">
diff --git a/tests/src/com/android/contacts/common/preference/ContactsPreferencesTest.java b/tests/src/com/android/contacts/common/preference/ContactsPreferencesTest.java
index e73eb4c..8400737 100644
--- a/tests/src/com/android/contacts/common/preference/ContactsPreferencesTest.java
+++ b/tests/src/com/android/contacts/common/preference/ContactsPreferencesTest.java
@@ -19,6 +19,7 @@
 import android.content.Context;
 import android.content.SharedPreferences;
 import android.content.res.Resources;
+import android.support.test.InstrumentationRegistry;
 import android.test.InstrumentationTestCase;
 import android.test.suitebuilder.annotation.SmallTest;
 
@@ -61,7 +62,12 @@
         Mockito.when(mSharedPreferences.contains(ContactsPreferences.DISPLAY_ORDER_KEY))
                 .thenReturn(true);
 
-        mContactsPreferences = new ContactsPreferences(mContext);
+        InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable() {
+            @Override
+            public void run() {
+                mContactsPreferences = new ContactsPreferences(mContext);
+            }
+        });
     }
 
     public void testGetSortOrderDefault() {
diff --git a/tests/src/com/android/contacts/common/util/DateUtilTests.java b/tests/src/com/android/contacts/common/util/DateUtilTests.java
deleted file mode 100644
index f460289..0000000
--- a/tests/src/com/android/contacts/common/util/DateUtilTests.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright (C) 2014 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 junit.framework.TestCase;
-
-import android.test.suitebuilder.annotation.SmallTest;
-import android.text.format.Time;
-
-/**
- * Unit tests for {@link com.android.contacts.common.util.DateUtils}.
- */
-@SmallTest
-public class DateUtilTests extends TestCase {
-
-    /**
-     * Test date differences which are in the same day.
-     */
-    public void testDayDiffNone() {
-        Time time = new Time();
-        long date1 = System.currentTimeMillis();
-        long date2 = System.currentTimeMillis() + android.text.format.DateUtils.HOUR_IN_MILLIS;
-        assertEquals(0, DateUtils.getDayDifference(time, date1, date2));
-        assertEquals(0, DateUtils.getDayDifference(time, date2, date1));
-    }
-
-    /**
-     * Test date differences which are a day apart.
-     */
-    public void testDayDiffOne() {
-        Time time = new Time();
-        long date1 = System.currentTimeMillis();
-        long date2 = date1 + android.text.format.DateUtils.DAY_IN_MILLIS;
-        assertEquals(1, DateUtils.getDayDifference(time, date1, date2));
-        assertEquals(1, DateUtils.getDayDifference(time, date2, date1));
-    }
-
-    /**
-     * Test date differences which are two days apart.
-     */
-    public void testDayDiffTwo() {
-        Time time = new Time();
-        long date1 = System.currentTimeMillis();
-        long date2 = date1 + 2*android.text.format.DateUtils.DAY_IN_MILLIS;
-        assertEquals(2, DateUtils.getDayDifference(time, date1, date2));
-        assertEquals(2, DateUtils.getDayDifference(time, date2, date1));
-    }
-}
diff --git a/tests/src/com/android/contacts/interactions/ContactDeletionInteractionTest.java b/tests/src/com/android/contacts/interactions/ContactDeletionInteractionTest.java
index f943aaa..9152956 100644
--- a/tests/src/com/android/contacts/interactions/ContactDeletionInteractionTest.java
+++ b/tests/src/com/android/contacts/interactions/ContactDeletionInteractionTest.java
@@ -107,33 +107,33 @@
     }
 
     public void testSingleWritableRawContact() {
-        expectQuery().returnRow(1, WRITABLE_ACCOUNT_TYPE, null, 13, "foo");
+        expectQuery().returnRow(1, WRITABLE_ACCOUNT_TYPE, null, 13, "foo", "baz");
         assertWithMessageId(R.string.deleteConfirmation);
     }
 
     public void testReadOnlyRawContacts() {
-        expectQuery().returnRow(1, READONLY_ACCOUNT_TYPE, null, 13, "foo");
+        expectQuery().returnRow(1, READONLY_ACCOUNT_TYPE, null, 13, "foo", "baz");
         assertWithMessageId(R.string.readOnlyContactWarning);
     }
 
     public void testMixOfWritableAndReadOnlyRawContacts() {
         expectQuery()
-                .returnRow(1, WRITABLE_ACCOUNT_TYPE, null, 13, "foo")
-                .returnRow(2, READONLY_ACCOUNT_TYPE, null, 13, "foo");
+                .returnRow(1, WRITABLE_ACCOUNT_TYPE, null, 13, "foo", "baz")
+                .returnRow(2, READONLY_ACCOUNT_TYPE, null, 13, "foo", "baz");
         assertWithMessageId(R.string.readOnlyContactDeleteConfirmation);
     }
 
     public void testMultipleWritableRawContacts() {
         expectQuery()
-                .returnRow(1, WRITABLE_ACCOUNT_TYPE, null, 13, "foo")
-                .returnRow(2, WRITABLE_ACCOUNT_TYPE, null, 13, "foo");
+                .returnRow(1, WRITABLE_ACCOUNT_TYPE, null, 13, "foo", "baz")
+                .returnRow(2, WRITABLE_ACCOUNT_TYPE, null, 13, "foo", "baz");
         assertWithMessageId(R.string.multipleContactDeleteConfirmation);
     }
 
     private Query expectQuery() {
         return mContactsProvider.expectQuery(ENTITY_URI).withProjection(
                 Entity.RAW_CONTACT_ID, Entity.ACCOUNT_TYPE, Entity.DATA_SET, Entity.CONTACT_ID,
-                Entity.LOOKUP_KEY);
+                Entity.LOOKUP_KEY, Entity.DISPLAY_NAME);
     }
 
     private void assertWithMessageId(int messageId) {
diff --git a/tests/src/com/android/contacts/tests/allintents/AllIntentsActivity.java b/tests/src/com/android/contacts/tests/allintents/AllIntentsActivity.java
index 4a93364..73b09c6 100644
--- a/tests/src/com/android/contacts/tests/allintents/AllIntentsActivity.java
+++ b/tests/src/com/android/contacts/tests/allintents/AllIntentsActivity.java
@@ -578,7 +578,7 @@
         intent.setData(ContentUris.withAppendedId(Groups.CONTENT_URI, groupId));
         // TODO: ContactsProvider2#getType does handle the group mimetype
         intent.setClassName("com.google.android.contacts",
-                "com.android.contacts.activities.GroupMembersActivity");
+                "com.android.contacts.activities.PeopleActivity");
         return intent;
     }
 
diff --git a/tests/src/com/android/contacts/util/SyncUtilTests.java b/tests/src/com/android/contacts/util/SyncUtilTests.java
new file mode 100644
index 0000000..372a652
--- /dev/null
+++ b/tests/src/com/android/contacts/util/SyncUtilTests.java
@@ -0,0 +1,51 @@
+/*
+ * 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.util;
+
+import android.accounts.Account;
+import android.test.AndroidTestCase;
+import android.test.suitebuilder.annotation.SmallTest;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Tests for SyncUtil.
+ */
+@SmallTest
+public class SyncUtilTests extends AndroidTestCase {
+    private static final String TAG = "SyncUtilTests";
+
+    private static final String GOOGLE_TYPE = "com.google";
+    private static final String NOT_GOOGLE_TYPE = "com.abc";
+    private static final String ACCOUNT_NAME = "ACCOUNT_NAME";
+
+    private final Account mGoogleAccount;
+    private final Account mOtherAccount;
+
+    public SyncUtilTests() {
+        mGoogleAccount = new Account(ACCOUNT_NAME, GOOGLE_TYPE);
+        mOtherAccount = new Account(ACCOUNT_NAME, NOT_GOOGLE_TYPE);
+    }
+
+    public void testIsUnsyncableGoogleAccount() throws Exception {
+        // The account names of mGoogleAccount and mOtherAccount are not valid, so both accounts
+        // are not syncable.
+        assertTrue(SyncUtil.isUnsyncableGoogleAccount(mGoogleAccount));
+        assertFalse(SyncUtil.isUnsyncableGoogleAccount(mOtherAccount));
+        assertFalse(SyncUtil.isUnsyncableGoogleAccount(null));
+    }
+}