am d4dda2b8: (-s ours) Merge "Switching to use try-with-resources"

* commit 'd4dda2b8c4c3b0309ed668060247ce601808532f':
  Switching to use try-with-resources
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 69cf2a5..d7ee9c8 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -20,8 +20,9 @@
 
     <original-package android:name="com.android.contacts" />
 
+    <!-- Whenever a permission is added here, it should also be added to
+         RequestPermissionsActivity so it can be requested at runtime. -->
     <uses-permission android:name="android.permission.CALL_PHONE" />
-    <uses-permission android:name="android.permission.CALL_PRIVILEGED" />
     <uses-permission android:name="android.permission.READ_CONTACTS" />
     <uses-permission android:name="android.permission.WRITE_CONTACTS" />
     <uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
@@ -44,6 +45,7 @@
     <uses-permission android:name="android.permission.READ_CALL_LOG" />
     <uses-permission android:name="android.permission.READ_SMS" />
     <uses-permission android:name="android.permission.READ_CALENDAR" />
+    <uses-permission android:name="com.android.voicemail.permission.READ_VOICEMAIL" />
 
     <application
         android:name="com.android.contacts.ContactsApplication"
@@ -52,6 +54,7 @@
         android:taskAffinity="android.task.contacts"
         android:hardwareAccelerated="true"
         android:supportsRtl="true"
+        android:usesCleartextTraffic="false"
     >
 
         <!-- The main Contacts activity with the contact list, favorites, and groups. -->
@@ -122,12 +125,6 @@
             </intent-filter>
 
             <intent-filter>
-                <action android:name="com.android.contacts.action.FILTER_CONTACTS" />
-                <category android:name="android.intent.category.DEFAULT" />
-                <data android:mimeType="vnd.android.cursor.dir/contact" />
-            </intent-filter>
-
-            <intent-filter>
                 <action android:name="android.intent.action.VIEW" />
                 <category android:name="android.intent.category.DEFAULT" />
                 <data android:mimeType="vnd.android.cursor.dir/person" />
@@ -220,6 +217,18 @@
             android:theme="@style/ContactListFilterTheme" />
 
         <activity
+            android:name=".common.activity.RequestPermissionsActivity"
+            android:label="@string/launcherActivityLabel"
+            android:theme="@style/PeopleTheme"
+            android:exported="false"/>
+
+        <activity
+            android:name=".common.activity.RequestImportVCardPermissionsActivity"
+            android:label="@string/launcherActivityLabel"
+            android:theme="@style/PeopleTheme"
+            android:exported="false"/>
+
+        <activity
             android:name=".activities.ShowOrCreateActivity"
             android:label="@string/launcherActivityLabel"
             android:theme="@android:style/Theme.Material.Light.Dialog.NoActionBar">
@@ -327,6 +336,29 @@
             android:windowSoftInputMode="adjustResize"
             android:exported="false"/>
 
+        <!-- Edit or create a contact with only the most important fields displayed initially. -->
+        <activity
+            android:name=".activities.CompactContactEditorActivity"
+            android:label="@string/launcherActivityLabel"
+            android:theme="@style/EditorActivityTheme"
+            android:windowSoftInputMode="stateHidden|adjustResize">
+
+            <intent-filter android:label="@string/editContactDescription">
+                <action android:name="android.intent.action.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 android:label="@string/insertContactDescription">
+                <action android:name="android.intent.action.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>
+
         <!-- Create a new or edit an existing contact -->
         <activity
             android:name=".activities.ContactEditorActivity"
@@ -378,18 +410,6 @@
             </intent-filter>
         </activity>
 
-        <!--
-            Internal photo selection activity.  This activity handles all configuration changes by
-            itself.
-        -->
-        <activity android:name=".activities.PhotoSelectionActivity"
-            android:theme="@style/Theme.PhotoSelector"
-            android:launchMode="singleTop"
-            android:windowSoftInputMode="stateUnchanged"
-            android:configChanges="mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|screenLayout|fontScale|uiMode|orientation|screenSize|smallestScreenSize"
-            >
-        </activity>
-
         <!-- vCard related -->
         <activity android:name=".common.vcard.ImportVCardActivity"
             android:label="@string/launcherActivityLabel"
diff --git a/res/drawable-hdpi/ic_delete_white_24dp.png b/res/drawable-hdpi/ic_delete_white_24dp.png
deleted file mode 100644
index 4a9f769..0000000
--- a/res/drawable-hdpi/ic_delete_white_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_photo_camera_white_24dp.png b/res/drawable-hdpi/ic_photo_camera_white_24dp.png
new file mode 100644
index 0000000..497c88c
--- /dev/null
+++ b/res/drawable-hdpi/ic_photo_camera_white_24dp.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_delete_white_24dp.png b/res/drawable-mdpi/ic_delete_white_24dp.png
deleted file mode 100644
index e2f5f35..0000000
--- a/res/drawable-mdpi/ic_delete_white_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_photo_camera_white_24dp.png b/res/drawable-mdpi/ic_photo_camera_white_24dp.png
new file mode 100644
index 0000000..e830522
--- /dev/null
+++ b/res/drawable-mdpi/ic_photo_camera_white_24dp.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_delete_white_24dp.png b/res/drawable-xhdpi/ic_delete_white_24dp.png
deleted file mode 100644
index 388b5b0..0000000
--- a/res/drawable-xhdpi/ic_delete_white_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_photo_camera_white_24dp.png b/res/drawable-xhdpi/ic_photo_camera_white_24dp.png
new file mode 100644
index 0000000..be9fb22
--- /dev/null
+++ b/res/drawable-xhdpi/ic_photo_camera_white_24dp.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_delete_white_24dp.png b/res/drawable-xxhdpi/ic_delete_white_24dp.png
deleted file mode 100644
index 3fcdfdb..0000000
--- a/res/drawable-xxhdpi/ic_delete_white_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_photo_camera_white_24dp.png b/res/drawable-xxhdpi/ic_photo_camera_white_24dp.png
new file mode 100644
index 0000000..c8e69dc
--- /dev/null
+++ b/res/drawable-xxhdpi/ic_photo_camera_white_24dp.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_delete_white_24dp.png b/res/drawable-xxxhdpi/ic_delete_white_24dp.png
deleted file mode 100644
index 8d322aa..0000000
--- a/res/drawable-xxxhdpi/ic_delete_white_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_photo_camera_white_24dp.png b/res/drawable-xxxhdpi/ic_photo_camera_white_24dp.png
new file mode 100644
index 0000000..777658e
--- /dev/null
+++ b/res/drawable-xxxhdpi/ic_photo_camera_white_24dp.png
Binary files differ
diff --git a/res/drawable/floating_action_button.xml b/res/drawable/floating_action_button.xml
index 34612d5..7753c89 100644
--- a/res/drawable/floating_action_button.xml
+++ b/res/drawable/floating_action_button.xml
@@ -16,6 +16,10 @@
 -->
 
 <ripple xmlns:android="http://schemas.android.com/apk/res/android"
-    android:color="@color/contacts_accent_color">
-    <item android:drawable="@drawable/fab_blue" />
-</ripple>
+     android:color="@color/contacts_accent_color">
+     <item android:id="@android:id/mask">
+          <shape android:shape="oval">
+               <solid android:color="@android:color/white" />
+          </shape>
+     </item>
+</ripple>
\ No newline at end of file
diff --git a/res/layout-land/compact_contact_editor_fragment.xml b/res/layout-land/compact_contact_editor_fragment.xml
new file mode 100644
index 0000000..2363091
--- /dev/null
+++ b/res/layout-land/compact_contact_editor_fragment.xml
@@ -0,0 +1,45 @@
+<?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.
+-->
+
+<com.android.contacts.editor.CompactRawContactsEditorView
+        xmlns:android="http://schemas.android.com/apk/res/android"
+        android:id="@+id/editors"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:background="@color/background_primary"
+        android:orientation="horizontal"
+        android:visibility="invisible">
+
+    <include layout="@layout/compact_photo_editor_view" />
+
+    <ScrollView
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:fadingEdge="none"
+            android:fillViewport="true">
+
+        <LinearLayout android:layout_width="match_parent"
+                android:layout_height="match_parent"
+                android:orientation="vertical">
+
+            <include layout="@layout/compact_contact_editor_fields"/>
+
+        </LinearLayout>
+
+    </ScrollView>
+
+</com.android.contacts.editor.CompactRawContactsEditorView>
\ No newline at end of file
diff --git a/res/layout-land/people_activity_toolbar.xml b/res/layout-land/people_activity_toolbar.xml
index 1f86879..d33a96c 100644
--- a/res/layout-land/people_activity_toolbar.xml
+++ b/res/layout-land/people_activity_toolbar.xml
@@ -25,11 +25,18 @@
     android:elevation="@dimen/tab_elevation"
     android:layout_height="wrap_content" >
 
-    <Toolbar
+    <FrameLayout
+        android:id="@+id/toolbar_frame"
         android:layout_width="match_parent"
         android:layout_height="?android:attr/actionBarSize"
-        android:background="@color/actionbar_background_color"
-        android:id="@+id/toolbar"
-        style="@style/ContactsToolbarStyle" />
+        android:background="@color/actionbar_background_color">
+
+        <Toolbar
+            android:layout_width="match_parent"
+            android:layout_height="?android:attr/actionBarSize"
+            android:id="@+id/toolbar"
+            style="@style/ContactsToolbarStyle" />
+
+    </FrameLayout>
 
 </LinearLayout>
\ No newline at end of file
diff --git a/res/layout/compact_contact_editor_activity.xml b/res/layout/compact_contact_editor_activity.xml
new file mode 100644
index 0000000..db847b0
--- /dev/null
+++ b/res/layout/compact_contact_editor_activity.xml
@@ -0,0 +1,22 @@
+<?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.
+-->
+
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/compact_contact_editor_fragment_container"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"/>
+
diff --git a/res/layout/compact_contact_editor_fields.xml b/res/layout/compact_contact_editor_fields.xml
new file mode 100644
index 0000000..1ddd0b1
--- /dev/null
+++ b/res/layout/compact_contact_editor_fields.xml
@@ -0,0 +1,80 @@
+<?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.
+-->
+
+<merge xmlns:android="http://schemas.android.com/apk/res/android">
+
+    <LinearLayout
+            android:id="@+id/names"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="@dimen/editor_compact_first_field_padding"
+            android:orientation="vertical"/>
+
+    <LinearLayout
+            android:id="@+id/phonetic_names"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:orientation="vertical"/>
+
+    <LinearLayout
+            android:id="@+id/nicknames"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:orientation="vertical"/>
+
+    <LinearLayout
+            android:id="@+id/phone_numbers"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:orientation="vertical"/>
+
+    <LinearLayout
+            android:id="@+id/emails"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:orientation="vertical"/>
+
+    <LinearLayout
+            android:id="@+id/other"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:orientation="vertical"/>
+
+    <LinearLayout
+            style="@style/SelectableItem"
+            android:id="@+id/more_fields"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:orientation="vertical">
+
+        <!-- See the comment for EditKindIconStyle in styles.xml, we use (16 + 24 + 32) dp of
+             padding (start margin + icon width + end margin) for this to line up with the start
+             of the edit fields. -->
+        <TextView
+                android:background="?android:attr/selectableItemBackground"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:minHeight="@dimen/editor_min_line_item_height"
+                android:paddingStart="72dp"
+                android:gravity="center_vertical"
+                android:text="@string/compact_editor_more_fields"
+                android:textColor="?android:attr/colorAccent"
+                android:textSize="@dimen/expanding_entry_card_title_text_size"/>
+
+    </LinearLayout>
+
+</merge>
\ No newline at end of file
diff --git a/res/layout/compact_contact_editor_fragment.xml b/res/layout/compact_contact_editor_fragment.xml
new file mode 100644
index 0000000..696f8db
--- /dev/null
+++ b/res/layout/compact_contact_editor_fragment.xml
@@ -0,0 +1,39 @@
+<?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.
+-->
+
+<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
+        android:id="@+id/compact_contact_editor_fragment"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:background="@color/background_primary"
+        android:fadingEdge="none"
+        android:fillViewport="true">
+
+    <com.android.contacts.editor.CompactRawContactsEditorView
+            android:id="@+id/editors"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:orientation="vertical"
+            android:visibility="invisible">
+
+        <include layout="@layout/compact_photo_editor_view" />
+
+        <include layout="@layout/compact_contact_editor_fields" />
+
+    </com.android.contacts.editor.CompactRawContactsEditorView>
+
+</ScrollView>
diff --git a/res/layout/compact_photo_editor_view.xml b/res/layout/compact_photo_editor_view.xml
new file mode 100644
index 0000000..9806f64
--- /dev/null
+++ b/res/layout/compact_photo_editor_view.xml
@@ -0,0 +1,55 @@
+<?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.
+-->
+
+<com.android.contacts.editor.CompactPhotoEditorView
+        xmlns:android="http://schemas.android.com/apk/res/android"
+        android:id="@+id/photo_editor"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:layout_gravity="center_horizontal">
+
+    <com.android.contacts.widget.QuickContactImageView
+            android:id="@+id/photo"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:scaleType="centerCrop"/>
+
+    <View
+            android:id="@+id/photo_icon_overlay"
+            android:layout_height="56dp"
+            android:layout_width="match_parent"
+            android:layout_alignParentBottom="true" />
+
+    <ImageView
+            android:id="@+id/photo_icon"
+            android:layout_width="24dp"
+            android:layout_height="24dp"
+            android:layout_alignParentBottom="true"
+            android:layout_alignParentEnd="true"
+            android:layout_marginBottom="16dp"
+            android:layout_marginEnd="16dp"
+            android:background="?android:attr/selectableItemBackground"
+            android:src="@drawable/ic_photo_camera_white_24dp" />
+
+    <View
+            android:id="@+id/photo_touch_intercept_overlay"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:background="@drawable/item_background_material_dark"
+            android:contentDescription="@string/compact_editor_change_photo_content_description" />
+
+</com.android.contacts.editor.CompactPhotoEditorView>
\ No newline at end of file
diff --git a/res/layout/contact_editor_accounts_changed_activity_with_text.xml b/res/layout/contact_editor_accounts_changed_activity_with_text.xml
index f608f84..345d937 100644
--- a/res/layout/contact_editor_accounts_changed_activity_with_text.xml
+++ b/res/layout/contact_editor_accounts_changed_activity_with_text.xml
@@ -48,6 +48,7 @@
             style="?android:attr/buttonBarButtonStyle"
             android:layout_width="0dip"
             android:layout_height="wrap_content"
+            android:singleLine="false"
             android:layout_weight="1" />
 
         <Button
diff --git a/res/layout/contacts_unavailable_fragment_content.xml b/res/layout/contacts_unavailable_fragment_content.xml
index c36d038..4f54801 100644
--- a/res/layout/contacts_unavailable_fragment_content.xml
+++ b/res/layout/contacts_unavailable_fragment_content.xml
@@ -66,20 +66,6 @@
             android:layout_marginBottom="15dip"
             android:text="@string/contacts_unavailable_import_contacts" />
 
-        <Button
-            android:id="@+id/import_failure_uninstall_button"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:layout_marginBottom="15dip"
-            android:text="@string/upgrade_out_of_memory_uninstall" />
-
-        <Button
-            android:id="@+id/import_failure_retry_button"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:layout_marginBottom="15dip"
-            android:text="@string/upgrade_out_of_memory_retry" />
-
         <ProgressBar
             android:id="@+id/progress"
             android:layout_width="wrap_content"
diff --git a/res/layout/floating_action_button.xml b/res/layout/floating_action_button.xml
index 1541d42..294d88b 100644
--- a/res/layout/floating_action_button.xml
+++ b/res/layout/floating_action_button.xml
@@ -22,6 +22,7 @@
     android:layout_height="@dimen/floating_action_button_height"
     android:layout_marginEnd="@dimen/floating_action_button_margin_right"
     android:layout_marginBottom="@dimen/floating_action_button_margin_bottom"
+    android:background="@drawable/fab_blue"
     android:layout_alignParentEnd="true"
     android:layout_alignParentBottom="true">
 
diff --git a/res/layout/people_activity_toolbar.xml b/res/layout/people_activity_toolbar.xml
index e69728b..cbb4d91 100644
--- a/res/layout/people_activity_toolbar.xml
+++ b/res/layout/people_activity_toolbar.xml
@@ -21,12 +21,19 @@
     android:elevation="@dimen/tab_elevation"
     android:layout_height="wrap_content" >
 
-    <Toolbar
+    <FrameLayout
+        android:id="@+id/toolbar_frame"
         android:layout_width="match_parent"
         android:layout_height="?android:attr/actionBarSize"
-        android:background="@color/actionbar_background_color"
-        android:id="@+id/toolbar"
-        style="@style/ContactsToolbarStyle" />
+        android:background="@color/actionbar_background_color">
+
+        <Toolbar
+            android:layout_width="match_parent"
+            android:layout_height="?android:attr/actionBarSize"
+            android:id="@+id/toolbar"
+            style="@style/ContactsToolbarStyle" />
+
+    </FrameLayout>
 
     <com.android.contacts.common.list.ViewPagerTabs
         android:id="@+id/lists_pager_header"
diff --git a/res/layout/photoselection_activity.xml b/res/layout/photoselection_activity.xml
deleted file mode 100644
index e7ef901..0000000
--- a/res/layout/photoselection_activity.xml
+++ /dev/null
@@ -1,31 +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.
--->
-<FrameLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent">
-    <View
-        android:id="@+id/backdrop"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        android:background="#000000" />
-    <view
-        android:id="@+id/photo"
-        class="com.android.contacts.detail.TransformableImageView"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:scaleType="centerCrop" />
-</FrameLayout>
\ No newline at end of file
diff --git a/res/layout/selection_bar.xml b/res/layout/selection_bar.xml
new file mode 100644
index 0000000..34cdd60
--- /dev/null
+++ b/res/layout/selection_bar.xml
@@ -0,0 +1,42 @@
+<?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.
+-->
+<FrameLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/selection_bar"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:background="@color/contextual_selection_bar_color" >
+
+    <ImageButton
+        android:id="@+id/selection_close"
+        android:layout_width="48dp"
+        android:layout_height="48dp"
+        android:src="@drawable/ic_back_arrow"
+        android:background="?android:attr/selectableItemBackgroundBorderless"
+        android:contentDescription="@string/action_menu_back_from_search"
+        android:layout_gravity="center_vertical|start"
+        android:tint="@android:color/white" />
+
+    <TextView
+        android:id="@+id/selection_count_text"
+        android:layout_marginStart="72dp"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:visibility="gone"
+        android:layout_gravity="center_vertical|start"
+        style="@style/ContactsActionBarTitleText" />
+
+</FrameLayout>
diff --git a/res/menu/people_options.xml b/res/menu/people_options.xml
index a7802f0..1dd4dc4 100644
--- a/res/menu/people_options.xml
+++ b/res/menu/people_options.xml
@@ -49,4 +49,17 @@
         android:title="@string/menu_export_database"
         android:visible="false"
         android:showAsAction="never" />
+
+    <item
+        android:id="@+id/menu_join"
+        android:title="@string/menu_joinAggregate" />
+
+    <item
+        android:id="@+id/menu_delete"
+        android:title="@string/menu_deleteContact" />
+
+    <item
+        android:id="@+id/menu_share"
+        android:title="@string/menu_share" />
+
 </menu>
diff --git a/res/menu/quickcontact.xml b/res/menu/quickcontact.xml
index d1658fc..6cfe053 100644
--- a/res/menu/quickcontact.xml
+++ b/res/menu/quickcontact.xml
@@ -37,4 +37,8 @@
     <item
         android:id="@+id/menu_create_contact_shortcut"
         android:title="@string/menu_create_contact_shortcut" />
+
+    <item
+        android:id="@+id/menu_help"
+        android:title="@string/menu_help" />
 </menu>
diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml
index a4ed737..ebe1302 100644
--- a/res/values-af/strings.xml
+++ b/res/values-af/strings.xml
@@ -46,6 +46,7 @@
     <string name="description_action_menu_add_star" msgid="3327186327234177456">"By gunstelinge gevoeg"</string>
     <string name="menu_editContact" msgid="9042415603857662633">"Redigeer"</string>
     <string name="menu_deleteContact" msgid="6788644058868189393">"Vee uit"</string>
+    <string name="menu_change_photo" msgid="7769177631511496210">"Verander foto"</string>
     <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Plaas op tuisskerm"</string>
     <string name="menu_call" msgid="3992595586042260618">"Bel kontak"</string>
     <string name="menu_sendSMS" msgid="5535886767547006515">"Teks - kontak"</string>
@@ -56,17 +57,23 @@
     <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Voeg groep by"</string>
     <string name="splitConfirmation_title" msgid="633640935430370530">"Skei kontak?"</string>
     <string name="splitConfirmation" msgid="740190210499587175">"Hierdie kontak sal geskei word in verskeie kontakte."</string>
-    <string name="menu_joinAggregate" msgid="5027981918265667970">"Voeg saam"</string>
+    <string name="menu_joinAggregate" msgid="4050157483569357666">"Voeg saam"</string>
     <string name="titleJoinContactDataWith" msgid="7684875775798635354">"Voeg kontakte saam"</string>
     <string name="blurbJoinContactDataWith" msgid="8736488417422708236">"Kies die kontak wat jy wil saamvoeg met <xliff:g id="NAME">%s</xliff:g>."</string>
     <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Wys alle kontakte"</string>
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Voorgestelde kontakte"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Alle kontakte"</string>
-    <string name="contactsJoinedMessage" msgid="7208148163607047389">"Kontakte saamgevoeg"</string>
+    <string name="contactsJoinedMessage" msgid="656936718666768589">"Kontakte saamgevoeg"</string>
+    <string name="contacts_deleted_toast" msgid="286851430992788215">"Kontakte uitgevee"</string>
     <string name="menu_set_ring_tone" msgid="8728345772068064946">"Stel luitoon op"</string>
     <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Alle oproepe na stempos"</string>
     <string name="readOnlyContactWarning" msgid="7808825687289848259">"Jy kan nie kontakte uit leesalleen-rekeninge uitvee nie, maar jy kan hulle wel in jou kontaklyste versteek."</string>
     <string name="readOnlyContactDeleteConfirmation" msgid="2137170726670196909">"Hierdie kontak bevat inligting uit meerdere rekeninge. Inligting uit leesalleen-rekeninge sal in jou kontaklyste versteek word, nie verwyder word nie."</string>
+    <string name="batch_merge_single_contact_warning" msgid="982585201970392110">"Jy het minstens twee kontakte nodig om \'n samevoeging te doen."</string>
+    <string name="batch_merge_confirmation" msgid="8551299480317422420">"Hierdie gekose kontakte sal in een enkele kontak saamgevoeg word."</string>
+    <string name="batch_delete_confirmation" msgid="2564172328268885394">"Die gekose kontakte sal uitgevee word."</string>
+    <string name="batch_delete_read_only_contact_confirmation" msgid="6614878716815412523">"Inligting uit leesalleen-rekeninge sal in jou kontaklyste versteek word, nie uitgevee word nie."</string>
+    <string name="batch_delete_multiple_accounts_confirmation" msgid="5189722181586680185">"Hierdie kontakte bevat inligting vanaf veelvuldige rekeninge. Inligting uit leesalleen-rekeninge sal in jou kontaklyste versteek word, nie uitgevee word nie."</string>
     <string name="multipleContactDeleteConfirmation" msgid="938900978442960800">"As jy hierdie kontak uitvee, sal dit inligting uit meerdere rekeninge uitvee."</string>
     <string name="deleteConfirmation" msgid="811706994761610640">"Hierdie kontak sal uitgevee word."</string>
     <string name="menu_discard" msgid="6854657936970228164">"Verwerp wysigings"</string>
@@ -94,20 +101,20 @@
     <string name="contactSavedErrorToast" msgid="3207250533172944892">"Kon nie kontakveranderinge stoor nie."</string>
     <string name="groupSavedToast" msgid="1168756874239833756">"Groep gestoor."</string>
     <string name="groupSavedErrorToast" msgid="7984466936615304740">"Kon nie groepsveranderinge stoor nie."</string>
-  <plurals name="listTotalPhoneContacts">
-    <item quantity="one" msgid="3015357862286673986">"1 kontak met foonnommer"</item>
-    <item quantity="other" msgid="3299954047880968205">"<xliff:g id="COUNT">%d</xliff:g> kontakte met foonnommers"</item>
-  </plurals>
+    <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> kontakte met foonnommers</item>
+      <item quantity="one">1 kontak met foonnommer</item>
+    </plurals>
     <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"Geen kontakte met foonnommers nie"</string>
-  <plurals name="listFoundAllContacts">
-    <item quantity="one" msgid="5517063038754171134">"1 gevind"</item>
-    <item quantity="other" msgid="3852668542926965042">"<xliff:g id="COUNT">%d</xliff:g> gevind"</item>
-  </plurals>
+    <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> gevind</item>
+      <item quantity="one">1 gevind</item>
+    </plurals>
     <string name="listFoundAllContactsZero" msgid="922980883593159444">"Geen kontakte nie"</string>
-  <plurals name="searchFoundContacts">
-    <item quantity="one" msgid="4826918429708286628">"1 gevind"</item>
-    <item quantity="other" msgid="7988132539476575389">"<xliff:g id="COUNT">%d</xliff:g> gevind"</item>
-  </plurals>
+    <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> gevind</item>
+      <item quantity="one">1 gevind</item>
+    </plurals>
     <string name="all_contacts_tab_label" msgid="6250372293594147703">"Alle kontakte"</string>
     <string name="favorites_tab_label" msgid="1524869648904016414">"Gunstelinge"</string>
     <string name="callBack" msgid="5498224409038809224">"Bel terug"</string>
@@ -144,9 +151,6 @@
     <string name="pick_new_photo" msgid="9122450996263688237">"Kies nuwe foto"</string>
     <string name="locale_change_in_progress" msgid="7583992153091537467">"Kontaklys word tans opgedateer om die taalverandering te weerspieël."</string>
     <string name="upgrade_in_progress" msgid="474511436863451061">"Kontaklys word opgedateer."</string>
-    <string name="upgrade_out_of_memory" msgid="1209994418877625940">"Kontakte word tans opgradeer. \n\nDie opgraderingsproses benodig interne geheue van omtrent <xliff:g id="SIZE_IN_MEGABYTES">%s</xliff:g> MG. \n\nKies een van die volgende opsies:"</string>
-    <string name="upgrade_out_of_memory_uninstall" msgid="1721798828992091432">"Deïnstalleer sekere programme"</string>
-    <string name="upgrade_out_of_memory_retry" msgid="8431289830472724609">"Herprobeer opgradering"</string>
     <string name="search_results_searching" msgid="3984833028938569930">"Soek tans…"</string>
     <string name="menu_display_selected" msgid="6470001164297969034">"Wys gekose"</string>
     <string name="menu_display_all" msgid="8887488642609786198">"Wys alle"</string>
@@ -160,10 +164,10 @@
     <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>
-  <plurals name="merge_info">
-    <item quantity="one" msgid="148365587896371969">"nie saamgevoeg nie"</item>
-    <item quantity="other" msgid="425683718017380845">"saamgevoeg uit <xliff:g id="COUNT">%0$d</xliff:g> bronne"</item>
-  </plurals>
+    <plurals name="merge_info" formatted="false" msgid="2489323424994280962">
+      <item quantity="other">saamgevoeg uit <xliff:g id="COUNT">%0$d</xliff:g> bronne</item>
+      <item quantity="one">nie saamgevoeg nie</item>
+    </plurals>
     <string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"Voeg die huidige kontak by die gekose kontak saam?"</string>
     <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Wissel na redigering van die gekose kontak? Inligting wat jy tot dusver ingevoer het, sal gekopieer word."</string>
     <string name="menu_copyContact" msgid="1573960845106822639">"Kopieer na My kontakte"</string>
@@ -172,7 +176,7 @@
     <string name="list_filter_custom" msgid="8910173055702057002">"Gepasmaak"</string>
     <string name="activity_title_settings" msgid="5464130076132770781">"Instellings"</string>
     <string name="menu_settings" msgid="377929915873428211">"Instellings"</string>
-    <string name="menu_help" msgid="5123887102216637725">"Hulp"</string>
+    <string name="menu_help" msgid="1680178646764069976">"Hulp en terugvoer"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"Vertoonopsies"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="non_phone_caption" msgid="1541655052330027380">"Foonnommer"</string>
@@ -188,19 +192,19 @@
     <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Voer kontakte in"</string>
     <string name="create_group_dialog_title" msgid="6874527142828424475">"Skep nuwe groep"</string>
     <string name="create_group_item_label" msgid="4411981763169654825">"Skep nuwe groep"</string>
-  <plurals name="num_groups_in_account">
-    <item quantity="one" msgid="2944819210288517794">"1 groep"</item>
-    <item quantity="other" msgid="1276758425904917367">"<xliff:g id="COUNT">%0$d</xliff:g> groepe"</item>
-  </plurals>
+    <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
+      <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> groepe</item>
+      <item quantity="one">1 groep</item>
+    </plurals>
     <string name="delete_group_dialog_message" msgid="7586856514337560529">"Verwyder die groep \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\"? (Kontakte self sal nie verwyder word nie.)"</string>
-  <plurals name="num_contacts_in_group">
-    <item quantity="one" msgid="1352418549951013448">"<xliff:g id="COUNT_0">%1$d</xliff:g> persoon van <xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>"</item>
-    <item quantity="other" msgid="8146027769011086349">"<xliff:g id="COUNT_0">%1$d</xliff:g> persone uit <xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>"</item>
-  </plurals>
-  <plurals name="group_list_num_contacts_in_group">
-    <item quantity="one" msgid="3323065321661972446">"<xliff:g id="COUNT">%1$d</xliff:g> persoon"</item>
-    <item quantity="other" msgid="6251996206137048525">"<xliff:g id="COUNT">%1$d</xliff:g> mense"</item>
-  </plurals>
+    <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> mense vanaf <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> persoon vanaf <xliff:g id="ACCOUNT_TYPE_1">%2$s</xliff:g></item>
+    </plurals>
+    <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
+      <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> mense</item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> persoon</item>
+    </plurals>
     <string name="toast_join_with_empty_contact" msgid="2238581529864542985">"Voer kontaknaam in voor jy dit by \'n ander kontak voeg."</string>
     <string name="copy_text" msgid="3257145021583508761">"Kopieer na knipbord"</string>
     <string name="set_default" msgid="4417505153468300351">"Stel verstek op"</string>
@@ -264,4 +268,5 @@
     <string name="content_description_recent_call" msgid="5183800406316723676">"onlangse oproep. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. klik om terug te bel"</string>
     <string name="message_from_you_prefix" msgid="7180706529908434482">"Jy: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
     <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"Hangouts werk beter as jy die persoon se Hangouts-identifiseerder in die e-posveld of foonveld invoer."</string>
+    <string name="compact_editor_more_fields" msgid="2874181192382284115">"Meer velde"</string>
 </resources>
diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml
index 4861a50..3bd810d 100644
--- a/res/values-am/strings.xml
+++ b/res/values-am/strings.xml
@@ -46,6 +46,7 @@
     <string name="description_action_menu_add_star" msgid="3327186327234177456">"ወደ ተወዳጆች ታክሏል"</string>
     <string name="menu_editContact" msgid="9042415603857662633">"አርትዕ"</string>
     <string name="menu_deleteContact" msgid="6788644058868189393">"ሰርዝ"</string>
+    <string name="menu_change_photo" msgid="7769177631511496210">"ፎቶ ለውጥ"</string>
     <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"መነሻ የማያ ገጽ ላይ አስቀምጥ"</string>
     <string name="menu_call" msgid="3992595586042260618">"የጥሪ ዕውቂያ"</string>
     <string name="menu_sendSMS" msgid="5535886767547006515">"ዕውቂያ ፃፍ"</string>
@@ -56,17 +57,23 @@
     <string name="menu_new_group_action_bar" msgid="3520232877587377175">"ቡድን ያክሉ"</string>
     <string name="splitConfirmation_title" msgid="633640935430370530">"ዕውቂያ ለይ"</string>
     <string name="splitConfirmation" msgid="740190210499587175">"ይህ ዕውቅያ ወደ ብዙ ዕውቅያዎች ይለያል፡፡"</string>
-    <string name="menu_joinAggregate" msgid="5027981918265667970">"አገናኝ"</string>
+    <string name="menu_joinAggregate" msgid="4050157483569357666">"አዋህድ"</string>
     <string name="titleJoinContactDataWith" msgid="7684875775798635354">"ዕውቄያዎችን አገናኝ"</string>
     <string name="blurbJoinContactDataWith" msgid="8736488417422708236">"ከ<xliff:g id="NAME">%s</xliff:g> ጋር ለመቀላቀል የምትፈልገውን ዕውቂያ ምረጥ።"</string>
     <string name="showAllContactsJoinItem" msgid="2189695051430392383">"ሁሉንም ዕውቂያዎች አሳይ"</string>
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"አስተያየት የተሰጠባቸው እውቅያዎች"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"ሁሉም እውቅያዎች"</string>
-    <string name="contactsJoinedMessage" msgid="7208148163607047389">"ዕውቂያዎች ተገናኝተዋል"</string>
+    <string name="contactsJoinedMessage" msgid="656936718666768589">"ዕውቂያዎች ተዋህደዋል"</string>
+    <string name="contacts_deleted_toast" msgid="286851430992788215">"ዕውቂያዎች ተሰርዘዋል"</string>
     <string name="menu_set_ring_tone" msgid="8728345772068064946">"የጥሪ ድምፅ አዘጋጅ"</string>
     <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"ሁሉንም ጥሪዎች ወደ ድምፅ መልዕክት"</string>
     <string name="readOnlyContactWarning" msgid="7808825687289848259">"ዕውቂያዎችን ከንባብ-ብቻ መለያዎች መሰረዝ አይችሉም፤ ነገር ግን በዕውቂያ ዝርዝሮች ውስጥ መደበቅ ይችላሉ።"</string>
     <string name="readOnlyContactDeleteConfirmation" msgid="2137170726670196909">"ይህ ዕውቂያ ከብዙ መለያዎች መረጃ ይዟል።ከንባብ-ብቻ መለያዎች ውስጥ ያሉ ዕውቂያዎች ይደበቃሉ፣አይሰረዙም።"</string>
+    <string name="batch_merge_single_contact_warning" msgid="982585201970392110">"ማዋሃድን ለማከናወን ቢያንስ ሁለት እውቂያዎችን መምረጥ ያስፈልግዎታል።"</string>
+    <string name="batch_merge_confirmation" msgid="8551299480317422420">"የተመረጡት እውቂያዎች ወደ አንድ ነጠላ እውቂያ ይዋሃዳሉ።"</string>
+    <string name="batch_delete_confirmation" msgid="2564172328268885394">"የተመረጡት እውቂያዎች ይሰረዛሉ።"</string>
+    <string name="batch_delete_read_only_contact_confirmation" msgid="6614878716815412523">"ከተነባቢ-ብቻ መለያዎች ውስጥ ያሉ እውቂያዎች ይደበቃሉ ከእርስዎ የእውቂያዎች ዝርዝሮች ላይ ይደበቃሉ፣ አይሰረዙም።"</string>
+    <string name="batch_delete_multiple_accounts_confirmation" msgid="5189722181586680185">"እነዚህ እውቂያዎች ከብዙ መለያዎች መረጃ ይዘዋል። ከተነባቢ-ብቻ መለያዎች ውስጥ ያሉ እውቂያዎች ይደበቃሉ ከእርስዎ የእውቂያዎች ዝርዝሮች ላይ ይደበቃሉ፣ አይሰረዙም።"</string>
     <string name="multipleContactDeleteConfirmation" msgid="938900978442960800">"ይህን ዕውቂያ መሰረዝ ከብዙ መለያዎች ውስጥ መረጃ ይሰርዛል።"</string>
     <string name="deleteConfirmation" msgid="811706994761610640">"ይህ ማንቂያ ይሰረዛል።"</string>
     <string name="menu_discard" msgid="6854657936970228164">"ለውጦችን ጣለው"</string>
@@ -94,20 +101,20 @@
     <string name="contactSavedErrorToast" msgid="3207250533172944892">"የእውቂያ ለውጦች ማስቀመጥ አልተቻለም::"</string>
     <string name="groupSavedToast" msgid="1168756874239833756">"ቡድን ተቀምጧል።"</string>
     <string name="groupSavedErrorToast" msgid="7984466936615304740">"የቡድን ለውጦች ማስቀመጥ አልተቻለም::"</string>
-  <plurals name="listTotalPhoneContacts">
-    <item quantity="one" msgid="3015357862286673986">"1 ዕውቂያ ከስልክ ቁጥር ጋር"</item>
-    <item quantity="other" msgid="3299954047880968205">"<xliff:g id="COUNT">%d</xliff:g> ዕውቂያዎች ከስልክ ቁጥሮች ጋር"</item>
-  </plurals>
+    <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
+      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> ዕውቂያዎች ከስልክ ቁጥሮች ጋር</item>
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ዕውቂያዎች ከስልክ ቁጥሮች ጋር</item>
+    </plurals>
     <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"ከስልክ ቁጥር ጋር የሚታዩ ዕውቂያዎች የሉም"</string>
-  <plurals name="listFoundAllContacts">
-    <item quantity="one" msgid="5517063038754171134">"1 ተገኝቷል"</item>
-    <item quantity="other" msgid="3852668542926965042">"<xliff:g id="COUNT">%d</xliff:g> ተገኝቷል"</item>
-  </plurals>
+    <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
+      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> ተገኝቷል</item>
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ተገኝቷል</item>
+    </plurals>
     <string name="listFoundAllContactsZero" msgid="922980883593159444">"እውቅያዎች የሉም"</string>
-  <plurals name="searchFoundContacts">
-    <item quantity="one" msgid="4826918429708286628">"1 ተገኝቷል"</item>
-    <item quantity="other" msgid="7988132539476575389">"<xliff:g id="COUNT">%d</xliff:g> ተገኝቷል"</item>
-  </plurals>
+    <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
+      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> ተገኝቷል</item>
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ተገኝቷል</item>
+    </plurals>
     <string name="all_contacts_tab_label" msgid="6250372293594147703">"ሁሉም ዕውቂያዎች"</string>
     <string name="favorites_tab_label" msgid="1524869648904016414">"ተወዳጆች"</string>
     <string name="callBack" msgid="5498224409038809224">"የኋላ ጥሪ"</string>
@@ -144,9 +151,6 @@
     <string name="pick_new_photo" msgid="9122450996263688237">"አዲስ ፎቶ ይምረጡ"</string>
     <string name="locale_change_in_progress" msgid="7583992153091537467">"የቋንቋ ለውጥ ለማንፀባረቅ የዕውቂያ ዝርዝር ዘምኗል።"</string>
     <string name="upgrade_in_progress" msgid="474511436863451061">"የዕውቂያ ዝርዝር ዘምኗል"</string>
-    <string name="upgrade_out_of_memory" msgid="1209994418877625940">"ዕውቂያዎች በአልቅ ሂደት ውስጥ ናቸው።\n\nየአልቁ ሂደት ወደ <xliff:g id="SIZE_IN_MEGABYTES">%s</xliff:g>ሜባ አካባቢ የውስጥ ማከማቻ \n\nይጠይቃል።ከሚከተሉት አማራጮች አንዱን ይምረጡ፡"</string>
-    <string name="upgrade_out_of_memory_uninstall" msgid="1721798828992091432">"አንዳንድ ትግበራዎችን አለመጫን"</string>
-    <string name="upgrade_out_of_memory_retry" msgid="8431289830472724609">"አልቅ ድጋሚ ሞክር"</string>
     <string name="search_results_searching" msgid="3984833028938569930">"በመፈለግ ላይ…"</string>
     <string name="menu_display_selected" msgid="6470001164297969034">"የተመረጡትን አሳይ"</string>
     <string name="menu_display_all" msgid="8887488642609786198">"ሁሉንም አሳይ"</string>
@@ -160,10 +164,10 @@
     <string name="primary_photo" msgid="8517942231868516999">"ዋና ፎቶ"</string>
     <string name="description_star" msgid="2605854427360036550">"ተወዳጅ"</string>
     <string name="edit_contact" msgid="7529281274005689512">"እውቅያ አርትዕ"</string>
-  <plurals name="merge_info">
-    <item quantity="one" msgid="148365587896371969">"አልተዋሃደም"</item>
-    <item quantity="other" msgid="425683718017380845">"ከ<xliff:g id="COUNT">%0$d</xliff:g> ምንጮች የተዋሃደ"</item>
-  </plurals>
+    <plurals name="merge_info" formatted="false" msgid="2489323424994280962">
+      <item quantity="one">ከ<xliff:g id="COUNT">%0$d</xliff:g> ምንጮች ተዋህዷል</item>
+      <item quantity="other">ከ<xliff:g id="COUNT">%0$d</xliff:g> ምንጮች ተዋህዷል</item>
+    </plurals>
     <string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"የአሁኑ ዕውቂያ ከተመረጠው ዕውቂያ ጋር ይገናኝ?"</string>
     <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"የተመረጠው ዕውቂያ ወደ አርትዕ ይቀየር? እስከ አሁን ያስገቡት መረጃ ይገለበጣል።"</string>
     <string name="menu_copyContact" msgid="1573960845106822639">"ወደ ዕውቂያዎቼ ቅዳ"</string>
@@ -172,7 +176,7 @@
     <string name="list_filter_custom" msgid="8910173055702057002">"ብጁ"</string>
     <string name="activity_title_settings" msgid="5464130076132770781">"ቅንብሮች"</string>
     <string name="menu_settings" msgid="377929915873428211">"ቅንብሮች"</string>
-    <string name="menu_help" msgid="5123887102216637725">"እገዛ"</string>
+    <string name="menu_help" msgid="1680178646764069976">"እገዛ እና ግብረመልስ"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"ማሳያ አማራጮች"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>፣ <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="non_phone_caption" msgid="1541655052330027380">"ስልክ ቁጥር:"</string>
@@ -188,19 +192,19 @@
     <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"እውቅያዎችን ከውጭ አስመጣ"</string>
     <string name="create_group_dialog_title" msgid="6874527142828424475">"አዲስ ቡድን ፍጠር"</string>
     <string name="create_group_item_label" msgid="4411981763169654825">"አዲስ ቡድን ፍጠር"</string>
-  <plurals name="num_groups_in_account">
-    <item quantity="one" msgid="2944819210288517794">"1 ቡድን"</item>
-    <item quantity="other" msgid="1276758425904917367">"<xliff:g id="COUNT">%0$d</xliff:g>ቡድኖች"</item>
-  </plurals>
+    <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
+      <item quantity="one"><xliff:g id="COUNT">%0$d</xliff:g> ቡድኖች</item>
+      <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> ቡድኖች</item>
+    </plurals>
     <string name="delete_group_dialog_message" msgid="7586856514337560529">"\'<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\' ቡድን ይሰረዝ? (ዕውቂያዎች ራሳቸው አይሰረዙም።)"</string>
-  <plurals name="num_contacts_in_group">
-    <item quantity="one" msgid="1352418549951013448">"<xliff:g id="COUNT_0">%1$d</xliff:g>ሰው ከ<xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>"</item>
-    <item quantity="other" msgid="8146027769011086349">"<xliff:g id="COUNT_0">%1$d</xliff:g>ሰዎች ከ<xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>"</item>
-  </plurals>
-  <plurals name="group_list_num_contacts_in_group">
-    <item quantity="one" msgid="3323065321661972446">"<xliff:g id="COUNT">%1$d</xliff:g> ሰው"</item>
-    <item quantity="other" msgid="6251996206137048525">"<xliff:g id="COUNT">%1$d</xliff:g> ሰዎች"</item>
-  </plurals>
+    <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
+      <item quantity="one"><xliff:g id="COUNT_2">%1$d</xliff:g> ሰዎች ከ<xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> ሰዎች ከ<xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
+    </plurals>
+    <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
+      <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> ሰዎች</item>
+      <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> ሰዎች</item>
+    </plurals>
     <string name="toast_join_with_empty_contact" msgid="2238581529864542985">"ሌላ ዕውቂያ ከመቀላቀልህ በፊት የዕውቂያ ስም ተይብ።"</string>
     <string name="copy_text" msgid="3257145021583508761">"ወደ ቅንጥብ ሰሌዳ ገልብጥ"</string>
     <string name="set_default" msgid="4417505153468300351">"ነባሪ አዘጋጅ"</string>
@@ -264,4 +268,5 @@
     <string name="content_description_recent_call" msgid="5183800406316723676">"የቅርብ ጊዜ ጥሪ። <xliff:g id="CALL_TYPE">%s</xliff:g>። <xliff:g id="PHONE_NUMBER">%s</xliff:g>። <xliff:g id="DATE">%s</xliff:g>። መልሰው ለመደወል ጠቅ ያድርጉ"</string>
     <string name="message_from_you_prefix" msgid="7180706529908434482">"እርስዎ፦ <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
     <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"የግለሰቡን የHangouts ለይቶ አዋቂ ወደ ኢሜይል መስኩ ወይም የስልክ መስኩ በሚያስገቡበት ጊዜ Hangouts በተሻለ ሁኔታ ይሰራል።"</string>
+    <string name="compact_editor_more_fields" msgid="2874181192382284115">"ተጨማሪ መስኮች"</string>
 </resources>
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index 487ec59..ac34a83 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -46,6 +46,7 @@
     <string name="description_action_menu_add_star" msgid="3327186327234177456">"تمت الإضافة إلى المفضلة"</string>
     <string name="menu_editContact" msgid="9042415603857662633">"تعديل"</string>
     <string name="menu_deleteContact" msgid="6788644058868189393">"حذف"</string>
+    <string name="menu_change_photo" msgid="7769177631511496210">"تغيير الصورة"</string>
     <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"وضع على الشاشة الرئيسية"</string>
     <string name="menu_call" msgid="3992595586042260618">"الاتصال بجهة الاتصال"</string>
     <string name="menu_sendSMS" msgid="5535886767547006515">"إرسال رسالة لجهة الاتصال"</string>
@@ -56,17 +57,23 @@
     <string name="menu_new_group_action_bar" msgid="3520232877587377175">"إضافة مجموعة"</string>
     <string name="splitConfirmation_title" msgid="633640935430370530">"فصل جهة الاتصال؟"</string>
     <string name="splitConfirmation" msgid="740190210499587175">"سيتم فصل جهة الاتصال هذه إلى عدة جهات اتصال."</string>
-    <string name="menu_joinAggregate" msgid="5027981918265667970">"إضافة"</string>
+    <string name="menu_joinAggregate" msgid="4050157483569357666">"دمج"</string>
     <string name="titleJoinContactDataWith" msgid="7684875775798635354">"ضم جهات الاتصال"</string>
     <string name="blurbJoinContactDataWith" msgid="8736488417422708236">"اختر جهة الاتصال التي تريد ضمها إلى <xliff:g id="NAME">%s</xliff:g>:"</string>
     <string name="showAllContactsJoinItem" msgid="2189695051430392383">"عرض جميع جهات الاتصال"</string>
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"جهات الاتصال المقترحة"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"جميع جهات الاتصال"</string>
-    <string name="contactsJoinedMessage" msgid="7208148163607047389">"جهات الاتصال المنضمة"</string>
+    <string name="contactsJoinedMessage" msgid="656936718666768589">"تم دمج جهات الاتصال."</string>
+    <string name="contacts_deleted_toast" msgid="286851430992788215">"تم حذف جهات الاتصال."</string>
     <string name="menu_set_ring_tone" msgid="8728345772068064946">"تعيين نغمة رنين"</string>
     <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"جميع المكالمات إلى البريد الصوتي"</string>
     <string name="readOnlyContactWarning" msgid="7808825687289848259">"لا يمكنك حذف جهات الاتصال من حسابات للقراءة فقط، ولكن يمكنك إخفاؤها في قوائم جهات الاتصال."</string>
     <string name="readOnlyContactDeleteConfirmation" msgid="2137170726670196909">"تحتوي جهة الاتصال هذه على معلومات من عدة حسابات. وسيتم إخفاء المعلومات من الحسابات التي للقراءة فقط في قوائم جهات الاتصال، وليس حذفها."</string>
+    <string name="batch_merge_single_contact_warning" msgid="982585201970392110">"يجب تحديد جهتي اتصال على الأقل لإجراء الدمج."</string>
+    <string name="batch_merge_confirmation" msgid="8551299480317422420">"سيتم دمج جهات الاتصال المحددة في جهة اتصال واحدة."</string>
+    <string name="batch_delete_confirmation" msgid="2564172328268885394">"سيتم حذف جهات الاتصال المحددة."</string>
+    <string name="batch_delete_read_only_contact_confirmation" msgid="6614878716815412523">"سيتم إخفاء المعلومات من الحسابات المخصصة للقراءة فقط في قوائم جهات الاتصال، وليس حذفها."</string>
+    <string name="batch_delete_multiple_accounts_confirmation" msgid="5189722181586680185">"تحتوي جهات الاتصال هذه على معلومات من حسابات متعددة. وسيتم إخفاء المعلومات من الحسابات المخصصة للقراءة فقط في قوائم جهات الاتصال، وليس حذفها."</string>
     <string name="multipleContactDeleteConfirmation" msgid="938900978442960800">"سيؤدي حذف جهة الاتصال هذه إلى حذف المعلومات من عدة حسابات."</string>
     <string name="deleteConfirmation" msgid="811706994761610640">"سيتم حذف جهة الاتصال هذه."</string>
     <string name="menu_discard" msgid="6854657936970228164">"إلغاء التغييرات"</string>
@@ -94,20 +101,32 @@
     <string name="contactSavedErrorToast" msgid="3207250533172944892">"تعذر حفظ التغييرات التي تم إجراؤها على جهة الاتصال."</string>
     <string name="groupSavedToast" msgid="1168756874239833756">"تم حفظ المجموعة."</string>
     <string name="groupSavedErrorToast" msgid="7984466936615304740">"تعذر حفظ التغييرات التي تم إجراؤها على المجموعة."</string>
-  <plurals name="listTotalPhoneContacts">
-    <item quantity="one" msgid="3015357862286673986">"جهة اتصال واحدة بها رقم هاتف"</item>
-    <item quantity="other" msgid="3299954047880968205">"<xliff:g id="COUNT">%d</xliff:g> من جهات الاتصال التي تشتمل على أرقام هواتف"</item>
-  </plurals>
+    <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
+      <item quantity="zero">لا توجد أية جهات اتصال بها أرقام هواتف (<xliff:g id="COUNT">%d</xliff:g>)</item>
+      <item quantity="two">توجد جهتا اتصال (<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>
+      <item quantity="one">توجد جهة اتصال واحدة بها رقم هاتف</item>
+    </plurals>
     <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"ليس هناك جهات اتصال تشتمل على أرقام هواتف"</string>
-  <plurals name="listFoundAllContacts">
-    <item quantity="one" msgid="5517063038754171134">"تم العثور على جهة اتصال واحدة"</item>
-    <item quantity="other" msgid="3852668542926965042">"تم العثور على <xliff:g id="COUNT">%d</xliff:g>"</item>
-  </plurals>
+    <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
+      <item quantity="zero">لا توجد أي جهة اتصال (<xliff:g id="COUNT">%d</xliff:g>)</item>
+      <item quantity="two">توجد جهتا اتصال (<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>
+      <item quantity="one">توجد جهة اتصال واحدة</item>
+    </plurals>
     <string name="listFoundAllContactsZero" msgid="922980883593159444">"ليست هناك جهات اتصال"</string>
-  <plurals name="searchFoundContacts">
-    <item quantity="one" msgid="4826918429708286628">"تم العثور على جهة اتصال واحدة"</item>
-    <item quantity="other" msgid="7988132539476575389">"تم العثور على <xliff:g id="COUNT">%d</xliff:g>"</item>
-  </plurals>
+    <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
+      <item quantity="zero">لا توجد أي جهة اتصال (<xliff:g id="COUNT">%d</xliff:g>)</item>
+      <item quantity="two">توجد جهتا اتصال (<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>
+      <item quantity="one">توجد جهة اتصال واحدة</item>
+    </plurals>
     <string name="all_contacts_tab_label" msgid="6250372293594147703">"كل جهات الاتصال"</string>
     <string name="favorites_tab_label" msgid="1524869648904016414">"المفضلة"</string>
     <string name="callBack" msgid="5498224409038809224">"معاودة الاتصال"</string>
@@ -144,9 +163,6 @@
     <string name="pick_new_photo" msgid="9122450996263688237">"تحديد صورة جديدة"</string>
     <string name="locale_change_in_progress" msgid="7583992153091537467">"يجري تحديث قائمة جهات الاتصال لتعكس التغير في اللغة."</string>
     <string name="upgrade_in_progress" msgid="474511436863451061">"يجري تحديث قائمة جهات الاتصال."</string>
-    <string name="upgrade_out_of_memory" msgid="1209994418877625940">"جهات الاتصال قيد الترقية.\n\nتتطلب عملية الترقية مساحة تبلغ حوالي <xliff:g id="SIZE_IN_MEGABYTES">%s</xliff:g> ميغابايت من سعة التخزين الداخلية.\n\nاختر أحد الخيارات التالية:"</string>
-    <string name="upgrade_out_of_memory_uninstall" msgid="1721798828992091432">"إزالة بعض التطبيقات"</string>
-    <string name="upgrade_out_of_memory_retry" msgid="8431289830472724609">"إعادة محاولة الترقية"</string>
     <string name="search_results_searching" msgid="3984833028938569930">"جارٍ البحث..."</string>
     <string name="menu_display_selected" msgid="6470001164297969034">"عرض العناصر المحددة"</string>
     <string name="menu_display_all" msgid="8887488642609786198">"عرض الكل"</string>
@@ -160,10 +176,14 @@
     <string name="primary_photo" msgid="8517942231868516999">"الصورة الأساسية"</string>
     <string name="description_star" msgid="2605854427360036550">"مفضل"</string>
     <string name="edit_contact" msgid="7529281274005689512">"تعديل جهة الاتصال"</string>
-  <plurals name="merge_info">
-    <item quantity="one" msgid="148365587896371969">"لم يتم دمجها"</item>
-    <item quantity="other" msgid="425683718017380845">"تم دمجها من <xliff:g id="COUNT">%0$d</xliff:g> من المصادر"</item>
-  </plurals>
+    <plurals name="merge_info" formatted="false" msgid="2489323424994280962">
+      <item quantity="zero">لم يتم دمج أية جهات اتصال من أية مصادر (<xliff:g id="COUNT">%0$d</xliff:g>)</item>
+      <item quantity="two">تم دمج جهات الاتصال من مصدرين (<xliff:g id="COUNT">%0$d</xliff:g>)</item>
+      <item quantity="few">تم دمج جهات الاتصال من <xliff:g id="COUNT">%0$d</xliff:g> مصادر</item>
+      <item quantity="many">تم دمج جهات الاتصال من <xliff:g id="COUNT">%0$d</xliff:g> مصدرًا</item>
+      <item quantity="other">تم دمج جهات الاتصال من <xliff:g id="COUNT">%0$d</xliff:g> من المصادر</item>
+      <item quantity="one">تم دمج جهة اتصال واحدة</item>
+    </plurals>
     <string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"هل تريد ضم جهة الاتصال الحالية إلى جهة الاتصال المحددة؟"</string>
     <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"هل تريد التبديل إلى تعديل جهة الاتصال المحددة؟ سيتم نسخ المعلومات التي أدخلتها حتى الآن."</string>
     <string name="menu_copyContact" msgid="1573960845106822639">"نسخ إلى جهات الاتصال الخاصة بي"</string>
@@ -172,7 +192,7 @@
     <string name="list_filter_custom" msgid="8910173055702057002">"مخصص"</string>
     <string name="activity_title_settings" msgid="5464130076132770781">"الإعدادات"</string>
     <string name="menu_settings" msgid="377929915873428211">"الإعدادات"</string>
-    <string name="menu_help" msgid="5123887102216637725">"مساعدة"</string>
+    <string name="menu_help" msgid="1680178646764069976">"المساعدة والتعليقات"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"خيارات العرض"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>، <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="non_phone_caption" msgid="1541655052330027380">"رقم الهاتف"</string>
@@ -188,19 +208,31 @@
     <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"استيراد جهات الاتصال"</string>
     <string name="create_group_dialog_title" msgid="6874527142828424475">"إنشاء مجموعة جديدة"</string>
     <string name="create_group_item_label" msgid="4411981763169654825">"إنشاء مجموعة جديدة"</string>
-  <plurals name="num_groups_in_account">
-    <item quantity="one" msgid="2944819210288517794">"مجموعة واحدة"</item>
-    <item quantity="other" msgid="1276758425904917367">"<xliff:g id="COUNT">%0$d</xliff:g> من المجموعات"</item>
-  </plurals>
+    <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
+      <item quantity="zero"><xliff:g id="COUNT">%0$d</xliff:g> مجموعات</item>
+      <item quantity="two">مجموعتان (<xliff:g id="COUNT">%0$d</xliff:g>)</item>
+      <item quantity="few"><xliff:g id="COUNT">%0$d</xliff:g> مجموعات</item>
+      <item quantity="many"><xliff:g id="COUNT">%0$d</xliff:g> مجموعة</item>
+      <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> من المجموعات</item>
+      <item quantity="one">مجموعة واحدة</item>
+    </plurals>
     <string name="delete_group_dialog_message" msgid="7586856514337560529">"هل تريد حذف المجموعة \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\"؟ (لن يتم حذف جهات الاتصال ذاتها)."</string>
-  <plurals name="num_contacts_in_group">
-    <item quantity="one" msgid="1352418549951013448">"<xliff:g id="COUNT_0">%1$d</xliff:g> من الأشخاص من <xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>"</item>
-    <item quantity="other" msgid="8146027769011086349">"<xliff:g id="COUNT_0">%1$d</xliff:g> من الأشخاص من <xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>"</item>
-  </plurals>
-  <plurals name="group_list_num_contacts_in_group">
-    <item quantity="one" msgid="3323065321661972446">"<xliff:g id="COUNT">%1$d</xliff:g> من الأشخاص"</item>
-    <item quantity="other" msgid="6251996206137048525">"<xliff:g id="COUNT">%1$d</xliff:g> من الأشخاص"</item>
-  </plurals>
+    <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
+      <item quantity="zero">لا يوجد أي شخص (<xliff:g id="COUNT_2">%1$d</xliff:g>) من <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
+      <item quantity="two">يوجد شخصان (<xliff:g id="COUNT_2">%1$d</xliff:g>) من <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
+      <item quantity="few">يوجد <xliff:g id="COUNT_2">%1$d</xliff:g> أشخاص من <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
+      <item quantity="many">يوجد <xliff:g id="COUNT_2">%1$d</xliff:g> شخصًا من <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
+      <item quantity="other">يوجد <xliff:g id="COUNT_2">%1$d</xliff:g> من الأشخاص من <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
+      <item quantity="one">يوجد شخص واحد (<xliff:g id="COUNT_0">%1$d</xliff:g>) من <xliff:g id="ACCOUNT_TYPE_1">%2$s</xliff:g></item>
+    </plurals>
+    <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
+      <item quantity="zero">لا يوجد أي شخص (<xliff:g id="COUNT_1">%1$d</xliff:g>)</item>
+      <item quantity="two">شخصان (<xliff:g id="COUNT_1">%1$d</xliff:g>)</item>
+      <item quantity="few"><xliff:g id="COUNT_1">%1$d</xliff:g> أشخاص</item>
+      <item quantity="many"><xliff:g id="COUNT_1">%1$d</xliff:g> شخصًا</item>
+      <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> من الأشخاص</item>
+      <item quantity="one">شخص واحد (<xliff:g id="COUNT_0">%1$d</xliff:g>)</item>
+    </plurals>
     <string name="toast_join_with_empty_contact" msgid="2238581529864542985">"اكتب اسم جهة الاتصال قبل الانضمام إلى جهة اتصال أخرى."</string>
     <string name="copy_text" msgid="3257145021583508761">"نسخ إلى الحافظة"</string>
     <string name="set_default" msgid="4417505153468300351">"تعيين كافتراضي"</string>
@@ -264,4 +296,5 @@
     <string name="content_description_recent_call" msgid="5183800406316723676">"المكالمة الأخيرة. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. انقر لمعاودة الاتصال"</string>
     <string name="message_from_you_prefix" msgid="7180706529908434482">"أنت: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
     <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"‏تعمل Hangouts بشكل أفضل عند إدخال معرف الشخص في Hangouts في حقل البريد الإلكتروني أو حقل الهاتف."</string>
+    <string name="compact_editor_more_fields" msgid="2874181192382284115">"المزيد من الحقول"</string>
 </resources>
diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml
index d52f3b2..62294fd 100644
--- a/res/values-bg/strings.xml
+++ b/res/values-bg/strings.xml
@@ -46,6 +46,7 @@
     <string name="description_action_menu_add_star" msgid="3327186327234177456">"Добавено към любимите"</string>
     <string name="menu_editContact" msgid="9042415603857662633">"Редактиране"</string>
     <string name="menu_deleteContact" msgid="6788644058868189393">"Изтриване"</string>
+    <string name="menu_change_photo" msgid="7769177631511496210">"Промяна на снимката"</string>
     <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Поставяне на началния екран"</string>
     <string name="menu_call" msgid="3992595586042260618">"Обаждане на контакт"</string>
     <string name="menu_sendSMS" msgid="5535886767547006515">"Изпращaне на SMS на контакт"</string>
@@ -56,17 +57,23 @@
     <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Добавяне на група"</string>
     <string name="splitConfirmation_title" msgid="633640935430370530">"Да се раздели ли контактът?"</string>
     <string name="splitConfirmation" msgid="740190210499587175">"Този контакт ще бъдат разделен на няколко."</string>
-    <string name="menu_joinAggregate" msgid="5027981918265667970">"Сливане"</string>
+    <string name="menu_joinAggregate" msgid="4050157483569357666">"Обединяване"</string>
     <string name="titleJoinContactDataWith" msgid="7684875775798635354">"Сливане на контакти"</string>
     <string name="blurbJoinContactDataWith" msgid="8736488417422708236">"Изберете контакт, който да слеете с <xliff:g id="NAME">%s</xliff:g>:"</string>
     <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Показване на всички контакти"</string>
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Предлагани контакти"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Всички контакти"</string>
-    <string name="contactsJoinedMessage" msgid="7208148163607047389">"Контактите са слети"</string>
+    <string name="contactsJoinedMessage" msgid="656936718666768589">"Контактите са обединени"</string>
+    <string name="contacts_deleted_toast" msgid="286851430992788215">"Контактите са изтрити"</string>
     <string name="menu_set_ring_tone" msgid="8728345772068064946">"Мелодия: Задав."</string>
     <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Всички обаждания до гл. поща"</string>
     <string name="readOnlyContactWarning" msgid="7808825687289848259">"Не можете да изтриете контакти от профили само за четене, но можете да ги скриете в списъците си с контакти."</string>
     <string name="readOnlyContactDeleteConfirmation" msgid="2137170726670196909">"Този контакт съдържа информация от няколко профила. Тази от профили само за четене ще бъде скрита, а не изтрита."</string>
+    <string name="batch_merge_single_contact_warning" msgid="982585201970392110">"Трябва да изберете поне два контакта, за да извършите обединяване."</string>
+    <string name="batch_merge_confirmation" msgid="8551299480317422420">"Избраните контакти ще се обединят."</string>
+    <string name="batch_delete_confirmation" msgid="2564172328268885394">"Избраните контакти ще се изтрият."</string>
+    <string name="batch_delete_read_only_contact_confirmation" msgid="6614878716815412523">"Информацията от профилите само за четене ще бъде скрита в списъка с контактите ви, а не изтрита."</string>
+    <string name="batch_delete_multiple_accounts_confirmation" msgid="5189722181586680185">"Тези контакти съдържат данни от няколко профила. Информацията от профилите само за четене ще бъде скрита в списъка с контактите ви, а не изтрита."</string>
     <string name="multipleContactDeleteConfirmation" msgid="938900978442960800">"Изтриването на този контакт ще премахна информация от няколко профила."</string>
     <string name="deleteConfirmation" msgid="811706994761610640">"Този контакт ще бъде изтрит."</string>
     <string name="menu_discard" msgid="6854657936970228164">"Отхвърляне на промените"</string>
@@ -94,20 +101,20 @@
     <string name="contactSavedErrorToast" msgid="3207250533172944892">"Промените в контакта не можаха да бъдат запазени."</string>
     <string name="groupSavedToast" msgid="1168756874239833756">"Групата е запазена."</string>
     <string name="groupSavedErrorToast" msgid="7984466936615304740">"Промените в групата не можаха да бъдат запазени."</string>
-  <plurals name="listTotalPhoneContacts">
-    <item quantity="one" msgid="3015357862286673986">"1 контакт с телефонен номер"</item>
-    <item quantity="other" msgid="3299954047880968205">"<xliff:g id="COUNT">%d</xliff:g> контакта с телефонни номера"</item>
-  </plurals>
+    <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> контакта с телефонен номер</item>
+      <item quantity="one">1 контакт с телефонен номер</item>
+    </plurals>
     <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"Няма контакти с телефонни номера"</string>
-  <plurals name="listFoundAllContacts">
-    <item quantity="one" msgid="5517063038754171134">"1 намерен"</item>
-    <item quantity="other" msgid="3852668542926965042">"<xliff:g id="COUNT">%d</xliff:g> намерени"</item>
-  </plurals>
+    <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> намерени</item>
+      <item quantity="one">1 намерен</item>
+    </plurals>
     <string name="listFoundAllContactsZero" msgid="922980883593159444">"Няма контакти"</string>
-  <plurals name="searchFoundContacts">
-    <item quantity="one" msgid="4826918429708286628">"1 намерен"</item>
-    <item quantity="other" msgid="7988132539476575389">"<xliff:g id="COUNT">%d</xliff:g> намерени"</item>
-  </plurals>
+    <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> намерени</item>
+      <item quantity="one">1 намерен</item>
+    </plurals>
     <string name="all_contacts_tab_label" msgid="6250372293594147703">"Всички контакти"</string>
     <string name="favorites_tab_label" msgid="1524869648904016414">"Любими"</string>
     <string name="callBack" msgid="5498224409038809224">"Обратно обаждане"</string>
@@ -144,9 +151,6 @@
     <string name="pick_new_photo" msgid="9122450996263688237">"Избор на нова снимка"</string>
     <string name="locale_change_in_progress" msgid="7583992153091537467">"Списъкът с контакти се актуализира, за да отрази промяната на езика."</string>
     <string name="upgrade_in_progress" msgid="474511436863451061">"Списъкът с контакти се актуализира."</string>
-    <string name="upgrade_out_of_memory" msgid="1209994418877625940">"Контактите се надстройват. \n\nПроцесът се нуждае от приблизително <xliff:g id="SIZE_IN_MEGABYTES">%s</xliff:g> МБ вътрешно хранилище.\n\nИзберете една от следните опции:"</string>
-    <string name="upgrade_out_of_memory_uninstall" msgid="1721798828992091432">"Деинсталиране на някои приложения"</string>
-    <string name="upgrade_out_of_memory_retry" msgid="8431289830472724609">"Повторен опит за надстройка"</string>
     <string name="search_results_searching" msgid="3984833028938569930">"Търси се..."</string>
     <string name="menu_display_selected" msgid="6470001164297969034">"Показване на избраните"</string>
     <string name="menu_display_all" msgid="8887488642609786198">"Показване на всички"</string>
@@ -160,10 +164,10 @@
     <string name="primary_photo" msgid="8517942231868516999">"Основна снимка"</string>
     <string name="description_star" msgid="2605854427360036550">"любимо"</string>
     <string name="edit_contact" msgid="7529281274005689512">"Редактиране на контакта"</string>
-  <plurals name="merge_info">
-    <item quantity="one" msgid="148365587896371969">"без обединяване"</item>
-    <item quantity="other" msgid="425683718017380845">"обединено от <xliff:g id="COUNT">%0$d</xliff:g> източник/а"</item>
-  </plurals>
+    <plurals name="merge_info" formatted="false" msgid="2489323424994280962">
+      <item quantity="other">обединяване от <xliff:g id="COUNT">%0$d</xliff:g> източника</item>
+      <item quantity="one">без обединяване</item>
+    </plurals>
     <string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"Да се слее ли текущият контакт с избрания?"</string>
     <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Да се превключи ли към редактиране на избрания контакт? Въведената досега информация ще бъде копирана."</string>
     <string name="menu_copyContact" msgid="1573960845106822639">"Копиране в моите контакти"</string>
@@ -172,7 +176,7 @@
     <string name="list_filter_custom" msgid="8910173055702057002">"По избор"</string>
     <string name="activity_title_settings" msgid="5464130076132770781">"Настройки"</string>
     <string name="menu_settings" msgid="377929915873428211">"Настройки"</string>
-    <string name="menu_help" msgid="5123887102216637725">"Помощ"</string>
+    <string name="menu_help" msgid="1680178646764069976">"Помощ и отзиви"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"Опции за показване"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="non_phone_caption" msgid="1541655052330027380">"Телефонен номер"</string>
@@ -188,19 +192,19 @@
     <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Импортиране на контактите"</string>
     <string name="create_group_dialog_title" msgid="6874527142828424475">"Създаване на нова група"</string>
     <string name="create_group_item_label" msgid="4411981763169654825">"Създаване на нова група"</string>
-  <plurals name="num_groups_in_account">
-    <item quantity="one" msgid="2944819210288517794">"1 група"</item>
-    <item quantity="other" msgid="1276758425904917367">"<xliff:g id="COUNT">%0$d</xliff:g> групи"</item>
-  </plurals>
+    <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
+      <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> групи</item>
+      <item quantity="one">1 група</item>
+    </plurals>
     <string name="delete_group_dialog_message" msgid="7586856514337560529">"Да се изтрие ли групата „<xliff:g id="GROUP_LABEL">%1$s</xliff:g>“? (Самите контакти няма да бъдат изтрити.)"</string>
-  <plurals name="num_contacts_in_group">
-    <item quantity="one" msgid="1352418549951013448">"<xliff:g id="COUNT_0">%1$d</xliff:g> човек от <xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>"</item>
-    <item quantity="other" msgid="8146027769011086349">"<xliff:g id="COUNT_0">%1$d</xliff:g> души от <xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>"</item>
-  </plurals>
-  <plurals name="group_list_num_contacts_in_group">
-    <item quantity="one" msgid="3323065321661972446">"<xliff:g id="COUNT">%1$d</xliff:g> човек"</item>
-    <item quantity="other" msgid="6251996206137048525">"<xliff:g id="COUNT">%1$d</xliff:g> души"</item>
-  </plurals>
+    <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> души от <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> човек от <xliff:g id="ACCOUNT_TYPE_1">%2$s</xliff:g></item>
+    </plurals>
+    <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
+      <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> души</item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> човек</item>
+    </plurals>
     <string name="toast_join_with_empty_contact" msgid="2238581529864542985">"Въведете името на контакта преди сливането му с друг."</string>
     <string name="copy_text" msgid="3257145021583508761">"Копиране в буфера"</string>
     <string name="set_default" msgid="4417505153468300351">"Задаване като стандартна настройка"</string>
@@ -208,7 +212,7 @@
     <string name="toast_text_copied" msgid="5143776250008541719">"Текстът бе копиран"</string>
     <string name="cancel_confirmation_dialog_message" msgid="5885724679874403115">"Да се отхвърлят ли направените от вас промени?"</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="profile_display_name" msgid="4127389543625918771">"Настройка на потребителския ми профил"</string>
+    <string name="profile_display_name" msgid="4127389543625918771">"Потребит. профил"</string>
     <string name="enter_contact_name" msgid="1738391320566349924">"Въведете името на човека"</string>
     <string name="group_name_hint" msgid="238359485263401293">"Име на групата"</string>
     <string name="local_profile_title" msgid="2021416826991393684">"Моят локален потр. профил"</string>
@@ -264,4 +268,5 @@
     <string name="content_description_recent_call" msgid="5183800406316723676">"Скорошно обаждане (<xliff:g id="CALL_TYPE">%s</xliff:g>) от <xliff:g id="PHONE_NUMBER">%s</xliff:g> на <xliff:g id="DATE">%s</xliff:g>. Кликнете за обратно обаждане"</string>
     <string name="message_from_you_prefix" msgid="7180706529908434482">"Вие: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
     <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"Hangouts работи по-добре, когато въведете съответния идентификатор на човека в полето за имейл или телефон."</string>
+    <string name="compact_editor_more_fields" msgid="2874181192382284115">"Още полета"</string>
 </resources>
diff --git a/res/values-bn-rBD/strings.xml b/res/values-bn-rBD/strings.xml
index ca529e8..c7ce0cf 100644
--- a/res/values-bn-rBD/strings.xml
+++ b/res/values-bn-rBD/strings.xml
@@ -46,6 +46,7 @@
     <string name="description_action_menu_add_star" msgid="3327186327234177456">"পছন্দসই এ জোড়া হয়েছে"</string>
     <string name="menu_editContact" msgid="9042415603857662633">"সম্পাদনা করুন"</string>
     <string name="menu_deleteContact" msgid="6788644058868189393">"মুছুন"</string>
+    <string name="menu_change_photo" msgid="7769177631511496210">"ফটো পরিবর্তন করুন"</string>
     <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"হোম স্ক্রীনে রাখুন"</string>
     <string name="menu_call" msgid="3992595586042260618">"পরিচিতিকে কল করুন"</string>
     <string name="menu_sendSMS" msgid="5535886767547006515">"পরিচিতিকে পাঠ্য বার্তা পাঠান"</string>
@@ -56,17 +57,23 @@
     <string name="menu_new_group_action_bar" msgid="3520232877587377175">"গোষ্ঠী যোগ করুন"</string>
     <string name="splitConfirmation_title" msgid="633640935430370530">"পরিচিতি বিভক্ত করবেন?"</string>
     <string name="splitConfirmation" msgid="740190210499587175">"এই পরিচিতি একাধিক পরিচিতিগুলির মধ্যে বিভক্ত করা হবে৷"</string>
-    <string name="menu_joinAggregate" msgid="5027981918265667970">"যুক্ত হন"</string>
+    <string name="menu_joinAggregate" msgid="4050157483569357666">"মার্জ করুন"</string>
     <string name="titleJoinContactDataWith" msgid="7684875775798635354">"পরিচিতিগুলিকে যোগ করুন"</string>
     <string name="blurbJoinContactDataWith" msgid="8736488417422708236">"<xliff:g id="NAME">%s</xliff:g> এর সাথে যোগ করতে চান সেই পরিচিতিটি চয়ন করুন:"</string>
     <string name="showAllContactsJoinItem" msgid="2189695051430392383">"সকল পরিচিতি দেখান"</string>
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"প্রস্তাবিত পরিচিতিগুলি"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"সকল পরিচিতি"</string>
-    <string name="contactsJoinedMessage" msgid="7208148163607047389">"পরিচিতিগুলিকে যুক্ত করা হযেছে"</string>
+    <string name="contactsJoinedMessage" msgid="656936718666768589">"পরিচিতিগুলি মার্জ করা হয়েছে"</string>
+    <string name="contacts_deleted_toast" msgid="286851430992788215">"পরিচিতিগুলি মোছা হয়েছে"</string>
     <string name="menu_set_ring_tone" msgid="8728345772068064946">"রিংটোন সেট করুন"</string>
     <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"ভয়েসমেলে সকল কল"</string>
     <string name="readOnlyContactWarning" msgid="7808825687289848259">"আপনি শুধুমাত্র-পাঠযোগ্য অ্যাকাউন্টগুলির পরিচিতিগুলিকে মুছতে পারবেন না, কিন্তু আপনি আপনার পরিচিতি তালিকায় তাদের লুকিয়ে রাখতে পারেন৷"</string>
     <string name="readOnlyContactDeleteConfirmation" msgid="2137170726670196909">"এই পরিচিতিটিতে একাধিক অ্যাকাউন্ট থেকে তথ্য উপস্থিত রয়েছে৷ শুধুমাত্র-পাঠযোগ্য অ্যাকাউন্টগুলির তথ্য আপনার পরিচিতিগুলির তালিকাতে লুকানো থাকবে,  মুছে ফেলা হবে না৷"</string>
+    <string name="batch_merge_single_contact_warning" msgid="982585201970392110">"একটি মার্জ কার্য সম্পাদনা করতে আপনার কমপক্ষে দুটি পরিচিতি নির্বাচন করা দরকার৷"</string>
+    <string name="batch_merge_confirmation" msgid="8551299480317422420">"নির্বাচিত পরিচিতিগুলিকে একটি একক পরিচিতির মধ্যে মার্জ করা হবে৷"</string>
+    <string name="batch_delete_confirmation" msgid="2564172328268885394">"নির্বাচিত পরিচিতিগুলি মুছে ফেলা হবে৷"</string>
+    <string name="batch_delete_read_only_contact_confirmation" msgid="6614878716815412523">"শুধুমাত্র-পাঠযোগ্য অ্যাকাউন্টগুলির তথ্য আপনার পরিচিতিগুলির তালিকাতে লুকানো থাকবে, মুছে ফেলা হবে না৷"</string>
+    <string name="batch_delete_multiple_accounts_confirmation" msgid="5189722181586680185">"এই পরিচিতিগুলিতে একাধিক অ্যাকাউন্ট থেকে তথ্য উপস্থিত রয়েছে৷ শুধুমাত্র-পাঠযোগ্য অ্যাকাউন্টগুলির তথ্য আপনার পরিচিতিগুলির তালিকাতে লুকানো থাকবে, মুছে ফেলা হবে না৷"</string>
     <string name="multipleContactDeleteConfirmation" msgid="938900978442960800">"এই পরিচিতিটি মোছা হলে সেটি একাধিক অ্যাকাউন্ট থেকে তথ্য মুছবে৷"</string>
     <string name="deleteConfirmation" msgid="811706994761610640">"এই পরিচিতিটিকে মুছে ফেলা হবে৷"</string>
     <string name="menu_discard" msgid="6854657936970228164">"পরিবর্তনগুলি খারিজ করুন"</string>
@@ -94,20 +101,20 @@
     <string name="contactSavedErrorToast" msgid="3207250533172944892">"পরিচিতির পরিবর্তনগুলি সংরক্ষণ করা যায়নি৷"</string>
     <string name="groupSavedToast" msgid="1168756874239833756">"গোষ্ঠী সংরক্ষিত হয়েছে৷"</string>
     <string name="groupSavedErrorToast" msgid="7984466936615304740">"গোষ্ঠীর পরিবর্তনগুলি সংরক্ষণ করা যায়নি৷"</string>
-  <plurals name="listTotalPhoneContacts">
-    <item quantity="one" msgid="3015357862286673986">"ফোন নম্বর সহ ১টি পরিচিতি"</item>
-    <item quantity="other" msgid="3299954047880968205">"ফোন নম্বর সহ <xliff:g id="COUNT">%d</xliff:g>টি পরিচিতি"</item>
-  </plurals>
+    <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
+      <item quantity="one">ফোন নম্বর সহ <xliff:g id="COUNT">%d</xliff:g>টি পরিচিতি</item>
+      <item quantity="other">ফোন নম্বর সহ <xliff:g id="COUNT">%d</xliff:g>টি পরিচিতি</item>
+    </plurals>
     <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"ফোন নম্বর সহ কোনো পরিচিতি নেই"</string>
-  <plurals name="listFoundAllContacts">
-    <item quantity="one" msgid="5517063038754171134">"১টি খুঁজে পাওয়া গেছে"</item>
-    <item quantity="other" msgid="3852668542926965042">"<xliff:g id="COUNT">%d</xliff:g>টি খুঁজে পাওয়া গেছে"</item>
-  </plurals>
+    <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
+      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g>টি খুঁজে পাওয়া গেছে</item>
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g>টি খুঁজে পাওয়া গেছে</item>
+    </plurals>
     <string name="listFoundAllContactsZero" msgid="922980883593159444">"কোনো পরিচিতি নেই"</string>
-  <plurals name="searchFoundContacts">
-    <item quantity="one" msgid="4826918429708286628">"১টি খুঁজে পাওয়া গেছে"</item>
-    <item quantity="other" msgid="7988132539476575389">"<xliff:g id="COUNT">%d</xliff:g>টি খুঁজে পাওয়া গেছে"</item>
-  </plurals>
+    <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
+      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g>টি খুঁজে পাওয়া গেছে</item>
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g>টি খুঁজে পাওয়া গেছে</item>
+    </plurals>
     <string name="all_contacts_tab_label" msgid="6250372293594147703">"সকল পরিচিতি"</string>
     <string name="favorites_tab_label" msgid="1524869648904016414">"পছন্দসইগুলি"</string>
     <string name="callBack" msgid="5498224409038809224">"কল ব্যাক করুন"</string>
@@ -144,9 +151,6 @@
     <string name="pick_new_photo" msgid="9122450996263688237">"নতুন ফটো নির্বাচন করুন"</string>
     <string name="locale_change_in_progress" msgid="7583992153091537467">"যোগাযোগ তালিকার ভাষা পরিবর্তন প্রতিফলিত করতে আপডেট করা হচ্ছে৷"</string>
     <string name="upgrade_in_progress" msgid="474511436863451061">"পরিচিতি তালিকা আপডেট করা হচ্ছে৷"</string>
-    <string name="upgrade_out_of_memory" msgid="1209994418877625940">"পরিচিতিগুলি আপগ্রেড হওয়ার প্রক্রিয়ায় রয়েছে৷ \n\nআপগ্রেড প্রক্রিয়াটির জন্য আনুমানিক <xliff:g id="SIZE_IN_MEGABYTES">%s</xliff:g> MB অভ্যন্তরীণ সঞ্চয়স্থানের প্রয়োজন৷\n\nনিম্নলিখিত যেকোনো একটি বিকল্প চয়ন করুন:"</string>
-    <string name="upgrade_out_of_memory_uninstall" msgid="1721798828992091432">"কিছু অ্যাপ্লিকেশান আনইনস্টল করুন"</string>
-    <string name="upgrade_out_of_memory_retry" msgid="8431289830472724609">"পুনরায় আপগ্রেডের চেষ্টা করুন"</string>
     <string name="search_results_searching" msgid="3984833028938569930">"অনুসন্ধান করছে..."</string>
     <string name="menu_display_selected" msgid="6470001164297969034">"নির্বাচিত দেখান"</string>
     <string name="menu_display_all" msgid="8887488642609786198">"সকল দেখান"</string>
@@ -160,10 +164,10 @@
     <string name="primary_photo" msgid="8517942231868516999">"প্রাথমিক ফটো"</string>
     <string name="description_star" msgid="2605854427360036550">"পছন্দসই"</string>
     <string name="edit_contact" msgid="7529281274005689512">"পরিচিতি সম্পাদনা করুন"</string>
-  <plurals name="merge_info">
-    <item quantity="one" msgid="148365587896371969">"মার্জ করা হয়নি"</item>
-    <item quantity="other" msgid="425683718017380845">"<xliff:g id="COUNT">%0$d</xliff:g>টি উৎস থেকে মার্জ করা হয়েছে"</item>
-  </plurals>
+    <plurals name="merge_info" formatted="false" msgid="2489323424994280962">
+      <item quantity="one"><xliff:g id="COUNT">%0$d</xliff:g>টি উৎস থেকে মার্জ করা হয়েছে</item>
+      <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g>টি উৎস থেকে মার্জ করা হয়েছে</item>
+    </plurals>
     <string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"নির্বাচিত পরিচিতির সঙ্গে বর্তমান পরিচিতিগুলি যোগ করবেন?"</string>
     <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"নির্বাচিত পরিচিতি সম্পাদনায় নিয়ে যাবেন? আপনার এ পর্যন্ত প্রবেশ করানো তথ্য অনুলিপি করা হবে৷"</string>
     <string name="menu_copyContact" msgid="1573960845106822639">"আমার পরিচিতিগুলিতে অনুলিপি করুন"</string>
@@ -172,7 +176,7 @@
     <string name="list_filter_custom" msgid="8910173055702057002">"কাস্টম"</string>
     <string name="activity_title_settings" msgid="5464130076132770781">"সেটিংস"</string>
     <string name="menu_settings" msgid="377929915873428211">"সেটিংস"</string>
-    <string name="menu_help" msgid="5123887102216637725">"সহায়তা"</string>
+    <string name="menu_help" msgid="1680178646764069976">"সহায়তা ও প্রতিক্রিয়া"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"প্রদর্শনের বিকল্পগুলি"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="non_phone_caption" msgid="1541655052330027380">"ফোন নম্বর"</string>
@@ -188,19 +192,19 @@
     <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"পরিচিতিগুলি আমদানি করুন"</string>
     <string name="create_group_dialog_title" msgid="6874527142828424475">"নতুন গোষ্ঠী তৈরি করুন"</string>
     <string name="create_group_item_label" msgid="4411981763169654825">"নতুন গোষ্ঠী তৈরি করুন"</string>
-  <plurals name="num_groups_in_account">
-    <item quantity="one" msgid="2944819210288517794">"১টি গোষ্ঠী"</item>
-    <item quantity="other" msgid="1276758425904917367">"<xliff:g id="COUNT">%0$d</xliff:g>টি গোষ্ঠী"</item>
-  </plurals>
+    <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
+      <item quantity="one"><xliff:g id="COUNT">%0$d</xliff:g>টি গোষ্ঠী</item>
+      <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g>টি গোষ্ঠী</item>
+    </plurals>
     <string name="delete_group_dialog_message" msgid="7586856514337560529">"গোষ্ঠী \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\" মুছবেন? (পরিচিতিগুলি নিজে থেকে মুছে যাবে না৷)"</string>
-  <plurals name="num_contacts_in_group">
-    <item quantity="one" msgid="1352418549951013448">"<xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g> থেকে <xliff:g id="COUNT_0">%1$d</xliff:g> জন"</item>
-    <item quantity="other" msgid="8146027769011086349">"<xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g> থেকে <xliff:g id="COUNT_0">%1$d</xliff:g> জন"</item>
-  </plurals>
-  <plurals name="group_list_num_contacts_in_group">
-    <item quantity="one" msgid="3323065321661972446">"<xliff:g id="COUNT">%1$d</xliff:g> জন"</item>
-    <item quantity="other" msgid="6251996206137048525">"<xliff:g id="COUNT">%1$d</xliff:g> জন"</item>
-  </plurals>
+    <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
+      <item quantity="one"><xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g> থেকে <xliff:g id="COUNT_2">%1$d</xliff:g> জন</item>
+      <item quantity="other"><xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g> থেকে <xliff:g id="COUNT_2">%1$d</xliff:g> জন</item>
+    </plurals>
+    <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
+      <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> জন</item>
+      <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> জন</item>
+    </plurals>
     <string name="toast_join_with_empty_contact" msgid="2238581529864542985">"অন্য একটির সাথে যোগ করার আগে পরিচিতির নাম লিখুন৷"</string>
     <string name="copy_text" msgid="3257145021583508761">"ক্লিপবোর্ডে অনুলিপি করুন"</string>
     <string name="set_default" msgid="4417505153468300351">"ডিফল্ট সেট করুন"</string>
@@ -264,4 +268,5 @@
     <string name="content_description_recent_call" msgid="5183800406316723676">"সাম্প্রতিক কল৷ <xliff:g id="CALL_TYPE">%s</xliff:g>৷ <xliff:g id="PHONE_NUMBER">%s</xliff:g>৷ <xliff:g id="DATE">%s</xliff:g>৷ ঘুরিয়ে কল করতে ক্লিক করুন"</string>
     <string name="message_from_you_prefix" msgid="7180706529908434482">"আপনি: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
     <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"আপনি যখন ইমেল বা ফোন নম্বর লেখার ক্ষেত্রটিতে ব্যক্তির Hangouts সনাক্তকারী লেখেন তখন Hangouts আরো ভালো কাজ করে৷"</string>
+    <string name="compact_editor_more_fields" msgid="2874181192382284115">"আরো ফিল্ড"</string>
 </resources>
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
index 180beb6..11947d6 100644
--- a/res/values-ca/strings.xml
+++ b/res/values-ca/strings.xml
@@ -46,6 +46,7 @@
     <string name="description_action_menu_add_star" msgid="3327186327234177456">"Afegit als preferits"</string>
     <string name="menu_editContact" msgid="9042415603857662633">"Edita"</string>
     <string name="menu_deleteContact" msgid="6788644058868189393">"Suprimeix"</string>
+    <string name="menu_change_photo" msgid="7769177631511496210">"Canvia la foto"</string>
     <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Afegeix a la pantalla d\'inici"</string>
     <string name="menu_call" msgid="3992595586042260618">"Truca al contacte"</string>
     <string name="menu_sendSMS" msgid="5535886767547006515">"Envia un SMS al contacte"</string>
@@ -56,17 +57,23 @@
     <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Afegeix un grup"</string>
     <string name="splitConfirmation_title" msgid="633640935430370530">"Dividir contacte?"</string>
     <string name="splitConfirmation" msgid="740190210499587175">"Aquest contacte es dividirà en diversos contactes."</string>
-    <string name="menu_joinAggregate" msgid="5027981918265667970">"Uneix"</string>
+    <string name="menu_joinAggregate" msgid="4050157483569357666">"Combina"</string>
     <string name="titleJoinContactDataWith" msgid="7684875775798635354">"Unió de contactes"</string>
     <string name="blurbJoinContactDataWith" msgid="8736488417422708236">"Tria el contacte que vols unir amb <xliff:g id="NAME">%s</xliff:g>:"</string>
     <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Mostra tots els contactes"</string>
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Contactes suggerits"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Tots els contactes"</string>
-    <string name="contactsJoinedMessage" msgid="7208148163607047389">"Contactes units"</string>
+    <string name="contactsJoinedMessage" msgid="656936718666768589">"Contactes combinats"</string>
+    <string name="contacts_deleted_toast" msgid="286851430992788215">"S\'han suprimit els contactes"</string>
     <string name="menu_set_ring_tone" msgid="8728345772068064946">"Estableix so"</string>
     <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Trucades a la bústia de veu"</string>
     <string name="readOnlyContactWarning" msgid="7808825687289848259">"No pots suprimir cap contacte dels comptes de només lectura, però pots amagar-los a les llistes de contactes."</string>
     <string name="readOnlyContactDeleteConfirmation" msgid="2137170726670196909">"Aquest contacte inclou informació de diversos comptes. La informació dels comptes només de lectura s\'ocultarà a les llistes de contactes, però no se suprimirà."</string>
+    <string name="batch_merge_single_contact_warning" msgid="982585201970392110">"Has de tenir com a mínim dos contactes seleccionats per combinar-los."</string>
+    <string name="batch_merge_confirmation" msgid="8551299480317422420">"Els contactes seleccionats es combinaran i se\'n crearà un de sol."</string>
+    <string name="batch_delete_confirmation" msgid="2564172328268885394">"Els contactes seleccionats se suprimiran."</string>
+    <string name="batch_delete_read_only_contact_confirmation" msgid="6614878716815412523">"La informació dels comptes només de lectura s\'ocultarà a les llistes de contactes, però no se suprimirà."</string>
+    <string name="batch_delete_multiple_accounts_confirmation" msgid="5189722181586680185">"Aquests contactes inclouen informació de diversos comptes. La informació dels comptes només de lectura s\'ocultarà a les llistes de contactes, però no se suprimirà."</string>
     <string name="multipleContactDeleteConfirmation" msgid="938900978442960800">"Si suprimiu aquest contacte se suprimirà informació de diversos comptes."</string>
     <string name="deleteConfirmation" msgid="811706994761610640">"Aquest contacte se suprimirà."</string>
     <string name="menu_discard" msgid="6854657936970228164">"Descarta els canvis"</string>
@@ -94,20 +101,20 @@
     <string name="contactSavedErrorToast" msgid="3207250533172944892">"No s\'han pogut desar els canvis al contacte."</string>
     <string name="groupSavedToast" msgid="1168756874239833756">"Grup desat."</string>
     <string name="groupSavedErrorToast" msgid="7984466936615304740">"No s\'han pogut desar els canvis al grup."</string>
-  <plurals name="listTotalPhoneContacts">
-    <item quantity="one" msgid="3015357862286673986">"1 contacte amb número de telèfon"</item>
-    <item quantity="other" msgid="3299954047880968205">"<xliff:g id="COUNT">%d</xliff:g> contactes amb números de telèfon"</item>
-  </plurals>
+    <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>
+      <item quantity="one">1 contacte amb número de telèfon</item>
+    </plurals>
     <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"No hi ha cap contacte amb número de telèfon"</string>
-  <plurals name="listFoundAllContacts">
-    <item quantity="one" msgid="5517063038754171134">"1 contacte"</item>
-    <item quantity="other" msgid="3852668542926965042">"<xliff:g id="COUNT">%d</xliff:g> contactes"</item>
-  </plurals>
+    <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> contactes</item>
+      <item quantity="one">1 contacte</item>
+    </plurals>
     <string name="listFoundAllContactsZero" msgid="922980883593159444">"No hi ha cap contacte"</string>
-  <plurals name="searchFoundContacts">
-    <item quantity="one" msgid="4826918429708286628">"1 contacte"</item>
-    <item quantity="other" msgid="7988132539476575389">"<xliff:g id="COUNT">%d</xliff:g> contactes"</item>
-  </plurals>
+    <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> contactes</item>
+      <item quantity="one">1 contacte</item>
+    </plurals>
     <string name="all_contacts_tab_label" msgid="6250372293594147703">"Tots els contactes"</string>
     <string name="favorites_tab_label" msgid="1524869648904016414">"Preferits"</string>
     <string name="callBack" msgid="5498224409038809224">"Torna la trucada"</string>
@@ -144,9 +151,6 @@
     <string name="pick_new_photo" msgid="9122450996263688237">"Selecciona una foto nova"</string>
     <string name="locale_change_in_progress" msgid="7583992153091537467">"S\'actualitza la llista de contactes per reflectir el canvi d\'idioma."</string>
     <string name="upgrade_in_progress" msgid="474511436863451061">"S\'actualitza la llista de contactes."</string>
-    <string name="upgrade_out_of_memory" msgid="1209994418877625940">"S\'estan actualitzant els contactes. \n\nEl procés d\'actualització requereix aproximadament <xliff:g id="SIZE_IN_MEGABYTES">%s</xliff:g> MB de l\'emmagatzematge intern.\n\nTria una de les opcions següents:"</string>
-    <string name="upgrade_out_of_memory_uninstall" msgid="1721798828992091432">"Desinstal·leu aplicacions"</string>
-    <string name="upgrade_out_of_memory_retry" msgid="8431289830472724609">"Torna a provar d\'actualitzar"</string>
     <string name="search_results_searching" msgid="3984833028938569930">"S\'està cercant..."</string>
     <string name="menu_display_selected" msgid="6470001164297969034">"Mostra la selecció"</string>
     <string name="menu_display_all" msgid="8887488642609786198">"Mostra-ho tot"</string>
@@ -160,10 +164,10 @@
     <string name="primary_photo" msgid="8517942231868516999">"Foto principal"</string>
     <string name="description_star" msgid="2605854427360036550">"preferit"</string>
     <string name="edit_contact" msgid="7529281274005689512">"Edita el contacte"</string>
-  <plurals name="merge_info">
-    <item quantity="one" msgid="148365587896371969">"no combinat"</item>
-    <item quantity="other" msgid="425683718017380845">"combinat de <xliff:g id="COUNT">%0$d</xliff:g> fonts"</item>
-  </plurals>
+    <plurals name="merge_info" formatted="false" msgid="2489323424994280962">
+      <item quantity="other">combinats de <xliff:g id="COUNT">%0$d</xliff:g> fonts</item>
+      <item quantity="one">no combinat</item>
+    </plurals>
     <string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"Vols ajuntar el contacte actual amb el contacte seleccionat?"</string>
     <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Vols canviar per editar el contacte seleccionat? Es copiarà la informació que hagis introduït fins ara."</string>
     <string name="menu_copyContact" msgid="1573960845106822639">"Copia a Els meus contactes"</string>
@@ -172,7 +176,7 @@
     <string name="list_filter_custom" msgid="8910173055702057002">"Personalitza"</string>
     <string name="activity_title_settings" msgid="5464130076132770781">"Configuració"</string>
     <string name="menu_settings" msgid="377929915873428211">"Configuració"</string>
-    <string name="menu_help" msgid="5123887102216637725">"Ajuda"</string>
+    <string name="menu_help" msgid="1680178646764069976">"Ajuda i suggeriments"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"Opcions de visualització"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="non_phone_caption" msgid="1541655052330027380">"Número de telèfon"</string>
@@ -188,19 +192,19 @@
     <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Importa contactes"</string>
     <string name="create_group_dialog_title" msgid="6874527142828424475">"Creació d\'un grup nou"</string>
     <string name="create_group_item_label" msgid="4411981763169654825">"Crea un grup nou"</string>
-  <plurals name="num_groups_in_account">
-    <item quantity="one" msgid="2944819210288517794">"Un grup"</item>
-    <item quantity="other" msgid="1276758425904917367">"<xliff:g id="COUNT">%0$d</xliff:g> grups"</item>
-  </plurals>
+    <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
+      <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> grups</item>
+      <item quantity="one">1 grup</item>
+    </plurals>
     <string name="delete_group_dialog_message" msgid="7586856514337560529">"Vols suprimir el grup \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\"? (No se\'n suprimiran els contactes.)"</string>
-  <plurals name="num_contacts_in_group">
-    <item quantity="one" msgid="1352418549951013448">"<xliff:g id="COUNT_0">%1$d</xliff:g> persones de <xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>"</item>
-    <item quantity="other" msgid="8146027769011086349">"<xliff:g id="COUNT_0">%1$d</xliff:g> persones de <xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>"</item>
-  </plurals>
-  <plurals name="group_list_num_contacts_in_group">
-    <item quantity="one" msgid="3323065321661972446">"<xliff:g id="COUNT">%1$d</xliff:g> persones"</item>
-    <item quantity="other" msgid="6251996206137048525">"<xliff:g id="COUNT">%1$d</xliff:g> persones"</item>
-  </plurals>
+    <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> persones de <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> persona de <xliff:g id="ACCOUNT_TYPE_1">%2$s</xliff:g></item>
+    </plurals>
+    <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
+      <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> persones</item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> persona</item>
+    </plurals>
     <string name="toast_join_with_empty_contact" msgid="2238581529864542985">"Escriu el nom del contacte abans d\'unir-lo amb un altre contacte."</string>
     <string name="copy_text" msgid="3257145021583508761">"Copia al porta-retalls"</string>
     <string name="set_default" msgid="4417505153468300351">"Predeterminat"</string>
@@ -264,4 +268,5 @@
     <string name="content_description_recent_call" msgid="5183800406316723676">"Trucada recent. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. Fes clic per tornar la trucada."</string>
     <string name="message_from_you_prefix" msgid="7180706529908434482">"Usuari: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
     <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"Hangouts funciona millor si introdueixes l\'identificador de Hangouts de la persona corresponent al camp de l\'adreça electrònica o del telèfon."</string>
+    <string name="compact_editor_more_fields" msgid="2874181192382284115">"Més camps"</string>
 </resources>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index fbdf952..177f484 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -46,6 +46,7 @@
     <string name="description_action_menu_add_star" msgid="3327186327234177456">"Přidáno mezi oblíbené"</string>
     <string name="menu_editContact" msgid="9042415603857662633">"Upravit"</string>
     <string name="menu_deleteContact" msgid="6788644058868189393">"Smazat"</string>
+    <string name="menu_change_photo" msgid="7769177631511496210">"Změnit fotografii"</string>
     <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Umístit na plochu"</string>
     <string name="menu_call" msgid="3992595586042260618">"Volat kontakt"</string>
     <string name="menu_sendSMS" msgid="5535886767547006515">"Odeslat zprávu kontaktu"</string>
@@ -56,17 +57,23 @@
     <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Přidat skupinu"</string>
     <string name="splitConfirmation_title" msgid="633640935430370530">"Rozdělit kontakt?"</string>
     <string name="splitConfirmation" msgid="740190210499587175">"Tento kontakt bude rozdělen do několika kontaktů."</string>
-    <string name="menu_joinAggregate" msgid="5027981918265667970">"Spojit"</string>
+    <string name="menu_joinAggregate" msgid="4050157483569357666">"Sloučit"</string>
     <string name="titleJoinContactDataWith" msgid="7684875775798635354">"Spojit kontakty"</string>
     <string name="blurbJoinContactDataWith" msgid="8736488417422708236">"Vyberte kontakt, který chcete spojit s kontaktem <xliff:g id="NAME">%s</xliff:g>:"</string>
     <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Zobrazit všechny kontakty"</string>
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Navrhované kontakty"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Všechny kontakty"</string>
-    <string name="contactsJoinedMessage" msgid="7208148163607047389">"Kontakty byly spojeny"</string>
+    <string name="contactsJoinedMessage" msgid="656936718666768589">"Kontakty byly sloučeny"</string>
+    <string name="contacts_deleted_toast" msgid="286851430992788215">"Kontakty byly odstraněny"</string>
     <string name="menu_set_ring_tone" msgid="8728345772068064946">"Nastavit vyzvánění"</string>
     <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Hovory do hlas. schránky"</string>
     <string name="readOnlyContactWarning" msgid="7808825687289848259">"Z účtů pouze pro čtení není možné kontakty mazat, můžete je však ve svých seznamech kontaktů skrýt."</string>
     <string name="readOnlyContactDeleteConfirmation" msgid="2137170726670196909">"Tento kontakt obsahuje informace z několika účtů. Informace z účtů pouze pro čtení budou v seznamech kontaktů skryty, ale nebudou smazány."</string>
+    <string name="batch_merge_single_contact_warning" msgid="982585201970392110">"Chcete-li provést sloučení, vyberte alespoň dva kontakty."</string>
+    <string name="batch_merge_confirmation" msgid="8551299480317422420">"Vybrané kontakty budou sloučeny do jednoho kontaktu."</string>
+    <string name="batch_delete_confirmation" msgid="2564172328268885394">"Vybrané kontakty budou smazány."</string>
+    <string name="batch_delete_read_only_contact_confirmation" msgid="6614878716815412523">"Informace z účtů pouze ke čtení budou v seznamech kontaktů skryty, ale nebudou smazány."</string>
+    <string name="batch_delete_multiple_accounts_confirmation" msgid="5189722181586680185">"Tyto kontakty obsahují informace z několika účtů. Informace z účtů pouze ke čtení budou v seznamech kontaktů skryty, ale nebudou smazány."</string>
     <string name="multipleContactDeleteConfirmation" msgid="938900978442960800">"Smazáním tohoto kontaktu smažete informace z více účtů."</string>
     <string name="deleteConfirmation" msgid="811706994761610640">"Tento kontakt bude smazán."</string>
     <string name="menu_discard" msgid="6854657936970228164">"Zahodit změny"</string>
@@ -94,20 +101,26 @@
     <string name="contactSavedErrorToast" msgid="3207250533172944892">"Změny kontaktů nelze uložit."</string>
     <string name="groupSavedToast" msgid="1168756874239833756">"Skupina byla uložena."</string>
     <string name="groupSavedErrorToast" msgid="7984466936615304740">"Změny skupiny nelze uložit."</string>
-  <plurals name="listTotalPhoneContacts">
-    <item quantity="one" msgid="3015357862286673986">"1 kontakt s telefonním číslem"</item>
-    <item quantity="other" msgid="3299954047880968205">"Kontakty s telefonními čísly: <xliff:g id="COUNT">%d</xliff:g>"</item>
-  </plurals>
+    <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
+      <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> kontakty s telefonním číslem</item>
+      <item quantity="many"><xliff:g id="COUNT">%d</xliff:g> kontaktu s telefonním číslem</item>
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> kontaktů s telefonním číslem</item>
+      <item quantity="one">1 kontakt s telefonním číslem</item>
+    </plurals>
     <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"Ke kontaktům nejsou přiřazena žádná telefonní čísla"</string>
-  <plurals name="listFoundAllContacts">
-    <item quantity="one" msgid="5517063038754171134">"Nalezeno: 1"</item>
-    <item quantity="other" msgid="3852668542926965042">"Nalezeno: <xliff:g id="COUNT">%d</xliff:g>"</item>
-  </plurals>
+    <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
+      <item quantity="few">Nalezeno: <xliff:g id="COUNT">%d</xliff:g></item>
+      <item quantity="many">Nalezeno: <xliff:g id="COUNT">%d</xliff:g></item>
+      <item quantity="other">Nalezeno: <xliff:g id="COUNT">%d</xliff:g></item>
+      <item quantity="one">Nalezeno: 1</item>
+    </plurals>
     <string name="listFoundAllContactsZero" msgid="922980883593159444">"Žádné kontakty"</string>
-  <plurals name="searchFoundContacts">
-    <item quantity="one" msgid="4826918429708286628">"Nalezeno: 1"</item>
-    <item quantity="other" msgid="7988132539476575389">"Nalezeno: <xliff:g id="COUNT">%d</xliff:g>"</item>
-  </plurals>
+    <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
+      <item quantity="few">Nalezeno: <xliff:g id="COUNT">%d</xliff:g></item>
+      <item quantity="many">Nalezeno: <xliff:g id="COUNT">%d</xliff:g></item>
+      <item quantity="other">Nalezeno: <xliff:g id="COUNT">%d</xliff:g></item>
+      <item quantity="one">Nalezeno: 1</item>
+    </plurals>
     <string name="all_contacts_tab_label" msgid="6250372293594147703">"Všechny kontakty"</string>
     <string name="favorites_tab_label" msgid="1524869648904016414">"Oblíbené"</string>
     <string name="callBack" msgid="5498224409038809224">"Zavolat zpět"</string>
@@ -144,9 +157,6 @@
     <string name="pick_new_photo" msgid="9122450996263688237">"Vybrat novou fotku"</string>
     <string name="locale_change_in_progress" msgid="7583992153091537467">"Probíhá aktualizace seznamu kontaktů související se změnou jazyka."</string>
     <string name="upgrade_in_progress" msgid="474511436863451061">"Probíhá aktualizace seznamu kontaktů."</string>
-    <string name="upgrade_out_of_memory" msgid="1209994418877625940">"Probíhá upgrade kontaktů. \n\nUpgrade vyžaduje přibližně <xliff:g id="SIZE_IN_MEGABYTES">%s</xliff:g> MB interní paměti.\n\nZvolte jednu z následujících možností:"</string>
-    <string name="upgrade_out_of_memory_uninstall" msgid="1721798828992091432">"Odinstalovat některé aplikace"</string>
-    <string name="upgrade_out_of_memory_retry" msgid="8431289830472724609">"Zkusit upgradovat znovu"</string>
     <string name="search_results_searching" msgid="3984833028938569930">"Vyhledávání..."</string>
     <string name="menu_display_selected" msgid="6470001164297969034">"Zobrazit vybrané"</string>
     <string name="menu_display_all" msgid="8887488642609786198">"Zobrazit vše"</string>
@@ -160,10 +170,12 @@
     <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>
-  <plurals name="merge_info">
-    <item quantity="one" msgid="148365587896371969">"sloučení se nezdařilo"</item>
-    <item quantity="other" msgid="425683718017380845">"sloučeno ze <xliff:g id="COUNT">%0$d</xliff:g> zdrojů"</item>
-  </plurals>
+    <plurals name="merge_info" formatted="false" msgid="2489323424994280962">
+      <item quantity="few">sloučeno ze <xliff:g id="COUNT">%0$d</xliff:g> zdrojů</item>
+      <item quantity="many">sloučeno z <xliff:g id="COUNT">%0$d</xliff:g> zdroje</item>
+      <item quantity="other">sloučeno z <xliff:g id="COUNT">%0$d</xliff:g> zdrojů</item>
+      <item quantity="one">sloučení se nezdařilo</item>
+    </plurals>
     <string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"Spojit aktuální kontakt s vybraným kontaktem?"</string>
     <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Přepnout do režimu úpravy vybraného kontaktu? Doposud zadané informace budou zkopírovány."</string>
     <string name="menu_copyContact" msgid="1573960845106822639">"Zkopírovat do kontaktů"</string>
@@ -172,7 +184,7 @@
     <string name="list_filter_custom" msgid="8910173055702057002">"Vlastní"</string>
     <string name="activity_title_settings" msgid="5464130076132770781">"Nastavení"</string>
     <string name="menu_settings" msgid="377929915873428211">"Nastavení"</string>
-    <string name="menu_help" msgid="5123887102216637725">"Nápověda"</string>
+    <string name="menu_help" msgid="1680178646764069976">"Nápověda a zpětná vazba"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"Možnosti zobrazení"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="non_phone_caption" msgid="1541655052330027380">"Telefonní číslo"</string>
@@ -188,19 +200,25 @@
     <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Importovat kontakty"</string>
     <string name="create_group_dialog_title" msgid="6874527142828424475">"Vytvořit novou skupinu"</string>
     <string name="create_group_item_label" msgid="4411981763169654825">"Vytvořit novou skupinu"</string>
-  <plurals name="num_groups_in_account">
-    <item quantity="one" msgid="2944819210288517794">"1 skupina"</item>
-    <item quantity="other" msgid="1276758425904917367">"Skupiny: <xliff:g id="COUNT">%0$d</xliff:g>"</item>
-  </plurals>
+    <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
+      <item quantity="few"><xliff:g id="COUNT">%0$d</xliff:g> skupiny</item>
+      <item quantity="many"><xliff:g id="COUNT">%0$d</xliff:g> skupiny</item>
+      <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> skupin</item>
+      <item quantity="one">1 skupina</item>
+    </plurals>
     <string name="delete_group_dialog_message" msgid="7586856514337560529">"Chcete smazat skupinu <xliff:g id="GROUP_LABEL">%1$s</xliff:g>? (Samotné kontakty smazány nebudou.)"</string>
-  <plurals name="num_contacts_in_group">
-    <item quantity="one" msgid="1352418549951013448">"Počet lidí ze skupiny <xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>: <xliff:g id="COUNT_0">%1$d</xliff:g>"</item>
-    <item quantity="other" msgid="8146027769011086349">"Počet lidí ze skupiny <xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>: <xliff:g id="COUNT_0">%1$d</xliff:g>"</item>
-  </plurals>
-  <plurals name="group_list_num_contacts_in_group">
-    <item quantity="one" msgid="3323065321661972446">"<xliff:g id="COUNT">%1$d</xliff:g> uživatel"</item>
-    <item quantity="other" msgid="6251996206137048525">"Počet lidí: <xliff:g id="COUNT">%1$d</xliff:g>"</item>
-  </plurals>
+    <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
+      <item quantity="few"><xliff:g id="COUNT_2">%1$d</xliff:g> lidé ze skupiny <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
+      <item quantity="many"><xliff:g id="COUNT_2">%1$d</xliff:g> člověka ze skupiny <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> lidí ze skupiny <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> člověk ze skupiny <xliff:g id="ACCOUNT_TYPE_1">%2$s</xliff:g></item>
+    </plurals>
+    <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
+      <item quantity="few"><xliff:g id="COUNT_1">%1$d</xliff:g> lidé</item>
+      <item quantity="many"><xliff:g id="COUNT_1">%1$d</xliff:g> člověka</item>
+      <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> lidí</item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> člověk</item>
+    </plurals>
     <string name="toast_join_with_empty_contact" msgid="2238581529864542985">"Před spojením s jiným kontaktem je třeba zadat jméno kontaktu."</string>
     <string name="copy_text" msgid="3257145021583508761">"Zkopírovat do schránky"</string>
     <string name="set_default" msgid="4417505153468300351">"Výchozí nastavení"</string>
@@ -264,4 +282,5 @@
     <string name="content_description_recent_call" msgid="5183800406316723676">"nedávný hovor. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. kliknutím zavoláte zpět"</string>
     <string name="message_from_you_prefix" msgid="7180706529908434482">"Vy: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
     <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"Aplikace Hangouts funguje lépe, když do pole pro e-mail nebo pro telefon zadáte identifikátor osoby ve službě Hangouts."</string>
+    <string name="compact_editor_more_fields" msgid="2874181192382284115">"Další pole"</string>
 </resources>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index a4d3a9c..927a661 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -46,6 +46,7 @@
     <string name="description_action_menu_add_star" msgid="3327186327234177456">"Føjet til foretrukne"</string>
     <string name="menu_editContact" msgid="9042415603857662633">"Rediger"</string>
     <string name="menu_deleteContact" msgid="6788644058868189393">"Slet"</string>
+    <string name="menu_change_photo" msgid="7769177631511496210">"Skift billede"</string>
     <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Placer på startskærmen"</string>
     <string name="menu_call" msgid="3992595586042260618">"Ring til kontakt"</string>
     <string name="menu_sendSMS" msgid="5535886767547006515">"Send sms til kontakt"</string>
@@ -56,17 +57,23 @@
     <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Tilføj gruppe"</string>
     <string name="splitConfirmation_title" msgid="633640935430370530">"Opdel kontaktperson?"</string>
     <string name="splitConfirmation" msgid="740190210499587175">"Denne kontaktperson opdeles i flere kontaktpersoner."</string>
-    <string name="menu_joinAggregate" msgid="5027981918265667970">"Føj til"</string>
+    <string name="menu_joinAggregate" msgid="4050157483569357666">"Flet"</string>
     <string name="titleJoinContactDataWith" msgid="7684875775798635354">"Føj til kontakter"</string>
     <string name="blurbJoinContactDataWith" msgid="8736488417422708236">"Vælg den kontaktperson, som du vil knytte til <xliff:g id="NAME">%s</xliff:g>:"</string>
     <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Vis alle kontakter"</string>
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Foreslåede kontakter"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Alle kontakter"</string>
-    <string name="contactsJoinedMessage" msgid="7208148163607047389">"Tilføjede kontakter"</string>
+    <string name="contactsJoinedMessage" msgid="656936718666768589">"Kontaktpersonerne blev slået sammen"</string>
+    <string name="contacts_deleted_toast" msgid="286851430992788215">"Kontaktpersonerne blev slettet"</string>
     <string name="menu_set_ring_tone" msgid="8728345772068064946">"Angiv ringetone"</string>
     <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Alle opkald til telefonsvareren"</string>
     <string name="readOnlyContactWarning" msgid="7808825687289848259">"Du kan ikke slette kontaktpersoner fra skrivebeskyttede konti, men du kan skjule dem på listerne over dine kontaktpersoner."</string>
     <string name="readOnlyContactDeleteConfirmation" msgid="2137170726670196909">"Denne kontakt indeholder oplysninger fra flere konti. Oplysningerne fra skrivebeskyttede konti vil blive skjult i dine lister over kontakter, men ikke slettet."</string>
+    <string name="batch_merge_single_contact_warning" msgid="982585201970392110">"Du skal vælge mindst to kontakter for at gennemføre en sammenfletning."</string>
+    <string name="batch_merge_confirmation" msgid="8551299480317422420">"De valgte kontakter slås sammen til en enkelt kontakt."</string>
+    <string name="batch_delete_confirmation" msgid="2564172328268885394">"De valgte kontakter slettes."</string>
+    <string name="batch_delete_read_only_contact_confirmation" msgid="6614878716815412523">"Oplysninger fra skrivebeskyttede konti vil blive skjult i dine kontaktlister, men ikke slettet."</string>
+    <string name="batch_delete_multiple_accounts_confirmation" msgid="5189722181586680185">"Disse kontakter indeholder oplysninger fra flere konti. Oplysningerne fra skrivebeskyttede konti vil blive skjult i dine lister over kontakter, men ikke slettet."</string>
     <string name="multipleContactDeleteConfirmation" msgid="938900978442960800">"Sletning af denne kontakt sletter oplysninger fra flere konti."</string>
     <string name="deleteConfirmation" msgid="811706994761610640">"Denne kontakt slettes."</string>
     <string name="menu_discard" msgid="6854657936970228164">"Kassér ændringer"</string>
@@ -94,20 +101,20 @@
     <string name="contactSavedErrorToast" msgid="3207250533172944892">"Der kunne ikke gemmes ændringer i kontaktpersoner."</string>
     <string name="groupSavedToast" msgid="1168756874239833756">"Gruppen er gemt."</string>
     <string name="groupSavedErrorToast" msgid="7984466936615304740">"Gruppeændringerne kunne ikke gemmes."</string>
-  <plurals name="listTotalPhoneContacts">
-    <item quantity="one" msgid="3015357862286673986">"1 kontakt med telefonnummer"</item>
-    <item quantity="other" msgid="3299954047880968205">"<xliff:g id="COUNT">%d</xliff:g> kontaktpersoner med telefonnumre"</item>
-  </plurals>
+    <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
+      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> kontaktpersoner med telefonnumre</item>
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> kontaktpersoner med telefonnumre</item>
+    </plurals>
     <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"Der er ingen kontakter med telefonnumre"</string>
-  <plurals name="listFoundAllContacts">
-    <item quantity="one" msgid="5517063038754171134">"1 fundet"</item>
-    <item quantity="other" msgid="3852668542926965042">"<xliff:g id="COUNT">%d</xliff:g> fundet"</item>
-  </plurals>
+    <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
+      <item quantity="one">Der blev fundet <xliff:g id="COUNT">%d</xliff:g></item>
+      <item quantity="other">Der blev fundet <xliff:g id="COUNT">%d</xliff:g></item>
+    </plurals>
     <string name="listFoundAllContactsZero" msgid="922980883593159444">"Ingen kontaktpersoner"</string>
-  <plurals name="searchFoundContacts">
-    <item quantity="one" msgid="4826918429708286628">"1 fundet"</item>
-    <item quantity="other" msgid="7988132539476575389">"<xliff:g id="COUNT">%d</xliff:g> fundet"</item>
-  </plurals>
+    <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
+      <item quantity="one">Der blev fundet <xliff:g id="COUNT">%d</xliff:g></item>
+      <item quantity="other">Der blev fundet <xliff:g id="COUNT">%d</xliff:g></item>
+    </plurals>
     <string name="all_contacts_tab_label" msgid="6250372293594147703">"Alle kontakter"</string>
     <string name="favorites_tab_label" msgid="1524869648904016414">"Foretrukne"</string>
     <string name="callBack" msgid="5498224409038809224">"Ring tilbage"</string>
@@ -144,9 +151,6 @@
     <string name="pick_new_photo" msgid="9122450996263688237">"Vælg et nyt billede"</string>
     <string name="locale_change_in_progress" msgid="7583992153091537467">"Listen over kontaktpersoner opdateres for at afspejle det nye sprog."</string>
     <string name="upgrade_in_progress" msgid="474511436863451061">"Listen over kontaktpersoner opdateres."</string>
-    <string name="upgrade_out_of_memory" msgid="1209994418877625940">"Kontaktpersonerne er ved at blive opgraderet. \n\nOpgraderingen kræver ca. <xliff:g id="SIZE_IN_MEGABYTES">%s</xliff:g> MB intern lagerplads.\n\nVælg et af følgende:"</string>
-    <string name="upgrade_out_of_memory_uninstall" msgid="1721798828992091432">"Afinstaller nogle applikationer"</string>
-    <string name="upgrade_out_of_memory_retry" msgid="8431289830472724609">"Prøv at opgradere igen"</string>
     <string name="search_results_searching" msgid="3984833028938569930">"Søger..."</string>
     <string name="menu_display_selected" msgid="6470001164297969034">"Vis valgte"</string>
     <string name="menu_display_all" msgid="8887488642609786198">"Vis alle"</string>
@@ -160,10 +164,10 @@
     <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>
-  <plurals name="merge_info">
-    <item quantity="one" msgid="148365587896371969">"blev ikke flettet"</item>
-    <item quantity="other" msgid="425683718017380845">"flettet fra <xliff:g id="COUNT">%0$d</xliff:g> kilder"</item>
-  </plurals>
+    <plurals name="merge_info" formatted="false" msgid="2489323424994280962">
+      <item quantity="one">blev flettet fra <xliff:g id="COUNT">%0$d</xliff:g> kilder</item>
+      <item quantity="other">blev flettet fra <xliff:g id="COUNT">%0$d</xliff:g> kilder</item>
+    </plurals>
     <string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"Forbind den aktuelle kontaktperson med den valgte kontaktperson?"</string>
     <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Vil du redigere den valgte kontaktperson? Dine indtastninger kopieres."</string>
     <string name="menu_copyContact" msgid="1573960845106822639">"Kopier til Mine kontaktpersoner"</string>
@@ -172,7 +176,7 @@
     <string name="list_filter_custom" msgid="8910173055702057002">"Tilpasset"</string>
     <string name="activity_title_settings" msgid="5464130076132770781">"Indstillinger"</string>
     <string name="menu_settings" msgid="377929915873428211">"Indstillinger"</string>
-    <string name="menu_help" msgid="5123887102216637725">"Hjælp"</string>
+    <string name="menu_help" msgid="1680178646764069976">"Hjælp og feedback"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"Indstillinger for visning"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="non_phone_caption" msgid="1541655052330027380">"Telefonnummer"</string>
@@ -188,19 +192,19 @@
     <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Importer kontaktpersoner"</string>
     <string name="create_group_dialog_title" msgid="6874527142828424475">"Opret en ny gruppe"</string>
     <string name="create_group_item_label" msgid="4411981763169654825">"Opret en ny gruppe"</string>
-  <plurals name="num_groups_in_account">
-    <item quantity="one" msgid="2944819210288517794">"1 gruppe"</item>
-    <item quantity="other" msgid="1276758425904917367">"<xliff:g id="COUNT">%0$d</xliff:g> grupper"</item>
-  </plurals>
+    <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
+      <item quantity="one"><xliff:g id="COUNT">%0$d</xliff:g> grupper</item>
+      <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> grupper</item>
+    </plurals>
     <string name="delete_group_dialog_message" msgid="7586856514337560529">"Vil du slette gruppen \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\"? (Selve kontaktpersonerne slettes ikke)."</string>
-  <plurals name="num_contacts_in_group">
-    <item quantity="one" msgid="1352418549951013448">"<xliff:g id="COUNT_0">%1$d</xliff:g> person fra <xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>"</item>
-    <item quantity="other" msgid="8146027769011086349">"<xliff:g id="COUNT_0">%1$d</xliff:g> personer fra <xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>"</item>
-  </plurals>
-  <plurals name="group_list_num_contacts_in_group">
-    <item quantity="one" msgid="3323065321661972446">"<xliff:g id="COUNT">%1$d</xliff:g> person"</item>
-    <item quantity="other" msgid="6251996206137048525">"<xliff:g id="COUNT">%1$d</xliff:g> personer"</item>
-  </plurals>
+    <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
+      <item quantity="one"><xliff:g id="COUNT_2">%1$d</xliff:g> personer fra <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> personer fra <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
+    </plurals>
+    <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
+      <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> personer</item>
+      <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> personer</item>
+    </plurals>
     <string name="toast_join_with_empty_contact" msgid="2238581529864542985">"Skriv navnet på kontaktpersonen, før den knyttes sammen med en anden."</string>
     <string name="copy_text" msgid="3257145021583508761">"Kopier til udklipsholder"</string>
     <string name="set_default" msgid="4417505153468300351">"Indstil standard"</string>
@@ -264,4 +268,5 @@
     <string name="content_description_recent_call" msgid="5183800406316723676">"seneste opkald. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. Klik for at ringe tilbage"</string>
     <string name="message_from_you_prefix" msgid="7180706529908434482">"Dig: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
     <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"Hangouts fungerer bedre, når du indtaster personens Hangouts-id i e-mailfeltet eller telefonfeltet."</string>
+    <string name="compact_editor_more_fields" msgid="2874181192382284115">"Flere felter"</string>
 </resources>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index b10db1f..0a6ad45 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -46,6 +46,7 @@
     <string name="description_action_menu_add_star" msgid="3327186327234177456">"Zu Favoriten hinzugefügt"</string>
     <string name="menu_editContact" msgid="9042415603857662633">"Bearbeiten"</string>
     <string name="menu_deleteContact" msgid="6788644058868189393">"Löschen"</string>
+    <string name="menu_change_photo" msgid="7769177631511496210">"Foto ändern"</string>
     <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Auf Startbildschirm platzieren"</string>
     <string name="menu_call" msgid="3992595586042260618">"Kontakt anrufen"</string>
     <string name="menu_sendSMS" msgid="5535886767547006515">"SMS an Kontakt"</string>
@@ -56,17 +57,23 @@
     <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Gruppe hinzufügen"</string>
     <string name="splitConfirmation_title" msgid="633640935430370530">"Kontakt aufteilen?"</string>
     <string name="splitConfirmation" msgid="740190210499587175">"Dieser Kontakt wird in mehrere Kontakte aufgeteilt."</string>
-    <string name="menu_joinAggregate" msgid="5027981918265667970">"Zusammenführen"</string>
+    <string name="menu_joinAggregate" msgid="4050157483569357666">"Zusammenführen"</string>
     <string name="titleJoinContactDataWith" msgid="7684875775798635354">"Kontakte zusammenführen"</string>
     <string name="blurbJoinContactDataWith" msgid="8736488417422708236">"Wählen Sie den Kontakt aus, den Sie mit <xliff:g id="NAME">%s</xliff:g> zusammenführen möchten."</string>
     <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Alle Kontakte anzeigen"</string>
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Vorgeschlagene Kontakte"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Alle Kontakte"</string>
-    <string name="contactsJoinedMessage" msgid="7208148163607047389">"Kontakte wurden verknüpft."</string>
+    <string name="contactsJoinedMessage" msgid="656936718666768589">"Kontakte zusammengeführt"</string>
+    <string name="contacts_deleted_toast" msgid="286851430992788215">"Kontakte gelöscht"</string>
     <string name="menu_set_ring_tone" msgid="8728345772068064946">"Klingeltonwahl"</string>
     <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Alle Anrufe an Mailbox"</string>
     <string name="readOnlyContactWarning" msgid="7808825687289848259">"Sie können keine Kontakte aus schreibgeschützten Konten löschen. Sie können sie aber in Ihren Kontaktlisten ausblenden."</string>
     <string name="readOnlyContactDeleteConfirmation" msgid="2137170726670196909">"Dieser Kontakt enthält Informationen aus mehreren Konten. Informationen aus schreibgeschützten Konten werden nicht gelöscht, sondern in Ihren Kontaktlisten ausgeblendet."</string>
+    <string name="batch_merge_single_contact_warning" msgid="982585201970392110">"Wählen Sie für eine Zusammenführung mindestens zwei Kontakte aus."</string>
+    <string name="batch_merge_confirmation" msgid="8551299480317422420">"Die ausgewählten Kontakte werden zu einem einzigen Kontakt zusammengeführt."</string>
+    <string name="batch_delete_confirmation" msgid="2564172328268885394">"Die ausgewählten Kontakte werden gelöscht."</string>
+    <string name="batch_delete_read_only_contact_confirmation" msgid="6614878716815412523">"Informationen aus schreibgeschützten Konten werden nicht gelöscht, sondern in Ihren Kontaktlisten ausgeblendet."</string>
+    <string name="batch_delete_multiple_accounts_confirmation" msgid="5189722181586680185">"Diese Kontakte enthalten Informationen aus mehreren Konten. Informationen aus schreibgeschützten Konten werden nicht gelöscht, sondern in Ihren Kontaktlisten ausgeblendet."</string>
     <string name="multipleContactDeleteConfirmation" msgid="938900978442960800">"Wenn Sie diesen Kontakt löschen, werden Informationen aus mehreren Konten gelöscht."</string>
     <string name="deleteConfirmation" msgid="811706994761610640">"Dieser Kontakt wird gelöscht."</string>
     <string name="menu_discard" msgid="6854657936970228164">"Änderungen verwerfen"</string>
@@ -94,20 +101,20 @@
     <string name="contactSavedErrorToast" msgid="3207250533172944892">"Kontaktänderungen konnten nicht gespeichert werden."</string>
     <string name="groupSavedToast" msgid="1168756874239833756">"Gruppe gespeichert"</string>
     <string name="groupSavedErrorToast" msgid="7984466936615304740">"Gruppenänderungen konnten nicht gespeichert werden."</string>
-  <plurals name="listTotalPhoneContacts">
-    <item quantity="one" msgid="3015357862286673986">"1 Kontakt mit Telefonnummer"</item>
-    <item quantity="other" msgid="3299954047880968205">"<xliff:g id="COUNT">%d</xliff:g> Kontakte mit Telefonnummern"</item>
-  </plurals>
+    <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> Kontakte mit Telefonnummern</item>
+      <item quantity="one">1 Kontakt mit Telefonnummer</item>
+    </plurals>
     <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"Keine sichtbaren Kontakte mit Telefonnummern"</string>
-  <plurals name="listFoundAllContacts">
-    <item quantity="one" msgid="5517063038754171134">"1 gefunden"</item>
-    <item quantity="other" msgid="3852668542926965042">"<xliff:g id="COUNT">%d</xliff:g> gefunden"</item>
-  </plurals>
+    <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> Kontakte gefunden</item>
+      <item quantity="one">1 Kontakt gefunden</item>
+    </plurals>
     <string name="listFoundAllContactsZero" msgid="922980883593159444">"Keine Kontakte"</string>
-  <plurals name="searchFoundContacts">
-    <item quantity="one" msgid="4826918429708286628">"1 gefunden"</item>
-    <item quantity="other" msgid="7988132539476575389">"<xliff:g id="COUNT">%d</xliff:g> gefunden"</item>
-  </plurals>
+    <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> Kontakte gefunden</item>
+      <item quantity="one">1 Kontakt gefunden</item>
+    </plurals>
     <string name="all_contacts_tab_label" msgid="6250372293594147703">"Alle Kontakte"</string>
     <string name="favorites_tab_label" msgid="1524869648904016414">"Favoriten"</string>
     <string name="callBack" msgid="5498224409038809224">"Rückruf"</string>
@@ -144,9 +151,6 @@
     <string name="pick_new_photo" msgid="9122450996263688237">"Neues Foto auswählen"</string>
     <string name="locale_change_in_progress" msgid="7583992153091537467">"Kontaktliste wird an die geänderte Sprache angepasst..."</string>
     <string name="upgrade_in_progress" msgid="474511436863451061">"Kontaktliste wird aktualisiert..."</string>
-    <string name="upgrade_out_of_memory" msgid="1209994418877625940">"Kontakte werden gerade aktualisiert. \n\nDas Upgrade erfordert etwa <xliff:g id="SIZE_IN_MEGABYTES">%s</xliff:g> MB des internen Speichers.\n\nWählen Sie eine der folgenden Optionen:"</string>
-    <string name="upgrade_out_of_memory_uninstall" msgid="1721798828992091432">"Einige Apps deinstallieren"</string>
-    <string name="upgrade_out_of_memory_retry" msgid="8431289830472724609">"Upgrade wiederholen"</string>
     <string name="search_results_searching" msgid="3984833028938569930">"Suche..."</string>
     <string name="menu_display_selected" msgid="6470001164297969034">"Auswahl anzeigen"</string>
     <string name="menu_display_all" msgid="8887488642609786198">"Alle anzeigen"</string>
@@ -160,10 +164,10 @@
     <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>
-  <plurals name="merge_info">
-    <item quantity="one" msgid="148365587896371969">"nicht zusammengeführt"</item>
-    <item quantity="other" msgid="425683718017380845">"aus <xliff:g id="COUNT">%0$d</xliff:g> Quellen zusammengeführt"</item>
-  </plurals>
+    <plurals name="merge_info" formatted="false" msgid="2489323424994280962">
+      <item quantity="other">aus <xliff:g id="COUNT">%0$d</xliff:g> Quellen zusammengeführt</item>
+      <item quantity="one">nicht zusammengeführt</item>
+    </plurals>
     <string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"Aktuellen Kontakt mit ausgewähltem Kontakt zusammenführen?"</string>
     <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Zur Bearbeitung des ausgewählten Kontakts wechseln? Die bisher eingegebenen Informationen werden kopiert."</string>
     <string name="menu_copyContact" msgid="1573960845106822639">"In meine Kontakte kopieren"</string>
@@ -172,7 +176,7 @@
     <string name="list_filter_custom" msgid="8910173055702057002">"Benutzerdefiniert"</string>
     <string name="activity_title_settings" msgid="5464130076132770781">"Einstellungen"</string>
     <string name="menu_settings" msgid="377929915873428211">"Einstellungen"</string>
-    <string name="menu_help" msgid="5123887102216637725">"Hilfe"</string>
+    <string name="menu_help" msgid="1680178646764069976">"Hilfe &amp; Feedback"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"Anzeigeoptionen"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="non_phone_caption" msgid="1541655052330027380">"Telefonnummer"</string>
@@ -188,19 +192,19 @@
     <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Kontakte importieren"</string>
     <string name="create_group_dialog_title" msgid="6874527142828424475">"Neue Gruppe erstellen"</string>
     <string name="create_group_item_label" msgid="4411981763169654825">"Neue Gruppe erstellen"</string>
-  <plurals name="num_groups_in_account">
-    <item quantity="one" msgid="2944819210288517794">"1 Gruppe"</item>
-    <item quantity="other" msgid="1276758425904917367">"<xliff:g id="COUNT">%0$d</xliff:g> Gruppen"</item>
-  </plurals>
+    <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
+      <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> Gruppen</item>
+      <item quantity="one">1 Gruppe</item>
+    </plurals>
     <string name="delete_group_dialog_message" msgid="7586856514337560529">"Soll die Gruppe \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\" wirklich gelöscht werden? Die Kontakte selbst werden nicht gelöscht."</string>
-  <plurals name="num_contacts_in_group">
-    <item quantity="one" msgid="1352418549951013448">"<xliff:g id="COUNT_0">%1$d</xliff:g> Person von <xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>"</item>
-    <item quantity="other" msgid="8146027769011086349">"<xliff:g id="COUNT_0">%1$d</xliff:g> Personen von <xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>"</item>
-  </plurals>
-  <plurals name="group_list_num_contacts_in_group">
-    <item quantity="one" msgid="3323065321661972446">"<xliff:g id="COUNT">%1$d</xliff:g> Person"</item>
-    <item quantity="other" msgid="6251996206137048525">"<xliff:g id="COUNT">%1$d</xliff:g> Personen"</item>
-  </plurals>
+    <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> Personen von <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> Person von <xliff:g id="ACCOUNT_TYPE_1">%2$s</xliff:g></item>
+    </plurals>
+    <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
+      <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> Personen</item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> Person</item>
+    </plurals>
     <string name="toast_join_with_empty_contact" msgid="2238581529864542985">"Geben Sie einen Namen für den Kontakt ein, bevor Sie ihn mit einem anderen Kontakt zusammenführen."</string>
     <string name="copy_text" msgid="3257145021583508761">"In Zwischenablage kopieren"</string>
     <string name="set_default" msgid="4417505153468300351">"Als Standard festlegen"</string>
@@ -264,4 +268,5 @@
     <string name="content_description_recent_call" msgid="5183800406316723676">"Letzter Anruf. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. Für Rückruf klicken."</string>
     <string name="message_from_you_prefix" msgid="7180706529908434482">"Ich: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
     <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"Hangouts funktioniert besser, wenn Sie die Hangouts-ID der Person in das E-Mail- oder Telefonfeld eingeben."</string>
+    <string name="compact_editor_more_fields" msgid="2874181192382284115">"Weitere Felder"</string>
 </resources>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index b2a62de..f64a7f0 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -46,6 +46,7 @@
     <string name="description_action_menu_add_star" msgid="3327186327234177456">"Προστέθηκε στα αγαπημένα"</string>
     <string name="menu_editContact" msgid="9042415603857662633">"Επεξεργασία"</string>
     <string name="menu_deleteContact" msgid="6788644058868189393">"Διαγραφή"</string>
+    <string name="menu_change_photo" msgid="7769177631511496210">"Αλλαγή φωτογραφίας"</string>
     <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Τοποθέτηση στην αρχική οθόνη"</string>
     <string name="menu_call" msgid="3992595586042260618">"Κλήση επαφής"</string>
     <string name="menu_sendSMS" msgid="5535886767547006515">"Αποστολή μηνύματος κειμένου σε επαφή"</string>
@@ -56,17 +57,23 @@
     <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Προσθήκη ομάδας"</string>
     <string name="splitConfirmation_title" msgid="633640935430370530">"Διαχωρισμός επαφής;"</string>
     <string name="splitConfirmation" msgid="740190210499587175">"Αυτή η επαφή θα διαχωριστεί σε πολλαπλές επαφές."</string>
-    <string name="menu_joinAggregate" msgid="5027981918265667970">"Σύνδεση"</string>
+    <string name="menu_joinAggregate" msgid="4050157483569357666">"Συγχώνευση"</string>
     <string name="titleJoinContactDataWith" msgid="7684875775798635354">"Ένωση επαφών"</string>
     <string name="blurbJoinContactDataWith" msgid="8736488417422708236">"Επιλέξτε την επαφή που θέλετε να ενώσετε με τον χρήστη <xliff:g id="NAME">%s</xliff:g>:"</string>
     <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Εμφάνιση όλων των επαφών"</string>
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Προτεινόμενες επαφές"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Όλες οι επαφές"</string>
-    <string name="contactsJoinedMessage" msgid="7208148163607047389">"Οι επαφές συνδέθηκαν"</string>
+    <string name="contactsJoinedMessage" msgid="656936718666768589">"Οι επαφές συγχωνεύτηκαν"</string>
+    <string name="contacts_deleted_toast" msgid="286851430992788215">"Οι επαφές διαγράφηκαν"</string>
     <string name="menu_set_ring_tone" msgid="8728345772068064946">"Ήχος κλήσης"</string>
     <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Κλήσεις στον τηλεφωνητή"</string>
     <string name="readOnlyContactWarning" msgid="7808825687289848259">"Δεν μπορείτε να διαγράψετε επαφές από λογαριασμούς οι οποίοι προορίζονται μόνο για ανάγνωση, αλλά μπορείτε να τις αποκρύψετε στις λίστες επαφών σας."</string>
     <string name="readOnlyContactDeleteConfirmation" msgid="2137170726670196909">"Αυτή η επαφή περιέχει πληροφορίες από πολλούς λογαριασμούς. Θα γίνει απόκρυψη και όχι διαγραφή των πληροφοριών που προέρχονται από λογαριασμούς μόνο για ανάγνωση στις λίστες επαφών σας."</string>
+    <string name="batch_merge_single_contact_warning" msgid="982585201970392110">"Θα πρέπει να έχουν επιλεγεί τουλάχιστον δύο επαφές για να πραγματοποιηθεί μια συγχώνευση."</string>
+    <string name="batch_merge_confirmation" msgid="8551299480317422420">"Οι επιλεγμένες επαφές θα συγχωνευτούν σε μια μεμονωμένη επαφή."</string>
+    <string name="batch_delete_confirmation" msgid="2564172328268885394">"Οι επιλεγμένες επαφές θα διαγραφούν."</string>
+    <string name="batch_delete_read_only_contact_confirmation" msgid="6614878716815412523">"Οι πληροφορίες από λογαριασμούς μόνο για ανάγνωση θα βρίσκονται κρυμμένες στις λίστες επαφών σας, δεν θα διαγραφούν."</string>
+    <string name="batch_delete_multiple_accounts_confirmation" msgid="5189722181586680185">"Αυτές οι επαφές περιέχουν πληροφορίες από πολλαπλούς λογαριασμούς. Οι πληροφορίες από λογαριασμούς μόνο για ανάγνωση θα βρίσκονται κρυμμένες στις λίστες επαφών σας, δεν θα διαγραφούν."</string>
     <string name="multipleContactDeleteConfirmation" msgid="938900978442960800">"Εάν διαγράψετε αυτήν την επαφή, θα γίνει διαγραφή των πληροφοριών από πολλούς λογαριασμούς."</string>
     <string name="deleteConfirmation" msgid="811706994761610640">"Αυτή η επαφή θα διαγραφεί."</string>
     <string name="menu_discard" msgid="6854657936970228164">"Απόρριψη αλλαγών"</string>
@@ -94,20 +101,20 @@
     <string name="contactSavedErrorToast" msgid="3207250533172944892">"Δεν ήταν δυνατή η αποθήκευση των αλλαγών που πραγματοποιήθηκαν στις επαφές."</string>
     <string name="groupSavedToast" msgid="1168756874239833756">"Η ομάδα αποθηκεύτηκε."</string>
     <string name="groupSavedErrorToast" msgid="7984466936615304740">"Δεν ήταν δυνατή η αποθήκευση των αλλαγών που πραγματοποιήθηκαν στην ομάδα."</string>
-  <plurals name="listTotalPhoneContacts">
-    <item quantity="one" msgid="3015357862286673986">"1 επαφή με αριθμό τηλεφώνου"</item>
-    <item quantity="other" msgid="3299954047880968205">"<xliff:g id="COUNT">%d</xliff:g> επαφές με αριθμούς τηλεφώνου"</item>
-  </plurals>
+    <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> επαφές με αριθμό τηλεφώνου</item>
+      <item quantity="one">1 επαφή με αριθμό τηλεφώνου</item>
+    </plurals>
     <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"Δεν υπάρχουν επαφές με αριθμούς τηλεφώνου"</string>
-  <plurals name="listFoundAllContacts">
-    <item quantity="one" msgid="5517063038754171134">"Βρέθηκε 1"</item>
-    <item quantity="other" msgid="3852668542926965042">"Βρέθηκαν <xliff:g id="COUNT">%d</xliff:g>"</item>
-  </plurals>
+    <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
+      <item quantity="other">Βρέθηκαν <xliff:g id="COUNT">%d</xliff:g></item>
+      <item quantity="one">Βρέθηκε 1</item>
+    </plurals>
     <string name="listFoundAllContactsZero" msgid="922980883593159444">"Δεν υπάρχουν επαφές"</string>
-  <plurals name="searchFoundContacts">
-    <item quantity="one" msgid="4826918429708286628">"Βρέθηκε 1"</item>
-    <item quantity="other" msgid="7988132539476575389">"Βρέθηκαν <xliff:g id="COUNT">%d</xliff:g>"</item>
-  </plurals>
+    <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
+      <item quantity="other">Βρέθηκαν <xliff:g id="COUNT">%d</xliff:g></item>
+      <item quantity="one">Βρέθηκε 1</item>
+    </plurals>
     <string name="all_contacts_tab_label" msgid="6250372293594147703">"Όλες οι επαφές"</string>
     <string name="favorites_tab_label" msgid="1524869648904016414">"Αγαπημένα"</string>
     <string name="callBack" msgid="5498224409038809224">"Επανάκληση"</string>
@@ -123,9 +130,9 @@
     <string name="quickcontact_add_phone_number" msgid="731665835910658965">"Προσθήκη αριθμού τηλεφώνου"</string>
     <string name="quickcontact_add_email" msgid="739298028384348482">"Προσθήκη email"</string>
     <string name="missing_app" msgid="1466111003546611387">"Δεν βρέθηκε εφαρμογή για τη διαχείριση αυτής της ενέργειας."</string>
-    <string name="menu_share" msgid="943789700636542260">"Κοινή χρήση"</string>
+    <string name="menu_share" msgid="943789700636542260">"Κοινοποίηση"</string>
     <string name="menu_add_contact" msgid="3198704337220892684">"Προσθήκη στις επαφές"</string>
-    <string name="share_via" msgid="563121028023030093">"Κοινή χρήση μέσω"</string>
+    <string name="share_via" msgid="563121028023030093">"Κοινή επαφή μέσω"</string>
     <string name="dialog_new_group_account" msgid="2318032089273496830">"Δημιουργία ομάδας στο λογαριασμό"</string>
     <string name="audio_chat" msgid="2535716629358298691">"Φωνητική συνομιλία"</string>
     <string name="video_chat" msgid="1872255818640336072">"Συζήτηση μέσω βίντεο"</string>
@@ -144,9 +151,6 @@
     <string name="pick_new_photo" msgid="9122450996263688237">"Επιλογή νέας φωτογραφίας"</string>
     <string name="locale_change_in_progress" msgid="7583992153091537467">"Γίνεται ενημέρωση της λίστας επαφών για να αντικατοπτριστεί η αλλαγή γλώσσας."</string>
     <string name="upgrade_in_progress" msgid="474511436863451061">"Γίνεται ενημέρωση της λίστας επαφών."</string>
-    <string name="upgrade_out_of_memory" msgid="1209994418877625940">"Γίνεται αναβάθμιση των επαφών. \n\nΗ διαδικασία αναβάθμισης απαιτεί περίπου <xliff:g id="SIZE_IN_MEGABYTES">%s</xliff:g> MB από τον εσωτερικό χώρο αποθήκευσης.\n\nΟρίστε μία από τις παρακάτω επιλογές:"</string>
-    <string name="upgrade_out_of_memory_uninstall" msgid="1721798828992091432">"Καταργήστε την εγκατάσταση ορισμένων εφαρμογών"</string>
-    <string name="upgrade_out_of_memory_retry" msgid="8431289830472724609">"Επανάληψη αναβάθμισης"</string>
     <string name="search_results_searching" msgid="3984833028938569930">"Αναζήτηση…"</string>
     <string name="menu_display_selected" msgid="6470001164297969034">"Εμφάνιση επιλεγμένων"</string>
     <string name="menu_display_all" msgid="8887488642609786198">"Εμφάνιση όλων"</string>
@@ -160,10 +164,10 @@
     <string name="primary_photo" msgid="8517942231868516999">"Κύρια φωτογραφία"</string>
     <string name="description_star" msgid="2605854427360036550">"αγαπημένο"</string>
     <string name="edit_contact" msgid="7529281274005689512">"Επεξεργασία επαφής"</string>
-  <plurals name="merge_info">
-    <item quantity="one" msgid="148365587896371969">"δεν συγχωνεύθηκαν"</item>
-    <item quantity="other" msgid="425683718017380845">"συγχώνευση από <xliff:g id="COUNT">%0$d</xliff:g> προελεύσεις"</item>
-  </plurals>
+    <plurals name="merge_info" formatted="false" msgid="2489323424994280962">
+      <item quantity="other">συγχωνεύτηκαν από <xliff:g id="COUNT">%0$d</xliff:g> πηγές</item>
+      <item quantity="one">δεν συγχωνεύτηκαν</item>
+    </plurals>
     <string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"Να γίνει ένωση της τρέχουσας επαφής με την επιλεγμένη επαφή;"</string>
     <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Να γίνει μετάβαση σε επεξεργασία της επιλεγμένης επαφής; Θα γίνει αντιγραφή των στοιχείων που έχετε εισαγάγει μέχρι τώρα."</string>
     <string name="menu_copyContact" msgid="1573960845106822639">"Αντιγραφή στις Επαφές μου"</string>
@@ -172,7 +176,7 @@
     <string name="list_filter_custom" msgid="8910173055702057002">"Προσαρμοσμένη"</string>
     <string name="activity_title_settings" msgid="5464130076132770781">"Ρυθμίσεις"</string>
     <string name="menu_settings" msgid="377929915873428211">"Ρυθμίσεις"</string>
-    <string name="menu_help" msgid="5123887102216637725">"Βοήθεια"</string>
+    <string name="menu_help" msgid="1680178646764069976">"Βοήθεια και σχόλια"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"Επιλογές προβολής"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="non_phone_caption" msgid="1541655052330027380">"Αριθμός τηλεφώνου"</string>
@@ -188,19 +192,19 @@
     <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Εισαγωγή επαφών"</string>
     <string name="create_group_dialog_title" msgid="6874527142828424475">"Δημιουργία νέας ομάδας"</string>
     <string name="create_group_item_label" msgid="4411981763169654825">"Δημιουργία νέας ομάδας"</string>
-  <plurals name="num_groups_in_account">
-    <item quantity="one" msgid="2944819210288517794">"1 ομάδα"</item>
-    <item quantity="other" msgid="1276758425904917367">"<xliff:g id="COUNT">%0$d</xliff:g> ομάδες"</item>
-  </plurals>
+    <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
+      <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> ομάδες</item>
+      <item quantity="one">1 ομάδα</item>
+    </plurals>
     <string name="delete_group_dialog_message" msgid="7586856514337560529">"Να διαγραφεί η ομάδα \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\"; (Οι επαφές δεν θα διαγραφούν.)"</string>
-  <plurals name="num_contacts_in_group">
-    <item quantity="one" msgid="1352418549951013448">"<xliff:g id="COUNT_0">%1$d</xliff:g> άτομο από <xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>"</item>
-    <item quantity="other" msgid="8146027769011086349">"<xliff:g id="COUNT_0">%1$d</xliff:g> άτομα από <xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>"</item>
-  </plurals>
-  <plurals name="group_list_num_contacts_in_group">
-    <item quantity="one" msgid="3323065321661972446">"<xliff:g id="COUNT">%1$d</xliff:g> άτομο"</item>
-    <item quantity="other" msgid="6251996206137048525">"<xliff:g id="COUNT">%1$d</xliff:g> άτομα"</item>
-  </plurals>
+    <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> άτομα από <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> άτομο από <xliff:g id="ACCOUNT_TYPE_1">%2$s</xliff:g></item>
+    </plurals>
+    <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
+      <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> άτομα</item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> άτομο</item>
+    </plurals>
     <string name="toast_join_with_empty_contact" msgid="2238581529864542985">"Προτού συνδεθείτε με κάποια άλλη επαφή, πληκτρολογήστε το όνομα της επαφής."</string>
     <string name="copy_text" msgid="3257145021583508761">"Αντιγραφή στο πρόχειρο"</string>
     <string name="set_default" msgid="4417505153468300351">"Ορισμός ως προεπιλογή"</string>
@@ -264,4 +268,5 @@
     <string name="content_description_recent_call" msgid="5183800406316723676">"πρόσφατη κλήση. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. κάντε κλικ για επιστροφή της κλήσης"</string>
     <string name="message_from_you_prefix" msgid="7180706529908434482">"Εσείς: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
     <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"Το Hangouts λειτουργεί καλύτερα όταν εισάγετε το αναγνωριστικό Hangouts του ατόμου στο πεδίο ηλεκτρονικού ταχυδρομείου ή τηλεφώνου."</string>
+    <string name="compact_editor_more_fields" msgid="2874181192382284115">"Περισσότερα πεδία"</string>
 </resources>
diff --git a/res/values-en-rAU/strings.xml b/res/values-en-rAU/strings.xml
new file mode 100644
index 0000000..b9176db
--- /dev/null
+++ b/res/values-en-rAU/strings.xml
@@ -0,0 +1,272 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2006 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+ -->
+
+<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">"Contacts"</string>
+    <string name="launcherActivityLabel" msgid="6497230399032392417">"Contacts"</string>
+    <string name="contactsList" msgid="8661624236494819731">"Contacts"</string>
+    <string name="shortcutContact" msgid="749243779392912958">"Contact"</string>
+    <string name="shortcutDialContact" msgid="746622101599186779">"Direct dial"</string>
+    <string name="shortcutMessageContact" msgid="2460337253595976198">"Direct message"</string>
+    <string name="shortcutActivityTitle" msgid="6642877210643565436">"Choose a contact short cut"</string>
+    <string name="callShortcutActivityTitle" msgid="6065749861423648991">"Choose a number to call"</string>
+    <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"Choose a number to message"</string>
+    <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Add to contact"</string>
+    <string name="contactPickerActivityTitle" msgid="4301062192337417640">"Choose a contact"</string>
+    <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Create new contact"</string>
+    <string name="starredList" msgid="4817256136413959463">"Starred"</string>
+    <string name="frequentList" msgid="7154768136473953056">"Frequent"</string>
+    <string name="strequentList" msgid="5640192862059373511">"Favourites"</string>
+    <string name="viewContactTitle" msgid="7989394521836644384">"Contact details"</string>
+    <string name="editContactDescription" msgid="2947202828256214947">"Edit contact"</string>
+    <string name="insertContactDescription" msgid="4709878105452681987">"Create contact"</string>
+    <string name="editGroupDescription" msgid="6321161304201540561">"Edit group"</string>
+    <string name="insertGroupDescription" msgid="5658512271662210139">"Create group"</string>
+    <string name="contactDetailAbout" msgid="5430408883907061400">"About"</string>
+    <string name="contactDetailUpdates" msgid="3780588624763446941">"Updates"</string>
+    <string name="searchHint" msgid="8482945356247760701">"Search contacts"</string>
+    <string name="menu_viewContact" msgid="2795575601596468581">"View contact"</string>
+    <string name="menu_addStar" msgid="2908478235715404876">"Add to favourites"</string>
+    <string name="menu_removeStar" msgid="5844227078364227030">"Remove from favourites"</string>
+    <string name="description_action_menu_remove_star" msgid="4699640108012265178">"Removed from favourites"</string>
+    <string name="description_action_menu_add_star" msgid="3327186327234177456">"Added to favourites"</string>
+    <string name="menu_editContact" msgid="9042415603857662633">"Edit"</string>
+    <string name="menu_deleteContact" msgid="6788644058868189393">"Delete"</string>
+    <string name="menu_change_photo" msgid="7769177631511496210">"Change photo"</string>
+    <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Place on Home screen"</string>
+    <string name="menu_call" msgid="3992595586042260618">"Call contact"</string>
+    <string name="menu_sendSMS" msgid="5535886767547006515">"Text contact"</string>
+    <string name="menu_splitAggregate" msgid="8368636463748691868">"Separate"</string>
+    <string name="menu_editGroup" msgid="5062005185370983720">"Edit"</string>
+    <string name="menu_deleteGroup" msgid="3486380004411482874">"Delete"</string>
+    <string name="menu_new_contact_action_bar" msgid="7263362129442119188">"Add Contact"</string>
+    <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Add Group"</string>
+    <string name="splitConfirmation_title" msgid="633640935430370530">"Separate contact?"</string>
+    <string name="splitConfirmation" msgid="740190210499587175">"This contact will be separated into multiple contacts."</string>
+    <string name="menu_joinAggregate" msgid="4050157483569357666">"Merge"</string>
+    <string name="titleJoinContactDataWith" msgid="7684875775798635354">"Join contacts"</string>
+    <string name="blurbJoinContactDataWith" msgid="8736488417422708236">"Choose the contact that you want to join with <xliff:g id="NAME">%s</xliff:g>:"</string>
+    <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Show all  contacts"</string>
+    <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Suggested Contacts"</string>
+    <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"All contacts"</string>
+    <string name="contactsJoinedMessage" msgid="656936718666768589">"Contacts merged"</string>
+    <string name="contacts_deleted_toast" msgid="286851430992788215">"Contacts deleted"</string>
+    <string name="menu_set_ring_tone" msgid="8728345772068064946">"Set ringtone"</string>
+    <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"All calls to voicemail"</string>
+    <string name="readOnlyContactWarning" msgid="7808825687289848259">"You can\'t delete contacts from read-only accounts, but you can hide them in your contacts lists."</string>
+    <string name="readOnlyContactDeleteConfirmation" msgid="2137170726670196909">"This contact contains information from multiple accounts. Information from read-only accounts will be hidden in your contacts lists, not deleted."</string>
+    <string name="batch_merge_single_contact_warning" msgid="982585201970392110">"You need at least two contacts selected to perform a merge."</string>
+    <string name="batch_merge_confirmation" msgid="8551299480317422420">"The selected contacts will be merged into a single contact."</string>
+    <string name="batch_delete_confirmation" msgid="2564172328268885394">"The selected contacts will be deleted."</string>
+    <string name="batch_delete_read_only_contact_confirmation" msgid="6614878716815412523">"Information from read-only accounts will be hidden in your contacts lists, not deleted."</string>
+    <string name="batch_delete_multiple_accounts_confirmation" msgid="5189722181586680185">"These contacts contain information from multiple accounts. Information from read-only accounts will be hidden in your contacts lists, not deleted."</string>
+    <string name="multipleContactDeleteConfirmation" msgid="938900978442960800">"Deleting this contact will delete information from multiple accounts."</string>
+    <string name="deleteConfirmation" msgid="811706994761610640">"This contact will be deleted."</string>
+    <string name="menu_discard" msgid="6854657936970228164">"Discard changes"</string>
+    <string name="invalidContactMessage" msgid="8215051456181842274">"The contact doesn\'t exist."</string>
+    <string name="createContactShortcutSuccessful" msgid="7874133287558150877">"Contact widget added to Home screen."</string>
+    <string name="pickerNewContactHeader" msgid="7750705279843568147">"Create new contact"</string>
+    <string name="pickerNewContactText" msgid="6166997164401048211">"Create new contact"</string>
+  <string-array name="otherLabels">
+    <item msgid="8287841928119937597">"Organisation"</item>
+    <item msgid="7196592230748086755">"Note"</item>
+  </string-array>
+    <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"No pictures are available on the tablet."</string>
+    <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"No pictures are available on the phone."</string>
+    <string name="attach_photo_dialog_title" msgid="5599827035558557169">"Contact photo"</string>
+    <string name="customLabelPickerTitle" msgid="1081475101983255212">"Custom label name"</string>
+    <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Send calls directly to voicemail"</string>
+    <string name="removePhoto" msgid="4898105274130284565">"Remove photo"</string>
+    <string name="noContacts" msgid="8579310973261953559">"No contacts."</string>
+    <string name="noGroups" msgid="8614664663561385253">"No groups."</string>
+    <string name="noAccounts" msgid="7768267764545265909">"To create groups you need an account."</string>
+    <string name="emptyGroup" msgid="7502116218697177370">"No people in this group."</string>
+    <string name="addPeopleToGroup" msgid="7879585947222263516">"To add some, edit the group."</string>
+    <string name="savingContact" msgid="4075751076741924939">"Saving contact…"</string>
+    <string name="contactSavedToast" msgid="7152589189385441091">"Contact saved."</string>
+    <string name="contactSavedErrorToast" msgid="3207250533172944892">"Couldn\'t save contact changes."</string>
+    <string name="groupSavedToast" msgid="1168756874239833756">"Group saved."</string>
+    <string name="groupSavedErrorToast" msgid="7984466936615304740">"Couldn\'t save group changes."</string>
+    <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> contacts with phone numbers</item>
+      <item quantity="one">1 contact with phone number</item>
+    </plurals>
+    <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"No contacts with phone numbers"</string>
+    <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> found</item>
+      <item quantity="one">1 found</item>
+    </plurals>
+    <string name="listFoundAllContactsZero" msgid="922980883593159444">"No contacts"</string>
+    <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> found</item>
+      <item quantity="one">1 found</item>
+    </plurals>
+    <string name="all_contacts_tab_label" msgid="6250372293594147703">"All contacts"</string>
+    <string name="favorites_tab_label" msgid="1524869648904016414">"Favourites"</string>
+    <string name="callBack" msgid="5498224409038809224">"Call back"</string>
+    <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>
+    <string name="quickcontact_missing_app" msgid="358168575340921552">"No app was found to handle this action."</string>
+    <string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Click to return to previous screen"</string>
+    <string name="quickcontact_add_phone_number" msgid="731665835910658965">"Add phone number"</string>
+    <string name="quickcontact_add_email" msgid="739298028384348482">"Add email"</string>
+    <string name="missing_app" msgid="1466111003546611387">"No app was found to handle this action."</string>
+    <string name="menu_share" msgid="943789700636542260">"Share"</string>
+    <string name="menu_add_contact" msgid="3198704337220892684">"Add to contacts"</string>
+    <string name="share_via" msgid="563121028023030093">"Share contact via"</string>
+    <string name="dialog_new_group_account" msgid="2318032089273496830">"Create group under account"</string>
+    <string name="audio_chat" msgid="2535716629358298691">"Voice chat"</string>
+    <string name="video_chat" msgid="1872255818640336072">"Video chat"</string>
+    <string name="connections" msgid="8098440723172028350">"Connections"</string>
+    <string name="add_connection_button" msgid="4861308615789601727">"Add connection"</string>
+    <string name="recent" msgid="2659189233141493004">"Recent"</string>
+    <string name="recent_updates" msgid="4267258535615860710">"Recent updates"</string>
+    <string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g> contact"</string>
+    <!-- no translation found for from_account_format (4469138575127580203) -->
+    <skip />
+    <string name="contact_read_only" msgid="7421346527289472273">"Not editable from this app."</string>
+    <string name="group_read_only" msgid="1061762906115697637">"Not editable on this device"</string>
+    <string name="take_photo" msgid="7496128293167402354">"Take photo"</string>
+    <string name="take_new_photo" msgid="7341354729436576304">"Take new photo"</string>
+    <string name="pick_photo" msgid="2129509985223564942">"Choose photo"</string>
+    <string name="pick_new_photo" msgid="9122450996263688237">"Select new photo"</string>
+    <string name="locale_change_in_progress" msgid="7583992153091537467">"Contact list is being updated to reflect the change of language."</string>
+    <string name="upgrade_in_progress" msgid="474511436863451061">"Contact list is being updated."</string>
+    <string name="search_results_searching" msgid="3984833028938569930">"Searching…"</string>
+    <string name="menu_display_selected" msgid="6470001164297969034">"Show selected"</string>
+    <string name="menu_display_all" msgid="8887488642609786198">"Show all"</string>
+    <string name="menu_select_all" msgid="621719255150713545">"Select all"</string>
+    <string name="menu_select_none" msgid="7093222469852132345">"Unselect all"</string>
+    <string name="add_new_entry_for_section" msgid="5223080690667565044">"Add new"</string>
+    <string name="add_organization" msgid="7311893231158291197">"Add organisation"</string>
+    <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Date"</string>
+    <string name="group_edit_field_hint_text" msgid="3966441850870457808">"Group name"</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>
+    <plurals name="merge_info" formatted="false" msgid="2489323424994280962">
+      <item quantity="other">merged from <xliff:g id="COUNT">%0$d</xliff:g> sources</item>
+      <item quantity="one">not merged</item>
+    </plurals>
+    <string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"Join the current contact with the selected contact?"</string>
+    <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Switch to editing the selected contact? Information that you\'ve entered so far will be copied."</string>
+    <string name="menu_copyContact" msgid="1573960845106822639">"Copy to My Contacts"</string>
+    <string name="add_to_my_contacts" msgid="1068274916793627723">"Add to My Contacts"</string>
+    <string name="contact_directory_description" msgid="683398073603909119">"Directory <xliff:g id="TYPE">%1$s</xliff:g>"</string>
+    <string name="list_filter_custom" msgid="8910173055702057002">"Customised"</string>
+    <string name="activity_title_settings" msgid="5464130076132770781">"Settings"</string>
+    <string name="menu_settings" msgid="377929915873428211">"Settings"</string>
+    <string name="menu_help" msgid="1680178646764069976">"Help &amp; feedback"</string>
+    <string name="preference_displayOptions" msgid="1341720270148252393">"Display options"</string>
+    <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
+    <string name="non_phone_caption" msgid="1541655052330027380">"Phone number"</string>
+    <string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Add to contacts"</string>
+    <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"Add to contact"</string>
+    <string name="non_phone_close" msgid="7608506439725515667">"Close"</string>
+    <string name="widget_name_and_phonetic" msgid="8739586586600099979">"<xliff:g id="DISPLAY_NAME">%1$s</xliff:g> (<xliff:g id="PHONETIC_NAME">%2$s</xliff:g>)"</string>
+    <string name="date_year_toggle" msgid="7356532842767854606">"Provide a year"</string>
+    <string name="social_widget_label" msgid="6378905543028924592">"Contact"</string>
+    <string name="social_widget_loading" msgid="5327336597364074608">"Loading…"</string>
+    <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Create a new contact"</string>
+    <string name="contacts_unavailable_add_account" msgid="7911101713860139754">"Sign in to an account"</string>
+    <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Import contacts"</string>
+    <string name="create_group_dialog_title" msgid="6874527142828424475">"Create new group"</string>
+    <string name="create_group_item_label" msgid="4411981763169654825">"Create new group"</string>
+    <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
+      <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> groups</item>
+      <item quantity="one">1 group</item>
+    </plurals>
+    <string name="delete_group_dialog_message" msgid="7586856514337560529">"Delete the group \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\"? (Contacts themselves will not be deleted.)"</string>
+    <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> people from <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> person from <xliff:g id="ACCOUNT_TYPE_1">%2$s</xliff:g></item>
+    </plurals>
+    <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
+      <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> people</item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> person</item>
+    </plurals>
+    <string name="toast_join_with_empty_contact" msgid="2238581529864542985">"Type contact name before joining with another."</string>
+    <string name="copy_text" msgid="3257145021583508761">"Copy to clipboard"</string>
+    <string name="set_default" msgid="4417505153468300351">"Set default"</string>
+    <string name="clear_default" msgid="7193185801596678067">"Clear default"</string>
+    <string name="toast_text_copied" msgid="5143776250008541719">"Text copied"</string>
+    <string name="cancel_confirmation_dialog_message" msgid="5885724679874403115">"Discard your changes?"</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="profile_display_name" msgid="4127389543625918771">"Set up my profile"</string>
+    <string name="enter_contact_name" msgid="1738391320566349924">"Type person\'s name"</string>
+    <string name="group_name_hint" msgid="238359485263401293">"Group\'s name"</string>
+    <string name="local_profile_title" msgid="2021416826991393684">"My local profile"</string>
+    <string name="external_profile_title" msgid="8034998767621359438">"My <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> profile"</string>
+    <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Displaying all contacts"</string>
+    <string name="no_account_prompt" msgid="6424883302325061025">"Contacts works better with a Google Account.\n\n• Access from any web browser.\n• Back up your contacts securely."</string>
+    <string name="generic_no_account_prompt" msgid="7218827704367325460">"Keep your contacts safe even if you lose your phone: synchronise with an online service."</string>
+    <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Add an account"</string>
+    <string name="contact_editor_prompt_zero_accounts" msgid="1785345895691886499">"Your new contact won\'t be backed up. Add an account that backs up contacts online?"</string>
+    <string name="contact_editor_prompt_one_account" msgid="8669032699767375976">"Your new contact will be synchronised with <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
+    <string name="contact_editor_prompt_multiple_accounts" msgid="611828200100438242">"You can synchronise your new contact with one of the following accounts. Which do you want to use?"</string>
+    <string name="contact_editor_title_new_contact" msgid="7192223018128934940">"Add new contact"</string>
+    <string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"Edit contact"</string>
+    <string name="keep_local" msgid="1258761699192993322">"Keep locally"</string>
+    <string name="add_account" msgid="8201790677994503186">"Add account"</string>
+    <string name="add_new_account" msgid="5748627740680940264">"Add new account"</string>
+    <string name="menu_export_database" msgid="2659719297530170820">"Export database files"</string>
+    <string name="action_menu_add_new_contact_button" msgid="3180222523336380017">"add new contact"</string>
+    <string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"See more"</string>
+    <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"See less"</string>
+    <string name="expanding_entry_card_view_see_all" msgid="3845258737661412627">"See all"</string>
+    <string name="recent_card_title" msgid="8982782042698001695">"Recent"</string>
+    <string name="about_card_title" msgid="2920942314212825637">"About"</string>
+    <string name="send_message" msgid="8938418965550543196">"Send message"</string>
+    <string name="toast_making_personal_copy" msgid="6137651078366797938">"Creating a personal copy..."</string>
+    <string name="yesterday" msgid="6840858548955018569">"Yesterday"</string>
+    <string name="tomorrow" msgid="6241969467795308581">"Tomorrow"</string>
+    <string name="today" msgid="8041090779381781781">"Today"</string>
+    <string name="today_at_time_fmt" msgid="605665249491030460">"Today at <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
+    <string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"Tomorrow at <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
+    <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%s</xliff:g>, <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
+    <string name="untitled_event" msgid="3484859385405939366">"(Untitled event)"</string>
+    <string name="date_time_set" msgid="4761419824439606690">"Set"</string>
+    <string name="header_im_entry" msgid="3581720979640225615">"IM"</string>
+    <string name="header_organization_entry" msgid="8515394955666265406">"Organisation"</string>
+    <string name="header_nickname_entry" msgid="6743561883967451485">"Nickname"</string>
+    <string name="header_note_entry" msgid="4320190426480612344">"Note"</string>
+    <string name="header_website_entry" msgid="1411467850000824745">"Website"</string>
+    <string name="header_event_entry" msgid="6738250422744401460">"Event"</string>
+    <string name="header_relation_entry" msgid="1520292958088146460">"Relation"</string>
+    <string name="header_account_entry" msgid="2684318506427891827">"Account"</string>
+    <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>
+    <string name="content_description_recent_sms" msgid="1666389577263317445">"recent SMS. <xliff:g id="MESSAGE_BODY">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. click to respond"</string>
+    <string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"incoming"</string>
+    <string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"outgoing"</string>
+    <string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"missed"</string>
+    <string name="content_description_recent_call" msgid="5183800406316723676">"recent call. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. click to call back"</string>
+    <string name="message_from_you_prefix" msgid="7180706529908434482">"You: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
+    <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"Hangouts works better when you enter the person\'s Hangouts identifier into the email field or phone field."</string>
+    <string name="compact_editor_more_fields" msgid="2874181192382284115">"More Fields"</string>
+</resources>
diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml
index e3d6f7c..b9176db 100644
--- a/res/values-en-rGB/strings.xml
+++ b/res/values-en-rGB/strings.xml
@@ -46,6 +46,7 @@
     <string name="description_action_menu_add_star" msgid="3327186327234177456">"Added to favourites"</string>
     <string name="menu_editContact" msgid="9042415603857662633">"Edit"</string>
     <string name="menu_deleteContact" msgid="6788644058868189393">"Delete"</string>
+    <string name="menu_change_photo" msgid="7769177631511496210">"Change photo"</string>
     <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Place on Home screen"</string>
     <string name="menu_call" msgid="3992595586042260618">"Call contact"</string>
     <string name="menu_sendSMS" msgid="5535886767547006515">"Text contact"</string>
@@ -56,17 +57,23 @@
     <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Add Group"</string>
     <string name="splitConfirmation_title" msgid="633640935430370530">"Separate contact?"</string>
     <string name="splitConfirmation" msgid="740190210499587175">"This contact will be separated into multiple contacts."</string>
-    <string name="menu_joinAggregate" msgid="5027981918265667970">"Join"</string>
+    <string name="menu_joinAggregate" msgid="4050157483569357666">"Merge"</string>
     <string name="titleJoinContactDataWith" msgid="7684875775798635354">"Join contacts"</string>
     <string name="blurbJoinContactDataWith" msgid="8736488417422708236">"Choose the contact that you want to join with <xliff:g id="NAME">%s</xliff:g>:"</string>
     <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Show all  contacts"</string>
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Suggested Contacts"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"All contacts"</string>
-    <string name="contactsJoinedMessage" msgid="7208148163607047389">"Contacts joined"</string>
+    <string name="contactsJoinedMessage" msgid="656936718666768589">"Contacts merged"</string>
+    <string name="contacts_deleted_toast" msgid="286851430992788215">"Contacts deleted"</string>
     <string name="menu_set_ring_tone" msgid="8728345772068064946">"Set ringtone"</string>
     <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"All calls to voicemail"</string>
     <string name="readOnlyContactWarning" msgid="7808825687289848259">"You can\'t delete contacts from read-only accounts, but you can hide them in your contacts lists."</string>
     <string name="readOnlyContactDeleteConfirmation" msgid="2137170726670196909">"This contact contains information from multiple accounts. Information from read-only accounts will be hidden in your contacts lists, not deleted."</string>
+    <string name="batch_merge_single_contact_warning" msgid="982585201970392110">"You need at least two contacts selected to perform a merge."</string>
+    <string name="batch_merge_confirmation" msgid="8551299480317422420">"The selected contacts will be merged into a single contact."</string>
+    <string name="batch_delete_confirmation" msgid="2564172328268885394">"The selected contacts will be deleted."</string>
+    <string name="batch_delete_read_only_contact_confirmation" msgid="6614878716815412523">"Information from read-only accounts will be hidden in your contacts lists, not deleted."</string>
+    <string name="batch_delete_multiple_accounts_confirmation" msgid="5189722181586680185">"These contacts contain information from multiple accounts. Information from read-only accounts will be hidden in your contacts lists, not deleted."</string>
     <string name="multipleContactDeleteConfirmation" msgid="938900978442960800">"Deleting this contact will delete information from multiple accounts."</string>
     <string name="deleteConfirmation" msgid="811706994761610640">"This contact will be deleted."</string>
     <string name="menu_discard" msgid="6854657936970228164">"Discard changes"</string>
@@ -94,20 +101,20 @@
     <string name="contactSavedErrorToast" msgid="3207250533172944892">"Couldn\'t save contact changes."</string>
     <string name="groupSavedToast" msgid="1168756874239833756">"Group saved."</string>
     <string name="groupSavedErrorToast" msgid="7984466936615304740">"Couldn\'t save group changes."</string>
-  <plurals name="listTotalPhoneContacts">
-    <item quantity="one" msgid="3015357862286673986">"1 contact with phone number"</item>
-    <item quantity="other" msgid="3299954047880968205">"<xliff:g id="COUNT">%d</xliff:g> contacts with phone numbers"</item>
-  </plurals>
+    <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> contacts with phone numbers</item>
+      <item quantity="one">1 contact with phone number</item>
+    </plurals>
     <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"No contacts with phone numbers"</string>
-  <plurals name="listFoundAllContacts">
-    <item quantity="one" msgid="5517063038754171134">"1 found"</item>
-    <item quantity="other" msgid="3852668542926965042">"<xliff:g id="COUNT">%d</xliff:g> found"</item>
-  </plurals>
+    <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> found</item>
+      <item quantity="one">1 found</item>
+    </plurals>
     <string name="listFoundAllContactsZero" msgid="922980883593159444">"No contacts"</string>
-  <plurals name="searchFoundContacts">
-    <item quantity="one" msgid="4826918429708286628">"1 found"</item>
-    <item quantity="other" msgid="7988132539476575389">"<xliff:g id="COUNT">%d</xliff:g> found"</item>
-  </plurals>
+    <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> found</item>
+      <item quantity="one">1 found</item>
+    </plurals>
     <string name="all_contacts_tab_label" msgid="6250372293594147703">"All contacts"</string>
     <string name="favorites_tab_label" msgid="1524869648904016414">"Favourites"</string>
     <string name="callBack" msgid="5498224409038809224">"Call back"</string>
@@ -144,9 +151,6 @@
     <string name="pick_new_photo" msgid="9122450996263688237">"Select new photo"</string>
     <string name="locale_change_in_progress" msgid="7583992153091537467">"Contact list is being updated to reflect the change of language."</string>
     <string name="upgrade_in_progress" msgid="474511436863451061">"Contact list is being updated."</string>
-    <string name="upgrade_out_of_memory" msgid="1209994418877625940">"Contacts are in the process of being upgraded. \n\nThe upgrade process requires approximately <xliff:g id="SIZE_IN_MEGABYTES">%s</xliff:g> MB of internal storage.\n\nChoose one of the following options:"</string>
-    <string name="upgrade_out_of_memory_uninstall" msgid="1721798828992091432">"Uninstall some applications"</string>
-    <string name="upgrade_out_of_memory_retry" msgid="8431289830472724609">"Retry upgrade"</string>
     <string name="search_results_searching" msgid="3984833028938569930">"Searching…"</string>
     <string name="menu_display_selected" msgid="6470001164297969034">"Show selected"</string>
     <string name="menu_display_all" msgid="8887488642609786198">"Show all"</string>
@@ -160,10 +164,10 @@
     <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>
-  <plurals name="merge_info">
-    <item quantity="one" msgid="148365587896371969">"not merged"</item>
-    <item quantity="other" msgid="425683718017380845">"merged from <xliff:g id="COUNT">%0$d</xliff:g> sources"</item>
-  </plurals>
+    <plurals name="merge_info" formatted="false" msgid="2489323424994280962">
+      <item quantity="other">merged from <xliff:g id="COUNT">%0$d</xliff:g> sources</item>
+      <item quantity="one">not merged</item>
+    </plurals>
     <string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"Join the current contact with the selected contact?"</string>
     <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Switch to editing the selected contact? Information that you\'ve entered so far will be copied."</string>
     <string name="menu_copyContact" msgid="1573960845106822639">"Copy to My Contacts"</string>
@@ -172,7 +176,7 @@
     <string name="list_filter_custom" msgid="8910173055702057002">"Customised"</string>
     <string name="activity_title_settings" msgid="5464130076132770781">"Settings"</string>
     <string name="menu_settings" msgid="377929915873428211">"Settings"</string>
-    <string name="menu_help" msgid="5123887102216637725">"Help"</string>
+    <string name="menu_help" msgid="1680178646764069976">"Help &amp; feedback"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"Display options"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="non_phone_caption" msgid="1541655052330027380">"Phone number"</string>
@@ -188,19 +192,19 @@
     <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Import contacts"</string>
     <string name="create_group_dialog_title" msgid="6874527142828424475">"Create new group"</string>
     <string name="create_group_item_label" msgid="4411981763169654825">"Create new group"</string>
-  <plurals name="num_groups_in_account">
-    <item quantity="one" msgid="2944819210288517794">"1 group"</item>
-    <item quantity="other" msgid="1276758425904917367">"<xliff:g id="COUNT">%0$d</xliff:g> groups"</item>
-  </plurals>
+    <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
+      <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> groups</item>
+      <item quantity="one">1 group</item>
+    </plurals>
     <string name="delete_group_dialog_message" msgid="7586856514337560529">"Delete the group \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\"? (Contacts themselves will not be deleted.)"</string>
-  <plurals name="num_contacts_in_group">
-    <item quantity="one" msgid="1352418549951013448">"<xliff:g id="COUNT_0">%1$d</xliff:g> person from <xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>"</item>
-    <item quantity="other" msgid="8146027769011086349">"<xliff:g id="COUNT_0">%1$d</xliff:g> people from <xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>"</item>
-  </plurals>
-  <plurals name="group_list_num_contacts_in_group">
-    <item quantity="one" msgid="3323065321661972446">"<xliff:g id="COUNT">%1$d</xliff:g> person"</item>
-    <item quantity="other" msgid="6251996206137048525">"<xliff:g id="COUNT">%1$d</xliff:g> people"</item>
-  </plurals>
+    <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> people from <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> person from <xliff:g id="ACCOUNT_TYPE_1">%2$s</xliff:g></item>
+    </plurals>
+    <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
+      <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> people</item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> person</item>
+    </plurals>
     <string name="toast_join_with_empty_contact" msgid="2238581529864542985">"Type contact name before joining with another."</string>
     <string name="copy_text" msgid="3257145021583508761">"Copy to clipboard"</string>
     <string name="set_default" msgid="4417505153468300351">"Set default"</string>
@@ -264,4 +268,5 @@
     <string name="content_description_recent_call" msgid="5183800406316723676">"recent call. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. click to call back"</string>
     <string name="message_from_you_prefix" msgid="7180706529908434482">"You: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
     <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"Hangouts works better when you enter the person\'s Hangouts identifier into the email field or phone field."</string>
+    <string name="compact_editor_more_fields" msgid="2874181192382284115">"More Fields"</string>
 </resources>
diff --git a/res/values-en-rIN/strings.xml b/res/values-en-rIN/strings.xml
index e3d6f7c..b9176db 100644
--- a/res/values-en-rIN/strings.xml
+++ b/res/values-en-rIN/strings.xml
@@ -46,6 +46,7 @@
     <string name="description_action_menu_add_star" msgid="3327186327234177456">"Added to favourites"</string>
     <string name="menu_editContact" msgid="9042415603857662633">"Edit"</string>
     <string name="menu_deleteContact" msgid="6788644058868189393">"Delete"</string>
+    <string name="menu_change_photo" msgid="7769177631511496210">"Change photo"</string>
     <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Place on Home screen"</string>
     <string name="menu_call" msgid="3992595586042260618">"Call contact"</string>
     <string name="menu_sendSMS" msgid="5535886767547006515">"Text contact"</string>
@@ -56,17 +57,23 @@
     <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Add Group"</string>
     <string name="splitConfirmation_title" msgid="633640935430370530">"Separate contact?"</string>
     <string name="splitConfirmation" msgid="740190210499587175">"This contact will be separated into multiple contacts."</string>
-    <string name="menu_joinAggregate" msgid="5027981918265667970">"Join"</string>
+    <string name="menu_joinAggregate" msgid="4050157483569357666">"Merge"</string>
     <string name="titleJoinContactDataWith" msgid="7684875775798635354">"Join contacts"</string>
     <string name="blurbJoinContactDataWith" msgid="8736488417422708236">"Choose the contact that you want to join with <xliff:g id="NAME">%s</xliff:g>:"</string>
     <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Show all  contacts"</string>
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Suggested Contacts"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"All contacts"</string>
-    <string name="contactsJoinedMessage" msgid="7208148163607047389">"Contacts joined"</string>
+    <string name="contactsJoinedMessage" msgid="656936718666768589">"Contacts merged"</string>
+    <string name="contacts_deleted_toast" msgid="286851430992788215">"Contacts deleted"</string>
     <string name="menu_set_ring_tone" msgid="8728345772068064946">"Set ringtone"</string>
     <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"All calls to voicemail"</string>
     <string name="readOnlyContactWarning" msgid="7808825687289848259">"You can\'t delete contacts from read-only accounts, but you can hide them in your contacts lists."</string>
     <string name="readOnlyContactDeleteConfirmation" msgid="2137170726670196909">"This contact contains information from multiple accounts. Information from read-only accounts will be hidden in your contacts lists, not deleted."</string>
+    <string name="batch_merge_single_contact_warning" msgid="982585201970392110">"You need at least two contacts selected to perform a merge."</string>
+    <string name="batch_merge_confirmation" msgid="8551299480317422420">"The selected contacts will be merged into a single contact."</string>
+    <string name="batch_delete_confirmation" msgid="2564172328268885394">"The selected contacts will be deleted."</string>
+    <string name="batch_delete_read_only_contact_confirmation" msgid="6614878716815412523">"Information from read-only accounts will be hidden in your contacts lists, not deleted."</string>
+    <string name="batch_delete_multiple_accounts_confirmation" msgid="5189722181586680185">"These contacts contain information from multiple accounts. Information from read-only accounts will be hidden in your contacts lists, not deleted."</string>
     <string name="multipleContactDeleteConfirmation" msgid="938900978442960800">"Deleting this contact will delete information from multiple accounts."</string>
     <string name="deleteConfirmation" msgid="811706994761610640">"This contact will be deleted."</string>
     <string name="menu_discard" msgid="6854657936970228164">"Discard changes"</string>
@@ -94,20 +101,20 @@
     <string name="contactSavedErrorToast" msgid="3207250533172944892">"Couldn\'t save contact changes."</string>
     <string name="groupSavedToast" msgid="1168756874239833756">"Group saved."</string>
     <string name="groupSavedErrorToast" msgid="7984466936615304740">"Couldn\'t save group changes."</string>
-  <plurals name="listTotalPhoneContacts">
-    <item quantity="one" msgid="3015357862286673986">"1 contact with phone number"</item>
-    <item quantity="other" msgid="3299954047880968205">"<xliff:g id="COUNT">%d</xliff:g> contacts with phone numbers"</item>
-  </plurals>
+    <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> contacts with phone numbers</item>
+      <item quantity="one">1 contact with phone number</item>
+    </plurals>
     <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"No contacts with phone numbers"</string>
-  <plurals name="listFoundAllContacts">
-    <item quantity="one" msgid="5517063038754171134">"1 found"</item>
-    <item quantity="other" msgid="3852668542926965042">"<xliff:g id="COUNT">%d</xliff:g> found"</item>
-  </plurals>
+    <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> found</item>
+      <item quantity="one">1 found</item>
+    </plurals>
     <string name="listFoundAllContactsZero" msgid="922980883593159444">"No contacts"</string>
-  <plurals name="searchFoundContacts">
-    <item quantity="one" msgid="4826918429708286628">"1 found"</item>
-    <item quantity="other" msgid="7988132539476575389">"<xliff:g id="COUNT">%d</xliff:g> found"</item>
-  </plurals>
+    <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> found</item>
+      <item quantity="one">1 found</item>
+    </plurals>
     <string name="all_contacts_tab_label" msgid="6250372293594147703">"All contacts"</string>
     <string name="favorites_tab_label" msgid="1524869648904016414">"Favourites"</string>
     <string name="callBack" msgid="5498224409038809224">"Call back"</string>
@@ -144,9 +151,6 @@
     <string name="pick_new_photo" msgid="9122450996263688237">"Select new photo"</string>
     <string name="locale_change_in_progress" msgid="7583992153091537467">"Contact list is being updated to reflect the change of language."</string>
     <string name="upgrade_in_progress" msgid="474511436863451061">"Contact list is being updated."</string>
-    <string name="upgrade_out_of_memory" msgid="1209994418877625940">"Contacts are in the process of being upgraded. \n\nThe upgrade process requires approximately <xliff:g id="SIZE_IN_MEGABYTES">%s</xliff:g> MB of internal storage.\n\nChoose one of the following options:"</string>
-    <string name="upgrade_out_of_memory_uninstall" msgid="1721798828992091432">"Uninstall some applications"</string>
-    <string name="upgrade_out_of_memory_retry" msgid="8431289830472724609">"Retry upgrade"</string>
     <string name="search_results_searching" msgid="3984833028938569930">"Searching…"</string>
     <string name="menu_display_selected" msgid="6470001164297969034">"Show selected"</string>
     <string name="menu_display_all" msgid="8887488642609786198">"Show all"</string>
@@ -160,10 +164,10 @@
     <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>
-  <plurals name="merge_info">
-    <item quantity="one" msgid="148365587896371969">"not merged"</item>
-    <item quantity="other" msgid="425683718017380845">"merged from <xliff:g id="COUNT">%0$d</xliff:g> sources"</item>
-  </plurals>
+    <plurals name="merge_info" formatted="false" msgid="2489323424994280962">
+      <item quantity="other">merged from <xliff:g id="COUNT">%0$d</xliff:g> sources</item>
+      <item quantity="one">not merged</item>
+    </plurals>
     <string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"Join the current contact with the selected contact?"</string>
     <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Switch to editing the selected contact? Information that you\'ve entered so far will be copied."</string>
     <string name="menu_copyContact" msgid="1573960845106822639">"Copy to My Contacts"</string>
@@ -172,7 +176,7 @@
     <string name="list_filter_custom" msgid="8910173055702057002">"Customised"</string>
     <string name="activity_title_settings" msgid="5464130076132770781">"Settings"</string>
     <string name="menu_settings" msgid="377929915873428211">"Settings"</string>
-    <string name="menu_help" msgid="5123887102216637725">"Help"</string>
+    <string name="menu_help" msgid="1680178646764069976">"Help &amp; feedback"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"Display options"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="non_phone_caption" msgid="1541655052330027380">"Phone number"</string>
@@ -188,19 +192,19 @@
     <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Import contacts"</string>
     <string name="create_group_dialog_title" msgid="6874527142828424475">"Create new group"</string>
     <string name="create_group_item_label" msgid="4411981763169654825">"Create new group"</string>
-  <plurals name="num_groups_in_account">
-    <item quantity="one" msgid="2944819210288517794">"1 group"</item>
-    <item quantity="other" msgid="1276758425904917367">"<xliff:g id="COUNT">%0$d</xliff:g> groups"</item>
-  </plurals>
+    <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
+      <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> groups</item>
+      <item quantity="one">1 group</item>
+    </plurals>
     <string name="delete_group_dialog_message" msgid="7586856514337560529">"Delete the group \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\"? (Contacts themselves will not be deleted.)"</string>
-  <plurals name="num_contacts_in_group">
-    <item quantity="one" msgid="1352418549951013448">"<xliff:g id="COUNT_0">%1$d</xliff:g> person from <xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>"</item>
-    <item quantity="other" msgid="8146027769011086349">"<xliff:g id="COUNT_0">%1$d</xliff:g> people from <xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>"</item>
-  </plurals>
-  <plurals name="group_list_num_contacts_in_group">
-    <item quantity="one" msgid="3323065321661972446">"<xliff:g id="COUNT">%1$d</xliff:g> person"</item>
-    <item quantity="other" msgid="6251996206137048525">"<xliff:g id="COUNT">%1$d</xliff:g> people"</item>
-  </plurals>
+    <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> people from <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> person from <xliff:g id="ACCOUNT_TYPE_1">%2$s</xliff:g></item>
+    </plurals>
+    <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
+      <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> people</item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> person</item>
+    </plurals>
     <string name="toast_join_with_empty_contact" msgid="2238581529864542985">"Type contact name before joining with another."</string>
     <string name="copy_text" msgid="3257145021583508761">"Copy to clipboard"</string>
     <string name="set_default" msgid="4417505153468300351">"Set default"</string>
@@ -264,4 +268,5 @@
     <string name="content_description_recent_call" msgid="5183800406316723676">"recent call. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. click to call back"</string>
     <string name="message_from_you_prefix" msgid="7180706529908434482">"You: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
     <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"Hangouts works better when you enter the person\'s Hangouts identifier into the email field or phone field."</string>
+    <string name="compact_editor_more_fields" msgid="2874181192382284115">"More Fields"</string>
 </resources>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index 9d40dd1..a1e2ba1 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -46,6 +46,7 @@
     <string name="description_action_menu_add_star" msgid="3327186327234177456">"Agregado a favoritos"</string>
     <string name="menu_editContact" msgid="9042415603857662633">"Editar"</string>
     <string name="menu_deleteContact" msgid="6788644058868189393">"Eliminar"</string>
+    <string name="menu_change_photo" msgid="7769177631511496210">"Cambiar foto"</string>
     <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Colocar en pantalla principal"</string>
     <string name="menu_call" msgid="3992595586042260618">"Llamar al contacto"</string>
     <string name="menu_sendSMS" msgid="5535886767547006515">"Enviar texto al contacto"</string>
@@ -56,17 +57,23 @@
     <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Agregar grupo"</string>
     <string name="splitConfirmation_title" msgid="633640935430370530">"¿Dividir contacto?"</string>
     <string name="splitConfirmation" msgid="740190210499587175">"Este contacto se dividirá en múltiples contactos."</string>
-    <string name="menu_joinAggregate" msgid="5027981918265667970">"Agrupar"</string>
+    <string name="menu_joinAggregate" msgid="4050157483569357666">"Combinar"</string>
     <string name="titleJoinContactDataWith" msgid="7684875775798635354">"Agrupar contactos"</string>
     <string name="blurbJoinContactDataWith" msgid="8736488417422708236">"Selecciona el contacto que deseas agrupar con <xliff:g id="NAME">%s</xliff:g>:"</string>
     <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Mostrar todos los contactos"</string>
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Contactos sugeridos"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Todos los contactos"</string>
-    <string name="contactsJoinedMessage" msgid="7208148163607047389">"Unión de contactos"</string>
+    <string name="contactsJoinedMessage" msgid="656936718666768589">"Contactos fusionados"</string>
+    <string name="contacts_deleted_toast" msgid="286851430992788215">"Contactos eliminados"</string>
     <string name="menu_set_ring_tone" msgid="8728345772068064946">"Establecer tono"</string>
     <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Llamadas al buzón de voz"</string>
     <string name="readOnlyContactWarning" msgid="7808825687289848259">"No puedes eliminar contactos de cuentas de solo lectura, pero puedes ocultarlos en tus listas de contactos."</string>
     <string name="readOnlyContactDeleteConfirmation" msgid="2137170726670196909">"Este contacto contiene información de varias cuentas. La información de las cuentas de solo lectura se ocultará en tus listas de contactos, pero no se eliminará."</string>
+    <string name="batch_merge_single_contact_warning" msgid="982585201970392110">"Debes seleccionar al menos dos contactos para efectuar una combinación."</string>
+    <string name="batch_merge_confirmation" msgid="8551299480317422420">"Los contactos seleccionados se combinarán en un solo contacto."</string>
+    <string name="batch_delete_confirmation" msgid="2564172328268885394">"Se eliminarán los contactos seleccionados."</string>
+    <string name="batch_delete_read_only_contact_confirmation" msgid="6614878716815412523">"La información de las cuentas de solo lectura no se eliminará, sino que se ocultará en las listas de contactos."</string>
+    <string name="batch_delete_multiple_accounts_confirmation" msgid="5189722181586680185">"Estos contactos contienen información de varias cuentas. La información de las cuentas de solo lectura no se eliminará, sino que se ocultará en las listas de contactos."</string>
     <string name="multipleContactDeleteConfirmation" msgid="938900978442960800">"Eliminar este contacto suprimirá la información de mútliples cuentas."</string>
     <string name="deleteConfirmation" msgid="811706994761610640">"Este contacto se eliminará."</string>
     <string name="menu_discard" msgid="6854657936970228164">"Descartar cambios"</string>
@@ -94,20 +101,20 @@
     <string name="contactSavedErrorToast" msgid="3207250533172944892">"No se pudieron guardar los cambios realizados al contacto."</string>
     <string name="groupSavedToast" msgid="1168756874239833756">"Grupo guardado."</string>
     <string name="groupSavedErrorToast" msgid="7984466936615304740">"No se pudieron guardar los cambios realizados al grupo."</string>
-  <plurals name="listTotalPhoneContacts">
-    <item quantity="one" msgid="3015357862286673986">"1 contacto con el número de teléfono"</item>
-    <item quantity="other" msgid="3299954047880968205">"<xliff:g id="COUNT">%d</xliff:g> contactos con números de teléfono"</item>
-  </plurals>
+    <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>
+      <item quantity="one">1 contacto con número de teléfono</item>
+    </plurals>
     <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"No hay contactos con números de dispositivo"</string>
-  <plurals name="listFoundAllContacts">
-    <item quantity="one" msgid="5517063038754171134">"Se encontró uno (1)"</item>
-    <item quantity="other" msgid="3852668542926965042">"<xliff:g id="COUNT">%d</xliff:g> encontrado(s)"</item>
-  </plurals>
+    <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
+      <item quantity="other">Se encontraron <xliff:g id="COUNT">%d</xliff:g>.</item>
+      <item quantity="one">Se encontró 1.</item>
+    </plurals>
     <string name="listFoundAllContactsZero" msgid="922980883593159444">"No hay contactos"</string>
-  <plurals name="searchFoundContacts">
-    <item quantity="one" msgid="4826918429708286628">"Se encontró uno (1)"</item>
-    <item quantity="other" msgid="7988132539476575389">"<xliff:g id="COUNT">%d</xliff:g> encontrado(s)"</item>
-  </plurals>
+    <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
+      <item quantity="other">Se encontraron <xliff:g id="COUNT">%d</xliff:g>.</item>
+      <item quantity="one">Se encontró 1.</item>
+    </plurals>
     <string name="all_contacts_tab_label" msgid="6250372293594147703">"Todos los contactos"</string>
     <string name="favorites_tab_label" msgid="1524869648904016414">"Favoritos"</string>
     <string name="callBack" msgid="5498224409038809224">"Volver a llamar"</string>
@@ -144,9 +151,6 @@
     <string name="pick_new_photo" msgid="9122450996263688237">"Seleccionar una foto nueva"</string>
     <string name="locale_change_in_progress" msgid="7583992153091537467">"La lista de contactos se está actualizando para reflejar el cambio de idioma."</string>
     <string name="upgrade_in_progress" msgid="474511436863451061">"La lista de contactos se está actualizando."</string>
-    <string name="upgrade_out_of_memory" msgid="1209994418877625940">"La actualización de los contactos está en proceso. \n\nEl proceso de actualización requiere aproximadamente <xliff:g id="SIZE_IN_MEGABYTES">%s</xliff:g> MB de almacenamiento interno en el dispositivo.\n\nElige una de las siguientes opciones:"</string>
-    <string name="upgrade_out_of_memory_uninstall" msgid="1721798828992091432">"Desinstalar algunas aplicaciones"</string>
-    <string name="upgrade_out_of_memory_retry" msgid="8431289830472724609">"Intentar actualizar nuevamente"</string>
     <string name="search_results_searching" msgid="3984833028938569930">"Buscando..."</string>
     <string name="menu_display_selected" msgid="6470001164297969034">"Mostrar los seleccionados"</string>
     <string name="menu_display_all" msgid="8887488642609786198">"Mostrar todos"</string>
@@ -160,10 +164,10 @@
     <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>
-  <plurals name="merge_info">
-    <item quantity="one" msgid="148365587896371969">"no se combinó"</item>
-    <item quantity="other" msgid="425683718017380845">"combinado a partir de fuentes <xliff:g id="COUNT">%0$d</xliff:g>"</item>
-  </plurals>
+    <plurals name="merge_info" formatted="false" msgid="2489323424994280962">
+      <item quantity="other">combinados desde <xliff:g id="COUNT">%0$d</xliff:g> fuentes</item>
+      <item quantity="one">no combinado</item>
+    </plurals>
     <string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"¿Deseas agrupar el contacto actual con el contacto seleccionado?"</string>
     <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"¿Optar por modificar contacto seleccionado? Se copiará la información que ingresaste hasta ahora."</string>
     <string name="menu_copyContact" msgid="1573960845106822639">"Copiar en Mis contactos"</string>
@@ -172,7 +176,7 @@
     <string name="list_filter_custom" msgid="8910173055702057002">"Personalizado"</string>
     <string name="activity_title_settings" msgid="5464130076132770781">"Configuración"</string>
     <string name="menu_settings" msgid="377929915873428211">"Configuración"</string>
-    <string name="menu_help" msgid="5123887102216637725">"Ayuda"</string>
+    <string name="menu_help" msgid="1680178646764069976">"Ayuda y comentarios"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"Opciones de visualización"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="non_phone_caption" msgid="1541655052330027380">"Núm. de tel."</string>
@@ -188,19 +192,19 @@
     <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Importar contactos"</string>
     <string name="create_group_dialog_title" msgid="6874527142828424475">"Crear grupo nuevo"</string>
     <string name="create_group_item_label" msgid="4411981763169654825">"Crear grupo nuevo"</string>
-  <plurals name="num_groups_in_account">
-    <item quantity="one" msgid="2944819210288517794">"1 grupo"</item>
-    <item quantity="other" msgid="1276758425904917367">"<xliff:g id="COUNT">%0$d</xliff:g> grupos"</item>
-  </plurals>
+    <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
+      <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> grupos</item>
+      <item quantity="one">1 grupo</item>
+    </plurals>
     <string name="delete_group_dialog_message" msgid="7586856514337560529">"¿Deseas eliminar el grupo \" <xliff:g id="GROUP_LABEL">%1$s</xliff:g> \"? (No se eliminarán los contactos)."</string>
-  <plurals name="num_contacts_in_group">
-    <item quantity="one" msgid="1352418549951013448">"<xliff:g id="COUNT_0">%1$d</xliff:g> personas de <xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>"</item>
-    <item quantity="other" msgid="8146027769011086349">"<xliff:g id="COUNT_0">%1$d</xliff:g> personas de <xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>"</item>
-  </plurals>
-  <plurals name="group_list_num_contacts_in_group">
-    <item quantity="one" msgid="3323065321661972446">"<xliff:g id="COUNT">%1$d</xliff:g> persona"</item>
-    <item quantity="other" msgid="6251996206137048525">"<xliff:g id="COUNT">%1$d</xliff:g> personas"</item>
-  </plurals>
+    <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> personas de <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> persona de <xliff:g id="ACCOUNT_TYPE_1">%2$s</xliff:g></item>
+    </plurals>
+    <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
+      <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> personas</item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> persona</item>
+    </plurals>
     <string name="toast_join_with_empty_contact" msgid="2238581529864542985">"Escribe el nombre del contacto antes de agruparlo con otro."</string>
     <string name="copy_text" msgid="3257145021583508761">"Copiar en el portapapeles"</string>
     <string name="set_default" msgid="4417505153468300351">"Establecer como predeterminado"</string>
@@ -264,4 +268,5 @@
     <string name="content_description_recent_call" msgid="5183800406316723676">"Llamada reciente. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. Haz clic para devolver la llamada."</string>
     <string name="message_from_you_prefix" msgid="7180706529908434482">"Tú: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
     <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"Hangouts funciona mejor si ingresas el identificador de Hangouts de la persona en el campo de correo electrónico o teléfono."</string>
+    <string name="compact_editor_more_fields" msgid="2874181192382284115">"Más campos"</string>
 </resources>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index 137f6b0..61b6548 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -46,6 +46,7 @@
     <string name="description_action_menu_add_star" msgid="3327186327234177456">"Añadido a favoritos"</string>
     <string name="menu_editContact" msgid="9042415603857662633">"Editar"</string>
     <string name="menu_deleteContact" msgid="6788644058868189393">"Eliminar"</string>
+    <string name="menu_change_photo" msgid="7769177631511496210">"Cambiar foto"</string>
     <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Añadir a la pantalla de inicio"</string>
     <string name="menu_call" msgid="3992595586042260618">"Llamar al contacto"</string>
     <string name="menu_sendSMS" msgid="5535886767547006515">"Enviar SMS al contacto"</string>
@@ -56,17 +57,23 @@
     <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Añadir grupo"</string>
     <string name="splitConfirmation_title" msgid="633640935430370530">"¿Dividir contacto?"</string>
     <string name="splitConfirmation" msgid="740190210499587175">"Este contacto se dividirá en varios contactos."</string>
-    <string name="menu_joinAggregate" msgid="5027981918265667970">"Agrupar"</string>
+    <string name="menu_joinAggregate" msgid="4050157483569357666">"Combinar"</string>
     <string name="titleJoinContactDataWith" msgid="7684875775798635354">"Agrupar contactos"</string>
     <string name="blurbJoinContactDataWith" msgid="8736488417422708236">"Selecciona el nombre del contacto que quieras agrupar con <xliff:g id="NAME">%s</xliff:g>:"</string>
     <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Mostrar todos los contactos"</string>
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Contactos sugeridos"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Todos los contactos"</string>
-    <string name="contactsJoinedMessage" msgid="7208148163607047389">"Contactos agrupados"</string>
+    <string name="contactsJoinedMessage" msgid="656936718666768589">"Contactos combinados"</string>
+    <string name="contacts_deleted_toast" msgid="286851430992788215">"Contactos eliminados"</string>
     <string name="menu_set_ring_tone" msgid="8728345772068064946">"Establecer tono"</string>
     <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Al buzón de voz"</string>
     <string name="readOnlyContactWarning" msgid="7808825687289848259">"No puedes eliminar los contactos procedentes de las cuentas de solo lectura, pero puedes ocultarlos en las listas de contactos."</string>
     <string name="readOnlyContactDeleteConfirmation" msgid="2137170726670196909">"Este contacto contiene información de varias cuentas. La información de las cuentas de solo lectura se ocultará en las listas de contactos, pero no se eliminará."</string>
+    <string name="batch_merge_single_contact_warning" msgid="982585201970392110">"Debes seleccionar al menos dos contactos para combinarlos."</string>
+    <string name="batch_merge_confirmation" msgid="8551299480317422420">"Los contactos seleccionados se combinarán en un único contacto."</string>
+    <string name="batch_delete_confirmation" msgid="2564172328268885394">"Se eliminarán los contactos seleccionados."</string>
+    <string name="batch_delete_read_only_contact_confirmation" msgid="6614878716815412523">"La información de las cuentas de solo lectura no se eliminará de las listas de contactos, sino que se ocultará."</string>
+    <string name="batch_delete_multiple_accounts_confirmation" msgid="5189722181586680185">"Estos contactos contienen información de varias cuentas. La información de las cuentas de solo lectura no se eliminará de las listas de contactos, sino que se ocultará."</string>
     <string name="multipleContactDeleteConfirmation" msgid="938900978442960800">"Si se elimina este contacto, se eliminará la información de varias cuentas."</string>
     <string name="deleteConfirmation" msgid="811706994761610640">"El contacto se eliminará."</string>
     <string name="menu_discard" msgid="6854657936970228164">"Descartar cambios"</string>
@@ -94,20 +101,20 @@
     <string name="contactSavedErrorToast" msgid="3207250533172944892">"No se han guardado los cambios del contacto."</string>
     <string name="groupSavedToast" msgid="1168756874239833756">"Grupo guardado"</string>
     <string name="groupSavedErrorToast" msgid="7984466936615304740">"No se han guardado los cambios del grupo."</string>
-  <plurals name="listTotalPhoneContacts">
-    <item quantity="one" msgid="3015357862286673986">"Un (1) contacto con número de teléfono"</item>
-    <item quantity="other" msgid="3299954047880968205">"<xliff:g id="COUNT">%d</xliff:g> contactos con números de teléfono"</item>
-  </plurals>
+    <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>
+      <item quantity="one">1 contacto con número de teléfono</item>
+    </plurals>
     <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"Ningún contacto con número de teléfono"</string>
-  <plurals name="listFoundAllContacts">
-    <item quantity="one" msgid="5517063038754171134">"1 encontrado"</item>
-    <item quantity="other" msgid="3852668542926965042">"<xliff:g id="COUNT">%d</xliff:g> encontrados"</item>
-  </plurals>
+    <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> contactos encontrados</item>
+      <item quantity="one">1 contacto encontrado</item>
+    </plurals>
     <string name="listFoundAllContactsZero" msgid="922980883593159444">"No hay contactos."</string>
-  <plurals name="searchFoundContacts">
-    <item quantity="one" msgid="4826918429708286628">"1 encontrado"</item>
-    <item quantity="other" msgid="7988132539476575389">"<xliff:g id="COUNT">%d</xliff:g> encontrados"</item>
-  </plurals>
+    <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> contactos encontrados</item>
+      <item quantity="one">1 contacto encontrado</item>
+    </plurals>
     <string name="all_contacts_tab_label" msgid="6250372293594147703">"Todos los contactos"</string>
     <string name="favorites_tab_label" msgid="1524869648904016414">"Favoritos"</string>
     <string name="callBack" msgid="5498224409038809224">"Llamar"</string>
@@ -144,9 +151,6 @@
     <string name="pick_new_photo" msgid="9122450996263688237">"Seleccionar nueva foto"</string>
     <string name="locale_change_in_progress" msgid="7583992153091537467">"La lista de contactos se está actualizando para reflejar el cambio de idioma."</string>
     <string name="upgrade_in_progress" msgid="474511436863451061">"La lista de contactos se está actualizando."</string>
-    <string name="upgrade_out_of_memory" msgid="1209994418877625940">"Los contactos se están actualizando. \n\nSe necesitan aproximadamente <xliff:g id="SIZE_IN_MEGABYTES">%s</xliff:g> MB de almacenamiento interno para el proceso de actualización.\n\nSelecciona una de las siguientes opciones:"</string>
-    <string name="upgrade_out_of_memory_uninstall" msgid="1721798828992091432">"Desinstalar algunas aplicaciones"</string>
-    <string name="upgrade_out_of_memory_retry" msgid="8431289830472724609">"Reintentar actualización"</string>
     <string name="search_results_searching" msgid="3984833028938569930">"Buscando..."</string>
     <string name="menu_display_selected" msgid="6470001164297969034">"Mostrar seleccionados"</string>
     <string name="menu_display_all" msgid="8887488642609786198">"Mostrar todos"</string>
@@ -160,10 +164,10 @@
     <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>
-  <plurals name="merge_info">
-    <item quantity="one" msgid="148365587896371969">"sin fusionar"</item>
-    <item quantity="other" msgid="425683718017380845">"fusionados desde <xliff:g id="COUNT">%0$d</xliff:g> fuentes"</item>
-  </plurals>
+    <plurals name="merge_info" formatted="false" msgid="2489323424994280962">
+      <item quantity="other">fusionados de <xliff:g id="COUNT">%0$d</xliff:g> fuentes</item>
+      <item quantity="one">sin fusionar</item>
+    </plurals>
     <string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"¿Quieres agrupar el contacto actual con el contacto seleccionado?"</string>
     <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"¿Quieres editar el contacto seleccionado? Se copiará la información que hayas introducido hasta el momento."</string>
     <string name="menu_copyContact" msgid="1573960845106822639">"Copiar en mis contactos"</string>
@@ -172,7 +176,7 @@
     <string name="list_filter_custom" msgid="8910173055702057002">"Personalizar"</string>
     <string name="activity_title_settings" msgid="5464130076132770781">"Ajustes"</string>
     <string name="menu_settings" msgid="377929915873428211">"Ajustes"</string>
-    <string name="menu_help" msgid="5123887102216637725">"Ayuda"</string>
+    <string name="menu_help" msgid="1680178646764069976">"Ayuda y sugerencias"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"Opciones de visualización"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="non_phone_caption" msgid="1541655052330027380">"Número de teléfono"</string>
@@ -188,19 +192,19 @@
     <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Importar contactos"</string>
     <string name="create_group_dialog_title" msgid="6874527142828424475">"Crear grupo nuevo"</string>
     <string name="create_group_item_label" msgid="4411981763169654825">"Crear grupo nuevo"</string>
-  <plurals name="num_groups_in_account">
-    <item quantity="one" msgid="2944819210288517794">"Un grupo"</item>
-    <item quantity="other" msgid="1276758425904917367">"<xliff:g id="COUNT">%0$d</xliff:g> grupos"</item>
-  </plurals>
+    <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
+      <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> grupos</item>
+      <item quantity="one">1 grupo</item>
+    </plurals>
     <string name="delete_group_dialog_message" msgid="7586856514337560529">"¿Seguro que quieres eliminar el grupo \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\"? Los contactos no se eliminarán."</string>
-  <plurals name="num_contacts_in_group">
-    <item quantity="one" msgid="1352418549951013448">"<xliff:g id="COUNT_0">%1$d</xliff:g> persona de <xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>"</item>
-    <item quantity="other" msgid="8146027769011086349">"<xliff:g id="COUNT_0">%1$d</xliff:g> personas de <xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>"</item>
-  </plurals>
-  <plurals name="group_list_num_contacts_in_group">
-    <item quantity="one" msgid="3323065321661972446">"<xliff:g id="COUNT">%1$d</xliff:g> persona"</item>
-    <item quantity="other" msgid="6251996206137048525">"<xliff:g id="COUNT">%1$d</xliff:g> personas"</item>
-  </plurals>
+    <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> personas de <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> persona de <xliff:g id="ACCOUNT_TYPE_1">%2$s</xliff:g></item>
+    </plurals>
+    <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
+      <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> personas</item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> persona</item>
+    </plurals>
     <string name="toast_join_with_empty_contact" msgid="2238581529864542985">"Para agrupar el contacto, debes introducir el nombre del otro contacto."</string>
     <string name="copy_text" msgid="3257145021583508761">"Copiar en el portapapeles"</string>
     <string name="set_default" msgid="4417505153468300351">"Establecer como predeterminado"</string>
@@ -264,4 +268,5 @@
     <string name="content_description_recent_call" msgid="5183800406316723676">"llamada reciente. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. haz clic para devolver la llamada"</string>
     <string name="message_from_you_prefix" msgid="7180706529908434482">"Tú: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
     <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"Hangouts funciona mejor si se introduce el identificador de Hangouts de la persona en el campo del correo electrónico o en el campo del teléfono."</string>
+    <string name="compact_editor_more_fields" msgid="2874181192382284115">"Más campos"</string>
 </resources>
diff --git a/res/values-et-rEE/strings.xml b/res/values-et-rEE/strings.xml
index ebb813a..ca138cb 100644
--- a/res/values-et-rEE/strings.xml
+++ b/res/values-et-rEE/strings.xml
@@ -46,6 +46,7 @@
     <string name="description_action_menu_add_star" msgid="3327186327234177456">"Lemmikutesse lisatud"</string>
     <string name="menu_editContact" msgid="9042415603857662633">"Muuda"</string>
     <string name="menu_deleteContact" msgid="6788644058868189393">"Kustuta"</string>
+    <string name="menu_change_photo" msgid="7769177631511496210">"Foto vahetamine"</string>
     <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Paiguta avalehele"</string>
     <string name="menu_call" msgid="3992595586042260618">"Helista kontaktile"</string>
     <string name="menu_sendSMS" msgid="5535886767547006515">"Saada kontaktile SMS"</string>
@@ -56,17 +57,23 @@
     <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Rühma lisamine"</string>
     <string name="splitConfirmation_title" msgid="633640935430370530">"Eraldada kontakt?"</string>
     <string name="splitConfirmation" msgid="740190210499587175">"See kontakt eraldatakse mitmeks kontaktiks."</string>
-    <string name="menu_joinAggregate" msgid="5027981918265667970">"Liitumine"</string>
+    <string name="menu_joinAggregate" msgid="4050157483569357666">"Ühenda"</string>
     <string name="titleJoinContactDataWith" msgid="7684875775798635354">"Ühenda kontaktid"</string>
     <string name="blurbJoinContactDataWith" msgid="8736488417422708236">"Valige kontakt, keda soovite kasutajaga <xliff:g id="NAME">%s</xliff:g> liita."</string>
     <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Kuva kõik kontaktid"</string>
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Soovitatud kontaktid"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Kõik kontaktid"</string>
-    <string name="contactsJoinedMessage" msgid="7208148163607047389">"Kontaktid ühendatud"</string>
+    <string name="contactsJoinedMessage" msgid="656936718666768589">"Kontaktid liideti"</string>
+    <string name="contacts_deleted_toast" msgid="286851430992788215">"Kontaktid kustutati"</string>
     <string name="menu_set_ring_tone" msgid="8728345772068064946">"Määrake helin"</string>
     <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Kõik kõned kõneposti"</string>
     <string name="readOnlyContactWarning" msgid="7808825687289848259">"Te ei saa kontakte kirjutuskaitstud kontodest kustutada, kuid saate need oma kontaktide loendis peita."</string>
     <string name="readOnlyContactDeleteConfirmation" msgid="2137170726670196909">"See kontakt sisaldab teavet mitmelt kontolt. Kirjutuskaitstud teabega kontod peidetakse teie kontaktiloendites, mitte ei kustutata."</string>
+    <string name="batch_merge_single_contact_warning" msgid="982585201970392110">"Ühendamiseks peate valima vähemalt kaks kontakti."</string>
+    <string name="batch_merge_confirmation" msgid="8551299480317422420">"Valitud kontaktid ühendatakse üheks kontaktiks."</string>
+    <string name="batch_delete_confirmation" msgid="2564172328268885394">"Valitud kontaktid kustutatakse."</string>
+    <string name="batch_delete_read_only_contact_confirmation" msgid="6614878716815412523">"Kirjutuskaitstud teabega kontod peidetakse teie kontaktiloendites, mitte ei kustutata."</string>
+    <string name="batch_delete_multiple_accounts_confirmation" msgid="5189722181586680185">"Need kontaktid sisaldavad teavet mitmelt kontolt. Kirjutuskaitstud teabega kontod peidetakse teie kontaktiloendites, mitte ei kustutata."</string>
     <string name="multipleContactDeleteConfirmation" msgid="938900978442960800">"Selle kontakti kustutamisel kustutatakse andmed mitmelt kontolt."</string>
     <string name="deleteConfirmation" msgid="811706994761610640">"See kontakt kustutatakse."</string>
     <string name="menu_discard" msgid="6854657936970228164">"Loobu muudatustest"</string>
@@ -94,20 +101,20 @@
     <string name="contactSavedErrorToast" msgid="3207250533172944892">"Kontaktide muudatuste salvestamine ebaõnnestus."</string>
     <string name="groupSavedToast" msgid="1168756874239833756">"Grupp on salvestatud."</string>
     <string name="groupSavedErrorToast" msgid="7984466936615304740">"Rühmade muudatuste salvestamine ebaõnnestus."</string>
-  <plurals name="listTotalPhoneContacts">
-    <item quantity="one" msgid="3015357862286673986">"1 telefoninumbriga kontakt"</item>
-    <item quantity="other" msgid="3299954047880968205">"<xliff:g id="COUNT">%d</xliff:g> telefoninumbriga kontakti"</item>
-  </plurals>
+    <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> telefoninumbriga kontakti</item>
+      <item quantity="one">1 telefoninumbriga kontakt</item>
+    </plurals>
     <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"Telefoninumbritega kontakte pole"</string>
-  <plurals name="listFoundAllContacts">
-    <item quantity="one" msgid="5517063038754171134">"1 leitud"</item>
-    <item quantity="other" msgid="3852668542926965042">"<xliff:g id="COUNT">%d</xliff:g> leitud"</item>
-  </plurals>
+    <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
+      <item quantity="other">Leiti <xliff:g id="COUNT">%d</xliff:g></item>
+      <item quantity="one">Leiti 1</item>
+    </plurals>
     <string name="listFoundAllContactsZero" msgid="922980883593159444">"Kontakte pole"</string>
-  <plurals name="searchFoundContacts">
-    <item quantity="one" msgid="4826918429708286628">"1 leitud"</item>
-    <item quantity="other" msgid="7988132539476575389">"<xliff:g id="COUNT">%d</xliff:g> leitud"</item>
-  </plurals>
+    <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
+      <item quantity="other">Leiti <xliff:g id="COUNT">%d</xliff:g></item>
+      <item quantity="one">Leiti 1</item>
+    </plurals>
     <string name="all_contacts_tab_label" msgid="6250372293594147703">"Kõik kontaktid"</string>
     <string name="favorites_tab_label" msgid="1524869648904016414">"Lemmikud"</string>
     <string name="callBack" msgid="5498224409038809224">"Helista tagasi"</string>
@@ -144,9 +151,6 @@
     <string name="pick_new_photo" msgid="9122450996263688237">"Vali uus foto"</string>
     <string name="locale_change_in_progress" msgid="7583992153091537467">"Kontaktiloendit värskendatakse keele muutmise kajastamiseks."</string>
     <string name="upgrade_in_progress" msgid="474511436863451061">"Kontaktiloendit värskendatakse."</string>
-    <string name="upgrade_out_of_memory" msgid="1209994418877625940">"Kontakte uuendatakse. \n\nUuendusprotsessiks on vaja umbes <xliff:g id="SIZE_IN_MEGABYTES">%s</xliff:g> MB sisemälu.\n\nValige üks järgmistest valikutest."</string>
-    <string name="upgrade_out_of_memory_uninstall" msgid="1721798828992091432">"Desinstalli mõned rakendused"</string>
-    <string name="upgrade_out_of_memory_retry" msgid="8431289830472724609">"Proovi uuesti uuendada"</string>
     <string name="search_results_searching" msgid="3984833028938569930">"Otsimine ..."</string>
     <string name="menu_display_selected" msgid="6470001164297969034">"Kuva valitud"</string>
     <string name="menu_display_all" msgid="8887488642609786198">"Kuva kõik"</string>
@@ -160,10 +164,10 @@
     <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>
-  <plurals name="merge_info">
-    <item quantity="one" msgid="148365587896371969">"pole liidetud"</item>
-    <item quantity="other" msgid="425683718017380845">"ühendati <xliff:g id="COUNT">%0$d</xliff:g> allikast"</item>
-  </plurals>
+    <plurals name="merge_info" formatted="false" msgid="2489323424994280962">
+      <item quantity="other">liidetud <xliff:g id="COUNT">%0$d</xliff:g> allikast</item>
+      <item quantity="one">liitmata</item>
+    </plurals>
     <string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"Kas ühendada praegune kontakt valitud kontaktiga?"</string>
     <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Kas lülituda valitud kontakti muutmisse? Seni sisestatud andmed kopeeritakse."</string>
     <string name="menu_copyContact" msgid="1573960845106822639">"Kopeeri valikusse Minu kontaktid"</string>
@@ -172,7 +176,7 @@
     <string name="list_filter_custom" msgid="8910173055702057002">"Kohandatud"</string>
     <string name="activity_title_settings" msgid="5464130076132770781">"Seaded"</string>
     <string name="menu_settings" msgid="377929915873428211">"Seaded"</string>
-    <string name="menu_help" msgid="5123887102216637725">"Abi"</string>
+    <string name="menu_help" msgid="1680178646764069976">"Abi ja tagasiside"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"Kuvamisvalikud"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="non_phone_caption" msgid="1541655052330027380">"Telefoninumber"</string>
@@ -188,19 +192,19 @@
     <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Impordi kontaktid"</string>
     <string name="create_group_dialog_title" msgid="6874527142828424475">"Uue grupi loomine"</string>
     <string name="create_group_item_label" msgid="4411981763169654825">"Loo uus rühm"</string>
-  <plurals name="num_groups_in_account">
-    <item quantity="one" msgid="2944819210288517794">"1 grupp"</item>
-    <item quantity="other" msgid="1276758425904917367">"<xliff:g id="COUNT">%0$d</xliff:g> rühma"</item>
-  </plurals>
+    <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
+      <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> rühma</item>
+      <item quantity="one">1 rühm</item>
+    </plurals>
     <string name="delete_group_dialog_message" msgid="7586856514337560529">"Kas kustutada rühm „<xliff:g id="GROUP_LABEL">%1$s</xliff:g>”? (Kontakte ei kustutata.)"</string>
-  <plurals name="num_contacts_in_group">
-    <item quantity="one" msgid="1352418549951013448">"<xliff:g id="COUNT_0">%1$d</xliff:g> isik(ut) rühmas <xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>"</item>
-    <item quantity="other" msgid="8146027769011086349">"<xliff:g id="COUNT_0">%1$d</xliff:g> inimest rühmas <xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>"</item>
-  </plurals>
-  <plurals name="group_list_num_contacts_in_group">
-    <item quantity="one" msgid="3323065321661972446">"<xliff:g id="COUNT">%1$d</xliff:g> isik"</item>
-    <item quantity="other" msgid="6251996206137048525">"<xliff:g id="COUNT">%1$d</xliff:g> inimest"</item>
-  </plurals>
+    <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> inimest kontolt <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> inimene kontolt <xliff:g id="ACCOUNT_TYPE_1">%2$s</xliff:g></item>
+    </plurals>
+    <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
+      <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> inimest</item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> inimene</item>
+    </plurals>
     <string name="toast_join_with_empty_contact" msgid="2238581529864542985">"Enne teise kontaktiga ühendamist sisestage kontakti nimi."</string>
     <string name="copy_text" msgid="3257145021583508761">"Kopeeri lõikelauale"</string>
     <string name="set_default" msgid="4417505153468300351">"Määra vaikeseadeks"</string>
@@ -264,4 +268,5 @@
     <string name="content_description_recent_call" msgid="5183800406316723676">"viimane kõne. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. klõpsake tagasihelistamiseks"</string>
     <string name="message_from_you_prefix" msgid="7180706529908434482">"Teie: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
     <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"Hangouts toimib paremini, kui sisestate isiku Hangoutsi koodi e-posti aadressi või telefoninumbri väljale."</string>
+    <string name="compact_editor_more_fields" msgid="2874181192382284115">"Rohkem välju"</string>
 </resources>
diff --git a/res/values-eu-rES/strings.xml b/res/values-eu-rES/strings.xml
index 43a3dcd..2dad7ba 100644
--- a/res/values-eu-rES/strings.xml
+++ b/res/values-eu-rES/strings.xml
@@ -46,6 +46,7 @@
     <string name="description_action_menu_add_star" msgid="3327186327234177456">"Gogokoetan gehitu da"</string>
     <string name="menu_editContact" msgid="9042415603857662633">"Editatu"</string>
     <string name="menu_deleteContact" msgid="6788644058868189393">"Ezabatu"</string>
+    <string name="menu_change_photo" msgid="7769177631511496210">"Aldatu argazkia"</string>
     <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Jarri hasierako pantailan"</string>
     <string name="menu_call" msgid="3992595586042260618">"Deitu kontaktuari"</string>
     <string name="menu_sendSMS" msgid="5535886767547006515">"Bidali testu-mezua kontaktuari"</string>
@@ -56,17 +57,23 @@
     <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Gehitu taldea"</string>
     <string name="splitConfirmation_title" msgid="633640935430370530">"Kontaktua banandu?"</string>
     <string name="splitConfirmation" msgid="740190210499587175">"Kontaktua hainbat kontaktutan bananduko da."</string>
-    <string name="menu_joinAggregate" msgid="5027981918265667970">"Batu"</string>
+    <string name="menu_joinAggregate" msgid="4050157483569357666">"Bateratu"</string>
     <string name="titleJoinContactDataWith" msgid="7684875775798635354">"Batu kontaktuak"</string>
     <string name="blurbJoinContactDataWith" msgid="8736488417422708236">"Aukeratu <xliff:g id="NAME">%s</xliff:g> kontaktuarekin batu nahi duzun kontaktua:"</string>
     <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Erakutsi kontaktu guztiak"</string>
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Gomendatutako kontaktuak"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Kontaktu guztiak"</string>
-    <string name="contactsJoinedMessage" msgid="7208148163607047389">"Batu diren kontaktuak"</string>
+    <string name="contactsJoinedMessage" msgid="656936718666768589">"Kontaktuak bateratu dira"</string>
+    <string name="contacts_deleted_toast" msgid="286851430992788215">"Kontaktuak ezabatu dira"</string>
     <string name="menu_set_ring_tone" msgid="8728345772068064946">"Ezarri tonua"</string>
     <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Erantzungailuko dei guztiak"</string>
     <string name="readOnlyContactWarning" msgid="7808825687289848259">"Ezin dituzu irakurtzeko soilik diren kontuetako kontaktuak ezabatu, baina zure kontaktuen zerrendatik ezkuta ditzakezu."</string>
     <string name="readOnlyContactDeleteConfirmation" msgid="2137170726670196909">"Kontaktu honek hainbat kontutako informazioa du. Irakurtzeko soilik diren kontuetako informazioa kontaktuen zerrendatik ezkutatuko da, baina ez da ezabatuko."</string>
+    <string name="batch_merge_single_contact_warning" msgid="982585201970392110">"Gutxienez bi kontaktu behar dituzu bateratu ahal izateko."</string>
+    <string name="batch_merge_confirmation" msgid="8551299480317422420">"Hautatutako kontaktuak kontaktu bakarrean bateratuko dira."</string>
+    <string name="batch_delete_confirmation" msgid="2564172328268885394">"Hautatutako kontaktuak ezabatu egingo dira."</string>
+    <string name="batch_delete_read_only_contact_confirmation" msgid="6614878716815412523">"Irakurtzeko soilik diren kontuetako informazioa kontaktuen zerrendatik ezkutatuko da, baina ez da ezabatuko."</string>
+    <string name="batch_delete_multiple_accounts_confirmation" msgid="5189722181586680185">"Kontaktu hauek hainbat kontutako informazioa dute. Irakurtzeko soilik diren kontuetako informazioa kontaktuen zerrendatik ezkutatuko da, baina ez da ezabatuko."</string>
     <string name="multipleContactDeleteConfirmation" msgid="938900978442960800">"Kontaktua ezabatzen baduzu, hainbat kontutako informazioa ezabatuko da."</string>
     <string name="deleteConfirmation" msgid="811706994761610640">"Kontaktua ezabatu egingo da."</string>
     <string name="menu_discard" msgid="6854657936970228164">"Baztertu aldaketak"</string>
@@ -94,20 +101,20 @@
     <string name="contactSavedErrorToast" msgid="3207250533172944892">"Ezin izan dira gorde kontaktuari egindako aldaketak."</string>
     <string name="groupSavedToast" msgid="1168756874239833756">"Taldea gorde da."</string>
     <string name="groupSavedErrorToast" msgid="7984466936615304740">"Ezin izan dira gorde taldeari egindako aldaketak."</string>
-  <plurals name="listTotalPhoneContacts">
-    <item quantity="one" msgid="3015357862286673986">"1 kontaktuk telefono-zenbakia du"</item>
-    <item quantity="other" msgid="3299954047880968205">"<xliff:g id="COUNT">%d</xliff:g> kontaktuk telefono-zenbakiak dituzte"</item>
-  </plurals>
+    <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> kontaktuk telefono-zenbakia dute</item>
+      <item quantity="one">Kontaktu batek telefono-zenbakia du</item>
+    </plurals>
     <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"Ez dago telefono-zenbakirik duen kontakturik"</string>
-  <plurals name="listFoundAllContacts">
-    <item quantity="one" msgid="5517063038754171134">"1 aurkitu da"</item>
-    <item quantity="other" msgid="3852668542926965042">"<xliff:g id="COUNT">%d</xliff:g> aurkitu dira"</item>
-  </plurals>
+    <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> aurkitu dira</item>
+      <item quantity="one">Bat aurkitu da</item>
+    </plurals>
     <string name="listFoundAllContactsZero" msgid="922980883593159444">"Ez dago kontakturik"</string>
-  <plurals name="searchFoundContacts">
-    <item quantity="one" msgid="4826918429708286628">"1 aurkitu da"</item>
-    <item quantity="other" msgid="7988132539476575389">"<xliff:g id="COUNT">%d</xliff:g> aurkitu dira"</item>
-  </plurals>
+    <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> aurkitu dira</item>
+      <item quantity="one">Bat aurkitu da</item>
+    </plurals>
     <string name="all_contacts_tab_label" msgid="6250372293594147703">"Kontaktu guztiak"</string>
     <string name="favorites_tab_label" msgid="1524869648904016414">"Gogokoak"</string>
     <string name="callBack" msgid="5498224409038809224">"Itzuli deia"</string>
@@ -144,9 +151,6 @@
     <string name="pick_new_photo" msgid="9122450996263688237">"Hautatu argazki berria"</string>
     <string name="locale_change_in_progress" msgid="7583992153091537467">"Kontaktuen zerrenda hizkuntza-aldaketa islatzeko eguneratzen ari da."</string>
     <string name="upgrade_in_progress" msgid="474511436863451061">"Kontaktuen zerrenda eguneratzen ari da."</string>
-    <string name="upgrade_out_of_memory" msgid="1209994418877625940">"Kontaktuak bertsio-berritzeko prozesuan daude. \n\nBertsio-berritzeko prozesua osatzeko, barneko memoriako <xliff:g id="SIZE_IN_MEGABYTES">%s</xliff:g> MB behar izaten dira gutxi gorabehera.\n\nHautatu aukera hauetako bat:"</string>
-    <string name="upgrade_out_of_memory_uninstall" msgid="1721798828992091432">"Desinstalatu aplikazio batzuk"</string>
-    <string name="upgrade_out_of_memory_retry" msgid="8431289830472724609">"Saiatu berriro bertsio-berritzen"</string>
     <string name="search_results_searching" msgid="3984833028938569930">"Bilatzen…"</string>
     <string name="menu_display_selected" msgid="6470001164297969034">"Erakutsi hautatutakoak"</string>
     <string name="menu_display_all" msgid="8887488642609786198">"Erakutsi guztiak"</string>
@@ -160,10 +164,10 @@
     <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>
-  <plurals name="merge_info">
-    <item quantity="one" msgid="148365587896371969">"ez da bateratu"</item>
-    <item quantity="other" msgid="425683718017380845">"<xliff:g id="COUNT">%0$d</xliff:g> iturburutatik bateratuta"</item>
-  </plurals>
+    <plurals name="merge_info" formatted="false" msgid="2489323424994280962">
+      <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> iturburutakoak bateratu dira</item>
+      <item quantity="one">ez da bateratu</item>
+    </plurals>
     <string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"Uneko kontaktua eta hautatutako kontaktua batu nahi dituzu?"</string>
     <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Hautatutako kontaktua editatu nahi duzu? Orain arte idatzi duzun informazioa kopiatu egingo da."</string>
     <string name="menu_copyContact" msgid="1573960845106822639">"Kopiatu Nire kontaktuetan"</string>
@@ -172,7 +176,7 @@
     <string name="list_filter_custom" msgid="8910173055702057002">"Pertsonalizatua"</string>
     <string name="activity_title_settings" msgid="5464130076132770781">"Ezarpenak"</string>
     <string name="menu_settings" msgid="377929915873428211">"Ezarpenak"</string>
-    <string name="menu_help" msgid="5123887102216637725">"Laguntza"</string>
+    <string name="menu_help" msgid="1680178646764069976">"Laguntza eta iritziak"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"Bistaratze-aukerak"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="non_phone_caption" msgid="1541655052330027380">"Telefono-zenbakia"</string>
@@ -188,19 +192,19 @@
     <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Inportatu kontaktuak"</string>
     <string name="create_group_dialog_title" msgid="6874527142828424475">"Sortu taldea"</string>
     <string name="create_group_item_label" msgid="4411981763169654825">"Sortu taldea"</string>
-  <plurals name="num_groups_in_account">
-    <item quantity="one" msgid="2944819210288517794">"1 talde"</item>
-    <item quantity="other" msgid="1276758425904917367">"<xliff:g id="COUNT">%0$d</xliff:g> talde"</item>
-  </plurals>
+    <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
+      <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> talde</item>
+      <item quantity="one">Talde bat</item>
+    </plurals>
     <string name="delete_group_dialog_message" msgid="7586856514337560529">"\"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\" taldea ezabatu nahi duzu? (Ez dira kontaktuak ezabatuko.)"</string>
-  <plurals name="num_contacts_in_group">
-    <item quantity="one" msgid="1352418549951013448">"<xliff:g id="COUNT_0">%1$d</xliff:g> pertsona <xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g> taldetik"</item>
-    <item quantity="other" msgid="8146027769011086349">"<xliff:g id="COUNT_0">%1$d</xliff:g> pertsona <xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g> taldetik"</item>
-  </plurals>
-  <plurals name="group_list_num_contacts_in_group">
-    <item quantity="one" msgid="3323065321661972446">"<xliff:g id="COUNT">%1$d</xliff:g> pertsona"</item>
-    <item quantity="other" msgid="6251996206137048525">"<xliff:g id="COUNT">%1$d</xliff:g> pertsona"</item>
-  </plurals>
+    <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
+      <item quantity="other"><xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g> taldeko <xliff:g id="COUNT_2">%1$d</xliff:g> pertsona</item>
+      <item quantity="one"><xliff:g id="ACCOUNT_TYPE_1">%2$s</xliff:g> taldeko <xliff:g id="COUNT_0">%1$d</xliff:g> pertsona</item>
+    </plurals>
+    <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
+      <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> pertsona</item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> pertsona</item>
+    </plurals>
     <string name="toast_join_with_empty_contact" msgid="2238581529864542985">"Idatzi kontaktuaren izena beste batekin batu aurretik."</string>
     <string name="copy_text" msgid="3257145021583508761">"Kopiatu arbelean"</string>
     <string name="set_default" msgid="4417505153468300351">"Ezarri lehenetsi gisa"</string>
@@ -264,4 +268,5 @@
     <string name="content_description_recent_call" msgid="5183800406316723676">"duela gutxiko deia. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. sakatu deitzeko"</string>
     <string name="message_from_you_prefix" msgid="7180706529908434482">"Zu: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
     <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"Hangouts-ek hobeto funtzionatzen du pertsonaren Hangouts identifikatzailea idazten baduzu helbide elektronikoaren edo telefonoaren eremuan."</string>
+    <string name="compact_editor_more_fields" msgid="2874181192382284115">"Eremu gehiago"</string>
 </resources>
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
index 6fb0fa1..d1f9794 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -46,6 +46,7 @@
     <string name="description_action_menu_add_star" msgid="3327186327234177456">"به موارد دلخواه افزوده می‌شود"</string>
     <string name="menu_editContact" msgid="9042415603857662633">"ویرایش"</string>
     <string name="menu_deleteContact" msgid="6788644058868189393">"حذف"</string>
+    <string name="menu_change_photo" msgid="7769177631511496210">"تغییر عکس"</string>
     <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"محل بر روی صفحهٔ اصلی"</string>
     <string name="menu_call" msgid="3992595586042260618">"تماس با مخاطب"</string>
     <string name="menu_sendSMS" msgid="5535886767547006515">"ارسال متن به مخاطب"</string>
@@ -56,17 +57,23 @@
     <string name="menu_new_group_action_bar" msgid="3520232877587377175">"افزودن گروه"</string>
     <string name="splitConfirmation_title" msgid="633640935430370530">"مخاطب تفکیک شود؟"</string>
     <string name="splitConfirmation" msgid="740190210499587175">"این مخاطب، به چندین مخاطب تفکیک خواهد شد."</string>
-    <string name="menu_joinAggregate" msgid="5027981918265667970">"پیوستن"</string>
+    <string name="menu_joinAggregate" msgid="4050157483569357666">"ادغام"</string>
     <string name="titleJoinContactDataWith" msgid="7684875775798635354">"پیوستن به مخاطبین"</string>
     <string name="blurbJoinContactDataWith" msgid="8736488417422708236">"مخاطبی را که می‌خواهید با <xliff:g id="NAME">%s</xliff:g> ادغام شود، انتخاب کنید:"</string>
     <string name="showAllContactsJoinItem" msgid="2189695051430392383">"نمایش همه مخاطبین"</string>
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"مخاطبین پیشنهادی"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"همه مخاطبین"</string>
-    <string name="contactsJoinedMessage" msgid="7208148163607047389">"مخاطبین ملحق شده"</string>
+    <string name="contactsJoinedMessage" msgid="656936718666768589">"مخاطبین ادغام شدند"</string>
+    <string name="contacts_deleted_toast" msgid="286851430992788215">"مخاطبین حذف شدند"</string>
     <string name="menu_set_ring_tone" msgid="8728345772068064946">"تنظیم آهنگ زنگ"</string>
     <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"همه تماس‌ها به پست صوتی"</string>
     <string name="readOnlyContactWarning" msgid="7808825687289848259">"شما نمی‌توانید مخاطبین را از حساب‌های فقط خواندنی حذف کنید اما می‌توانید آن‌ها را در لیست‌های مخاطبین خود پنهان کنید."</string>
     <string name="readOnlyContactDeleteConfirmation" msgid="2137170726670196909">"این مخاطب دارای اطلاعاتی از چند حساب است. اطلاعات حساب‌های فقط خواندنی در لیست‌های مخاطبین پنهان می‌شوند اما حذف نمی‌شوند."</string>
+    <string name="batch_merge_single_contact_warning" msgid="982585201970392110">"برای ادغام کردن، دست‌کم به دو مخاطب نیاز دارید."</string>
+    <string name="batch_merge_confirmation" msgid="8551299480317422420">"مخاطب‌های انتخابی در یک مخاطب ادغام می‌شوند."</string>
+    <string name="batch_delete_confirmation" msgid="2564172328268885394">"مخاطب‌های انتخاب شده حذف می‌شوند."</string>
+    <string name="batch_delete_read_only_contact_confirmation" msgid="6614878716815412523">"اطلاعات حساب‌های فقط خواندنی در فهرست‌های مخاطبین شما پنهان می‌شوند اما حذف نمی‌شوند."</string>
+    <string name="batch_delete_multiple_accounts_confirmation" msgid="5189722181586680185">"این مخاطب‌ها دارای اطلاعاتی از چند حساب هستند. اطلاعات حساب‌های فقط خواندنی در فهرست‌های مخاطبین شما پنهان می‌شوند اما حذف نمی‌شوند."</string>
     <string name="multipleContactDeleteConfirmation" msgid="938900978442960800">"حذف این مخاطب اطلاعات را از حساب‌های متعدد حذف می‌کند."</string>
     <string name="deleteConfirmation" msgid="811706994761610640">"این مخاطب حذف می‌شود."</string>
     <string name="menu_discard" msgid="6854657936970228164">"صرفنظر از تغییرات"</string>
@@ -94,25 +101,25 @@
     <string name="contactSavedErrorToast" msgid="3207250533172944892">"ذخیره تغییرات مخاطب انجام نشد."</string>
     <string name="groupSavedToast" msgid="1168756874239833756">"گروه ذخیره شد."</string>
     <string name="groupSavedErrorToast" msgid="7984466936615304740">"ذخیرهٔ تغییرات گروه انجام نشد."</string>
-  <plurals name="listTotalPhoneContacts">
-    <item quantity="one" msgid="3015357862286673986">"۱ مخاطب با شماره تلفن"</item>
-    <item quantity="other" msgid="3299954047880968205">"<xliff:g id="COUNT">%d</xliff:g> مخاطب دارای شماره تلفن"</item>
-  </plurals>
+    <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
+      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> مخاطب با شماره تلفن</item>
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> مخاطب با شماره تلفن</item>
+    </plurals>
     <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"مخاطبی با شماره تلفن موجود نیست"</string>
-  <plurals name="listFoundAllContacts">
-    <item quantity="one" msgid="5517063038754171134">"1 مورد پیدا شد"</item>
-    <item quantity="other" msgid="3852668542926965042">"<xliff:g id="COUNT">%d</xliff:g> یافت شد"</item>
-  </plurals>
+    <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
+      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> مورد پیدا شد</item>
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> مورد پیدا شد</item>
+    </plurals>
     <string name="listFoundAllContactsZero" msgid="922980883593159444">"مخاطبی موجود نیست"</string>
-  <plurals name="searchFoundContacts">
-    <item quantity="one" msgid="4826918429708286628">"1 مورد پیدا شد"</item>
-    <item quantity="other" msgid="7988132539476575389">"<xliff:g id="COUNT">%d</xliff:g> یافت شد"</item>
-  </plurals>
+    <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
+      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> مورد پیدا شد</item>
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> مورد پیدا شد</item>
+    </plurals>
     <string name="all_contacts_tab_label" msgid="6250372293594147703">"همه مخاطبین"</string>
     <string name="favorites_tab_label" msgid="1524869648904016414">"موارد دلخواه"</string>
     <string name="callBack" msgid="5498224409038809224">"بازگرداندن تماس"</string>
     <string name="callAgain" msgid="3197312117049874778">"تماس مجدد"</string>
-    <string name="returnCall" msgid="8171961914203617813">"برگشت تماس"</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>
@@ -144,9 +151,6 @@
     <string name="pick_new_photo" msgid="9122450996263688237">"انتخاب عکس جدید"</string>
     <string name="locale_change_in_progress" msgid="7583992153091537467">"لیست مخاطبین در حال به‌روزرسانی برای منعکس کردن تغییرات زبان است."</string>
     <string name="upgrade_in_progress" msgid="474511436863451061">"لیست مخاطبین در حال به‌روزرسانی است."</string>
-    <string name="upgrade_out_of_memory" msgid="1209994418877625940">"مخاطبین در حال ارتقا هستند. \n\nفرآیند ارتقا به تقریباً <xliff:g id="SIZE_IN_MEGABYTES">%s</xliff:g> مگابایت از حافظهٔ داخلی نیاز دارد. \n\nیکی از گزینه‌های زیر را انتخاب کنید:"</string>
-    <string name="upgrade_out_of_memory_uninstall" msgid="1721798828992091432">"حذف نصب برخی از برنامه‌های کاربردی"</string>
-    <string name="upgrade_out_of_memory_retry" msgid="8431289830472724609">"امتحان مجدد برای ارتقا"</string>
     <string name="search_results_searching" msgid="3984833028938569930">"در حال جستجو..."</string>
     <string name="menu_display_selected" msgid="6470001164297969034">"نمایش موارد انتخاب شده"</string>
     <string name="menu_display_all" msgid="8887488642609786198">"نمایش همه"</string>
@@ -160,10 +164,10 @@
     <string name="primary_photo" msgid="8517942231868516999">"عکس اصلی"</string>
     <string name="description_star" msgid="2605854427360036550">"مورد دلخواه"</string>
     <string name="edit_contact" msgid="7529281274005689512">"ویرایش مخاطب"</string>
-  <plurals name="merge_info">
-    <item quantity="one" msgid="148365587896371969">"ادغام نشد"</item>
-    <item quantity="other" msgid="425683718017380845">"ادغام شده از منابع <xliff:g id="COUNT">%0$d</xliff:g>"</item>
-  </plurals>
+    <plurals name="merge_info" formatted="false" msgid="2489323424994280962">
+      <item quantity="one"><xliff:g id="COUNT">%0$d</xliff:g> منبع با هم ادغام شدند</item>
+      <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> منبع با هم ادغام شدند</item>
+    </plurals>
     <string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"پیوستن به مخاطب فعلی با مخاطب انتخابی؟"</string>
     <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"به ویرایش مخاطب انتخابی می‌روید؟ اطلاعاتی که تا حال وارد کرده‌اید کپی خواهد شد."</string>
     <string name="menu_copyContact" msgid="1573960845106822639">"کپی در مخاطبین من"</string>
@@ -172,7 +176,7 @@
     <string name="list_filter_custom" msgid="8910173055702057002">"سفارشی"</string>
     <string name="activity_title_settings" msgid="5464130076132770781">"تنظیمات"</string>
     <string name="menu_settings" msgid="377929915873428211">"تنظیمات"</string>
-    <string name="menu_help" msgid="5123887102216637725">"راهنمایی"</string>
+    <string name="menu_help" msgid="1680178646764069976">"راهنما و بازخورد"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"گزینه‌های نمایش"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>، <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="non_phone_caption" msgid="1541655052330027380">"شماره تلفن"</string>
@@ -188,19 +192,19 @@
     <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"وارد کردن مخاطبین"</string>
     <string name="create_group_dialog_title" msgid="6874527142828424475">"ایجاد گروه جدید"</string>
     <string name="create_group_item_label" msgid="4411981763169654825">"ایجاد گروه جدید"</string>
-  <plurals name="num_groups_in_account">
-    <item quantity="one" msgid="2944819210288517794">"1 گروه"</item>
-    <item quantity="other" msgid="1276758425904917367">"<xliff:g id="COUNT">%0$d</xliff:g> گروه"</item>
-  </plurals>
+    <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
+      <item quantity="one"><xliff:g id="COUNT">%0$d</xliff:g> گروه</item>
+      <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> گروه</item>
+    </plurals>
     <string name="delete_group_dialog_message" msgid="7586856514337560529">"مطمئنید می‌خواهید گروه \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\" حذف شود؟ (مخاطبین خودشان حذف نخواهند شد.)"</string>
-  <plurals name="num_contacts_in_group">
-    <item quantity="one" msgid="1352418549951013448">"<xliff:g id="COUNT_0">%1$d</xliff:g> نفر از <xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>"</item>
-    <item quantity="other" msgid="8146027769011086349">"<xliff:g id="COUNT_0">%1$d</xliff:g> نفر از <xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>"</item>
-  </plurals>
-  <plurals name="group_list_num_contacts_in_group">
-    <item quantity="one" msgid="3323065321661972446">"<xliff:g id="COUNT">%1$d</xliff:g> نفر"</item>
-    <item quantity="other" msgid="6251996206137048525">"<xliff:g id="COUNT">%1$d</xliff:g> نفر"</item>
-  </plurals>
+    <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
+      <item quantity="one"><xliff:g id="COUNT_2">%1$d</xliff:g> نفر از <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> نفر از <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
+    </plurals>
+    <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
+      <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> نفر</item>
+      <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> نفر</item>
+    </plurals>
     <string name="toast_join_with_empty_contact" msgid="2238581529864542985">"لطفاً قبل از ادغام با مخاطب دیگر، نام مخاطب را وارد کنید."</string>
     <string name="copy_text" msgid="3257145021583508761">"کپی به کلیپ بورد"</string>
     <string name="set_default" msgid="4417505153468300351">"تنظیم پیش‌فرض"</string>
@@ -264,4 +268,5 @@
     <string name="content_description_recent_call" msgid="5183800406316723676">"تماس اخیر. <xliff:g id="CALL_TYPE">%s</xliff:g>‏. <xliff:g id="PHONE_NUMBER">%s</xliff:g>‏. ‏<xliff:g id="DATE">%s</xliff:g>. برای بازگرداندن تماس کلیک کنید"</string>
     <string name="message_from_you_prefix" msgid="7180706529908434482">"شما: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
     <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"‏وقتی شناسه Hangouts شخص را در فیلد ایمیل یا فیلد تلفن وارد کنید، Hangouts بهتر کار می‌کند."</string>
+    <string name="compact_editor_more_fields" msgid="2874181192382284115">"فیلدهای بیشتر"</string>
 </resources>
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
index d49cef0..c9bbcfe 100644
--- a/res/values-fi/strings.xml
+++ b/res/values-fi/strings.xml
@@ -46,6 +46,7 @@
     <string name="description_action_menu_add_star" msgid="3327186327234177456">"Lisätty suosikkeihin"</string>
     <string name="menu_editContact" msgid="9042415603857662633">"Muokkaa"</string>
     <string name="menu_deleteContact" msgid="6788644058868189393">"Poista"</string>
+    <string name="menu_change_photo" msgid="7769177631511496210">"Vaihda kuva"</string>
     <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Paikka aloitusruudussa"</string>
     <string name="menu_call" msgid="3992595586042260618">"Soita"</string>
     <string name="menu_sendSMS" msgid="5535886767547006515">"Lähetä tekstiviesti yhteystiedolle"</string>
@@ -56,17 +57,23 @@
     <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Lisää ryhmä"</string>
     <string name="splitConfirmation_title" msgid="633640935430370530">"Erota yhteystieto?"</string>
     <string name="splitConfirmation" msgid="740190210499587175">"Tämä yhteystieto erotetaan useisiin yhteystietoihin."</string>
-    <string name="menu_joinAggregate" msgid="5027981918265667970">"Yhdistä"</string>
+    <string name="menu_joinAggregate" msgid="4050157483569357666">"Yhdistä"</string>
     <string name="titleJoinContactDataWith" msgid="7684875775798635354">"Yhdistä yhteystiedot"</string>
     <string name="blurbJoinContactDataWith" msgid="8736488417422708236">"Valitse yhteystieto, jonka haluat yhdistää kontaktiin <xliff:g id="NAME">%s</xliff:g>:"</string>
     <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Näytä kaikki yhteystiedot"</string>
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Ehdotetut yhteystiedot"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Kaikki yhteystiedot"</string>
-    <string name="contactsJoinedMessage" msgid="7208148163607047389">"Yhteystiedot yhdistetty"</string>
+    <string name="contactsJoinedMessage" msgid="656936718666768589">"Yhteystiedot on yhdistetty."</string>
+    <string name="contacts_deleted_toast" msgid="286851430992788215">"Yhteystiedot on poistettu."</string>
     <string name="menu_set_ring_tone" msgid="8728345772068064946">"Aseta soittoääni"</string>
     <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Kaikki puhelut vastaajaan"</string>
     <string name="readOnlyContactWarning" msgid="7808825687289848259">"Et voi poistaa yhteystietoja vain luku -tilassa olevista tileistä. Voit kuitenkin piilottaa yhteystietoja yhteystietoluetteloissasi."</string>
     <string name="readOnlyContactDeleteConfirmation" msgid="2137170726670196909">"Tämä yhteystieto sisältää tietoja useista tileistä. Vain luku -tilassa olevien tilien tietoja ei poisteta, mutta ne piilotetaan yhteystietoluettelosta."</string>
+    <string name="batch_merge_single_contact_warning" msgid="982585201970392110">"Yhdistäminen edellyttää vähintään kahden yhteystiedon valintaa."</string>
+    <string name="batch_merge_confirmation" msgid="8551299480317422420">"Valitut yhteystiedot yhdistetään."</string>
+    <string name="batch_delete_confirmation" msgid="2564172328268885394">"Valitut yhteystiedot poistetaan."</string>
+    <string name="batch_delete_read_only_contact_confirmation" msgid="6614878716815412523">"Vain luku -tilassa olevien tilien tietoja ei poisteta, mutta ne piilotetaan yhteystietoluettelosta."</string>
+    <string name="batch_delete_multiple_accounts_confirmation" msgid="5189722181586680185">"Nämä yhteystiedot sisältävät tietoja useista tileistä. Vain luku -tilassa olevien tilien tietoja ei poisteta, mutta ne piilotetaan yhteystietoluettelosta."</string>
     <string name="multipleContactDeleteConfirmation" msgid="938900978442960800">"Kun tämä yhteystieto poistetaan, tietoja poistetaan useilta tileiltä."</string>
     <string name="deleteConfirmation" msgid="811706994761610640">"Tämä yhteystieto poistetaan."</string>
     <string name="menu_discard" msgid="6854657936970228164">"Hylkää muutokset"</string>
@@ -94,20 +101,20 @@
     <string name="contactSavedErrorToast" msgid="3207250533172944892">"Ei voitu tallentaa yhteystietojen muutoksia."</string>
     <string name="groupSavedToast" msgid="1168756874239833756">"Ryhmä tallennettu."</string>
     <string name="groupSavedErrorToast" msgid="7984466936615304740">"Ryhmän muutoksia ei voitu tallentaa."</string>
-  <plurals name="listTotalPhoneContacts">
-    <item quantity="one" msgid="3015357862286673986">"1 yhteystieto, jossa puhelinnumero"</item>
-    <item quantity="other" msgid="3299954047880968205">"<xliff:g id="COUNT">%d</xliff:g> yhteystietoa, joissa puhelinnumero"</item>
-  </plurals>
+    <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> yhteystietoa, jossa puhelinnumero</item>
+      <item quantity="one">1 yhteystieto, jossa puhelinnumero</item>
+    </plurals>
     <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"Ei yhteystietoja, joissa on puhelinnumero"</string>
-  <plurals name="listFoundAllContacts">
-    <item quantity="one" msgid="5517063038754171134">"Löytyi 1"</item>
-    <item quantity="other" msgid="3852668542926965042">"Löytyi <xliff:g id="COUNT">%d</xliff:g>"</item>
-  </plurals>
+    <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> löytyi</item>
+      <item quantity="one">1 löytyi</item>
+    </plurals>
     <string name="listFoundAllContactsZero" msgid="922980883593159444">"Ei kontakteja"</string>
-  <plurals name="searchFoundContacts">
-    <item quantity="one" msgid="4826918429708286628">"Löytyi 1"</item>
-    <item quantity="other" msgid="7988132539476575389">"Löytyi <xliff:g id="COUNT">%d</xliff:g>"</item>
-  </plurals>
+    <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> löytyi</item>
+      <item quantity="one">1 löytyi</item>
+    </plurals>
     <string name="all_contacts_tab_label" msgid="6250372293594147703">"Yhteystiedot"</string>
     <string name="favorites_tab_label" msgid="1524869648904016414">"Suosikit"</string>
     <string name="callBack" msgid="5498224409038809224">"Soita takaisin"</string>
@@ -144,9 +151,6 @@
     <string name="pick_new_photo" msgid="9122450996263688237">"Valitse uusi valokuva"</string>
     <string name="locale_change_in_progress" msgid="7583992153091537467">"Yhteystietoluettelo on päivitetty vastaamaan kielen muutosta."</string>
     <string name="upgrade_in_progress" msgid="474511436863451061">"Yhteystietoluetteloa päivitetään."</string>
-    <string name="upgrade_out_of_memory" msgid="1209994418877625940">"Yhteystietoja päivitetään. \n\nPäivitysprosessiin tarvitaan noin <xliff:g id="SIZE_IN_MEGABYTES">%s</xliff:g> Mt sisäistä tallennustilaa.\n\nValitse yksi seuraavista vaihtoehdoista:"</string>
-    <string name="upgrade_out_of_memory_uninstall" msgid="1721798828992091432">"Poista sovelluksia"</string>
-    <string name="upgrade_out_of_memory_retry" msgid="8431289830472724609">"Yritä päivitystä uudelleen"</string>
     <string name="search_results_searching" msgid="3984833028938569930">"Haetaan..."</string>
     <string name="menu_display_selected" msgid="6470001164297969034">"Näytä valitut"</string>
     <string name="menu_display_all" msgid="8887488642609786198">"Näytä kaikki"</string>
@@ -160,10 +164,10 @@
     <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>
-  <plurals name="merge_info">
-    <item quantity="one" msgid="148365587896371969">"ei yhdistetty"</item>
-    <item quantity="other" msgid="425683718017380845">"yhdistetty <xliff:g id="COUNT">%0$d</xliff:g> lähteestä"</item>
-  </plurals>
+    <plurals name="merge_info" formatted="false" msgid="2489323424994280962">
+      <item quantity="other">yhdistetty <xliff:g id="COUNT">%0$d</xliff:g> lähteestä</item>
+      <item quantity="one">ei yhdistetty</item>
+    </plurals>
     <string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"Yhdistetäänkö nykyiset yhteystiedot valittujen yhteystietojen kanssa?"</string>
     <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Haluatko muokata valittuja yhteystietoja? Antamasi tiedot kopioidaan."</string>
     <string name="menu_copyContact" msgid="1573960845106822639">"Kopioi yhteystietoihini"</string>
@@ -172,7 +176,7 @@
     <string name="list_filter_custom" msgid="8910173055702057002">"Oma"</string>
     <string name="activity_title_settings" msgid="5464130076132770781">"Asetukset"</string>
     <string name="menu_settings" msgid="377929915873428211">"Asetukset"</string>
-    <string name="menu_help" msgid="5123887102216637725">"Ohje"</string>
+    <string name="menu_help" msgid="1680178646764069976">"Ohje ja palaute"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"Näyttövalinnat"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="non_phone_caption" msgid="1541655052330027380">"Puhelinnumero"</string>
@@ -188,19 +192,19 @@
     <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Tuo yhteystietoja"</string>
     <string name="create_group_dialog_title" msgid="6874527142828424475">"Luo uusi ryhmä"</string>
     <string name="create_group_item_label" msgid="4411981763169654825">"Luo uusi ryhmä"</string>
-  <plurals name="num_groups_in_account">
-    <item quantity="one" msgid="2944819210288517794">"1 ryhmä"</item>
-    <item quantity="other" msgid="1276758425904917367">"<xliff:g id="COUNT">%0$d</xliff:g> ryhmää"</item>
-  </plurals>
+    <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
+      <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> ryhmää</item>
+      <item quantity="one">1 ryhmä</item>
+    </plurals>
     <string name="delete_group_dialog_message" msgid="7586856514337560529">"Poistetaanko ryhmä <xliff:g id="GROUP_LABEL">%1$s</xliff:g>? (Ryhmään kuuluvia yhteystietoja ei poisteta.)"</string>
-  <plurals name="num_contacts_in_group">
-    <item quantity="one" msgid="1352418549951013448">"<xliff:g id="COUNT_0">%1$d</xliff:g> henkilö tilistä <xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>"</item>
-    <item quantity="other" msgid="8146027769011086349">"<xliff:g id="COUNT_0">%1$d</xliff:g> henkilöä tilistä <xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>"</item>
-  </plurals>
-  <plurals name="group_list_num_contacts_in_group">
-    <item quantity="one" msgid="3323065321661972446">"<xliff:g id="COUNT">%1$d</xliff:g> henkilö"</item>
-    <item quantity="other" msgid="6251996206137048525">"<xliff:g id="COUNT">%1$d</xliff:g> henkilöä"</item>
-  </plurals>
+    <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> henkilöä tilistä <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> henkilö tilistä <xliff:g id="ACCOUNT_TYPE_1">%2$s</xliff:g></item>
+    </plurals>
+    <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
+      <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> henkilöä</item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> henkilö</item>
+    </plurals>
     <string name="toast_join_with_empty_contact" msgid="2238581529864542985">"Kirjoita yhteystiedon nimi ennen kuin liität sen toiseen yhteystietoon."</string>
     <string name="copy_text" msgid="3257145021583508761">"Kopioi leikepöydälle"</string>
     <string name="set_default" msgid="4417505153468300351">"Aseta oletukseksi"</string>
@@ -264,4 +268,5 @@
     <string name="content_description_recent_call" msgid="5183800406316723676">"Viimeisin puhelu. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. Soita takaisin klikkaamalla."</string>
     <string name="message_from_you_prefix" msgid="7180706529908434482">"Sinä: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
     <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"Hangouts toimii paremmin, kun kirjoitat käyttäjän Hangouts-tunnuksen sähköposti- tai puhelinnumerokenttään."</string>
+    <string name="compact_editor_more_fields" msgid="2874181192382284115">"Lisää kenttiä"</string>
 </resources>
diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml
index fdf49f9..e3a686a 100644
--- a/res/values-fr-rCA/strings.xml
+++ b/res/values-fr-rCA/strings.xml
@@ -46,6 +46,7 @@
     <string name="description_action_menu_add_star" msgid="3327186327234177456">"Ajouté aux favoris"</string>
     <string name="menu_editContact" msgid="9042415603857662633">"Modifier"</string>
     <string name="menu_deleteContact" msgid="6788644058868189393">"Supprimer"</string>
+    <string name="menu_change_photo" msgid="7769177631511496210">"Changer de photo"</string>
     <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Placer sur l\'écran d\'accueil"</string>
     <string name="menu_call" msgid="3992595586042260618">"Appeler le contact"</string>
     <string name="menu_sendSMS" msgid="5535886767547006515">"Envoyer un SMS au contact"</string>
@@ -56,17 +57,23 @@
     <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Ajouter un groupe"</string>
     <string name="splitConfirmation_title" msgid="633640935430370530">"Séparer le contact?"</string>
     <string name="splitConfirmation" msgid="740190210499587175">"Ce contact va être séparé en plusieurs contacts."</string>
-    <string name="menu_joinAggregate" msgid="5027981918265667970">"Joindre"</string>
+    <string name="menu_joinAggregate" msgid="4050157483569357666">"Fusionner"</string>
     <string name="titleJoinContactDataWith" msgid="7684875775798635354">"Joindre des contacts"</string>
     <string name="blurbJoinContactDataWith" msgid="8736488417422708236">"Sélectionnez le contact que vous voulez associer à \"<xliff:g id="NAME">%s</xliff:g>\" :"</string>
     <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Afficher tous les contacts"</string>
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Contacts suggérés"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Tous les contacts"</string>
-    <string name="contactsJoinedMessage" msgid="7208148163607047389">"Contacts joints"</string>
+    <string name="contactsJoinedMessage" msgid="656936718666768589">"Contacts fusionnés"</string>
+    <string name="contacts_deleted_toast" msgid="286851430992788215">"Contacts supprimés"</string>
     <string name="menu_set_ring_tone" msgid="8728345772068064946">"Régler sonnerie"</string>
     <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Tous appels vers messag. voc."</string>
     <string name="readOnlyContactWarning" msgid="7808825687289848259">"Impossible de supprimer les contacts des comptes en lecture seule. Vous pouvez les masquer dans la liste des contacts."</string>
     <string name="readOnlyContactDeleteConfirmation" msgid="2137170726670196909">"Ce contact contient des informations provenant de plusieurs comptes. Vous pouvez masquer dans votre liste de contacts les informations des comptes en lecture seule, mais pas les supprimer."</string>
+    <string name="batch_merge_single_contact_warning" msgid="982585201970392110">"Au moins deux contacts doivent être sélectionnés pour effectuer une fusion."</string>
+    <string name="batch_merge_confirmation" msgid="8551299480317422420">"Les contacts sélectionnés seront fusionnés en un seul contact."</string>
+    <string name="batch_delete_confirmation" msgid="2564172328268885394">"Les contacts sélectionnés seront supprimés."</string>
+    <string name="batch_delete_read_only_contact_confirmation" msgid="6614878716815412523">"Les renseignements provenant de comptes en lecture seule seront cachés dans vos listes de contacts, pas supprimés."</string>
+    <string name="batch_delete_multiple_accounts_confirmation" msgid="5189722181586680185">"Ces contacts contiennent des renseignements provenant de plusieurs comptes. Les renseignements de comptes en lecture seule seront cachés dans vos listes de contacts, pas supprimés."</string>
     <string name="multipleContactDeleteConfirmation" msgid="938900978442960800">"La suppression de ce contact entraînera celle d\'informations provenant de plusieurs comptes."</string>
     <string name="deleteConfirmation" msgid="811706994761610640">"Ce contact sera supprimé."</string>
     <string name="menu_discard" msgid="6854657936970228164">"Supprimer les modifications"</string>
@@ -94,20 +101,20 @@
     <string name="contactSavedErrorToast" msgid="3207250533172944892">"Impossible d\'enregistrer les modifications apportées au contact."</string>
     <string name="groupSavedToast" msgid="1168756874239833756">"Groupe enregistré"</string>
     <string name="groupSavedErrorToast" msgid="7984466936615304740">"Impossible d\'enregistrer les modifications apportées au groupe."</string>
-  <plurals name="listTotalPhoneContacts">
-    <item quantity="one" msgid="3015357862286673986">"1 contact avec numéro de téléphone"</item>
-    <item quantity="other" msgid="3299954047880968205">"<xliff:g id="COUNT">%d</xliff:g> contacts avec des numéros de téléphone"</item>
-  </plurals>
+    <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>
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> contacts avec un numéro de téléphone</item>
+    </plurals>
     <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"Aucun contact disposant d\'un numéro de téléphone"</string>
-  <plurals name="listFoundAllContacts">
-    <item quantity="one" msgid="5517063038754171134">"1 contact trouvé"</item>
-    <item quantity="other" msgid="3852668542926965042">"<xliff:g id="COUNT">%d</xliff:g> contacts trouvés"</item>
-  </plurals>
+    <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
+      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> résultat</item>
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> résultats</item>
+    </plurals>
     <string name="listFoundAllContactsZero" msgid="922980883593159444">"Aucun contact"</string>
-  <plurals name="searchFoundContacts">
-    <item quantity="one" msgid="4826918429708286628">"1 contact trouvé"</item>
-    <item quantity="other" msgid="7988132539476575389">"<xliff:g id="COUNT">%d</xliff:g> contacts trouvés"</item>
-  </plurals>
+    <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
+      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> résultat</item>
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> résultats</item>
+    </plurals>
     <string name="all_contacts_tab_label" msgid="6250372293594147703">"Tous les contacts"</string>
     <string name="favorites_tab_label" msgid="1524869648904016414">"Favoris"</string>
     <string name="callBack" msgid="5498224409038809224">"Rappeler"</string>
@@ -144,9 +151,6 @@
     <string name="pick_new_photo" msgid="9122450996263688237">"Sélectionner une nouvelle photo"</string>
     <string name="locale_change_in_progress" msgid="7583992153091537467">"Mise à jour de la liste des contacts en cours suite au changement de langue"</string>
     <string name="upgrade_in_progress" msgid="474511436863451061">"La liste de contacts est en cours de mise à jour."</string>
-    <string name="upgrade_out_of_memory" msgid="1209994418877625940">"Les contacts font actuellement l\'objet d\'une mise à jour.\n\nCette opération nécessite environ <xliff:g id="SIZE_IN_MEGABYTES">%s</xliff:g> Mo de mémoire de stockage interne.\n\nVeuillez sélectionner l\'une des options suivantes :"</string>
-    <string name="upgrade_out_of_memory_uninstall" msgid="1721798828992091432">"Désinstaller certaines applications"</string>
-    <string name="upgrade_out_of_memory_retry" msgid="8431289830472724609">"Réessayer la mise à jour"</string>
     <string name="search_results_searching" msgid="3984833028938569930">"Recherche en cours..."</string>
     <string name="menu_display_selected" msgid="6470001164297969034">"Afficher la sélection"</string>
     <string name="menu_display_all" msgid="8887488642609786198">"Tout afficher"</string>
@@ -160,10 +164,10 @@
     <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>
-  <plurals name="merge_info">
-    <item quantity="one" msgid="148365587896371969">"1 contact non fusionné"</item>
-    <item quantity="other" msgid="425683718017380845">"fusionné à partir de <xliff:g id="COUNT">%0$d</xliff:g> sources"</item>
-  </plurals>
+    <plurals name="merge_info" formatted="false" msgid="2489323424994280962">
+      <item quantity="one">fusionné à partir de <xliff:g id="COUNT">%0$d</xliff:g> source</item>
+      <item quantity="other">fusionné à partir de <xliff:g id="COUNT">%0$d</xliff:g> sources</item>
+    </plurals>
     <string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"Associer ce contact au contact sélectionné?"</string>
     <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Modifier le contact sélectionné? Les informations saisies jusqu\'ici seront copiées."</string>
     <string name="menu_copyContact" msgid="1573960845106822639">"Copier dans \"Mes contacts\""</string>
@@ -172,7 +176,7 @@
     <string name="list_filter_custom" msgid="8910173055702057002">"Personnaliser"</string>
     <string name="activity_title_settings" msgid="5464130076132770781">"Paramètres"</string>
     <string name="menu_settings" msgid="377929915873428211">"Paramètres"</string>
-    <string name="menu_help" msgid="5123887102216637725">"Aide"</string>
+    <string name="menu_help" msgid="1680178646764069976">"Aide et commentaires"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"Options d\'affichage"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="non_phone_caption" msgid="1541655052330027380">"Numéro de téléphone"</string>
@@ -188,19 +192,19 @@
     <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Téléverser des contacts"</string>
     <string name="create_group_dialog_title" msgid="6874527142828424475">"Créer un groupe"</string>
     <string name="create_group_item_label" msgid="4411981763169654825">"Créer un groupe"</string>
-  <plurals name="num_groups_in_account">
-    <item quantity="one" msgid="2944819210288517794">"Un groupe"</item>
-    <item quantity="other" msgid="1276758425904917367">"<xliff:g id="COUNT">%0$d</xliff:g> groupes"</item>
-  </plurals>
+    <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
+      <item quantity="one"><xliff:g id="COUNT">%0$d</xliff:g> groupe</item>
+      <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> groupes</item>
+    </plurals>
     <string name="delete_group_dialog_message" msgid="7586856514337560529">"Supprimer le groupe \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\"? Les contacts ne seront pas supprimés."</string>
-  <plurals name="num_contacts_in_group">
-    <item quantity="one" msgid="1352418549951013448">"<xliff:g id="COUNT_0">%1$d</xliff:g> contact dans <xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>"</item>
-    <item quantity="other" msgid="8146027769011086349">"<xliff:g id="COUNT_0">%1$d</xliff:g> contacts dans <xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>"</item>
-  </plurals>
-  <plurals name="group_list_num_contacts_in_group">
-    <item quantity="one" msgid="3323065321661972446">"<xliff:g id="COUNT">%1$d</xliff:g> contact"</item>
-    <item quantity="other" msgid="6251996206137048525">"<xliff:g id="COUNT">%1$d</xliff:g> personne(s)"</item>
-  </plurals>
+    <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
+      <item quantity="one"><xliff:g id="COUNT_2">%1$d</xliff:g> personne à partir de <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> personnes à partir de <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
+    </plurals>
+    <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
+      <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> personne</item>
+      <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> personnes</item>
+    </plurals>
     <string name="toast_join_with_empty_contact" msgid="2238581529864542985">"Saisissez le nom du contact avant de l\'associer à un autre."</string>
     <string name="copy_text" msgid="3257145021583508761">"Copier dans le presse-papiers"</string>
     <string name="set_default" msgid="4417505153468300351">"Définir par défaut"</string>
@@ -264,4 +268,5 @@
     <string name="content_description_recent_call" msgid="5183800406316723676">"Appel récent : <xliff:g id="CALL_TYPE">%s</xliff:g>, <xliff:g id="PHONE_NUMBER">%s</xliff:g>, <xliff:g id="DATE">%s</xliff:g>. Touchez l\'écran pour rappeler ce numéro."</string>
     <string name="message_from_you_prefix" msgid="7180706529908434482">"Vous : <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
     <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"Google Hangout fonctionne mieux lorsque vous entrez l\'identifiant Hangout de la personne dans le champ de l\'adresse de courriel ou du numéro de téléphone."</string>
+    <string name="compact_editor_more_fields" msgid="2874181192382284115">"Autres champs"</string>
 </resources>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index 5e9ca3b..28b06f3 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -46,6 +46,7 @@
     <string name="description_action_menu_add_star" msgid="3327186327234177456">"Ajouté aux favoris"</string>
     <string name="menu_editContact" msgid="9042415603857662633">"Modifier"</string>
     <string name="menu_deleteContact" msgid="6788644058868189393">"Supprimer"</string>
+    <string name="menu_change_photo" msgid="7769177631511496210">"Changer de photo"</string>
     <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Placer sur l\'écran d\'accueil"</string>
     <string name="menu_call" msgid="3992595586042260618">"Appeler le contact"</string>
     <string name="menu_sendSMS" msgid="5535886767547006515">"Envoyer un SMS au contact"</string>
@@ -56,17 +57,23 @@
     <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Ajouter un groupe"</string>
     <string name="splitConfirmation_title" msgid="633640935430370530">"Séparer le contact ?"</string>
     <string name="splitConfirmation" msgid="740190210499587175">"Ce contact va être séparé en plusieurs contacts."</string>
-    <string name="menu_joinAggregate" msgid="5027981918265667970">"Joindre"</string>
+    <string name="menu_joinAggregate" msgid="4050157483569357666">"Fusionner"</string>
     <string name="titleJoinContactDataWith" msgid="7684875775798635354">"Joindre les contacts"</string>
     <string name="blurbJoinContactDataWith" msgid="8736488417422708236">"Sélectionnez le contact que vous voulez associer à \"<xliff:g id="NAME">%s</xliff:g>\" :"</string>
     <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Afficher tous les contacts"</string>
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Contacts suggérés"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Tous les contacts"</string>
-    <string name="contactsJoinedMessage" msgid="7208148163607047389">"Contacts joints"</string>
+    <string name="contactsJoinedMessage" msgid="656936718666768589">"Les contacts ont bien été fusionnés."</string>
+    <string name="contacts_deleted_toast" msgid="286851430992788215">"Les contacts ont bien été supprimés."</string>
     <string name="menu_set_ring_tone" msgid="8728345772068064946">"Régler sonnerie"</string>
     <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Tous appels vers messag. voc."</string>
     <string name="readOnlyContactWarning" msgid="7808825687289848259">"Impossible de supprimer les contacts des comptes en lecture seule. Vous pouvez les masquer dans la liste des contacts."</string>
     <string name="readOnlyContactDeleteConfirmation" msgid="2137170726670196909">"Ce contact contient des informations provenant de plusieurs comptes. Vous pouvez masquer dans votre liste de contacts les informations des comptes en lecture seule, mais pas les supprimer."</string>
+    <string name="batch_merge_single_contact_warning" msgid="982585201970392110">"Vous ne pouvez pas fusionner un seul et même contact. Veuillez en sélectionner au moins deux."</string>
+    <string name="batch_merge_confirmation" msgid="8551299480317422420">"Les contacts sélectionnés vont être fusionnés pour que former qu\'un seul contact."</string>
+    <string name="batch_delete_confirmation" msgid="2564172328268885394">"Les contacts sélectionnés vont être supprimés."</string>
+    <string name="batch_delete_read_only_contact_confirmation" msgid="6614878716815412523">"Les informations issues de comptes en lecture seule seront masquées dans vos listes de contacts, mais pas supprimées."</string>
+    <string name="batch_delete_multiple_accounts_confirmation" msgid="5189722181586680185">"Ces contacts contiennent des informations provenant de plusieurs comptes. Les informations issues de comptes en lecture seule seront masquées dans vos listes de contacts, mais pas supprimées."</string>
     <string name="multipleContactDeleteConfirmation" msgid="938900978442960800">"La suppression de ce contact entraînera celle d\'informations provenant de plusieurs comptes."</string>
     <string name="deleteConfirmation" msgid="811706994761610640">"Ce contact sera supprimé."</string>
     <string name="menu_discard" msgid="6854657936970228164">"Supprimer les modifications"</string>
@@ -94,20 +101,20 @@
     <string name="contactSavedErrorToast" msgid="3207250533172944892">"Impossible d\'enregistrer les modifications apportées au contact."</string>
     <string name="groupSavedToast" msgid="1168756874239833756">"Groupe enregistré"</string>
     <string name="groupSavedErrorToast" msgid="7984466936615304740">"Impossible d\'enregistrer les modifications apportées au groupe."</string>
-  <plurals name="listTotalPhoneContacts">
-    <item quantity="one" msgid="3015357862286673986">"1 contact avec numéro de téléphone"</item>
-    <item quantity="other" msgid="3299954047880968205">"<xliff:g id="COUNT">%d</xliff:g> contacts avec des n° de téléphone"</item>
-  </plurals>
+    <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>
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> contacts avec numéro de téléphone</item>
+    </plurals>
     <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"Aucun contact disposant d\'un numéro de téléphone"</string>
-  <plurals name="listFoundAllContacts">
-    <item quantity="one" msgid="5517063038754171134">"1 contact trouvé"</item>
-    <item quantity="other" msgid="3852668542926965042">"<xliff:g id="COUNT">%d</xliff:g> contact(s) trouvé(s)"</item>
-  </plurals>
+    <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
+      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> contact trouvé</item>
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> contacts trouvés</item>
+    </plurals>
     <string name="listFoundAllContactsZero" msgid="922980883593159444">"Aucun contact"</string>
-  <plurals name="searchFoundContacts">
-    <item quantity="one" msgid="4826918429708286628">"1 contact trouvé"</item>
-    <item quantity="other" msgid="7988132539476575389">"<xliff:g id="COUNT">%d</xliff:g> contact(s) trouvé(s)"</item>
-  </plurals>
+    <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
+      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> contact trouvé</item>
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> contacts trouvés</item>
+    </plurals>
     <string name="all_contacts_tab_label" msgid="6250372293594147703">"Tous contacts"</string>
     <string name="favorites_tab_label" msgid="1524869648904016414">"Favoris"</string>
     <string name="callBack" msgid="5498224409038809224">"Rappeler"</string>
@@ -144,9 +151,6 @@
     <string name="pick_new_photo" msgid="9122450996263688237">"Sélectionner une nouvelle photo"</string>
     <string name="locale_change_in_progress" msgid="7583992153091537467">"Mise à jour de la liste des contacts en cours suite au changement de langue."</string>
     <string name="upgrade_in_progress" msgid="474511436863451061">"La liste de contacts est en cours de mise à jour."</string>
-    <string name="upgrade_out_of_memory" msgid="1209994418877625940">"Les contacts font actuellement l\'objet d\'une mise à jour.\n\nCette opération nécessite environ <xliff:g id="SIZE_IN_MEGABYTES">%s</xliff:g> Mo de mémoire de stockage interne.\n\nVeuillez sélectionner l\'une des options suivantes :"</string>
-    <string name="upgrade_out_of_memory_uninstall" msgid="1721798828992091432">"Désinstaller certaines applications"</string>
-    <string name="upgrade_out_of_memory_retry" msgid="8431289830472724609">"Réessayer la mise à niveau"</string>
     <string name="search_results_searching" msgid="3984833028938569930">"Recherche…"</string>
     <string name="menu_display_selected" msgid="6470001164297969034">"Afficher la sélection"</string>
     <string name="menu_display_all" msgid="8887488642609786198">"Tout afficher"</string>
@@ -160,10 +164,10 @@
     <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>
-  <plurals name="merge_info">
-    <item quantity="one" msgid="148365587896371969">"1 contact non fusionné"</item>
-    <item quantity="other" msgid="425683718017380845">"1 contact fusionné à partir de <xliff:g id="COUNT">%0$d</xliff:g> sources"</item>
-  </plurals>
+    <plurals name="merge_info" formatted="false" msgid="2489323424994280962">
+      <item quantity="one">contact fusionné à partir de <xliff:g id="COUNT">%0$d</xliff:g> source</item>
+      <item quantity="other">contacts fusionnés à partir de <xliff:g id="COUNT">%0$d</xliff:g> sources</item>
+    </plurals>
     <string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"Associer ce contact au contact sélectionné ?"</string>
     <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Modifier le contact sélectionné ? Les informations saisies jusqu\'ici seront copiées."</string>
     <string name="menu_copyContact" msgid="1573960845106822639">"Copier dans \"Mes contacts\""</string>
@@ -172,7 +176,7 @@
     <string name="list_filter_custom" msgid="8910173055702057002">"Personnalisé"</string>
     <string name="activity_title_settings" msgid="5464130076132770781">"Paramètres"</string>
     <string name="menu_settings" msgid="377929915873428211">"Paramètres"</string>
-    <string name="menu_help" msgid="5123887102216637725">"Aide"</string>
+    <string name="menu_help" msgid="1680178646764069976">"Aide et commentaires"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"Options d\'affichage"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="non_phone_caption" msgid="1541655052330027380">"Numéro de téléphone"</string>
@@ -188,19 +192,19 @@
     <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Importer des contacts"</string>
     <string name="create_group_dialog_title" msgid="6874527142828424475">"Créer un groupe"</string>
     <string name="create_group_item_label" msgid="4411981763169654825">"Créer un groupe"</string>
-  <plurals name="num_groups_in_account">
-    <item quantity="one" msgid="2944819210288517794">"Un groupe"</item>
-    <item quantity="other" msgid="1276758425904917367">"<xliff:g id="COUNT">%0$d</xliff:g> groupes"</item>
-  </plurals>
+    <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
+      <item quantity="one"><xliff:g id="COUNT">%0$d</xliff:g> groupe</item>
+      <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> groupes</item>
+    </plurals>
     <string name="delete_group_dialog_message" msgid="7586856514337560529">"Supprimer le groupe \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\" ? Les contacts ne seront pas supprimés."</string>
-  <plurals name="num_contacts_in_group">
-    <item quantity="one" msgid="1352418549951013448">"<xliff:g id="COUNT_0">%1$d</xliff:g> contact dans <xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>"</item>
-    <item quantity="other" msgid="8146027769011086349">"<xliff:g id="COUNT_0">%1$d</xliff:g> contacts dans <xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>"</item>
-  </plurals>
-  <plurals name="group_list_num_contacts_in_group">
-    <item quantity="one" msgid="3323065321661972446">"<xliff:g id="COUNT">%1$d</xliff:g> contact"</item>
-    <item quantity="other" msgid="6251996206137048525">"<xliff:g id="COUNT">%1$d</xliff:g> personnes"</item>
-  </plurals>
+    <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
+      <item quantity="one"><xliff:g id="COUNT_2">%1$d</xliff:g> contact dans <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> contacts dans <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
+    </plurals>
+    <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
+      <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> contact</item>
+      <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> contacts</item>
+    </plurals>
     <string name="toast_join_with_empty_contact" msgid="2238581529864542985">"Saisissez le nom du contact avant de l\'associer à un autre."</string>
     <string name="copy_text" msgid="3257145021583508761">"Copier dans le presse-papiers"</string>
     <string name="set_default" msgid="4417505153468300351">"Définir par défaut"</string>
@@ -264,4 +268,5 @@
     <string name="content_description_recent_call" msgid="5183800406316723676">"Appel récent : <xliff:g id="CALL_TYPE">%s</xliff:g>, <xliff:g id="PHONE_NUMBER">%s</xliff:g>, <xliff:g id="DATE">%s</xliff:g>. Appuyez sur l\'écran pour rappeler ce numéro."</string>
     <string name="message_from_you_prefix" msgid="7180706529908434482">"Vous : <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
     <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"Les Hangouts fonctionnent mieux si vous saisissez l\'identifiant Hangouts de la personne concernée dans le champ de l\'adresse e-mail ou du numéro de téléphone."</string>
+    <string name="compact_editor_more_fields" msgid="2874181192382284115">"Autres champs"</string>
 </resources>
diff --git a/res/values-gl-rES/strings.xml b/res/values-gl-rES/strings.xml
index e050004..ca6fadf 100644
--- a/res/values-gl-rES/strings.xml
+++ b/res/values-gl-rES/strings.xml
@@ -46,6 +46,7 @@
     <string name="description_action_menu_add_star" msgid="3327186327234177456">"Engadido a favoritos"</string>
     <string name="menu_editContact" msgid="9042415603857662633">"Editar"</string>
     <string name="menu_deleteContact" msgid="6788644058868189393">"Eliminar"</string>
+    <string name="menu_change_photo" msgid="7769177631511496210">"Cambiar foto"</string>
     <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Colocar na pantalla de inicio"</string>
     <string name="menu_call" msgid="3992595586042260618">"Chamar ao contacto"</string>
     <string name="menu_sendSMS" msgid="5535886767547006515">"Enviar mensaxe ao contacto"</string>
@@ -56,17 +57,23 @@
     <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Engadir grupo"</string>
     <string name="splitConfirmation_title" msgid="633640935430370530">"Separar contacto?"</string>
     <string name="splitConfirmation" msgid="740190210499587175">"Este contacto separarase en varios contactos."</string>
-    <string name="menu_joinAggregate" msgid="5027981918265667970">"Unirse"</string>
+    <string name="menu_joinAggregate" msgid="4050157483569357666">"Combinar"</string>
     <string name="titleJoinContactDataWith" msgid="7684875775798635354">"Unir contactos"</string>
     <string name="blurbJoinContactDataWith" msgid="8736488417422708236">"Escolle o contacto que queres unir con <xliff:g id="NAME">%s</xliff:g>:"</string>
     <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Mostrar todos os contactos"</string>
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Contactos suxeridos"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Todos os contactos"</string>
-    <string name="contactsJoinedMessage" msgid="7208148163607047389">"Contactos unidos"</string>
+    <string name="contactsJoinedMessage" msgid="656936718666768589">"Contactos combinados"</string>
+    <string name="contacts_deleted_toast" msgid="286851430992788215">"Contactos eliminados"</string>
     <string name="menu_set_ring_tone" msgid="8728345772068064946">"Definir ton"</string>
     <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Todas as chamadas a correo voz"</string>
     <string name="readOnlyContactWarning" msgid="7808825687289848259">"Non podes eliminar contactos das contas de só lectura, pero podes ocultalos nas túas listas de contactos."</string>
     <string name="readOnlyContactDeleteConfirmation" msgid="2137170726670196909">"Este contacto contén información de varias contas. A información das contas de só lectura ocultarase nas túas listas de contactos, non se eliminará."</string>
+    <string name="batch_merge_single_contact_warning" msgid="982585201970392110">"Necesitas seleccionar polo menos dous contactos para poder combinalos."</string>
+    <string name="batch_merge_confirmation" msgid="8551299480317422420">"Os contactos seleccionados combinaranse nun só."</string>
+    <string name="batch_delete_confirmation" msgid="2564172328268885394">"Eliminaranse os contactos seleccionados."</string>
+    <string name="batch_delete_read_only_contact_confirmation" msgid="6614878716815412523">"A información das contas de só lectura ocultarase nas túas listas de contactos, non se eliminará."</string>
+    <string name="batch_delete_multiple_accounts_confirmation" msgid="5189722181586680185">"Estes contactos conteñen información de varias contas. A información das contas de só lectura ocultarase nas túas listas de contactos, non se eliminará."</string>
     <string name="multipleContactDeleteConfirmation" msgid="938900978442960800">"A eliminación deste contacto eliminará información de varias contas."</string>
     <string name="deleteConfirmation" msgid="811706994761610640">"Eliminarase este contacto."</string>
     <string name="menu_discard" msgid="6854657936970228164">"Descartar cambios"</string>
@@ -94,20 +101,20 @@
     <string name="contactSavedErrorToast" msgid="3207250533172944892">"Non se puideron gardar os cambios nos contactos."</string>
     <string name="groupSavedToast" msgid="1168756874239833756">"Grupo gardado"</string>
     <string name="groupSavedErrorToast" msgid="7984466936615304740">"Non se puideron gardar os cambios no grupo."</string>
-  <plurals name="listTotalPhoneContacts">
-    <item quantity="one" msgid="3015357862286673986">"1 contacto con número de teléfono"</item>
-    <item quantity="other" msgid="3299954047880968205">"<xliff:g id="COUNT">%d</xliff:g> contactos con números de teléfono"</item>
-  </plurals>
+    <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>
+      <item quantity="one">Un contacto con número de teléfono</item>
+    </plurals>
     <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"Ningún contacto ten número de teléfono"</string>
-  <plurals name="listFoundAllContacts">
-    <item quantity="one" msgid="5517063038754171134">"1 encontrado"</item>
-    <item quantity="other" msgid="3852668542926965042">"<xliff:g id="COUNT">%d</xliff:g> encontrados"</item>
-  </plurals>
+    <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> contactos encontrados</item>
+      <item quantity="one">Un contacto encontrado</item>
+    </plurals>
     <string name="listFoundAllContactsZero" msgid="922980883593159444">"Sen contactos"</string>
-  <plurals name="searchFoundContacts">
-    <item quantity="one" msgid="4826918429708286628">"1 encontrado"</item>
-    <item quantity="other" msgid="7988132539476575389">"<xliff:g id="COUNT">%d</xliff:g> encontrados"</item>
-  </plurals>
+    <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> contactos encontrados</item>
+      <item quantity="one">Un contacto encontrado</item>
+    </plurals>
     <string name="all_contacts_tab_label" msgid="6250372293594147703">"Contactos"</string>
     <string name="favorites_tab_label" msgid="1524869648904016414">"Favoritos"</string>
     <string name="callBack" msgid="5498224409038809224">"Devolver chamada"</string>
@@ -144,9 +151,6 @@
     <string name="pick_new_photo" msgid="9122450996263688237">"Seleccionar nova foto"</string>
     <string name="locale_change_in_progress" msgid="7583992153091537467">"Estase actualizando a lista de contactos para reflectir o cambio de idioma."</string>
     <string name="upgrade_in_progress" msgid="474511436863451061">"Estase actualizando a lista de contactos."</string>
-    <string name="upgrade_out_of_memory" msgid="1209994418877625940">"Estanse actualizando os contactos. \n\nO proceso de actualización precisa aproximadamente <xliff:g id="SIZE_IN_MEGABYTES">%s</xliff:g> MB de almacenamento interno.\n\nEscolle unha das seguintes opcións:"</string>
-    <string name="upgrade_out_of_memory_uninstall" msgid="1721798828992091432">"Desinstalar algunhas aplicacións"</string>
-    <string name="upgrade_out_of_memory_retry" msgid="8431289830472724609">"Reintentar actualización"</string>
     <string name="search_results_searching" msgid="3984833028938569930">"Buscando..."</string>
     <string name="menu_display_selected" msgid="6470001164297969034">"Mostrar selección"</string>
     <string name="menu_display_all" msgid="8887488642609786198">"Mostrar todo"</string>
@@ -160,10 +164,10 @@
     <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>
-  <plurals name="merge_info">
-    <item quantity="one" msgid="148365587896371969">"non combinados"</item>
-    <item quantity="other" msgid="425683718017380845">"combinados a partir de <xliff:g id="COUNT">%0$d</xliff:g> fontes"</item>
-  </plurals>
+    <plurals name="merge_info" formatted="false" msgid="2489323424994280962">
+      <item quantity="other">combinados de <xliff:g id="COUNT">%0$d</xliff:g> fontes</item>
+      <item quantity="one">non combinado</item>
+    </plurals>
     <string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"Queres unir o contacto actual coa conta seleccionada?"</string>
     <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Cambiar para editar o contacto seleccionado? Copiarase a información introducida ata o momento."</string>
     <string name="menu_copyContact" msgid="1573960845106822639">"Copiar en Os meus contactos"</string>
@@ -172,7 +176,7 @@
     <string name="list_filter_custom" msgid="8910173055702057002">"Personalizados"</string>
     <string name="activity_title_settings" msgid="5464130076132770781">"Configuración"</string>
     <string name="menu_settings" msgid="377929915873428211">"Configuración"</string>
-    <string name="menu_help" msgid="5123887102216637725">"Axuda"</string>
+    <string name="menu_help" msgid="1680178646764069976">"Axuda e opinión"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"Opcións de visualización"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="non_phone_caption" msgid="1541655052330027380">"Número de teléfono"</string>
@@ -188,19 +192,19 @@
     <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Importar contactos"</string>
     <string name="create_group_dialog_title" msgid="6874527142828424475">"Crear novo grupo"</string>
     <string name="create_group_item_label" msgid="4411981763169654825">"Crear novo grupo"</string>
-  <plurals name="num_groups_in_account">
-    <item quantity="one" msgid="2944819210288517794">"1 grupo"</item>
-    <item quantity="other" msgid="1276758425904917367">"<xliff:g id="COUNT">%0$d</xliff:g> grupos"</item>
-  </plurals>
+    <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
+      <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> grupos</item>
+      <item quantity="one">Un grupo</item>
+    </plurals>
     <string name="delete_group_dialog_message" msgid="7586856514337560529">"Queres eliminar o grupo \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\"? (Os contactos non se eliminarán)."</string>
-  <plurals name="num_contacts_in_group">
-    <item quantity="one" msgid="1352418549951013448">"<xliff:g id="COUNT_0">%1$d</xliff:g> persoa de <xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>"</item>
-    <item quantity="other" msgid="8146027769011086349">"<xliff:g id="COUNT_0">%1$d</xliff:g> persoas de <xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>"</item>
-  </plurals>
-  <plurals name="group_list_num_contacts_in_group">
-    <item quantity="one" msgid="3323065321661972446">"<xliff:g id="COUNT">%1$d</xliff:g> persoa"</item>
-    <item quantity="other" msgid="6251996206137048525">"<xliff:g id="COUNT">%1$d</xliff:g> persoas"</item>
-  </plurals>
+    <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> persoas de <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> persoa de <xliff:g id="ACCOUNT_TYPE_1">%2$s</xliff:g></item>
+    </plurals>
+    <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
+      <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> persoas</item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> persoa</item>
+    </plurals>
     <string name="toast_join_with_empty_contact" msgid="2238581529864542985">"Escribe o nome do contacto antes de unilo con outro."</string>
     <string name="copy_text" msgid="3257145021583508761">"Copiar no portapapeis"</string>
     <string name="set_default" msgid="4417505153468300351">"Definir como predeterminado"</string>
@@ -264,4 +268,5 @@
     <string name="content_description_recent_call" msgid="5183800406316723676">"chamada recente. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. fai clic para devolver a chamada"</string>
     <string name="message_from_you_prefix" msgid="7180706529908434482">"Ti: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
     <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"Hangouts funciona mellor se introduces o identificador de Hangouts da persoa no campo do correo electrónico ou do teléfono."</string>
+    <string name="compact_editor_more_fields" msgid="2874181192382284115">"Máis campos"</string>
 </resources>
diff --git a/res/values-gu-rIN/strings.xml b/res/values-gu-rIN/strings.xml
new file mode 100644
index 0000000..95dad17
--- /dev/null
+++ b/res/values-gu-rIN/strings.xml
@@ -0,0 +1,272 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2006 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+ -->
+
+<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="contactsList" msgid="8661624236494819731">"સંપર્કો"</string>
+    <string name="shortcutContact" msgid="749243779392912958">"સંપર્ક"</string>
+    <string name="shortcutDialContact" msgid="746622101599186779">"સીધું જ ડાયલ"</string>
+    <string name="shortcutMessageContact" msgid="2460337253595976198">"સીધો જ સંદેશ"</string>
+    <string name="shortcutActivityTitle" msgid="6642877210643565436">"સંપર્ક શોર્ટકટ પસંદ કરો"</string>
+    <string name="callShortcutActivityTitle" msgid="6065749861423648991">"કૉલ કરવા માટે નંબર પસંદ કરો"</string>
+    <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"સંદેશ કરવા માટે નંબર પસંદ કરો"</string>
+    <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"સંપર્કમાં ઉમેરો"</string>
+    <string name="contactPickerActivityTitle" msgid="4301062192337417640">"સંપર્ક પસંદ કરો"</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="editGroupDescription" msgid="6321161304201540561">"જૂથ સંપાદિત કરો"</string>
+    <string name="insertGroupDescription" msgid="5658512271662210139">"જૂથ બનાવો"</string>
+    <string name="contactDetailAbout" msgid="5430408883907061400">"વિશે"</string>
+    <string name="contactDetailUpdates" msgid="3780588624763446941">"અપડેટ્સ"</string>
+    <string name="searchHint" msgid="8482945356247760701">"સંપર્કો શોધો"</string>
+    <string name="menu_viewContact" msgid="2795575601596468581">"સંપર્ક જુઓ"</string>
+    <string name="menu_addStar" msgid="2908478235715404876">"મનપસંદમાં ઉમેરો"</string>
+    <string name="menu_removeStar" msgid="5844227078364227030">"મનપસંદમાંથી દૂર કરો"</string>
+    <string name="description_action_menu_remove_star" msgid="4699640108012265178">"મનપસંદમાંથી દૂર કર્યું"</string>
+    <string name="description_action_menu_add_star" msgid="3327186327234177456">"મનપસંદમાં ઉમેર્યું"</string>
+    <string name="menu_editContact" msgid="9042415603857662633">"સંપાદન"</string>
+    <string name="menu_deleteContact" msgid="6788644058868189393">"કાઢી નાખો"</string>
+    <string name="menu_change_photo" msgid="7769177631511496210">"ફોટો બદલો"</string>
+    <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"હોમ સ્ક્રીન પર સ્થાન"</string>
+    <string name="menu_call" msgid="3992595586042260618">"સંપર્કને કૉલ કરો"</string>
+    <string name="menu_sendSMS" msgid="5535886767547006515">"સંપર્કને ટેક્સ્ટ કરો"</string>
+    <string name="menu_splitAggregate" msgid="8368636463748691868">"અલગ કરો"</string>
+    <string name="menu_editGroup" msgid="5062005185370983720">"સંપાદન"</string>
+    <string name="menu_deleteGroup" msgid="3486380004411482874">"કાઢી નાખો"</string>
+    <string name="menu_new_contact_action_bar" msgid="7263362129442119188">"સંપર્ક ઉમેરો"</string>
+    <string name="menu_new_group_action_bar" msgid="3520232877587377175">"જૂથ ઉમેરો"</string>
+    <string name="splitConfirmation_title" msgid="633640935430370530">"સંપર્ક અલગ કરીએ?"</string>
+    <string name="splitConfirmation" msgid="740190210499587175">"આ સંપર્ક બહુવિધ સંપર્કોમાં અલગ કરવામાં આવશે."</string>
+    <string name="menu_joinAggregate" msgid="4050157483569357666">"મર્જ કરો"</string>
+    <string name="titleJoinContactDataWith" msgid="7684875775798635354">"સંપર્કો જોડો"</string>
+    <string name="blurbJoinContactDataWith" msgid="8736488417422708236">"તમે <xliff:g id="NAME">%s</xliff:g> ને જેની સાથે જોડવા માગો છો તે સંપર્ક:"</string>
+    <string name="showAllContactsJoinItem" msgid="2189695051430392383">"તમામ સંપર્કો દર્શાવો"</string>
+    <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"સૂચવેલા સંપર્કો"</string>
+    <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"તમામ સંપર્કો"</string>
+    <string name="contactsJoinedMessage" msgid="656936718666768589">"સંપર્કો મર્જ કર્યા"</string>
+    <string name="contacts_deleted_toast" msgid="286851430992788215">"સંપર્કો કાઢી નાખ્યા"</string>
+    <string name="menu_set_ring_tone" msgid="8728345772068064946">"રિંગટોન સેટ કરો"</string>
+    <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"વૉઇસમેઇલ પરના બધા કૉલ્સ"</string>
+    <string name="readOnlyContactWarning" msgid="7808825687289848259">"તમે ફક્ત-વાંચવા માટેના એકાઉન્ટ્સમાંથી સંપર્કોને કાઢી નાખી શકતાં નથી, પરંતુ તમે તેમને તમારા સંપર્કોની સૂચિઓમાં છુપાવી શકો છો."</string>
+    <string name="readOnlyContactDeleteConfirmation" msgid="2137170726670196909">"આ સંપર્કમાં બહુવિધ એકાઉન્ટ્સની માહિતી શામેલ છે. ફક્ત-વાંચવા માટેના એકાઉન્ટ્સની માહિતી તમારા સંપર્કોમાંથી છુપાવવામાં આવશે, ન કે કાઢી નાંખવામાં."</string>
+    <string name="batch_merge_single_contact_warning" msgid="982585201970392110">"મર્જ કરવા માટે તમારે ઓછામાં ઓછા બે પસંદ કરેલા સંપર્કોની જરૂર છે."</string>
+    <string name="batch_merge_confirmation" msgid="8551299480317422420">"પસંદ કરેલા સંપર્કોને એકલ સંપર્કમાં મર્જ કરવામાં આવશે."</string>
+    <string name="batch_delete_confirmation" msgid="2564172328268885394">"પસંદ કરેલા સંપર્કો કાઢી નાખવામાં આવશે."</string>
+    <string name="batch_delete_read_only_contact_confirmation" msgid="6614878716815412523">"ફક્ત-વાંચવા માટેના એકાઉન્ટ્સની માહિતી તમારા સંપર્કોની સૂચિમાંથી છુપાવવામાં આવશે, ન કે કાઢી નાંખવામાં."</string>
+    <string name="batch_delete_multiple_accounts_confirmation" msgid="5189722181586680185">"આ સંપર્કોમાં બહુવિધ એકાઉન્ટ્સની માહિતી શામેલ છે. ફક્ત-વાંચવા માટેના એકાઉન્ટ્સની માહિતી તમારા સંપર્કોની સૂચિમાંથી છુપાવવામાં આવશે, ન કે કાઢી નાંખવામાં."</string>
+    <string name="multipleContactDeleteConfirmation" msgid="938900978442960800">"આ સંપર્કને કાઢી નાખવું બહુવિધ એકાઉન્ટ્સમાંથી માહિતી કાઢી નાખશે."</string>
+    <string name="deleteConfirmation" msgid="811706994761610640">"આ સંપર્ક કાઢી નાખવામાં આવશે."</string>
+    <string name="menu_discard" msgid="6854657936970228164">"ફેરફારો છોડી દો"</string>
+    <string name="invalidContactMessage" msgid="8215051456181842274">"સંપર્ક અસ્તિત્વમાં નથી."</string>
+    <string name="createContactShortcutSuccessful" msgid="7874133287558150877">"હોમ સ્ક્રીન પર સંપર્ક વિજેટ ઉમેર્યું."</string>
+    <string name="pickerNewContactHeader" msgid="7750705279843568147">"નવો સંપર્ક બનાવો"</string>
+    <string name="pickerNewContactText" msgid="6166997164401048211">"નવો સંપર્ક બનાવો"</string>
+  <string-array name="otherLabels">
+    <item msgid="8287841928119937597">"સંગઠન"</item>
+    <item msgid="7196592230748086755">"નોંધ"</item>
+  </string-array>
+    <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"ટેબ્લેટ પર કોઈ ચિત્રો ઉપલબ્ધ નથી."</string>
+    <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"ફોન પર કોઈ ચિત્રો ઉપલબ્ધ નથી."</string>
+    <string name="attach_photo_dialog_title" msgid="5599827035558557169">"સંપર્ક ફોટો"</string>
+    <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="8579310973261953559">"કોઈ સંપર્કો નથી."</string>
+    <string name="noGroups" msgid="8614664663561385253">"કોઈ જૂથ નથી."</string>
+    <string name="noAccounts" msgid="7768267764545265909">"જૂથો બનાવવા માટે તમને એકાઉન્ટની જરૂર છે."</string>
+    <string name="emptyGroup" msgid="7502116218697177370">"આ જૂથમાં કોઈ લોકો નથી."</string>
+    <string name="addPeopleToGroup" msgid="7879585947222263516">"કોઈને ઉમેરવા માટે, જૂથ સંપાદિત કરો."</string>
+    <string name="savingContact" msgid="4075751076741924939">"સંપર્ક સાચવી રહ્યાં છે…"</string>
+    <string name="contactSavedToast" msgid="7152589189385441091">"સંપર્ક સાચવ્યો."</string>
+    <string name="contactSavedErrorToast" msgid="3207250533172944892">"ફેરફારો સાચવી શકાયાં નથી."</string>
+    <string name="groupSavedToast" msgid="1168756874239833756">"જૂથ સાચવ્યુ."</string>
+    <string name="groupSavedErrorToast" msgid="7984466936615304740">"જૂથ ફેરફારો સાચવી શકાયાં નથી."</string>
+    <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
+      <item quantity="one">ફોન નંબર્સ સાથેના <xliff:g id="COUNT">%d</xliff:g> સંપર્કો</item>
+      <item quantity="other">ફોન નંબર્સ સાથેના <xliff:g id="COUNT">%d</xliff:g> સંપર્કો</item>
+    </plurals>
+    <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"ફોન નંબર્સ સાથે કોઈ સંપર્કો નથી"</string>
+    <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
+      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> મળ્યાં</item>
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> મળ્યાં</item>
+    </plurals>
+    <string name="listFoundAllContactsZero" msgid="922980883593159444">"સંપર્કો નથી"</string>
+    <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
+      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> મળ્યાં</item>
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> મળ્યાં</item>
+    </plurals>
+    <string name="all_contacts_tab_label" msgid="6250372293594147703">"તમામ સંપર્કો"</string>
+    <string name="favorites_tab_label" msgid="1524869648904016414">"મનપસંદ"</string>
+    <string name="callBack" msgid="5498224409038809224">"કૉલ બૅક કરો"</string>
+    <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>
+    <string name="quickcontact_missing_app" msgid="358168575340921552">"આ ક્રિયાને હેન્ડલ કરવા માટે કોઈ એપ્લિકેશન મળી નહીં."</string>
+    <string name="quickcontact_transparent_view_description" msgid="987959416759562455">"પાછલી સ્ક્રીન પર પાછા આવવા માટે ક્લિક કરો"</string>
+    <string name="quickcontact_add_phone_number" msgid="731665835910658965">"ફોન નંબર ઉમેરો"</string>
+    <string name="quickcontact_add_email" msgid="739298028384348482">"ઇમેઇલ ઉમેરો"</string>
+    <string name="missing_app" msgid="1466111003546611387">"આ ક્રિયાને હેન્ડલ કરવા માટે કોઈ એપ્લિકેશન મળી નહીં."</string>
+    <string name="menu_share" msgid="943789700636542260">"શેર કરો"</string>
+    <string name="menu_add_contact" msgid="3198704337220892684">"સંપર્કોમાં ઉમેરો"</string>
+    <string name="share_via" msgid="563121028023030093">"આના દ્વારા સંપર્ક શેર કરો"</string>
+    <string name="dialog_new_group_account" msgid="2318032089273496830">"એકાઉન્ટ હેઠળ જૂથ બનાવો"</string>
+    <string name="audio_chat" msgid="2535716629358298691">"વોઇસ ચેટ"</string>
+    <string name="video_chat" msgid="1872255818640336072">"વિડિઓ ચેટ"</string>
+    <string name="connections" msgid="8098440723172028350">"કનેક્શંસ"</string>
+    <string name="add_connection_button" msgid="4861308615789601727">"કનેક્શન ઉમેરો"</string>
+    <string name="recent" msgid="2659189233141493004">"તાજેતરના"</string>
+    <string name="recent_updates" msgid="4267258535615860710">"તાજેતરનાં અપડેટ્સ"</string>
+    <string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g> સંપર્ક"</string>
+    <!-- no translation found for from_account_format (4469138575127580203) -->
+    <skip />
+    <string name="contact_read_only" msgid="7421346527289472273">"આ એપ્લિકેશનથી સંપાદનયોગ્ય નથી."</string>
+    <string name="group_read_only" msgid="1061762906115697637">"આ ઉપકરણ પર સંપાદનયોગ્ય નથી."</string>
+    <string name="take_photo" msgid="7496128293167402354">"ફોટો લો"</string>
+    <string name="take_new_photo" msgid="7341354729436576304">"નવો ફોટો લો"</string>
+    <string name="pick_photo" msgid="2129509985223564942">"ફોટો પસંદ કરો"</string>
+    <string name="pick_new_photo" msgid="9122450996263688237">"નવો ફોટો પસંદ કરો"</string>
+    <string name="locale_change_in_progress" msgid="7583992153091537467">"ભાષાના ફેરફાર પ્રતિબિંબિત કરવા માટે સંપર્ક સૂચિ અપડેટ કરવામાં આવી રહી છે."</string>
+    <string name="upgrade_in_progress" msgid="474511436863451061">"સંપર્ક સૂચિ અપડેટ કરવામાં આવી રહી છે."</string>
+    <string name="search_results_searching" msgid="3984833028938569930">"શોધી રહ્યું છે..."</string>
+    <string name="menu_display_selected" msgid="6470001164297969034">"પસંદ કરેલ દર્શાવો"</string>
+    <string name="menu_display_all" msgid="8887488642609786198">"બધું દર્શાવો"</string>
+    <string name="menu_select_all" msgid="621719255150713545">"બધા પસંદ કરો"</string>
+    <string name="menu_select_none" msgid="7093222469852132345">"બધા નાપસંદ કરો"</string>
+    <string name="add_new_entry_for_section" msgid="5223080690667565044">"નવું ઉમેરો"</string>
+    <string name="add_organization" msgid="7311893231158291197">"સંગઠન ઉમેરો"</string>
+    <string name="event_edit_field_hint_text" msgid="5794424930242630477">"તારીખ"</string>
+    <string name="group_edit_field_hint_text" msgid="3966441850870457808">"જૂથ નામ"</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>
+    <plurals name="merge_info" formatted="false" msgid="2489323424994280962">
+      <item quantity="one"><xliff:g id="COUNT">%0$d</xliff:g> સ્રોતોથી મર્જ કર્યા</item>
+      <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> સ્રોતોથી મર્જ કર્યા</item>
+    </plurals>
+    <string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"પસંદ કરેલ સંપર્ક સાથે વર્તમાન સંપર્કને જોડીએ?"</string>
+    <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"પસંદ કરેલ સંપર્કોને સંપાદિત કરવા પર સ્વિચ કરીએ? તમે અત્યાર સુધીમાં દાખલ કરેલી માહિતીને કૉપિ કરાશે."</string>
+    <string name="menu_copyContact" msgid="1573960845106822639">"મારા સંપર્કો પર કૉપિ કરો"</string>
+    <string name="add_to_my_contacts" msgid="1068274916793627723">"મારા સંપર્કોમાં ઉમેરો"</string>
+    <string name="contact_directory_description" msgid="683398073603909119">"નિર્દેશિકા <xliff:g id="TYPE">%1$s</xliff:g>"</string>
+    <string name="list_filter_custom" msgid="8910173055702057002">"કસ્ટમ"</string>
+    <string name="activity_title_settings" msgid="5464130076132770781">"સેટિંગ્સ"</string>
+    <string name="menu_settings" msgid="377929915873428211">"સેટિંગ્સ"</string>
+    <string name="menu_help" msgid="1680178646764069976">"સહાય અને પ્રતિસાદ"</string>
+    <string name="preference_displayOptions" msgid="1341720270148252393">"પ્રદર્શન વિકલ્પો"</string>
+    <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
+    <string name="non_phone_caption" msgid="1541655052330027380">"ફોન નંબર"</string>
+    <string name="non_phone_add_to_contacts" msgid="6590985286250471169">"સંપર્કોમાં ઉમેરો"</string>
+    <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"સંપર્કમાં ઉમેરો"</string>
+    <string name="non_phone_close" msgid="7608506439725515667">"બંધ કરો"</string>
+    <string name="widget_name_and_phonetic" msgid="8739586586600099979">"<xliff:g id="DISPLAY_NAME">%1$s</xliff:g> (<xliff:g id="PHONETIC_NAME">%2$s</xliff:g>)"</string>
+    <string name="date_year_toggle" msgid="7356532842767854606">"એક વર્ષ આપો"</string>
+    <string name="social_widget_label" msgid="6378905543028924592">"સંપર્ક"</string>
+    <string name="social_widget_loading" msgid="5327336597364074608">"લોડ કરી રહ્યું છે..."</string>
+    <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"એક નવો સંપર્ક બનાવો"</string>
+    <string name="contacts_unavailable_add_account" msgid="7911101713860139754">"એકાઉન્ટમાં સાઇન ઇન કરો"</string>
+    <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"સંપર્કો આયાત કરો"</string>
+    <string name="create_group_dialog_title" msgid="6874527142828424475">"નવું જૂથ બનાવો"</string>
+    <string name="create_group_item_label" msgid="4411981763169654825">"નવું જૂથ બનાવો"</string>
+    <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
+      <item quantity="one"><xliff:g id="COUNT">%0$d</xliff:g> જૂથ</item>
+      <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> જૂથ</item>
+    </plurals>
+    <string name="delete_group_dialog_message" msgid="7586856514337560529">"\"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\" જૂથ કાઢી નાખીએ? (તેમાં રહેલા સંપર્કો કાઢી નાખવામાં આવશે નહીં.)"</string>
+    <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
+      <item quantity="one"><xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g> માંથી <xliff:g id="COUNT_2">%1$d</xliff:g> લોકો</item>
+      <item quantity="other"><xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g> માંથી <xliff:g id="COUNT_2">%1$d</xliff:g> લોકો</item>
+    </plurals>
+    <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
+      <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> લોકો</item>
+      <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> લોકો</item>
+    </plurals>
+    <string name="toast_join_with_empty_contact" msgid="2238581529864542985">"બીજા સાથે જોડાતાં પહેલાં સંપર્ક નામ લખો."</string>
+    <string name="copy_text" msgid="3257145021583508761">"ક્લિપબોર્ડ પર કૉપિ કરો"</string>
+    <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="5885724679874403115">"તમારા ફેરફારો છોડી દઈએ?"</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="profile_display_name" msgid="4127389543625918771">"મારી પ્રોફાઇલ સેટ કરો"</string>
+    <string name="enter_contact_name" msgid="1738391320566349924">"વ્યક્તિનું નામ લખો"</string>
+    <string name="group_name_hint" msgid="238359485263401293">"જૂથનું નામ"</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="no_account_prompt" msgid="6424883302325061025">"Google એકાઉન્ટ સાથે સંપર્કો વધુ સારી રીતે કાર્ય કરે છે.\n\n• તેને કોઈપણ વેબ બ્રાઉઝરથી ઍક્સેસ કરો\n• તમારા ફોટાનો સુરક્ષિત રૂપે બેક અપ લો."</string>
+    <string name="generic_no_account_prompt" msgid="7218827704367325460">"તમે તમારો ફોન ગુમાવી દો તો પણ તમારા સંપર્કોને સુરક્ષિત રાખો: ઓનલાઇન સેવા સાથે સમન્વયિત કરો."</string>
+    <string name="generic_no_account_prompt_title" msgid="753783911899054860">"એક એકાઉન્ટ ઉમેરો"</string>
+    <string name="contact_editor_prompt_zero_accounts" msgid="1785345895691886499">"તમારા નવા સંપર્કનો બેક અપ લેવાશે નહીં. સંપર્કોનો ઓનલાઇન બેક અપ લેતાં એકાઉન્ટને ઉમેરીએ?"</string>
+    <string name="contact_editor_prompt_one_account" msgid="8669032699767375976">"<xliff:g id="ACCOUNT_NAME">%1$s</xliff:g> સાથે તમારો નવો સંપર્ક સમન્વયિત કરવામાં આવશે."</string>
+    <string name="contact_editor_prompt_multiple_accounts" msgid="611828200100438242">"તમે નીચેના એકાઉન્ટ્સ પૈકી એક સાથે તમારા નવા સંપર્કને સમન્વયિત કરી શકો છો. તમે કોનો ઉપયોગ કરવા માગો છો?"</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">"સંદેશ મોકલો"</string>
+    <string name="toast_making_personal_copy" msgid="6137651078366797938">"વ્યક્તિગત કૉપિ બનાવી રહ્યાં છે..."</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>
+    <string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"<xliff:g id="TIME_INTERVAL">%s</xliff:g> વાગ્યે આવતીકાલે"</string>
+    <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%s</xliff:g>, <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
+    <string name="untitled_event" msgid="3484859385405939366">"(અનામાંકિત ઇવેન્ટ)"</string>
+    <string name="date_time_set" msgid="4761419824439606690">"સેટ કરો"</string>
+    <string name="header_im_entry" msgid="3581720979640225615">"IM"</string>
+    <string name="header_organization_entry" msgid="8515394955666265406">"સંગઠન"</string>
+    <string name="header_nickname_entry" msgid="6743561883967451485">"ઉપનામ"</string>
+    <string name="header_note_entry" msgid="4320190426480612344">"નોંધ"</string>
+    <string name="header_website_entry" msgid="1411467850000824745">"વેબસાઇટ"</string>
+    <string name="header_event_entry" msgid="6738250422744401460">"ઇવેન્ટ"</string>
+    <string name="header_relation_entry" msgid="1520292958088146460">"સંબંધ"</string>
+    <string name="header_account_entry" msgid="2684318506427891827">"એકાઉન્ટ"</string>
+    <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>
+    <string name="content_description_recent_sms" msgid="1666389577263317445">"તાજેતરનો sms. <xliff:g id="MESSAGE_BODY">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. પ્રતિસાદ આપવા ક્લિક કરો"</string>
+    <string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"આવનારા"</string>
+    <string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"આઉટગોઇંગ"</string>
+    <string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"છૂટેલ"</string>
+    <string name="content_description_recent_call" msgid="5183800406316723676">"તાજેતરનો કૉલ. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. કૉલ બેક કરવા ક્લિક કરો"</string>
+    <string name="message_from_you_prefix" msgid="7180706529908434482">"તમે: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
+    <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"જ્યારે તમે વ્યક્તિના Hangouts ઓળખકર્તાને ઇમેઇલ ફીલ્ડ અથવા ફોન ફીલ્ડમાં દાખલ કરો છો ત્યારે Hangouts વધુ સારું કામ કરે છે."</string>
+    <string name="compact_editor_more_fields" msgid="2874181192382284115">"વધુ ફીલ્ડ્સ"</string>
+</resources>
diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml
index 124e31e..48e7587 100644
--- a/res/values-hi/strings.xml
+++ b/res/values-hi/strings.xml
@@ -46,6 +46,7 @@
     <string name="description_action_menu_add_star" msgid="3327186327234177456">"पसंदीदा में जोड़ा गया"</string>
     <string name="menu_editContact" msgid="9042415603857662633">"संपादित करें"</string>
     <string name="menu_deleteContact" msgid="6788644058868189393">"हटाएं"</string>
+    <string name="menu_change_photo" msgid="7769177631511496210">"फ़ोटो बदलें"</string>
     <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"मुख्यपृष्ठ स्क्रीन पर रखें"</string>
     <string name="menu_call" msgid="3992595586042260618">"संपर्क को कॉल करें"</string>
     <string name="menu_sendSMS" msgid="5535886767547006515">"इस संपर्क को SMS भेजें"</string>
@@ -56,17 +57,23 @@
     <string name="menu_new_group_action_bar" msgid="3520232877587377175">"समूह जोड़ें"</string>
     <string name="splitConfirmation_title" msgid="633640935430370530">"संपर्क अलग करें?"</string>
     <string name="splitConfirmation" msgid="740190210499587175">"यह संपर्क एकाधिक संपर्कों में अलग कर दिया जाएगा."</string>
-    <string name="menu_joinAggregate" msgid="5027981918265667970">"जुड़ें"</string>
+    <string name="menu_joinAggregate" msgid="4050157483569357666">"एक बनाएं"</string>
     <string name="titleJoinContactDataWith" msgid="7684875775798635354">"संपर्क जोड़ें"</string>
     <string name="blurbJoinContactDataWith" msgid="8736488417422708236">"वह संपर्क चुनें जिसे आप <xliff:g id="NAME">%s</xliff:g> के साथ जोड़ना चाहते हैं:"</string>
     <string name="showAllContactsJoinItem" msgid="2189695051430392383">"सभी संपर्क दिखाएं"</string>
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"सुझाए गए संपर्क"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"सभी संपर्क"</string>
-    <string name="contactsJoinedMessage" msgid="7208148163607047389">"संपर्क जुड़ गए"</string>
+    <string name="contactsJoinedMessage" msgid="656936718666768589">"संपर्क एक बनाए गए"</string>
+    <string name="contacts_deleted_toast" msgid="286851430992788215">"संपर्क हटा दिए गए"</string>
     <string name="menu_set_ring_tone" msgid="8728345772068064946">"रिंगटोन सेट करें"</string>
     <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"ध्‍वनि‍मेल से सभी कॉल"</string>
     <string name="readOnlyContactWarning" msgid="7808825687289848259">"आप केवल-पढ़ने के लिए खातों से संपर्क नहीं हटा सकते, लेकिन आप उन्‍हें अपनी संपर्क सूचियों में छुपा सकते हैं."</string>
     <string name="readOnlyContactDeleteConfirmation" msgid="2137170726670196909">"इस संपर्क में एकाधिक खातों की जानकारी है. केवल-पढ़ने के लिए खातों की जानकारी आपकी संपर्क सूचियों में छिपी रहेगी, उसे हटाया नहीं जाएगा."</string>
+    <string name="batch_merge_single_contact_warning" msgid="982585201970392110">"एक करने के लिए आपको कम से कम दो संपर्कों को चुनने की आवश्‍यकता होगी."</string>
+    <string name="batch_merge_confirmation" msgid="8551299480317422420">"चयनित संपर्कों को किसी एकल संपर्क में एक कर दिया जाएगा."</string>
+    <string name="batch_delete_confirmation" msgid="2564172328268885394">"चयनित संपर्क हटा दिए जाएंगे."</string>
+    <string name="batch_delete_read_only_contact_confirmation" msgid="6614878716815412523">"केवल पढ़ने के लिए खातों की जानकारी को आपकी संपर्क सूचियों में छिपाया जाएगा, हटाया नहीं जाएगा."</string>
+    <string name="batch_delete_multiple_accounts_confirmation" msgid="5189722181586680185">"इन संपर्कों में एकाधिक खातों की जानकारी शामिल है. केवल पढ़ने के लिए खातों की जानकारी को आपकी संपर्क सूचियों में छिपाया जाएगा, हटाया नहीं जाएगा."</string>
     <string name="multipleContactDeleteConfirmation" msgid="938900978442960800">"इस संपर्क को हटाने से एकाधिक खातों से जानकारी हट जाएगी."</string>
     <string name="deleteConfirmation" msgid="811706994761610640">"यह संपर्क हटा दिया जाएगा."</string>
     <string name="menu_discard" msgid="6854657936970228164">"परिवर्तन हटा दें"</string>
@@ -94,20 +101,20 @@
     <string name="contactSavedErrorToast" msgid="3207250533172944892">"संपर्क परिवर्तन सहेजे नहीं जा सके."</string>
     <string name="groupSavedToast" msgid="1168756874239833756">"समूह सहेजा गया."</string>
     <string name="groupSavedErrorToast" msgid="7984466936615304740">"समूह परिवर्तन सहेजे नहीं जा सके."</string>
-  <plurals name="listTotalPhoneContacts">
-    <item quantity="one" msgid="3015357862286673986">"फ़ोन नंबर वाला 1 संपर्क"</item>
-    <item quantity="other" msgid="3299954047880968205">"फ़ोन नंबर वाले <xliff:g id="COUNT">%d</xliff:g> संपर्क"</item>
-  </plurals>
+    <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
+      <item quantity="one">फ़ोन नंबर वाले <xliff:g id="COUNT">%d</xliff:g> संपर्क</item>
+      <item quantity="other">फ़ोन नंबर वाले <xliff:g id="COUNT">%d</xliff:g> संपर्क</item>
+    </plurals>
     <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"फ़ोन नंबर वाले कोई संपर्क नहीं"</string>
-  <plurals name="listFoundAllContacts">
-    <item quantity="one" msgid="5517063038754171134">"1 मिला"</item>
-    <item quantity="other" msgid="3852668542926965042">"<xliff:g id="COUNT">%d</xliff:g> मिले"</item>
-  </plurals>
+    <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
+      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> मिले</item>
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> मिले</item>
+    </plurals>
     <string name="listFoundAllContactsZero" msgid="922980883593159444">"कोई संपर्क नहीं"</string>
-  <plurals name="searchFoundContacts">
-    <item quantity="one" msgid="4826918429708286628">"1 मिला"</item>
-    <item quantity="other" msgid="7988132539476575389">"<xliff:g id="COUNT">%d</xliff:g> मिले"</item>
-  </plurals>
+    <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
+      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> मिले</item>
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> मिले</item>
+    </plurals>
     <string name="all_contacts_tab_label" msgid="6250372293594147703">"सभी संपर्क"</string>
     <string name="favorites_tab_label" msgid="1524869648904016414">"पसंदीदा"</string>
     <string name="callBack" msgid="5498224409038809224">"कॉल बैक करें"</string>
@@ -144,9 +151,6 @@
     <string name="pick_new_photo" msgid="9122450996263688237">"नई फ़ोटो चुनें"</string>
     <string name="locale_change_in_progress" msgid="7583992153091537467">"भाषा के परिवर्तन दिखाने के लिए संपर्क सूची से नई जानकारी मिल रही है."</string>
     <string name="upgrade_in_progress" msgid="474511436863451061">"संपर्क सूची से नई जानकारी मिल रही है."</string>
-    <string name="upgrade_out_of_memory" msgid="1209994418877625940">"संपर्क अपग्रेड होने की प्रक्रिया में हैं. \n\nअपग्रेड प्रक्रिया को लगभग <xliff:g id="SIZE_IN_MEGABYTES">%s</xliff:g> MB मोबाइल मेमोरी की आवश्‍यकता होती है.\n\nनिम्‍न विकल्‍पों में से कोई एक चुनें:"</string>
-    <string name="upgrade_out_of_memory_uninstall" msgid="1721798828992091432">"कुछ ऐप्स  अनइंस्टॉल करें"</string>
-    <string name="upgrade_out_of_memory_retry" msgid="8431289830472724609">"अपग्रेड का पुन: प्रयास करें"</string>
     <string name="search_results_searching" msgid="3984833028938569930">"खोज रहा है…"</string>
     <string name="menu_display_selected" msgid="6470001164297969034">"चयनित दिखाएं"</string>
     <string name="menu_display_all" msgid="8887488642609786198">"सभी दिखाएं"</string>
@@ -160,10 +164,10 @@
     <string name="primary_photo" msgid="8517942231868516999">"प्राथमिक फ़ोटो"</string>
     <string name="description_star" msgid="2605854427360036550">"पसंदीदा"</string>
     <string name="edit_contact" msgid="7529281274005689512">"संपर्क संपादित करें"</string>
-  <plurals name="merge_info">
-    <item quantity="one" msgid="148365587896371969">"मर्ज नहीं किए गए"</item>
-    <item quantity="other" msgid="425683718017380845">"<xliff:g id="COUNT">%0$d</xliff:g> स्रोतों से मर्ज किया गया"</item>
-  </plurals>
+    <plurals name="merge_info" formatted="false" msgid="2489323424994280962">
+      <item quantity="one"><xliff:g id="COUNT">%0$d</xliff:g> स्रोतों से मर्ज किया गया</item>
+      <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> स्रोतों से मर्ज किया गया</item>
+    </plurals>
     <string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"वर्तमान संपर्क को चयनित संपर्क से जोड़ें?"</string>
     <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"चयनित संपर्क के संपादन पर जाएं? आपके द्वारा अभी तक दर्ज की गई जानकारी की प्रतिलिपि बनाई जाएगी."</string>
     <string name="menu_copyContact" msgid="1573960845106822639">"मेरे संपर्क में प्रतिलिपि बनाएं"</string>
@@ -172,7 +176,7 @@
     <string name="list_filter_custom" msgid="8910173055702057002">"कस्टम"</string>
     <string name="activity_title_settings" msgid="5464130076132770781">"सेटिंग"</string>
     <string name="menu_settings" msgid="377929915873428211">"सेटिंग"</string>
-    <string name="menu_help" msgid="5123887102216637725">"सहायता"</string>
+    <string name="menu_help" msgid="1680178646764069976">"सहायता और फ़ीडबैक"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"प्रदर्शन विकल्प"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="non_phone_caption" msgid="1541655052330027380">"फ़ोन नंबर"</string>
@@ -188,19 +192,19 @@
     <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"संपर्क आयात करें"</string>
     <string name="create_group_dialog_title" msgid="6874527142828424475">"नया समूह बनाएं"</string>
     <string name="create_group_item_label" msgid="4411981763169654825">"नया समूह बनाएं"</string>
-  <plurals name="num_groups_in_account">
-    <item quantity="one" msgid="2944819210288517794">"1 समूह"</item>
-    <item quantity="other" msgid="1276758425904917367">"<xliff:g id="COUNT">%0$d</xliff:g> समूह"</item>
-  </plurals>
+    <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
+      <item quantity="one"><xliff:g id="COUNT">%0$d</xliff:g> समूह</item>
+      <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> समूह</item>
+    </plurals>
     <string name="delete_group_dialog_message" msgid="7586856514337560529">"समूह \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\" को हटाएं? (संपर्क स्वयं नहीं हटाए जाएंगे.)"</string>
-  <plurals name="num_contacts_in_group">
-    <item quantity="one" msgid="1352418549951013448">"<xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g> से <xliff:g id="COUNT_0">%1$d</xliff:g> व्‍यक्ति"</item>
-    <item quantity="other" msgid="8146027769011086349">"<xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g> से <xliff:g id="COUNT_0">%1$d</xliff:g> लोग"</item>
-  </plurals>
-  <plurals name="group_list_num_contacts_in_group">
-    <item quantity="one" msgid="3323065321661972446">"<xliff:g id="COUNT">%1$d</xliff:g> व्‍यक्ति"</item>
-    <item quantity="other" msgid="6251996206137048525">"<xliff:g id="COUNT">%1$d</xliff:g> लोग"</item>
-  </plurals>
+    <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
+      <item quantity="one"><xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g> से <xliff:g id="COUNT_2">%1$d</xliff:g> लोग</item>
+      <item quantity="other"><xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g> से <xliff:g id="COUNT_2">%1$d</xliff:g> लोग</item>
+    </plurals>
+    <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
+      <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> व्‍यक्‍ति</item>
+      <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> लोग</item>
+    </plurals>
     <string name="toast_join_with_empty_contact" msgid="2238581529864542985">"अन्‍य संपर्क से जुड़ने से पहले संपर्क नाम लिखें."</string>
     <string name="copy_text" msgid="3257145021583508761">"क्‍लिपबोर्ड पर प्रतिलिपि बनाएं"</string>
     <string name="set_default" msgid="4417505153468300351">"सामान्य सेट करें"</string>
@@ -264,4 +268,5 @@
     <string name="content_description_recent_call" msgid="5183800406316723676">"हाल ही का कॉल. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. पुनः कॉल करने के लिए क्लिक करें"</string>
     <string name="message_from_you_prefix" msgid="7180706529908434482">"आप: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
     <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"Hangouts तब बेहतर कार्य करता है जब आप व्‍यक्‍ति के Hangouts पहचानकर्ता को ईमेल फ़ील्‍ड या फ़ोन फ़ील्‍ड में डालते हैं."</string>
+    <string name="compact_editor_more_fields" msgid="2874181192382284115">"अधिक फ़ील्‍ड"</string>
 </resources>
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
index bd13702..40bfe3e 100644
--- a/res/values-hr/strings.xml
+++ b/res/values-hr/strings.xml
@@ -46,6 +46,7 @@
     <string name="description_action_menu_add_star" msgid="3327186327234177456">"Dodano favoritima"</string>
     <string name="menu_editContact" msgid="9042415603857662633">"Uredi"</string>
     <string name="menu_deleteContact" msgid="6788644058868189393">"Izbriši"</string>
+    <string name="menu_change_photo" msgid="7769177631511496210">"Promijeni fotografiju"</string>
     <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Mjesto na početnom zaslonu"</string>
     <string name="menu_call" msgid="3992595586042260618">"Nazovi kontakt"</string>
     <string name="menu_sendSMS" msgid="5535886767547006515">"Poruka kontaktu"</string>
@@ -56,17 +57,23 @@
     <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Dodavanje grupe"</string>
     <string name="splitConfirmation_title" msgid="633640935430370530">"Odvojiti kontakt?"</string>
     <string name="splitConfirmation" msgid="740190210499587175">"Ovaj će se kontakt razdvojiti na više kontakata."</string>
-    <string name="menu_joinAggregate" msgid="5027981918265667970">"Pridruži se"</string>
+    <string name="menu_joinAggregate" msgid="4050157483569357666">"Spoji"</string>
     <string name="titleJoinContactDataWith" msgid="7684875775798635354">"Pridruži kontakte"</string>
     <string name="blurbJoinContactDataWith" msgid="8736488417422708236">"Odaberite kontakt koji želite pridružiti imenu <xliff:g id="NAME">%s</xliff:g>:"</string>
     <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Prikaži sve kontakte"</string>
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Predloženi kontakti"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Svi kontakti"</string>
-    <string name="contactsJoinedMessage" msgid="7208148163607047389">"Kontakti su pridruženi"</string>
+    <string name="contactsJoinedMessage" msgid="656936718666768589">"Kontakti su spojeni"</string>
+    <string name="contacts_deleted_toast" msgid="286851430992788215">"Kontakti su izbrisani"</string>
     <string name="menu_set_ring_tone" msgid="8728345772068064946">"Postavi zvuk zvona"</string>
     <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Svi pozivi na govornu poštu"</string>
     <string name="readOnlyContactWarning" msgid="7808825687289848259">"Ne možete izbrisati kontakte s računa samo za čitanje, ali možete ih sakriti na svojim popisima kontakata."</string>
     <string name="readOnlyContactDeleteConfirmation" msgid="2137170726670196909">"Ovaj kontakt sadrži informacije iz više računa. Informacije iz računa koji su samo za čitanje bit će skrivene na popise kontakata, a ne izbrisane."</string>
+    <string name="batch_merge_single_contact_warning" msgid="982585201970392110">"Da biste izvršili spajanje, morate odabrati barem dva kontakta."</string>
+    <string name="batch_merge_confirmation" msgid="8551299480317422420">"Odabrani kontakti spojit će se u jedan kontakt."</string>
+    <string name="batch_delete_confirmation" msgid="2564172328268885394">"Odabrani će se kontakti izbrisati."</string>
+    <string name="batch_delete_read_only_contact_confirmation" msgid="6614878716815412523">"Podaci s računa koji su samo za čitanje bit će skriveni na popisu kontakata, a ne izbrisani."</string>
+    <string name="batch_delete_multiple_accounts_confirmation" msgid="5189722181586680185">"Ti kontakti sadrže podatke s više računa. Podaci s računa koji su samo za čitanje bit će skriveni na popisu kontakata, a ne izbrisani."</string>
     <string name="multipleContactDeleteConfirmation" msgid="938900978442960800">"Brisanjem ovog kontakta izbrisat ćete podatke s više računa."</string>
     <string name="deleteConfirmation" msgid="811706994761610640">"Ovaj će kontakt biti izbrisan."</string>
     <string name="menu_discard" msgid="6854657936970228164">"Odbaci promjene"</string>
@@ -94,20 +101,23 @@
     <string name="contactSavedErrorToast" msgid="3207250533172944892">"Promjene kontakta nije moguće spremiti."</string>
     <string name="groupSavedToast" msgid="1168756874239833756">"Skupina spremljena."</string>
     <string name="groupSavedErrorToast" msgid="7984466936615304740">"Promjene grupe nije moguće spremiti."</string>
-  <plurals name="listTotalPhoneContacts">
-    <item quantity="one" msgid="3015357862286673986">"1 kontakt s tel. brojem"</item>
-    <item quantity="other" msgid="3299954047880968205">"Kontakata s tel. brojevima: <xliff:g id="COUNT">%d</xliff:g>"</item>
-  </plurals>
+    <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
+      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> kontakt s telefonskim brojem</item>
+      <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> kontakta s telefonskim brojem</item>
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> kontakata s telefonskim brojem</item>
+    </plurals>
     <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"Nema kontakata s telefonskim brojevima"</string>
-  <plurals name="listFoundAllContacts">
-    <item quantity="one" msgid="5517063038754171134">"1 pronađen"</item>
-    <item quantity="other" msgid="3852668542926965042">"Pronađeno kontakata: <xliff:g id="COUNT">%d</xliff:g>"</item>
-  </plurals>
+    <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
+      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> pronađeni</item>
+      <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> pronađena</item>
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> pronađenih</item>
+    </plurals>
     <string name="listFoundAllContactsZero" msgid="922980883593159444">"Nema kontakata"</string>
-  <plurals name="searchFoundContacts">
-    <item quantity="one" msgid="4826918429708286628">"1 pronađen"</item>
-    <item quantity="other" msgid="7988132539476575389">"Pronađeno kontakata: <xliff:g id="COUNT">%d</xliff:g>"</item>
-  </plurals>
+    <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
+      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> pronađeni</item>
+      <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> pronađena</item>
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> pronađenih</item>
+    </plurals>
     <string name="all_contacts_tab_label" msgid="6250372293594147703">"Svi kontakti"</string>
     <string name="favorites_tab_label" msgid="1524869648904016414">"Favoriti"</string>
     <string name="callBack" msgid="5498224409038809224">"Povratni poziv"</string>
@@ -144,9 +154,6 @@
     <string name="pick_new_photo" msgid="9122450996263688237">"Odaberite novu fotografiju"</string>
     <string name="locale_change_in_progress" msgid="7583992153091537467">"Popis kontakata ažurira se da bi se pokazala promjena jezika."</string>
     <string name="upgrade_in_progress" msgid="474511436863451061">"Popis kontakata ažurira se."</string>
-    <string name="upgrade_out_of_memory" msgid="1209994418877625940">"Kontakti se nadograđuju. \n\nZa proces nadogradnje potrebno je približno <xliff:g id="SIZE_IN_MEGABYTES">%s</xliff:g> MB interne pohrane.\n\nOdaberite jednu od sljedećih opcija:"</string>
-    <string name="upgrade_out_of_memory_uninstall" msgid="1721798828992091432">"Deinstaliraj neke aplikacije"</string>
-    <string name="upgrade_out_of_memory_retry" msgid="8431289830472724609">"Pokušaj ponovo nadogradnju"</string>
     <string name="search_results_searching" msgid="3984833028938569930">"Pretraživanje..."</string>
     <string name="menu_display_selected" msgid="6470001164297969034">"Prikaži odabrano"</string>
     <string name="menu_display_all" msgid="8887488642609786198">"Pokaži sve"</string>
@@ -160,10 +167,11 @@
     <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>
-  <plurals name="merge_info">
-    <item quantity="one" msgid="148365587896371969">"nije spojen"</item>
-    <item quantity="other" msgid="425683718017380845">"spojen s <xliff:g id="COUNT">%0$d</xliff:g> izvora"</item>
-  </plurals>
+    <plurals name="merge_info" formatted="false" msgid="2489323424994280962">
+      <item quantity="one">spojen iz <xliff:g id="COUNT">%0$d</xliff:g> izvora</item>
+      <item quantity="few">spojen iz <xliff:g id="COUNT">%0$d</xliff:g> izvora</item>
+      <item quantity="other">spojen iz <xliff:g id="COUNT">%0$d</xliff:g> izvora</item>
+    </plurals>
     <string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"Pridružiti trenutačni kontakt odabranom kontaktu?"</string>
     <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Prebaciti se na uređivanje odabranog kontakta? Informacije koje ste unijeli dosad kopirat će se."</string>
     <string name="menu_copyContact" msgid="1573960845106822639">"Kopiraj u Moje kontakte"</string>
@@ -172,7 +180,7 @@
     <string name="list_filter_custom" msgid="8910173055702057002">"Prilagođeno"</string>
     <string name="activity_title_settings" msgid="5464130076132770781">"Postavke"</string>
     <string name="menu_settings" msgid="377929915873428211">"Postavke"</string>
-    <string name="menu_help" msgid="5123887102216637725">"Pomoć"</string>
+    <string name="menu_help" msgid="1680178646764069976">"Pomoć i povratne informacije"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"Opcije prikaza"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="non_phone_caption" msgid="1541655052330027380">"Broj telefona"</string>
@@ -188,19 +196,22 @@
     <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Uvezi kontakte"</string>
     <string name="create_group_dialog_title" msgid="6874527142828424475">"Izrada nove grupe"</string>
     <string name="create_group_item_label" msgid="4411981763169654825">"Izrada nove grupe"</string>
-  <plurals name="num_groups_in_account">
-    <item quantity="one" msgid="2944819210288517794">"1 grupa"</item>
-    <item quantity="other" msgid="1276758425904917367">"Br. grupa: <xliff:g id="COUNT">%0$d</xliff:g>"</item>
-  </plurals>
+    <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
+      <item quantity="one"><xliff:g id="COUNT">%0$d</xliff:g> grupa</item>
+      <item quantity="few"><xliff:g id="COUNT">%0$d</xliff:g> grupe</item>
+      <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> grupa</item>
+    </plurals>
     <string name="delete_group_dialog_message" msgid="7586856514337560529">"Izbrisati grupu \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\"? (Sami kontakti neće biti izbrisani.)"</string>
-  <plurals name="num_contacts_in_group">
-    <item quantity="one" msgid="1352418549951013448">"<xliff:g id="COUNT_0">%1$d</xliff:g> osoba iz grupe <xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>"</item>
-    <item quantity="other" msgid="8146027769011086349">"Broj ljudi: <xliff:g id="COUNT_0">%1$d</xliff:g> iz grupe <xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>"</item>
-  </plurals>
-  <plurals name="group_list_num_contacts_in_group">
-    <item quantity="one" msgid="3323065321661972446">"Broj osoba: <xliff:g id="COUNT">%1$d</xliff:g>"</item>
-    <item quantity="other" msgid="6251996206137048525">"Broj osoba: <xliff:g id="COUNT">%1$d</xliff:g>"</item>
-  </plurals>
+    <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
+      <item quantity="one"><xliff:g id="COUNT_2">%1$d</xliff:g> osoba iz grupe <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
+      <item quantity="few"><xliff:g id="COUNT_2">%1$d</xliff:g> osobe iz grupe <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> osoba iz grupe <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
+    </plurals>
+    <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
+      <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> osoba</item>
+      <item quantity="few"><xliff:g id="COUNT_1">%1$d</xliff:g> osobe</item>
+      <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> osoba</item>
+    </plurals>
     <string name="toast_join_with_empty_contact" msgid="2238581529864542985">"Upišite ime kontakta prije nego što ga pridružite drugom kontaktu."</string>
     <string name="copy_text" msgid="3257145021583508761">"Kopiraj u međuspremnik"</string>
     <string name="set_default" msgid="4417505153468300351">"Postavi zadano"</string>
@@ -264,4 +275,5 @@
     <string name="content_description_recent_call" msgid="5183800406316723676">"nedavni poziv. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. kliknite za uzvratni poziv"</string>
     <string name="message_from_you_prefix" msgid="7180706529908434482">"Vi: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
     <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"Hangouts funkcionira bolje kada unesete njegov identifikator osobe u polje e-adrese ili telefona."</string>
+    <string name="compact_editor_more_fields" msgid="2874181192382284115">"Više polja"</string>
 </resources>
diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml
index d5cf7a9..8f010f0 100644
--- a/res/values-hu/strings.xml
+++ b/res/values-hu/strings.xml
@@ -46,6 +46,7 @@
     <string name="description_action_menu_add_star" msgid="3327186327234177456">"Hozzáadva a kedvencekhez"</string>
     <string name="menu_editContact" msgid="9042415603857662633">"Szerkesztés"</string>
     <string name="menu_deleteContact" msgid="6788644058868189393">"Törlés"</string>
+    <string name="menu_change_photo" msgid="7769177631511496210">"Fénykép lecserélése"</string>
     <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Helyezze el a kezdőképernyőn"</string>
     <string name="menu_call" msgid="3992595586042260618">"Ismerős hívása"</string>
     <string name="menu_sendSMS" msgid="5535886767547006515">"SMS küldése ismerősnek"</string>
@@ -56,17 +57,23 @@
     <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Csoport hozzáadása"</string>
     <string name="splitConfirmation_title" msgid="633640935430370530">"Szétválasztja?"</string>
     <string name="splitConfirmation" msgid="740190210499587175">"Ezt a névjegyet több névjegyre osztja."</string>
-    <string name="menu_joinAggregate" msgid="5027981918265667970">"Összekapcsolás"</string>
+    <string name="menu_joinAggregate" msgid="4050157483569357666">"Egyesítés"</string>
     <string name="titleJoinContactDataWith" msgid="7684875775798635354">"Névjegyek összekapcsolása"</string>
     <string name="blurbJoinContactDataWith" msgid="8736488417422708236">"Válassza ki azt a névjegyet, amelyet össze kíván kapcsolni ezzel a névjeggyel: <xliff:g id="NAME">%s</xliff:g>"</string>
     <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Az összes névjegy megjelenítése"</string>
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Javasolt névjegyek"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Összes névjegy"</string>
-    <string name="contactsJoinedMessage" msgid="7208148163607047389">"A névjegyek összekapcsolása megtörtént"</string>
+    <string name="contactsJoinedMessage" msgid="656936718666768589">"Névjegyek egyesítve"</string>
+    <string name="contacts_deleted_toast" msgid="286851430992788215">"Névjegyek törölve"</string>
     <string name="menu_set_ring_tone" msgid="8728345772068064946">"Csengőhang"</string>
     <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Minden hívás a hangpostára"</string>
     <string name="readOnlyContactWarning" msgid="7808825687289848259">"Írásvédett fiókból nem törölhet névjegyet, de saját címtárában elrejtheti azokat."</string>
     <string name="readOnlyContactDeleteConfirmation" msgid="2137170726670196909">"Ez a névjegy több fiókból is tartalmaz adatokat. Az írásvédett fiókokból származó adatok nem jelennek meg a Címtárban, de nem kerülnek törlésre."</string>
+    <string name="batch_merge_single_contact_warning" msgid="982585201970392110">"Egyesítéshez legalább két névjegyet kell kiválasztania."</string>
+    <string name="batch_merge_confirmation" msgid="8551299480317422420">"A kiválasztott névjegyek egy névjegyben lesznek egyesítve."</string>
+    <string name="batch_delete_confirmation" msgid="2564172328268885394">"A kiválasztott névjegyek törlésre kerülnek."</string>
+    <string name="batch_delete_read_only_contact_confirmation" msgid="6614878716815412523">"Az írásvédett fiókokból származó adatok nem jelennek meg a névjegyek között, de nem kerülnek törlésre."</string>
+    <string name="batch_delete_multiple_accounts_confirmation" msgid="5189722181586680185">"Ezek a névjegyek több fiókból is tartalmaznak adatokat. Az írásvédett fiókokból származó adatok nem jelennek meg a névjegyek között, de nem kerülnek törlésre."</string>
     <string name="multipleContactDeleteConfirmation" msgid="938900978442960800">"A névjegy törlésével több fiókból is töröl adatokat."</string>
     <string name="deleteConfirmation" msgid="811706994761610640">"A névjegy törlésre kerül."</string>
     <string name="menu_discard" msgid="6854657936970228164">"Módosítások elvetése"</string>
@@ -94,20 +101,20 @@
     <string name="contactSavedErrorToast" msgid="3207250533172944892">"Nem sikerült menteni a névjegymódosításokat."</string>
     <string name="groupSavedToast" msgid="1168756874239833756">"Csoport mentve."</string>
     <string name="groupSavedErrorToast" msgid="7984466936615304740">"Nem sikerült menteni a csoportmódosításokat."</string>
-  <plurals name="listTotalPhoneContacts">
-    <item quantity="one" msgid="3015357862286673986">"1 névjegy telefonszámmal"</item>
-    <item quantity="other" msgid="3299954047880968205">"<xliff:g id="COUNT">%d</xliff:g> névjegy telefonszámmal"</item>
-  </plurals>
+    <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> névjegy telefonszámmal</item>
+      <item quantity="one">1 névjegy telefonszámmal</item>
+    </plurals>
     <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"Nincsenek telefonszámot is tartalmazó névjegyek"</string>
-  <plurals name="listFoundAllContacts">
-    <item quantity="one" msgid="5517063038754171134">"1 találat"</item>
-    <item quantity="other" msgid="3852668542926965042">"<xliff:g id="COUNT">%d</xliff:g> találat"</item>
-  </plurals>
+    <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> találat</item>
+      <item quantity="one">1 találat</item>
+    </plurals>
     <string name="listFoundAllContactsZero" msgid="922980883593159444">"Nincsenek névjegyek"</string>
-  <plurals name="searchFoundContacts">
-    <item quantity="one" msgid="4826918429708286628">"1 találat"</item>
-    <item quantity="other" msgid="7988132539476575389">"<xliff:g id="COUNT">%d</xliff:g> találat"</item>
-  </plurals>
+    <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> találat</item>
+      <item quantity="one">1 találat</item>
+    </plurals>
     <string name="all_contacts_tab_label" msgid="6250372293594147703">"Összes névjegy"</string>
     <string name="favorites_tab_label" msgid="1524869648904016414">"Kedvencek"</string>
     <string name="callBack" msgid="5498224409038809224">"Visszahívás"</string>
@@ -144,9 +151,6 @@
     <string name="pick_new_photo" msgid="9122450996263688237">"Új fotó kiválasztása"</string>
     <string name="locale_change_in_progress" msgid="7583992153091537467">"Az ismerőslista frissítése folyamatban van, hogy tükrözze a nyelv módosítását."</string>
     <string name="upgrade_in_progress" msgid="474511436863451061">"Az ismerőslista frissítése folyamatban van."</string>
-    <string name="upgrade_out_of_memory" msgid="1209994418877625940">"A névjegyek frissítése folyamatban van. \n\nA frissítés elvégzéséhez megközelítőleg <xliff:g id="SIZE_IN_MEGABYTES">%s</xliff:g> MB belső tárhelyre lesz szükség.\n\nVálasszon a következő lehetőségek közül:"</string>
-    <string name="upgrade_out_of_memory_uninstall" msgid="1721798828992091432">"Távolítson el néhány alkalmazást"</string>
-    <string name="upgrade_out_of_memory_retry" msgid="8431289830472724609">"Verziófrissítés újrapróbálása"</string>
     <string name="search_results_searching" msgid="3984833028938569930">"Keresés..."</string>
     <string name="menu_display_selected" msgid="6470001164297969034">"Kiválasztottak megjelenítése"</string>
     <string name="menu_display_all" msgid="8887488642609786198">"Összes megjelenítése"</string>
@@ -160,10 +164,10 @@
     <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>
-  <plurals name="merge_info">
-    <item quantity="one" msgid="148365587896371969">"nincs egyesítve"</item>
-    <item quantity="other" msgid="425683718017380845">"egyesítve <xliff:g id="COUNT">%0$d</xliff:g> forrásból"</item>
-  </plurals>
+    <plurals name="merge_info" formatted="false" msgid="2489323424994280962">
+      <item quantity="other">egyesítve <xliff:g id="COUNT">%0$d</xliff:g> forrásból</item>
+      <item quantity="one">nincs egyesítve</item>
+    </plurals>
     <string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"Összekapcsolja a jelenlegi névjegyet a kiválasztott névjeggyel?"</string>
     <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"A kiválasztott névjegy szerkesztésére vált? Az eddig beírt információk át lesznek másolva."</string>
     <string name="menu_copyContact" msgid="1573960845106822639">"Másolás a saját névjegyeim közé"</string>
@@ -172,7 +176,7 @@
     <string name="list_filter_custom" msgid="8910173055702057002">"Egyéni"</string>
     <string name="activity_title_settings" msgid="5464130076132770781">"Beállítások"</string>
     <string name="menu_settings" msgid="377929915873428211">"Beállítások"</string>
-    <string name="menu_help" msgid="5123887102216637725">"Súgó"</string>
+    <string name="menu_help" msgid="1680178646764069976">"Súgó és visszajelzés"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"Megjelenítési beállítások"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="non_phone_caption" msgid="1541655052330027380">"Telefonszám"</string>
@@ -188,19 +192,19 @@
     <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Névjegyek importálása"</string>
     <string name="create_group_dialog_title" msgid="6874527142828424475">"Új csoport létrehozása"</string>
     <string name="create_group_item_label" msgid="4411981763169654825">"Új csoport létrehozása"</string>
-  <plurals name="num_groups_in_account">
-    <item quantity="one" msgid="2944819210288517794">"1 csoport"</item>
-    <item quantity="other" msgid="1276758425904917367">"<xliff:g id="COUNT">%0$d</xliff:g> csoport"</item>
-  </plurals>
+    <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
+      <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> csoport</item>
+      <item quantity="one">1 csoport</item>
+    </plurals>
     <string name="delete_group_dialog_message" msgid="7586856514337560529">"Törli a következő csoportot \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\"? (Maguk a névjegyek nem kerülnek törlésre.)"</string>
-  <plurals name="num_contacts_in_group">
-    <item quantity="one" msgid="1352418549951013448">"<xliff:g id="COUNT_0">%1$d</xliff:g> személy ebben: <xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>"</item>
-    <item quantity="other" msgid="8146027769011086349">"<xliff:g id="COUNT_0">%1$d</xliff:g> személy ebben: <xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>"</item>
-  </plurals>
-  <plurals name="group_list_num_contacts_in_group">
-    <item quantity="one" msgid="3323065321661972446">"<xliff:g id="COUNT">%1$d</xliff:g> személy"</item>
-    <item quantity="other" msgid="6251996206137048525">"<xliff:g id="COUNT">%1$d</xliff:g> személy"</item>
-  </plurals>
+    <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> személy a(z) <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g> csoportból</item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> személy a(z) <xliff:g id="ACCOUNT_TYPE_1">%2$s</xliff:g> csoportból</item>
+    </plurals>
+    <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
+      <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> személy</item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> személy</item>
+    </plurals>
     <string name="toast_join_with_empty_contact" msgid="2238581529864542985">"Írja be az ismerős nevét, mielőtt összekapcsolná egy másik ismerősével."</string>
     <string name="copy_text" msgid="3257145021583508761">"Másolás vágólapra"</string>
     <string name="set_default" msgid="4417505153468300351">"Beállítás alapértelmezettként"</string>
@@ -264,4 +268,5 @@
     <string name="content_description_recent_call" msgid="5183800406316723676">"hívás a közelmúltban. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. kattintson a visszahíváshoz"</string>
     <string name="message_from_you_prefix" msgid="7180706529908434482">"Ön: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
     <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"A Hangouts jobban működik, ha a személy Hangouts-azonosítóját adja meg az e-mail vagy telefonszám mezőben."</string>
+    <string name="compact_editor_more_fields" msgid="2874181192382284115">"További mezők"</string>
 </resources>
diff --git a/res/values-hy-rAM/strings.xml b/res/values-hy-rAM/strings.xml
index cec0bf3..39108ea 100644
--- a/res/values-hy-rAM/strings.xml
+++ b/res/values-hy-rAM/strings.xml
@@ -46,6 +46,7 @@
     <string name="description_action_menu_add_star" msgid="3327186327234177456">"Ավելացված է ընտրյալներում"</string>
     <string name="menu_editContact" msgid="9042415603857662633">"Խմբագրել"</string>
     <string name="menu_deleteContact" msgid="6788644058868189393">"Ջնջել"</string>
+    <string name="menu_change_photo" msgid="7769177631511496210">"Փոխել լուսանկարը"</string>
     <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Տեղադրել գլխավոր էկրանին"</string>
     <string name="menu_call" msgid="3992595586042260618">"Զանգել կոնտակտին"</string>
     <string name="menu_sendSMS" msgid="5535886767547006515">"Հաղորդագրել կոնտակտին"</string>
@@ -56,17 +57,23 @@
     <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Ավելացնել խումբ"</string>
     <string name="splitConfirmation_title" msgid="633640935430370530">"Բաժանե՞լ կոնտակտը"</string>
     <string name="splitConfirmation" msgid="740190210499587175">"Այս կոնտակտը կբաժանվի մի քանի կոնտակտների:"</string>
-    <string name="menu_joinAggregate" msgid="5027981918265667970">"Միացնել"</string>
+    <string name="menu_joinAggregate" msgid="4050157483569357666">"Միավորել"</string>
     <string name="titleJoinContactDataWith" msgid="7684875775798635354">"Միացնել կոնտակտները"</string>
     <string name="blurbJoinContactDataWith" msgid="8736488417422708236">"Ընտրեք կոնտակտը, որը ցանկանում եք միացնել <xliff:g id="NAME">%s</xliff:g>-ին"</string>
     <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Ցույց տալ բոլոր կոնտակտները"</string>
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Առաջարկվող կոնտակները"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Բոլոր կոնտակտները"</string>
-    <string name="contactsJoinedMessage" msgid="7208148163607047389">"Կոնտակտները միացվեցին"</string>
+    <string name="contactsJoinedMessage" msgid="656936718666768589">"Կոնտակտները միավորվեցին"</string>
+    <string name="contacts_deleted_toast" msgid="286851430992788215">"Կոնտակտները ջնջվեցին"</string>
     <string name="menu_set_ring_tone" msgid="8728345772068064946">"Կարգավորել զանգերանգը"</string>
     <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Բոլոր զանգերը՝ ձայնային փոստին"</string>
     <string name="readOnlyContactWarning" msgid="7808825687289848259">"Դուք չէք կարող ջնջել միայն ընթերցման համար նախատեսված հաշիվների կոնտակտները, սակայն կարող եք ձեր կոնտակտների ցանկից թաքցնել:"</string>
     <string name="readOnlyContactDeleteConfirmation" msgid="2137170726670196909">"Այս կոնտակտը պարունակում է տվյալներմի քանի հաշվիներից: Միայն ընթերցելի հաշիվներից տվյալները կթաքցվեն ձեր կոնտակների ցանկից, չեն ջնջվի:"</string>
+    <string name="batch_merge_single_contact_warning" msgid="982585201970392110">"Միավորելու համար հարկավոր է ընտրել առնվազն երկու կոնտակտ:"</string>
+    <string name="batch_merge_confirmation" msgid="8551299480317422420">"Ընտրված կոնտակտները կմիավորվեն մեկ կոնտակտում:"</string>
+    <string name="batch_delete_confirmation" msgid="2564172328268885394">"Ընտրված կոնտակտները ջնջվելու են:"</string>
+    <string name="batch_delete_read_only_contact_confirmation" msgid="6614878716815412523">"Միայն կարդալու հաշիվների տվյալները ձեր կոնտակտների ցանկերում կթաքցվեն, սակայն չեն ջնջվի:"</string>
+    <string name="batch_delete_multiple_accounts_confirmation" msgid="5189722181586680185">"Այս կոնտակտները պարունակում են տվյալներ մի քանի հաշիվներից: Միայն կարդալու հաշիվների տվյալները ձեր կոնտակտների ցանկերում կթաքցվեն, սակայն չեն ջնջվի:"</string>
     <string name="multipleContactDeleteConfirmation" msgid="938900978442960800">"Այս կոնտակտը ջնջելիս տվյալները ևս մի քանի հաշիվներից կջնջվեն:"</string>
     <string name="deleteConfirmation" msgid="811706994761610640">"Այս կոնտակտը կջնջվի:"</string>
     <string name="menu_discard" msgid="6854657936970228164">"Հրաժարվել փոփոխություններից"</string>
@@ -94,20 +101,20 @@
     <string name="contactSavedErrorToast" msgid="3207250533172944892">"Հնարավոր չէ պահել կոնտակտային փոփոխությունները:"</string>
     <string name="groupSavedToast" msgid="1168756874239833756">"Խումբը պահվեց:"</string>
     <string name="groupSavedErrorToast" msgid="7984466936615304740">"Հնարավոր չէ պահել խմբի փոփոխությունները:"</string>
-  <plurals name="listTotalPhoneContacts">
-    <item quantity="one" msgid="3015357862286673986">"1 կոնտակտ հեռախոսահամարով"</item>
-    <item quantity="other" msgid="3299954047880968205">"<xliff:g id="COUNT">%d</xliff:g> կոնտակտ հեռախոսահամարներով"</item>
-  </plurals>
+    <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
+      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> հեռախոսահամարով կոնտակտ</item>
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> հեռախոսահամարով կոնտակտ</item>
+    </plurals>
     <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"Հեռախոսահամարներով կոնտակտներ չկան"</string>
-  <plurals name="listFoundAllContacts">
-    <item quantity="one" msgid="5517063038754171134">"1 գտնված"</item>
-    <item quantity="other" msgid="3852668542926965042">"<xliff:g id="COUNT">%d</xliff:g> գտնված"</item>
-  </plurals>
+    <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
+      <item quantity="one">Գտնվել է <xliff:g id="COUNT">%d</xliff:g> կոնտակտ</item>
+      <item quantity="other">Գտնվել է <xliff:g id="COUNT">%d</xliff:g> կոնտակտ</item>
+    </plurals>
     <string name="listFoundAllContactsZero" msgid="922980883593159444">"Կոտնակտներ չկան"</string>
-  <plurals name="searchFoundContacts">
-    <item quantity="one" msgid="4826918429708286628">"գտնվել է 1-ը"</item>
-    <item quantity="other" msgid="7988132539476575389">"<xliff:g id="COUNT">%d</xliff:g> գտնված"</item>
-  </plurals>
+    <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
+      <item quantity="one">Գտնվել է <xliff:g id="COUNT">%d</xliff:g> կոնտակտ</item>
+      <item quantity="other">Գտնվել է <xliff:g id="COUNT">%d</xliff:g> կոնտակտ</item>
+    </plurals>
     <string name="all_contacts_tab_label" msgid="6250372293594147703">"Բոլոր կոնտակտները"</string>
     <string name="favorites_tab_label" msgid="1524869648904016414">"Ընտրանի"</string>
     <string name="callBack" msgid="5498224409038809224">"Հետ զանգել"</string>
@@ -144,9 +151,6 @@
     <string name="pick_new_photo" msgid="9122450996263688237">"Ընտրել նոր լուսանկար"</string>
     <string name="locale_change_in_progress" msgid="7583992153091537467">"Կոնտակտների ցանկը թարմացվում է՝ լեզվի փոփոխություններն արտացոլելու համար:"</string>
     <string name="upgrade_in_progress" msgid="474511436863451061">"Կոնտակտների ցանկը թարմացվում է:"</string>
-    <string name="upgrade_out_of_memory" msgid="1209994418877625940">"Կոնտակտները թարմացման գործընթացի մեջ են:\n\nԹարմացման գործընթացը պահանջում է մոտավորապես <xliff:g id="SIZE_IN_MEGABYTES">%s</xliff:g> ՄԲ հեռախոսի ներքին պահոց:\n\nԸնտրեք հետևյալ ընրանքներից մեկը՝"</string>
-    <string name="upgrade_out_of_memory_uninstall" msgid="1721798828992091432">"Ապատեղադրել որոշ ծրագրեր"</string>
-    <string name="upgrade_out_of_memory_retry" msgid="8431289830472724609">"Կրկին փորձել թարմացնել"</string>
     <string name="search_results_searching" msgid="3984833028938569930">"Որոնում..."</string>
     <string name="menu_display_selected" msgid="6470001164297969034">"Ցույց տալ ընտրվածները"</string>
     <string name="menu_display_all" msgid="8887488642609786198">"Ցուցադրել բոլորը"</string>
@@ -160,10 +164,10 @@
     <string name="primary_photo" msgid="8517942231868516999">"Հիմնական լուսանկար"</string>
     <string name="description_star" msgid="2605854427360036550">"ընտրյալ"</string>
     <string name="edit_contact" msgid="7529281274005689512">"Խմբագրել կոնտակտը"</string>
-  <plurals name="merge_info">
-    <item quantity="one" msgid="148365587896371969">"չմիավորված"</item>
-    <item quantity="other" msgid="425683718017380845">"միացվել է <xliff:g id="COUNT">%0$d</xliff:g> աղբյուրից"</item>
-  </plurals>
+    <plurals name="merge_info" formatted="false" msgid="2489323424994280962">
+      <item quantity="one">միավորված <xliff:g id="COUNT">%0$d</xliff:g> աղբյուրից</item>
+      <item quantity="other">միավորված <xliff:g id="COUNT">%0$d</xliff:g> աղբյուրից</item>
+    </plurals>
     <string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"Միացնե՞լ այս կոնտակտը ընտրված կոնտակտի հետ"</string>
     <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Փոխարկե՞լ ընտրված կոնտակտի խմբագրմանը: Մինչ այս պահը ձեր մուտքագրած տեղեկությունները կպատճենվեն:"</string>
     <string name="menu_copyContact" msgid="1573960845106822639">"Պատճենել Իմ կոնտակտներում"</string>
@@ -172,7 +176,7 @@
     <string name="list_filter_custom" msgid="8910173055702057002">"Հատուկ"</string>
     <string name="activity_title_settings" msgid="5464130076132770781">"Կարգավորումներ"</string>
     <string name="menu_settings" msgid="377929915873428211">"Կարգավորումներ"</string>
-    <string name="menu_help" msgid="5123887102216637725">"Օգնություն"</string>
+    <string name="menu_help" msgid="1680178646764069976">"Օգնություն և հետադարձ կապ"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"Ցուցադրման ընտրանքներ"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="non_phone_caption" msgid="1541655052330027380">"Հեռախոսահամար"</string>
@@ -188,19 +192,19 @@
     <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Ներմուծել կոնտակտներ"</string>
     <string name="create_group_dialog_title" msgid="6874527142828424475">"Ստեղծել նոր խումբ"</string>
     <string name="create_group_item_label" msgid="4411981763169654825">"Ստեղծել նոր խումբ"</string>
-  <plurals name="num_groups_in_account">
-    <item quantity="one" msgid="2944819210288517794">"1 խումբ"</item>
-    <item quantity="other" msgid="1276758425904917367">"<xliff:g id="COUNT">%0$d</xliff:g> խումբ"</item>
-  </plurals>
+    <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
+      <item quantity="one"><xliff:g id="COUNT">%0$d</xliff:g> խումբ</item>
+      <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> խումբ</item>
+    </plurals>
     <string name="delete_group_dialog_message" msgid="7586856514337560529">"Ջնջե՞լ «<xliff:g id="GROUP_LABEL">%1$s</xliff:g>» խումբը: (Կոնտակտները չեն ջնջվի:)"</string>
-  <plurals name="num_contacts_in_group">
-    <item quantity="one" msgid="1352418549951013448">"<xliff:g id="COUNT_0">%1$d</xliff:g> անձ <xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>-ից"</item>
-    <item quantity="other" msgid="8146027769011086349">"<xliff:g id="COUNT_0">%1$d</xliff:g> մարդ <xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>-ից"</item>
-  </plurals>
-  <plurals name="group_list_num_contacts_in_group">
-    <item quantity="one" msgid="3323065321661972446">"<xliff:g id="COUNT">%1$d</xliff:g> անձ"</item>
-    <item quantity="other" msgid="6251996206137048525">"<xliff:g id="COUNT">%1$d</xliff:g> մարդ"</item>
-  </plurals>
+    <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
+      <item quantity="one"><xliff:g id="COUNT_2">%1$d</xliff:g> մարդ <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g>-ից</item>
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> մարդ <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g>-ից</item>
+    </plurals>
+    <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
+      <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> մարդ</item>
+      <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> մարդ</item>
+    </plurals>
     <string name="toast_join_with_empty_contact" msgid="2238581529864542985">"Մուտքագրեք կոնտակտի անունը մեկ ուրիշի հետ միացնելուց առաջ:"</string>
     <string name="copy_text" msgid="3257145021583508761">"Պատճենել սեղմատախտակին"</string>
     <string name="set_default" msgid="4417505153468300351">"Սահմանել լռելյայն"</string>
@@ -214,7 +218,7 @@
     <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="no_account_prompt" msgid="6424883302325061025">"Կոնտակտների հավելվածն ավելի լավ է աշխատում Google հաշվի հետ:\n\n• Մուտք գործեք ցանկացած վեբ դիտարկչով:\n• Պահուստավորեք ձեր կոնտակտներն ապահով ճանապարհով:"</string>
+    <string name="no_account_prompt" msgid="6424883302325061025">"Կոնտակտների հավելվածն ավելի լավ է աշխատում Google հաշվի հետ:\n\n• Մուտք գործեք ցանկացած վեբ դիտարկիչով:\n• Պահուստավորեք ձեր կոնտակտներն ապահով ճանապարհով:"</string>
     <string name="generic_no_account_prompt" msgid="7218827704367325460">"Պահեք ձեր կոնտակտները ապահով, նույնիսկ եթե կորցնեք ձեր հեռախոսը. համաժամեցրեք առցանց ծառայության հետ:"</string>
     <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Ավելացնել հաշիվ"</string>
     <string name="contact_editor_prompt_zero_accounts" msgid="1785345895691886499">"Ձեր նոր կոնտակտը չի պահուստավորվի: Ավելացնե՞լ հաշիվ, որն առցանց է պահուստավորում կոնտակտները:"</string>
@@ -264,4 +268,5 @@
     <string name="content_description_recent_call" msgid="5183800406316723676">"վերջին զանգը՝ <xliff:g id="CALL_TYPE">%s</xliff:g>, <xliff:g id="PHONE_NUMBER">%s</xliff:g>, <xliff:g id="DATE">%s</xliff:g>, սեղմեք՝ հետ զանգելու համար"</string>
     <string name="message_from_you_prefix" msgid="7180706529908434482">"Դուք՝ <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
     <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"Hangouts-ն ավելի լավ կաշխատի, եթե էլփոստի կամ հեռախոսի դաշտում մուտքագրեք Hangouts-ի օգտվողի նույնացուցիչը:"</string>
+    <string name="compact_editor_more_fields" msgid="2874181192382284115">"Լրացուցիչ դաշտեր"</string>
 </resources>
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
index 700170f..7e3c061 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -46,6 +46,7 @@
     <string name="description_action_menu_add_star" msgid="3327186327234177456">"Ditambahkan ke favorit"</string>
     <string name="menu_editContact" msgid="9042415603857662633">"Edit"</string>
     <string name="menu_deleteContact" msgid="6788644058868189393">"Hapus"</string>
+    <string name="menu_change_photo" msgid="7769177631511496210">"Ganti foto"</string>
     <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Letakkan di layar Utama"</string>
     <string name="menu_call" msgid="3992595586042260618">"Hubungi kontak"</string>
     <string name="menu_sendSMS" msgid="5535886767547006515">"SMS kontak"</string>
@@ -56,17 +57,23 @@
     <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Tambahkan Grup"</string>
     <string name="splitConfirmation_title" msgid="633640935430370530">"Pisahkan kontak?"</string>
     <string name="splitConfirmation" msgid="740190210499587175">"Kontak ini akan dipisahkan menjadi beberapa kontak."</string>
-    <string name="menu_joinAggregate" msgid="5027981918265667970">"Gabung"</string>
+    <string name="menu_joinAggregate" msgid="4050157483569357666">"Gabungkan"</string>
     <string name="titleJoinContactDataWith" msgid="7684875775798635354">"Gabungkan kontak"</string>
     <string name="blurbJoinContactDataWith" msgid="8736488417422708236">"Pilih kontak ingin Anda gabungkan dengan <xliff:g id="NAME">%s</xliff:g>:"</string>
     <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Tampilkan semua kontak"</string>
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Kontak yang disarankan"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Semua kontak"</string>
-    <string name="contactsJoinedMessage" msgid="7208148163607047389">"Kontak telah bergabung"</string>
+    <string name="contactsJoinedMessage" msgid="656936718666768589">"Kontak digabungkan"</string>
+    <string name="contacts_deleted_toast" msgid="286851430992788215">"Kontak dihapus"</string>
     <string name="menu_set_ring_tone" msgid="8728345772068064946">"Setel nada dering"</string>
     <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Panggilan masuk kotak pesan"</string>
     <string name="readOnlyContactWarning" msgid="7808825687289848259">"Anda tidak dapat menghapus kontak dari akun hanya-baca, namun Anda dapat menyembunyikannya dalam daftar kontak Anda."</string>
     <string name="readOnlyContactDeleteConfirmation" msgid="2137170726670196909">"Kontak ini berisi informasi dari beberapa akun. Informasi dari akun hanya-baca akan disembunyikan dalam daftar kontak Anda, tidak dihapus."</string>
+    <string name="batch_merge_single_contact_warning" msgid="982585201970392110">"Anda perlu memilih sedikitnya dua kontak untuk menggabungkan."</string>
+    <string name="batch_merge_confirmation" msgid="8551299480317422420">"Kontak yang dipilih akan digabung menjadi satu kontak."</string>
+    <string name="batch_delete_confirmation" msgid="2564172328268885394">"Kontak yang dipilih akan dihapus."</string>
+    <string name="batch_delete_read_only_contact_confirmation" msgid="6614878716815412523">"Informasi dari akun hanya-baca akan disembunyikan dalam daftar kontak Anda, tidak dihapus."</string>
+    <string name="batch_delete_multiple_accounts_confirmation" msgid="5189722181586680185">"Kontak ini berisi informasi dari beberapa akun. Informasi dari akun hanya-baca akan disembunyikan dalam daftar kontak Anda, tidak dihapus."</string>
     <string name="multipleContactDeleteConfirmation" msgid="938900978442960800">"Menghapus kontak ini akan menghapus informasi dari beberapa akun."</string>
     <string name="deleteConfirmation" msgid="811706994761610640">"Kontak ini akan dihapus."</string>
     <string name="menu_discard" msgid="6854657936970228164">"Batalkan perubahan"</string>
@@ -94,20 +101,20 @@
     <string name="contactSavedErrorToast" msgid="3207250533172944892">"Tidak dapat menyimpan perubahan kontak."</string>
     <string name="groupSavedToast" msgid="1168756874239833756">"Grup disimpan."</string>
     <string name="groupSavedErrorToast" msgid="7984466936615304740">"Tidak dapat menyimpan perubahan grup."</string>
-  <plurals name="listTotalPhoneContacts">
-    <item quantity="one" msgid="3015357862286673986">"1 kontak dengan nomor telepon"</item>
-    <item quantity="other" msgid="3299954047880968205">"<xliff:g id="COUNT">%d</xliff:g> kontak dengan nomor telepon"</item>
-  </plurals>
+    <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> kontak dengan nomor telepon</item>
+      <item quantity="one">1 kontak dengan nomor telepon</item>
+    </plurals>
     <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"Tidak ada kontak dengan nomor telepon"</string>
-  <plurals name="listFoundAllContacts">
-    <item quantity="one" msgid="5517063038754171134">"Ada 1"</item>
-    <item quantity="other" msgid="3852668542926965042">"Ada <xliff:g id="COUNT">%d</xliff:g>"</item>
-  </plurals>
+    <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ditemukan</item>
+      <item quantity="one">1 ditemukan</item>
+    </plurals>
     <string name="listFoundAllContactsZero" msgid="922980883593159444">"Tidak ada kontak"</string>
-  <plurals name="searchFoundContacts">
-    <item quantity="one" msgid="4826918429708286628">"Ada 1"</item>
-    <item quantity="other" msgid="7988132539476575389">"Ada <xliff:g id="COUNT">%d</xliff:g>"</item>
-  </plurals>
+    <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ditemukan</item>
+      <item quantity="one">1 ditemukan</item>
+    </plurals>
     <string name="all_contacts_tab_label" msgid="6250372293594147703">"Semua kontak"</string>
     <string name="favorites_tab_label" msgid="1524869648904016414">"Favorit"</string>
     <string name="callBack" msgid="5498224409038809224">"Hubungi kembali"</string>
@@ -144,9 +151,6 @@
     <string name="pick_new_photo" msgid="9122450996263688237">"Pilih foto baru"</string>
     <string name="locale_change_in_progress" msgid="7583992153091537467">"Daftar kontak sedang diperbarui untuk mencerminkan perubahan bahasa."</string>
     <string name="upgrade_in_progress" msgid="474511436863451061">"Daftar kontak sedang diperbarui."</string>
-    <string name="upgrade_out_of_memory" msgid="1209994418877625940">"Kontak sedang dalam proses peningkatan versi. \n\nProses peningkatan versi memerlukan sekitar <xliff:g id="SIZE_IN_MEGABYTES">%s</xliff:g> MB dari penyimpanan internal.\n\nPilih salah satu opsi berikut:"</string>
-    <string name="upgrade_out_of_memory_uninstall" msgid="1721798828992091432">"Copot pemasangan beberapa aplikasi"</string>
-    <string name="upgrade_out_of_memory_retry" msgid="8431289830472724609">"Coba peningkatan versi sekali lagi"</string>
     <string name="search_results_searching" msgid="3984833028938569930">"Menelusuri..."</string>
     <string name="menu_display_selected" msgid="6470001164297969034">"Tampilkan yang dipilih"</string>
     <string name="menu_display_all" msgid="8887488642609786198">"Tampilkan semua"</string>
@@ -160,10 +164,10 @@
     <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>
-  <plurals name="merge_info">
-    <item quantity="one" msgid="148365587896371969">"tidak digabung"</item>
-    <item quantity="other" msgid="425683718017380845">"digabungkan dari <xliff:g id="COUNT">%0$d</xliff:g> sumber"</item>
-  </plurals>
+    <plurals name="merge_info" formatted="false" msgid="2489323424994280962">
+      <item quantity="other">digabungkan dari <xliff:g id="COUNT">%0$d</xliff:g> sumber</item>
+      <item quantity="one">tidak digabungkan</item>
+    </plurals>
     <string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"Gabungkan kontak ini dengan kontak yang dipilih?"</string>
     <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Beralih ke mengedit kontak yang dipilih? Informasi yang telah Anda masukkan sejauh ini akan disalin."</string>
     <string name="menu_copyContact" msgid="1573960845106822639">"Salin ke Kontak Saya"</string>
@@ -172,7 +176,7 @@
     <string name="list_filter_custom" msgid="8910173055702057002">"Khusus"</string>
     <string name="activity_title_settings" msgid="5464130076132770781">"Setelan"</string>
     <string name="menu_settings" msgid="377929915873428211">"Setelan"</string>
-    <string name="menu_help" msgid="5123887102216637725">"Bantuan"</string>
+    <string name="menu_help" msgid="1680178646764069976">"Bantuan &amp; masukan"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"Opsi tampilan"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="non_phone_caption" msgid="1541655052330027380">"Nomor telepon"</string>
@@ -188,19 +192,19 @@
     <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Impor kontak"</string>
     <string name="create_group_dialog_title" msgid="6874527142828424475">"Buat grup baru"</string>
     <string name="create_group_item_label" msgid="4411981763169654825">"Buat grup baru"</string>
-  <plurals name="num_groups_in_account">
-    <item quantity="one" msgid="2944819210288517794">"1 grup"</item>
-    <item quantity="other" msgid="1276758425904917367">"<xliff:g id="COUNT">%0$d</xliff:g> grup"</item>
-  </plurals>
+    <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
+      <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> grup</item>
+      <item quantity="one">1 grup</item>
+    </plurals>
     <string name="delete_group_dialog_message" msgid="7586856514337560529">"Menghapus grup \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\"? (Kontak itu sendiri tidak akan dihapus.)"</string>
-  <plurals name="num_contacts_in_group">
-    <item quantity="one" msgid="1352418549951013448">"<xliff:g id="COUNT_0">%1$d</xliff:g> orang dari <xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>"</item>
-    <item quantity="other" msgid="8146027769011086349">"<xliff:g id="COUNT_0">%1$d</xliff:g> orang dari <xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>"</item>
-  </plurals>
-  <plurals name="group_list_num_contacts_in_group">
-    <item quantity="one" msgid="3323065321661972446">"<xliff:g id="COUNT">%1$d</xliff:g> orang"</item>
-    <item quantity="other" msgid="6251996206137048525">"<xliff:g id="COUNT">%1$d</xliff:g> orang"</item>
-  </plurals>
+    <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> orang dari <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> orang dari <xliff:g id="ACCOUNT_TYPE_1">%2$s</xliff:g></item>
+    </plurals>
+    <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
+      <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> orang</item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> orang</item>
+    </plurals>
     <string name="toast_join_with_empty_contact" msgid="2238581529864542985">"Ketik nama kontak sebelum menggabungkan dengan lainnya."</string>
     <string name="copy_text" msgid="3257145021583508761">"Salin ke papan klip"</string>
     <string name="set_default" msgid="4417505153468300351">"Setel sebagai default"</string>
@@ -264,4 +268,5 @@
     <string name="content_description_recent_call" msgid="5183800406316723676">"panggilan telepon terbaru. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. klik untuk menelepon balik"</string>
     <string name="message_from_you_prefix" msgid="7180706529908434482">"Anda: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
     <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"Hangouts bekerja lebih baik jika Anda memasukkan pengidentifikasi Hangouts orang tersebut ke bidang email atau bidang ponsel."</string>
+    <string name="compact_editor_more_fields" msgid="2874181192382284115">"Bidang Lainnya"</string>
 </resources>
diff --git a/res/values-is-rIS/strings.xml b/res/values-is-rIS/strings.xml
index ff21e1e..362e368 100644
--- a/res/values-is-rIS/strings.xml
+++ b/res/values-is-rIS/strings.xml
@@ -46,6 +46,7 @@
     <string name="description_action_menu_add_star" msgid="3327186327234177456">"Bætt við uppáhald"</string>
     <string name="menu_editContact" msgid="9042415603857662633">"Breyta"</string>
     <string name="menu_deleteContact" msgid="6788644058868189393">"Eyða"</string>
+    <string name="menu_change_photo" msgid="7769177631511496210">"Skipta um mynd"</string>
     <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Setja á heimaskjáinn"</string>
     <string name="menu_call" msgid="3992595586042260618">"Hringja í tengilið"</string>
     <string name="menu_sendSMS" msgid="5535886767547006515">"Senda tengilið textaskilaboð"</string>
@@ -56,17 +57,23 @@
     <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Bæta hóp við"</string>
     <string name="splitConfirmation_title" msgid="633640935430370530">"Skipta tengilið upp?"</string>
     <string name="splitConfirmation" msgid="740190210499587175">"Þessum tengilið verður skipt upp í fleiri tengiliði."</string>
-    <string name="menu_joinAggregate" msgid="5027981918265667970">"Tengja"</string>
+    <string name="menu_joinAggregate" msgid="4050157483569357666">"Sameina"</string>
     <string name="titleJoinContactDataWith" msgid="7684875775798635354">"Sameina tengiliði"</string>
     <string name="blurbJoinContactDataWith" msgid="8736488417422708236">"Veldu tengiliðinn sem þú vilt að <xliff:g id="NAME">%s</xliff:g> sameinist:"</string>
     <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Sýna alla tengiliði"</string>
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Tillögur að tengiliðum"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Allir tengiliðir"</string>
-    <string name="contactsJoinedMessage" msgid="7208148163607047389">"Tengiliðirnir voru sameinaðir"</string>
+    <string name="contactsJoinedMessage" msgid="656936718666768589">"Tengiliðir sameinaðir"</string>
+    <string name="contacts_deleted_toast" msgid="286851430992788215">"Tengiliðum eytt"</string>
     <string name="menu_set_ring_tone" msgid="8728345772068064946">"Velja hringitón"</string>
     <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Öll símtöl í talhólf"</string>
     <string name="readOnlyContactWarning" msgid="7808825687289848259">"Ekki er hægt að eyða tengiliðum af skrifvörðum reikningum en hægt er að fela þá í tengliðalistanum."</string>
     <string name="readOnlyContactDeleteConfirmation" msgid="2137170726670196909">"Þessi tengiliður inniheldur upplýsingar af mörgum reikningum. Upplýsingar af skrifvörðum reikningum verða faldar í tengiliðalistanum en ekki eytt."</string>
+    <string name="batch_merge_single_contact_warning" msgid="982585201970392110">"Þú þarft að velja a.m.k. tvo tengiliði til að sameina."</string>
+    <string name="batch_merge_confirmation" msgid="8551299480317422420">"Valdir tengiliðir verða sameinaðir í einn tengilið."</string>
+    <string name="batch_delete_confirmation" msgid="2564172328268885394">"Völdum tengiliðum verður eytt."</string>
+    <string name="batch_delete_read_only_contact_confirmation" msgid="6614878716815412523">"Upplýsingar af skrifvörðum reikningum verða faldar í tengiliðalistanum en ekki eytt."</string>
+    <string name="batch_delete_multiple_accounts_confirmation" msgid="5189722181586680185">"Þessir tengiliðir innihalda upplýsingar af mörgum reikningum. Upplýsingar af skrifvörðum reikningum verða faldar í tengiliðalistanum en ekki eytt."</string>
     <string name="multipleContactDeleteConfirmation" msgid="938900978442960800">"Ef þessum tengilið er eytt verður upplýsingum eytt af mörgum reikningum."</string>
     <string name="deleteConfirmation" msgid="811706994761610640">"Þessum tengilið verður eytt."</string>
     <string name="menu_discard" msgid="6854657936970228164">"Hætta við breytingar"</string>
@@ -94,20 +101,20 @@
     <string name="contactSavedErrorToast" msgid="3207250533172944892">"Ekki tókst að vista breytingar á tengiliðnum."</string>
     <string name="groupSavedToast" msgid="1168756874239833756">"Hópur vistaður."</string>
     <string name="groupSavedErrorToast" msgid="7984466936615304740">"Ekki tókst að vista breytingarnar á hópnum."</string>
-  <plurals name="listTotalPhoneContacts">
-    <item quantity="one" msgid="3015357862286673986">"Einn tengiliður með símanúmer"</item>
-    <item quantity="other" msgid="3299954047880968205">"<xliff:g id="COUNT">%d</xliff:g> tengiliðir með símanúmer"</item>
-  </plurals>
+    <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
+      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> tengiliður með símanúmer</item>
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> tengiliðir með símanúmer</item>
+    </plurals>
     <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"Engir tengiliðir með símanúmer"</string>
-  <plurals name="listFoundAllContacts">
-    <item quantity="one" msgid="5517063038754171134">"Einn fannst"</item>
-    <item quantity="other" msgid="3852668542926965042">"<xliff:g id="COUNT">%d</xliff:g> fundust"</item>
-  </plurals>
+    <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
+      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> fannst</item>
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> fundust</item>
+    </plurals>
     <string name="listFoundAllContactsZero" msgid="922980883593159444">"Engir tengiliðir"</string>
-  <plurals name="searchFoundContacts">
-    <item quantity="one" msgid="4826918429708286628">"Einn fannst"</item>
-    <item quantity="other" msgid="7988132539476575389">"<xliff:g id="COUNT">%d</xliff:g> fundust"</item>
-  </plurals>
+    <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
+      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> fannst</item>
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> fundust</item>
+    </plurals>
     <string name="all_contacts_tab_label" msgid="6250372293594147703">"Allir"</string>
     <string name="favorites_tab_label" msgid="1524869648904016414">"Uppáhald"</string>
     <string name="callBack" msgid="5498224409038809224">"Hringja til baka"</string>
@@ -144,9 +151,6 @@
     <string name="pick_new_photo" msgid="9122450996263688237">"Velja nýja mynd"</string>
     <string name="locale_change_in_progress" msgid="7583992153091537467">"Verið er að uppfæra tengiliðalistann í samræmi við valið tungumál."</string>
     <string name="upgrade_in_progress" msgid="474511436863451061">"Verið er að uppfæra tengiliðalistann."</string>
-    <string name="upgrade_out_of_memory" msgid="1209994418877625940">"Verið er að uppfæra tengiliði. \n\nUppfærsluferlið notar u.þ.b. <xliff:g id="SIZE_IN_MEGABYTES">%s</xliff:g> MB af innbyggðu geymslunni.\n\nVeldu einn eftirfarandi valkosta:"</string>
-    <string name="upgrade_out_of_memory_uninstall" msgid="1721798828992091432">"Fjarlægja einhver forrit"</string>
-    <string name="upgrade_out_of_memory_retry" msgid="8431289830472724609">"Prófa uppfærslu aftur"</string>
     <string name="search_results_searching" msgid="3984833028938569930">"Leitar…"</string>
     <string name="menu_display_selected" msgid="6470001164297969034">"Sýna valda"</string>
     <string name="menu_display_all" msgid="8887488642609786198">"Sýna alla"</string>
@@ -160,10 +164,10 @@
     <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>
-  <plurals name="merge_info">
-    <item quantity="one" msgid="148365587896371969">"ekki sameinaður"</item>
-    <item quantity="other" msgid="425683718017380845">"sameinaður úr <xliff:g id="COUNT">%0$d</xliff:g> færslum"</item>
-  </plurals>
+    <plurals name="merge_info" formatted="false" msgid="2489323424994280962">
+      <item quantity="one">sameinaður úr <xliff:g id="COUNT">%0$d</xliff:g> öðrum</item>
+      <item quantity="other">sameinaður úr <xliff:g id="COUNT">%0$d</xliff:g> öðrum</item>
+    </plurals>
     <string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"Viltu sameina núverandi tengilið og valda tengiliðinn?"</string>
     <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Skipta yfir í að breyta völdum tengilið? Upplýsingarnar sem þú hefur sett inn nú þegar verða afritaðar."</string>
     <string name="menu_copyContact" msgid="1573960845106822639">"Afrita í tengiliðina mína"</string>
@@ -172,7 +176,7 @@
     <string name="list_filter_custom" msgid="8910173055702057002">"Sérsniðið"</string>
     <string name="activity_title_settings" msgid="5464130076132770781">"Stillingar"</string>
     <string name="menu_settings" msgid="377929915873428211">"Stillingar"</string>
-    <string name="menu_help" msgid="5123887102216637725">"Hjálp"</string>
+    <string name="menu_help" msgid="1680178646764069976">"Hjálp og ábendingar"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"Birtingarvalkostir"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="non_phone_caption" msgid="1541655052330027380">"Símanúmer"</string>
@@ -188,19 +192,19 @@
     <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Flytja tengiliði inn"</string>
     <string name="create_group_dialog_title" msgid="6874527142828424475">"Búa til nýjan hóp"</string>
     <string name="create_group_item_label" msgid="4411981763169654825">"Búa til nýjan hóp"</string>
-  <plurals name="num_groups_in_account">
-    <item quantity="one" msgid="2944819210288517794">"Einn hópur"</item>
-    <item quantity="other" msgid="1276758425904917367">"<xliff:g id="COUNT">%0$d</xliff:g> hópar"</item>
-  </plurals>
+    <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
+      <item quantity="one"><xliff:g id="COUNT">%0$d</xliff:g> hópur</item>
+      <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> hópar</item>
+    </plurals>
     <string name="delete_group_dialog_message" msgid="7586856514337560529">"Eyða hópnum „<xliff:g id="GROUP_LABEL">%1$s</xliff:g>“? (Tengiliðunum sjálfum verður ekki eytt.)"</string>
-  <plurals name="num_contacts_in_group">
-    <item quantity="one" msgid="1352418549951013448">"<xliff:g id="COUNT_0">%1$d</xliff:g> aðili úr <xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>"</item>
-    <item quantity="other" msgid="8146027769011086349">"<xliff:g id="COUNT_0">%1$d</xliff:g> aðilar úr <xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>"</item>
-  </plurals>
-  <plurals name="group_list_num_contacts_in_group">
-    <item quantity="one" msgid="3323065321661972446">"<xliff:g id="COUNT">%1$d</xliff:g> aðili"</item>
-    <item quantity="other" msgid="6251996206137048525">"<xliff:g id="COUNT">%1$d</xliff:g> aðilar"</item>
-  </plurals>
+    <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
+      <item quantity="one"><xliff:g id="COUNT_2">%1$d</xliff:g> aðili úr <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> aðilar úr <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
+    </plurals>
+    <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
+      <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> aðili</item>
+      <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> aðilar</item>
+    </plurals>
     <string name="toast_join_with_empty_contact" msgid="2238581529864542985">"Sláðu inn nafn tengiliðar áður en þú sameinar hann öðrum."</string>
     <string name="copy_text" msgid="3257145021583508761">"Afrita á klippiborð"</string>
     <string name="set_default" msgid="4417505153468300351">"Velja sem sjálfgefið"</string>
@@ -264,4 +268,5 @@
     <string name="content_description_recent_call" msgid="5183800406316723676">"nýlegt símtal. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. smelltu til að hringja til baka"</string>
     <string name="message_from_you_prefix" msgid="7180706529908434482">"Þú: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
     <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"Hangouts virkar betur ef þú slærð Hangouts auðkenni viðkomandi inn í netfangsreitinn eða símanúmersreitinn."</string>
+    <string name="compact_editor_more_fields" msgid="2874181192382284115">"Fleiri reitir"</string>
 </resources>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index 9b65450..0114638 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -46,6 +46,7 @@
     <string name="description_action_menu_add_star" msgid="3327186327234177456">"Aggiunto ai preferiti"</string>
     <string name="menu_editContact" msgid="9042415603857662633">"Modifica"</string>
     <string name="menu_deleteContact" msgid="6788644058868189393">"Elimina"</string>
+    <string name="menu_change_photo" msgid="7769177631511496210">"Cambia foto"</string>
     <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Aggiungi a schermata Home"</string>
     <string name="menu_call" msgid="3992595586042260618">"Chiama"</string>
     <string name="menu_sendSMS" msgid="5535886767547006515">"Invia SMS"</string>
@@ -56,17 +57,23 @@
     <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Aggiungi gruppo"</string>
     <string name="splitConfirmation_title" msgid="633640935430370530">"Separare contatto?"</string>
     <string name="splitConfirmation" msgid="740190210499587175">"Questo contatto verrà diviso in più contatti."</string>
-    <string name="menu_joinAggregate" msgid="5027981918265667970">"Unisci"</string>
+    <string name="menu_joinAggregate" msgid="4050157483569357666">"Unisci"</string>
     <string name="titleJoinContactDataWith" msgid="7684875775798635354">"Unisci contatti"</string>
     <string name="blurbJoinContactDataWith" msgid="8736488417422708236">"Scegli il contatto che desideri unire a <xliff:g id="NAME">%s</xliff:g>:"</string>
     <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Mostra tutti i contatti"</string>
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Contatti suggeriti"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Tutti i contatti"</string>
-    <string name="contactsJoinedMessage" msgid="7208148163607047389">"Contatti uniti"</string>
+    <string name="contactsJoinedMessage" msgid="656936718666768589">"Contatti uniti"</string>
+    <string name="contacts_deleted_toast" msgid="286851430992788215">"Contatti eliminati"</string>
     <string name="menu_set_ring_tone" msgid="8728345772068064946">"Imposta suoneria"</string>
     <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Tutte le chiamate a segreteria"</string>
     <string name="readOnlyContactWarning" msgid="7808825687289848259">"Non puoi eliminare contatti da account di sola lettura, ma puoi nasconderli nei tuoi elenchi di contatti."</string>
     <string name="readOnlyContactDeleteConfirmation" msgid="2137170726670196909">"Il contatto contiene informazioni da più account. Le informazioni provenienti da account di sola lettura verranno nascoste nei tuoi elenchi di contatti, non eliminate."</string>
+    <string name="batch_merge_single_contact_warning" msgid="982585201970392110">"Devi selezionare almeno due contatti da unire."</string>
+    <string name="batch_merge_confirmation" msgid="8551299480317422420">"I contatti selezionati verranno uniti in un unico contatto."</string>
+    <string name="batch_delete_confirmation" msgid="2564172328268885394">"I contatti selezionati verranno eliminati."</string>
+    <string name="batch_delete_read_only_contact_confirmation" msgid="6614878716815412523">"Le informazioni degli account di sola lettura verranno nascoste nei tuoi elenchi di contatti, non eliminate."</string>
+    <string name="batch_delete_multiple_accounts_confirmation" msgid="5189722181586680185">"Questi contatti contengono informazioni di più account. Le informazioni degli account di sola lettura verranno nascoste nei tuoi elenchi di contatti, non eliminate."</string>
     <string name="multipleContactDeleteConfirmation" msgid="938900978442960800">"L\'eliminazione di questo contatto causerà l\'eliminazione di informazioni da più account."</string>
     <string name="deleteConfirmation" msgid="811706994761610640">"Il contatto verrà eliminato."</string>
     <string name="menu_discard" msgid="6854657936970228164">"Ignora modifiche"</string>
@@ -94,20 +101,20 @@
     <string name="contactSavedErrorToast" msgid="3207250533172944892">"Salvataggio delle modifiche ai contatti non riuscito."</string>
     <string name="groupSavedToast" msgid="1168756874239833756">"Gruppo salvato."</string>
     <string name="groupSavedErrorToast" msgid="7984466936615304740">"Salvataggio delle modifiche ai gruppi non riuscito."</string>
-  <plurals name="listTotalPhoneContacts">
-    <item quantity="one" msgid="3015357862286673986">"1 contatto con numero di telefono"</item>
-    <item quantity="other" msgid="3299954047880968205">"<xliff:g id="COUNT">%d</xliff:g> contatti con numeri di telefono"</item>
-  </plurals>
+    <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> contatti con numero di telefono</item>
+      <item quantity="one">1 contatto con numero di telefono</item>
+    </plurals>
     <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"Nessun contatto con numeri di telefono"</string>
-  <plurals name="listFoundAllContacts">
-    <item quantity="one" msgid="5517063038754171134">"1 trovato"</item>
-    <item quantity="other" msgid="3852668542926965042">"<xliff:g id="COUNT">%d</xliff:g> trovati"</item>
-  </plurals>
+    <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> trovati</item>
+      <item quantity="one">1 trovato</item>
+    </plurals>
     <string name="listFoundAllContactsZero" msgid="922980883593159444">"Nessun contatto"</string>
-  <plurals name="searchFoundContacts">
-    <item quantity="one" msgid="4826918429708286628">"1 trovato"</item>
-    <item quantity="other" msgid="7988132539476575389">"<xliff:g id="COUNT">%d</xliff:g> trovati"</item>
-  </plurals>
+    <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> trovati</item>
+      <item quantity="one">1 trovato</item>
+    </plurals>
     <string name="all_contacts_tab_label" msgid="6250372293594147703">"Tutti"</string>
     <string name="favorites_tab_label" msgid="1524869648904016414">"Preferiti"</string>
     <string name="callBack" msgid="5498224409038809224">"Richiama"</string>
@@ -144,9 +151,6 @@
     <string name="pick_new_photo" msgid="9122450996263688237">"Seleziona nuova foto"</string>
     <string name="locale_change_in_progress" msgid="7583992153091537467">"Elenco contatti in fase di aggiornamento per l\'applicazione della modifica della lingua."</string>
     <string name="upgrade_in_progress" msgid="474511436863451061">"Elenco contatti in fase di aggiornamento."</string>
-    <string name="upgrade_out_of_memory" msgid="1209994418877625940">"Contatti in fase di upgrade. \n\nIl processo di upgrade richiede circa <xliff:g id="SIZE_IN_MEGABYTES">%s</xliff:g> MB di memoria interna.\n\nScegli una delle seguenti opzioni:"</string>
-    <string name="upgrade_out_of_memory_uninstall" msgid="1721798828992091432">"Disinstalla alcune applicazioni"</string>
-    <string name="upgrade_out_of_memory_retry" msgid="8431289830472724609">"Riprova l\'aggiornamento"</string>
     <string name="search_results_searching" msgid="3984833028938569930">"Ricerca..."</string>
     <string name="menu_display_selected" msgid="6470001164297969034">"Mostra selezionati"</string>
     <string name="menu_display_all" msgid="8887488642609786198">"Mostra tutto"</string>
@@ -160,10 +164,10 @@
     <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>
-  <plurals name="merge_info">
-    <item quantity="one" msgid="148365587896371969">"non uniti"</item>
-    <item quantity="other" msgid="425683718017380845">"uniti da <xliff:g id="COUNT">%0$d</xliff:g> origini"</item>
-  </plurals>
+    <plurals name="merge_info" formatted="false" msgid="2489323424994280962">
+      <item quantity="other">uniti da <xliff:g id="COUNT">%0$d</xliff:g> fonti</item>
+      <item quantity="one">non uniti</item>
+    </plurals>
     <string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"Unire il contatto corrente al contatto selezionato?"</string>
     <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Passare alla modifica del contatto selezionato? Le informazioni inserite finora verranno copiate."</string>
     <string name="menu_copyContact" msgid="1573960845106822639">"Copia nei miei contatti"</string>
@@ -172,7 +176,7 @@
     <string name="list_filter_custom" msgid="8910173055702057002">"Personalizza"</string>
     <string name="activity_title_settings" msgid="5464130076132770781">"Impostazioni"</string>
     <string name="menu_settings" msgid="377929915873428211">"Impostazioni"</string>
-    <string name="menu_help" msgid="5123887102216637725">"Guida"</string>
+    <string name="menu_help" msgid="1680178646764069976">"Guida e feedback"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"Opzioni di visualizzazione"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="non_phone_caption" msgid="1541655052330027380">"Numero di telefono"</string>
@@ -188,19 +192,19 @@
     <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Importa contatti"</string>
     <string name="create_group_dialog_title" msgid="6874527142828424475">"Crea nuovo gruppo"</string>
     <string name="create_group_item_label" msgid="4411981763169654825">"Crea nuovo gruppo"</string>
-  <plurals name="num_groups_in_account">
-    <item quantity="one" msgid="2944819210288517794">"1 gruppo"</item>
-    <item quantity="other" msgid="1276758425904917367">"<xliff:g id="COUNT">%0$d</xliff:g> gruppi"</item>
-  </plurals>
+    <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
+      <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> gruppi</item>
+      <item quantity="one">1 gruppo</item>
+    </plurals>
     <string name="delete_group_dialog_message" msgid="7586856514337560529">"Eliminare il gruppo \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\"? (I contatti non verranno eliminati)."</string>
-  <plurals name="num_contacts_in_group">
-    <item quantity="one" msgid="1352418549951013448">"<xliff:g id="COUNT_0">%1$d</xliff:g> persona di <xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>"</item>
-    <item quantity="other" msgid="8146027769011086349">"<xliff:g id="COUNT_0">%1$d</xliff:g> persone di <xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>"</item>
-  </plurals>
-  <plurals name="group_list_num_contacts_in_group">
-    <item quantity="one" msgid="3323065321661972446">"<xliff:g id="COUNT">%1$d</xliff:g> persona"</item>
-    <item quantity="other" msgid="6251996206137048525">"<xliff:g id="COUNT">%1$d</xliff:g> persone"</item>
-  </plurals>
+    <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> persone di <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> persona di <xliff:g id="ACCOUNT_TYPE_1">%2$s</xliff:g></item>
+    </plurals>
+    <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
+      <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> persone</item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> persona</item>
+    </plurals>
     <string name="toast_join_with_empty_contact" msgid="2238581529864542985">"Inserisci il nome del contatto prima di unirlo a un altro contatto."</string>
     <string name="copy_text" msgid="3257145021583508761">"Copia negli appunti"</string>
     <string name="set_default" msgid="4417505153468300351">"Imposta come predefinito"</string>
@@ -264,4 +268,5 @@
     <string name="content_description_recent_call" msgid="5183800406316723676">"chiamata recente. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. fai clic per richiamare"</string>
     <string name="message_from_you_prefix" msgid="7180706529908434482">"Tu: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
     <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"Hangouts funziona meglio se inserisci l\'identificatore Hangouts della persona nel campo dell\'indirizzo email o del numero di telefono."</string>
+    <string name="compact_editor_more_fields" msgid="2874181192382284115">"Atri campi"</string>
 </resources>
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index ce4d42c..9854965 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -46,6 +46,7 @@
     <string name="description_action_menu_add_star" msgid="3327186327234177456">"נוסף למועדפים"</string>
     <string name="menu_editContact" msgid="9042415603857662633">"ערוך"</string>
     <string name="menu_deleteContact" msgid="6788644058868189393">"מחק"</string>
+    <string name="menu_change_photo" msgid="7769177631511496210">"שנה תמונה"</string>
     <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"הצב במסך הבית"</string>
     <string name="menu_call" msgid="3992595586042260618">"התקשר לאיש קשר"</string>
     <string name="menu_sendSMS" msgid="5535886767547006515">"שלח הודעת טקסט לאיש קשר"</string>
@@ -56,17 +57,23 @@
     <string name="menu_new_group_action_bar" msgid="3520232877587377175">"הוסף קבוצה"</string>
     <string name="splitConfirmation_title" msgid="633640935430370530">"לפצל את איש הקשר?"</string>
     <string name="splitConfirmation" msgid="740190210499587175">"איש קשר זה יפוצל למספר אנשי קשר."</string>
-    <string name="menu_joinAggregate" msgid="5027981918265667970">"צרף"</string>
+    <string name="menu_joinAggregate" msgid="4050157483569357666">"מזג"</string>
     <string name="titleJoinContactDataWith" msgid="7684875775798635354">"צרף אנשי קשר"</string>
     <string name="blurbJoinContactDataWith" msgid="8736488417422708236">"בחר את איש הקשר שברצונך לצרף אל <xliff:g id="NAME">%s</xliff:g>:"</string>
     <string name="showAllContactsJoinItem" msgid="2189695051430392383">"הצג את כל אנשי הקשר"</string>
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"אנשי קשר מוצעים"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"כל אנשי הקשר"</string>
-    <string name="contactsJoinedMessage" msgid="7208148163607047389">"אנשי קשר צורפו"</string>
+    <string name="contactsJoinedMessage" msgid="656936718666768589">"אנשי הקשר שולבו"</string>
+    <string name="contacts_deleted_toast" msgid="286851430992788215">"אנשי הקשר נמחקו"</string>
     <string name="menu_set_ring_tone" msgid="8728345772068064946">"הגדר רינגטון"</string>
     <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"כל השיחות לתא הקולי"</string>
     <string name="readOnlyContactWarning" msgid="7808825687289848259">"לא ניתן למחוק אנשי קשר מחשבונות לקריאה בלבד, אך ניתן להסתיר אותם ברשימות אנשי הקשר."</string>
     <string name="readOnlyContactDeleteConfirmation" msgid="2137170726670196909">"איש קשר זה מכיל מידע מחשבונות מרובים. מידע מחשבונות לקריאה בלבד יוסתר ברשימות אנשי הקשר ולא יימחק."</string>
+    <string name="batch_merge_single_contact_warning" msgid="982585201970392110">"כדי לבצע מיזוג עליך לבחור שני אנשי קשר לפחות."</string>
+    <string name="batch_merge_confirmation" msgid="8551299480317422420">"אנשי הקשר הנבחרים ימוזגו לרשומת איש קשר אחת."</string>
+    <string name="batch_delete_confirmation" msgid="2564172328268885394">"אנשי הקשר הנבחרים יימחקו."</string>
+    <string name="batch_delete_read_only_contact_confirmation" msgid="6614878716815412523">"מידע מחשבונות לקריאה בלבד יוסתר ברשימות אנשי הקשר ולא יימחק."</string>
+    <string name="batch_delete_multiple_accounts_confirmation" msgid="5189722181586680185">"אנשי הקשר האלה מכילים מידע מחשבונות מרובים. מידע מחשבונות לקריאה בלבד יוסתר ברשימות אנשי הקשר ולא יימחק."</string>
     <string name="multipleContactDeleteConfirmation" msgid="938900978442960800">"מחיקת איש קשר זה תמחק מידע מחשבונות מרובים."</string>
     <string name="deleteConfirmation" msgid="811706994761610640">"איש קשר זה יימחק."</string>
     <string name="menu_discard" msgid="6854657936970228164">"בטל שינויים"</string>
@@ -94,20 +101,26 @@
     <string name="contactSavedErrorToast" msgid="3207250533172944892">"לא ניתן לשמור את השינויים באנשי הקשר."</string>
     <string name="groupSavedToast" msgid="1168756874239833756">"הקבוצה נשמרה."</string>
     <string name="groupSavedErrorToast" msgid="7984466936615304740">"לא ניתן לשמור את השינויים בקבוצות."</string>
-  <plurals name="listTotalPhoneContacts">
-    <item quantity="one" msgid="3015357862286673986">"איש קשר אחד עם מספר טלפון"</item>
-    <item quantity="other" msgid="3299954047880968205">"<xliff:g id="COUNT">%d</xliff:g> אנשי קשר עם מספרי טלפון"</item>
-  </plurals>
+    <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
+      <item quantity="two"><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>
+      <item quantity="one">איש קשר אחד עם מספר טלפון</item>
+    </plurals>
     <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"אין אנשי קשר עם מספרי טלפון"</string>
-  <plurals name="listFoundAllContacts">
-    <item quantity="one" msgid="5517063038754171134">"נמצא אחד"</item>
-    <item quantity="other" msgid="3852668542926965042">"<xliff:g id="COUNT">%d</xliff:g> נמצאו"</item>
-  </plurals>
+    <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
+      <item quantity="two">נמצאו <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>
+      <item quantity="one">אחד נמצא</item>
+    </plurals>
     <string name="listFoundAllContactsZero" msgid="922980883593159444">"אין אנשי קשר"</string>
-  <plurals name="searchFoundContacts">
-    <item quantity="one" msgid="4826918429708286628">"נמצא אחד"</item>
-    <item quantity="other" msgid="7988132539476575389">"<xliff:g id="COUNT">%d</xliff:g> נמצאו"</item>
-  </plurals>
+    <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
+      <item quantity="two">נמצאו <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>
+      <item quantity="one">אחד נמצא</item>
+    </plurals>
     <string name="all_contacts_tab_label" msgid="6250372293594147703">"כל אנשי הקשר"</string>
     <string name="favorites_tab_label" msgid="1524869648904016414">"מועדפים"</string>
     <string name="callBack" msgid="5498224409038809224">"התקשר חזרה"</string>
@@ -144,9 +157,6 @@
     <string name="pick_new_photo" msgid="9122450996263688237">"בחר תמונה חדשה"</string>
     <string name="locale_change_in_progress" msgid="7583992153091537467">"רשימת אנשי הקשר מתעדכנת כדי לשקף את שינוי השפה."</string>
     <string name="upgrade_in_progress" msgid="474511436863451061">"רשימת אנשי הקשר מתעדכנת."</string>
-    <string name="upgrade_out_of_memory" msgid="1209994418877625940">"‏מתבצע כרגע שדרוג של אנשי הקשר. \n\nעבור תהליך השדרוג נדרש אחסון פנימי בנפח של כ-‏‎<xliff:g id="SIZE_IN_MEGABYTES">%s</xliff:g> MB‏.\n\nבחר אחת מהאפשרויות הבאות:"</string>
-    <string name="upgrade_out_of_memory_uninstall" msgid="1721798828992091432">"הסר התקנה של אפליקציות מסוימות"</string>
-    <string name="upgrade_out_of_memory_retry" msgid="8431289830472724609">"נסה שוב לשדרג"</string>
     <string name="search_results_searching" msgid="3984833028938569930">"מחפש..."</string>
     <string name="menu_display_selected" msgid="6470001164297969034">"הצג פריטים שנבחרו"</string>
     <string name="menu_display_all" msgid="8887488642609786198">"הצג הכל"</string>
@@ -160,10 +170,12 @@
     <string name="primary_photo" msgid="8517942231868516999">"תמונה ראשית"</string>
     <string name="description_star" msgid="2605854427360036550">"מועדף"</string>
     <string name="edit_contact" msgid="7529281274005689512">"ערוך איש קשר"</string>
-  <plurals name="merge_info">
-    <item quantity="one" msgid="148365587896371969">"לא מוזגו"</item>
-    <item quantity="other" msgid="425683718017380845">"מוזגו מ-<xliff:g id="COUNT">%0$d</xliff:g> מקורות"</item>
-  </plurals>
+    <plurals name="merge_info" formatted="false" msgid="2489323424994280962">
+      <item quantity="two">מוזגו מ-<xliff:g id="COUNT">%0$d</xliff:g> מקורות</item>
+      <item quantity="many">מוזגו מ-<xliff:g id="COUNT">%0$d</xliff:g> מקורות</item>
+      <item quantity="other">מוזגו מ-<xliff:g id="COUNT">%0$d</xliff:g> מקורות</item>
+      <item quantity="one">לא מוזגו</item>
+    </plurals>
     <string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"לצרף את איש הקשר הנוכחי לאיש הקשר שנבחר?"</string>
     <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"לעבור לעריכה של איש הקשר שנבחר? המידע שהזנת עד עכשיו יועתק."</string>
     <string name="menu_copyContact" msgid="1573960845106822639">"העתק אל \'אנשי הקשר שלי\'"</string>
@@ -172,7 +184,7 @@
     <string name="list_filter_custom" msgid="8910173055702057002">"מותאם אישית"</string>
     <string name="activity_title_settings" msgid="5464130076132770781">"הגדרות"</string>
     <string name="menu_settings" msgid="377929915873428211">"הגדרות"</string>
-    <string name="menu_help" msgid="5123887102216637725">"עזרה"</string>
+    <string name="menu_help" msgid="1680178646764069976">"עזרה ומשוב"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"אפשרויות תצוגה"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="non_phone_caption" msgid="1541655052330027380">"מספר טלפון"</string>
@@ -188,19 +200,25 @@
     <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"יבא אנשי קשר"</string>
     <string name="create_group_dialog_title" msgid="6874527142828424475">"צור קבוצה חדשה"</string>
     <string name="create_group_item_label" msgid="4411981763169654825">"צור קבוצה חדשה"</string>
-  <plurals name="num_groups_in_account">
-    <item quantity="one" msgid="2944819210288517794">"קבוצה אחת"</item>
-    <item quantity="other" msgid="1276758425904917367">"<xliff:g id="COUNT">%0$d</xliff:g> קבוצות"</item>
-  </plurals>
+    <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
+      <item quantity="two"><xliff:g id="COUNT">%0$d</xliff:g> קבוצות</item>
+      <item quantity="many"><xliff:g id="COUNT">%0$d</xliff:g> קבוצות</item>
+      <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> קבוצות</item>
+      <item quantity="one">קבוצה אחת</item>
+    </plurals>
     <string name="delete_group_dialog_message" msgid="7586856514337560529">"למחוק את הקבוצה \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\"? (אנשי הקשר עצמם לא יימחקו.)"</string>
-  <plurals name="num_contacts_in_group">
-    <item quantity="one" msgid="1352418549951013448">"<xliff:g id="COUNT_0">%1$d</xliff:g> אנשים מתוך <xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>"</item>
-    <item quantity="other" msgid="8146027769011086349">"<xliff:g id="COUNT_0">%1$d</xliff:g> אנשים מתוך <xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>"</item>
-  </plurals>
-  <plurals name="group_list_num_contacts_in_group">
-    <item quantity="one" msgid="3323065321661972446">"אדם <xliff:g id="COUNT">%1$d</xliff:g>"</item>
-    <item quantity="other" msgid="6251996206137048525">"<xliff:g id="COUNT">%1$d</xliff:g> אנשים"</item>
-  </plurals>
+    <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
+      <item quantity="two"><xliff:g id="COUNT_2">%1$d</xliff:g> אנשים מ-<xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
+      <item quantity="many"><xliff:g id="COUNT_2">%1$d</xliff:g> אנשים מ-<xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> אנשים מ-<xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
+      <item quantity="one">אדם <xliff:g id="COUNT_0">%1$d</xliff:g> מ-<xliff:g id="ACCOUNT_TYPE_1">%2$s</xliff:g></item>
+    </plurals>
+    <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
+      <item quantity="two"><xliff:g id="COUNT_1">%1$d</xliff:g> אנשים</item>
+      <item quantity="many"><xliff:g id="COUNT_1">%1$d</xliff:g> אנשים</item>
+      <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> אנשים</item>
+      <item quantity="one">אדם <xliff:g id="COUNT_0">%1$d</xliff:g></item>
+    </plurals>
     <string name="toast_join_with_empty_contact" msgid="2238581529864542985">"הקלד שם של איש קשר לפני צירופו לאחר."</string>
     <string name="copy_text" msgid="3257145021583508761">"העתק ללוח"</string>
     <string name="set_default" msgid="4417505153468300351">"קבע כברירת מחדל"</string>
@@ -264,4 +282,5 @@
     <string name="content_description_recent_call" msgid="5183800406316723676">"שיחה אחרונה. <xliff:g id="CALL_TYPE">%s</xliff:g>‏. <xliff:g id="PHONE_NUMBER">%s</xliff:g>‏. <xliff:g id="DATE">%s</xliff:g>‏. לחץ כדי להתקשר חזרה"</string>
     <string name="message_from_you_prefix" msgid="7180706529908434482">"אתה: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
     <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"‏Hangouts פועל טוב יותר כשאתה מזין את מזהה ה-Hangouts של המשתמש בשדה האימייל או בשדה הטלפון."</string>
+    <string name="compact_editor_more_fields" msgid="2874181192382284115">"עוד שדות"</string>
 </resources>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index c103574..d94ab9f 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -46,6 +46,7 @@
     <string name="description_action_menu_add_star" msgid="3327186327234177456">"お気に入りに追加します"</string>
     <string name="menu_editContact" msgid="9042415603857662633">"編集"</string>
     <string name="menu_deleteContact" msgid="6788644058868189393">"削除"</string>
+    <string name="menu_change_photo" msgid="7769177631511496210">"写真を変更"</string>
     <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"ホーム画面に配置"</string>
     <string name="menu_call" msgid="3992595586042260618">"連絡先に発信"</string>
     <string name="menu_sendSMS" msgid="5535886767547006515">"連絡先にSMS"</string>
@@ -56,17 +57,23 @@
     <string name="menu_new_group_action_bar" msgid="3520232877587377175">"グループを追加"</string>
     <string name="splitConfirmation_title" msgid="633640935430370530">"連絡先を分けますか?"</string>
     <string name="splitConfirmation" msgid="740190210499587175">"この連絡先を複数の連絡先に分割します。"</string>
-    <string name="menu_joinAggregate" msgid="5027981918265667970">"統合"</string>
+    <string name="menu_joinAggregate" msgid="4050157483569357666">"統合"</string>
     <string name="titleJoinContactDataWith" msgid="7684875775798635354">"連絡先の統合"</string>
     <string name="blurbJoinContactDataWith" msgid="8736488417422708236">"<xliff:g id="NAME">%s</xliff:g>と統合する連絡先を選択します:"</string>
     <string name="showAllContactsJoinItem" msgid="2189695051430392383">"すべての連絡先を表示"</string>
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"連絡先候補"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"すべての連絡先"</string>
-    <string name="contactsJoinedMessage" msgid="7208148163607047389">"連絡先を結合しました"</string>
+    <string name="contactsJoinedMessage" msgid="656936718666768589">"連絡先を統合しました"</string>
+    <string name="contacts_deleted_toast" msgid="286851430992788215">"連絡先を削除しました"</string>
     <string name="menu_set_ring_tone" msgid="8728345772068064946">"着信音を設定"</string>
     <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"すべての通話をボイスメールへ"</string>
     <string name="readOnlyContactWarning" msgid="7808825687289848259">"読み取り専用アカウントの連絡先は削除できません。ただし、連絡先リストで非表示にすることができます。"</string>
     <string name="readOnlyContactDeleteConfirmation" msgid="2137170726670196909">"この連絡先には、複数のアカウント情報が含まれています。読み取り専用アカウントの情報を連絡先リストで非表示にすることはできますが、削除はできません。"</string>
+    <string name="batch_merge_single_contact_warning" msgid="982585201970392110">"統合するには連絡先を2件以上選択してください。"</string>
+    <string name="batch_merge_confirmation" msgid="8551299480317422420">"選択した連絡先を1つの連絡先に統合します。"</string>
+    <string name="batch_delete_confirmation" msgid="2564172328268885394">"選択した連絡先を削除します。"</string>
+    <string name="batch_delete_read_only_contact_confirmation" msgid="6614878716815412523">"読み取り専用アカウントの情報を連絡先リストで非表示にすることはできますが、削除はできません。"</string>
+    <string name="batch_delete_multiple_accounts_confirmation" msgid="5189722181586680185">"この連絡先には、複数のアカウント情報が含まれています。読み取り専用アカウントの情報を連絡先リストで非表示にすることはできますが、削除はできません。"</string>
     <string name="multipleContactDeleteConfirmation" msgid="938900978442960800">"この連絡先を削除すると、複数のアカウント情報が削除されます。"</string>
     <string name="deleteConfirmation" msgid="811706994761610640">"この連絡先を削除します。"</string>
     <string name="menu_discard" msgid="6854657936970228164">"変更を破棄"</string>
@@ -94,20 +101,20 @@
     <string name="contactSavedErrorToast" msgid="3207250533172944892">"連絡先の変更を保存できませんでした。"</string>
     <string name="groupSavedToast" msgid="1168756874239833756">"グループを保存しました。"</string>
     <string name="groupSavedErrorToast" msgid="7984466936615304740">"グループの変更を保存できませんでした。"</string>
-  <plurals name="listTotalPhoneContacts">
-    <item quantity="one" msgid="3015357862286673986">"電話番号のある連絡先1件"</item>
-    <item quantity="other" msgid="3299954047880968205">"電話番号のある連絡先<xliff:g id="COUNT">%d</xliff:g>件"</item>
-  </plurals>
+    <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
+      <item quantity="other">電話番号のある連絡先<xliff:g id="COUNT">%d</xliff:g>件</item>
+      <item quantity="one">電話番号のある連絡先1件</item>
+    </plurals>
     <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"電話番号付きの連絡先はありません"</string>
-  <plurals name="listFoundAllContacts">
-    <item quantity="one" msgid="5517063038754171134">"1件見つかりました"</item>
-    <item quantity="other" msgid="3852668542926965042">"<xliff:g id="COUNT">%d</xliff:g>件見つかりました"</item>
-  </plurals>
+    <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g>件見つかりました</item>
+      <item quantity="one">1件見つかりました</item>
+    </plurals>
     <string name="listFoundAllContactsZero" msgid="922980883593159444">"連絡先はありません"</string>
-  <plurals name="searchFoundContacts">
-    <item quantity="one" msgid="4826918429708286628">"1件見つかりました"</item>
-    <item quantity="other" msgid="7988132539476575389">"<xliff:g id="COUNT">%d</xliff:g>件見つかりました"</item>
-  </plurals>
+    <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g>件見つかりました</item>
+      <item quantity="one">1件見つかりました</item>
+    </plurals>
     <string name="all_contacts_tab_label" msgid="6250372293594147703">"すべての連絡先"</string>
     <string name="favorites_tab_label" msgid="1524869648904016414">"お気に入り"</string>
     <string name="callBack" msgid="5498224409038809224">"コールバック"</string>
@@ -144,9 +151,6 @@
     <string name="pick_new_photo" msgid="9122450996263688237">"新しい写真を選択"</string>
     <string name="locale_change_in_progress" msgid="7583992153091537467">"言語の変更に伴い連絡先リストを更新しています。"</string>
     <string name="upgrade_in_progress" msgid="474511436863451061">"連絡先リストを更新しています。"</string>
-    <string name="upgrade_out_of_memory" msgid="1209994418877625940">"連絡先をアップグレードしています。\n\nアップグレード処理には約<xliff:g id="SIZE_IN_MEGABYTES">%s</xliff:g>MBの内部ストレージが必要です。\n\n次のいずれかのオプションを選択してください:"</string>
-    <string name="upgrade_out_of_memory_uninstall" msgid="1721798828992091432">"一部のアプリケーションをアンインストール"</string>
-    <string name="upgrade_out_of_memory_retry" msgid="8431289830472724609">"アップグレードを再試行"</string>
     <string name="search_results_searching" msgid="3984833028938569930">"検索しています..."</string>
     <string name="menu_display_selected" msgid="6470001164297969034">"選択した連絡先を表示"</string>
     <string name="menu_display_all" msgid="8887488642609786198">"すべて表示"</string>
@@ -160,10 +164,10 @@
     <string name="primary_photo" msgid="8517942231868516999">"メインの写真"</string>
     <string name="description_star" msgid="2605854427360036550">"お気に入り"</string>
     <string name="edit_contact" msgid="7529281274005689512">"連絡先の編集"</string>
-  <plurals name="merge_info">
-    <item quantity="one" msgid="148365587896371969">"結合する連絡先はありません"</item>
-    <item quantity="other" msgid="425683718017380845">"<xliff:g id="COUNT">%0$d</xliff:g>件の連絡先が結合されました"</item>
-  </plurals>
+    <plurals name="merge_info" formatted="false" msgid="2489323424994280962">
+      <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g>件の連絡先から結合</item>
+      <item quantity="one">結合する連絡先はありません</item>
+    </plurals>
     <string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"現在の連絡先を選択した連絡先に統合しますか?"</string>
     <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"選択した連絡先の編集に切り替えますか?これまでに入力した情報はコピーされます。"</string>
     <string name="menu_copyContact" msgid="1573960845106822639">"Myコンタクトにコピー"</string>
@@ -172,7 +176,7 @@
     <string name="list_filter_custom" msgid="8910173055702057002">"カスタム"</string>
     <string name="activity_title_settings" msgid="5464130076132770781">"設定"</string>
     <string name="menu_settings" msgid="377929915873428211">"設定"</string>
-    <string name="menu_help" msgid="5123887102216637725">"ヘルプ"</string>
+    <string name="menu_help" msgid="1680178646764069976">"ヘルプとフィードバック"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"表示オプション"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>、<xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="non_phone_caption" msgid="1541655052330027380">"電話番号"</string>
@@ -188,19 +192,19 @@
     <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"連絡先をインポート"</string>
     <string name="create_group_dialog_title" msgid="6874527142828424475">"新しいグループの作成"</string>
     <string name="create_group_item_label" msgid="4411981763169654825">"新しいグループを作成"</string>
-  <plurals name="num_groups_in_account">
-    <item quantity="one" msgid="2944819210288517794">"1グループ"</item>
-    <item quantity="other" msgid="1276758425904917367">"<xliff:g id="COUNT">%0$d</xliff:g>グループ"</item>
-  </plurals>
+    <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
+      <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g>グループ</item>
+      <item quantity="one">1グループ</item>
+    </plurals>
     <string name="delete_group_dialog_message" msgid="7586856514337560529">"グループ「<xliff:g id="GROUP_LABEL">%1$s</xliff:g>」を削除しますか?連絡先自体は削除されません。"</string>
-  <plurals name="num_contacts_in_group">
-    <item quantity="one" msgid="1352418549951013448">"<xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>から<xliff:g id="COUNT_0">%1$d</xliff:g>人"</item>
-    <item quantity="other" msgid="8146027769011086349">"<xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>から<xliff:g id="COUNT_0">%1$d</xliff:g>人"</item>
-  </plurals>
-  <plurals name="group_list_num_contacts_in_group">
-    <item quantity="one" msgid="3323065321661972446">"<xliff:g id="COUNT">%1$d</xliff:g>人"</item>
-    <item quantity="other" msgid="6251996206137048525">"<xliff:g id="COUNT">%1$d</xliff:g>人"</item>
-  </plurals>
+    <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
+      <item quantity="other"><xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g>から<xliff:g id="COUNT_2">%1$d</xliff:g>人</item>
+      <item quantity="one"><xliff:g id="ACCOUNT_TYPE_1">%2$s</xliff:g>から<xliff:g id="COUNT_0">%1$d</xliff:g>人</item>
+    </plurals>
+    <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
+      <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g>人</item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g>人</item>
+    </plurals>
     <string name="toast_join_with_empty_contact" msgid="2238581529864542985">"別の連絡先と統合するにはまず連絡先の名前を入力してください。"</string>
     <string name="copy_text" msgid="3257145021583508761">"クリップボードにコピー"</string>
     <string name="set_default" msgid="4417505153468300351">"デフォルトに設定"</string>
@@ -264,4 +268,5 @@
     <string name="content_description_recent_call" msgid="5183800406316723676">"最近の通話。<xliff:g id="CALL_TYPE">%s</xliff:g>。<xliff:g id="PHONE_NUMBER">%s</xliff:g>。<xliff:g id="DATE">%s</xliff:g>。折り返し電話するにはタップしてください。"</string>
     <string name="message_from_you_prefix" msgid="7180706529908434482">"あなた: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
     <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"ハングアウトを使いやすくするには、相手のハングアウトIDをメールアドレス欄または電話番号欄に入力します。"</string>
+    <string name="compact_editor_more_fields" msgid="2874181192382284115">"他の項目"</string>
 </resources>
diff --git a/res/values-ka-rGE/strings.xml b/res/values-ka-rGE/strings.xml
index 6d35269..ee5d330 100644
--- a/res/values-ka-rGE/strings.xml
+++ b/res/values-ka-rGE/strings.xml
@@ -46,6 +46,7 @@
     <string name="description_action_menu_add_star" msgid="3327186327234177456">"რჩეულებში დამატება"</string>
     <string name="menu_editContact" msgid="9042415603857662633">"რედაქტირება"</string>
     <string name="menu_deleteContact" msgid="6788644058868189393">"წაშლა"</string>
+    <string name="menu_change_photo" msgid="7769177631511496210">"ფოტოს გამოცვლა"</string>
     <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"მთავარ ეკრანზე განთავსება"</string>
     <string name="menu_call" msgid="3992595586042260618">"დარეკვა კონტაქტთან"</string>
     <string name="menu_sendSMS" msgid="5535886767547006515">"ტექსტური შეტყობინების გაგზავნა კონტაქტისთვის"</string>
@@ -56,17 +57,23 @@
     <string name="menu_new_group_action_bar" msgid="3520232877587377175">"ჯგუფის დამატება"</string>
     <string name="splitConfirmation_title" msgid="633640935430370530">"გსურთ კონტაქტის დაშლა?"</string>
     <string name="splitConfirmation" msgid="740190210499587175">"ეს კონტაქტი დაიშლება მრავალ კონტაქტად."</string>
-    <string name="menu_joinAggregate" msgid="5027981918265667970">"შეერთება"</string>
+    <string name="menu_joinAggregate" msgid="4050157483569357666">"გაერთიანება"</string>
     <string name="titleJoinContactDataWith" msgid="7684875775798635354">"კონტაქტების შეერთება"</string>
     <string name="blurbJoinContactDataWith" msgid="8736488417422708236">"აირჩიეთ კონტაქტი, რომელიც გსურთ შეუერთოთ <xliff:g id="NAME">%s</xliff:g>-ს:"</string>
     <string name="showAllContactsJoinItem" msgid="2189695051430392383">"ყველა კონტაქტის ჩვენება"</string>
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"შემოთავაზებული კონტაქტები"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"ყველა კონტაქტი"</string>
-    <string name="contactsJoinedMessage" msgid="7208148163607047389">"შემოერთებული კონტაქტები"</string>
+    <string name="contactsJoinedMessage" msgid="656936718666768589">"კონტაქტები გაერთიანდა"</string>
+    <string name="contacts_deleted_toast" msgid="286851430992788215">"კონტაქტები წაიშალა"</string>
     <string name="menu_set_ring_tone" msgid="8728345772068064946">"ზარის დაყენება"</string>
     <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"ყველა ზარი ხმოვან ფოსტაში"</string>
     <string name="readOnlyContactWarning" msgid="7808825687289848259">"მხოლოდ კითხვადი ანგარიშებიდან კონტაქტების წაშლა შეუძლებელია, თუმცა შეგიძლიათ დამალოთ ისინი კონტაქტების სიაში."</string>
     <string name="readOnlyContactDeleteConfirmation" msgid="2137170726670196909">"ეს კონტაქტი შეიცავს ინფორმაციას სხვადასხვა ანგარიშებიდან. ინფორმაცია მხოლოდ კითხვადი ანგარიშებიდან არ წაიშლება, არამედ დაიმალება კონტაქტების სიაში."</string>
+    <string name="batch_merge_single_contact_warning" msgid="982585201970392110">"გაერთიანებისთვის საჭიროა აირჩიოთ, სულ მცირე, ორი კონტაქტი."</string>
+    <string name="batch_merge_confirmation" msgid="8551299480317422420">"არჩეული კონტაქტები გაერთიანდება ერთ კონტაქტში."</string>
+    <string name="batch_delete_confirmation" msgid="2564172328268885394">"არჩეული კონტაქტები წაიშლება."</string>
+    <string name="batch_delete_read_only_contact_confirmation" msgid="6614878716815412523">"ინფორმაცია მხოლოდ წაკითხვადი ანგარიშებიდან დაიმალება კონტაქტების სიებში, მაგრამ არ წაიშლება."</string>
+    <string name="batch_delete_multiple_accounts_confirmation" msgid="5189722181586680185">"ეს კონტაქტები მოიცავს ინფორმაციას რამდენიმე ანგარიშიდან. ინფორმაცია მხოლოდ წაკითხვადი ანგარიშებიდან დაიმალება კონტაქტების სიებში, მაგრამ არ წაიშლება."</string>
     <string name="multipleContactDeleteConfirmation" msgid="938900978442960800">"ამ კონტაქტის წაშლით წაიშლება ინფორმაცია რამდენიმე ანგარიშიდან."</string>
     <string name="deleteConfirmation" msgid="811706994761610640">"ეს კონტაქტი წაიშლება."</string>
     <string name="menu_discard" msgid="6854657936970228164">"ცვლილებების გაუქმება"</string>
@@ -94,20 +101,20 @@
     <string name="contactSavedErrorToast" msgid="3207250533172944892">"კონტაქტის ცვლილებების შენახვა ვერ მოხერხდა."</string>
     <string name="groupSavedToast" msgid="1168756874239833756">"ჯგუფი შენახულია."</string>
     <string name="groupSavedErrorToast" msgid="7984466936615304740">"ჯგუფის ცვლილებების შენახვა ვერ მოხერხდა."</string>
-  <plurals name="listTotalPhoneContacts">
-    <item quantity="one" msgid="3015357862286673986">"ტელეფონის ნომრიანი 1 კონტაქტი"</item>
-    <item quantity="other" msgid="3299954047880968205">"ტელეფონის ნომრიანი <xliff:g id="COUNT">%d</xliff:g> კონტაქტი"</item>
-  </plurals>
+    <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> კონტაქტი ტელეფონის ნომრით</item>
+      <item quantity="one">1 კონტაქტი ტელეფონის ნომრით</item>
+    </plurals>
     <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"ტელეფონის ნომრიანი კონტაქტები არ არის"</string>
-  <plurals name="listFoundAllContacts">
-    <item quantity="one" msgid="5517063038754171134">"მოიძებნა 1"</item>
-    <item quantity="other" msgid="3852668542926965042">"მოიძებნა <xliff:g id="COUNT">%d</xliff:g>"</item>
-  </plurals>
+    <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> მოიძებნა</item>
+      <item quantity="one">1 მოიძებნა</item>
+    </plurals>
     <string name="listFoundAllContactsZero" msgid="922980883593159444">"კონტაქტები არ არის"</string>
-  <plurals name="searchFoundContacts">
-    <item quantity="one" msgid="4826918429708286628">"მოიძებნა 1"</item>
-    <item quantity="other" msgid="7988132539476575389">"მოიძებნა <xliff:g id="COUNT">%d</xliff:g>"</item>
-  </plurals>
+    <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> მოიძებნა</item>
+      <item quantity="one">1 მოიძებნა</item>
+    </plurals>
     <string name="all_contacts_tab_label" msgid="6250372293594147703">"ყველა კონტაქტი"</string>
     <string name="favorites_tab_label" msgid="1524869648904016414">"რჩეულები"</string>
     <string name="callBack" msgid="5498224409038809224">"გადარეკვა"</string>
@@ -144,9 +151,6 @@
     <string name="pick_new_photo" msgid="9122450996263688237">"ახალი ფოტოს არჩევა"</string>
     <string name="locale_change_in_progress" msgid="7583992153091537467">"მიმდინარეობს კონტაქტების სიის განახლება ენის ცვლილების ასახვის მიზნით."</string>
     <string name="upgrade_in_progress" msgid="474511436863451061">"მიმდინარეობს კონტაქტების სიის განახლება."</string>
-    <string name="upgrade_out_of_memory" msgid="1209994418877625940">"კონტაქტები ახალ ვერსიაზე გადასვლის პროცესშია. \n\nახალ ვერსიაზე გადასვლის პროცესს ესაჭიროება შიდა მეხსიერების დაახლოებით <xliff:g id="SIZE_IN_MEGABYTES">%s</xliff:g> მბაიტი.\n\nაირჩიეთ შემდეგი პარამეტრებიდან ერთ-ერთი:"</string>
-    <string name="upgrade_out_of_memory_uninstall" msgid="1721798828992091432">"ზოგიერთი აპლიკაციის დეინსტალაცია"</string>
-    <string name="upgrade_out_of_memory_retry" msgid="8431289830472724609">"ახალ ვერსიაზე გადასვლის მცდელობის გამეორება"</string>
     <string name="search_results_searching" msgid="3984833028938569930">"ძიება..."</string>
     <string name="menu_display_selected" msgid="6470001164297969034">"არჩეულის ჩვენება"</string>
     <string name="menu_display_all" msgid="8887488642609786198">"ყველას ჩვენება"</string>
@@ -160,10 +164,10 @@
     <string name="primary_photo" msgid="8517942231868516999">"პირველადი ფოტო"</string>
     <string name="description_star" msgid="2605854427360036550">"რჩეული"</string>
     <string name="edit_contact" msgid="7529281274005689512">"კონტაქტის რედაქტირება"</string>
-  <plurals name="merge_info">
-    <item quantity="one" msgid="148365587896371969">"გასაერთიანებელი"</item>
-    <item quantity="other" msgid="425683718017380845">"გაერთიანდა <xliff:g id="COUNT">%0$d</xliff:g> წყაროდან"</item>
-  </plurals>
+    <plurals name="merge_info" formatted="false" msgid="2489323424994280962">
+      <item quantity="other">გაერთიანებულია <xliff:g id="COUNT">%0$d</xliff:g> წყაროდან</item>
+      <item quantity="one">არ არის გაერთიანებული</item>
+    </plurals>
     <string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"გსურთ მიმდინარე და არჩეული კონტაქტების შეერთება?"</string>
     <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"გადაერთვებით არჩეული კონტაქტის რედაქტირებაზე? მოხდება თქვენს მიერ შეყვანილი ინფორმაციის კოპირება."</string>
     <string name="menu_copyContact" msgid="1573960845106822639">"კოპირება ჩემს კონტაქტებში"</string>
@@ -172,7 +176,7 @@
     <string name="list_filter_custom" msgid="8910173055702057002">"მორგებული"</string>
     <string name="activity_title_settings" msgid="5464130076132770781">"პარამეტრები"</string>
     <string name="menu_settings" msgid="377929915873428211">"პარამეტრები"</string>
-    <string name="menu_help" msgid="5123887102216637725">"დახმარება"</string>
+    <string name="menu_help" msgid="1680178646764069976">"დახმარება და უკუკავშირი"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"ეკრანის პარამეტრები"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="non_phone_caption" msgid="1541655052330027380">"ტელეფონის ნომერი"</string>
@@ -188,19 +192,19 @@
     <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"კონტაქტების იმპორტი"</string>
     <string name="create_group_dialog_title" msgid="6874527142828424475">"ახალი ჯგუფის შექმნა"</string>
     <string name="create_group_item_label" msgid="4411981763169654825">"ახალი ჯგუფის შექმნა"</string>
-  <plurals name="num_groups_in_account">
-    <item quantity="one" msgid="2944819210288517794">"1 ჯგუფი"</item>
-    <item quantity="other" msgid="1276758425904917367">"<xliff:g id="COUNT">%0$d</xliff:g> ჯგუფი"</item>
-  </plurals>
+    <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
+      <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> ჯგუფი</item>
+      <item quantity="one">1 ჯგუფი</item>
+    </plurals>
     <string name="delete_group_dialog_message" msgid="7586856514337560529">"გსურთ ჯგუფის „<xliff:g id="GROUP_LABEL">%1$s</xliff:g>“ წაშლა? (კონტაქტები არ წაიშლება)"</string>
-  <plurals name="num_contacts_in_group">
-    <item quantity="one" msgid="1352418549951013448">"<xliff:g id="COUNT_0">%1$d</xliff:g> ადამიანი <xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>-დან"</item>
-    <item quantity="other" msgid="8146027769011086349">"<xliff:g id="COUNT_0">%1$d</xliff:g> ადამიანი <xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>-დან"</item>
-  </plurals>
-  <plurals name="group_list_num_contacts_in_group">
-    <item quantity="one" msgid="3323065321661972446">"<xliff:g id="COUNT">%1$d</xliff:g> ადამიანი"</item>
-    <item quantity="other" msgid="6251996206137048525">"<xliff:g id="COUNT">%1$d</xliff:g> ადამიანი"</item>
-  </plurals>
+    <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> ადამიანი <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g>-დან</item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> ადამიანი <xliff:g id="ACCOUNT_TYPE_1">%2$s</xliff:g>-დან</item>
+    </plurals>
+    <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
+      <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> ადამიანი</item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> ადამიანი</item>
+    </plurals>
     <string name="toast_join_with_empty_contact" msgid="2238581529864542985">"სხვა კონტაქტთან შეერთებამდე აკრიფეთ კონტაქტის სახელი."</string>
     <string name="copy_text" msgid="3257145021583508761">"კოპირება გაცვლის ბუფერში"</string>
     <string name="set_default" msgid="4417505153468300351">"ნაგულისხმევად დაყენება"</string>
@@ -208,7 +212,7 @@
     <string name="toast_text_copied" msgid="5143776250008541719">"კოპირებული ტექსტი"</string>
     <string name="cancel_confirmation_dialog_message" msgid="5885724679874403115">"გსურთ ცვლილებების გაუქმება?"</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="profile_display_name" msgid="4127389543625918771">"ჩემი პროფილის პარამეტრების დაყენება"</string>
+    <string name="profile_display_name" msgid="4127389543625918771">"პროფ. დაყენება"</string>
     <string name="enter_contact_name" msgid="1738391320566349924">"აკრიფეთ კონტაქტის სახელი"</string>
     <string name="group_name_hint" msgid="238359485263401293">"ჯგუფის სახელი"</string>
     <string name="local_profile_title" msgid="2021416826991393684">"ჩემი ადგილობრივი პროფილი"</string>
@@ -264,4 +268,5 @@
     <string name="content_description_recent_call" msgid="5183800406316723676">"ბოლო ზარი. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. დააწკაპუნეთ გადასარეკად"</string>
     <string name="message_from_you_prefix" msgid="7180706529908434482">"თქვენ: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
     <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"Hangout უკეთესად იმუშავებს იმ შემთხვევაში, თუ ტელეფონის ან ელფოსტის ველში პიროვნების Hangout-ის ინდენტიფიკატორს შეიყვანთ."</string>
+    <string name="compact_editor_more_fields" msgid="2874181192382284115">"სხვა ველები"</string>
 </resources>
diff --git a/res/values-kk-rKZ/strings.xml b/res/values-kk-rKZ/strings.xml
index 448a772..56593e5 100644
--- a/res/values-kk-rKZ/strings.xml
+++ b/res/values-kk-rKZ/strings.xml
@@ -46,6 +46,7 @@
     <string name="description_action_menu_add_star" msgid="3327186327234177456">"Таңдаулыларға қосылды"</string>
     <string name="menu_editContact" msgid="9042415603857662633">"Жөндеу"</string>
     <string name="menu_deleteContact" msgid="6788644058868189393">"Жою"</string>
+    <string name="menu_change_photo" msgid="7769177631511496210">"Фотосуретті өзгерту"</string>
     <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Негізгі экранға орналастыру"</string>
     <string name="menu_call" msgid="3992595586042260618">"Контактіге қоңырау шалу"</string>
     <string name="menu_sendSMS" msgid="5535886767547006515">"Контактіге мәтін-хабар жіберу"</string>
@@ -56,17 +57,23 @@
     <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Топ қосу"</string>
     <string name="splitConfirmation_title" msgid="633640935430370530">"Контакт ажыратылсын ба?"</string>
     <string name="splitConfirmation" msgid="740190210499587175">"Бұл контакт бірнеше контактілерге ажыратылады."</string>
-    <string name="menu_joinAggregate" msgid="5027981918265667970">"Қосылу"</string>
+    <string name="menu_joinAggregate" msgid="4050157483569357666">"Біріктіру"</string>
     <string name="titleJoinContactDataWith" msgid="7684875775798635354">"Контактілерге қосылу"</string>
     <string name="blurbJoinContactDataWith" msgid="8736488417422708236">"<xliff:g id="NAME">%s</xliff:g> қосқыңыз келетін контактіні таңдаңыз:"</string>
     <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Барлық контактілерді көрсету"</string>
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Ұсынылған контактілер"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Барлық контактілер"</string>
-    <string name="contactsJoinedMessage" msgid="7208148163607047389">"Қосылған контактілер"</string>
+    <string name="contactsJoinedMessage" msgid="656936718666768589">"Контактілер біріктірілді"</string>
+    <string name="contacts_deleted_toast" msgid="286851430992788215">"Контактілер жойылды"</string>
     <string name="menu_set_ring_tone" msgid="8728345772068064946">"Рингтонды орнату"</string>
     <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Дауыс-хабарына жасалған барлық қоңыраулар"</string>
     <string name="readOnlyContactWarning" msgid="7808825687289848259">"Оқу үшін ғана есептік жазбаларындағы контактілерді жою мүмкін болмайды, бірақ контактілер тізімінде жасырып қоюға болады."</string>
     <string name="readOnlyContactDeleteConfirmation" msgid="2137170726670196909">"Бұл контактіде бірнеше есептік жазба ақпараты бар. Оқу үшін ғана есептік жазбаларының ақпараты контактілер тізімінде жасырын болады, жойылмайды."</string>
+    <string name="batch_merge_single_contact_warning" msgid="982585201970392110">"Біріктіруді орындау үшін кемінде екі контактіні таңдау керек."</string>
+    <string name="batch_merge_confirmation" msgid="8551299480317422420">"Таңдалған контактілер бір контактіге біріктіріледі."</string>
+    <string name="batch_delete_confirmation" msgid="2564172328268885394">"Таңдалған контактілер жойылады."</string>
+    <string name="batch_delete_read_only_contact_confirmation" msgid="6614878716815412523">"Тек оқуға арналған есептік жазбалардан алынған ақпарат жойылмайды, контактілер тізімдерінде жасырылады."</string>
+    <string name="batch_delete_multiple_accounts_confirmation" msgid="5189722181586680185">"Бұл контактілер бірнеше есептік жазбадан алынған ақпаратты қамтиды. Тек оқуға арналған есептік жазбалардан алынған ақпарат жойылмайды, контактілер тізімдерінде жасырылады."</string>
     <string name="multipleContactDeleteConfirmation" msgid="938900978442960800">"Бұл контактіні жою бірнеше есептік жазбадан ақпарат жояды."</string>
     <string name="deleteConfirmation" msgid="811706994761610640">"Бұл контакт жойылады."</string>
     <string name="menu_discard" msgid="6854657936970228164">"Өзгертулерден бас тарту"</string>
@@ -94,20 +101,20 @@
     <string name="contactSavedErrorToast" msgid="3207250533172944892">"Контакт өзгерістерін сақтай алмады."</string>
     <string name="groupSavedToast" msgid="1168756874239833756">"Топ сақталды."</string>
     <string name="groupSavedErrorToast" msgid="7984466936615304740">"Топ өзгерістерін сақтау мүмкін болмады."</string>
-  <plurals name="listTotalPhoneContacts">
-    <item quantity="one" msgid="3015357862286673986">"Телефон нөмірі бар 1 контакт"</item>
-    <item quantity="other" msgid="3299954047880968205">"Телефон нөмірі бар <xliff:g id="COUNT">%d</xliff:g> контактілер"</item>
-  </plurals>
+    <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
+      <item quantity="other">Телефон нөмірі бар <xliff:g id="COUNT">%d</xliff:g> контакт</item>
+      <item quantity="one">Телефон нөмірі бар 1 контакт</item>
+    </plurals>
     <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"Телефон нөмірлері бар контактілер жоқ"</string>
-  <plurals name="listFoundAllContacts">
-    <item quantity="one" msgid="5517063038754171134">"1 табылды"</item>
-    <item quantity="other" msgid="3852668542926965042">"<xliff:g id="COUNT">%d</xliff:g> табылды"</item>
-  </plurals>
+    <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> табылды</item>
+      <item quantity="one">1 табылды</item>
+    </plurals>
     <string name="listFoundAllContactsZero" msgid="922980883593159444">"Контактілер жоқ"</string>
-  <plurals name="searchFoundContacts">
-    <item quantity="one" msgid="4826918429708286628">"1 табылды"</item>
-    <item quantity="other" msgid="7988132539476575389">"<xliff:g id="COUNT">%d</xliff:g> табылды"</item>
-  </plurals>
+    <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> табылды</item>
+      <item quantity="one">1 табылды</item>
+    </plurals>
     <string name="all_contacts_tab_label" msgid="6250372293594147703">"Барлық контактілер"</string>
     <string name="favorites_tab_label" msgid="1524869648904016414">"Таңдаулылар"</string>
     <string name="callBack" msgid="5498224409038809224">"Кері қоңырау шалу"</string>
@@ -144,9 +151,6 @@
     <string name="pick_new_photo" msgid="9122450996263688237">"Жаңа фотоурет таңдау"</string>
     <string name="locale_change_in_progress" msgid="7583992153091537467">"Өзгертілген тілді көрсету үшін контакт жаңартылуда."</string>
     <string name="upgrade_in_progress" msgid="474511436863451061">"Контакт тізімі жаңартылуда."</string>
-    <string name="upgrade_out_of_memory" msgid="1209994418877625940">"Контактілер жаңартылуда. \n\nЖаңалау үрдісіне шамамен <xliff:g id="SIZE_IN_MEGABYTES">%s</xliff:g> MБ ішкі жад орны қажет.\n\nКелесі опциялардың бірін таңдаңыз:"</string>
-    <string name="upgrade_out_of_memory_uninstall" msgid="1721798828992091432">"Кейбір қолданбаларды алып тастау"</string>
-    <string name="upgrade_out_of_memory_retry" msgid="8431289830472724609">"Жаңартуға қайта әрекеттену"</string>
     <string name="search_results_searching" msgid="3984833028938569930">"Іздеуде…"</string>
     <string name="menu_display_selected" msgid="6470001164297969034">"Таңдалғанды көрсету"</string>
     <string name="menu_display_all" msgid="8887488642609786198">"Барлығын көрсету"</string>
@@ -160,10 +164,10 @@
     <string name="primary_photo" msgid="8517942231868516999">"Негізгі фотосурет"</string>
     <string name="description_star" msgid="2605854427360036550">"сүйікті"</string>
     <string name="edit_contact" msgid="7529281274005689512">"Контактіні жөндеу"</string>
-  <plurals name="merge_info">
-    <item quantity="one" msgid="148365587896371969">"біріктірілмеген"</item>
-    <item quantity="other" msgid="425683718017380845">"<xliff:g id="COUNT">%0$d</xliff:g> дереккөздерден біріктірілген"</item>
-  </plurals>
+    <plurals name="merge_info" formatted="false" msgid="2489323424994280962">
+      <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> көзден біріктірілген</item>
+      <item quantity="one">біріктірілмеген</item>
+    </plurals>
     <string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"Ағымдағы контакт таңдалған контактіге қосылсын ба?"</string>
     <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Таңдалған контактіні жөндеуге ауысуды қалайсыз ба? Осы уақытқа дейін сіз енгізген ақпараттың көшірмесі жасалады."</string>
     <string name="menu_copyContact" msgid="1573960845106822639">"Менің контактілеріме көшіру"</string>
@@ -172,7 +176,7 @@
     <string name="list_filter_custom" msgid="8910173055702057002">"Қалыпты"</string>
     <string name="activity_title_settings" msgid="5464130076132770781">"Параметрлер"</string>
     <string name="menu_settings" msgid="377929915873428211">"Параметрлер"</string>
-    <string name="menu_help" msgid="5123887102216637725">"Көмек"</string>
+    <string name="menu_help" msgid="1680178646764069976">"Анықтама және кері байланыс"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"Дисплей опциялары"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="non_phone_caption" msgid="1541655052330027380">"Телефон нөмірі"</string>
@@ -188,19 +192,19 @@
     <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Контактілерді импорттау"</string>
     <string name="create_group_dialog_title" msgid="6874527142828424475">"Жаңа топ жасақтау"</string>
     <string name="create_group_item_label" msgid="4411981763169654825">"Жаңа топ жасақтау"</string>
-  <plurals name="num_groups_in_account">
-    <item quantity="one" msgid="2944819210288517794">"1 топ"</item>
-    <item quantity="other" msgid="1276758425904917367">"<xliff:g id="COUNT">%0$d</xliff:g> топ"</item>
-  </plurals>
+    <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
+      <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> топ</item>
+      <item quantity="one">1 топ</item>
+    </plurals>
     <string name="delete_group_dialog_message" msgid="7586856514337560529">"\"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\" тобы жойылсын ба? (Контактілер жойылмайды.)"</string>
-  <plurals name="num_contacts_in_group">
-    <item quantity="one" msgid="1352418549951013448">"<xliff:g id="COUNT_0">%1$d</xliff:g>, барлығы <xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g> адамнан"</item>
-    <item quantity="other" msgid="8146027769011086349">"<xliff:g id="COUNT_0">%1$d</xliff:g>, барлығы <xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g> адамнан"</item>
-  </plurals>
-  <plurals name="group_list_num_contacts_in_group">
-    <item quantity="one" msgid="3323065321661972446">"<xliff:g id="COUNT">%1$d</xliff:g> адам"</item>
-    <item quantity="other" msgid="6251996206137048525">"<xliff:g id="COUNT">%1$d</xliff:g> адам"</item>
-  </plurals>
+    <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
+      <item quantity="other"><xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g> ішінен <xliff:g id="COUNT_2">%1$d</xliff:g> адам</item>
+      <item quantity="one"><xliff:g id="ACCOUNT_TYPE_1">%2$s</xliff:g> ішінен <xliff:g id="COUNT_0">%1$d</xliff:g> адам</item>
+    </plurals>
+    <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
+      <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> адам</item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> адам</item>
+    </plurals>
     <string name="toast_join_with_empty_contact" msgid="2238581529864542985">"Басқа контактіге қосар алдында контактінің атын теру."</string>
     <string name="copy_text" msgid="3257145021583508761">"Дерек алмастыру жадына сақтау"</string>
     <string name="set_default" msgid="4417505153468300351">"Бастапқы ретінде орнату"</string>
@@ -264,4 +268,5 @@
     <string name="content_description_recent_call" msgid="5183800406316723676">"жақындағы қоңырау. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. кері қоңырау шалу үшін басыңыз"</string>
     <string name="message_from_you_prefix" msgid="7180706529908434482">"Сіз: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
     <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"Hangouts қолданбасы электрондық пошта өрісіне немесе телефон өрісіне адамның Hangouts идентификаторын енгізгенде жақсырақ жұмыс істейді."</string>
+    <string name="compact_editor_more_fields" msgid="2874181192382284115">"Қосымша өрістер"</string>
 </resources>
diff --git a/res/values-km-rKH/strings.xml b/res/values-km-rKH/strings.xml
index 6dc210b..91bf8b7 100644
--- a/res/values-km-rKH/strings.xml
+++ b/res/values-km-rKH/strings.xml
@@ -46,6 +46,7 @@
     <string name="description_action_menu_add_star" msgid="3327186327234177456">"បន្ថែម​ទៅ​និយម​ប្រើ"</string>
     <string name="menu_editContact" msgid="9042415603857662633">"កែសម្រួល​"</string>
     <string name="menu_deleteContact" msgid="6788644058868189393">"លុប"</string>
+    <string name="menu_change_photo" msgid="7769177631511496210">"ប្ដូររូបថត"</string>
     <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"ដាក់​លើ​អេក្រង់​ដើម"</string>
     <string name="menu_call" msgid="3992595586042260618">"ហៅ​ទំនាក់ទំនង"</string>
     <string name="menu_sendSMS" msgid="5535886767547006515">"អត្ថបទ​ទំនាក់ទំនង"</string>
@@ -56,17 +57,23 @@
     <string name="menu_new_group_action_bar" msgid="3520232877587377175">"បន្ថែម​ក្រុម"</string>
     <string name="splitConfirmation_title" msgid="633640935430370530">"បំបែក​ទំនាក់ទំនង?"</string>
     <string name="splitConfirmation" msgid="740190210499587175">"នឹង​បំបែក​ទំនាក់ទំនង​នេះ​ទៅជា​ទំនាក់ទំនង​ច្រើន។"</string>
-    <string name="menu_joinAggregate" msgid="5027981918265667970">"ចូលរួម"</string>
+    <string name="menu_joinAggregate" msgid="4050157483569357666">"បញ្ចូលគ្នា"</string>
     <string name="titleJoinContactDataWith" msgid="7684875775798635354">"ភ្ជាប់​ទំនាក់ទំនង"</string>
     <string name="blurbJoinContactDataWith" msgid="8736488417422708236">"ជ្រើស​ទំនាក់ទំនង​ដែល​អ្នក​ចង់​ភ្ជាប់​ជាមួយ <xliff:g id="NAME">%s</xliff:g>៖"</string>
     <string name="showAllContactsJoinItem" msgid="2189695051430392383">"បង្ហាញ​ទំនាក់​ទំនង​ទាំងអស់"</string>
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"ទំនាក់ទំនង​ដែល​បាន​ស្នើ"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"ទំនាក់ទំនង​ទាំងអស់"</string>
-    <string name="contactsJoinedMessage" msgid="7208148163607047389">"ទំនាក់ទំនង​ដែល​បាន​ភ្ជាប់"</string>
+    <string name="contactsJoinedMessage" msgid="656936718666768589">"ទំនាក់ទំនងត្រូវបានរួមបញ្ចូលគ្នា"</string>
+    <string name="contacts_deleted_toast" msgid="286851430992788215">"ទំនាក់ទំនងត្រូវបានលុប"</string>
     <string name="menu_set_ring_tone" msgid="8728345772068064946">"កំណត់​សំឡេង​រោទ៍"</string>
     <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"ការ​ហៅ​ទាំងអស់​ទៅ​សារ​ជា​សំឡេង"</string>
     <string name="readOnlyContactWarning" msgid="7808825687289848259">"អ្នក​មិន​អាច​លុប​ទំនាក់ទំនង​ពី​គណនី​បាន​តែ​អាន​ទេ ប៉ុន្តែ​អ្នក​អាច​លាក់​ពួក​វា​នៅ​ក្នុង​បញ្ជី​ទំនាក់ទំនង​របស់​អ្នក​បាន។"</string>
     <string name="readOnlyContactDeleteConfirmation" msgid="2137170726670196909">"ទំនាក់ទំនង​នេះ​មាន​ព័ត៌មាន​ពី​គណនី​ច្រើន។ នឹង​លាក់​ព័ត៌មាន​ពី​គណនី​បានតែ​អាន, មិនមែន​លុប​ទេ។"</string>
+    <string name="batch_merge_single_contact_warning" msgid="982585201970392110">"អ្នកត្រូវការទំនាក់ទំនងដែលបានជ្រើសរើសយ៉ាងហោចណាស់ 2 ដើម្បីធ្វើការរួមបញ្ចូលគ្នា។"</string>
+    <string name="batch_merge_confirmation" msgid="8551299480317422420">"ទំនាក់ទំនងដែលបានជ្រើសរើសនឹងត្រូវបានរួមបញ្ចូលជាមួយទំនាក់ទំនងទោល។"</string>
+    <string name="batch_delete_confirmation" msgid="2564172328268885394">"ទំនាក់ទំនងដែលបានជ្រើសរើសនឹងត្រូវបានលុប។"</string>
+    <string name="batch_delete_read_only_contact_confirmation" msgid="6614878716815412523">"ព័ត៌មានដែលបានមកពីគណនីដែលអាចត្រឹមតែអាន នឹងត្រូវបានលាក់ក្នុងបញ្ជីទំនាក់ទំនងរបស់អ្នក មិនមែនលុបចោលទេ។"</string>
+    <string name="batch_delete_multiple_accounts_confirmation" msgid="5189722181586680185">"ទំនាក់ទំនងទាំងនេះផ្ទុកព័ត៌មានដែលបានមកពីគណនីជាច្រើន។ ព័ត៌មានដែលបានមកពីគណនីដែលអាចត្រឹមតែអាន នឹងត្រូវបានលាក់នៅក្នុងបញ្ជីទំនាក់ទំនងរបស់អ្នក មិនមែនលុបចោលទេ។"</string>
     <string name="multipleContactDeleteConfirmation" msgid="938900978442960800">"ការ​លុប​ទំនាក់ទំនង​នេះ​នឹង​លុប​ព័ត៌មាន​ពី​គណនី​ច្រើន​ទៀត។"</string>
     <string name="deleteConfirmation" msgid="811706994761610640">"នឹង​លុប​ទំនាក់ទំនង​នេះ។"</string>
     <string name="menu_discard" msgid="6854657936970228164">"បោះបង់​ការ​ផ្លាស់ប្ដូរ"</string>
@@ -94,20 +101,20 @@
     <string name="contactSavedErrorToast" msgid="3207250533172944892">"មិន​អាច​រក្សាទុក​ការ​ប្ដូរ​ទំនាក់ទំនង។"</string>
     <string name="groupSavedToast" msgid="1168756874239833756">"បាន​រក្សាទុក​ក្រុម។"</string>
     <string name="groupSavedErrorToast" msgid="7984466936615304740">"មិន​អាច​រក្សាទុក​ការ​ប្ដូរ​ក្រុម។"</string>
-  <plurals name="listTotalPhoneContacts">
-    <item quantity="one" msgid="3015357862286673986">"ទំនាក់ទំនង ១ ដែល​មាន​លេខ​ទូរស័ព្ទ"</item>
-    <item quantity="other" msgid="3299954047880968205">"ទំនាក់ទំនង <xliff:g id="COUNT">%d</xliff:g> ដែល​មាន​លេខ​ទូរស័ព្ទ"</item>
-  </plurals>
+    <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
+      <item quantity="other">ទំនាក់ទំនង <xliff:g id="COUNT">%d</xliff:g> ដែលមានលេខទូរស័ព្ទ</item>
+      <item quantity="one">ទំនាក់ទំនង 1 ដែលមានលេខទូរស័ព្ទ</item>
+    </plurals>
     <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"គ្មាន​ទំនាក់ទំនង​ដែល​មាន​លេខ​ទូរស័ព្ទ"</string>
-  <plurals name="listFoundAllContacts">
-    <item quantity="one" msgid="5517063038754171134">"បាន​រក​ឃើញ ១"</item>
-    <item quantity="other" msgid="3852668542926965042">"បាន​រក​ឃើញ <xliff:g id="COUNT">%d</xliff:g>"</item>
-  </plurals>
+    <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
+      <item quantity="other">បានរកឃើញ <xliff:g id="COUNT">%d</xliff:g></item>
+      <item quantity="one">បានរកឃើញ 1</item>
+    </plurals>
     <string name="listFoundAllContactsZero" msgid="922980883593159444">"មិន​មាន​ទំនាក់ទំនង"</string>
-  <plurals name="searchFoundContacts">
-    <item quantity="one" msgid="4826918429708286628">"បាន​រក​ឃើញ ១"</item>
-    <item quantity="other" msgid="7988132539476575389">"បាន​រក​ឃើញ <xliff:g id="COUNT">%d</xliff:g>"</item>
-  </plurals>
+    <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
+      <item quantity="other">បានរកឃើញ <xliff:g id="COUNT">%d</xliff:g></item>
+      <item quantity="one">បានរកឃើញ 1</item>
+    </plurals>
     <string name="all_contacts_tab_label" msgid="6250372293594147703">"គ្រប់ទំនាក់ទំនង"</string>
     <string name="favorites_tab_label" msgid="1524869648904016414">"ពេញចិត្ត"</string>
     <string name="callBack" msgid="5498224409038809224">"ហៅ​ទៅវិញ"</string>
@@ -144,9 +151,6 @@
     <string name="pick_new_photo" msgid="9122450996263688237">"ជ្រើស​រូបថត​ថ្មី"</string>
     <string name="locale_change_in_progress" msgid="7583992153091537467">"កំពុង​ធ្វើ​បច្ចុប្បន្នភាព​ទំនាក់ទំនង​ដើម្បី​ឆ្លុះបញ្ចាំង​ការ​ប្ដូរ​ភាសា។"</string>
     <string name="upgrade_in_progress" msgid="474511436863451061">"កំពុង​ធ្វើ​បច្ចុប្បន្នភាព​បញ្ជី​ទំនាក់ទំនង។"</string>
-    <string name="upgrade_out_of_memory" msgid="1209994418877625940">"កំពុង​ធ្វើ​បច្ចុប្បន្នភាព​ទំនាក់ទំនង។ \n\nដំណើរការ​នេះ​ទាមទារ​ឧបករណ៍​ផ្ទុក​ខាងក្នុង​ប្រហែល <xliff:g id="SIZE_IN_MEGABYTES">%s</xliff:g> មេកាបៃ។\n\nជ្រើស​ជម្រើស​មួយ​ខាងក្រោម៖"</string>
-    <string name="upgrade_out_of_memory_uninstall" msgid="1721798828992091432">"លុប​កម្មវិធី​មួយ​ចំនួន"</string>
-    <string name="upgrade_out_of_memory_retry" msgid="8431289830472724609">"ធ្វើ​បច្ចុប្បន្នភាព​ម្ដងទៀត"</string>
     <string name="search_results_searching" msgid="3984833028938569930">"កំពុង​រក..."</string>
     <string name="menu_display_selected" msgid="6470001164297969034">"បង្ហាញ​អ្វី​ដែល​បាន​ជ្រើស"</string>
     <string name="menu_display_all" msgid="8887488642609786198">"បង្ហាញ​ទាំងអស់"</string>
@@ -160,10 +164,10 @@
     <string name="primary_photo" msgid="8517942231868516999">"រូបថតបឋម"</string>
     <string name="description_star" msgid="2605854427360036550">"សំណព្វ"</string>
     <string name="edit_contact" msgid="7529281274005689512">"កែ​ទំនាក់ទំនង"</string>
-  <plurals name="merge_info">
-    <item quantity="one" msgid="148365587896371969">"មិន​បាន​បញ្ចូល​ចូល​គ្នា"</item>
-    <item quantity="other" msgid="425683718017380845">"បាន​បញ្ចូល​គ្នា​​មក​ពី​ប្រភព <xliff:g id="COUNT">%0$d</xliff:g>"</item>
-  </plurals>
+    <plurals name="merge_info" formatted="false" msgid="2489323424994280962">
+      <item quantity="other">បានរួមបញ្ចូលគ្នាពីប្រភព <xliff:g id="COUNT">%0$d</xliff:g></item>
+      <item quantity="one">មិនបានរួមបញ្ចូលគ្នា</item>
+    </plurals>
     <string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"ភ្ជាប់​ទំនាក់ទំនង​បច្ចុប្បន្ន​ជាមួយ​ទំនាក់ទំនង​ដែល​បាន​ជ្រើស?"</string>
     <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"ប្ដូរ​ដើម្បី​កែ​ទំនាក់ទំនង​ដែល​បាន​ជ្រើស? ព័ត៌មាន​ដែល​អ្នក​បញ្ចូល​នឹង​បាន​ចម្លង។"</string>
     <string name="menu_copyContact" msgid="1573960845106822639">"ចម្លង​ទៅ​ទំនាក់ទំនង​របស់​ខ្ញុំ"</string>
@@ -172,7 +176,7 @@
     <string name="list_filter_custom" msgid="8910173055702057002">"ផ្ទាល់ខ្លួន"</string>
     <string name="activity_title_settings" msgid="5464130076132770781">"ការ​កំណត់"</string>
     <string name="menu_settings" msgid="377929915873428211">"ការ​កំណត់"</string>
-    <string name="menu_help" msgid="5123887102216637725">"ជំនួយ"</string>
+    <string name="menu_help" msgid="1680178646764069976">"ជំនួយ &amp; មតិត្រឡប់"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"បង្ហាញ​ជម្រើស"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="non_phone_caption" msgid="1541655052330027380">"លេខទូរស័ព្ទ"</string>
@@ -188,19 +192,19 @@
     <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"នាំចូល​ទំនាក់ទំនង"</string>
     <string name="create_group_dialog_title" msgid="6874527142828424475">"បង្កើត​ក្រុម​ថ្មី"</string>
     <string name="create_group_item_label" msgid="4411981763169654825">"បង្កើត​ក្រុម​ថ្មី"</string>
-  <plurals name="num_groups_in_account">
-    <item quantity="one" msgid="2944819210288517794">"១ ក្រុម"</item>
-    <item quantity="other" msgid="1276758425904917367">"<xliff:g id="COUNT">%0$d</xliff:g> ក្រុម"</item>
-  </plurals>
+    <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
+      <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> ក្រុម</item>
+      <item quantity="one">1 ក្រុម</item>
+    </plurals>
     <string name="delete_group_dialog_message" msgid="7586856514337560529">"លុប​ក្រុម \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\"? (ទំនាក់ទំនង​របស់​វា​នឹង​មិន​លុប​ទេ)"</string>
-  <plurals name="num_contacts_in_group">
-    <item quantity="one" msgid="1352418549951013448">"<xliff:g id="COUNT_0">%1$d</xliff:g> នាក់​ពី <xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>"</item>
-    <item quantity="other" msgid="8146027769011086349">"<xliff:g id="COUNT_0">%1$d</xliff:g> នាក់​ពី <xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>"</item>
-  </plurals>
-  <plurals name="group_list_num_contacts_in_group">
-    <item quantity="one" msgid="3323065321661972446">"<xliff:g id="COUNT">%1$d</xliff:g> នាក់"</item>
-    <item quantity="other" msgid="6251996206137048525">"<xliff:g id="COUNT">%1$d</xliff:g> នាក់"</item>
-  </plurals>
+    <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
+      <item quantity="other">មនុស្ស <xliff:g id="COUNT_2">%1$d</xliff:g> នាក់ពី <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
+      <item quantity="one">មនុស្ស <xliff:g id="COUNT_0">%1$d</xliff:g> នាក់ពី <xliff:g id="ACCOUNT_TYPE_1">%2$s</xliff:g></item>
+    </plurals>
+    <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
+      <item quantity="other">មនុស្ស <xliff:g id="COUNT_1">%1$d</xliff:g> នាក់</item>
+      <item quantity="one">មនុស្ស <xliff:g id="COUNT_0">%1$d</xliff:g> នាក់</item>
+    </plurals>
     <string name="toast_join_with_empty_contact" msgid="2238581529864542985">"សូម​បញ្ចូល​ឈ្មោះ​ទំនាក់ទំនង​មុន​ពេល​ចូលរួម​ជាមួយ​ទំនាក់ទំនង​ផ្សេងទៀត។"</string>
     <string name="copy_text" msgid="3257145021583508761">"ចម្លង​ទៅ​ក្ដារ​តម្បៀត​ខ្ទាស់"</string>
     <string name="set_default" msgid="4417505153468300351">"កំណត់​លំនាំដើម"</string>
@@ -264,4 +268,5 @@
     <string name="content_description_recent_call" msgid="5183800406316723676">"ការ​ហៅ​ថ្មី​។ <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. ចុច​ដើម្បី​ហៅ​ត្រឡប់"</string>
     <string name="message_from_you_prefix" msgid="7180706529908434482">"អ្នក៖ <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
     <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"Hangouts ដំណើរការបានយ៉ាងល្អ នៅពេលដែលអ្នកបញ្ចូលអត្តសញ្ញាណ Hangouts របស់បុគ្គលនោះទៅក្នុងប្រអប់អ៊ីម៉ែល ឬប្រអប់លេខទូរស័ព្ទ។"</string>
+    <string name="compact_editor_more_fields" msgid="2874181192382284115">"ប្រអប់ច្រើនទៀត"</string>
 </resources>
diff --git a/res/values-kn-rIN/strings.xml b/res/values-kn-rIN/strings.xml
index 8fcab1b..83426ef 100644
--- a/res/values-kn-rIN/strings.xml
+++ b/res/values-kn-rIN/strings.xml
@@ -46,6 +46,7 @@
     <string name="description_action_menu_add_star" msgid="3327186327234177456">"ಮೆಚ್ಚಿನವುಗಳಿಗೆ ಸೇರಿಸಲಾಗಿದೆ"</string>
     <string name="menu_editContact" msgid="9042415603857662633">"ಸಂಪಾದಿಸು"</string>
     <string name="menu_deleteContact" msgid="6788644058868189393">"ಅಳಿಸು"</string>
+    <string name="menu_change_photo" msgid="7769177631511496210">"ಫೋಟೋ ಬದಲಾಯಿಸು"</string>
     <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"ಮುಖಪುಟ ಪರದೆಯ ಮೇಲೆ ಇರಿಸು"</string>
     <string name="menu_call" msgid="3992595586042260618">"ಕರೆಯ ಸಂಪರ್ಕ"</string>
     <string name="menu_sendSMS" msgid="5535886767547006515">"ಪಠ್ಯ ಸಂಪರ್ಕ"</string>
@@ -56,17 +57,23 @@
     <string name="menu_new_group_action_bar" msgid="3520232877587377175">"ಗುಂಪು ಸೇರಿಸು"</string>
     <string name="splitConfirmation_title" msgid="633640935430370530">"ಸಂಪರ್ಕವನ್ನು ಪ್ರತ್ಯೇಕಿಸುವುದೇ?"</string>
     <string name="splitConfirmation" msgid="740190210499587175">"ಈ ಸಂಪರ್ಕವನ್ನು ಬಹು ಸಂಪರ್ಕಗಳಾಗಿ ಪ್ರತ್ಯೇಕಿಸಲಾಗುವುದು."</string>
-    <string name="menu_joinAggregate" msgid="5027981918265667970">"ಸೇರಿಕೊಳ್ಳಿ"</string>
+    <string name="menu_joinAggregate" msgid="4050157483569357666">"ವಿಲೀನಗೊಳಿಸು"</string>
     <string name="titleJoinContactDataWith" msgid="7684875775798635354">"ಸಂಪರ್ಕಗಳಿಗೆ ಸೇರಿ"</string>
     <string name="blurbJoinContactDataWith" msgid="8736488417422708236">"<xliff:g id="NAME">%s</xliff:g> ಅವರೊಂದಿಗೆ ನೀವು ಸೇರಿಸಲು ಬಯಸುವ ಸಂಪರ್ಕವನ್ನು ಆಯ್ಕೆಮಾಡಿ:"</string>
     <string name="showAllContactsJoinItem" msgid="2189695051430392383">"ಎಲ್ಲ ಸಂಪರ್ಕಗಳನ್ನು ತೋರಿಸು"</string>
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"ಸೂಚಿಸಲಾದ ಸಂಪರ್ಕಗಳು"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"ಎಲ್ಲಾ ಸಂಪರ್ಕಗಳು"</string>
-    <string name="contactsJoinedMessage" msgid="7208148163607047389">"ಸಂಪರ್ಕಗಳನ್ನು ಸೇರಿಸಲಾಗಿದೆ"</string>
+    <string name="contactsJoinedMessage" msgid="656936718666768589">"ಸಂಪರ್ಕಗಳನ್ನು ವಿಲೀನಗೊಳಿಸಲಾಗಿದೆ"</string>
+    <string name="contacts_deleted_toast" msgid="286851430992788215">"ಸಂಪರ್ಕಗಳನ್ನು ಅಳಿಸಲಾಗಿದೆ"</string>
     <string name="menu_set_ring_tone" msgid="8728345772068064946">"ರಿಂಗ್‌ಟೋನ್‌ ಹೊಂದಿಸಿ"</string>
     <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"ಧ್ವನಿಮೇಲ್‌ಗೆ ಎಲ್ಲ ಕರೆಗಳು"</string>
     <string name="readOnlyContactWarning" msgid="7808825687289848259">"ಓದಲು ಮಾತ್ರ ಖಾತೆಗಳಿಂದ ಸಂಪರ್ಕಗಳನ್ನು ನಿಮಗೆ ಅಳಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ, ಆದರೆ ನಿಮ್ಮ ಸಂಪರ್ಕಗಳ ಪಟ್ಟಿಯಲ್ಲಿ ಅವುಗಳನ್ನು ನೀವು ಮರೆಮಾಡಬಹುದು."</string>
     <string name="readOnlyContactDeleteConfirmation" msgid="2137170726670196909">"ಈ ಸಂಪರ್ಕವು ಬಹು ಖಾತೆಗಳಿಂದ ಮಾಹಿತಿಯನ್ನು ಹೊಂದಿದೆ. ಓದಲು ಮಾತ್ರ ಖಾತೆಗಳಿಂದ ಮಾಹಿತಿಯನ್ನು ನಿಮ್ಮ ಸಂಪರ್ಕಗಳ ಪಟ್ಟಿಗಳಿಂದ ಮರೆಮಾಡಲಾಗಿರುತ್ತದೆ, ಅಳಿಸುವುದಿಲ್ಲ."</string>
+    <string name="batch_merge_single_contact_warning" msgid="982585201970392110">"ವಿಲೀನಗೊಳಿಸಲು ನೀವು ಕನಿಷ್ಠ ಎರಡು ಸಂಪರ್ಕಗಳನ್ನಾದರೂ ಆಯ್ಕೆ ಮಾಡಬೇಕಾಗಿರುತ್ತದೆ."</string>
+    <string name="batch_merge_confirmation" msgid="8551299480317422420">"ಆಯ್ಕೆಮಾಡಲಾದ ಸಂಪರ್ಕಗಳನ್ನು ಒಂದೇ ಸಂಪರ್ಕವನ್ನಾಗಿ ವಿಲೀನಗೊಳಿಸಲಾಗುತ್ತದೆ."</string>
+    <string name="batch_delete_confirmation" msgid="2564172328268885394">"ಆಯ್ಕೆಮಾಡಲಾದ ಸಂಪರ್ಕಗಳನ್ನು ಅಳಿಸಲಾಗುತ್ತದೆ."</string>
+    <string name="batch_delete_read_only_contact_confirmation" msgid="6614878716815412523">"ಓದಲು-ಮಾತ್ರ ಖಾತೆಗಳಿಂದ ಮಾಹಿತಿಯನ್ನು ನಿಮ್ಮ ಸಂಪರ್ಕಗಳ ಪಟ್ಟಿಯಲ್ಲಿ ಮರೆಮಾಡಲಾಗಿರುತ್ತದೆ, ಅಳಿಸಲಾಗುವುದಿಲ್ಲ."</string>
+    <string name="batch_delete_multiple_accounts_confirmation" msgid="5189722181586680185">"ಈ ಸಂಪರ್ಕಗಳು ಬಹು ಖಾತೆಗಳಿಂದ ಮಾಹಿತಿಯನ್ನು ಹೊಂದಿವೆ. ಓದಲು-ಮಾತ್ರ ಖಾತೆಗಳಿಂದ ಮಾಹಿತಿಯನ್ನು ನಿಮ್ಮ ಸಂಪರ್ಕಗಳ ಪಟ್ಟಿಯಲ್ಲಿ ಮರೆಮಾಡಲಾಗಿರುತ್ತದೆ, ಅಳಿಸಲಾಗುವುದಿಲ್ಲ."</string>
     <string name="multipleContactDeleteConfirmation" msgid="938900978442960800">"ಬಹು ಖಾತೆಗಳಿಂದ ಮಾಹಿತಿಯನ್ನು ಅಳಿಸಿಹಾಕಲು ಈ ಸಂಪರ್ಕವನ್ನು ಅಳಿಸಿ ಹಾಕಲಾಗುತ್ತಿದೆ."</string>
     <string name="deleteConfirmation" msgid="811706994761610640">"ಈ ಸಂಪರ್ಕವನ್ನು ಅಳಿಸಲಾಗುತ್ತದೆ."</string>
     <string name="menu_discard" msgid="6854657936970228164">"ಬದಲಾವಣೆಗಳನ್ನು ತ್ಯಜಿಸಿ"</string>
@@ -94,20 +101,20 @@
     <string name="contactSavedErrorToast" msgid="3207250533172944892">"ಸಂಪರ್ಕ ಬದಲಾವಣೆಗಳನ್ನು ಉಳಿಸಲಾಗಲಿಲ್ಲ."</string>
     <string name="groupSavedToast" msgid="1168756874239833756">"ಗುಂಪನ್ನು ಉಳಿಸಲಾಗಿದೆ."</string>
     <string name="groupSavedErrorToast" msgid="7984466936615304740">"ಗುಂಪಿನ ಬದಲಾವಣೆಗಳನ್ನು ಉಳಿಸಲಾಗಲಿಲ್ಲ."</string>
-  <plurals name="listTotalPhoneContacts">
-    <item quantity="one" msgid="3015357862286673986">"ಫೋನ್‌‌ ಸಂಖ್ಯೆಯೊಂದಿಗೆ 1 ಸಂಪರ್ಕ"</item>
-    <item quantity="other" msgid="3299954047880968205">"<xliff:g id="COUNT">%d</xliff:g> ಫೋನ್‌ ಸಂಖ್ಯೆಗಳೊಂದಿಗೆ ಸಂಪರ್ಕಗಳು"</item>
-  </plurals>
+    <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
+      <item quantity="one">ಫೋನ್‌ ಸಂಖ್ಯೆಗಳೊಂದಿಗೆ <xliff:g id="COUNT">%d</xliff:g> ಸಂಪರ್ಕಗಳು</item>
+      <item quantity="other">ಫೋನ್‌ ಸಂಖ್ಯೆಗಳೊಂದಿಗೆ <xliff:g id="COUNT">%d</xliff:g> ಸಂಪರ್ಕಗಳು</item>
+    </plurals>
     <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"ಫೋನ್‌ ಸಂಖ್ಯೆಗಳೊಂದಿಗೆ ಯಾವುದೇ ಸಂಪರ್ಕಗಳಿಲ್ಲ"</string>
-  <plurals name="listFoundAllContacts">
-    <item quantity="one" msgid="5517063038754171134">"1 ಕಂಡುಬಂದಿದೆ"</item>
-    <item quantity="other" msgid="3852668542926965042">"<xliff:g id="COUNT">%d</xliff:g> ಕಂಡುಬಂದಿದೆ"</item>
-  </plurals>
+    <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
+      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> ಕಂಡುಬಂದಿದೆ</item>
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ಕಂಡುಬಂದಿದೆ</item>
+    </plurals>
     <string name="listFoundAllContactsZero" msgid="922980883593159444">"ಯಾವುದೇ ಸಂಪರ್ಕಗಳಿಲ್ಲ"</string>
-  <plurals name="searchFoundContacts">
-    <item quantity="one" msgid="4826918429708286628">"1 ಕಂಡುಬಂದಿದೆ"</item>
-    <item quantity="other" msgid="7988132539476575389">"<xliff:g id="COUNT">%d</xliff:g> ಕಂಡುಬಂದಿದೆ"</item>
-  </plurals>
+    <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
+      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> ಕಂಡುಬಂದಿದೆ</item>
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ಕಂಡುಬಂದಿದೆ</item>
+    </plurals>
     <string name="all_contacts_tab_label" msgid="6250372293594147703">"ಎಲ್ಲ ಸಂಪರ್ಕಗಳು"</string>
     <string name="favorites_tab_label" msgid="1524869648904016414">"ಮೆಚ್ಚಿನವುಗಳು"</string>
     <string name="callBack" msgid="5498224409038809224">"ಮರಳಿ ಕರೆ ಮಾಡಿ"</string>
@@ -144,9 +151,6 @@
     <string name="pick_new_photo" msgid="9122450996263688237">"ಹೊಸ ಫೋಟೋವನ್ನು ಆಯ್ಕೆಮಾಡಿ"</string>
     <string name="locale_change_in_progress" msgid="7583992153091537467">"ಭಾಷೆಯ ಬದಲಾವಣೆಯನ್ನು ಬಿಂಬಿಸಲು ಸಂಪರ್ಕ ಪಟ್ಟಿಯನ್ನು ನವೀಕರಿಸಲಾಗುತ್ತಿದೆ."</string>
     <string name="upgrade_in_progress" msgid="474511436863451061">"ಸಂಪರ್ಕ ಪಟ್ಟಿಯನ್ನು ನವೀಕರಿಸಲಾಗುತ್ತಿದೆ."</string>
-    <string name="upgrade_out_of_memory" msgid="1209994418877625940">"ಸಂಪರ್ಕಗಳು ಅಪ್‌ಗ್ರೇಡ್‌ ಆಗುವ ಪ್ರಕ್ರಿಯೆಯಲ್ಲಿವೆ. \n\nಅಪ್‌ಗ್ರೇಡ್‌ ಪ್ರಕ್ರಿಯೆಗೆ ಸುಮಾರು <xliff:g id="SIZE_IN_MEGABYTES">%s</xliff:g> MB ಆಂತರಿಕ ಸಂಗ್ರಹಣೆಯ ಅಗತ್ಯವಿದೆ.\n\nಕೆಳಗಿನ ಆಯ್ಕೆಗಳಿಂದ ಒಂದನ್ನು ಆಯ್ಕೆಮಾಡಿ:"</string>
-    <string name="upgrade_out_of_memory_uninstall" msgid="1721798828992091432">"ಕೆಲವು ಅಪ್ಲಿಕೇಶನ್‌ಗಳನ್ನು ಅಸ್ಥಾಪಿಸಿ"</string>
-    <string name="upgrade_out_of_memory_retry" msgid="8431289830472724609">"ಅಪ್‌ಗ್ರೇಡ್‌ ಮರುಪ್ರಯತ್ನಿಸಿ"</string>
     <string name="search_results_searching" msgid="3984833028938569930">"ಹುಡುಕಲಾಗುತ್ತಿದೆ…"</string>
     <string name="menu_display_selected" msgid="6470001164297969034">"ಆಯ್ಕೆಮಾಡಿರುವುದನ್ನು ತೋರಿಸು"</string>
     <string name="menu_display_all" msgid="8887488642609786198">"ಎಲ್ಲ ತೋರಿಸು"</string>
@@ -160,10 +164,10 @@
     <string name="primary_photo" msgid="8517942231868516999">"ಪ್ರಾಥಮಿಕ ಫೋಟೋ"</string>
     <string name="description_star" msgid="2605854427360036550">"ಮೆಚ್ಚಿನ"</string>
     <string name="edit_contact" msgid="7529281274005689512">"ಸಂಪರ್ಕವನ್ನು ಸಂಪಾದಿಸು"</string>
-  <plurals name="merge_info">
-    <item quantity="one" msgid="148365587896371969">"ವಿಲೀನಗೊಳಿಸಿಲ್ಲ"</item>
-    <item quantity="other" msgid="425683718017380845">"<xliff:g id="COUNT">%0$d</xliff:g> ಮೂಲಗಳಿಂದ ವಿಲೀನಗೊಳಿಸಲಾಗಿದೆ"</item>
-  </plurals>
+    <plurals name="merge_info" formatted="false" msgid="2489323424994280962">
+      <item quantity="one"><xliff:g id="COUNT">%0$d</xliff:g> ಮೂಲಗಳಿಂದ ವಿಲೀನಗೊಳಿಸಲಾಗಿದೆ</item>
+      <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> ಮೂಲಗಳಿಂದ ವಿಲೀನಗೊಳಿಸಲಾಗಿದೆ</item>
+    </plurals>
     <string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"ಆಯ್ಕೆಮಾಡಿದ ಸಂಪರ್ಕದೊಂದಿಗೆ ಪ್ರಸ್ತುತ ಸಂಪರ್ಕವನ್ನು ಸೇರಿಸುವುದೇ?"</string>
     <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"ಆಯ್ಕೆಮಾಡಿದ ಸಂಪರ್ಕವನ್ನು ಸಂಪಾದಿಸುವುದಕ್ಕೆ ಬದಲಿಸುವುದೇ? ನೀವು ಇಲ್ಲಿಯವರೆಗೆ ನಮೂದಿಸಿದ ಮಾಹಿತಿಯನ್ನು ನಕಲು ಮಾಡಲಾಗುತ್ತದೆ."</string>
     <string name="menu_copyContact" msgid="1573960845106822639">"ನನ್ನ ಸಂಪರ್ಕಗಳಿಗೆ ನಕಲಿಸು"</string>
@@ -172,7 +176,7 @@
     <string name="list_filter_custom" msgid="8910173055702057002">"ಕಸ್ಟಮ್"</string>
     <string name="activity_title_settings" msgid="5464130076132770781">"ಸೆಟ್ಟಿಂಗ್‌ಗಳು"</string>
     <string name="menu_settings" msgid="377929915873428211">"ಸೆಟ್ಟಿಂಗ್‌ಗಳು"</string>
-    <string name="menu_help" msgid="5123887102216637725">"ಸಹಾಯ"</string>
+    <string name="menu_help" msgid="1680178646764069976">"ಸಹಾಯ &amp; ಪ್ರತಿಕ್ರಿಯೆ"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"ಪ್ರದರ್ಶನ ಆಯ್ಕೆಗಳು"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="non_phone_caption" msgid="1541655052330027380">"ಫೋನ್ ಸಂಖ್ಯೆ"</string>
@@ -188,19 +192,19 @@
     <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"ಸಂಪರ್ಕಗಳನ್ನು ಆಮದು ಮಾಡಿ"</string>
     <string name="create_group_dialog_title" msgid="6874527142828424475">"ಹೊಸ ಗುಂಪು ರಚಿಸಿ"</string>
     <string name="create_group_item_label" msgid="4411981763169654825">"ಹೊಸ ಗುಂಪು ರಚಿಸಿ"</string>
-  <plurals name="num_groups_in_account">
-    <item quantity="one" msgid="2944819210288517794">"1 ಗುಂಪು"</item>
-    <item quantity="other" msgid="1276758425904917367">"<xliff:g id="COUNT">%0$d</xliff:g> ಗುಂಪುಗಳು"</item>
-  </plurals>
+    <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
+      <item quantity="one"><xliff:g id="COUNT">%0$d</xliff:g> ಗುಂಪುಗಳು</item>
+      <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> ಗುಂಪುಗಳು</item>
+    </plurals>
     <string name="delete_group_dialog_message" msgid="7586856514337560529">"\"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\" ಗುಂಪನ್ನು ಅಳಿಸುವುದೇ? (ಸಂಪರ್ಕಗಳನ್ನೇ ಅಳಿಸಲಾಗುವುದಿಲ್ಲ.)"</string>
-  <plurals name="num_contacts_in_group">
-    <item quantity="one" msgid="1352418549951013448">"<xliff:g id="COUNT_0">%1$d</xliff:g> <xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g> ರಿಂದ ವ್ಯಕ್ತಿ"</item>
-    <item quantity="other" msgid="8146027769011086349">"<xliff:g id="COUNT_0">%1$d</xliff:g> <xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g> ರಿಂದ ಜನರು"</item>
-  </plurals>
-  <plurals name="group_list_num_contacts_in_group">
-    <item quantity="one" msgid="3323065321661972446">"<xliff:g id="COUNT">%1$d</xliff:g> ವ್ಯಕ್ತಿ"</item>
-    <item quantity="other" msgid="6251996206137048525">"<xliff:g id="COUNT">%1$d</xliff:g> ಜನರು"</item>
-  </plurals>
+    <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
+      <item quantity="one"><xliff:g id="COUNT_2">%1$d</xliff:g> <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g> ರಿಂದ ಜನರು</item>
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g> ರಿಂದ ಜನರು</item>
+    </plurals>
+    <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
+      <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> ಜನರು</item>
+      <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> ಜನರು</item>
+    </plurals>
     <string name="toast_join_with_empty_contact" msgid="2238581529864542985">"ಮತ್ತೊಬ್ಬರೊಂದಿಗೆ ಸೇರುವ ಮೊದಲು ಸಂಪರ್ಕದ ಹೆಸರನ್ನು ಟೈಪ್‌ ಮಾಡಿ."</string>
     <string name="copy_text" msgid="3257145021583508761">"ಕ್ಲಿಪ್‌ಬೋರ್ಡ್‌ಗೆ ನಕಲಿಸಿ"</string>
     <string name="set_default" msgid="4417505153468300351">"ಡೀಫಾಲ್ಟ್ ಹೊಂದಿಸಿ"</string>
@@ -264,4 +268,5 @@
     <string name="content_description_recent_call" msgid="5183800406316723676">"ಇತ್ತೀಚಿನ ಕರೆ. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. ಪುನಃ ಕರೆ ಮಾಡಲು ಕ್ಲಿಕ್ ಮಾಡಿ"</string>
     <string name="message_from_you_prefix" msgid="7180706529908434482">"ನೀವು: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
     <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"ಇಮೇಲ್ ಕ್ಷೇತ್ರ ಅಥವಾ ಫೋನ್ ಕ್ಷೇತ್ರದಲ್ಲಿ ವ್ಯಕ್ತಿಯ Hangouts ಗುರುತಿಸುವಿಕೆಯನ್ನು ನೀವು ನಮೂದಿಸಿದಾಗ Hangouts ಉತ್ತಮವಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ."</string>
+    <string name="compact_editor_more_fields" msgid="2874181192382284115">"ಹೆಚ್ಚು ಫೀಲ್ಡ್‌ಗಳು"</string>
 </resources>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index 6ca34ad..5d05d0f 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -46,6 +46,7 @@
     <string name="description_action_menu_add_star" msgid="3327186327234177456">"즐겨찾기에 추가됨"</string>
     <string name="menu_editContact" msgid="9042415603857662633">"수정"</string>
     <string name="menu_deleteContact" msgid="6788644058868189393">"삭제"</string>
+    <string name="menu_change_photo" msgid="7769177631511496210">"사진 변경"</string>
     <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"홈 화면에 만들기"</string>
     <string name="menu_call" msgid="3992595586042260618">"연락처로 전화 걸기"</string>
     <string name="menu_sendSMS" msgid="5535886767547006515">"연락처에 문자 보내기"</string>
@@ -56,17 +57,23 @@
     <string name="menu_new_group_action_bar" msgid="3520232877587377175">"그룹 추가"</string>
     <string name="splitConfirmation_title" msgid="633640935430370530">"주소록을 분리하시겠습니까?"</string>
     <string name="splitConfirmation" msgid="740190210499587175">"연락처가 여러 주소록으로 분리됩니다."</string>
-    <string name="menu_joinAggregate" msgid="5027981918265667970">"통합"</string>
+    <string name="menu_joinAggregate" msgid="4050157483569357666">"병합"</string>
     <string name="titleJoinContactDataWith" msgid="7684875775798635354">"연락처 통합"</string>
     <string name="blurbJoinContactDataWith" msgid="8736488417422708236">"<xliff:g id="NAME">%s</xliff:g>와(과) 통합할 연락처를 선택하세요."</string>
     <string name="showAllContactsJoinItem" msgid="2189695051430392383">"모든 연락처 표시"</string>
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"추천 연락처"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"모든 연락처"</string>
-    <string name="contactsJoinedMessage" msgid="7208148163607047389">"연락처 결합됨"</string>
+    <string name="contactsJoinedMessage" msgid="656936718666768589">"연락처가 병합되었습니다."</string>
+    <string name="contacts_deleted_toast" msgid="286851430992788215">"연락처가 삭제되었습니다."</string>
     <string name="menu_set_ring_tone" msgid="8728345772068064946">"벨소리 설정"</string>
     <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"음성사서함 자동 연결"</string>
     <string name="readOnlyContactWarning" msgid="7808825687289848259">"연락처를 읽기 전용 계정에서 삭제할 수는 없지만 주소록에서 숨길 수는 있습니다."</string>
     <string name="readOnlyContactDeleteConfirmation" msgid="2137170726670196909">"연락처에 여러 계정의 정보가 들어 있습니다. 읽기 전용 계정의 정보는 주소록 목록에서 숨길 수 있지만 삭제할 수는 없습니다."</string>
+    <string name="batch_merge_single_contact_warning" msgid="982585201970392110">"병합하려면 두 개 이상의 연락처를 선택해야 합니다."</string>
+    <string name="batch_merge_confirmation" msgid="8551299480317422420">"선택한 연락처를 하나의 연락처로 병합합니다."</string>
+    <string name="batch_delete_confirmation" msgid="2564172328268885394">"선택한 연락처를 삭제합니다."</string>
+    <string name="batch_delete_read_only_contact_confirmation" msgid="6614878716815412523">"읽기 전용 계정의 정보는 연락처 목록에서 숨길 수 있지만 삭제할 수는 없습니다."</string>
+    <string name="batch_delete_multiple_accounts_confirmation" msgid="5189722181586680185">"연락처에 여러 계정의 정보가 들어 있습니다. 읽기 전용 계정의 정보는 연락처 목록에서 숨길 수 있지만 삭제할 수는 없습니다."</string>
     <string name="multipleContactDeleteConfirmation" msgid="938900978442960800">"이 연락처를 삭제하면 여러 계정의 정보가 삭제됩니다."</string>
     <string name="deleteConfirmation" msgid="811706994761610640">"이 연락처를 삭제합니다."</string>
     <string name="menu_discard" msgid="6854657936970228164">"변경사항 취소"</string>
@@ -94,20 +101,20 @@
     <string name="contactSavedErrorToast" msgid="3207250533172944892">"연락처 변경사항을 저장할 수 없습니다."</string>
     <string name="groupSavedToast" msgid="1168756874239833756">"그룹이 저장되었습니다."</string>
     <string name="groupSavedErrorToast" msgid="7984466936615304740">"그룹 변경사항을 저장할 수 없습니다."</string>
-  <plurals name="listTotalPhoneContacts">
-    <item quantity="one" msgid="3015357862286673986">"전화번호가 포함된 연락처 1개"</item>
-    <item quantity="other" msgid="3299954047880968205">"전화번호가 포함된 연락처 <xliff:g id="COUNT">%d</xliff:g>개"</item>
-  </plurals>
+    <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
+      <item quantity="other">전화번호가 포함된 연락처 <xliff:g id="COUNT">%d</xliff:g>개</item>
+      <item quantity="one">전화번호가 포함된 연락처 1개</item>
+    </plurals>
     <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"전화번호가 포함된 주소록이 없습니다."</string>
-  <plurals name="listFoundAllContacts">
-    <item quantity="one" msgid="5517063038754171134">"1개를 찾았습니다."</item>
-    <item quantity="other" msgid="3852668542926965042">"<xliff:g id="COUNT">%d</xliff:g>개를 찾았습니다."</item>
-  </plurals>
+    <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
+      <item quantity="other">연락처 <xliff:g id="COUNT">%d</xliff:g>개</item>
+      <item quantity="one">연락처 1개</item>
+    </plurals>
     <string name="listFoundAllContactsZero" msgid="922980883593159444">"주소록 없음"</string>
-  <plurals name="searchFoundContacts">
-    <item quantity="one" msgid="4826918429708286628">"1개를 찾았습니다."</item>
-    <item quantity="other" msgid="7988132539476575389">"<xliff:g id="COUNT">%d</xliff:g>개를 찾았습니다."</item>
-  </plurals>
+    <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
+      <item quantity="other">연락처 <xliff:g id="COUNT">%d</xliff:g>개</item>
+      <item quantity="one">연락처 1개</item>
+    </plurals>
     <string name="all_contacts_tab_label" msgid="6250372293594147703">"모든 연락처"</string>
     <string name="favorites_tab_label" msgid="1524869648904016414">"즐겨찾기"</string>
     <string name="callBack" msgid="5498224409038809224">"전화 걸기"</string>
@@ -144,9 +151,6 @@
     <string name="pick_new_photo" msgid="9122450996263688237">"새 사진 선택"</string>
     <string name="locale_change_in_progress" msgid="7583992153091537467">"변경된 언어를 반영하도록 주소록을 업데이트하는 중입니다. 잠시 기다려 주세요."</string>
     <string name="upgrade_in_progress" msgid="474511436863451061">"주소록을 업데이트하고 있습니다."</string>
-    <string name="upgrade_out_of_memory" msgid="1209994418877625940">"주소록을 업그레이드하는 중입니다. \n\n업그레이드 하려면 약 <xliff:g id="SIZE_IN_MEGABYTES">%s</xliff:g>MB의 내부 저장공간이 필요합니다.\n\n다음 옵션 중 하나를 선택하세요."</string>
-    <string name="upgrade_out_of_memory_uninstall" msgid="1721798828992091432">"일부 애플리케이션 제거"</string>
-    <string name="upgrade_out_of_memory_retry" msgid="8431289830472724609">"업그레이드 다시 시도"</string>
     <string name="search_results_searching" msgid="3984833028938569930">"검색 중…"</string>
     <string name="menu_display_selected" msgid="6470001164297969034">"선택한 항목 표시"</string>
     <string name="menu_display_all" msgid="8887488642609786198">"모두 표시"</string>
@@ -160,10 +164,10 @@
     <string name="primary_photo" msgid="8517942231868516999">"기본 사진"</string>
     <string name="description_star" msgid="2605854427360036550">"즐겨찾기"</string>
     <string name="edit_contact" msgid="7529281274005689512">"연락처 수정"</string>
-  <plurals name="merge_info">
-    <item quantity="one" msgid="148365587896371969">"병합되지 않았습니다."</item>
-    <item quantity="other" msgid="425683718017380845">"<xliff:g id="COUNT">%0$d</xliff:g>개 출처에서 병합했습니다."</item>
-  </plurals>
+    <plurals name="merge_info" formatted="false" msgid="2489323424994280962">
+      <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g>개 출처에서 병합되었습니다.</item>
+      <item quantity="one">병합되지 않았습니다.</item>
+    </plurals>
     <string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"이 연락처와 선택한 연락처를 통합하시겠습니까?"</string>
     <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"선택한 연락처를 수정하시겠습니까? 지금까지 입력하신 정보는 복사됩니다."</string>
     <string name="menu_copyContact" msgid="1573960845106822639">"내 주소록에 복사"</string>
@@ -172,7 +176,7 @@
     <string name="list_filter_custom" msgid="8910173055702057002">"사용자 설정"</string>
     <string name="activity_title_settings" msgid="5464130076132770781">"설정"</string>
     <string name="menu_settings" msgid="377929915873428211">"설정"</string>
-    <string name="menu_help" msgid="5123887102216637725">"도움말"</string>
+    <string name="menu_help" msgid="1680178646764069976">"도움말 및 의견"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"표시 옵션"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="non_phone_caption" msgid="1541655052330027380">"전화번호"</string>
@@ -188,19 +192,19 @@
     <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"주소록 가져오기"</string>
     <string name="create_group_dialog_title" msgid="6874527142828424475">"새 그룹 만들기"</string>
     <string name="create_group_item_label" msgid="4411981763169654825">"새 그룹 만들기"</string>
-  <plurals name="num_groups_in_account">
-    <item quantity="one" msgid="2944819210288517794">"그룹 1개"</item>
-    <item quantity="other" msgid="1276758425904917367">"그룹 <xliff:g id="COUNT">%0$d</xliff:g>개"</item>
-  </plurals>
+    <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
+      <item quantity="other">그룹 <xliff:g id="COUNT">%0$d</xliff:g>개</item>
+      <item quantity="one">그룹 1개</item>
+    </plurals>
     <string name="delete_group_dialog_message" msgid="7586856514337560529">"\'<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\' 그룹을 삭제하시겠습니까? (연락처는 삭제되지 않음)"</string>
-  <plurals name="num_contacts_in_group">
-    <item quantity="one" msgid="1352418549951013448">"<xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g> 소속(<xliff:g id="COUNT_0">%1$d</xliff:g>명)"</item>
-    <item quantity="other" msgid="8146027769011086349">"<xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g> 소속(<xliff:g id="COUNT_0">%1$d</xliff:g>명)"</item>
-  </plurals>
-  <plurals name="group_list_num_contacts_in_group">
-    <item quantity="one" msgid="3323065321661972446">"<xliff:g id="COUNT">%1$d</xliff:g>명"</item>
-    <item quantity="other" msgid="6251996206137048525">"<xliff:g id="COUNT">%1$d</xliff:g>명"</item>
-  </plurals>
+    <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
+      <item quantity="other"><xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g> 소속 <xliff:g id="COUNT_2">%1$d</xliff:g>명</item>
+      <item quantity="one"><xliff:g id="ACCOUNT_TYPE_1">%2$s</xliff:g> 소속 <xliff:g id="COUNT_0">%1$d</xliff:g>명</item>
+    </plurals>
+    <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
+      <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g>명</item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g>명</item>
+    </plurals>
     <string name="toast_join_with_empty_contact" msgid="2238581529864542985">"다른 연락처와 통합하려면 연락처 이름을 입력하세요."</string>
     <string name="copy_text" msgid="3257145021583508761">"클립보드에 복사"</string>
     <string name="set_default" msgid="4417505153468300351">"기본으로 설정"</string>
@@ -264,4 +268,5 @@
     <string name="content_description_recent_call" msgid="5183800406316723676">"최근 통화내역은 다음과 같습니다. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. 연락 온 번호로 다시 전화하려면 클릭하세요."</string>
     <string name="message_from_you_prefix" msgid="7180706529908434482">"내가 보낸 메시지: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
     <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"사용자의 행아웃 식별자를 이메일 입력란 또는 휴대전화 입력란에 입력하면 행아웃이 더 잘 작동합니다."</string>
+    <string name="compact_editor_more_fields" msgid="2874181192382284115">"입력란 더보기"</string>
 </resources>
diff --git a/res/values-ky-rKG/strings.xml b/res/values-ky-rKG/strings.xml
index 24c87d0..3cd90ef 100644
--- a/res/values-ky-rKG/strings.xml
+++ b/res/values-ky-rKG/strings.xml
@@ -67,6 +67,7 @@
     <string name="description_action_menu_add_star" msgid="3327186327234177456">"Сүйүктүүлөргө кошулду"</string>
     <string name="menu_editContact" msgid="9042415603857662633">"Өзгөртүү"</string>
     <string name="menu_deleteContact" msgid="6788644058868189393">"Жок кылуу"</string>
+    <string name="menu_change_photo" msgid="7769177631511496210">"Сүрөт өзгөртүү"</string>
     <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Үй экранына жайгаштыруу"</string>
     <!-- no translation found for menu_call (3992595586042260618) -->
     <skip />
@@ -80,8 +81,7 @@
     <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Топ кошуу"</string>
     <string name="splitConfirmation_title" msgid="633640935430370530">"Байланыш бөлүнсүнбү?"</string>
     <string name="splitConfirmation" msgid="740190210499587175">"Бул байланыш бир нече байланыштарга бөлүнөт."</string>
-    <!-- no translation found for menu_joinAggregate (5027981918265667970) -->
-    <skip />
+    <string name="menu_joinAggregate" msgid="4050157483569357666">"Бириктирүү"</string>
     <!-- no translation found for titleJoinContactDataWith (7684875775798635354) -->
     <skip />
     <string name="blurbJoinContactDataWith" msgid="8736488417422708236">"<xliff:g id="NAME">%s</xliff:g> менен бириктиргиңиз келген байланышты тандаңыз."</string>
@@ -91,13 +91,18 @@
     <skip />
     <!-- no translation found for separatorJoinAggregateAll (7939932265026181043) -->
     <skip />
-    <!-- no translation found for contactsJoinedMessage (7208148163607047389) -->
-    <skip />
+    <string name="contactsJoinedMessage" msgid="656936718666768589">"Байланыштар бириктирилди"</string>
+    <string name="contacts_deleted_toast" msgid="286851430992788215">"Байланыштар жок кылынды"</string>
     <string name="menu_set_ring_tone" msgid="8728345772068064946">"Рингтон орнотуу"</string>
     <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Үн почтасына бардык чалуулар"</string>
     <string name="readOnlyContactWarning" msgid="7808825687289848259">"Сиз окуганга гана болгон эсебиңизден байланыштарыңызды өчүрө албайсыз, бирок аларды жашырсаңыз болот."</string>
     <!-- no translation found for readOnlyContactDeleteConfirmation (2137170726670196909) -->
     <skip />
+    <string name="batch_merge_single_contact_warning" msgid="982585201970392110">"Бириктирүүнү аткаруу үчүн кеминде эки байланыш тандашыңыз керек."</string>
+    <string name="batch_merge_confirmation" msgid="8551299480317422420">"Тандалган байланыштар бир байланыш катары бириктирилет."</string>
+    <string name="batch_delete_confirmation" msgid="2564172328268885394">"Тандалган байланыштар жок кылынат."</string>
+    <string name="batch_delete_read_only_contact_confirmation" msgid="6614878716815412523">"Окуу үчүн жана ачылган каттоо эсептеринин маалыматы байланыштарыңыздын тизмесинде жашырылат, бирок жок кылынбайт."</string>
+    <string name="batch_delete_multiple_accounts_confirmation" msgid="5189722181586680185">"Бул байланыштарда бир нече каттоо эсебинен маалымат камтылган. Окуу үчүн жана ачылган каттоо эсептеринин маалыматы байланыштарыңыздын тизмесинде жашырылат, бирок жок кылынбайт."</string>
     <!-- no translation found for multipleContactDeleteConfirmation (938900978442960800) -->
     <skip />
     <!-- no translation found for deleteConfirmation (811706994761610640) -->
@@ -137,15 +142,21 @@
     <!-- no translation found for groupSavedToast (1168756874239833756) -->
     <skip />
     <string name="groupSavedErrorToast" msgid="7984466936615304740">"Топтун өзгөртүүлөрү сакталган жок."</string>
-    <!-- no translation found for listTotalPhoneContacts:one (3015357862286673986) -->
-    <!-- no translation found for listTotalPhoneContacts:other (3299954047880968205) -->
+    <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
+      <item quantity="other">телефон номерлери менен <xliff:g id="COUNT">%d</xliff:g> байланыш</item>
+      <item quantity="one">телефон номери менен 1 байланыш</item>
+    </plurals>
     <!-- no translation found for listTotalPhoneContactsZero (6968813857632984319) -->
     <skip />
-    <!-- no translation found for listFoundAllContacts:one (5517063038754171134) -->
-    <!-- no translation found for listFoundAllContacts:other (3852668542926965042) -->
+    <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> табылды</item>
+      <item quantity="one">1 табылды</item>
+    </plurals>
     <string name="listFoundAllContactsZero" msgid="922980883593159444">"Байланыштар жок"</string>
-    <!-- no translation found for searchFoundContacts:one (4826918429708286628) -->
-    <!-- no translation found for searchFoundContacts:other (7988132539476575389) -->
+    <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> табылды</item>
+      <item quantity="one">1 табылды</item>
+    </plurals>
     <string name="all_contacts_tab_label" msgid="6250372293594147703">"Бардк байлнштр"</string>
     <string name="favorites_tab_label" msgid="1524869648904016414">"Сүйүктүүлөр"</string>
     <!-- no translation found for callBack (5498224409038809224) -->
@@ -198,11 +209,6 @@
     <skip />
     <!-- no translation found for upgrade_in_progress (474511436863451061) -->
     <skip />
-    <string name="upgrade_out_of_memory" msgid="1209994418877625940">"Байланыштар жаңыртылууда. \n\nЖаңыртуу ишине ички сактагычтан <xliff:g id="SIZE_IN_MEGABYTES">%s</xliff:g> МБ орун талап кылынат.\n\nКийинки мүмкүнчүлүктөрдүн бирин тандаңыз:"</string>
-    <!-- no translation found for upgrade_out_of_memory_uninstall (1721798828992091432) -->
-    <skip />
-    <!-- no translation found for upgrade_out_of_memory_retry (8431289830472724609) -->
-    <skip />
     <string name="search_results_searching" msgid="3984833028938569930">"Изделүүдө…"</string>
     <!-- no translation found for menu_display_selected (6470001164297969034) -->
     <skip />
@@ -222,8 +228,10 @@
     <skip />
     <!-- no translation found for edit_contact (7529281274005689512) -->
     <skip />
-    <!-- no translation found for merge_info:one (148365587896371969) -->
-    <!-- no translation found for merge_info:other (425683718017380845) -->
+    <plurals name="merge_info" formatted="false" msgid="2489323424994280962">
+      <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> булактарынан бириктирилген</item>
+      <item quantity="one">бириктирилген жок</item>
+    </plurals>
     <!-- no translation found for aggregation_suggestion_join_dialog_message (3842757977671434836) -->
     <skip />
     <!-- no translation found for aggregation_suggestion_edit_dialog_message (6549585283910518095) -->
@@ -240,7 +248,7 @@
     <!-- no translation found for menu_settings (377929915873428211) -->
     <!-- no translation found for menu_settings (377929915873428211) -->
     <skip />
-    <string name="menu_help" msgid="5123887102216637725">"Жардам"</string>
+    <string name="menu_help" msgid="1680178646764069976">"Жардам &amp; жооп пикир"</string>
     <!-- no translation found for preference_displayOptions (1341720270148252393) -->
     <skip />
     <!-- no translation found for organization_company_and_title (6718207751363732025) -->
@@ -267,17 +275,19 @@
     <!-- no translation found for create_group_dialog_title (6874527142828424475) -->
     <skip />
     <string name="create_group_item_label" msgid="4411981763169654825">"Жаңы топ түзүү"</string>
-    <!-- no translation found for num_groups_in_account:one (2944819210288517794) -->
-    <!-- no translation found for num_groups_in_account:other (1276758425904917367) -->
+    <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
+      <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> топ</item>
+      <item quantity="one">1 топ</item>
+    </plurals>
     <string name="delete_group_dialog_message" msgid="7586856514337560529">"\"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\" тобу өчүрүлсүнбү? (Байланыштардын өзү өчүрүлбөйт)."</string>
-  <plurals name="num_contacts_in_group">
-    <item quantity="one" msgid="1352418549951013448">"<xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g> ичинен <xliff:g id="COUNT_0">%1$d</xliff:g> киши"</item>
-    <item quantity="other" msgid="8146027769011086349">"<xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g> ичинен <xliff:g id="COUNT_0">%1$d</xliff:g> киши"</item>
-  </plurals>
-  <plurals name="group_list_num_contacts_in_group">
-    <item quantity="one" msgid="3323065321661972446">"<xliff:g id="COUNT">%1$d</xliff:g> киши"</item>
-    <item quantity="other" msgid="6251996206137048525">"<xliff:g id="COUNT">%1$d</xliff:g> киши"</item>
-  </plurals>
+    <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
+      <item quantity="other"><xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g> ичинен <xliff:g id="COUNT_2">%1$d</xliff:g> киши</item>
+      <item quantity="one"><xliff:g id="ACCOUNT_TYPE_1">%2$s</xliff:g> ичинен <xliff:g id="COUNT_0">%1$d</xliff:g> киши</item>
+    </plurals>
+    <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
+      <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> киши</item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> киши</item>
+    </plurals>
     <string name="toast_join_with_empty_contact" msgid="2238581529864542985">"Башка менен бириктирүүдөн мурун, байланыштын атын териңиз."</string>
     <string name="copy_text" msgid="3257145021583508761">"Алмашуу буферине көчүрүү"</string>
     <string name="set_default" msgid="4417505153468300351">"Негизги кылуу"</string>
@@ -342,4 +352,5 @@
     <string name="content_description_recent_call" msgid="5183800406316723676">"акыркы чалуу. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. кайра чалуу үчүн чыкылдатыңыз"</string>
     <string name="message_from_you_prefix" msgid="7180706529908434482">"Сиз: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
     <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"Кимдир-бирөөнүн Hangouts аныктагычы электрондук почта же телефон талаасына киргизилгенде Hangouts жакшыраак иштейт."</string>
+    <string name="compact_editor_more_fields" msgid="2874181192382284115">"Көбүрөөк талаа"</string>
 </resources>
diff --git a/res/values-lo-rLA/strings.xml b/res/values-lo-rLA/strings.xml
index d31655a..2c270c7 100644
--- a/res/values-lo-rLA/strings.xml
+++ b/res/values-lo-rLA/strings.xml
@@ -46,6 +46,7 @@
     <string name="description_action_menu_add_star" msgid="3327186327234177456">"​ເພີ່ມ​ໃສ່​ລາຍ​ການ​ທີ່​ມັກ"</string>
     <string name="menu_editContact" msgid="9042415603857662633">"ແກ້ໄຂ"</string>
     <string name="menu_deleteContact" msgid="6788644058868189393">"ລຶບ"</string>
+    <string name="menu_change_photo" msgid="7769177631511496210">"ປ່ຽນຮູບ"</string>
     <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"ວາງໃສ່ໜ້າຈໍຫຼັກ"</string>
     <string name="menu_call" msgid="3992595586042260618">"ໂທຫາລາຍຊື່ຜູ່ຕິດຕໍ່"</string>
     <string name="menu_sendSMS" msgid="5535886767547006515">"ສົ່ງຂໍ້ຄວາມຫາລາຍຊື່ຜູ່ຕິດຕໍ່"</string>
@@ -56,17 +57,23 @@
     <string name="menu_new_group_action_bar" msgid="3520232877587377175">"ເພີ່ມກຸ່ມ"</string>
     <string name="splitConfirmation_title" msgid="633640935430370530">"ແຍກລາຍຊື່ຜູ່ຕິດຕໍ່?"</string>
     <string name="splitConfirmation" msgid="740190210499587175">"ລາຍຊື່ຜູ່ຕິດຕໍ່ຈະຖືກແຍກເປັນຫຼາຍລາຍຊື່ຜູ່ຕິດຕໍ່."</string>
-    <string name="menu_joinAggregate" msgid="5027981918265667970">"ຮວມ"</string>
+    <string name="menu_joinAggregate" msgid="4050157483569357666">"ລວມ​ເຂົ້າ​ກັນ"</string>
     <string name="titleJoinContactDataWith" msgid="7684875775798635354">"ຮວມລາຍຊື່ຜູ່ຕິດຕໍ່"</string>
     <string name="blurbJoinContactDataWith" msgid="8736488417422708236">"ເລືອກລາຍຊື່ຜູ່ຕິດຕໍ່ ທີ່ທ່ານຕ້ອງການຮວມກັບ <xliff:g id="NAME">%s</xliff:g>:"</string>
     <string name="showAllContactsJoinItem" msgid="2189695051430392383">"ສະແດງລາຍຊື່ຜູ່ຕິດຕໍ່ທັງໝົດ"</string>
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"ລາຍຊື່ຜູ່ຕິດຕໍ່ທີ່ແນະນຳ"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"ລາຍຊື່ຜູ່ຕິດຕໍ່ທັງໝົດ"</string>
-    <string name="contactsJoinedMessage" msgid="7208148163607047389">"ຮວມລາຍຊື່ຜູ່ຕິດຕໍ່ແລ້ວ"</string>
+    <string name="contactsJoinedMessage" msgid="656936718666768589">"ລວມ​ລາຍ​ຊື່​ເຂົ້າ​ກັນ​ແລ້ວ"</string>
+    <string name="contacts_deleted_toast" msgid="286851430992788215">"ລຶບ​ລາຍ​ຊື່​ແລ້ວ"</string>
     <string name="menu_set_ring_tone" msgid="8728345772068064946">"ຕັ້ງສຽງຣິງໂທນ"</string>
     <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"ໂອນທຸກສາຍໄປຂໍ້ຄວາມສຽງ"</string>
     <string name="readOnlyContactWarning" msgid="7808825687289848259">"ທ່ານບໍ່ສາມາດລຶບລາຍຊື່ຜູ່ຕິດຕໍ່ຈາກບັນຊີທີ່ອ່ານໄດ້ເທົ່ານັ້ນ ແຕ່ທ່ານສາມາດເຊື່ອງມັນໄວ້ໃນລາຍຊື່ຜູ່ຕິດຕໍ່ຂອງທ່ານ."</string>
     <string name="readOnlyContactDeleteConfirmation" msgid="2137170726670196909">"ລາຍຊື່ຜູ່ຕິດຕໍ່ນີ້ມີຂໍ້ມູນຈາກຫຼາຍບັນຊີ. ຂໍ້ມູນຈາກບັນຊີທີ່ອ່ານໄດ້ເທົ່ານັ້ນ ຈະຖືກເຊື່ອງໄວ້ໃນລາຍຊື່ຂອງທ່ານ ແຕ່ບໍ່ຖືກລຶບອອກ."</string>
+    <string name="batch_merge_single_contact_warning" msgid="982585201970392110">"ທ່ານ​ຈຳ​ເປັນ​ຕ້ອງ​ມີ​ຢ່າງ​ໜ້ອຍ​ສອງ​ລາຍ​ຊື່​ເລືອກ​ໄວ້ ເພື່ອ​ດຳ​ເນີນ​ການ​ລວມ​ເຂົ້າ​ກັນ."</string>
+    <string name="batch_merge_confirmation" msgid="8551299480317422420">"ລາຍ​ຊື່​ທີ່​ເລືອກ​ໄວ້​ຈະ​ຖືກ​ເອົາ​ລວມ​ເຂົ້າ​ກັນ​ເປັນ​ລາຍ​ຊື່​ຕິດ​ຕໍ່​ດຽວ."</string>
+    <string name="batch_delete_confirmation" msgid="2564172328268885394">"ລາຍ​ຊື່​ທີ່​ເລືອກ​ໄວ້​ຈະ​ຖືກ​ລຶບ."</string>
+    <string name="batch_delete_read_only_contact_confirmation" msgid="6614878716815412523">"ຂໍ້ມູນຈາກບັນຊີທີ່ອ່ານໄດ້ເທົ່ານັ້ນ ຈະຖືກເຊື່ອງໄວ້ໃນລາຍຊື່ຂອງທ່ານ, ແຕ່ບໍ່ຖືກລຶບອອກ."</string>
+    <string name="batch_delete_multiple_accounts_confirmation" msgid="5189722181586680185">"ລາຍຊື່ເຫຼົ່ານີ້ມີຂໍ້ມູນຈາກຫຼາຍບັນຊີ. ຂໍ້ມູນຈາກບັນຊີທີ່ອ່ານໄດ້ເທົ່ານັ້ນ ຈະຖືກເຊື່ອງໄວ້ໃນລາຍຊື່ຂອງທ່ານ ແຕ່ບໍ່ຖືກລຶບອອກ."</string>
     <string name="multipleContactDeleteConfirmation" msgid="938900978442960800">"ການລຶບລາຍຊື່ຜູ່ຕິດຕໍ່ນີ້ຈະລຶບຂໍ້ມູນຈາກຫຼາຍບັນຊີ."</string>
     <string name="deleteConfirmation" msgid="811706994761610640">"ລາຍຊື່ຜູ່ຕິດຕໍ່ນີ້ຈະຖືກລຶບອອກ."</string>
     <string name="menu_discard" msgid="6854657936970228164">"ຍົກເລີກການແກ້ໄຂ"</string>
@@ -94,20 +101,20 @@
     <string name="contactSavedErrorToast" msgid="3207250533172944892">"ບໍ່ສາມາດບັນທຶກການແກ້ໄຂລາຍຊື່ຜູ່ຕິດຕໍ່ໄດ້."</string>
     <string name="groupSavedToast" msgid="1168756874239833756">"ບັນທຶກກຸ່ມແລ້ວ."</string>
     <string name="groupSavedErrorToast" msgid="7984466936615304740">"ບໍ່ສາມາດບັນທຶກການແກ້ໄຂກຸ່ມໄດ້."</string>
-  <plurals name="listTotalPhoneContacts">
-    <item quantity="one" msgid="3015357862286673986">"1 ລາຍຊື່ຜູ່ຕິດຕໍ່ທີ່ມີເບີໂທລະສັບ"</item>
-    <item quantity="other" msgid="3299954047880968205">"<xliff:g id="COUNT">%d</xliff:g> ລາຍຊື່ຜູ່ຕິດຕໍ່ທີ່ມີເບີໂທລະສັບ"</item>
-  </plurals>
+    <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ລາຍຊື່ພ້ອມເບີໂທລະສັບ</item>
+      <item quantity="one">ລາຍຊື່ພ້ອມເບີໂທລະສັບ</item>
+    </plurals>
     <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"ບໍ່ມີລາຍຊື່ທີ່ມີເບີໂທລະສັບ"</string>
-  <plurals name="listFoundAllContacts">
-    <item quantity="one" msgid="5517063038754171134">"ພົບ 1"</item>
-    <item quantity="other" msgid="3852668542926965042">"ພົບ <xliff:g id="COUNT">%d</xliff:g>"</item>
-  </plurals>
+    <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ພົບແລ້ວ</item>
+      <item quantity="one">1 ພົບແລ້ວ</item>
+    </plurals>
     <string name="listFoundAllContactsZero" msgid="922980883593159444">"ບໍ່ມີລາຍຊື່ຜູ່ຕິດຕໍ່"</string>
-  <plurals name="searchFoundContacts">
-    <item quantity="one" msgid="4826918429708286628">"ພົບ 1 ລາຍຊື່"</item>
-    <item quantity="other" msgid="7988132539476575389">"ພົບ <xliff:g id="COUNT">%d</xliff:g>"</item>
-  </plurals>
+    <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ພົບແລ້ວ</item>
+      <item quantity="one">1 ພົບແລ້ວ</item>
+    </plurals>
     <string name="all_contacts_tab_label" msgid="6250372293594147703">"ລາຍ​ຊື່​ຜູ່​ຕິດ​ຕໍ່​ທັງ​ໝົດ"</string>
     <string name="favorites_tab_label" msgid="1524869648904016414">"​ລາຍ​ການ​ທີ່​ມັກ"</string>
     <string name="callBack" msgid="5498224409038809224">"ໂທກັບ"</string>
@@ -144,9 +151,6 @@
     <string name="pick_new_photo" msgid="9122450996263688237">"ເລືອກຮູບໃໝ່"</string>
     <string name="locale_change_in_progress" msgid="7583992153091537467">"ລາຍຊື່ຜູ່ຕິດຕໍ່ກຳລັງຖືກອັບເດດຕາມການປ່ຽນແປງຂອງພາສາ."</string>
     <string name="upgrade_in_progress" msgid="474511436863451061">"ລາຍການລາຍຊື່ຜູ່ຕິດຕໍ່ກຳລັງຖືກອັບເດດ."</string>
-    <string name="upgrade_out_of_memory" msgid="1209994418877625940">"ລາຍຊື່ຜູ່ຕິດຕໍ່ກຳລັງຢູ່ໃນລະຫວ່າງການອັບເກຣດ. \n\nຂັ້ນຕອນການອັບເກຣດ ຈະໃຊ້ບ່ອນຈັດເກັບຂໍ້ມູນພາຍໃນ <xliff:g id="SIZE_IN_MEGABYTES">%s</xliff:g> MB.\n\nກະລຸນາເລືອກໂຕເລືອກໃດນຶ່ງຕໍ່ໄປນີ້:"</string>
-    <string name="upgrade_out_of_memory_uninstall" msgid="1721798828992091432">"ຖອນການຕິດຕັ້ງບາງແອັບພລິເຄຊັນອອກ"</string>
-    <string name="upgrade_out_of_memory_retry" msgid="8431289830472724609">"ລອງອັບເກຣດອີກຄັ້ງ"</string>
     <string name="search_results_searching" msgid="3984833028938569930">"ກຳລັງຊອກຫາ..."</string>
     <string name="menu_display_selected" msgid="6470001164297969034">"ສະແດງສິ່ງທີ່ເລືອກ"</string>
     <string name="menu_display_all" msgid="8887488642609786198">"ສະແດງທັງໝົດ"</string>
@@ -160,10 +164,10 @@
     <string name="primary_photo" msgid="8517942231868516999">"ຮູບ​ຖ່າຍ​ຕົ້ນ​ຕໍ"</string>
     <string name="description_star" msgid="2605854427360036550">"ໝາຍດາວ"</string>
     <string name="edit_contact" msgid="7529281274005689512">"ແກ້ໄຂລາຍຊື່ຜູ່ຕິດຕໍ່"</string>
-  <plurals name="merge_info">
-    <item quantity="one" msgid="148365587896371969">"ຍັງບໍ່ຮວມເທື່ອ"</item>
-    <item quantity="other" msgid="425683718017380845">"ຮວມມາຈາກ <xliff:g id="COUNT">%0$d</xliff:g> ແຫລ່ງຂໍ້ມູນ"</item>
-  </plurals>
+    <plurals name="merge_info" formatted="false" msgid="2489323424994280962">
+      <item quantity="other">ລວມເຂົ້າກັນຈາກ <xliff:g id="COUNT">%0$d</xliff:g> ແຫຼ່ງແລ້ວ</item>
+      <item quantity="one">ບໍ່ລວມເຂົ້າກັນເທື່ອ</item>
+    </plurals>
     <string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"ຮວມລາຍຊື່ຜູ່ຕິດຕໍ່ນີ້ ກັບລາຍຊື່ຜູ່ຕິດຕໍ່ທີ່ເລືອກ?"</string>
     <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"ສະລັບໄປທີ່ການແກ້ໄຂລາຍຊື່ຜູ່ຕິດຕໍ່ທີ່ເລືອກ? ຂໍ້ມູນທີ່ທ່ານຂຽນມາຈະຖືກສຳເນົາໄວ້."</string>
     <string name="menu_copyContact" msgid="1573960845106822639">"ສຳເນົາໃສ່ລາຍຊື່ຜູ່ຕິດຕໍ່ຂອງຂ້ອຍ"</string>
@@ -172,7 +176,7 @@
     <string name="list_filter_custom" msgid="8910173055702057002">"ກຳນົດເອງ"</string>
     <string name="activity_title_settings" msgid="5464130076132770781">"ການຕັ້ງຄ່າ"</string>
     <string name="menu_settings" msgid="377929915873428211">"ການຕັ້ງຄ່າ"</string>
-    <string name="menu_help" msgid="5123887102216637725">"ຊ່ວຍເຫຼືອ"</string>
+    <string name="menu_help" msgid="1680178646764069976">"ຊ່ວຍ​ເຫຼືອ &amp; ຄຳ​ຕິ​ຊົມ"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"ໂຕເລືອກການສະແດງຜົນ"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="non_phone_caption" msgid="1541655052330027380">"ເບີໂທລະສັບ"</string>
@@ -188,19 +192,19 @@
     <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"ນຳເຂົ້າລາຍຊື່ຜູ່ຕິດຕໍ່"</string>
     <string name="create_group_dialog_title" msgid="6874527142828424475">"ສ້າງ​ກຸ່ມ​ໃໝ່"</string>
     <string name="create_group_item_label" msgid="4411981763169654825">"ສ້າງ​ກຸ່ມ​ໃໝ່"</string>
-  <plurals name="num_groups_in_account">
-    <item quantity="one" msgid="2944819210288517794">"1 ກຸ່ມ"</item>
-    <item quantity="other" msgid="1276758425904917367">"<xliff:g id="COUNT">%0$d</xliff:g> ກຸ່ມ"</item>
-  </plurals>
+    <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
+      <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> ກຸ່ມ</item>
+      <item quantity="one">1 ກຸ່ມ</item>
+    </plurals>
     <string name="delete_group_dialog_message" msgid="7586856514337560529">"ລຶບກຸ່ມ \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\"? (ລາຍຊື່ຜູ່ຕິດຕໍ່ຈະບໍ່ຖືກລຶບອອກ.)"</string>
-  <plurals name="num_contacts_in_group">
-    <item quantity="one" msgid="1352418549951013448">"<xliff:g id="COUNT_0">%1$d</xliff:g> ຄົນຈາກ <xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>"</item>
-    <item quantity="other" msgid="8146027769011086349">"<xliff:g id="COUNT_0">%1$d</xliff:g> ຄົນຈາກ <xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>"</item>
-  </plurals>
-  <plurals name="group_list_num_contacts_in_group">
-    <item quantity="one" msgid="3323065321661972446">"<xliff:g id="COUNT">%1$d</xliff:g> ຄົນ"</item>
-    <item quantity="other" msgid="6251996206137048525">"<xliff:g id="COUNT">%1$d</xliff:g> ຄົນ"</item>
-  </plurals>
+    <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> ຄົນຈາກ <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> ຄົນຈາກ <xliff:g id="ACCOUNT_TYPE_1">%2$s</xliff:g></item>
+    </plurals>
+    <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
+      <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> ຄົນ</item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> ຄົນ</item>
+    </plurals>
     <string name="toast_join_with_empty_contact" msgid="2238581529864542985">"ພິມຊື່ຂອງລາຍຊື່ຜູ່ຕິດຕໍ່ກ່ອນການຮວມກັບລາຍຊື່ອື່ນ."</string>
     <string name="copy_text" msgid="3257145021583508761">"ສຳເນົາໃສ່ຄລິບບອດ"</string>
     <string name="set_default" msgid="4417505153468300351">"ຕັ້ງຄ່າເລີ່ມຕົ້ນ"</string>
@@ -264,4 +268,5 @@
     <string name="content_description_recent_call" msgid="5183800406316723676">"ການ​ໂທຫຼ້າ​ສຸດ. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. ຄລິກ​ເພື່ອ​ໂທ​ກັບ"</string>
     <string name="message_from_you_prefix" msgid="7180706529908434482">"​ທ່ານ: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
     <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"Hangouts ເຮັດ​ວຽກ​ໄດ້​ດີ​ຂຶ້ນ ເມື່ອ​ທ່ານ​ປ້ອນ​ຕົວ​ລະ​ບຸ​ Hangouts ຂອງ​ບຸກ​ຄົນ​ໃສ່​ບ່ອນ​ໃສ່ອີເມວ ຫຼື​ບ່ອນ​ໃສ່​ໂທ​ລະ​ສັບ​ຂອງ​ທ່ານ."</string>
+    <string name="compact_editor_more_fields" msgid="2874181192382284115">"ຊ່ອງ​ເພີ່ມ​ເຕີມ"</string>
 </resources>
diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml
index 641b376..8408caf 100644
--- a/res/values-lt/strings.xml
+++ b/res/values-lt/strings.xml
@@ -46,6 +46,7 @@
     <string name="description_action_menu_add_star" msgid="3327186327234177456">"Pridėta prie mėgstamiausių"</string>
     <string name="menu_editContact" msgid="9042415603857662633">"Redaguoti"</string>
     <string name="menu_deleteContact" msgid="6788644058868189393">"Ištrinti"</string>
+    <string name="menu_change_photo" msgid="7769177631511496210">"Keisti nuotrauką"</string>
     <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Padėti pagrindiniame ekrane"</string>
     <string name="menu_call" msgid="3992595586042260618">"Skambinti adresatui"</string>
     <string name="menu_sendSMS" msgid="5535886767547006515">"Siųsti pranešimą adresatui"</string>
@@ -56,17 +57,23 @@
     <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Pridėti grupę"</string>
     <string name="splitConfirmation_title" msgid="633640935430370530">"Išskirti kontaktą?"</string>
     <string name="splitConfirmation" msgid="740190210499587175">"Šis kontaktas bus suskaidytas į kelis kontaktus."</string>
-    <string name="menu_joinAggregate" msgid="5027981918265667970">"Sujungti"</string>
+    <string name="menu_joinAggregate" msgid="4050157483569357666">"Sujungti"</string>
     <string name="titleJoinContactDataWith" msgid="7684875775798635354">"Jungti adresatus"</string>
     <string name="blurbJoinContactDataWith" msgid="8736488417422708236">"Pasirinkite kontaktą, kurį norite susieti su <xliff:g id="NAME">%s</xliff:g>:"</string>
     <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Rodyti visus adresatus"</string>
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Siūlomi adresatai"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Visi adresatai"</string>
-    <string name="contactsJoinedMessage" msgid="7208148163607047389">"Sujungti adresatai"</string>
+    <string name="contactsJoinedMessage" msgid="656936718666768589">"Kontaktai susieti"</string>
+    <string name="contacts_deleted_toast" msgid="286851430992788215">"Kontaktai ištrinti"</string>
     <string name="menu_set_ring_tone" msgid="8728345772068064946">"Nustat. sk. toną"</string>
     <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Visi skamb. į balso paštą"</string>
     <string name="readOnlyContactWarning" msgid="7808825687289848259">"Negalite ištrinti kontaktų iš tik skaitomų paskyrų, bet galite paslėpti juos savo kontaktų sąrašuose."</string>
     <string name="readOnlyContactDeleteConfirmation" msgid="2137170726670196909">"Šiam adresatui priskirta kelių paskyrų informacija. Tik skaitomų paskyrų informacija bus paslėpta adresatų sąrašuose; ji nebus ištrinta."</string>
+    <string name="batch_merge_single_contact_warning" msgid="982585201970392110">"Reikia pasirinkti bent du kontaktus, kad būtų galima atlikti sujungimo veiksmą."</string>
+    <string name="batch_merge_confirmation" msgid="8551299480317422420">"Pasirinkti kontaktai bus sujungti į vieną kontaktą."</string>
+    <string name="batch_delete_confirmation" msgid="2564172328268885394">"Pasirinkti kontaktai bus ištrinti."</string>
+    <string name="batch_delete_read_only_contact_confirmation" msgid="6614878716815412523">"Tik skaitomų paskyrų informacija kontaktų sąrašuose bus paslėpta, bet neištrinta."</string>
+    <string name="batch_delete_multiple_accounts_confirmation" msgid="5189722181586680185">"Šiems kontaktams priskirta kelių paskyrų informacija. Tik skaitomų paskyrų informacija kontaktų sąrašuose bus paslėpta, bet neištrinta."</string>
     <string name="multipleContactDeleteConfirmation" msgid="938900978442960800">"Ištrynus šią informaciją, bus ištrinta kelių paskyrų informacija."</string>
     <string name="deleteConfirmation" msgid="811706994761610640">"Šis adresatas bus ištrintas."</string>
     <string name="menu_discard" msgid="6854657936970228164">"Atmesti pakeitimus"</string>
@@ -94,20 +101,26 @@
     <string name="contactSavedErrorToast" msgid="3207250533172944892">"Nepavyko išsaugoti kontakto pakeitimų."</string>
     <string name="groupSavedToast" msgid="1168756874239833756">"Grupė išsaugota."</string>
     <string name="groupSavedErrorToast" msgid="7984466936615304740">"Nepavyko išsaugoti grupės pakeitimų."</string>
-  <plurals name="listTotalPhoneContacts">
-    <item quantity="one" msgid="3015357862286673986">"1 kontaktas su telefono numeriu"</item>
-    <item quantity="other" msgid="3299954047880968205">"Kontaktai (-ų) su telefonų numeriais: <xliff:g id="COUNT">%d</xliff:g>"</item>
-  </plurals>
+    <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
+      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> kontaktas su telefonų numeriais</item>
+      <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> kontaktai su telefonų numeriais</item>
+      <item quantity="many"><xliff:g id="COUNT">%d</xliff:g> kontakto su telefonų numeriais</item>
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> kontaktų su telefonų numeriais</item>
+    </plurals>
     <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"Nėra kontaktų su telefonų numeriais"</string>
-  <plurals name="listFoundAllContacts">
-    <item quantity="one" msgid="5517063038754171134">"rastas 1"</item>
-    <item quantity="other" msgid="3852668542926965042">"Rasta <xliff:g id="COUNT">%d</xliff:g>"</item>
-  </plurals>
+    <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
+      <item quantity="one">Rastas <xliff:g id="COUNT">%d</xliff:g> kontaktas</item>
+      <item quantity="few">Rasti <xliff:g id="COUNT">%d</xliff:g> kontaktai</item>
+      <item quantity="many">Rasta <xliff:g id="COUNT">%d</xliff:g> kontakto</item>
+      <item quantity="other">Rasta <xliff:g id="COUNT">%d</xliff:g> kontaktų</item>
+    </plurals>
     <string name="listFoundAllContactsZero" msgid="922980883593159444">"Kontaktų nėra"</string>
-  <plurals name="searchFoundContacts">
-    <item quantity="one" msgid="4826918429708286628">"rastas 1"</item>
-    <item quantity="other" msgid="7988132539476575389">"Rasta <xliff:g id="COUNT">%d</xliff:g>"</item>
-  </plurals>
+    <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
+      <item quantity="one">Rastas <xliff:g id="COUNT">%d</xliff:g> kontaktas</item>
+      <item quantity="few">Rasti <xliff:g id="COUNT">%d</xliff:g> kontaktai</item>
+      <item quantity="many">Rasta <xliff:g id="COUNT">%d</xliff:g> kontakto</item>
+      <item quantity="other">Rasta <xliff:g id="COUNT">%d</xliff:g> kontaktų</item>
+    </plurals>
     <string name="all_contacts_tab_label" msgid="6250372293594147703">"Visi kontaktai"</string>
     <string name="favorites_tab_label" msgid="1524869648904016414">"Mėgstamiausi"</string>
     <string name="callBack" msgid="5498224409038809224">"Perskambinti"</string>
@@ -144,9 +157,6 @@
     <string name="pick_new_photo" msgid="9122450996263688237">"Pasirinkti naują nuotrauką"</string>
     <string name="locale_change_in_progress" msgid="7583992153091537467">"Kontaktų sąrašas yra atnaujinamas, kad atspindėtų kalbos pakeitimą."</string>
     <string name="upgrade_in_progress" msgid="474511436863451061">"Atnaujinamas kontaktų sąrašas."</string>
-    <string name="upgrade_out_of_memory" msgid="1209994418877625940">"Kontaktai naujovinami. \n\nNaujovinimo procesui reikalinga maždaug <xliff:g id="SIZE_IN_MEGABYTES">%s</xliff:g> MB vidinės atminties.\n\nPasirinkite vieną iš šių parinkčių:"</string>
-    <string name="upgrade_out_of_memory_uninstall" msgid="1721798828992091432">"Pašalinti kai kurias programas"</string>
-    <string name="upgrade_out_of_memory_retry" msgid="8431289830472724609">"Bandyti naujovinti iš naujo"</string>
     <string name="search_results_searching" msgid="3984833028938569930">"Ieškoma…"</string>
     <string name="menu_display_selected" msgid="6470001164297969034">"Rodyti pasirinktus"</string>
     <string name="menu_display_all" msgid="8887488642609786198">"Rodyti visus"</string>
@@ -160,10 +170,12 @@
     <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>
-  <plurals name="merge_info">
-    <item quantity="one" msgid="148365587896371969">"nesujungta"</item>
-    <item quantity="other" msgid="425683718017380845">"sujungta iš <xliff:g id="COUNT">%0$d</xliff:g> šaltinių (-io)"</item>
-  </plurals>
+    <plurals name="merge_info" formatted="false" msgid="2489323424994280962">
+      <item quantity="one">sujungta iš <xliff:g id="COUNT">%0$d</xliff:g> šaltinio</item>
+      <item quantity="few">sujungta iš <xliff:g id="COUNT">%0$d</xliff:g> šaltinių</item>
+      <item quantity="many">sujungta iš <xliff:g id="COUNT">%0$d</xliff:g> šaltinio</item>
+      <item quantity="other">sujungta iš <xliff:g id="COUNT">%0$d</xliff:g> šaltinių</item>
+    </plurals>
     <string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"Sujungti dabartinį kontaktą su pasirinktu?"</string>
     <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Perjungti į pasirinkto kontakto redagavimą? Iki šiol įvesta informacija bus nukopijuota."</string>
     <string name="menu_copyContact" msgid="1573960845106822639">"Kopijuoti į „Mano kontaktus“"</string>
@@ -172,7 +184,7 @@
     <string name="list_filter_custom" msgid="8910173055702057002">"Priskirtas"</string>
     <string name="activity_title_settings" msgid="5464130076132770781">"Nustatymai"</string>
     <string name="menu_settings" msgid="377929915873428211">"Nustatymai"</string>
-    <string name="menu_help" msgid="5123887102216637725">"Pagalba"</string>
+    <string name="menu_help" msgid="1680178646764069976">"Pagalba ir atsiliepimai"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"Pateikties parinktys"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"„<xliff:g id="COMPANY_0">%2$s</xliff:g>“, „<xliff:g id="COMPANY_1">%1$s</xliff:g>“"</string>
     <string name="non_phone_caption" msgid="1541655052330027380">"Telefono numeris"</string>
@@ -188,19 +200,25 @@
     <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Importuoti kontaktus"</string>
     <string name="create_group_dialog_title" msgid="6874527142828424475">"Sukurti naują grupę"</string>
     <string name="create_group_item_label" msgid="4411981763169654825">"Sukurti naują grupę"</string>
-  <plurals name="num_groups_in_account">
-    <item quantity="one" msgid="2944819210288517794">"1 grupė"</item>
-    <item quantity="other" msgid="1276758425904917367">"Grupių: <xliff:g id="COUNT">%0$d</xliff:g>"</item>
-  </plurals>
+    <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
+      <item quantity="one"><xliff:g id="COUNT">%0$d</xliff:g> grupė</item>
+      <item quantity="few"><xliff:g id="COUNT">%0$d</xliff:g> grupės</item>
+      <item quantity="many"><xliff:g id="COUNT">%0$d</xliff:g> grupės</item>
+      <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> grupių</item>
+    </plurals>
     <string name="delete_group_dialog_message" msgid="7586856514337560529">"Ištrinti grupę „<xliff:g id="GROUP_LABEL">%1$s</xliff:g>“? (Kontaktai nebus ištrinti.)"</string>
-  <plurals name="num_contacts_in_group">
-    <item quantity="one" msgid="1352418549951013448">"<xliff:g id="COUNT_0">%1$d</xliff:g> žm. iš <xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>"</item>
-    <item quantity="other" msgid="8146027769011086349">"<xliff:g id="COUNT_0">%1$d</xliff:g> žm. iš <xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>"</item>
-  </plurals>
-  <plurals name="group_list_num_contacts_in_group">
-    <item quantity="one" msgid="3323065321661972446">"<xliff:g id="COUNT">%1$d</xliff:g> žm."</item>
-    <item quantity="other" msgid="6251996206137048525">"<xliff:g id="COUNT">%1$d</xliff:g> žm."</item>
-  </plurals>
+    <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
+      <item quantity="one"><xliff:g id="COUNT_2">%1$d</xliff:g> žmogus iš <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
+      <item quantity="few"><xliff:g id="COUNT_2">%1$d</xliff:g> žmonės iš <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
+      <item quantity="many"><xliff:g id="COUNT_2">%1$d</xliff:g> žmogaus iš <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> žmonių iš <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
+    </plurals>
+    <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
+      <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> žmogus</item>
+      <item quantity="few"><xliff:g id="COUNT_1">%1$d</xliff:g> žmonės</item>
+      <item quantity="many"><xliff:g id="COUNT_1">%1$d</xliff:g> žmogaus</item>
+      <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> žmonių</item>
+    </plurals>
     <string name="toast_join_with_empty_contact" msgid="2238581529864542985">"Įveskite kontaktinio asmens vardą prieš susiedami jį su kitu."</string>
     <string name="copy_text" msgid="3257145021583508761">"Kopijuoti į iškarpinę"</string>
     <string name="set_default" msgid="4417505153468300351">"Nustatyti numatytuosius nustatymus"</string>
@@ -264,4 +282,5 @@
     <string name="content_description_recent_call" msgid="5183800406316723676">"Neseniai skambino. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. Spustelėkite, kad atskambintumėte."</string>
     <string name="message_from_you_prefix" msgid="7180706529908434482">"Jūs: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
     <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"„Hangout“ veikia geriau įvedus asmens „Hangout“ identifikatorių el. pašto ar telefono numerio lauke."</string>
+    <string name="compact_editor_more_fields" msgid="2874181192382284115">"Daugiau laukų"</string>
 </resources>
diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml
index be93046..a71b17e 100644
--- a/res/values-lv/strings.xml
+++ b/res/values-lv/strings.xml
@@ -46,6 +46,7 @@
     <string name="description_action_menu_add_star" msgid="3327186327234177456">"Pievienots izlasei"</string>
     <string name="menu_editContact" msgid="9042415603857662633">"Rediģēt"</string>
     <string name="menu_deleteContact" msgid="6788644058868189393">"Dzēst"</string>
+    <string name="menu_change_photo" msgid="7769177631511496210">"Mainīt fotoattēlu"</string>
     <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Novietot sākuma ekrānā"</string>
     <string name="menu_call" msgid="3992595586042260618">"Zvanīt kontaktpersonai"</string>
     <string name="menu_sendSMS" msgid="5535886767547006515">"Sūtīt īsziņu kontaktpersonai"</string>
@@ -56,17 +57,23 @@
     <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Pievienot grupu"</string>
     <string name="splitConfirmation_title" msgid="633640935430370530">"Atdalīt kontaktp.?"</string>
     <string name="splitConfirmation" msgid="740190210499587175">"Šī kontaktpersona tiks sadalīta vairākās kontaktpersonās."</string>
-    <string name="menu_joinAggregate" msgid="5027981918265667970">"Apvienot"</string>
+    <string name="menu_joinAggregate" msgid="4050157483569357666">"Apvienot"</string>
     <string name="titleJoinContactDataWith" msgid="7684875775798635354">"Kontaktpersonu apvienošana"</string>
     <string name="blurbJoinContactDataWith" msgid="8736488417422708236">"Izvēlieties kontaktpersonu, kuru vēlaties apvienot ar kontaktpersonu <xliff:g id="NAME">%s</xliff:g>:"</string>
     <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Rādīt visas kontaktpersonas"</string>
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Ieteiktās kontaktpersonas"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Visas kontaktpersonas"</string>
-    <string name="contactsJoinedMessage" msgid="7208148163607047389">"Kontaktpersonas ir apvienotas."</string>
+    <string name="contactsJoinedMessage" msgid="656936718666768589">"Kontaktpersonas ir apvienotas."</string>
+    <string name="contacts_deleted_toast" msgid="286851430992788215">"Kontaktpersonas ir dzēstas."</string>
     <string name="menu_set_ring_tone" msgid="8728345772068064946">"Iestatīt zv. signālu"</string>
     <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Visi zvani uz balss pastu"</string>
     <string name="readOnlyContactWarning" msgid="7808825687289848259">"Jūs nevarat dzēst kontaktpersonas no tikai lasāmiem kontiem, taču varat tās slēpt kontaktpersonu sarakstos."</string>
     <string name="readOnlyContactDeleteConfirmation" msgid="2137170726670196909">"Šī kontaktpersona satur informāciju no vairākiem kontiem. Informācija no tikai lasāmiem kontiem jūsu kontaktpersonu sarakstā tiks slēpta, nevis dzēsta."</string>
+    <string name="batch_merge_single_contact_warning" msgid="982585201970392110">"Lai veiktu apvienošanu, ir jāatlasa vismaz divas kontaktpersonas."</string>
+    <string name="batch_merge_confirmation" msgid="8551299480317422420">"Atlasītās kontaktpersonas tiks apvienotas vienā."</string>
+    <string name="batch_delete_confirmation" msgid="2564172328268885394">"Atlasītās kontaktpersonas tiks dzēstas."</string>
+    <string name="batch_delete_read_only_contact_confirmation" msgid="6614878716815412523">"Informācija no tikai lasāmiem kontiem jūsu kontaktpersonu sarakstā tiks slēpta, nevis dzēsta."</string>
+    <string name="batch_delete_multiple_accounts_confirmation" msgid="5189722181586680185">"Šis kontaktpersonu saraksts ietver informāciju no vairākiem kontiem. Informācija no tikai lasāmiem kontiem jūsu kontaktpersonu sarakstā tiks slēpta, nevis dzēsta."</string>
     <string name="multipleContactDeleteConfirmation" msgid="938900978442960800">"Dzēšot šo kontaktpersonu, tiks dzēsta informācija no vairākiem kontiem."</string>
     <string name="deleteConfirmation" msgid="811706994761610640">"Šī kontaktpersona tiks dzēsta."</string>
     <string name="menu_discard" msgid="6854657936970228164">"Atmest izmaiņas"</string>
@@ -94,20 +101,23 @@
     <string name="contactSavedErrorToast" msgid="3207250533172944892">"Nevarēja saglabāt kontaktpersonas datu izmaiņas."</string>
     <string name="groupSavedToast" msgid="1168756874239833756">"Grupa ir saglabāta."</string>
     <string name="groupSavedErrorToast" msgid="7984466936615304740">"Nevarēja saglabāt grupas izmaiņas."</string>
-  <plurals name="listTotalPhoneContacts">
-    <item quantity="one" msgid="3015357862286673986">"1 kontaktpersona ar tālruņa numuru"</item>
-    <item quantity="other" msgid="3299954047880968205">"<xliff:g id="COUNT">%d</xliff:g> kontaktpersonas ar tālruņa numuriem"</item>
-  </plurals>
+    <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
+      <item quantity="zero"><xliff:g id="COUNT">%d</xliff:g> kontaktpersonas ar tālruņa numuriem</item>
+      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> kontaktpersona ar tālruņa numuriem</item>
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> kontaktpersonas ar tālruņa numuriem</item>
+    </plurals>
     <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"Nav nevienas kontaktpersonas ar tālruņa numuru"</string>
-  <plurals name="listFoundAllContacts">
-    <item quantity="one" msgid="5517063038754171134">"Atrasta 1"</item>
-    <item quantity="other" msgid="3852668542926965042">"Atrastas <xliff:g id="COUNT">%d</xliff:g>"</item>
-  </plurals>
+    <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
+      <item quantity="zero">Atrastas <xliff:g id="COUNT">%d</xliff:g> kontaktpersonas</item>
+      <item quantity="one">Atrasta <xliff:g id="COUNT">%d</xliff:g> kontaktpersona</item>
+      <item quantity="other">Atrastas <xliff:g id="COUNT">%d</xliff:g> kontaktpersonas</item>
+    </plurals>
     <string name="listFoundAllContactsZero" msgid="922980883593159444">"Nav kontaktpersonu"</string>
-  <plurals name="searchFoundContacts">
-    <item quantity="one" msgid="4826918429708286628">"Atrasta 1"</item>
-    <item quantity="other" msgid="7988132539476575389">"Atrastas <xliff:g id="COUNT">%d</xliff:g>"</item>
-  </plurals>
+    <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
+      <item quantity="zero">Atrastas <xliff:g id="COUNT">%d</xliff:g> kontaktpersonas</item>
+      <item quantity="one">Atrasta <xliff:g id="COUNT">%d</xliff:g> kontaktpersona</item>
+      <item quantity="other">Atrastas <xliff:g id="COUNT">%d</xliff:g> kontaktpersonas</item>
+    </plurals>
     <string name="all_contacts_tab_label" msgid="6250372293594147703">"Visas"</string>
     <string name="favorites_tab_label" msgid="1524869648904016414">"Izlase"</string>
     <string name="callBack" msgid="5498224409038809224">"Atzvanīt"</string>
@@ -144,9 +154,6 @@
     <string name="pick_new_photo" msgid="9122450996263688237">"Atlasīt jaunu fotoattēlu"</string>
     <string name="locale_change_in_progress" msgid="7583992153091537467">"Kontaktpersonu saraksts tiek atjaunināts, lai atspoguļotu valodas maiņu."</string>
     <string name="upgrade_in_progress" msgid="474511436863451061">"Kontaktpersonu saraksts tiek atjaunināts."</string>
-    <string name="upgrade_out_of_memory" msgid="1209994418877625940">"Notiek kontaktpersonu jaunināšana.\n\nJaunināšanas procesam ir nepieciešami aptuveni <xliff:g id="SIZE_IN_MEGABYTES">%s</xliff:g> MB iekšējās atmiņas.\n\nIzvēlieties vienu no tālāk norādītajām opcijām."</string>
-    <string name="upgrade_out_of_memory_uninstall" msgid="1721798828992091432">"Atinstalēt dažas lietojumprogrammas"</string>
-    <string name="upgrade_out_of_memory_retry" msgid="8431289830472724609">"Mēģināt jaunināt vēlreiz"</string>
     <string name="search_results_searching" msgid="3984833028938569930">"Notiek meklēšana..."</string>
     <string name="menu_display_selected" msgid="6470001164297969034">"Rādīt atlasi"</string>
     <string name="menu_display_all" msgid="8887488642609786198">"Rādīt visus"</string>
@@ -160,10 +167,11 @@
     <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>
-  <plurals name="merge_info">
-    <item quantity="one" msgid="148365587896371969">"nav sapludinātas"</item>
-    <item quantity="other" msgid="425683718017380845">"sapludināts no <xliff:g id="COUNT">%0$d</xliff:g> avotiem"</item>
-  </plurals>
+    <plurals name="merge_info" formatted="false" msgid="2489323424994280962">
+      <item quantity="zero">apvienotas no <xliff:g id="COUNT">%0$d</xliff:g> avotiem</item>
+      <item quantity="one">apvienotas no <xliff:g id="COUNT">%0$d</xliff:g> avota</item>
+      <item quantity="other">apvienotas no <xliff:g id="COUNT">%0$d</xliff:g> avotiem</item>
+    </plurals>
     <string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"Vai savienot pašreizējo saturu ar atlasīto kontaktpersonu?"</string>
     <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Vai pāriet uz atlasītās kontaktpersonas rediģēšanu? Līdz šim ievadītā informācija tiks kopēta."</string>
     <string name="menu_copyContact" msgid="1573960845106822639">"Kopēt uz manām kontaktpersonām"</string>
@@ -172,7 +180,7 @@
     <string name="list_filter_custom" msgid="8910173055702057002">"Pielāgotas"</string>
     <string name="activity_title_settings" msgid="5464130076132770781">"Iestatījumi"</string>
     <string name="menu_settings" msgid="377929915873428211">"Iestatījumi"</string>
-    <string name="menu_help" msgid="5123887102216637725">"Palīdzība"</string>
+    <string name="menu_help" msgid="1680178646764069976">"Palīdzība un atsauksmes"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"Attēlošanas opcijas"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="non_phone_caption" msgid="1541655052330027380">"Tālruņa numurs"</string>
@@ -188,19 +196,22 @@
     <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Importēt kontaktpersonas"</string>
     <string name="create_group_dialog_title" msgid="6874527142828424475">"Jaunas grupas izveide"</string>
     <string name="create_group_item_label" msgid="4411981763169654825">"Izveidot jaunu grupu"</string>
-  <plurals name="num_groups_in_account">
-    <item quantity="one" msgid="2944819210288517794">"1 grupa"</item>
-    <item quantity="other" msgid="1276758425904917367">"<xliff:g id="COUNT">%0$d</xliff:g> grupas"</item>
-  </plurals>
+    <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
+      <item quantity="zero"><xliff:g id="COUNT">%0$d</xliff:g> grupu</item>
+      <item quantity="one"><xliff:g id="COUNT">%0$d</xliff:g> grupa</item>
+      <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> grupas</item>
+    </plurals>
     <string name="delete_group_dialog_message" msgid="7586856514337560529">"Vai dzēst grupu <xliff:g id="GROUP_LABEL">%1$s</xliff:g>? (Kontaktpersonas netiks dzēstas.)"</string>
-  <plurals name="num_contacts_in_group">
-    <item quantity="one" msgid="1352418549951013448">"<xliff:g id="COUNT_0">%1$d</xliff:g> persona(-as) grupā <xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>"</item>
-    <item quantity="other" msgid="8146027769011086349">"<xliff:g id="COUNT_0">%1$d</xliff:g> persona(-as) grupā <xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>"</item>
-  </plurals>
-  <plurals name="group_list_num_contacts_in_group">
-    <item quantity="one" msgid="3323065321661972446">"<xliff:g id="COUNT">%1$d</xliff:g> persona(-as)"</item>
-    <item quantity="other" msgid="6251996206137048525">"<xliff:g id="COUNT">%1$d</xliff:g> persona(-as)"</item>
-  </plurals>
+    <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
+      <item quantity="zero"><xliff:g id="COUNT_2">%1$d</xliff:g> personu grupā <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
+      <item quantity="one"><xliff:g id="COUNT_2">%1$d</xliff:g> persona grupā <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> personas grupā <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
+    </plurals>
+    <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
+      <item quantity="zero"><xliff:g id="COUNT_1">%1$d</xliff:g> personu</item>
+      <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> persona</item>
+      <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> personas</item>
+    </plurals>
     <string name="toast_join_with_empty_contact" msgid="2238581529864542985">"Ievadiet kontaktpersonas vārdu, pirms apvienojat to ar citu kontaktpersonu."</string>
     <string name="copy_text" msgid="3257145021583508761">"Kopēt starpliktuvē"</string>
     <string name="set_default" msgid="4417505153468300351">"Iestatīt kā noklusējumu"</string>
@@ -264,4 +275,5 @@
     <string name="content_description_recent_call" msgid="5183800406316723676">"Nesen saņemts zvans. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. Noklikšķiniet, lai atzvanītu."</string>
     <string name="message_from_you_prefix" msgid="7180706529908434482">"Jūs: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
     <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"Funkcija Hangouts darbojas precīzāk, ja e-pasta vai tālruņa laukā ievadāt personas Hangouts identifikatoru."</string>
+    <string name="compact_editor_more_fields" msgid="2874181192382284115">"Vairāk lauku"</string>
 </resources>
diff --git a/res/values-mk-rMK/strings.xml b/res/values-mk-rMK/strings.xml
index acc75f1..2dcc80d 100644
--- a/res/values-mk-rMK/strings.xml
+++ b/res/values-mk-rMK/strings.xml
@@ -46,6 +46,7 @@
     <string name="description_action_menu_add_star" msgid="3327186327234177456">"Додадено во омилени"</string>
     <string name="menu_editContact" msgid="9042415603857662633">"Уреди"</string>
     <string name="menu_deleteContact" msgid="6788644058868189393">"Избриши"</string>
+    <string name="menu_change_photo" msgid="7769177631511496210">"Промени фотографија"</string>
     <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Постави на почетниот екран"</string>
     <string name="menu_call" msgid="3992595586042260618">"Повикај контакт"</string>
     <string name="menu_sendSMS" msgid="5535886767547006515">"Испрати текстуална порака на контакт"</string>
@@ -56,17 +57,23 @@
     <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Додај група"</string>
     <string name="splitConfirmation_title" msgid="633640935430370530">"Раздели контакт?"</string>
     <string name="splitConfirmation" msgid="740190210499587175">"Овој контакт ќе се раздели во повеќе контакти."</string>
-    <string name="menu_joinAggregate" msgid="5027981918265667970">"Поврзи"</string>
+    <string name="menu_joinAggregate" msgid="4050157483569357666">"Спои"</string>
     <string name="titleJoinContactDataWith" msgid="7684875775798635354">"Поврзи контакти"</string>
     <string name="blurbJoinContactDataWith" msgid="8736488417422708236">"Изберете го контактот што сакате да го поврзете со <xliff:g id="NAME">%s</xliff:g>:"</string>
     <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Прикажи ги сите контакти"</string>
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Препорачани контакти"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Сите контакти"</string>
-    <string name="contactsJoinedMessage" msgid="7208148163607047389">"Поврзани контакти"</string>
+    <string name="contactsJoinedMessage" msgid="656936718666768589">"Контактите се споени"</string>
+    <string name="contacts_deleted_toast" msgid="286851430992788215">"Контактите се избришани"</string>
     <string name="menu_set_ring_tone" msgid="8728345772068064946">"Подеси мелодија"</string>
     <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Сите повици кон говорна пошта"</string>
     <string name="readOnlyContactWarning" msgid="7808825687289848259">"Не можете да избришете контакти од сметки само за читање, но можете да ги сокриете во вашите списоци со контакти."</string>
     <string name="readOnlyContactDeleteConfirmation" msgid="2137170726670196909">"Овој контакт содржи информации од повеќе сметки. Информациите од сметки само за читање ќе бидат скриени во вашите списоци со контакти, а не избришани."</string>
+    <string name="batch_merge_single_contact_warning" msgid="982585201970392110">"Ви требаат најмалку два избрани контакти за да се изврши спојување."</string>
+    <string name="batch_merge_confirmation" msgid="8551299480317422420">"Избраните контакти ќе се спојат во еден контакт."</string>
+    <string name="batch_delete_confirmation" msgid="2564172328268885394">"Избраните контакти ќе се избришат."</string>
+    <string name="batch_delete_read_only_contact_confirmation" msgid="6614878716815412523">"Информациите од сметките само за читање ќе се скријат во вашите списоци со контакти, нема да се избришат."</string>
+    <string name="batch_delete_multiple_accounts_confirmation" msgid="5189722181586680185">"Овие контакти содржат информации од повеќе сметки. Информациите од сметките само за читање ќе се скријат во вашите списоци со контакти, нема да се избришат."</string>
     <string name="multipleContactDeleteConfirmation" msgid="938900978442960800">"Со бришење на овој контакт ќе се избришат информации од повеќе сметки."</string>
     <string name="deleteConfirmation" msgid="811706994761610640">"Овој контакт ќе се избрише."</string>
     <string name="menu_discard" msgid="6854657936970228164">"Отфрли ги промените"</string>
@@ -94,20 +101,20 @@
     <string name="contactSavedErrorToast" msgid="3207250533172944892">"Не можеа да се зачуваат промените на контактот."</string>
     <string name="groupSavedToast" msgid="1168756874239833756">"Групата е зачувана."</string>
     <string name="groupSavedErrorToast" msgid="7984466936615304740">"Не можеа да се зачуваат промените на групата."</string>
-  <plurals name="listTotalPhoneContacts">
-    <item quantity="one" msgid="3015357862286673986">"1 контакт со телефонски број"</item>
-    <item quantity="other" msgid="3299954047880968205">"<xliff:g id="COUNT">%d</xliff:g> контакти со телефонски броеви"</item>
-  </plurals>
+    <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
+      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> контакт со телефонски број</item>
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> контакти со телефонски броеви</item>
+    </plurals>
     <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"Нема контакти со телефонски броеви"</string>
-  <plurals name="listFoundAllContacts">
-    <item quantity="one" msgid="5517063038754171134">"1 пронајден"</item>
-    <item quantity="other" msgid="3852668542926965042">"<xliff:g id="COUNT">%d</xliff:g> пронајдени"</item>
-  </plurals>
+    <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
+      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> пронајден</item>
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> пронајдени</item>
+    </plurals>
     <string name="listFoundAllContactsZero" msgid="922980883593159444">"Нема контакти"</string>
-  <plurals name="searchFoundContacts">
-    <item quantity="one" msgid="4826918429708286628">"1 пронајден"</item>
-    <item quantity="other" msgid="7988132539476575389">"<xliff:g id="COUNT">%d</xliff:g> пронајдени"</item>
-  </plurals>
+    <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
+      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> пронајден</item>
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> пронајдени</item>
+    </plurals>
     <string name="all_contacts_tab_label" msgid="6250372293594147703">"Сите контакти"</string>
     <string name="favorites_tab_label" msgid="1524869648904016414">"Омилени"</string>
     <string name="callBack" msgid="5498224409038809224">"Повикај назад"</string>
@@ -144,9 +151,6 @@
     <string name="pick_new_photo" msgid="9122450996263688237">"Избери нова фотографија"</string>
     <string name="locale_change_in_progress" msgid="7583992153091537467">"Списокот со контакти се ажурира за да ја одрази промената на јазикот."</string>
     <string name="upgrade_in_progress" msgid="474511436863451061">"Списокот со контакти се ажурира."</string>
-    <string name="upgrade_out_of_memory" msgid="1209994418877625940">"Контактите се во фаза на ажурирање.\n\n За процесот на ажурирање се потребни околу <xliff:g id="SIZE_IN_MEGABYTES">%s</xliff:g> MB внатрешна меморија.\n\nИзберете една од следниве опции:"</string>
-    <string name="upgrade_out_of_memory_uninstall" msgid="1721798828992091432">"Деинсталирај некои апликации"</string>
-    <string name="upgrade_out_of_memory_retry" msgid="8431289830472724609">"Обиди се повторно да се ажурира"</string>
     <string name="search_results_searching" msgid="3984833028938569930">"Се пребарува..."</string>
     <string name="menu_display_selected" msgid="6470001164297969034">"Прикажи ги избраните"</string>
     <string name="menu_display_all" msgid="8887488642609786198">"Прикажи ги сите"</string>
@@ -160,10 +164,10 @@
     <string name="primary_photo" msgid="8517942231868516999">"Пр. фотографија"</string>
     <string name="description_star" msgid="2605854427360036550">"омилено"</string>
     <string name="edit_contact" msgid="7529281274005689512">"Уреди контакт"</string>
-  <plurals name="merge_info">
-    <item quantity="one" msgid="148365587896371969">"не се споени"</item>
-    <item quantity="other" msgid="425683718017380845">"споени од <xliff:g id="COUNT">%0$d</xliff:g> извори"</item>
-  </plurals>
+    <plurals name="merge_info" formatted="false" msgid="2489323424994280962">
+      <item quantity="one"> споен од <xliff:g id="COUNT">%0$d</xliff:g> извор</item>
+      <item quantity="other"> споени од <xliff:g id="COUNT">%0$d</xliff:g> извори</item>
+    </plurals>
     <string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"Да го поврзе тековниот контакт со избраниот контакт?"</string>
     <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Да се префрли на уредување на избраниот контакт? Информациите што ги внесовте досега ќе бидат копирани."</string>
     <string name="menu_copyContact" msgid="1573960845106822639">"Копирај во Мои контакти"</string>
@@ -172,7 +176,7 @@
     <string name="list_filter_custom" msgid="8910173055702057002">"Прилагодено"</string>
     <string name="activity_title_settings" msgid="5464130076132770781">"Подесувања"</string>
     <string name="menu_settings" msgid="377929915873428211">"Подесувања"</string>
-    <string name="menu_help" msgid="5123887102216637725">"Помош"</string>
+    <string name="menu_help" msgid="1680178646764069976">"Помош и повратни информации"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"Опции за екран"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="non_phone_caption" msgid="1541655052330027380">"Телефонски број"</string>
@@ -184,23 +188,23 @@
     <string name="social_widget_label" msgid="6378905543028924592">"Контакт"</string>
     <string name="social_widget_loading" msgid="5327336597364074608">"Се вчитува..."</string>
     <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Создај нов контакт"</string>
-    <string name="contacts_unavailable_add_account" msgid="7911101713860139754">"Пријави се на сметка"</string>
+    <string name="contacts_unavailable_add_account" msgid="7911101713860139754">"Најави се на сметка"</string>
     <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Увези контакти"</string>
     <string name="create_group_dialog_title" msgid="6874527142828424475">"Создај нова група"</string>
     <string name="create_group_item_label" msgid="4411981763169654825">"Создај нова група"</string>
-  <plurals name="num_groups_in_account">
-    <item quantity="one" msgid="2944819210288517794">"1 група"</item>
-    <item quantity="other" msgid="1276758425904917367">"<xliff:g id="COUNT">%0$d</xliff:g> групи"</item>
-  </plurals>
+    <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
+      <item quantity="one"><xliff:g id="COUNT">%0$d</xliff:g> група</item>
+      <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> групи</item>
+    </plurals>
     <string name="delete_group_dialog_message" msgid="7586856514337560529">"Избриши ја групата „<xliff:g id="GROUP_LABEL">%1$s</xliff:g>“? (Контактите нема да се избришат.)"</string>
-  <plurals name="num_contacts_in_group">
-    <item quantity="one" msgid="1352418549951013448">"<xliff:g id="COUNT_0">%1$d</xliff:g> лице од <xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>"</item>
-    <item quantity="other" msgid="8146027769011086349">"<xliff:g id="COUNT_0">%1$d</xliff:g> лица од <xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>"</item>
-  </plurals>
-  <plurals name="group_list_num_contacts_in_group">
-    <item quantity="one" msgid="3323065321661972446">"<xliff:g id="COUNT">%1$d</xliff:g> лице"</item>
-    <item quantity="other" msgid="6251996206137048525">"<xliff:g id="COUNT">%1$d</xliff:g> лица"</item>
-  </plurals>
+    <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
+      <item quantity="one"><xliff:g id="COUNT_2">%1$d</xliff:g> лице од <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> лица од <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
+    </plurals>
+    <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
+      <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> лице</item>
+      <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> лица</item>
+    </plurals>
     <string name="toast_join_with_empty_contact" msgid="2238581529864542985">"Впишете го името на контактот пред да го поврзете со друг."</string>
     <string name="copy_text" msgid="3257145021583508761">"Копирај во клип-табла"</string>
     <string name="set_default" msgid="4417505153468300351">"Подеси стандарден метод"</string>
@@ -264,4 +268,5 @@
     <string name="content_description_recent_call" msgid="5183800406316723676">"неодамнешен повик. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. кликни за да повикаш назад"</string>
     <string name="message_from_you_prefix" msgid="7180706529908434482">"Вие: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
     <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"Hangouts работат подобро кога во полето за е-пошта или за телефон ќе го внесете идентификаторот на Hangouts за лицето."</string>
+    <string name="compact_editor_more_fields" msgid="2874181192382284115">"Повеќе полиња"</string>
 </resources>
diff --git a/res/values-ml-rIN/strings.xml b/res/values-ml-rIN/strings.xml
index 81b2af7..0f9b6f0 100644
--- a/res/values-ml-rIN/strings.xml
+++ b/res/values-ml-rIN/strings.xml
@@ -46,6 +46,7 @@
     <string name="description_action_menu_add_star" msgid="3327186327234177456">"പ്രിയപ്പെട്ടവയിലേക്ക് ചേർത്തു"</string>
     <string name="menu_editContact" msgid="9042415603857662633">"എഡിറ്റുചെയ്യുക"</string>
     <string name="menu_deleteContact" msgid="6788644058868189393">"ഇല്ലാതാക്കുക"</string>
+    <string name="menu_change_photo" msgid="7769177631511496210">"ഫോട്ടോ മാറ്റുക"</string>
     <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"ഹോം സ്‌ക്രീനിൽ സ്ഥാപിക്കുക"</string>
     <string name="menu_call" msgid="3992595586042260618">"കോൺടാക്റ്റിനെ വിളിക്കുക"</string>
     <string name="menu_sendSMS" msgid="5535886767547006515">"കോൺടാക്റ്റിന് വാചകസന്ദേശമയയ്‌ക്കുക"</string>
@@ -56,17 +57,23 @@
     <string name="menu_new_group_action_bar" msgid="3520232877587377175">"ഗ്രൂപ്പ് ചേർക്കുക"</string>
     <string name="splitConfirmation_title" msgid="633640935430370530">"കോൺടാക്റ്റ് വിഭജിക്കണോ?"</string>
     <string name="splitConfirmation" msgid="740190210499587175">"ഈ കോൺടാക്റ്റ് ഒന്നിലധികം കോൺടാക്റ്റുകളായി വിഭജിക്കപ്പെടും."</string>
-    <string name="menu_joinAggregate" msgid="5027981918265667970">"ചേരുക"</string>
+    <string name="menu_joinAggregate" msgid="4050157483569357666">"ലയിപ്പിക്കുക"</string>
     <string name="titleJoinContactDataWith" msgid="7684875775798635354">"കോൺടാക്റ്റുകൾ ബന്ധിപ്പിക്കുക"</string>
     <string name="blurbJoinContactDataWith" msgid="8736488417422708236">"<xliff:g id="NAME">%s</xliff:g> എന്നതുമായി കൂട്ടിച്ചേർക്കേണ്ട കോൺടാക്റ്റ് തിരഞ്ഞെടുക്കുക:"</string>
     <string name="showAllContactsJoinItem" msgid="2189695051430392383">"എല്ലാ കോൺടാക്റ്റുകളും കാണിക്കുക"</string>
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"നിര്‍ദ്ദേശിച്ച കോണ്‍ടാക്റ്റുകള്‍"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"എല്ലാ കോൺടാക്റ്റുകളും"</string>
-    <string name="contactsJoinedMessage" msgid="7208148163607047389">"കൂട്ടിച്ചേർത്ത കോൺടാക്റ്റുകൾ"</string>
+    <string name="contactsJoinedMessage" msgid="656936718666768589">"കോൺടാക്റ്റുകൾ ലയിപ്പിച്ചു"</string>
+    <string name="contacts_deleted_toast" msgid="286851430992788215">"കോൺടാക്റ്റുകൾ ഇല്ലാതാക്കി"</string>
     <string name="menu_set_ring_tone" msgid="8728345772068064946">"റിംഗ്‌ടോൺ സജ്ജമാക്കുക"</string>
     <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"വോയ്‌സ്‌മെയിലിലേക്കുള്ള എല്ലാ കോളുകളും"</string>
     <string name="readOnlyContactWarning" msgid="7808825687289848259">"വായന-മാത്രം അക്കൗണ്ടുകളിൽ നിന്നുള്ള കോൺടാക്റ്റുകൾ നിങ്ങൾക്ക് ഇല്ലാതാക്കാനാകില്ലെങ്കിലും കോൺടാക്റ്ററ്റ് ലിസ്റ്റുകളിൽ നിന്ന് അവ മറയ്‌ക്കാനാകും."</string>
     <string name="readOnlyContactDeleteConfirmation" msgid="2137170726670196909">"ഈ കോൺടാക്റ്റിൽ ഒന്നിലധികം അക്കൗണ്ടുകളിൽ നിന്നുള്ള വിവരം അടങ്ങിയിരിക്കുന്നു. വായന-മാത്രം അക്കൗണ്ടുകളിൽ നിന്നുള്ള വിവരം നിങ്ങളുടെ കോൺടാക്റ്റുകളുടെ ലിസ്റ്റിൽ നിന്നും മറയ്‌ക്കുമെങ്കിലും അവ ഇല്ലാതാക്കില്ല."</string>
+    <string name="batch_merge_single_contact_warning" msgid="982585201970392110">"ലയിപ്പിക്കാനായി രണ്ട് കോൺടാക്‌റ്റുകളെങ്കിലും തിരഞ്ഞെടുക്കണം."</string>
+    <string name="batch_merge_confirmation" msgid="8551299480317422420">"തിരഞ്ഞെടുത്ത കോൺടാക്‌റ്റുകൾ ഒരൊറ്റ കോൺടാക്‌റ്റിലേക്ക് ലയിപ്പിക്കും."</string>
+    <string name="batch_delete_confirmation" msgid="2564172328268885394">"തിരഞ്ഞെടുത്ത കോൺടാക്‌റ്റുകൾ ഇല്ലാതാക്കും."</string>
+    <string name="batch_delete_read_only_contact_confirmation" msgid="6614878716815412523">"വായന-മാത്രം അക്കൗണ്ടുകളിൽ നിന്നുള്ള വിവരം നിങ്ങളുടെ കോൺടാക്റ്റുകളുടെ ലിസ്റ്റിൽ നിന്നും മറയ്‌ക്കുമെങ്കിലും അവ ഇല്ലാതാക്കില്ല."</string>
+    <string name="batch_delete_multiple_accounts_confirmation" msgid="5189722181586680185">"ഈ കോൺടാക്റ്റുകളിൽ ഒന്നിലധികം അക്കൗണ്ടുകളിൽ നിന്നുള്ള വിവരം അടങ്ങിയിരിക്കുന്നു. വായന-മാത്രം അക്കൗണ്ടുകളിൽ നിന്നുള്ള വിവരം നിങ്ങളുടെ കോൺടാക്റ്റുകളുടെ ലിസ്റ്റിൽ നിന്നും മറയ്‌ക്കുമെങ്കിലും അവ ഇല്ലാതാക്കില്ല."</string>
     <string name="multipleContactDeleteConfirmation" msgid="938900978442960800">"ഈ കോൺടാക്റ്റ് ഇല്ലാതാക്കുന്നത്, ഒന്നിലധികം അക്കൗണ്ടുകളിൽ നിന്ന് വിവരം ഇല്ലാതാക്കുന്നതിനിടയാക്കും."</string>
     <string name="deleteConfirmation" msgid="811706994761610640">"ഈ കോൺടാക്‌റ്റിനെ ഇല്ലാതാക്കും."</string>
     <string name="menu_discard" msgid="6854657936970228164">"മാറ്റങ്ങള്‍‌ നിരാകരിക്കുക"</string>
@@ -94,20 +101,20 @@
     <string name="contactSavedErrorToast" msgid="3207250533172944892">"കോൺടാക്റ്റ് മാറ്റങ്ങൾ സംരക്ഷിക്കാനായില്ല."</string>
     <string name="groupSavedToast" msgid="1168756874239833756">"ഗ്രൂപ്പ് സംരക്ഷിച്ചു."</string>
     <string name="groupSavedErrorToast" msgid="7984466936615304740">"ഗ്രൂപ്പ് മാറ്റങ്ങൾ സംരക്ഷിക്കാനായില്ല."</string>
-  <plurals name="listTotalPhoneContacts">
-    <item quantity="one" msgid="3015357862286673986">"ഫോൺ നമ്പറുള്ള ഒരു കോൺടാക്റ്റ്"</item>
-    <item quantity="other" msgid="3299954047880968205">"ഫോൺ നമ്പറുള്ള <xliff:g id="COUNT">%d</xliff:g> കോൺടാക്റ്റുകൾ"</item>
-  </plurals>
+    <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
+      <item quantity="other">ഫോൺ നമ്പറുള്ള <xliff:g id="COUNT">%d</xliff:g> കോൺടാക്‌റ്റുകൾ</item>
+      <item quantity="one">ഫോൺ നമ്പറുള്ള ഒരു കോൺടാക്റ്റ്</item>
+    </plurals>
     <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"ഫോൺ നമ്പറുകളോട് കൂടിയ കോൺടാക്റ്റുകളൊന്നുമില്ല"</string>
-  <plurals name="listFoundAllContacts">
-    <item quantity="one" msgid="5517063038754171134">"ഒരു കോൺടാക്റ്റ് കണ്ടെത്തി"</item>
-    <item quantity="other" msgid="3852668542926965042">"<xliff:g id="COUNT">%d</xliff:g> കോൺടാക്റ്റുകൾ കണ്ടെത്തി"</item>
-  </plurals>
+    <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> എണ്ണം കണ്ടെത്തി</item>
+      <item quantity="one">ഒന്ന് കണ്ടെത്തി</item>
+    </plurals>
     <string name="listFoundAllContactsZero" msgid="922980883593159444">"കോൺടാക്റ്റുകളൊന്നുമില്ല"</string>
-  <plurals name="searchFoundContacts">
-    <item quantity="one" msgid="4826918429708286628">"ഒരു കോൺടാക്റ്റ് കണ്ടെത്തി"</item>
-    <item quantity="other" msgid="7988132539476575389">"<xliff:g id="COUNT">%d</xliff:g> കോൺടാക്റ്റുകൾ കണ്ടെത്തി"</item>
-  </plurals>
+    <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> എണ്ണം കണ്ടെത്തി</item>
+      <item quantity="one">ഒന്ന് കണ്ടെത്തി</item>
+    </plurals>
     <string name="all_contacts_tab_label" msgid="6250372293594147703">"എല്ലാ കോൺടാക്റ്റുകളും"</string>
     <string name="favorites_tab_label" msgid="1524869648904016414">"പ്രിയപ്പെട്ടവ"</string>
     <string name="callBack" msgid="5498224409038809224">"തിരിച്ചുവിളിക്കുക"</string>
@@ -144,9 +151,6 @@
     <string name="pick_new_photo" msgid="9122450996263688237">"പുതിയ ഫോട്ടോ തിരഞ്ഞെടുക്കുക"</string>
     <string name="locale_change_in_progress" msgid="7583992153091537467">"ഭാഷാമാറ്റം പ്രതിഫലിക്കുന്നതിനായി കോൺടാക്റ്റ് ലിസ്റ്റ് അപ്‌ഡേറ്റുചെയ്യുന്നു."</string>
     <string name="upgrade_in_progress" msgid="474511436863451061">"കോൺടാക്റ്റ് ലിസ്റ്റ് അപ്‌ഡേറ്റുചെയ്യുന്നു."</string>
-    <string name="upgrade_out_of_memory" msgid="1209994418877625940">"കോൺടാക്റ്റുകൾ അപ്‌ഗ്രേഡുചെയ്യുന്ന പ്രോസസ്സിലാണ്. \n\nഅപ്‌ഗ്രേഡ് പ്രോസസ്സിന് ഏകദേശം <xliff:g id="SIZE_IN_MEGABYTES">%s</xliff:g> MB ആന്തരിക സംഭരണം ആവശ്യമാണ്.\n\nഇനിപ്പറയുന്ന ഓപ്‌ഷനുകളിലൊന്ന് തിരഞ്ഞെടുക്കുക:"</string>
-    <string name="upgrade_out_of_memory_uninstall" msgid="1721798828992091432">"ചില അപ്ലിക്കേഷനുകൾ അൺഇൻസ്റ്റാളുചെയ്യുക"</string>
-    <string name="upgrade_out_of_memory_retry" msgid="8431289830472724609">"അപ്‌ഗ്രേഡുചെയ്യാൻ വീണ്ടും ശ്രമിക്കുക"</string>
     <string name="search_results_searching" msgid="3984833028938569930">"തിരയുന്നു…"</string>
     <string name="menu_display_selected" msgid="6470001164297969034">"തിരഞ്ഞെടുത്തവ കാണിക്കുക"</string>
     <string name="menu_display_all" msgid="8887488642609786198">"എല്ലാം കാണിക്കുക"</string>
@@ -160,10 +164,10 @@
     <string name="primary_photo" msgid="8517942231868516999">"പ്രാഥമിക ഫോട്ടോ"</string>
     <string name="description_star" msgid="2605854427360036550">"പ്രിയപ്പെട്ടതാക്കുക"</string>
     <string name="edit_contact" msgid="7529281274005689512">"കോൺടാക്റ്റ് എഡിറ്റുചെയ്യുക"</string>
-  <plurals name="merge_info">
-    <item quantity="one" msgid="148365587896371969">"ലയിപ്പിക്കാത്തവ"</item>
-    <item quantity="other" msgid="425683718017380845">"<xliff:g id="COUNT">%0$d</xliff:g> ഉറവിടങ്ങളിൽ നിന്നും ലയിപ്പിച്ചവ"</item>
-  </plurals>
+    <plurals name="merge_info" formatted="false" msgid="2489323424994280962">
+      <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> ഉറവിടങ്ങളിൽ നിന്ന് ലയിപ്പിച്ചവ</item>
+      <item quantity="one">ലയിപ്പിച്ചിട്ടില്ല</item>
+    </plurals>
     <string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"തിരഞ്ഞെടുത്ത കോൺടാക്റ്റുമായി നിലവിലെ കോൺടാക്റ്റ് കൂട്ടിച്ചേർക്കണോ?"</string>
     <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"തിരഞ്ഞെടുത്ത കോൺടാക്റ്റ് എഡിറ്റുചെയ്യുന്നതിലേക്ക് മാറണോ? ഇതുവരെ നിങ്ങൾ നൽകിയ വിവരങ്ങൾ പകർത്തപ്പെടും."</string>
     <string name="menu_copyContact" msgid="1573960845106822639">"എന്റെ കോൺടാക്റ്റുകളിലേക്ക് പകർത്തുക"</string>
@@ -172,7 +176,7 @@
     <string name="list_filter_custom" msgid="8910173055702057002">"ഇഷ്‌ടാനുസൃതം"</string>
     <string name="activity_title_settings" msgid="5464130076132770781">"ക്രമീകരണങ്ങൾ"</string>
     <string name="menu_settings" msgid="377929915873428211">"ക്രമീകരണങ്ങൾ"</string>
-    <string name="menu_help" msgid="5123887102216637725">"സഹായം"</string>
+    <string name="menu_help" msgid="1680178646764069976">"സഹായവും ഫീഡ്‌ബാക്കും"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"ഡിസ്‌പ്ലേ ഓപ്‌ഷനുകൾ"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="non_phone_caption" msgid="1541655052330027380">"ഫോൺ നമ്പർ"</string>
@@ -188,19 +192,19 @@
     <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"കോൺടാക്റ്റുകൾ ഇമ്പോർട്ടുചെയ്യുക"</string>
     <string name="create_group_dialog_title" msgid="6874527142828424475">"പുതിയ ഗ്രൂപ്പ് സൃഷ്‌ടിക്കുക"</string>
     <string name="create_group_item_label" msgid="4411981763169654825">"പുതിയ ഗ്രൂപ്പ് സൃഷ്‌ടിക്കുക"</string>
-  <plurals name="num_groups_in_account">
-    <item quantity="one" msgid="2944819210288517794">"ഒരു ഗ്രൂപ്പ്"</item>
-    <item quantity="other" msgid="1276758425904917367">"<xliff:g id="COUNT">%0$d</xliff:g> ഗ്രൂപ്പുകൾ"</item>
-  </plurals>
+    <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
+      <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> ഗ്രൂപ്പുകൾ</item>
+      <item quantity="one">ഒരു ഗ്രൂപ്പ്</item>
+    </plurals>
     <string name="delete_group_dialog_message" msgid="7586856514337560529">"\"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\" എന്ന ഗ്രൂപ്പ് ഇല്ലാതാക്കണോ? (കോൺടാക്റ്റുകൾ സ്വയം ഇല്ലാതാകില്ല.)"</string>
-  <plurals name="num_contacts_in_group">
-    <item quantity="one" msgid="1352418549951013448">"<xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g> എന്നതിൽ നിന്നുള്ള <xliff:g id="COUNT_0">%1$d</xliff:g> ആൾ"</item>
-    <item quantity="other" msgid="8146027769011086349">"<xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g> എന്നതിൽ നിന്നുള്ള <xliff:g id="COUNT_0">%1$d</xliff:g> പേർ"</item>
-  </plurals>
-  <plurals name="group_list_num_contacts_in_group">
-    <item quantity="one" msgid="3323065321661972446">"<xliff:g id="COUNT">%1$d</xliff:g> ആൾ"</item>
-    <item quantity="other" msgid="6251996206137048525">"<xliff:g id="COUNT">%1$d</xliff:g> പേർ"</item>
-  </plurals>
+    <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
+      <item quantity="other"><xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g> എന്നതിൽ നിന്നുള്ള <xliff:g id="COUNT_2">%1$d</xliff:g> പേർ</item>
+      <item quantity="one"><xliff:g id="ACCOUNT_TYPE_1">%2$s</xliff:g> എന്നതിൽ നിന്നുള്ള <xliff:g id="COUNT_0">%1$d</xliff:g> ആൾ</item>
+    </plurals>
+    <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
+      <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> പേർ</item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> ആൾ</item>
+    </plurals>
     <string name="toast_join_with_empty_contact" msgid="2238581529864542985">"മറ്റൊന്നുമായി ബന്ധിപ്പിക്കുന്നതിന് മുമ്പ് കോൺടാക്റ്റിന്റെ പേര് ടൈപ്പുചെയ്യുക."</string>
     <string name="copy_text" msgid="3257145021583508761">"ക്ലിപ്പ്ബോർഡിലേക്ക് പകർത്തുക"</string>
     <string name="set_default" msgid="4417505153468300351">"സ്ഥിരമായി സജ്ജമാക്കുക"</string>
@@ -264,4 +268,5 @@
     <string name="content_description_recent_call" msgid="5183800406316723676">"പുതിയ കോൾ. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. തിരികെ വിളിക്കാൻ ക്ലിക്കുചെയ്യുക"</string>
     <string name="message_from_you_prefix" msgid="7180706529908434482">"നിങ്ങൾ: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
     <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"ഇമെയിൽ ഫീൽഡിലോ ഫോൺ ഫീൽഡിലോ വ്യക്തിയുടെ Hangouts ഐഡന്റിഫയർ നൽകുമ്പോൾ, Hangouts മികച്ചതായി പ്രവർത്തിക്കുന്നു."</string>
+    <string name="compact_editor_more_fields" msgid="2874181192382284115">"കൂടുതൽ ഫീൽഡുകൾ"</string>
 </resources>
diff --git a/res/values-mn-rMN/strings.xml b/res/values-mn-rMN/strings.xml
index 2d0780b..264dff5 100644
--- a/res/values-mn-rMN/strings.xml
+++ b/res/values-mn-rMN/strings.xml
@@ -46,6 +46,7 @@
     <string name="description_action_menu_add_star" msgid="3327186327234177456">"Дуртайд нэмэх"</string>
     <string name="menu_editContact" msgid="9042415603857662633">"Засах"</string>
     <string name="menu_deleteContact" msgid="6788644058868189393">"Устгах"</string>
+    <string name="menu_change_photo" msgid="7769177631511496210">"Зураг солих"</string>
     <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Үндсэн дэлгэц дээр байршуулах"</string>
     <string name="menu_call" msgid="3992595586042260618">"Харилцагч руу залгах"</string>
     <string name="menu_sendSMS" msgid="5535886767547006515">"Харилцагч руу зурвас илгээх"</string>
@@ -56,17 +57,23 @@
     <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Бүлгэм нэмэх"</string>
     <string name="splitConfirmation_title" msgid="633640935430370530">"Харилцагчийг хуваах уу?"</string>
     <string name="splitConfirmation" msgid="740190210499587175">"Энэ харилцагч олон харилцагчид хуваагдах болно."</string>
-    <string name="menu_joinAggregate" msgid="5027981918265667970">"Холбох"</string>
+    <string name="menu_joinAggregate" msgid="4050157483569357666">"Нэгтгэх"</string>
     <string name="titleJoinContactDataWith" msgid="7684875775798635354">"Харилцагчдыг холбох"</string>
     <string name="blurbJoinContactDataWith" msgid="8736488417422708236">"<xliff:g id="NAME">%s</xliff:g>-тай холбохыг хүсэж буй харилцагчийг сонгоно уу:"</string>
     <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Бүх харилцагчдыг харуулах"</string>
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Санал болгосон харилцагчид"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Бүх харилцагчид"</string>
-    <string name="contactsJoinedMessage" msgid="7208148163607047389">"Харилцагчид холбогдсон"</string>
+    <string name="contactsJoinedMessage" msgid="656936718666768589">"Холбоо барих хаягуудыг нэгтгэсэн"</string>
+    <string name="contacts_deleted_toast" msgid="286851430992788215">"Холбоо барих хаягуудыг устгасан"</string>
     <string name="menu_set_ring_tone" msgid="8728345772068064946">"Хонхны ая суулгах"</string>
     <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Бүх дуудлагыг дуут шуудан руу"</string>
     <string name="readOnlyContactWarning" msgid="7808825687289848259">"Та зөвхөн-унших акаунтаас харилцагчдыг устгаж чадахгүй, харин харилцагчдын жагсаалтаасаас нууцлаж болно."</string>
     <string name="readOnlyContactDeleteConfirmation" msgid="2137170726670196909">"Энэ харилцагчид олон акаунтын мэдээлэл агуулагдаж байна. Зөвхөн-унших акаунтуудын мэдээллийг харилцагчийн жагсаалтаас устгахгүйгээр нууцлах болно."</string>
+    <string name="batch_merge_single_contact_warning" msgid="982585201970392110">"Та нэгтгэх үйлдэл хийхдээ доод тал нь хоёр хаяг сонгох ёстой."</string>
+    <string name="batch_merge_confirmation" msgid="8551299480317422420">"Сонгосон хаягуудыг нэг хаяг руу нэгтгэнэ."</string>
+    <string name="batch_delete_confirmation" msgid="2564172328268885394">"Сонгосон харилцах хаягуудыг устгах болно."</string>
+    <string name="batch_delete_read_only_contact_confirmation" msgid="6614878716815412523">"Зөвхөн унших зориулалттай акаунтуудын мэдээлэл таны харилцах жагсаалтанд нуугдсан байдалтай үлдэх бөгөөд устгагдахгүй."</string>
+    <string name="batch_delete_multiple_accounts_confirmation" msgid="5189722181586680185">"Эдгээр харилцах хаягууд нь олон тооны акаунтын мэдээллийг агуулж байна. Зөвхөн унших зориулалттай акаунтуудын мэдээлэл таны харилцах жагсаалтанд нуугдсан байдалтай үлдэх бөгөөд устгагдахгүй."</string>
     <string name="multipleContactDeleteConfirmation" msgid="938900978442960800">"Энэ харилцагчийг устгаснаар олон акаунтаас мэдээллийг устгах болно."</string>
     <string name="deleteConfirmation" msgid="811706994761610640">"Энэ харилцагч устгагдах болно."</string>
     <string name="menu_discard" msgid="6854657936970228164">"Өөрчлөлтүүдийг цуцлах"</string>
@@ -94,20 +101,20 @@
     <string name="contactSavedErrorToast" msgid="3207250533172944892">"Харилцагчийн өөрчлөлтүүдийг хадгалж чадсангүй."</string>
     <string name="groupSavedToast" msgid="1168756874239833756">"Бүлгэм хадгалагдлаа."</string>
     <string name="groupSavedErrorToast" msgid="7984466936615304740">"Бүлгэмийн өөрчлөлтүүдийг хадгалж чадсангүй."</string>
-  <plurals name="listTotalPhoneContacts">
-    <item quantity="one" msgid="3015357862286673986">"Утасны дугаартай 1 харилцагч"</item>
-    <item quantity="other" msgid="3299954047880968205">"Утасны дугаартай <xliff:g id="COUNT">%d</xliff:g> харилцагч"</item>
-  </plurals>
+    <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
+      <item quantity="other">Утасны дугаар бүхий <xliff:g id="COUNT">%d</xliff:g> хаяг байна</item>
+      <item quantity="one">Утасны дугаар бүхий 1 хаяг байна</item>
+    </plurals>
     <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"Утасны дугаартай харилцагч байхгүй"</string>
-  <plurals name="listFoundAllContacts">
-    <item quantity="one" msgid="5517063038754171134">"1 олдсон"</item>
-    <item quantity="other" msgid="3852668542926965042">"<xliff:g id="COUNT">%d</xliff:g> олдсон"</item>
-  </plurals>
+    <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> олдсон байна</item>
+      <item quantity="one">1 олдсон байна</item>
+    </plurals>
     <string name="listFoundAllContactsZero" msgid="922980883593159444">"Харилцагч байхгүй"</string>
-  <plurals name="searchFoundContacts">
-    <item quantity="one" msgid="4826918429708286628">"1 олдсон"</item>
-    <item quantity="other" msgid="7988132539476575389">"<xliff:g id="COUNT">%d</xliff:g> олдсон"</item>
-  </plurals>
+    <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> олдсон байна</item>
+      <item quantity="one">1 олсон байна</item>
+    </plurals>
     <string name="all_contacts_tab_label" msgid="6250372293594147703">"Бүх харилцагчид"</string>
     <string name="favorites_tab_label" msgid="1524869648904016414">"Дуртай"</string>
     <string name="callBack" msgid="5498224409038809224">"Буцааж залгах"</string>
@@ -144,9 +151,6 @@
     <string name="pick_new_photo" msgid="9122450996263688237">"Шинэ зураг сонгох"</string>
     <string name="locale_change_in_progress" msgid="7583992153091537467">"Хэлний өөрчлөлтийг тусгахын тулд харилцагчдын жагсаалтыг шинэчилж байна."</string>
     <string name="upgrade_in_progress" msgid="474511436863451061">"Харилцагчдын жагсаалтыг шинэчилж байна."</string>
-    <string name="upgrade_out_of_memory" msgid="1209994418877625940">"Харилцагчдын жагсаалтыг сайжруулж байна. \n\nСайжруулах явцад ойролцоогоор <xliff:g id="SIZE_IN_MEGABYTES">%s</xliff:g> MB хэмжээтэй дотоод сан шаардагдана.\n\nДараах сонголтуудаас нэгийг нь сонгоно уу:"</string>
-    <string name="upgrade_out_of_memory_uninstall" msgid="1721798828992091432">"Зарим аппликешнүүдийг устгана уу"</string>
-    <string name="upgrade_out_of_memory_retry" msgid="8431289830472724609">"Сайжруулахыг дахин эхлүүлэх"</string>
     <string name="search_results_searching" msgid="3984833028938569930">"Хайж байна..."</string>
     <string name="menu_display_selected" msgid="6470001164297969034">"Сонгоснуудыг харуулах"</string>
     <string name="menu_display_all" msgid="8887488642609786198">"Бүгдийг харуулах"</string>
@@ -160,10 +164,10 @@
     <string name="primary_photo" msgid="8517942231868516999">"Ерөнхий зураг"</string>
     <string name="description_star" msgid="2605854427360036550">"дуртай"</string>
     <string name="edit_contact" msgid="7529281274005689512">"Харилцагчийг засварлах"</string>
-  <plurals name="merge_info">
-    <item quantity="one" msgid="148365587896371969">"нэгтгэгдээгүй"</item>
-    <item quantity="other" msgid="425683718017380845">"<xliff:g id="COUNT">%0$d</xliff:g> эх үүсвэрээс нийлүүлсэн"</item>
-  </plurals>
+    <plurals name="merge_info" formatted="false" msgid="2489323424994280962">
+      <item quantity="other"> <xliff:g id="COUNT">%0$d</xliff:g> эх үүсвэрээс нэгтгэлийг хийсэн байна</item>
+      <item quantity="one">нэгтгэгдээгүй байна</item>
+    </plurals>
     <string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"Энэ харилцагчийг сонгосон харилцагчтай холбох уу?"</string>
     <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Сонгосон харилцагчийг засварлах руу шилжих үү? Таны оруулсан мэдээллүүд хуулагдах болно."</string>
     <string name="menu_copyContact" msgid="1573960845106822639">"Миний Харилцагчид руу хуулах"</string>
@@ -172,7 +176,7 @@
     <string name="list_filter_custom" msgid="8910173055702057002">"Тохируулсан"</string>
     <string name="activity_title_settings" msgid="5464130076132770781">"Тохиргоо"</string>
     <string name="menu_settings" msgid="377929915873428211">"Тохиргоо"</string>
-    <string name="menu_help" msgid="5123887102216637725">"Тусламж"</string>
+    <string name="menu_help" msgid="1680178646764069976">"Тусламж &amp; санал хүсэлт"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"Харуулах сонголтууд"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="non_phone_caption" msgid="1541655052330027380">"Утасны дугаар"</string>
@@ -188,19 +192,19 @@
     <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Харилцагчид импорт хийх"</string>
     <string name="create_group_dialog_title" msgid="6874527142828424475">"Шинэ бүлгэм үүсгэх"</string>
     <string name="create_group_item_label" msgid="4411981763169654825">"Шинэ бүлгэм үүсгэх"</string>
-  <plurals name="num_groups_in_account">
-    <item quantity="one" msgid="2944819210288517794">"1 бүлгэм"</item>
-    <item quantity="other" msgid="1276758425904917367">"<xliff:g id="COUNT">%0$d</xliff:g> бүлгэм"</item>
-  </plurals>
+    <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
+      <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> бүлэг</item>
+      <item quantity="one">1 бүлэг</item>
+    </plurals>
     <string name="delete_group_dialog_message" msgid="7586856514337560529">"\"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\" бүлгэмийг устгах уу? (Доторх харилцагчид нь устахгүй.)"</string>
-  <plurals name="num_contacts_in_group">
-    <item quantity="one" msgid="1352418549951013448">"<xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>-с <xliff:g id="COUNT_0">%1$d</xliff:g> хүн"</item>
-    <item quantity="other" msgid="8146027769011086349">"<xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>-с <xliff:g id="COUNT_0">%1$d</xliff:g> хүн"</item>
-  </plurals>
-  <plurals name="group_list_num_contacts_in_group">
-    <item quantity="one" msgid="3323065321661972446">"<xliff:g id="COUNT">%1$d</xliff:g> хүн"</item>
-    <item quantity="other" msgid="6251996206137048525">"<xliff:g id="COUNT">%1$d</xliff:g> хүн"</item>
-  </plurals>
+    <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
+      <item quantity="other">  <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g>-с <xliff:g id="COUNT_2">%1$d</xliff:g> хүн</item>
+      <item quantity="one"><xliff:g id="ACCOUNT_TYPE_1">%2$s</xliff:g> -с <xliff:g id="COUNT_0">%1$d</xliff:g>  хүн</item>
+    </plurals>
+    <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
+      <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> хүн</item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> хүн</item>
+    </plurals>
     <string name="toast_join_with_empty_contact" msgid="2238581529864542985">"Өөр харилцагчтай холбохын өмнө харилцагчийн нэрийг оруулна уу."</string>
     <string name="copy_text" msgid="3257145021583508761">"Түр санах ойд хуулах"</string>
     <string name="set_default" msgid="4417505153468300351">"Үндсэн болгох"</string>
@@ -264,4 +268,5 @@
     <string name="content_description_recent_call" msgid="5183800406316723676">"саяхны дуудлага. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. буцааж залгахын тулд товшино уу"</string>
     <string name="message_from_you_prefix" msgid="7180706529908434482">"Та: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
     <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"Hangouts апликейшн нь таныг найзуудынхаа мэдээллийг харилцагчийн и-мэйл эсвэл гар утасны талбарт оруулбал илүү сайн ажилладаг."</string>
+    <string name="compact_editor_more_fields" msgid="2874181192382284115">"Нэмэлт талбарууд"</string>
 </resources>
diff --git a/res/values-mr-rIN/strings.xml b/res/values-mr-rIN/strings.xml
index 438ef0e..598fcfe 100644
--- a/res/values-mr-rIN/strings.xml
+++ b/res/values-mr-rIN/strings.xml
@@ -46,6 +46,7 @@
     <string name="description_action_menu_add_star" msgid="3327186327234177456">"आवडींमध्ये जोडले"</string>
     <string name="menu_editContact" msgid="9042415603857662633">"संपादित करा"</string>
     <string name="menu_deleteContact" msgid="6788644058868189393">"हटवा"</string>
+    <string name="menu_change_photo" msgid="7769177631511496210">"फोटो बदला"</string>
     <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"मुख्‍यपृष्‍ठ स्क्रीन वर ठेवा"</string>
     <string name="menu_call" msgid="3992595586042260618">"संपर्कास कॉल करा"</string>
     <string name="menu_sendSMS" msgid="5535886767547006515">"संपर्कास मजकूर पाठवा"</string>
@@ -56,17 +57,23 @@
     <string name="menu_new_group_action_bar" msgid="3520232877587377175">"गट जोडा"</string>
     <string name="splitConfirmation_title" msgid="633640935430370530">"संपर्क विभाजित करायचा?"</string>
     <string name="splitConfirmation" msgid="740190210499587175">"हा संपर्क एकाधिक संपर्कांमध्‍ये विभाजित केला जाईल."</string>
-    <string name="menu_joinAggregate" msgid="5027981918265667970">"सामील व्हा"</string>
+    <string name="menu_joinAggregate" msgid="4050157483569357666">"विलीन करा"</string>
     <string name="titleJoinContactDataWith" msgid="7684875775798635354">"संपर्कांमध्‍ये सामील व्हा"</string>
     <string name="blurbJoinContactDataWith" msgid="8736488417422708236">"आपण <xliff:g id="NAME">%s</xliff:g> सह सामील होऊ इच्‍छिता तो संपर्क निवडा:"</string>
     <string name="showAllContactsJoinItem" msgid="2189695051430392383">"सर्व संपर्क दर्शवा"</string>
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"सूचित संपर्क"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"सर्व संपर्क"</string>
-    <string name="contactsJoinedMessage" msgid="7208148163607047389">"संपर्क सामील झाले"</string>
+    <string name="contactsJoinedMessage" msgid="656936718666768589">"संपर्क विलीन केले"</string>
+    <string name="contacts_deleted_toast" msgid="286851430992788215">"संपर्क हटविले"</string>
     <string name="menu_set_ring_tone" msgid="8728345772068064946">"रिंगटोन सेट करा"</string>
     <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"व्हॉइसमेलवरील सर्व कॉल"</string>
     <string name="readOnlyContactWarning" msgid="7808825687289848259">"आपण केवळ-वाचनीय खात्‍यांमधून संपर्क हटवू शकत नाही परंतु आपण ते आपल्‍या संपर्क सूचींमध्‍ये लपवू शकता."</string>
     <string name="readOnlyContactDeleteConfirmation" msgid="2137170726670196909">"या संपर्कात एकाधिक खात्‍यांमधील माहिती आहे. केवळ-वाचनीय खात्यांमधील माहिती आपल्‍या संपर्क सूचींमध्‍ये लपविली जाईल, हटविली जाणार नाही."</string>
+    <string name="batch_merge_single_contact_warning" msgid="982585201970392110">"विलीन करण्‍यासाठी आपण कमीतकमी दोन संपर्क निवडलेले असणे आवश्‍यक आहे."</string>
+    <string name="batch_merge_confirmation" msgid="8551299480317422420">"निवडलेले संपर्क एकाच संपर्कामध्‍ये विलीन केले जातील."</string>
+    <string name="batch_delete_confirmation" msgid="2564172328268885394">"निवडलेले संपर्क हटविले जातील."</string>
+    <string name="batch_delete_read_only_contact_confirmation" msgid="6614878716815412523">"केवळ-वाचनीय खात्यांमधील माहिती आपल्‍या संपर्क सूचींमध्‍ये लपविली जाईल, ती हटविली जाणार नाही."</string>
+    <string name="batch_delete_multiple_accounts_confirmation" msgid="5189722181586680185">"या संपर्कांमध्‍ये एकाधिक खात्यांमधील माहिती आहे. केवळ-वाचनीय खात्यांमधील माहिती आपल्‍या संपर्क सूचींमध्‍ये लपविली जाईल, ती हटविली जाणार नाही."</string>
     <string name="multipleContactDeleteConfirmation" msgid="938900978442960800">"हा संपर्क हटविल्याने एकाधिक खात्‍यांमधून माहिती हटवली जाईल."</string>
     <string name="deleteConfirmation" msgid="811706994761610640">"हा संपर्क हटविला जाईल."</string>
     <string name="menu_discard" msgid="6854657936970228164">"बदल टाकून द्या"</string>
@@ -94,20 +101,20 @@
     <string name="contactSavedErrorToast" msgid="3207250533172944892">"संपर्क बदल जतन करू शकलो नाही."</string>
     <string name="groupSavedToast" msgid="1168756874239833756">"गट जतन केला."</string>
     <string name="groupSavedErrorToast" msgid="7984466936615304740">"गट बदल जतन करू शकलो नाही."</string>
-  <plurals name="listTotalPhoneContacts">
-    <item quantity="one" msgid="3015357862286673986">"फोन नंबरसह 1 संपर्क"</item>
-    <item quantity="other" msgid="3299954047880968205">"फोन नंबरसह <xliff:g id="COUNT">%d</xliff:g> संपर्क"</item>
-  </plurals>
+    <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
+      <item quantity="one">फोन नंबरसह <xliff:g id="COUNT">%d</xliff:g> संपर्क</item>
+      <item quantity="other">फोन नंबरसह <xliff:g id="COUNT">%d</xliff:g> संपर्क</item>
+    </plurals>
     <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"फोन नंबरसह कोणतेही संपर्क नाहीत"</string>
-  <plurals name="listFoundAllContacts">
-    <item quantity="one" msgid="5517063038754171134">"1 आढळला"</item>
-    <item quantity="other" msgid="3852668542926965042">"<xliff:g id="COUNT">%d</xliff:g> आढळले"</item>
-  </plurals>
+    <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
+      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> आढळला</item>
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> आढळले</item>
+    </plurals>
     <string name="listFoundAllContactsZero" msgid="922980883593159444">"कोणतेही संपर्क नाहीत"</string>
-  <plurals name="searchFoundContacts">
-    <item quantity="one" msgid="4826918429708286628">"1 आढळला"</item>
-    <item quantity="other" msgid="7988132539476575389">"<xliff:g id="COUNT">%d</xliff:g> आढळले"</item>
-  </plurals>
+    <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
+      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> आढळला</item>
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> आढळले</item>
+    </plurals>
     <string name="all_contacts_tab_label" msgid="6250372293594147703">"सर्व संपर्क"</string>
     <string name="favorites_tab_label" msgid="1524869648904016414">"मनपसंत"</string>
     <string name="callBack" msgid="5498224409038809224">"पुन्हा कॉल करा"</string>
@@ -144,9 +151,6 @@
     <string name="pick_new_photo" msgid="9122450996263688237">"नवीन फोटो निवडा"</string>
     <string name="locale_change_in_progress" msgid="7583992153091537467">"भाषेचा बदल प्रतिबिंबित करण्यासाठी संपर्क सूची सुधारित केली जात आहे."</string>
     <string name="upgrade_in_progress" msgid="474511436863451061">"संपर्क सूची अद्यतनित केली जात आहे."</string>
-    <string name="upgrade_out_of_memory" msgid="1209994418877625940">"संपर्क श्रेणीसुधारित होण्‍याच्‍या प्रक्रियेत आहेत. \n\nश्रेणीसुधारित प्रक्रियेस अंदाजे <xliff:g id="SIZE_IN_MEGABYTES">%s</xliff:g> MB अंतर्गत संचयन आवश्‍यक असते. \n\nखालील पर्यायांपैकी एक निवडा:"</string>
-    <string name="upgrade_out_of_memory_uninstall" msgid="1721798828992091432">"काही अनुप्रयोग विस्थापित करा"</string>
-    <string name="upgrade_out_of_memory_retry" msgid="8431289830472724609">"श्रेणीसुधारित करण्‍याचा पुन्‍हा प्रयत्‍न करा"</string>
     <string name="search_results_searching" msgid="3984833028938569930">"शोधत आहे..."</string>
     <string name="menu_display_selected" msgid="6470001164297969034">"निवडलेले दर्शवा"</string>
     <string name="menu_display_all" msgid="8887488642609786198">"सर्व दर्शवा"</string>
@@ -160,10 +164,10 @@
     <string name="primary_photo" msgid="8517942231868516999">"प्राथमिक फोटो"</string>
     <string name="description_star" msgid="2605854427360036550">"आवडते"</string>
     <string name="edit_contact" msgid="7529281274005689512">"संपर्क संपादित करा"</string>
-  <plurals name="merge_info">
-    <item quantity="one" msgid="148365587896371969">"विलीन केले नाही"</item>
-    <item quantity="other" msgid="425683718017380845">"<xliff:g id="COUNT">%0$d</xliff:g> स्‍त्रोतांमधून विलीन केले"</item>
-  </plurals>
+    <plurals name="merge_info" formatted="false" msgid="2489323424994280962">
+      <item quantity="one"> <xliff:g id="COUNT">%0$d</xliff:g> स्त्रोतांमधून विलीन केले</item>
+      <item quantity="other"> <xliff:g id="COUNT">%0$d</xliff:g> स्त्रोतांमधून विलीन केले</item>
+    </plurals>
     <string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"निवडलेल्‍या संपर्कासह वर्तमान संपर्कामध्‍ये सामील व्‍हायचे?"</string>
     <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"निवडलेले संपर्क संपादित करण्‍यावर स्‍विच करायचे? आपण आत्तापर्यंत प्रविष्‍ट केलेली माहिती कॉपी केली जाईल."</string>
     <string name="menu_copyContact" msgid="1573960845106822639">"माझे संपर्क वर कॉपी करा"</string>
@@ -172,7 +176,7 @@
     <string name="list_filter_custom" msgid="8910173055702057002">"सानुकूल"</string>
     <string name="activity_title_settings" msgid="5464130076132770781">"सेटिंग्ज"</string>
     <string name="menu_settings" msgid="377929915873428211">"सेटिंग्ज"</string>
-    <string name="menu_help" msgid="5123887102216637725">"मदत"</string>
+    <string name="menu_help" msgid="1680178646764069976">"मदत आणि अभिप्राय"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"पर्याय प्रदर्शित करा"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="non_phone_caption" msgid="1541655052330027380">"फोन नंबर"</string>
@@ -188,19 +192,19 @@
     <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"संपर्क आयात करा"</string>
     <string name="create_group_dialog_title" msgid="6874527142828424475">"नवीन गट तयार करा"</string>
     <string name="create_group_item_label" msgid="4411981763169654825">"नवीन गट तयार करा"</string>
-  <plurals name="num_groups_in_account">
-    <item quantity="one" msgid="2944819210288517794">"1 गट"</item>
-    <item quantity="other" msgid="1276758425904917367">"<xliff:g id="COUNT">%0$d</xliff:g> गट"</item>
-  </plurals>
+    <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
+      <item quantity="one"><xliff:g id="COUNT">%0$d</xliff:g> गट</item>
+      <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> गट</item>
+    </plurals>
     <string name="delete_group_dialog_message" msgid="7586856514337560529">"\"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\" गट हटवायचा? (संपर्क आपणहून हटविले जाणार नाहीत.)"</string>
-  <plurals name="num_contacts_in_group">
-    <item quantity="one" msgid="1352418549951013448">"<xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g> प्रकारामधील <xliff:g id="COUNT_0">%1$d</xliff:g> व्‍यक्ती"</item>
-    <item quantity="other" msgid="8146027769011086349">"<xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g> मधील <xliff:g id="COUNT_0">%1$d</xliff:g> लोक"</item>
-  </plurals>
-  <plurals name="group_list_num_contacts_in_group">
-    <item quantity="one" msgid="3323065321661972446">"<xliff:g id="COUNT">%1$d</xliff:g> व्‍यक्‍ती"</item>
-    <item quantity="other" msgid="6251996206137048525">"<xliff:g id="COUNT">%1$d</xliff:g> लोक"</item>
-  </plurals>
+    <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
+      <item quantity="one"> <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g> मधील <xliff:g id="COUNT_2">%1$d</xliff:g> व्यक्ती</item>
+      <item quantity="other"> <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g> मधील <xliff:g id="COUNT_2">%1$d</xliff:g> लोक</item>
+    </plurals>
+    <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
+      <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> व्‍यक्‍ती</item>
+      <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> लोक</item>
+    </plurals>
     <string name="toast_join_with_empty_contact" msgid="2238581529864542985">"दुसर्‍यासह सामील होण्‍यापूर्वी संपर्क नाव टाईप करा."</string>
     <string name="copy_text" msgid="3257145021583508761">"क्लिपबोर्डवर कॉपी करा"</string>
     <string name="set_default" msgid="4417505153468300351">"डीफॉल्ट म्हणून सेट करा"</string>
@@ -264,4 +268,5 @@
     <string name="content_description_recent_call" msgid="5183800406316723676">"अलीकडील कॉल. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. परत कॉल करण्यासाठी क्लिक करा"</string>
     <string name="message_from_you_prefix" msgid="7180706529908434482">"आपण: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
     <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"आपण ईमेल फिल्डमध्ये किंवा फोन फिल्डमध्ये एखाद्या व्यक्तीचे Hangouts अभिज्ञापक प्रविष्ट करता तेव्हा Hangouts उत्कृष्ट कार्य करते."</string>
+    <string name="compact_editor_more_fields" msgid="2874181192382284115">"अधिक फील्ड"</string>
 </resources>
diff --git a/res/values-ms-rMY/strings.xml b/res/values-ms-rMY/strings.xml
index 3d0f7c5..b40c073 100644
--- a/res/values-ms-rMY/strings.xml
+++ b/res/values-ms-rMY/strings.xml
@@ -46,6 +46,7 @@
     <string name="description_action_menu_add_star" msgid="3327186327234177456">"Ditambah ke kegemaran"</string>
     <string name="menu_editContact" msgid="9042415603857662633">"Edit"</string>
     <string name="menu_deleteContact" msgid="6788644058868189393">"Padam"</string>
+    <string name="menu_change_photo" msgid="7769177631511496210">"Tukar foto"</string>
     <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Letakkan pada skrin Utama"</string>
     <string name="menu_call" msgid="3992595586042260618">"Panggil kenalan"</string>
     <string name="menu_sendSMS" msgid="5535886767547006515">"SMS kepada kenalan"</string>
@@ -56,17 +57,23 @@
     <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Tambah Kumpulan"</string>
     <string name="splitConfirmation_title" msgid="633640935430370530">"Pisahkan kenalan?"</string>
     <string name="splitConfirmation" msgid="740190210499587175">"Kenalan ini akan dipisahkan kepada berbilang kenalan."</string>
-    <string name="menu_joinAggregate" msgid="5027981918265667970">"Sertai"</string>
+    <string name="menu_joinAggregate" msgid="4050157483569357666">"Gabung"</string>
     <string name="titleJoinContactDataWith" msgid="7684875775798635354">"Gabungkan kenalan"</string>
     <string name="blurbJoinContactDataWith" msgid="8736488417422708236">"Pilih kenalan yang anda mahu untuk menyertai <xliff:g id="NAME">%s</xliff:g>:"</string>
     <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Tunjukkan semua kenalan"</string>
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Kenalan cadangan"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Semua kenalan"</string>
-    <string name="contactsJoinedMessage" msgid="7208148163607047389">"Kenalan digabungkan"</string>
+    <string name="contactsJoinedMessage" msgid="656936718666768589">"Kenalan digabungkan"</string>
+    <string name="contacts_deleted_toast" msgid="286851430992788215">"Kenalan dipadamkan"</string>
     <string name="menu_set_ring_tone" msgid="8728345772068064946">"Ttpkn nd dering"</string>
     <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Semua panggilan ke mel suara"</string>
     <string name="readOnlyContactWarning" msgid="7808825687289848259">"Anda tidak boleh memadamkan kenalan daripada akaun baca sahaja, tetapi anda boleh menyembunyikan mereka dalam senarai kenalan anda."</string>
     <string name="readOnlyContactDeleteConfirmation" msgid="2137170726670196909">"Kenalan ini mengandungi maklumat daripada berbilang akaun. Maklumat daripada akaun baca sahaja akan disembunyikan dalam senarai kenalan anda, dan bukannya dipadamkan."</string>
+    <string name="batch_merge_single_contact_warning" msgid="982585201970392110">"Anda memerlukan sekurang-kurangnya dua kenalan yang dipilih untuk melakukan penggabungan."</string>
+    <string name="batch_merge_confirmation" msgid="8551299480317422420">"Kenalan yang dipilih akan digabungkan menjadi kenalan tunggal."</string>
+    <string name="batch_delete_confirmation" msgid="2564172328268885394">"Kenalan yang dipilih akan dipadamkan."</string>
+    <string name="batch_delete_read_only_contact_confirmation" msgid="6614878716815412523">"Maklumat daripada akaun baca sahaja akan disembunyikan dalam senarai kenalan anda, bukannya dipadamkan."</string>
+    <string name="batch_delete_multiple_accounts_confirmation" msgid="5189722181586680185">"Kenalan ini mengandungi maklumat daripada berbilang akaun. Maklumat daripada akaun baca sahaja akan disembunyikan dalam senarai kenalan anda, bukannya dipadamkan."</string>
     <string name="multipleContactDeleteConfirmation" msgid="938900978442960800">"Pemadaman kenalan ini akan turut memadamkan maklumat daripada berbilang akaun."</string>
     <string name="deleteConfirmation" msgid="811706994761610640">"Kenalan ini akan dipadamkan."</string>
     <string name="menu_discard" msgid="6854657936970228164">"Buang perubahan"</string>
@@ -94,20 +101,20 @@
     <string name="contactSavedErrorToast" msgid="3207250533172944892">"Tidak dapat menyimpan perubahan kenalan."</string>
     <string name="groupSavedToast" msgid="1168756874239833756">"Kumpulan sudah disimpan."</string>
     <string name="groupSavedErrorToast" msgid="7984466936615304740">"Tidak dapat menyimpan perubahan kumpulan."</string>
-  <plurals name="listTotalPhoneContacts">
-    <item quantity="one" msgid="3015357862286673986">"1 kenalan dengan nombor telefon"</item>
-    <item quantity="other" msgid="3299954047880968205">"<xliff:g id="COUNT">%d</xliff:g> kenalan dengan nombor telefon"</item>
-  </plurals>
+    <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> kenalan dengan nombor telefon</item>
+      <item quantity="one">1 kenalan dengan nombor telefon</item>
+    </plurals>
     <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"Tiada kenalan dengan nombor telefon"</string>
-  <plurals name="listFoundAllContacts">
-    <item quantity="one" msgid="5517063038754171134">"1 ditemui"</item>
-    <item quantity="other" msgid="3852668542926965042">"<xliff:g id="COUNT">%d</xliff:g> ditemui"</item>
-  </plurals>
+    <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ditemui</item>
+      <item quantity="one">1 ditemui</item>
+    </plurals>
     <string name="listFoundAllContactsZero" msgid="922980883593159444">"Tiada kenalan"</string>
-  <plurals name="searchFoundContacts">
-    <item quantity="one" msgid="4826918429708286628">"1 ditemui"</item>
-    <item quantity="other" msgid="7988132539476575389">"<xliff:g id="COUNT">%d</xliff:g> ditemui"</item>
-  </plurals>
+    <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ditemui</item>
+      <item quantity="one">1 ditemui</item>
+    </plurals>
     <string name="all_contacts_tab_label" msgid="6250372293594147703">"Semua kenalan"</string>
     <string name="favorites_tab_label" msgid="1524869648904016414">"Kegemaran"</string>
     <string name="callBack" msgid="5498224409038809224">"Panggil balik"</string>
@@ -144,9 +151,6 @@
     <string name="pick_new_photo" msgid="9122450996263688237">"Pilih foto baharu"</string>
     <string name="locale_change_in_progress" msgid="7583992153091537467">"Senarai kenalan sedang dikemas kini untuk menggambarkan penukaran bahasa."</string>
     <string name="upgrade_in_progress" msgid="474511436863451061">"Senarai kenalan sedang dikemas kini."</string>
-    <string name="upgrade_out_of_memory" msgid="1209994418877625940">"Kenalan sedang dalam proses peningkatan. \n\nProses peningkatan memerlukan lebih kurang <xliff:g id="SIZE_IN_MEGABYTES">%s</xliff:g> MB storan dalaman.\n\nPilih satu daripada pilihan yang berikut:"</string>
-    <string name="upgrade_out_of_memory_uninstall" msgid="1721798828992091432">"Nyahpasang beberapa aplikasi"</string>
-    <string name="upgrade_out_of_memory_retry" msgid="8431289830472724609">"Cuba semula peningkatan"</string>
     <string name="search_results_searching" msgid="3984833028938569930">"Mencari..."</string>
     <string name="menu_display_selected" msgid="6470001164297969034">"Tunjukkan pilihan"</string>
     <string name="menu_display_all" msgid="8887488642609786198">"Tunjukkan semua"</string>
@@ -160,10 +164,10 @@
     <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>
-  <plurals name="merge_info">
-    <item quantity="one" msgid="148365587896371969">"tidak digabungkan"</item>
-    <item quantity="other" msgid="425683718017380845">"digabungkan daripada <xliff:g id="COUNT">%0$d</xliff:g> sumber"</item>
-  </plurals>
+    <plurals name="merge_info" formatted="false" msgid="2489323424994280962">
+      <item quantity="other">digabungkan daripada <xliff:g id="COUNT">%0$d</xliff:g> sumber</item>
+      <item quantity="one">tidak digabungkan</item>
+    </plurals>
     <string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"Gabungkan kenalan semasa dengan kenalan pilihan?"</string>
     <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Bertukar kepada mengedit kenalan pilihan? Maklumat yang anda masukkan setakat ini akan disalin."</string>
     <string name="menu_copyContact" msgid="1573960845106822639">"Salin ke Kenalan Saya"</string>
@@ -172,7 +176,7 @@
     <string name="list_filter_custom" msgid="8910173055702057002">"Peribadi"</string>
     <string name="activity_title_settings" msgid="5464130076132770781">"Tetapan"</string>
     <string name="menu_settings" msgid="377929915873428211">"Tetapan"</string>
-    <string name="menu_help" msgid="5123887102216637725">"Bantuan"</string>
+    <string name="menu_help" msgid="1680178646764069976">"Bantuan &amp; maklum balas"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"Pilihan paparan"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="non_phone_caption" msgid="1541655052330027380">"Nombor telefon"</string>
@@ -188,19 +192,19 @@
     <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Import kenalan"</string>
     <string name="create_group_dialog_title" msgid="6874527142828424475">"Buat kumpulan baru"</string>
     <string name="create_group_item_label" msgid="4411981763169654825">"Buat kumpulan baharu"</string>
-  <plurals name="num_groups_in_account">
-    <item quantity="one" msgid="2944819210288517794">"1 kumpulan"</item>
-    <item quantity="other" msgid="1276758425904917367">"<xliff:g id="COUNT">%0$d</xliff:g> kumpulan"</item>
-  </plurals>
+    <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
+      <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> kumpulan</item>
+      <item quantity="one">1 kumpulan</item>
+    </plurals>
     <string name="delete_group_dialog_message" msgid="7586856514337560529">"Padamkan kumpulan \" <xliff:g id="GROUP_LABEL">%1$s</xliff:g> \"? (Kenalan itu sendiri tidak akan dipadamkan.)"</string>
-  <plurals name="num_contacts_in_group">
-    <item quantity="one" msgid="1352418549951013448">"<xliff:g id="COUNT_0">%1$d</xliff:g> orang daripada <xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>"</item>
-    <item quantity="other" msgid="8146027769011086349">"<xliff:g id="COUNT_0">%1$d</xliff:g> orang daripada <xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>"</item>
-  </plurals>
-  <plurals name="group_list_num_contacts_in_group">
-    <item quantity="one" msgid="3323065321661972446">"<xliff:g id="COUNT">%1$d</xliff:g> orang"</item>
-    <item quantity="other" msgid="6251996206137048525">"<xliff:g id="COUNT">%1$d</xliff:g> orang"</item>
-  </plurals>
+    <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> orang daripada <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> orang daripada <xliff:g id="ACCOUNT_TYPE_1">%2$s</xliff:g></item>
+    </plurals>
+    <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
+      <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> orang</item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> orang</item>
+    </plurals>
     <string name="toast_join_with_empty_contact" msgid="2238581529864542985">"Taip nama kenalan sebelum bergabung dengan yang lain."</string>
     <string name="copy_text" msgid="3257145021583508761">"Salin ke papan keratan"</string>
     <string name="set_default" msgid="4417505153468300351">"Tetapkan lalai"</string>
@@ -264,4 +268,5 @@
     <string name="content_description_recent_call" msgid="5183800406316723676">"panggilan terbaharu. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. klik untuk memanggil balik"</string>
     <string name="message_from_you_prefix" msgid="7180706529908434482">"Anda: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
     <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"Hangouts berfungsi lebih baik apabila anda memasukkan pengecam Hangouts individu itu ke dalam medan e-mel atau telefon."</string>
+    <string name="compact_editor_more_fields" msgid="2874181192382284115">"Lagi Medan"</string>
 </resources>
diff --git a/res/values-my-rMM/strings.xml b/res/values-my-rMM/strings.xml
index b59124c..6a508bd 100644
--- a/res/values-my-rMM/strings.xml
+++ b/res/values-my-rMM/strings.xml
@@ -46,6 +46,7 @@
     <string name="description_action_menu_add_star" msgid="3327186327234177456">"အကြိုက်ဆုံးများ ထဲကို ထည့်ပြီး"</string>
     <string name="menu_editContact" msgid="9042415603857662633">"ပြင်ဆင်ရန်"</string>
     <string name="menu_deleteContact" msgid="6788644058868189393">"ဖျက်ရန်"</string>
+    <string name="menu_change_photo" msgid="7769177631511496210">"ဓာတ်ပုံ ပြောင်းလဲ"</string>
     <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"ပင်မစာမျက်နှာတွင် တင်ထားပါ"</string>
     <string name="menu_call" msgid="3992595586042260618">"အဆက်အသွယ်ကို ခေါ်ပါ"</string>
     <string name="menu_sendSMS" msgid="5535886767547006515">"အဆက်အသွယ်ကို စာတိုပို့ရန်"</string>
@@ -56,17 +57,23 @@
     <string name="menu_new_group_action_bar" msgid="3520232877587377175">"အုပ်စု ထပ်ထည့်ပါ"</string>
     <string name="splitConfirmation_title" msgid="633640935430370530">"အဆက်အသွယ်ခွဲမည်လား?"</string>
     <string name="splitConfirmation" msgid="740190210499587175">"ဒီအဆက်အသွယ်အား အဆက်အသွယ်အများအပြားအဖြစ် ခွဲပစ်လိုက်မည်ဖြစ်ပါသည်"</string>
-    <string name="menu_joinAggregate" msgid="5027981918265667970">"ပူးပေါင်းသည်"</string>
+    <string name="menu_joinAggregate" msgid="4050157483569357666">"ပေါင်းစည်းပါ"</string>
     <string name="titleJoinContactDataWith" msgid="7684875775798635354">"အဆက်အသွယ်များကို ပူးပေါင်းလိုက်သည်"</string>
     <string name="blurbJoinContactDataWith" msgid="8736488417422708236">"<xliff:g id="NAME">%s</xliff:g> နှင့် ပေါင်းချင်သော လိပ်စာအားရွေးပါ:"</string>
     <string name="showAllContactsJoinItem" msgid="2189695051430392383">"အဆက်အသွယ်များအားလုံးအားပြပါ"</string>
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"အကြုံပြုလိုသော အဆက်အသွယ်များ"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"လိပ်စာများအားလုံး"</string>
-    <string name="contactsJoinedMessage" msgid="7208148163607047389">"အဆက်အသွယ်များ ပူးပေါင်းပြီး"</string>
+    <string name="contactsJoinedMessage" msgid="656936718666768589">"ဆက်သွယ်မှုစာရင်း ပေါင်းကူးပြီး"</string>
+    <string name="contacts_deleted_toast" msgid="286851430992788215">"ဆက်သွယ်မှုစာရင်း ဖျက်ပြီး"</string>
     <string name="menu_set_ring_tone" msgid="8728345772068064946">"ဖုန်းမြည်သံသတ်မှတ်ရန်"</string>
     <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"ဖုန်းအားလုံးအသံစာပို့စနစ်သို့"</string>
     <string name="readOnlyContactWarning" msgid="7808825687289848259">"ဖတ်ရန်အတွက်သာ အကောင့်များမှ အဆက်အသွယ်များကို ဖျက်ပစ်လို့ မရပါ၊ ဒါပေမယ့် အဆက်အသွယ်များစာရင်းမှ ဖျောက်ထားလို့ ရပါသည်"</string>
     <string name="readOnlyContactDeleteConfirmation" msgid="2137170726670196909">"ဒီအဆက်အသွယ်မှာ အကောင့်အများအပြား၏ အချက်အလက်များ ပါဝင်ပါသည်။ ဖတ်ရန်အတွက်သာ အကောင့်များမှ အချက်အလက်များကို ဖျောက်ထားမှာဖြစ်ပြီး ဖျက်ပစ်ထားတာ မဟုတ်ပါ"</string>
+    <string name="batch_merge_single_contact_warning" msgid="982585201970392110">"ပေါင်းစည်းမှုတစ်ခုလုပ်ဆောင်ရန် အနည်းဆုံးအဆက်အသွယ်နှစ်ခု ရွေးချယ်ရန် လိုအပ်သည်။"</string>
+    <string name="batch_merge_confirmation" msgid="8551299480317422420">"ရွေးချယ်ထားသောအကောင့်များအား အဆက်အသွယ်တစ်ခုတည်းသို့ ပေါင်းစည်းပါလိမ့်မည်။"</string>
+    <string name="batch_delete_confirmation" msgid="2564172328268885394">"ရွေးချယ်ထားသောအဆက်အသွယ်များ ဖျက်ပစ်လိမ့်မည်။"</string>
+    <string name="batch_delete_read_only_contact_confirmation" msgid="6614878716815412523">"ဖတ်ရန်အတွက်သာ အကောင့်များမှ အချက်အလက်များကို ဖျောက်ထားမှာဖြစ်ပြီး ဖျက်ပစ်ထားတာ မဟုတ်ပါ။"</string>
+    <string name="batch_delete_multiple_accounts_confirmation" msgid="5189722181586680185">"ဒီအဆက်အသွယ်များတွင် အကောင့်အများအပြား၏ အချက်အလက်များ ပါဝင်ပါသည်။ ဖတ်ရန်အတွက်သာ အကောင့်များမှ အချက်အလက်များကို ဖျောက်ထားမှာဖြစ်ပြီး ဖျက်ပစ်ထားတာ မဟုတ်ပါ"</string>
     <string name="multipleContactDeleteConfirmation" msgid="938900978442960800">"ဤအဆက်အသွယ်အားဖျက်ခြင်းကြောင့် တခြားအကောင့်များမှ အချက်အလက်များလည်း ပျက်ပါလိမ့်မည်"</string>
     <string name="deleteConfirmation" msgid="811706994761610640">"ဒီလိပ်စာကို ဖျက်ပစ်ပါလိမ့်မည်"</string>
     <string name="menu_discard" msgid="6854657936970228164">"အပြောင်းအလဲများ စွန့်ပစ်ရန်"</string>
@@ -94,20 +101,20 @@
     <string name="contactSavedErrorToast" msgid="3207250533172944892">"လိပ်စာပြောင်းလဲမှုအား သိမ်းဆည်းလို့မရပါ"</string>
     <string name="groupSavedToast" msgid="1168756874239833756">"အုပ်စုသိမ်းဆည်ပြီးပါပြီ"</string>
     <string name="groupSavedErrorToast" msgid="7984466936615304740">"အုပ်စုအတွက် ထပ်ပြင်မှုများဟာ သိမ်းဆည်းလို့မရပါ"</string>
-  <plurals name="listTotalPhoneContacts">
-    <item quantity="one" msgid="3015357862286673986">"ဖုန်းနံပါတ်ပါသော လိပ်စာ၁ခု"</item>
-    <item quantity="other" msgid="3299954047880968205">"<xliff:g id="COUNT">%d</xliff:g> ဖုန်းနံပါတ်ပါသော လိပ်စာများ"</item>
-  </plurals>
+    <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
+      <item quantity="other">ဖုန်းနံပါတ်များပါသောအဆက်အသွယ်<xliff:g id="COUNT">%d</xliff:g>ခု</item>
+      <item quantity="one">ဖုန်းနံပါတ်ပါသောအဆက်အသွယ်1ခု</item>
+    </plurals>
     <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"ဖုန်းနံပါတ်ပါသော လိပ်စာများမရှိပါ"</string>
-  <plurals name="listFoundAllContacts">
-    <item quantity="one" msgid="5517063038754171134">"၁ခုတွေ့ရှိ"</item>
-    <item quantity="other" msgid="3852668542926965042">"<xliff:g id="COUNT">%d</xliff:g> ခု တွေ့ရှိ"</item>
-  </plurals>
+    <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ခု တွေ့ရှိသည်</item>
+      <item quantity="one">1ခု တွေ့ရှိသည်</item>
+    </plurals>
     <string name="listFoundAllContactsZero" msgid="922980883593159444">"အဆက်အသွယ်များမရှိ"</string>
-  <plurals name="searchFoundContacts">
-    <item quantity="one" msgid="4826918429708286628">"၁ခုတွေ့ရှိ"</item>
-    <item quantity="other" msgid="7988132539476575389">"<xliff:g id="COUNT">%d</xliff:g> ခု တွေ့ရှိ"</item>
-  </plurals>
+    <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ခုတွေ့ရှိသည်</item>
+      <item quantity="one">1ခု တွေ့ရှိသည်</item>
+    </plurals>
     <string name="all_contacts_tab_label" msgid="6250372293594147703">"ဆက်သွယ်အားလုံး"</string>
     <string name="favorites_tab_label" msgid="1524869648904016414">"အကြိုက်ဆုံး"</string>
     <string name="callBack" msgid="5498224409038809224">"ပြန်ခေါ်ပါ"</string>
@@ -144,9 +151,6 @@
     <string name="pick_new_photo" msgid="9122450996263688237">"ပုံသစ်ရွေးရန်"</string>
     <string name="locale_change_in_progress" msgid="7583992153091537467">"ဘာသာစကားပြောင်းမှုနဲ့ ကိုက်ညီအောင် အဆက်အသွယ်စာရင်းအား ပြင်ဆင်နေပါသည်"</string>
     <string name="upgrade_in_progress" msgid="474511436863451061">"အဆက်အသွယ်စာရင်းအား ပြုပြင်နေစဉ်"</string>
-    <string name="upgrade_out_of_memory" msgid="1209994418877625940">"အဆက်အသွယ်များမှာ အဆင့်မြင့်တင်ခြင်း လုပ်ဆောင်ခံရဖို့ ပြုလုပ်နေစဉ် ဖြစ်ပါသည်။\n\nအဆင့်မြင့်ခြင်း အလုပ်ဟာ ယေဘုယျ ဖုန်းထဲမှ သိုလှောင်မှုနေရာ <xliff:g id="SIZE_IN_MEGABYTES">%s</xliff:g> MB လိုအပ်ပါသည်။\n\nအောက်ပါများထဲမှ တစ်ခုကိုရွေးပါ:"</string>
-    <string name="upgrade_out_of_memory_uninstall" msgid="1721798828992091432">"တချို့အပ်ပလီကေးရှင်းများအား ထုတ်ပစ်ရန်"</string>
-    <string name="upgrade_out_of_memory_retry" msgid="8431289830472724609">"အဆင့်မြှင့်ခြင်းအား ပြန်ကြိုးစားရန်"</string>
     <string name="search_results_searching" msgid="3984833028938569930">"ရှာဖွေနေသည်…"</string>
     <string name="menu_display_selected" msgid="6470001164297969034">"ရွေးချယ်ထားသည်ကိုပြပါ"</string>
     <string name="menu_display_all" msgid="8887488642609786198">"အားလုံးကို ပြသရန်"</string>
@@ -160,10 +164,10 @@
     <string name="primary_photo" msgid="8517942231868516999">"အဓိက ဓာတ်ပုံ"</string>
     <string name="description_star" msgid="2605854427360036550">"အနှစ်သက်ဆုံး"</string>
     <string name="edit_contact" msgid="7529281274005689512">"အဆက်အသွယ်အားပြင်ရန်"</string>
-  <plurals name="merge_info">
-    <item quantity="one" msgid="148365587896371969">"မပူးပေါင်းရသေး"</item>
-    <item quantity="other" msgid="425683718017380845">"<xliff:g id="COUNT">%0$d</xliff:g> မူရင်းများမှ ပေါင်းစပ်ထား"</item>
-  </plurals>
+    <plurals name="merge_info" formatted="false" msgid="2489323424994280962">
+      <item quantity="other">ရင်းမြစ် <xliff:g id="COUNT">%0$d</xliff:g> ခုမှ ပူးပေါင်းထားသည်</item>
+      <item quantity="one">မပူးပေါင်းပါ</item>
+    </plurals>
     <string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"လက်ရှိလိပ်စာအား ရွေးထားသောလိပ်စာနှင့် ပေါင်းမည်လား"</string>
     <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"ရွေးထားသော လိပ်စာအား ပြင်ဆင်ခြင်းသို့ပြောင်းမလား? သင် အခုထိ ရိုက်ထားသော စာများအားလုံး ကူးယူပြီးဖြစ်ပါလိမ့်မည်"</string>
     <string name="menu_copyContact" msgid="1573960845106822639">"ကျွန်ုပ်၏လိပ်စာများထဲ ထည့်ပါ"</string>
@@ -172,7 +176,7 @@
     <string name="list_filter_custom" msgid="8910173055702057002">"မိမိစိတ်ကြိုက်"</string>
     <string name="activity_title_settings" msgid="5464130076132770781">"အပြင်အဆင်များ"</string>
     <string name="menu_settings" msgid="377929915873428211">"အပြင်အဆင်များ"</string>
-    <string name="menu_help" msgid="5123887102216637725">"အကူအညီ"</string>
+    <string name="menu_help" msgid="1680178646764069976">"အကူအညီ &amp;amp၊ တုံ့ပြန်ချက်"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"ပြသမှုအတွက်ရွေးစရာများ"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="non_phone_caption" msgid="1541655052330027380">"ဖုန်းနံပါတ်"</string>
@@ -188,19 +192,19 @@
     <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"အဆက်အသွယ်များ တင်သွင်းပါ"</string>
     <string name="create_group_dialog_title" msgid="6874527142828424475">"အုပ်စုသစ်ပြုလုပ်ရန်"</string>
     <string name="create_group_item_label" msgid="4411981763169654825">"အုပ်စုအသစ်ပြုလုပ်ရန်"</string>
-  <plurals name="num_groups_in_account">
-    <item quantity="one" msgid="2944819210288517794">"၁ အုပ်စု"</item>
-    <item quantity="other" msgid="1276758425904917367">"<xliff:g id="COUNT">%0$d</xliff:g> အုပ်စု"</item>
-  </plurals>
+    <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
+      <item quantity="other">အုပ်စု <xliff:g id="COUNT">%0$d</xliff:g>စု</item>
+      <item quantity="one">အုပ်စု 1စု</item>
+    </plurals>
     <string name="delete_group_dialog_message" msgid="7586856514337560529">"\"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\" အုပ်စုကို ဖျက်ပစ်ပါမလား? (လိပ်စာများ ကိုယ်တိုင်တော့ ပျက်သွားမည်မဟုတ်ပါ)"</string>
-  <plurals name="num_contacts_in_group">
-    <item quantity="one" msgid="1352418549951013448">"<xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>မှ <xliff:g id="COUNT_0">%1$d</xliff:g> ယောက်"</item>
-    <item quantity="other" msgid="8146027769011086349">"<xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>မှ <xliff:g id="COUNT_0">%1$d</xliff:g> ယောက်"</item>
-  </plurals>
-  <plurals name="group_list_num_contacts_in_group">
-    <item quantity="one" msgid="3323065321661972446">"<xliff:g id="COUNT">%1$d</xliff:g> ယောက်"</item>
-    <item quantity="other" msgid="6251996206137048525">"<xliff:g id="COUNT">%1$d</xliff:g> ယောက်"</item>
-  </plurals>
+    <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
+      <item quantity="other"><xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g> မှ လူ<xliff:g id="COUNT_2">%1$d</xliff:g> ယောက်</item>
+      <item quantity="one"><xliff:g id="ACCOUNT_TYPE_1">%2$s</xliff:g> မှ လူ<xliff:g id="COUNT_0">%1$d</xliff:g> ယောက်</item>
+    </plurals>
+    <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
+      <item quantity="other">လူ <xliff:g id="COUNT_1">%1$d</xliff:g> ယောက်</item>
+      <item quantity="one">လူ <xliff:g id="COUNT_0">%1$d</xliff:g> ယောက်</item>
+    </plurals>
     <string name="toast_join_with_empty_contact" msgid="2238581529864542985">"တခြားတစ်ခုနှင့် မပေါင်းခင် အဆက်အသွယ်နာမည်ကို အရင်ရိုက်ပါ"</string>
     <string name="copy_text" msgid="3257145021583508761">"ခဏကူးယူထားပါ"</string>
     <string name="set_default" msgid="4417505153468300351">"ပုံသေအဖြစ် သတ်မှတ်ခြင်း"</string>
@@ -264,4 +268,5 @@
     <string name="content_description_recent_call" msgid="5183800406316723676">"မကြာမီက ခေါ်ဆိုမှု။ <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. ပြန်ခေါ်ရန် ကလစ်ပါ"</string>
     <string name="message_from_you_prefix" msgid="7180706529908434482">"သင်: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
     <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"အီးမေးအကွက် သို့မဟုတ် ဖုန်းနံပါတ် အကွက်တွင် တစ်ခြားသူ၏ Hangouts  အမှတ်သညာအား သင်ရိုက်ထည့်သည့်အခါ Hangouts ပိုမိုလွယ်ကူကောင်းမွန်စွာ အလုပ်လုပ်သည်။"</string>
+    <string name="compact_editor_more_fields" msgid="2874181192382284115">"နေရာပိုချဲ့ရန်"</string>
 </resources>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index 0184771..94a0e31 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -46,6 +46,7 @@
     <string name="description_action_menu_add_star" msgid="3327186327234177456">"Lagt til i favoritter"</string>
     <string name="menu_editContact" msgid="9042415603857662633">"Rediger"</string>
     <string name="menu_deleteContact" msgid="6788644058868189393">"Slett"</string>
+    <string name="menu_change_photo" msgid="7769177631511496210">"Endre bilde"</string>
     <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Plassér på startsiden"</string>
     <string name="menu_call" msgid="3992595586042260618">"Ring kontakt"</string>
     <string name="menu_sendSMS" msgid="5535886767547006515">"Send SMS til kontakt"</string>
@@ -56,17 +57,23 @@
     <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Legg til gruppe"</string>
     <string name="splitConfirmation_title" msgid="633640935430370530">"Dele opp kontakt?"</string>
     <string name="splitConfirmation" msgid="740190210499587175">"Denne kontakten kommer til å deles opp i flere kontakter."</string>
-    <string name="menu_joinAggregate" msgid="5027981918265667970">"Foren"</string>
+    <string name="menu_joinAggregate" msgid="4050157483569357666">"Slå sammen"</string>
     <string name="titleJoinContactDataWith" msgid="7684875775798635354">"Slå sammen kontakter"</string>
     <string name="blurbJoinContactDataWith" msgid="8736488417422708236">"Velg kontakten du vil slå sammen med <xliff:g id="NAME">%s</xliff:g>:"</string>
     <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Vis alle kontakter"</string>
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Forslag"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Alle kontakter"</string>
-    <string name="contactsJoinedMessage" msgid="7208148163607047389">"Kontaktene er forent"</string>
+    <string name="contactsJoinedMessage" msgid="656936718666768589">"Kontaktene er slått sammen"</string>
+    <string name="contacts_deleted_toast" msgid="286851430992788215">"Kontaktene er slettet"</string>
     <string name="menu_set_ring_tone" msgid="8728345772068064946">"Angi ringetone"</string>
     <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Alle samtaler til talepost"</string>
     <string name="readOnlyContactWarning" msgid="7808825687289848259">"Du kan ikke slette kontakter fra skrivebeskyttede kontoer, men du kan skjule dem i kontaktlisten."</string>
     <string name="readOnlyContactDeleteConfirmation" msgid="2137170726670196909">"Denne kontakten inneholder informasjon fra flere kontoer. Informasjon fra skrivebeskyttede kontoer vil bli skjult i kontaktlistene, ikke slettet."</string>
+    <string name="batch_merge_single_contact_warning" msgid="982585201970392110">"Du trenger minst to valgte kontakter for å utføre en sammenslåing."</string>
+    <string name="batch_merge_confirmation" msgid="8551299480317422420">"De valgte kontaktene slås sammen til én enkelt kontakt."</string>
+    <string name="batch_delete_confirmation" msgid="2564172328268885394">"De valgte kontaktene blir slettet."</string>
+    <string name="batch_delete_read_only_contact_confirmation" msgid="6614878716815412523">"Informasjon fra skrivebeskyttede kontoer blir skjult i kontaktlistene dine, ikke slettet."</string>
+    <string name="batch_delete_multiple_accounts_confirmation" msgid="5189722181586680185">"Disse kontaktene inneholder informasjon fra flere kontoer. Informasjon fra skrivebeskyttede kontoer blir skjult i kontaktlistene dine, ikke slettet."</string>
     <string name="multipleContactDeleteConfirmation" msgid="938900978442960800">"Sletter du denne kontakten, vil du slette informasjon fra flere kontoer."</string>
     <string name="deleteConfirmation" msgid="811706994761610640">"Denne kontakten vil bli slettet."</string>
     <string name="menu_discard" msgid="6854657936970228164">"Forkast endringene"</string>
@@ -94,20 +101,20 @@
     <string name="contactSavedErrorToast" msgid="3207250533172944892">"Kunne ikke lagre kontaktendringene."</string>
     <string name="groupSavedToast" msgid="1168756874239833756">"Gruppe er lagret."</string>
     <string name="groupSavedErrorToast" msgid="7984466936615304740">"Kunne ikke lagre gruppeendringer."</string>
-  <plurals name="listTotalPhoneContacts">
-    <item quantity="one" msgid="3015357862286673986">"1 kontakt med telefonnummer"</item>
-    <item quantity="other" msgid="3299954047880968205">"<xliff:g id="COUNT">%d</xliff:g> kontakter med telefonnumre"</item>
-  </plurals>
+    <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> kontakter med telefonnumre</item>
+      <item quantity="one">1 kontakt med telefonnummer</item>
+    </plurals>
     <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"Ingen kontakter med telefonnummer"</string>
-  <plurals name="listFoundAllContacts">
-    <item quantity="one" msgid="5517063038754171134">"1 funnet"</item>
-    <item quantity="other" msgid="3852668542926965042">"<xliff:g id="COUNT">%d</xliff:g> funnet"</item>
-  </plurals>
+    <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> er funnet</item>
+      <item quantity="one">1 er funnet</item>
+    </plurals>
     <string name="listFoundAllContactsZero" msgid="922980883593159444">"Ingen kontakter"</string>
-  <plurals name="searchFoundContacts">
-    <item quantity="one" msgid="4826918429708286628">"1 funnet"</item>
-    <item quantity="other" msgid="7988132539476575389">"<xliff:g id="COUNT">%d</xliff:g> funnet"</item>
-  </plurals>
+    <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> er funnet</item>
+      <item quantity="one">1 er funnet</item>
+    </plurals>
     <string name="all_contacts_tab_label" msgid="6250372293594147703">"Alle kontaktene"</string>
     <string name="favorites_tab_label" msgid="1524869648904016414">"Favoritter"</string>
     <string name="callBack" msgid="5498224409038809224">"Ring tilbake"</string>
@@ -144,9 +151,6 @@
     <string name="pick_new_photo" msgid="9122450996263688237">"Velg et nytt bilde"</string>
     <string name="locale_change_in_progress" msgid="7583992153091537467">"Kontaktlisten er oppdatert med nytt språk."</string>
     <string name="upgrade_in_progress" msgid="474511436863451061">"Kontaktlisten er under oppdatering."</string>
-    <string name="upgrade_out_of_memory" msgid="1209994418877625940">"Oppgradering av kontakter pågår.\n\nOppgraderingsprosessen krever omtrent <xliff:g id="SIZE_IN_MEGABYTES">%s</xliff:g> MB intern lagringsplass.\n\nVelg ett av følgende alternativer:"</string>
-    <string name="upgrade_out_of_memory_uninstall" msgid="1721798828992091432">"Avinstaller noen apper"</string>
-    <string name="upgrade_out_of_memory_retry" msgid="8431289830472724609">"Prøv å oppgradere på nytt"</string>
     <string name="search_results_searching" msgid="3984833028938569930">"Søker …"</string>
     <string name="menu_display_selected" msgid="6470001164297969034">"Vis valgte"</string>
     <string name="menu_display_all" msgid="8887488642609786198">"Vis alle"</string>
@@ -160,10 +164,10 @@
     <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>
-  <plurals name="merge_info">
-    <item quantity="one" msgid="148365587896371969">"ikke slått sammen"</item>
-    <item quantity="other" msgid="425683718017380845">"sammenslått fra <xliff:g id="COUNT">%0$d</xliff:g> kilder"</item>
-  </plurals>
+    <plurals name="merge_info" formatted="false" msgid="2489323424994280962">
+      <item quantity="other">slått sammen fra <xliff:g id="COUNT">%0$d</xliff:g> kilder</item>
+      <item quantity="one">ikke slått sammen</item>
+    </plurals>
     <string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"Slå sammen gjeldende kontakt med valgt kontakt?"</string>
     <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Bytt til redigering av gjeldende kontakt? Informasjonen du har lagt til så langt blir kopiert."</string>
     <string name="menu_copyContact" msgid="1573960845106822639">"Kopiér til mine kontakter"</string>
@@ -172,7 +176,7 @@
     <string name="list_filter_custom" msgid="8910173055702057002">"Egendefinert"</string>
     <string name="activity_title_settings" msgid="5464130076132770781">"Innstillinger"</string>
     <string name="menu_settings" msgid="377929915873428211">"Innstillinger"</string>
-    <string name="menu_help" msgid="5123887102216637725">"Hjelp"</string>
+    <string name="menu_help" msgid="1680178646764069976">"Hjelp og tilbakemelding"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"Vis grupper"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="non_phone_caption" msgid="1541655052330027380">"Telefonnummer"</string>
@@ -188,19 +192,19 @@
     <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Importer kontakter"</string>
     <string name="create_group_dialog_title" msgid="6874527142828424475">"Opprett ny gruppe"</string>
     <string name="create_group_item_label" msgid="4411981763169654825">"Opprett en ny gruppe"</string>
-  <plurals name="num_groups_in_account">
-    <item quantity="one" msgid="2944819210288517794">"Én gruppe"</item>
-    <item quantity="other" msgid="1276758425904917367">"<xliff:g id="COUNT">%0$d</xliff:g> grupper"</item>
-  </plurals>
+    <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
+      <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> grupper</item>
+      <item quantity="one">1 gruppe</item>
+    </plurals>
     <string name="delete_group_dialog_message" msgid="7586856514337560529">"Vil du slette gruppen <xliff:g id="GROUP_LABEL">%1$s</xliff:g>? (Selve kontaktene blir ikke slettet.)"</string>
-  <plurals name="num_contacts_in_group">
-    <item quantity="one" msgid="1352418549951013448">"<xliff:g id="COUNT_0">%1$d</xliff:g> person fra <xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>"</item>
-    <item quantity="other" msgid="8146027769011086349">"<xliff:g id="COUNT_0">%1$d</xliff:g> personer fra <xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>"</item>
-  </plurals>
-  <plurals name="group_list_num_contacts_in_group">
-    <item quantity="one" msgid="3323065321661972446">"<xliff:g id="COUNT">%1$d</xliff:g> person"</item>
-    <item quantity="other" msgid="6251996206137048525">"<xliff:g id="COUNT">%1$d</xliff:g> personer"</item>
-  </plurals>
+    <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> personer fra <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> person fra <xliff:g id="ACCOUNT_TYPE_1">%2$s</xliff:g></item>
+    </plurals>
+    <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
+      <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> personer</item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> person</item>
+    </plurals>
     <string name="toast_join_with_empty_contact" msgid="2238581529864542985">"Skriv inn kontaktens navn før du slår vedkommende sammen med en annen."</string>
     <string name="copy_text" msgid="3257145021583508761">"Kopier til utklippstavlen"</string>
     <string name="set_default" msgid="4417505153468300351">"Angi som standard"</string>
@@ -264,4 +268,5 @@
     <string name="content_description_recent_call" msgid="5183800406316723676">"nylig oppringning. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. klikk for å ringe tilbake"</string>
     <string name="message_from_you_prefix" msgid="7180706529908434482">"Du: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
     <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"Hangouts fungerer bedre når du går inn i personenes Hangouts-identifikatorer i e-postfeltet eller telefonfeltet."</string>
+    <string name="compact_editor_more_fields" msgid="2874181192382284115">"Flere felt"</string>
 </resources>
diff --git a/res/values-ne-rNP/strings.xml b/res/values-ne-rNP/strings.xml
index 685d3bf..92363a6 100644
--- a/res/values-ne-rNP/strings.xml
+++ b/res/values-ne-rNP/strings.xml
@@ -46,6 +46,7 @@
     <string name="description_action_menu_add_star" msgid="3327186327234177456">"मनपर्नेमा थपियो"</string>
     <string name="menu_editContact" msgid="9042415603857662633">"सम्पादन गर्नुहोस्"</string>
     <string name="menu_deleteContact" msgid="6788644058868189393">"मेट्नुहोस्"</string>
+    <string name="menu_change_photo" msgid="7769177631511496210">"तस्बिर परिवर्तन गर्नुहोस्"</string>
     <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"होम स्क्रिनमा राख्नुहोस्"</string>
     <string name="menu_call" msgid="3992595586042260618">"सम्पर्कलाई कल गर्नुहोस्"</string>
     <string name="menu_sendSMS" msgid="5535886767547006515">"पाठ सम्पर्क"</string>
@@ -56,17 +57,23 @@
     <string name="menu_new_group_action_bar" msgid="3520232877587377175">"समूह थप्नुहोस्"</string>
     <string name="splitConfirmation_title" msgid="633640935430370530">"सम्पर्क अलग गर्ने हो?"</string>
     <string name="splitConfirmation" msgid="740190210499587175">"यो सम्पर्क अनेक सम्पर्कहरूमा अलग गरिने छ।"</string>
-    <string name="menu_joinAggregate" msgid="5027981918265667970">"सामेल हुनुहोस्"</string>
+    <string name="menu_joinAggregate" msgid="4050157483569357666">"मर्ज गर्नुहोस्"</string>
     <string name="titleJoinContactDataWith" msgid="7684875775798635354">"सम्पर्कहरू जोड्नुहोस्"</string>
     <string name="blurbJoinContactDataWith" msgid="8736488417422708236">"तपाईँले सहभागी हुन चाहनु भएको सम्पर्क <xliff:g id="NAME">%s</xliff:g>: चयन गर्नुहोस्"</string>
     <string name="showAllContactsJoinItem" msgid="2189695051430392383">"सबै सम्पर्कहरू देखाउनुहोस्"</string>
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"सुझाव गरिएका सम्पर्कहरू"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"सबै सम्पर्कहरू"</string>
-    <string name="contactsJoinedMessage" msgid="7208148163607047389">"सहभागी भएका सम्पर्कहरू"</string>
+    <string name="contactsJoinedMessage" msgid="656936718666768589">"सम्पर्कहरू मर्ज गरिए"</string>
+    <string name="contacts_deleted_toast" msgid="286851430992788215">"सम्पर्कहरू मेटाइए"</string>
     <string name="menu_set_ring_tone" msgid="8728345772068064946">"रिङ्टोन मिलाउनुहोस्"</string>
     <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"भ्वाइसमेलमा सम्पूर्ण कल"</string>
     <string name="readOnlyContactWarning" msgid="7808825687289848259">"तपाईँले पढ्ने-मात्र खाताबाट सम्पर्कहरू हटाउन सक्नु हुन्न, तर तपाईँको सम्पर्क सूचीहरूबाट लुकाउन सक्नु हुन्छ।"</string>
     <string name="readOnlyContactDeleteConfirmation" msgid="2137170726670196909">"यो सम्पर्कमा जानकारीहरू धेरै खाताहरूबाट उपलब्ध छन्। पढ्ने-मात्र खातामा भएका जानकारीहरू तपाईँको सम्पर्क सूचीमा लुकेका हुने छन्, हटाइने छैन।"</string>
+    <string name="batch_merge_single_contact_warning" msgid="982585201970392110">"तपाईंले मर्ज गर्नको लागि कम्तिमा दुई सम्पर्कहरू चयन गर्न आवश्यक छ।"</string>
+    <string name="batch_merge_confirmation" msgid="8551299480317422420">"चयन गरिएका सम्पर्कहरू एकल सम्पर्कमा मर्ज गरिनेछ।"</string>
+    <string name="batch_delete_confirmation" msgid="2564172328268885394">"चयन गरिएका सम्पर्कहरू मेटिने छन्।"</string>
+    <string name="batch_delete_read_only_contact_confirmation" msgid="6614878716815412523">"पढ्ने-मात्र खाताहरूबाट जानकारी तपाईँको सम्पर्क सूचीमा लुकाइने छन्, मेटिने छैनन्।"</string>
+    <string name="batch_delete_multiple_accounts_confirmation" msgid="5189722181586680185">"यी सम्पर्कहरूले धेरै खाताहरूबाट जानकारी समावेश गर्दछ। पढ्ने-मात्र खाताहरूबाट जानकारी तपाईँको सम्पर्क सूचीमा लुकाइने छन्, मेटिने छैनन्।"</string>
     <string name="multipleContactDeleteConfirmation" msgid="938900978442960800">"यो सम्पर्कलाइ हटाउनाले धेरै खाताहरूबाट जानकारीहरू नष्ट गर्ने छ।"</string>
     <string name="deleteConfirmation" msgid="811706994761610640">"यो सम्पर्क हटाइने छ।"</string>
     <string name="menu_discard" msgid="6854657936970228164">"परिवर्तनहरू रद्द गर्नुहोस्"</string>
@@ -94,20 +101,20 @@
     <string name="contactSavedErrorToast" msgid="3207250533172944892">"सम्पर्क परिवर्तनहरू सुरक्षित गर्न सकेन।"</string>
     <string name="groupSavedToast" msgid="1168756874239833756">"समूह बचत गरियो।"</string>
     <string name="groupSavedErrorToast" msgid="7984466936615304740">"समूह परिवर्तनहरू बचत गर्न सकेन।"</string>
-  <plurals name="listTotalPhoneContacts">
-    <item quantity="one" msgid="3015357862286673986">"फोन नम्बरसहित १ सम्पर्क"</item>
-    <item quantity="other" msgid="3299954047880968205">"<xliff:g id="COUNT">%d</xliff:g> फोन नम्बरसहित सम्पर्कहरू"</item>
-  </plurals>
+    <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g>सम्पर्कहरू फोन नम्बर सहित</item>
+      <item quantity="one">फोन नम्बर सहित 1 सम्पर्क</item>
+    </plurals>
     <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"फोन नम्बर भएका कुनै सम्पर्कहरू छैनन्"</string>
-  <plurals name="listFoundAllContacts">
-    <item quantity="one" msgid="5517063038754171134">"१ भेटियो"</item>
-    <item quantity="other" msgid="3852668542926965042">"<xliff:g id="COUNT">%d</xliff:g> भेट्टियो"</item>
-  </plurals>
+    <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> फेला पर्‍यो</item>
+      <item quantity="one">१ फेला पर्‍यो</item>
+    </plurals>
     <string name="listFoundAllContactsZero" msgid="922980883593159444">"कुनै सम्पर्कहरू छैनन्।"</string>
-  <plurals name="searchFoundContacts">
-    <item quantity="one" msgid="4826918429708286628">"१ भेट्टाइयो"</item>
-    <item quantity="other" msgid="7988132539476575389">"<xliff:g id="COUNT">%d</xliff:g> भेटाइयो"</item>
-  </plurals>
+    <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> फेला पर्‍यो</item>
+      <item quantity="one">1 फेला पर्‍यो</item>
+    </plurals>
     <string name="all_contacts_tab_label" msgid="6250372293594147703">"सबै सम्पर्कहरू"</string>
     <string name="favorites_tab_label" msgid="1524869648904016414">"मनपर्ने"</string>
     <string name="callBack" msgid="5498224409038809224">"कल फर्काउने"</string>
@@ -144,9 +151,6 @@
     <string name="pick_new_photo" msgid="9122450996263688237">"नयाँ तस्बिर चयन गर्नुहोस्"</string>
     <string name="locale_change_in_progress" msgid="7583992153091537467">"भाषा परिवर्तन प्रतिबिम्बित गर्नका लागि सम्पर्क सूची अद्यावधिक गरिदैं छ।"</string>
     <string name="upgrade_in_progress" msgid="474511436863451061">"सम्पर्क सूची अद्यावधिक हुदै छ।"</string>
-    <string name="upgrade_out_of_memory" msgid="1209994418877625940">"सम्पर्कहरू अद्यावधिक हुने प्रक्रियामा छन्।  \n \n अद्यावधिक प्रक्रिया लगभग  <xliff:g id="SIZE_IN_MEGABYTES">%s</xliff:g> आन्तरिक भण्डारण  MB आवश्यकता पर्छ ।  \n \n निम्न विकल्पहरू मध्ये कुनै छान्नुहोस्:"</string>
-    <string name="upgrade_out_of_memory_uninstall" msgid="1721798828992091432">"केही अनुप्रयोगहरू हटाउनुहोस्"</string>
-    <string name="upgrade_out_of_memory_retry" msgid="8431289830472724609">"अद्यावधिक गर्न पुनःप्रयास गर्नुहोस्"</string>
     <string name="search_results_searching" msgid="3984833028938569930">"खोजी कार्य गर्दै..."</string>
     <string name="menu_display_selected" msgid="6470001164297969034">"चयनित देखाउनुहोस्"</string>
     <string name="menu_display_all" msgid="8887488642609786198">"सबै देखाउनुहोस्"</string>
@@ -160,10 +164,10 @@
     <string name="primary_photo" msgid="8517942231868516999">"प्राथमिक तस्बिर"</string>
     <string name="description_star" msgid="2605854427360036550">"मनपर्ने"</string>
     <string name="edit_contact" msgid="7529281274005689512">"सम्पर्क सम्पादन गर्नुहोस्"</string>
-  <plurals name="merge_info">
-    <item quantity="one" msgid="148365587896371969">"मर्ज गरिएको छैन"</item>
-    <item quantity="other" msgid="425683718017380845">"<xliff:g id="COUNT">%0$d</xliff:g> स्रोतबाट मिसाइएको"</item>
-  </plurals>
+    <plurals name="merge_info" formatted="false" msgid="2489323424994280962">
+      <item quantity="other"> यस <xliff:g id="COUNT">%0$d</xliff:g> स्रोतबाट मर्ज गरियो</item>
+      <item quantity="one">मर्ज गरिएको छैन</item>
+    </plurals>
     <string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"हालको सम्पर्कलाई चयनित सम्पर्कसँग जोड्ने हो?"</string>
     <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"चयनित सम्पर्कको सम्पादन गर्नका लागि स्विच गर्ने हो? तपाईँले अहिलेसम्म प्रविष्टि गरिएका जानकारीहरू प्रतिलिप हुने छन्।"</string>
     <string name="menu_copyContact" msgid="1573960845106822639">"मेरा सम्पर्कहरूमा प्रतिलिपि गर्नुहोस्"</string>
@@ -172,7 +176,7 @@
     <string name="list_filter_custom" msgid="8910173055702057002">"अनुकूलन"</string>
     <string name="activity_title_settings" msgid="5464130076132770781">"सेटिङहरू"</string>
     <string name="menu_settings" msgid="377929915873428211">"सेटिङहरू"</string>
-    <string name="menu_help" msgid="5123887102216637725">"मद्दत"</string>
+    <string name="menu_help" msgid="1680178646764069976">"मद्दत &amp; प्रतिक्रिया"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"विकल्पहरू प्रदर्शन गर्नुहोस्"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g> , <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="non_phone_caption" msgid="1541655052330027380">"फोन नम्बर"</string>
@@ -188,19 +192,19 @@
     <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"सम्पर्क आयात गर्नुहोस्"</string>
     <string name="create_group_dialog_title" msgid="6874527142828424475">"नयाँ समूह बनाउनुहोस्"</string>
     <string name="create_group_item_label" msgid="4411981763169654825">"नयाँ समूह बनाउनुहोस्"</string>
-  <plurals name="num_groups_in_account">
-    <item quantity="one" msgid="2944819210288517794">"१ समूह"</item>
-    <item quantity="other" msgid="1276758425904917367">"<xliff:g id="COUNT">%0$d</xliff:g> समूहहरू"</item>
-  </plurals>
+    <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
+      <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> समूहहरू</item>
+      <item quantity="one">1 समूह</item>
+    </plurals>
     <string name="delete_group_dialog_message" msgid="7586856514337560529">"\"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\" समूह हटाउने हो? (सम्पर्कहरू आफैँ हट्दैनन्।)"</string>
-  <plurals name="num_contacts_in_group">
-    <item quantity="one" msgid="1352418549951013448">"<xliff:g id="COUNT_0">%1$d</xliff:g> व्यक्ति <xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g> बाट"</item>
-    <item quantity="other" msgid="8146027769011086349">"<xliff:g id="COUNT_0">%1$d</xliff:g> मानिसहरू <xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g> बाट"</item>
-  </plurals>
-  <plurals name="group_list_num_contacts_in_group">
-    <item quantity="one" msgid="3323065321661972446">"<xliff:g id="COUNT">%1$d</xliff:g> व्यक्ति"</item>
-    <item quantity="other" msgid="6251996206137048525">"<xliff:g id="COUNT">%1$d</xliff:g> मानिसहरू"</item>
-  </plurals>
+    <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> व्यक्तिहरू <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g> बाट</item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> व्यक्ति <xliff:g id="ACCOUNT_TYPE_1">%2$s</xliff:g> बाट</item>
+    </plurals>
+    <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
+      <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> व्यक्तिहरु</item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> व्यक्ति</item>
+    </plurals>
     <string name="toast_join_with_empty_contact" msgid="2238581529864542985">"अर्कोसँग सामेल हुनुअघि सम्पर्क नाम टाइप गर्नुहोस्।"</string>
     <string name="copy_text" msgid="3257145021583508761">"क्लिपबोर्डमा प्रतिलिपि गर्नुहोस्"</string>
     <string name="set_default" msgid="4417505153468300351">"पूर्वनिर्धारित मिलाउनुहोस्"</string>
@@ -264,4 +268,5 @@
     <string name="content_description_recent_call" msgid="5183800406316723676">"हालैको कल। <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. कल फिर्ता गर्न क्लिक गर्नुहोस्"</string>
     <string name="message_from_you_prefix" msgid="7180706529908434482">"तपाईँ: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
     <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"तपाईंले इमेल क्षेत्र वा फोन क्षेत्रमा व्यक्तिको Hangouts परिचायक प्रविष्ट गर्नु हुँदा Hangouts राम्रो काम गर्दछ।"</string>
+    <string name="compact_editor_more_fields" msgid="2874181192382284115">"थप क्षेत्र"</string>
 </resources>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index a129ecb..6c8d36e 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -46,6 +46,7 @@
     <string name="description_action_menu_add_star" msgid="3327186327234177456">"Aan favorieten toegevoegd"</string>
     <string name="menu_editContact" msgid="9042415603857662633">"Bewerken"</string>
     <string name="menu_deleteContact" msgid="6788644058868189393">"Verwijderen"</string>
+    <string name="menu_change_photo" msgid="7769177631511496210">"Foto wijzigen"</string>
     <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Op startscherm plaatsen"</string>
     <string name="menu_call" msgid="3992595586042260618">"Contact bellen"</string>
     <string name="menu_sendSMS" msgid="5535886767547006515">"Sms\'en naar contact"</string>
@@ -56,17 +57,23 @@
     <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Groep toevoegen"</string>
     <string name="splitConfirmation_title" msgid="633640935430370530">"Contact opsplitsen?"</string>
     <string name="splitConfirmation" msgid="740190210499587175">"Dit contact wordt gesplitst in meerdere contacten."</string>
-    <string name="menu_joinAggregate" msgid="5027981918265667970">"Samenvoegen"</string>
+    <string name="menu_joinAggregate" msgid="4050157483569357666">"Samenvoegen"</string>
     <string name="titleJoinContactDataWith" msgid="7684875775798635354">"Contacten samenvoegen"</string>
     <string name="blurbJoinContactDataWith" msgid="8736488417422708236">"Selecteer het contact dat u met <xliff:g id="NAME">%s</xliff:g> wilt samenvoegen:"</string>
     <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Alle contacten weergeven"</string>
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Mogelijke contacten"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Alle contacten"</string>
-    <string name="contactsJoinedMessage" msgid="7208148163607047389">"Contacten zijn samengevoegd"</string>
+    <string name="contactsJoinedMessage" msgid="656936718666768589">"Contacten samengevoegd"</string>
+    <string name="contacts_deleted_toast" msgid="286851430992788215">"Contacten verwijderd"</string>
     <string name="menu_set_ring_tone" msgid="8728345772068064946">"Beltoon instellen"</string>
     <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Alle oproepen naar voicemail"</string>
     <string name="readOnlyContactWarning" msgid="7808825687289848259">"U kunt contacten niet verwijderen uit alleen-lezen-accounts, maar u kunt ze verbergen in uw contactenlijst."</string>
     <string name="readOnlyContactDeleteConfirmation" msgid="2137170726670196909">"Dit contact bevat gegevens uit meerdere accounts. Gegevens uit alleen-lezen accounts worden verborgen in uw contactenlijst, maar niet verwijderd."</string>
+    <string name="batch_merge_single_contact_warning" msgid="982585201970392110">"U moet minimaal twee contacten selecteren om te kunnen samenvoegen."</string>
+    <string name="batch_merge_confirmation" msgid="8551299480317422420">"De geselecteerde contacten worden samengevoegd tot één contact."</string>
+    <string name="batch_delete_confirmation" msgid="2564172328268885394">"De geselecteerde contacten worden verwijderd."</string>
+    <string name="batch_delete_read_only_contact_confirmation" msgid="6614878716815412523">"Gegevens uit alleen-lezen accounts worden verborgen in uw contactenlijst, maar niet verwijderd."</string>
+    <string name="batch_delete_multiple_accounts_confirmation" msgid="5189722181586680185">"Deze contacten bevatten gegevens uit meerdere accounts. Gegevens uit alleen-lezen accounts worden verborgen in uw contactenlijst, maar niet verwijderd."</string>
     <string name="multipleContactDeleteConfirmation" msgid="938900978442960800">"Als u dit contact verwijdert, worden gegevens van meerdere accounts verwijderd."</string>
     <string name="deleteConfirmation" msgid="811706994761610640">"Dit contact wordt verwijderd."</string>
     <string name="menu_discard" msgid="6854657936970228164">"Wijzigingen niet opslaan"</string>
@@ -94,20 +101,20 @@
     <string name="contactSavedErrorToast" msgid="3207250533172944892">"Kan wijzigingen in contact niet opslaan."</string>
     <string name="groupSavedToast" msgid="1168756874239833756">"Groep opgeslagen."</string>
     <string name="groupSavedErrorToast" msgid="7984466936615304740">"Kan wijzigingen in groep niet opslaan."</string>
-  <plurals name="listTotalPhoneContacts">
-    <item quantity="one" msgid="3015357862286673986">"1 contact met telefoonnummer"</item>
-    <item quantity="other" msgid="3299954047880968205">"<xliff:g id="COUNT">%d</xliff:g> contacten met telefoonnummers"</item>
-  </plurals>
+    <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> contacten met telefoonnummers</item>
+      <item quantity="one">1 contact met telefoonnummer</item>
+    </plurals>
     <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"Geen contacten met telefoonnummers"</string>
-  <plurals name="listFoundAllContacts">
-    <item quantity="one" msgid="5517063038754171134">"1 gevonden"</item>
-    <item quantity="other" msgid="3852668542926965042">"<xliff:g id="COUNT">%d</xliff:g> gevonden"</item>
-  </plurals>
+    <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> gevonden</item>
+      <item quantity="one">1 gevonden</item>
+    </plurals>
     <string name="listFoundAllContactsZero" msgid="922980883593159444">"Geen contacten"</string>
-  <plurals name="searchFoundContacts">
-    <item quantity="one" msgid="4826918429708286628">"1 gevonden"</item>
-    <item quantity="other" msgid="7988132539476575389">"<xliff:g id="COUNT">%d</xliff:g> gevonden"</item>
-  </plurals>
+    <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> gevonden</item>
+      <item quantity="one">1 gevonden</item>
+    </plurals>
     <string name="all_contacts_tab_label" msgid="6250372293594147703">"Alle contacten"</string>
     <string name="favorites_tab_label" msgid="1524869648904016414">"Favoriet"</string>
     <string name="callBack" msgid="5498224409038809224">"Terugbellen"</string>
@@ -144,9 +151,6 @@
     <string name="pick_new_photo" msgid="9122450996263688237">"Nieuwe foto selecteren"</string>
     <string name="locale_change_in_progress" msgid="7583992153091537467">"Lijst met contacten wordt bijgewerkt om de gewijzigde taal te weerspiegelen."</string>
     <string name="upgrade_in_progress" msgid="474511436863451061">"Lijst met contactpersonen wordt bijgewerkt."</string>
-    <string name="upgrade_out_of_memory" msgid="1209994418877625940">"Contacten worden bijgewerkt. \n\nVoor het upgradeproces is ongeveer <xliff:g id="SIZE_IN_MEGABYTES">%s</xliff:g> MB interne opslagruimte vereist.\n\nKies een van de volgende opties:"</string>
-    <string name="upgrade_out_of_memory_uninstall" msgid="1721798828992091432">"Verwijder enkele apps"</string>
-    <string name="upgrade_out_of_memory_retry" msgid="8431289830472724609">"Upgrade opnieuw proberen"</string>
     <string name="search_results_searching" msgid="3984833028938569930">"Zoeken..."</string>
     <string name="menu_display_selected" msgid="6470001164297969034">"Selectie weergeven"</string>
     <string name="menu_display_all" msgid="8887488642609786198">"Alles weergeven"</string>
@@ -160,10 +164,10 @@
     <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>
-  <plurals name="merge_info">
-    <item quantity="one" msgid="148365587896371969">"niet samengevoegd"</item>
-    <item quantity="other" msgid="425683718017380845">"samengevoegd uit <xliff:g id="COUNT">%0$d</xliff:g> bronnen"</item>
-  </plurals>
+    <plurals name="merge_info" formatted="false" msgid="2489323424994280962">
+      <item quantity="other">samengevoegd uit <xliff:g id="COUNT">%0$d</xliff:g> bronnen</item>
+      <item quantity="one">niet samengevoegd</item>
+    </plurals>
     <string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"Wilt u het huidige contact samenvoegen met het geselecteerde contact?"</string>
     <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Wilt u overschakelen naar het bewerken van het geselecteerde contact? Gegevens die u tot nu toe heeft ingevoerd, worden gekopieerd."</string>
     <string name="menu_copyContact" msgid="1573960845106822639">"Kopiëren naar mijn contacten"</string>
@@ -172,7 +176,7 @@
     <string name="list_filter_custom" msgid="8910173055702057002">"Aangepast"</string>
     <string name="activity_title_settings" msgid="5464130076132770781">"Instellingen"</string>
     <string name="menu_settings" msgid="377929915873428211">"Instellingen"</string>
-    <string name="menu_help" msgid="5123887102216637725">"Help"</string>
+    <string name="menu_help" msgid="1680178646764069976">"Help en feedback"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"Weergaveopties"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="non_phone_caption" msgid="1541655052330027380">"Telefoonnummer"</string>
@@ -188,19 +192,19 @@
     <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Contacten importeren"</string>
     <string name="create_group_dialog_title" msgid="6874527142828424475">"Nieuwe groep maken"</string>
     <string name="create_group_item_label" msgid="4411981763169654825">"Nieuwe groep maken"</string>
-  <plurals name="num_groups_in_account">
-    <item quantity="one" msgid="2944819210288517794">"1 groep"</item>
-    <item quantity="other" msgid="1276758425904917367">"<xliff:g id="COUNT">%0$d</xliff:g> groepen"</item>
-  </plurals>
+    <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
+      <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> groepen</item>
+      <item quantity="one">1 groep</item>
+    </plurals>
     <string name="delete_group_dialog_message" msgid="7586856514337560529">"De groep \'<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\' verwijderen? (De contacten zelf worden niet verwijderd.)"</string>
-  <plurals name="num_contacts_in_group">
-    <item quantity="one" msgid="1352418549951013448">"<xliff:g id="COUNT_0">%1$d</xliff:g> persoon van <xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>"</item>
-    <item quantity="other" msgid="8146027769011086349">"<xliff:g id="COUNT_0">%1$d</xliff:g> personen van <xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>"</item>
-  </plurals>
-  <plurals name="group_list_num_contacts_in_group">
-    <item quantity="one" msgid="3323065321661972446">"<xliff:g id="COUNT">%1$d</xliff:g> persoon"</item>
-    <item quantity="other" msgid="6251996206137048525">"<xliff:g id="COUNT">%1$d</xliff:g> personen"</item>
-  </plurals>
+    <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> mensen uit <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> persoon uit <xliff:g id="ACCOUNT_TYPE_1">%2$s</xliff:g></item>
+    </plurals>
+    <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
+      <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> mensen</item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> persoon</item>
+    </plurals>
     <string name="toast_join_with_empty_contact" msgid="2238581529864542985">"Geef een contactnaam op voordat u dit contact samenvoegt met een ander contact."</string>
     <string name="copy_text" msgid="3257145021583508761">"Kopiëren naar klembord"</string>
     <string name="set_default" msgid="4417505153468300351">"Standaard instellen"</string>
@@ -264,4 +268,5 @@
     <string name="content_description_recent_call" msgid="5183800406316723676">"recente oproep. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. klik om terug te bellen"</string>
     <string name="message_from_you_prefix" msgid="7180706529908434482">"U: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
     <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"Hangouts werkt beter wanneer u de Hangouts-ID van de betreffende persoon in het veld \'E-mail\' of \'Telefoon\' opgeeft."</string>
+    <string name="compact_editor_more_fields" msgid="2874181192382284115">"Meer velden"</string>
 </resources>
diff --git a/res/values-pa-rIN/strings.xml b/res/values-pa-rIN/strings.xml
new file mode 100644
index 0000000..2e593ad
--- /dev/null
+++ b/res/values-pa-rIN/strings.xml
@@ -0,0 +1,272 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2006 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+ -->
+
+<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="contactsList" msgid="8661624236494819731">"ਸੰਪਰਕ"</string>
+    <string name="shortcutContact" msgid="749243779392912958">"ਸੰਪਰਕ"</string>
+    <string name="shortcutDialContact" msgid="746622101599186779">"ਸਿੱਧਾ ਡਾਇਲ ਕਰੋ"</string>
+    <string name="shortcutMessageContact" msgid="2460337253595976198">"ਸਿੱਧਾ ਸੁਨੇਹਾ"</string>
+    <string name="shortcutActivityTitle" msgid="6642877210643565436">"ਇੱਕ ਸੰਪਰਕ ਸ਼ੌਰਟਕਟ ਚੁਣੋ"</string>
+    <string name="callShortcutActivityTitle" msgid="6065749861423648991">"ਕਾਲ ਕਰਨ ਲਈ ਇੱਕ ਨੰਬਰ ਚੁਣੋ"</string>
+    <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"ਸੁਨੇਹੇ ਲਈ ਇੱਕ ਨੰਬਰ ਚੁਣੋ"</string>
+    <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"ਸੰਪਰਕ ਵਿੱਚ ਜੋੜੋ"</string>
+    <string name="contactPickerActivityTitle" msgid="4301062192337417640">"ਇੱਕ ਸੰਪਰਕ ਚੁਣੋ"</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="editGroupDescription" msgid="6321161304201540561">"ਸਮੂਹ ਦਾ ਸੰਪਾਦਨ ਕਰੋ"</string>
+    <string name="insertGroupDescription" msgid="5658512271662210139">"ਸਮੂਹ ਬਣਾਓ"</string>
+    <string name="contactDetailAbout" msgid="5430408883907061400">"ਇਸਦੇ ਬਾਰੇ"</string>
+    <string name="contactDetailUpdates" msgid="3780588624763446941">"ਅਪਡੇਟਸ"</string>
+    <string name="searchHint" msgid="8482945356247760701">"ਸੰਪਰਕ ਖੋਜੋ"</string>
+    <string name="menu_viewContact" msgid="2795575601596468581">"ਸੰਪਰਕ ਦੇਖੋ"</string>
+    <string name="menu_addStar" msgid="2908478235715404876">"ਮਨਪਸੰਦ ਵਿੱਚ ਜੋੜੋ"</string>
+    <string name="menu_removeStar" msgid="5844227078364227030">"ਮਨਪਸੰਦ ਵਿੱਚੋਂ ਹਟਾਓ"</string>
+    <string name="description_action_menu_remove_star" msgid="4699640108012265178">"ਮਨਪਸੰਦ ਵਿੱਚੋਂ ਹਟਾਇਆ ਗਿਆ"</string>
+    <string name="description_action_menu_add_star" msgid="3327186327234177456">"ਮਨਪਸੰਦ ਵਿੱਚ ਜੋੜਿਆ ਗਿਆ"</string>
+    <string name="menu_editContact" msgid="9042415603857662633">"ਸੰਪਾਦਿਤ ਕਰੋ"</string>
+    <string name="menu_deleteContact" msgid="6788644058868189393">"ਮਿਟਾਓ"</string>
+    <string name="menu_change_photo" msgid="7769177631511496210">"ਫੋਟੋ ਬਦਲੋ"</string>
+    <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"ਹੋਮ ਸਕ੍ਰੀਨ ਤੇ ਰੱਖੋ"</string>
+    <string name="menu_call" msgid="3992595586042260618">"ਸੰਪਰਕ ਨੂੰ ਕਾਲ ਕਰੋ"</string>
+    <string name="menu_sendSMS" msgid="5535886767547006515">"ਟੈਕਸਟ ਸੰਪਰਕ"</string>
+    <string name="menu_splitAggregate" msgid="8368636463748691868">"ਵੱਖ ਕਰੋ"</string>
+    <string name="menu_editGroup" msgid="5062005185370983720">"ਸੰਪਾਦਿਤ ਕਰੋ"</string>
+    <string name="menu_deleteGroup" msgid="3486380004411482874">"ਮਿਟਾਓ"</string>
+    <string name="menu_new_contact_action_bar" msgid="7263362129442119188">"ਸੰਪਰਕ ਜੋੜੋ"</string>
+    <string name="menu_new_group_action_bar" msgid="3520232877587377175">"ਸਮੂਹ ਜੋੜੋ"</string>
+    <string name="splitConfirmation_title" msgid="633640935430370530">"ਕੀ ਸੰਪਰਕ ਵੱਖ ਕਰਨਾ ਹੈ?"</string>
+    <string name="splitConfirmation" msgid="740190210499587175">"ਇਹ ਸੰਪਰਕ ਮਲਟੀਪਲ ਸੰਪਰਕਾਂ ਵਿੱਚ ਵੱਖ ਕੀਤਾ ਜਾਏਗਾ।"</string>
+    <string name="menu_joinAggregate" msgid="4050157483569357666">"ਮਿਲਾਓ"</string>
+    <string name="titleJoinContactDataWith" msgid="7684875775798635354">"ਸੰਪਰਕਾਂ ਵਿੱਚ ਸ਼ਾਮਲ ਕਰੋੇ"</string>
+    <string name="blurbJoinContactDataWith" msgid="8736488417422708236">"ਉਹ ਸੰਪਰਕ ਚੁਣੋ ਜਿਸਨੂੰ ਤੁਸੀਂ <xliff:g id="NAME">%s</xliff:g> ਵਿੱਚ ਸ਼ਾਮਲ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ:"</string>
+    <string name="showAllContactsJoinItem" msgid="2189695051430392383">"ਸਾਰੇ ਸੰਪਰਕ ਦਿਖਾਓ"</string>
+    <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"ਸੁਝਾਏ ਗਏ ਸੰਪਰਕ"</string>
+    <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"ਸਾਰੇ ਸੰਪਰਕ"</string>
+    <string name="contactsJoinedMessage" msgid="656936718666768589">"ਸੰਪਰਕ ਮਿਲਾਏ ਗਏ"</string>
+    <string name="contacts_deleted_toast" msgid="286851430992788215">"ਸੰਪਰਕ ਮਿਟਾਏ ਗਏ"</string>
+    <string name="menu_set_ring_tone" msgid="8728345772068064946">"ਰਿੰਗਟੋਨ ਸੈਟ ਕਰੋ"</string>
+    <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"ਵੌਇਸਮੇਲ ਵਿੱਚ ਸਾਰੀਆਂ ਕਾਲਾਂ"</string>
+    <string name="readOnlyContactWarning" msgid="7808825687289848259">"ਤੁਸੀਂ ਰੀਡ-ਓਨਲੀ ਖਾਤਿਆਂ ਵਿੱਚੋਂ ਸੰਪਰਕ ਨਹੀਂ ਮਿਟਾ ਸਕਦੇ, ਪਰੰਤੂ ਤੁਸੀਂ ਉਹਨਾਂ ਨੂੰ ਆਪਣੀਆਂ ਸੰਪਰਕ ਸੂਚੀਆਂ ਵਿੱਚ ਲੁਕਾ ਸਕਦੇ ਹੋ।"</string>
+    <string name="readOnlyContactDeleteConfirmation" msgid="2137170726670196909">"ਇਸ ਸੰਪਰਕ ਵਿੱਚ ਮਲਟੀਪਲ ਖਾਤਿਆਂ ਦੀ ਜਾਣਕਾਰੀ ਸ਼ਾਮਲ ਹੈ। ਰੀਡ-ਓਨਲੀ ਖਾਤਿਆਂ ਦੀ ਜਾਣਕਾਰੀ ਤੁਹਾਡੀਆਂ ਸੰਪਰਕ ਸੂਚੀਆਂ ਵਿੱਚ ਲੁਕਾਈ ਜਾਏਗੀ ਮਿਟਾਈ ਨਹੀਂ ਜਾਏਗੀ।"</string>
+    <string name="batch_merge_single_contact_warning" msgid="982585201970392110">"ਤੁਹਾਨੂੰ ਇੱਕ ਮਿਲਾਉਣਾ ਪਰਫੌਰਮ ਕਰਨ ਲਈ ਘੱਟੋ-ਘੱਟ ਦੋ ਸੰਪਰਕ ਚੁਣਨ ਦੀ ਲੋੜ ਹੈ।"</string>
+    <string name="batch_merge_confirmation" msgid="8551299480317422420">"ਚੁਣੇ ਗਏ ਸੰਪਰਕ ਇੱਕ ਸਿੰਗਲ ਸੰਪਰਕ ਵਿੱਚ ਮਿਲਾ ਦਿੱਤੇ ਜਾਣਗੇ।"</string>
+    <string name="batch_delete_confirmation" msgid="2564172328268885394">"ਚੁਣੇ ਗਏ ਸੰਪਰਕ ਮਿਟਾ ਦਿੱਤੇ ਜਾਣਗੇ।"</string>
+    <string name="batch_delete_read_only_contact_confirmation" msgid="6614878716815412523">"ਰੀਡ-ਓਨਲੀ ਖਾਤਿਆਂ ਦੀ ਜਾਣਕਾਰੀ ਤੁਹਾਡੀਆਂ ਸੰਪਰਕ ਸੂਚੀਆਂ ਵਿੱਚ ਲੁਕਾਈ ਜਾਏਗੀ, ਮਿਟਾਈ ਨਹੀਂ ਜਾਏਗੀ।"</string>
+    <string name="batch_delete_multiple_accounts_confirmation" msgid="5189722181586680185">"ਇਹਨਾਂ ਸੰਪਰਕਾਂ ਵਿੱਚ ਮਲਟੀਪਲ ਖਾਤਿਆਂ ਦੀ ਜਾਣਕਾਰੀ ਸ਼ਾਮਲ ਹੈ। ਰੀਡ-ਓਨਲੀ ਖਾਤਿਆਂ ਦੀ ਜਾਣਕਾਰੀ ਤੁਹਾਡੀਆਂ ਸੰਪਰਕ ਸੂਚੀਆਂ ਵਿੱਚ ਲੁਕਾਈ ਜਾਏਗੀ, ਮਿਟਾਈ ਨਹੀਂ ਜਾਏਗੀ।"</string>
+    <string name="multipleContactDeleteConfirmation" msgid="938900978442960800">"ਇਸ ਸੰਪਰਕ ਨੂੰ ਮਿਟਾਉਣ ਨਾਲ ਮਲਟੀਪਲ ਖਾਤਿਆਂ ਦੀ ਜਾਣਕਾਰੀ ਮਿਟ ਜਾਏਗੀ।"</string>
+    <string name="deleteConfirmation" msgid="811706994761610640">"ਇਹ ਸੰਪਰਕ ਮਿਟਾ ਦਿੱਤਾ ਜਾਏਗਾ।"</string>
+    <string name="menu_discard" msgid="6854657936970228164">"ਬਦਲਾਵਾਂ ਬਰਖਾਸਤ ਕਰੋ"</string>
+    <string name="invalidContactMessage" msgid="8215051456181842274">"ਸੰਪਰਕ ਮੌਜੂਦ ਨਹੀਂ ਹੈ।"</string>
+    <string name="createContactShortcutSuccessful" msgid="7874133287558150877">"ਸੰਪਰਕ ਵਿਜੇਟ ਹੋਮ ਸਕ੍ਰੀਨ ਵਿੱਚ ਜੋੜਿਆ ਗਿਆ।"</string>
+    <string name="pickerNewContactHeader" msgid="7750705279843568147">"ਨਵਾਂ ਸੰਪਰਕ ਬਣਾਓ"</string>
+    <string name="pickerNewContactText" msgid="6166997164401048211">"ਨਵਾਂ ਸੰਪਰਕ ਬਣਾਓ"</string>
+  <string-array name="otherLabels">
+    <item msgid="8287841928119937597">"ਕੰਪਨੀ"</item>
+    <item msgid="7196592230748086755">"ਸੂਚਨਾ"</item>
+  </string-array>
+    <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"ਟੈਬਲੇਟ ਤੇ ਕੋਈ ਤਸਵੀਰਾਂ ਉਪਲਬਧ ਨਹੀਂ ਹਨ।"</string>
+    <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"ਫੋਨ ਤੇ ਕੋਈ ਤਸਵੀਰਾਂ ਉਪਲਬਧ ਨਹੀਂ ਹਨ।"</string>
+    <string name="attach_photo_dialog_title" msgid="5599827035558557169">"ਸੰਪਰਕ ਫੋਟੋ"</string>
+    <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="8579310973261953559">"ਕੋਈ ਸੰਪਰਕ ਨਹੀਂ।"</string>
+    <string name="noGroups" msgid="8614664663561385253">"ਕੋਈ ਸਮੂਹ ਨਹੀਂ।"</string>
+    <string name="noAccounts" msgid="7768267764545265909">"ਸਮੂਹ ਬਣਾਉਣ ਲਈ ਤੁਹਾਨੂੰ ਇੱਕ ਖਾਤਾ ਬਣਾਉਣ ਦੀ ਲੋੜ ਹੈ।"</string>
+    <string name="emptyGroup" msgid="7502116218697177370">"ਇਸ ਸਮੂਹ ਵਿੱਚ ਕੋਈ ਲੋਕ ਨਹੀਂ।"</string>
+    <string name="addPeopleToGroup" msgid="7879585947222263516">"ਕੁਝ ਸ਼ਾਮਲ ਕਰਨ ਲਈ, ਸਮੂਹ ਸੰਪਾਦਿਤ ਕਰੋ।"</string>
+    <string name="savingContact" msgid="4075751076741924939">"ਸੰਪਰਕ ਸੁਰੱਖਿਅਤ ਕਰ ਰਿਹਾ ਹੈ…"</string>
+    <string name="contactSavedToast" msgid="7152589189385441091">"ਸੰਪਰਕ ਸੁਰੱਖਿਅਤ ਕੀਤਾ।"</string>
+    <string name="contactSavedErrorToast" msgid="3207250533172944892">"ਸੰਪਰਕ ਬਦਲਾਵਾਂ ਨੂੰ ਸੁਰੱਖਿਅਤ ਨਹੀਂ ਕਰ ਸਕਿਆ।"</string>
+    <string name="groupSavedToast" msgid="1168756874239833756">"ਸਮੂਹ ਸੁਰੱਖਿਅਤ ਕੀਤਾ।"</string>
+    <string name="groupSavedErrorToast" msgid="7984466936615304740">"ਸਮੂਹ ਬਦਲਾਵਾਂ ਨੂੰ ਸੁਰੱਖਿਅਤ ਨਹੀਂ ਕਰ ਸਕਿਆ।"</string>
+    <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
+      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> ਫੋਨ ਨੰਬਰਾਂ ਵਾਲੇ ਸੰਪਰਕ</item>
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ਫੋਨ ਨੰਬਰਾਂ ਵਾਲੇ ਸੰਪਰਕ</item>
+    </plurals>
+    <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"ਫੋਨ ਨੰਬਰਾਂ ਵਾਲੇ ਕੋਈ ਸੰਪਰਕ ਨਹੀਂ"</string>
+    <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
+      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> ਮਿਲਿਆ</item>
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ਮਿਲਿਆ</item>
+    </plurals>
+    <string name="listFoundAllContactsZero" msgid="922980883593159444">"ਕੋਈ ਸੰਪਰਕ ਨਹੀਂ"</string>
+    <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
+      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> ਮਿਲਿਆ</item>
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ਮਿਲਿਆ</item>
+    </plurals>
+    <string name="all_contacts_tab_label" msgid="6250372293594147703">"ਸਾਰੇ ਸੰਪਰਕ"</string>
+    <string name="favorites_tab_label" msgid="1524869648904016414">"ਮਨਪਸੰਦ"</string>
+    <string name="callBack" msgid="5498224409038809224">"ਕਾਲ ਬੈਕ ਕਰੋ"</string>
+    <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>
+    <string name="quickcontact_missing_app" msgid="358168575340921552">"ਇਸ ਕਿਰਿਆ ਨੂੰ ਸੰਭਾਲਣ ਲਈ ਕੋਈ ਐਪ ਨਹੀਂ ਮਿਲਿਆ।"</string>
+    <string name="quickcontact_transparent_view_description" msgid="987959416759562455">"ਪਿਛਲੀ ਸਕ੍ਰੀਨ ਤੇ ਵਾਪਸ ਜਾਣ ਲਈ ਕਲਿਕ ਕਰੋ"</string>
+    <string name="quickcontact_add_phone_number" msgid="731665835910658965">"ਫੋਨ ਨੰਬਰ ਜੋੜੋ"</string>
+    <string name="quickcontact_add_email" msgid="739298028384348482">"ਈਮੇਲ ਜੋੜੋ"</string>
+    <string name="missing_app" msgid="1466111003546611387">"ਇਸ ਕਿਰਿਆ ਨੂੰ ਸੰਭਾਲਣ ਲਈ ਕੋਈ ਐਪ ਨਹੀਂ ਮਿਲਿਆ।"</string>
+    <string name="menu_share" msgid="943789700636542260">"ਸ਼ੇਅਰ ਕਰੋ"</string>
+    <string name="menu_add_contact" msgid="3198704337220892684">"ਸੰਪਰਕਾਂ ਵਿੱਚ ਜੋੜੋ"</string>
+    <string name="share_via" msgid="563121028023030093">"ਇਸ ਰਾਹੀਂ ਸੰਪਰਕ ਸ਼ੇਅਰ ਕਰੋ"</string>
+    <string name="dialog_new_group_account" msgid="2318032089273496830">"ਖਾਤੇ ਦੇ ਅਧੀਨ ਸਮੂਹ ਬਣਾਓ"</string>
+    <string name="audio_chat" msgid="2535716629358298691">"ਵੌਇਸ ਚੈਟ"</string>
+    <string name="video_chat" msgid="1872255818640336072">"ਵੀਡੀਓ ਚੈਟ"</string>
+    <string name="connections" msgid="8098440723172028350">"ਕਨੈਕਸ਼ਨ"</string>
+    <string name="add_connection_button" msgid="4861308615789601727">"ਕਨੈਕਸ਼ਨ ਜੋੜੋ"</string>
+    <string name="recent" msgid="2659189233141493004">"ਹਾਲੀਆ"</string>
+    <string name="recent_updates" msgid="4267258535615860710">"ਹਾਲੀਆ ਅਪਡੇਟਾਂ"</string>
+    <string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g> ਸੰਪਰਕ"</string>
+    <!-- no translation found for from_account_format (4469138575127580203) -->
+    <skip />
+    <string name="contact_read_only" msgid="7421346527289472273">"ਇਸ ਐਪ ਤੋਂ ਸੰਪਾਦਨਯੋਗ ਨਹੀਂ।"</string>
+    <string name="group_read_only" msgid="1061762906115697637">"ਇਸ ਡਿਵਾਈਸ ਤੇ ਸੰਪਾਦਨਯੋਗ ਨਹੀਂ।"</string>
+    <string name="take_photo" msgid="7496128293167402354">"ਫੋਟੋ ਲਓ"</string>
+    <string name="take_new_photo" msgid="7341354729436576304">"ਨਵੀਂ ਫੋਟੋ ਲਓ"</string>
+    <string name="pick_photo" msgid="2129509985223564942">"ਫੋਟੋ ਚੁਣੋ"</string>
+    <string name="pick_new_photo" msgid="9122450996263688237">"ਨਵੀਂ ਫੋਟੋ ਚੁਣੋ"</string>
+    <string name="locale_change_in_progress" msgid="7583992153091537467">"ਭਾਸ਼ਾ ਵਿੱਚ ਬਦਲਾਵਾਂ ਨੂੰ ਦਰਸਾਉਣ ਲਈ ਸੰਪਰਕ ਸੂਚੀ ਅਪਡੇਟ ਕੀਤੀ ਜਾ ਰਹੀ ਹੈ।"</string>
+    <string name="upgrade_in_progress" msgid="474511436863451061">"ਸੰਪਰਕ ਸੂਚੀ ਅਪਡੇਟ ਕੀਤੀ ਜਾ ਰਹੀ ਹੈ।"</string>
+    <string name="search_results_searching" msgid="3984833028938569930">"ਖੋਜ ਰਿਹਾ ਹੈ..."</string>
+    <string name="menu_display_selected" msgid="6470001164297969034">"ਚੁਣਿਆ ਗਿਆ ਦਿਖਾਓ"</string>
+    <string name="menu_display_all" msgid="8887488642609786198">"ਸਾਰੇ ਦਿਖਾਓ"</string>
+    <string name="menu_select_all" msgid="621719255150713545">"ਸਾਰੇ ਚੁਣੋ"</string>
+    <string name="menu_select_none" msgid="7093222469852132345">"ਸਾਰਿਆਂ ਨੂੰ ਅਚੋਣਵਾਂ ਕਰੋ"</string>
+    <string name="add_new_entry_for_section" msgid="5223080690667565044">"ਨਵਾਂ ਜੋੜੋ"</string>
+    <string name="add_organization" msgid="7311893231158291197">"ਕੰਪਨੀ ਜੋੜੋ"</string>
+    <string name="event_edit_field_hint_text" msgid="5794424930242630477">"ਮਿਤੀ"</string>
+    <string name="group_edit_field_hint_text" msgid="3966441850870457808">"ਸਮੂਹ ਨਾਮ"</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>
+    <plurals name="merge_info" formatted="false" msgid="2489323424994280962">
+      <item quantity="one"> ਸ਼ਾਮਲ ਕੀਤਾ</item>
+      <item quantity="other"> ਸ਼ਾਮਲ ਕੀਤਾ</item>
+    </plurals>
+    <string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"ਕੀ ਚੁਣੇ ਗਏ ਸੰਪਰਕ ਨਾਲ ਮੌਜੂਦਾ ਸੰਪਰਕ ਸ਼ਾਮਲ ਕਰਨਾ ਹੈ?"</string>
+    <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"ਕੀ ਚੁਣੇ ਗਏ ਸੰਪਰਕ ਨੂੰ ਸੰਪਾਦਿਤ ਕਰਨ ਲਈ ਸਵਿਚ ਕਰਨਾ ਹੈ? ਹੁਣ ਤੱਕ ਤੁਸੀਂ ਜੋ ਜਾਣਕਾਰੀ ਦਰਜ ਕੀਤੀ, ੁਹ ਕਾਪੀ ਕੀਤੀ ਜਾਏਗੀ।"</string>
+    <string name="menu_copyContact" msgid="1573960845106822639">"ਮੇਰੇ ਸੰਪਰਕਾਂ ਵਿੱਚ ਕਾਪੀ ਕਰੋ"</string>
+    <string name="add_to_my_contacts" msgid="1068274916793627723">"ਮੇਰੇ ਸੰਪਰਕਾਂ ਵਿੱਚ ਜੋੜੋ"</string>
+    <string name="contact_directory_description" msgid="683398073603909119">"ਡਾਇਰੈਕਟਰੀ <xliff:g id="TYPE">%1$s</xliff:g>"</string>
+    <string name="list_filter_custom" msgid="8910173055702057002">"ਕਸਟਮ"</string>
+    <string name="activity_title_settings" msgid="5464130076132770781">"ਸੈਟਿੰਗਾਂ"</string>
+    <string name="menu_settings" msgid="377929915873428211">"ਸੈਟਿੰਗਾਂ"</string>
+    <string name="menu_help" msgid="1680178646764069976">"ਸਹਾਇਤਾ ਅਤੇ ਫੀਡਬੈਕ"</string>
+    <string name="preference_displayOptions" msgid="1341720270148252393">"ਡਿਸਪਲੇ ਚੋਣਾਂ"</string>
+    <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
+    <string name="non_phone_caption" msgid="1541655052330027380">"ਫੋਨ ਨੰਬਰ"</string>
+    <string name="non_phone_add_to_contacts" msgid="6590985286250471169">"ਸੰਪਰਕਾਂ ਵਿੱਚ ਜੋੜੋ"</string>
+    <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"ਸੰਪਰਕ ਵਿੱਚ ਜੋੜੋ"</string>
+    <string name="non_phone_close" msgid="7608506439725515667">"ਬੰਦ ਕਰੋ"</string>
+    <string name="widget_name_and_phonetic" msgid="8739586586600099979">"<xliff:g id="DISPLAY_NAME">%1$s</xliff:g> (<xliff:g id="PHONETIC_NAME">%2$s</xliff:g>)"</string>
+    <string name="date_year_toggle" msgid="7356532842767854606">"ਇੱਕ ਸਾਲ ਮੁਹੱਈਆ ਕਰੋ"</string>
+    <string name="social_widget_label" msgid="6378905543028924592">"ਸੰਪਰਕ"</string>
+    <string name="social_widget_loading" msgid="5327336597364074608">"ਲੋਡ ਕਰ ਰਿਹਾ ਹੈ…"</string>
+    <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"ਇੱਕ ਨਵਾਂ ਸੰਪਰਕ ਬਣਾਓ"</string>
+    <string name="contacts_unavailable_add_account" msgid="7911101713860139754">"ਇੱਕ ਖਾਤੇ ਤੇ ਸਾਈਨ ਇਨ ਕਰੋ"</string>
+    <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"ਸੰਪਰਕ ਆਯਾਤ ਕਰੋ"</string>
+    <string name="create_group_dialog_title" msgid="6874527142828424475">"ਨਵਾਂ ਸਮੂਹ ਬਣਾਓ"</string>
+    <string name="create_group_item_label" msgid="4411981763169654825">"ਨਵਾਂ ਸਮੂਹ ਬਣਾਓ"</string>
+    <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
+      <item quantity="one"><xliff:g id="COUNT">%0$d</xliff:g> ਸਮੂਹ</item>
+      <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> ਸਮੂਹ</item>
+    </plurals>
+    <string name="delete_group_dialog_message" msgid="7586856514337560529">"ਕੀ ਸਮੂਹ \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\" ਮਿਟਾਉਣਾ ਹੈ? (ਸੰਪਰਕ ਆਪਣੇ ਆਪ ਨਹੀਂ ਮਿਟਾਏ ਜਾਣਗੇ।)"</string>
+    <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
+      <item quantity="one"><xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g> ਤੋਂ <xliff:g id="COUNT_2">%1$d</xliff:g> ਲੋਕ</item>
+      <item quantity="other"><xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g> ਤੋਂ <xliff:g id="COUNT_2">%1$d</xliff:g> ਲੋਕ</item>
+    </plurals>
+    <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
+      <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> ਲੋਕ</item>
+      <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> ਲੋਕ</item>
+    </plurals>
+    <string name="toast_join_with_empty_contact" msgid="2238581529864542985">"ਦੂਜੇ ਵਿੱਚ ਸ਼ਾਮਲ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ ਸੰਪਰਕ ਨਾਲ ਟਾਈਪ ਕਰੋ।"</string>
+    <string name="copy_text" msgid="3257145021583508761">"ਕਲਿਪਬੋਰਡ ਤੇ ਕਾਪੀ ਕਰੋ"</string>
+    <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="5885724679874403115">"ਕੀ ਬਦਲਾਵ ਬਰਖਾਸਤ ਕਰਨੇ ਹਨ?"</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="profile_display_name" msgid="4127389543625918771">"ਮੇਰੀ ਪ੍ਰੋਫਾਈਲ ਸੈਟ ਅਪ ਕਰੋ"</string>
+    <string name="enter_contact_name" msgid="1738391320566349924">"ਵਿਅਕਤੀ ਦਾ ਨਾਮ ਟਾਈਪ ਕਰੋ"</string>
+    <string name="group_name_hint" msgid="238359485263401293">"ਸਮੂਹ ਦਾ ਨਾਮ"</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="no_account_prompt" msgid="6424883302325061025">"ਸੰਪਰਕ Google ਖਾਤੇ ਨਾਲ ਵਧੀਆ ਕੰਮ ਕਰਦੇ ਹਨ।\n\n• ਕਿਸੇ ਵੀ ਵੈਬ ਬ੍ਰਾਊਜ਼ਰ ਤੋਂ ਇਸ ਤੱਕ ਪਹੁੰਚੋ\n• ਆਪਣੇ ਸੰਪਰਕਾਂ ਨੂੰ ਸੁਰੱਖਿਅਤ ਰੂਪ ਨਾਲ ਬੈਕ ਅਪ ਕਰੋ"</string>
+    <string name="generic_no_account_prompt" msgid="7218827704367325460">"ਆਪਣੇ ਫੋਨ ਦੇ ਸੰਪਰਕਾਂ ਨੂੰ ਤਦ ਵੀ ਸੁਰੱਖਿਅਤ ਰੱਖੋ ਭਾਵੇਂ ਤੁਹਾਡਾ ਫੋਨ ਗੁਆਚ ਜਾਏ: ਇੱਕ ਔਨਲਾਈਨ ਸੇਵਾ ਨਾਲ ਸਿੰਕ੍ਰੋਨਾਈਜ਼ ਕਰੋ।"</string>
+    <string name="generic_no_account_prompt_title" msgid="753783911899054860">"ਇੱਕ ਖਾਤਾ ਜੋੜੋ"</string>
+    <string name="contact_editor_prompt_zero_accounts" msgid="1785345895691886499">"ਤੁਹਾਡਾ ਨਵਾਂ ਸੰਪਰਕ ਬੈਕ ਅਪ ਨਹੀਂ ਕੀਤਾ ਜਾਏਗਾ। ਕੀ ਇੱਕ ਅਜਿਹਾ ਖਾਤਾ ਜੋੜਨਾ ਹੈ ਜੋ ਸੰਪਰਕਾਂ ਨੂੰ ਔਨਲਾਈਨ ਬੈਕ ਅਪ ਕਰਦਾ ਹੈ?"</string>
+    <string name="contact_editor_prompt_one_account" msgid="8669032699767375976">"ਤੁਹਾਡਾ ਨਵਾਂ ਸੰਪਰਕ <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g> ਨਾਲ ਸਿੰਕ੍ਰੋਨਾਈਜ਼ ਕੀਤਾ ਜਾਏਗਾ।"</string>
+    <string name="contact_editor_prompt_multiple_accounts" msgid="611828200100438242">"ਤੁਸੀਂ ਇਹਨਾਂ ਖਾਤਿਆਂ ਵਿੱਚੋਂ ਇੱਕ ਨਾਲ ਆਪਣਾ ਨਵਾਂ ਸੰਪਰਕ ਸਿੰਕ੍ਰੋਨਾਈਜ਼ ਕਰ ਸਕਦੇ ਹੋ। ਤੁਸੀਂ ਕਿਹੜਾ ਵਰਤਣਾ ਚਾਹੁੰਦੇ ਹੋ?"</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">"ਸੁਨੇਹਾ ਭੇਜੋ"</string>
+    <string name="toast_making_personal_copy" msgid="6137651078366797938">"ਇੱਕ ਨਿੱਜੀ ਕਾਪੀ ਬਣਾ ਰਿਹਾ ਹੈ..."</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>
+    <string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"ਕੱਲ੍ਹ ਨੂੰ <xliff:g id="TIME_INTERVAL">%s</xliff:g> ਵਜੇ"</string>
+    <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%s</xliff:g>, <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
+    <string name="untitled_event" msgid="3484859385405939366">"(ਨਾਮ ਰਹਿਤ ਇਵੈਂਟ)"</string>
+    <string name="date_time_set" msgid="4761419824439606690">"ਸੈਟ ਕਰੋ"</string>
+    <string name="header_im_entry" msgid="3581720979640225615">"IM"</string>
+    <string name="header_organization_entry" msgid="8515394955666265406">"ਕੰਪਨੀ"</string>
+    <string name="header_nickname_entry" msgid="6743561883967451485">"ਉਪਨਾਮ"</string>
+    <string name="header_note_entry" msgid="4320190426480612344">"ਸੂਚਨਾ"</string>
+    <string name="header_website_entry" msgid="1411467850000824745">"ਵੈਬਸਾਈਟ"</string>
+    <string name="header_event_entry" msgid="6738250422744401460">"ਇਵੈਂਟ"</string>
+    <string name="header_relation_entry" msgid="1520292958088146460">"ਰਿਸ਼ਤਾ"</string>
+    <string name="header_account_entry" msgid="2684318506427891827">"ਖਾਤਾ"</string>
+    <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>
+    <string name="content_description_recent_sms" msgid="1666389577263317445">"ਹਾਲੀਆ sms. <xliff:g id="MESSAGE_BODY">%s</xliff:g>। <xliff:g id="PHONE_NUMBER">%s</xliff:g>। <xliff:g id="DATE">%s</xliff:g>। ਜਵਾਬ ਦੇਣ ਲਈ ਕਲਿਕ ਕਰੋ"</string>
+    <string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"ਇਨਕਮਿੰਗ"</string>
+    <string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"ਆਊਟਗੋਇੰਗ"</string>
+    <string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"ਮਿਸਡ"</string>
+    <string name="content_description_recent_call" msgid="5183800406316723676">"ਹਾਲੀਆ ਕਾਲ। <xliff:g id="CALL_TYPE">%s</xliff:g>। <xliff:g id="PHONE_NUMBER">%s</xliff:g>। <xliff:g id="DATE">%s</xliff:g>। ਕਾਲ ਬੈਕ ਕਰਨ ਲਈ ਕਲਿਕ ਕਰੋ।"</string>
+    <string name="message_from_you_prefix" msgid="7180706529908434482">"ਤੁਸੀਂ: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
+    <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"ਜਦੋਂ ਤੁਸੀਂ ਈਮੇਲ ਖੇਤਰ ਜਾਂ ਫੋਨ ਖੇਤਰ ਵਿੱਚ ਵਿਅਕਤੀ ਦਾ ਹੈਂਗਆਊਟਸ ਆਈਡੈਂਟੀਫਾਇਰ ਦਰਜ ਕਰਦੇ ਹੋ ਤਾਂ ਹੈਂਗਆਊਟਸ ਬਿਹਤਰ ਕੰਮ ਕਰਦਾ ਹੈ।"</string>
+    <string name="compact_editor_more_fields" msgid="2874181192382284115">"ਹੋਰ ਖੇਤਰ"</string>
+</resources>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index 5d834ea..752b117 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -46,6 +46,7 @@
     <string name="description_action_menu_add_star" msgid="3327186327234177456">"Dodano do ulubionych"</string>
     <string name="menu_editContact" msgid="9042415603857662633">"Edytuj"</string>
     <string name="menu_deleteContact" msgid="6788644058868189393">"Usuń"</string>
+    <string name="menu_change_photo" msgid="7769177631511496210">"Zmień zdjęcie"</string>
     <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Umieść na ekranie głównym"</string>
     <string name="menu_call" msgid="3992595586042260618">"Zadzwoń do kontaktu"</string>
     <string name="menu_sendSMS" msgid="5535886767547006515">"Wyślij tekst do kontaktu"</string>
@@ -55,18 +56,24 @@
     <string name="menu_new_contact_action_bar" msgid="7263362129442119188">"Dodaj kontakt"</string>
     <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Dodaj grupę"</string>
     <string name="splitConfirmation_title" msgid="633640935430370530">"Podzielić kontakt?"</string>
-    <string name="splitConfirmation" msgid="740190210499587175">"Ten kontakt zostanie podzielony na wiele wpisów."</string>
-    <string name="menu_joinAggregate" msgid="5027981918265667970">"Połącz"</string>
+    <string name="splitConfirmation" msgid="740190210499587175">"Ten kontakt zostanie podzielony na kilka wpisów."</string>
+    <string name="menu_joinAggregate" msgid="4050157483569357666">"Scal"</string>
     <string name="titleJoinContactDataWith" msgid="7684875775798635354">"Połącz kontakty"</string>
     <string name="blurbJoinContactDataWith" msgid="8736488417422708236">"Wybierz kontakt, który chcesz połączyć z <xliff:g id="NAME">%s</xliff:g>:"</string>
     <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Pokaż wszystkie kontakty"</string>
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Sugerowane kontakty"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Wszystkie kontakty"</string>
-    <string name="contactsJoinedMessage" msgid="7208148163607047389">"Kontakty zostały połączone"</string>
+    <string name="contactsJoinedMessage" msgid="656936718666768589">"Kontakty zostały scalone"</string>
+    <string name="contacts_deleted_toast" msgid="286851430992788215">"Kontakty zostały usunięte"</string>
     <string name="menu_set_ring_tone" msgid="8728345772068064946">"Ustaw dzwonek"</string>
     <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Łącz na pocztę głosową"</string>
     <string name="readOnlyContactWarning" msgid="7808825687289848259">"Nie możesz usunąć kontaktów z kont tylko do odczytu, ale możesz ukryć je na swoich listach kontaktów."</string>
     <string name="readOnlyContactDeleteConfirmation" msgid="2137170726670196909">"Ten kontakt zawiera informacje pochodzące z wielu kont. Informacje z kont przeznaczonych tylko do odczytu zostaną na listach kontaktów ukryte, a nie usunięte."</string>
+    <string name="batch_merge_single_contact_warning" msgid="982585201970392110">"Do scalenia potrzebne są co najmniej dwa kontakty."</string>
+    <string name="batch_merge_confirmation" msgid="8551299480317422420">"Wybrane kontakty zostaną scalone w jeden."</string>
+    <string name="batch_delete_confirmation" msgid="2564172328268885394">"Wybrane kontakty zostaną usunięte."</string>
+    <string name="batch_delete_read_only_contact_confirmation" msgid="6614878716815412523">"Informacje z kont przeznaczonych tylko do odczytu zostaną na listach kontaktów ukryte, a nie usunięte."</string>
+    <string name="batch_delete_multiple_accounts_confirmation" msgid="5189722181586680185">"Te kontakty zawierają informacje pochodzące z wielu kont. Informacje z kont przeznaczonych tylko do odczytu zostaną na listach kontaktów ukryte, a nie usunięte."</string>
     <string name="multipleContactDeleteConfirmation" msgid="938900978442960800">"Usunięcie tego kontaktu spowoduje usunięcie informacji z wielu kont."</string>
     <string name="deleteConfirmation" msgid="811706994761610640">"Ten kontakt zostanie usunięty."</string>
     <string name="menu_discard" msgid="6854657936970228164">"Odrzuć zmiany"</string>
@@ -94,20 +101,26 @@
     <string name="contactSavedErrorToast" msgid="3207250533172944892">"Nie można zapisać zmian kontaktu."</string>
     <string name="groupSavedToast" msgid="1168756874239833756">"Grupa została zapisana."</string>
     <string name="groupSavedErrorToast" msgid="7984466936615304740">"Nie można zapisać zmian grupy."</string>
-  <plurals name="listTotalPhoneContacts">
-    <item quantity="one" msgid="3015357862286673986">"Liczba kontaktów z numerem telefonu: 1"</item>
-    <item quantity="other" msgid="3299954047880968205">"Liczba kontaktów z numerami telefonów: <xliff:g id="COUNT">%d</xliff:g>"</item>
-  </plurals>
+    <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
+      <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> kontakty z numerami telefonu</item>
+      <item quantity="many"><xliff:g id="COUNT">%d</xliff:g> kontaktów z numerami telefonu</item>
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> kontaktu z numerami telefonu</item>
+      <item quantity="one">1 kontakt z numerem telefonu</item>
+    </plurals>
     <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"Brak kontaktów z numerami telefonów"</string>
-  <plurals name="listFoundAllContacts">
-    <item quantity="one" msgid="5517063038754171134">"Znaleziono: 1"</item>
-    <item quantity="other" msgid="3852668542926965042">"Znaleziono: <xliff:g id="COUNT">%d</xliff:g>"</item>
-  </plurals>
+    <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
+      <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> znalezione</item>
+      <item quantity="many"><xliff:g id="COUNT">%d</xliff:g> znalezionych</item>
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> znalezionego</item>
+      <item quantity="one">1 znaleziony</item>
+    </plurals>
     <string name="listFoundAllContactsZero" msgid="922980883593159444">"Brak kontaktów"</string>
-  <plurals name="searchFoundContacts">
-    <item quantity="one" msgid="4826918429708286628">"Znaleziono: 1"</item>
-    <item quantity="other" msgid="7988132539476575389">"Znaleziono: <xliff:g id="COUNT">%d</xliff:g>"</item>
-  </plurals>
+    <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
+      <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> znalezione</item>
+      <item quantity="many"><xliff:g id="COUNT">%d</xliff:g> znalezionych</item>
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> znalezionego</item>
+      <item quantity="one">1 znaleziony</item>
+    </plurals>
     <string name="all_contacts_tab_label" msgid="6250372293594147703">"Wszystkie"</string>
     <string name="favorites_tab_label" msgid="1524869648904016414">"Ulubione"</string>
     <string name="callBack" msgid="5498224409038809224">"Oddzwoń"</string>
@@ -125,7 +138,7 @@
     <string name="missing_app" msgid="1466111003546611387">"Nie znaleziono aplikacji do obsługi tego działania."</string>
     <string name="menu_share" msgid="943789700636542260">"Udostępnij"</string>
     <string name="menu_add_contact" msgid="3198704337220892684">"Dodaj do kontaktów"</string>
-    <string name="share_via" msgid="563121028023030093">"Udostępnij kontakt przez"</string>
+    <string name="share_via" msgid="563121028023030093">"Udostępnij kontakt przez:"</string>
     <string name="dialog_new_group_account" msgid="2318032089273496830">"Utwórz grupę na koncie"</string>
     <string name="audio_chat" msgid="2535716629358298691">"Czat głosowy"</string>
     <string name="video_chat" msgid="1872255818640336072">"Czat wideo"</string>
@@ -144,9 +157,6 @@
     <string name="pick_new_photo" msgid="9122450996263688237">"Wybierz nowe zdjęcie"</string>
     <string name="locale_change_in_progress" msgid="7583992153091537467">"Lista kontaktów jest aktualizowana, aby odzwierciedlić zmianę języka."</string>
     <string name="upgrade_in_progress" msgid="474511436863451061">"Lista kontaktów jest aktualizowana."</string>
-    <string name="upgrade_out_of_memory" msgid="1209994418877625940">"Trwa proces uaktualniania kontaktów. \n\nProces uaktualniania wymaga w przybliżeniu <xliff:g id="SIZE_IN_MEGABYTES">%s</xliff:g> MB pamięci wewnętrznej.\n\nWybierz jedną z następujących opcji:"</string>
-    <string name="upgrade_out_of_memory_uninstall" msgid="1721798828992091432">"Odinstaluj część aplikacji"</string>
-    <string name="upgrade_out_of_memory_retry" msgid="8431289830472724609">"Ponów próbę uaktualnienia"</string>
     <string name="search_results_searching" msgid="3984833028938569930">"Wyszukiwanie…"</string>
     <string name="menu_display_selected" msgid="6470001164297969034">"Pokaż wybrane"</string>
     <string name="menu_display_all" msgid="8887488642609786198">"Pokaż wszystkie"</string>
@@ -160,10 +170,12 @@
     <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>
-  <plurals name="merge_info">
-    <item quantity="one" msgid="148365587896371969">"nie scalono"</item>
-    <item quantity="other" msgid="425683718017380845">"scalono z <xliff:g id="COUNT">%0$d</xliff:g> źródeł"</item>
-  </plurals>
+    <plurals name="merge_info" formatted="false" msgid="2489323424994280962">
+      <item quantity="few">scalono z <xliff:g id="COUNT">%0$d</xliff:g> źródeł</item>
+      <item quantity="many">scalono z <xliff:g id="COUNT">%0$d</xliff:g> źródeł</item>
+      <item quantity="other">scalono z <xliff:g id="COUNT">%0$d</xliff:g> źródła</item>
+      <item quantity="one">nie scalono</item>
+    </plurals>
     <string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"Czy połączyć bieżący kontakt z wybranym?"</string>
     <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Czy chcesz edytować wybrany kontakt? Wprowadzone dotąd informacje zostaną skopiowane."</string>
     <string name="menu_copyContact" msgid="1573960845106822639">"Kopiuj do moich kontaktów"</string>
@@ -172,7 +184,7 @@
     <string name="list_filter_custom" msgid="8910173055702057002">"Niestandardowy"</string>
     <string name="activity_title_settings" msgid="5464130076132770781">"Ustawienia"</string>
     <string name="menu_settings" msgid="377929915873428211">"Ustawienia"</string>
-    <string name="menu_help" msgid="5123887102216637725">"Pomoc"</string>
+    <string name="menu_help" msgid="1680178646764069976">"Pomoc i opinie"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"Opcje wyświetlania"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="non_phone_caption" msgid="1541655052330027380">"Numer telefonu"</string>
@@ -188,19 +200,25 @@
     <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Importuj kontakty"</string>
     <string name="create_group_dialog_title" msgid="6874527142828424475">"Utwórz nową grupę"</string>
     <string name="create_group_item_label" msgid="4411981763169654825">"Utwórz nową grupę"</string>
-  <plurals name="num_groups_in_account">
-    <item quantity="one" msgid="2944819210288517794">"1 grupa"</item>
-    <item quantity="other" msgid="1276758425904917367">"Grupy: <xliff:g id="COUNT">%0$d</xliff:g>"</item>
-  </plurals>
+    <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
+      <item quantity="few"><xliff:g id="COUNT">%0$d</xliff:g> grupy</item>
+      <item quantity="many"><xliff:g id="COUNT">%0$d</xliff:g> grup</item>
+      <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> grupy</item>
+      <item quantity="one">1 grupa</item>
+    </plurals>
     <string name="delete_group_dialog_message" msgid="7586856514337560529">"Usunąć grupę „<xliff:g id="GROUP_LABEL">%1$s</xliff:g>”? (Same kontakty nie zostaną usunięte)."</string>
-  <plurals name="num_contacts_in_group">
-    <item quantity="one" msgid="1352418549951013448">"<xliff:g id="COUNT_0">%1$d</xliff:g> osoba z <xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>"</item>
-    <item quantity="other" msgid="8146027769011086349">"Osoby z <xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>: <xliff:g id="COUNT_0">%1$d</xliff:g>"</item>
-  </plurals>
-  <plurals name="group_list_num_contacts_in_group">
-    <item quantity="one" msgid="3323065321661972446">"<xliff:g id="COUNT">%1$d</xliff:g> osoba"</item>
-    <item quantity="other" msgid="6251996206137048525">"Osoby: <xliff:g id="COUNT">%1$d</xliff:g>"</item>
-  </plurals>
+    <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
+      <item quantity="few"><xliff:g id="COUNT_2">%1$d</xliff:g> osoby z: <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
+      <item quantity="many"><xliff:g id="COUNT_2">%1$d</xliff:g> osób z: <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> osoby z: <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> osoba z: <xliff:g id="ACCOUNT_TYPE_1">%2$s</xliff:g></item>
+    </plurals>
+    <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
+      <item quantity="few"><xliff:g id="COUNT_1">%1$d</xliff:g> osoby</item>
+      <item quantity="many"><xliff:g id="COUNT_1">%1$d</xliff:g> osób</item>
+      <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> osoby</item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> osoba</item>
+    </plurals>
     <string name="toast_join_with_empty_contact" msgid="2238581529864542985">"Wpisz imię i nazwisko, zanim połączysz ten kontakt z innym."</string>
     <string name="copy_text" msgid="3257145021583508761">"Kopiuj do schowka"</string>
     <string name="set_default" msgid="4417505153468300351">"Ustaw jako wartość domyślną"</string>
@@ -208,7 +226,7 @@
     <string name="toast_text_copied" msgid="5143776250008541719">"Tekst skopiowany"</string>
     <string name="cancel_confirmation_dialog_message" msgid="5885724679874403115">"Odrzucić zmiany?"</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="profile_display_name" msgid="4127389543625918771">"Konfiguruj profil"</string>
+    <string name="profile_display_name" msgid="4127389543625918771">"Skonfiguruj swój profil"</string>
     <string name="enter_contact_name" msgid="1738391320566349924">"Wpisz imię osoby"</string>
     <string name="group_name_hint" msgid="238359485263401293">"Nazwa grupy"</string>
     <string name="local_profile_title" msgid="2021416826991393684">"Mój profil lokalny"</string>
@@ -264,4 +282,5 @@
     <string name="content_description_recent_call" msgid="5183800406316723676">"ostatnie połączenie. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. kliknij, by oddzwonić"</string>
     <string name="message_from_you_prefix" msgid="7180706529908434482">"Ty: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
     <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"W przypadku Hangouts lepiej wpisać identyfikator danej osoby w polu adresu e-mail lub telefonu."</string>
+    <string name="compact_editor_more_fields" msgid="2874181192382284115">"Więcej pól"</string>
 </resources>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index 96ba590..c42e79b 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -46,6 +46,7 @@
     <string name="description_action_menu_add_star" msgid="3327186327234177456">"Adicionado aos favoritos"</string>
     <string name="menu_editContact" msgid="9042415603857662633">"Editar"</string>
     <string name="menu_deleteContact" msgid="6788644058868189393">"Eliminar"</string>
+    <string name="menu_change_photo" msgid="7769177631511496210">"Alterar fotografia"</string>
     <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Colocar no ecrã principal"</string>
     <string name="menu_call" msgid="3992595586042260618">"Ligar para contacto"</string>
     <string name="menu_sendSMS" msgid="5535886767547006515">"Enviar SMS/MMS para contacto"</string>
@@ -56,17 +57,23 @@
     <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Adicionar Grupo"</string>
     <string name="splitConfirmation_title" msgid="633640935430370530">"Separar contacto?"</string>
     <string name="splitConfirmation" msgid="740190210499587175">"Este contacto será separado em vários contactos."</string>
-    <string name="menu_joinAggregate" msgid="5027981918265667970">"Associar"</string>
+    <string name="menu_joinAggregate" msgid="4050157483569357666">"Unir"</string>
     <string name="titleJoinContactDataWith" msgid="7684875775798635354">"Associar contactos"</string>
     <string name="blurbJoinContactDataWith" msgid="8736488417422708236">"Escolha o contacto que pretende associar a <xliff:g id="NAME">%s</xliff:g>:"</string>
     <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Mostrar todos os contactos"</string>
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Contactos sugeridos"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Todos os contactos"</string>
-    <string name="contactsJoinedMessage" msgid="7208148163607047389">"Contactos associados"</string>
+    <string name="contactsJoinedMessage" msgid="656936718666768589">"Contactos unidos"</string>
+    <string name="contacts_deleted_toast" msgid="286851430992788215">"Contactos eliminados"</string>
     <string name="menu_set_ring_tone" msgid="8728345772068064946">"Definir toque"</string>
     <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Todas as cham. p/ correio voz"</string>
     <string name="readOnlyContactWarning" msgid="7808825687289848259">"Não pode eliminar contactos de contas só de leitura, mas pode ocultá-los nas suas listas de contactos."</string>
     <string name="readOnlyContactDeleteConfirmation" msgid="2137170726670196909">"Este contacto contém informações de várias contas. As informações de contas só de leitura serão ocultadas nas suas listas de contactos, mas não eliminadas."</string>
+    <string name="batch_merge_single_contact_warning" msgid="982585201970392110">"Necessita de, pelo menos, dois contactos selecionados para efetuar uma união."</string>
+    <string name="batch_merge_confirmation" msgid="8551299480317422420">"Os contactos selecionados vão ser unidos num único contacto."</string>
+    <string name="batch_delete_confirmation" msgid="2564172328268885394">"Os contactos selecionados vão ser eliminados."</string>
+    <string name="batch_delete_read_only_contact_confirmation" msgid="6614878716815412523">"As informações de contas só de leitura vão ser ocultadas nas suas listas de contactos, mas não eliminadas."</string>
+    <string name="batch_delete_multiple_accounts_confirmation" msgid="5189722181586680185">"Estes contactos contêm informações de várias contas. As informações de contas só de leitura vão ser ocultadas nas suas listas de contactos, mas não eliminadas."</string>
     <string name="multipleContactDeleteConfirmation" msgid="938900978442960800">"A eliminação deste contacto eliminará informações de várias contas."</string>
     <string name="deleteConfirmation" msgid="811706994761610640">"Este contacto será eliminado."</string>
     <string name="menu_discard" msgid="6854657936970228164">"Rejeitar alterações"</string>
@@ -94,20 +101,20 @@
     <string name="contactSavedErrorToast" msgid="3207250533172944892">"Não foi possível guardar as alterações do contacto."</string>
     <string name="groupSavedToast" msgid="1168756874239833756">"Grupo guardado."</string>
     <string name="groupSavedErrorToast" msgid="7984466936615304740">"Não foi possível guardar as alterações do grupo."</string>
-  <plurals name="listTotalPhoneContacts">
-    <item quantity="one" msgid="3015357862286673986">"1 contacto com número de telefone"</item>
-    <item quantity="other" msgid="3299954047880968205">"<xliff:g id="COUNT">%d</xliff:g> contactos com números de telefone"</item>
-  </plurals>
+    <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> contactos com números de telefone</item>
+      <item quantity="one">1 contacto com número de telefone</item>
+    </plurals>
     <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"Sem contactos com números de telefone"</string>
-  <plurals name="listFoundAllContacts">
-    <item quantity="one" msgid="5517063038754171134">"1 encontrado"</item>
-    <item quantity="other" msgid="3852668542926965042">"<xliff:g id="COUNT">%d</xliff:g> encontrado(s)"</item>
-  </plurals>
+    <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> encontrados</item>
+      <item quantity="one">1 encontrado</item>
+    </plurals>
     <string name="listFoundAllContactsZero" msgid="922980883593159444">"Sem contactos"</string>
-  <plurals name="searchFoundContacts">
-    <item quantity="one" msgid="4826918429708286628">"1 encontrado"</item>
-    <item quantity="other" msgid="7988132539476575389">"<xliff:g id="COUNT">%d</xliff:g> encontrado(s)"</item>
-  </plurals>
+    <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> encontrados</item>
+      <item quantity="one">1 encontrado</item>
+    </plurals>
     <string name="all_contacts_tab_label" msgid="6250372293594147703">"Todos"</string>
     <string name="favorites_tab_label" msgid="1524869648904016414">"Favoritos"</string>
     <string name="callBack" msgid="5498224409038809224">"Chamada de retorno"</string>
@@ -144,9 +151,6 @@
     <string name="pick_new_photo" msgid="9122450996263688237">"Selecionar nova fotografia"</string>
     <string name="locale_change_in_progress" msgid="7583992153091537467">"A lista de contactos está a ser atualizada para reflectir a alteração do idioma."</string>
     <string name="upgrade_in_progress" msgid="474511436863451061">"A lista de contactos está a ser atualizada."</string>
-    <string name="upgrade_out_of_memory" msgid="1209994418877625940">"Os contactos estão em processo de atualização. \n\nO processo de atualização requer aproximadamente <xliff:g id="SIZE_IN_MEGABYTES">%s</xliff:g> MB de armazenamento interno.\n\nEscolha uma das seguintes opções:"</string>
-    <string name="upgrade_out_of_memory_uninstall" msgid="1721798828992091432">"Desinstalar algumas aplicações"</string>
-    <string name="upgrade_out_of_memory_retry" msgid="8431289830472724609">"Repetir actualização"</string>
     <string name="search_results_searching" msgid="3984833028938569930">"A pesquisar..."</string>
     <string name="menu_display_selected" msgid="6470001164297969034">"Mostrar seleccionados"</string>
     <string name="menu_display_all" msgid="8887488642609786198">"Mostrar tudo"</string>
@@ -160,10 +164,10 @@
     <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>
-  <plurals name="merge_info">
-    <item quantity="one" msgid="148365587896371969">"não intercalado(s)"</item>
-    <item quantity="other" msgid="425683718017380845">"intercalado a partir de <xliff:g id="COUNT">%0$d</xliff:g> origens"</item>
-  </plurals>
+    <plurals name="merge_info" formatted="false" msgid="2489323424994280962">
+      <item quantity="other">intercalados de <xliff:g id="COUNT">%0$d</xliff:g> origens</item>
+      <item quantity="one">não intercalado</item>
+    </plurals>
     <string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"Associar o contacto actual ao contacto selecionado?"</string>
     <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Alternar para edição do contacto selecionado? A informação introduzida até agora vai ser copiada."</string>
     <string name="menu_copyContact" msgid="1573960845106822639">"Copiar para Os Meus Contactos"</string>
@@ -172,7 +176,7 @@
     <string name="list_filter_custom" msgid="8910173055702057002">"Personalizado"</string>
     <string name="activity_title_settings" msgid="5464130076132770781">"Definições"</string>
     <string name="menu_settings" msgid="377929915873428211">"Definições"</string>
-    <string name="menu_help" msgid="5123887102216637725">"Ajuda"</string>
+    <string name="menu_help" msgid="1680178646764069976">"Ajuda e comentários"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"Opções de visualização"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="non_phone_caption" msgid="1541655052330027380">"Número de telefone"</string>
@@ -188,19 +192,19 @@
     <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Importar contactos"</string>
     <string name="create_group_dialog_title" msgid="6874527142828424475">"Criar novo grupo"</string>
     <string name="create_group_item_label" msgid="4411981763169654825">"Criar novo grupo"</string>
-  <plurals name="num_groups_in_account">
-    <item quantity="one" msgid="2944819210288517794">"1 grupo"</item>
-    <item quantity="other" msgid="1276758425904917367">"<xliff:g id="COUNT">%0$d</xliff:g> grupos"</item>
-  </plurals>
+    <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
+      <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> grupos</item>
+      <item quantity="one">1 grupo</item>
+    </plurals>
     <string name="delete_group_dialog_message" msgid="7586856514337560529">"Eliminar o grupo \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\"? (Os contactos não serão eliminados)."</string>
-  <plurals name="num_contacts_in_group">
-    <item quantity="one" msgid="1352418549951013448">"<xliff:g id="COUNT_0">%1$d</xliff:g> pessoa de <xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>"</item>
-    <item quantity="other" msgid="8146027769011086349">"<xliff:g id="COUNT_0">%1$d</xliff:g> pessoas de <xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>"</item>
-  </plurals>
-  <plurals name="group_list_num_contacts_in_group">
-    <item quantity="one" msgid="3323065321661972446">"<xliff:g id="COUNT">%1$d</xliff:g> pessoa"</item>
-    <item quantity="other" msgid="6251996206137048525">"<xliff:g id="COUNT">%1$d</xliff:g> pessoas"</item>
-  </plurals>
+    <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> pessoas de <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> pessoa de <xliff:g id="ACCOUNT_TYPE_1">%2$s</xliff:g></item>
+    </plurals>
+    <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
+      <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> pessoas</item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> pessoa</item>
+    </plurals>
     <string name="toast_join_with_empty_contact" msgid="2238581529864542985">"Introduza o nome do contacto antes de juntar a outro contacto."</string>
     <string name="copy_text" msgid="3257145021583508761">"Copiar para área de transf."</string>
     <string name="set_default" msgid="4417505153468300351">"Definir a predefinição"</string>
@@ -264,4 +268,5 @@
     <string name="content_description_recent_call" msgid="5183800406316723676">"chamada recente. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. clique para ligar de volta"</string>
     <string name="message_from_you_prefix" msgid="7180706529908434482">"O utilizador: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
     <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"O Hangouts funciona melhor quando introduz o identificador do Hangouts da pessoa no campo do email ou no campo do telefone."</string>
+    <string name="compact_editor_more_fields" msgid="2874181192382284115">"Mais campos"</string>
 </resources>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index e13b735..e56a6ee 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -46,6 +46,7 @@
     <string name="description_action_menu_add_star" msgid="3327186327234177456">"Adicionado aos favoritos"</string>
     <string name="menu_editContact" msgid="9042415603857662633">"Editar"</string>
     <string name="menu_deleteContact" msgid="6788644058868189393">"Excluir"</string>
+    <string name="menu_change_photo" msgid="7769177631511496210">"Alterar foto"</string>
     <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Colocar na tela inicial"</string>
     <string name="menu_call" msgid="3992595586042260618">"Ligar para contato"</string>
     <string name="menu_sendSMS" msgid="5535886767547006515">"Enviar SMS/MMS para o contato"</string>
@@ -56,17 +57,23 @@
     <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Adicionar grupo"</string>
     <string name="splitConfirmation_title" msgid="633640935430370530">"Dividir contato?"</string>
     <string name="splitConfirmation" msgid="740190210499587175">"Este contato será separado em vários contatos."</string>
-    <string name="menu_joinAggregate" msgid="5027981918265667970">"Unir"</string>
+    <string name="menu_joinAggregate" msgid="4050157483569357666">"Mesclar"</string>
     <string name="titleJoinContactDataWith" msgid="7684875775798635354">"Unir contatos"</string>
     <string name="blurbJoinContactDataWith" msgid="8736488417422708236">"Selecione o contato que deseja mesclar com <xliff:g id="NAME">%s</xliff:g>:"</string>
     <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Mostrar todos os contatos"</string>
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Contatos sugeridos"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Todos os contatos"</string>
-    <string name="contactsJoinedMessage" msgid="7208148163607047389">"Contatos unificados"</string>
+    <string name="contactsJoinedMessage" msgid="656936718666768589">"Contatos mesclados"</string>
+    <string name="contacts_deleted_toast" msgid="286851430992788215">"Contatos excluídos"</string>
     <string name="menu_set_ring_tone" msgid="8728345772068064946">"Definir toque"</string>
     <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Todas as cham. p/ correio voz"</string>
     <string name="readOnlyContactWarning" msgid="7808825687289848259">"Não é possível excluir os contatos das contas somente leitura, mas você pode ocultá-los nas suas listas de contatos."</string>
     <string name="readOnlyContactDeleteConfirmation" msgid="2137170726670196909">"Este contato contém informações de diversas contas. As informações de contas somente de leitura ficarão ocultas nas suas listas de contatos, mas não serão excluídas."</string>
+    <string name="batch_merge_single_contact_warning" msgid="982585201970392110">"Selecione pelo menos dois contatos para realizar uma mesclagem."</string>
+    <string name="batch_merge_confirmation" msgid="8551299480317422420">"Os contatos selecionados serão mesclados em um único contato."</string>
+    <string name="batch_delete_confirmation" msgid="2564172328268885394">"Os contatos selecionados serão excluídos."</string>
+    <string name="batch_delete_read_only_contact_confirmation" msgid="6614878716815412523">"As informações de contas somente de leitura ficarão ocultas nas suas listas de contatos, mas não serão excluídas."</string>
+    <string name="batch_delete_multiple_accounts_confirmation" msgid="5189722181586680185">"Esses contatos contêm informações de diversas contas. As informações de contas somente de leitura ficarão ocultas nas suas listas de contatos, mas não serão excluídas."</string>
     <string name="multipleContactDeleteConfirmation" msgid="938900978442960800">"Excluir este contato irá excluir informações de várias contas."</string>
     <string name="deleteConfirmation" msgid="811706994761610640">"Este contato será excluído."</string>
     <string name="menu_discard" msgid="6854657936970228164">"Descartar alterações"</string>
@@ -94,20 +101,20 @@
     <string name="contactSavedErrorToast" msgid="3207250533172944892">"Não foi possível salvar as alterações do contato."</string>
     <string name="groupSavedToast" msgid="1168756874239833756">"Grupo salvo."</string>
     <string name="groupSavedErrorToast" msgid="7984466936615304740">"Não foi possível salvar as alterações de grupo."</string>
-  <plurals name="listTotalPhoneContacts">
-    <item quantity="one" msgid="3015357862286673986">"Um contato com número de telefone"</item>
-    <item quantity="other" msgid="3299954047880968205">"<xliff:g id="COUNT">%d</xliff:g> contatos com números de telefone"</item>
-  </plurals>
+    <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
+      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> contatos com números de telefone</item>
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> contatos com números de telefone</item>
+    </plurals>
     <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"Nenhum contato com números de telefone"</string>
-  <plurals name="listFoundAllContacts">
-    <item quantity="one" msgid="5517063038754171134">"Um encontrado"</item>
-    <item quantity="other" msgid="3852668542926965042">"<xliff:g id="COUNT">%d</xliff:g> encontrados"</item>
-  </plurals>
+    <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
+      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> encontrados</item>
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> encontrados</item>
+    </plurals>
     <string name="listFoundAllContactsZero" msgid="922980883593159444">"Nenhum contato"</string>
-  <plurals name="searchFoundContacts">
-    <item quantity="one" msgid="4826918429708286628">"Um encontrado"</item>
-    <item quantity="other" msgid="7988132539476575389">"<xliff:g id="COUNT">%d</xliff:g> encontrados"</item>
-  </plurals>
+    <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
+      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> encontrados</item>
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> encontrados</item>
+    </plurals>
     <string name="all_contacts_tab_label" msgid="6250372293594147703">"Todos"</string>
     <string name="favorites_tab_label" msgid="1524869648904016414">"Favoritos"</string>
     <string name="callBack" msgid="5498224409038809224">"Retornar chamada"</string>
@@ -144,9 +151,6 @@
     <string name="pick_new_photo" msgid="9122450996263688237">"Selecionar nova foto"</string>
     <string name="locale_change_in_progress" msgid="7583992153091537467">"A lista de contatos está sendo atualizada para incorporar a alteração do idioma."</string>
     <string name="upgrade_in_progress" msgid="474511436863451061">"A lista de contatos está sendo atualizada."</string>
-    <string name="upgrade_out_of_memory" msgid="1209994418877625940">"Os contatos estão sendo atualizados no momento. \n\nO processo de atualização requer aproximadamente <xliff:g id="SIZE_IN_MEGABYTES">%s</xliff:g> MB de armazenamento interno.\n\nEscolha uma das seguintes opções:"</string>
-    <string name="upgrade_out_of_memory_uninstall" msgid="1721798828992091432">"Desinstalar alguns apps"</string>
-    <string name="upgrade_out_of_memory_retry" msgid="8431289830472724609">"Tentar atualizar novamente"</string>
     <string name="search_results_searching" msgid="3984833028938569930">"Pesquisando..."</string>
     <string name="menu_display_selected" msgid="6470001164297969034">"Mostrar selecionados"</string>
     <string name="menu_display_all" msgid="8887488642609786198">"Mostrar todos"</string>
@@ -160,10 +164,10 @@
     <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>
-  <plurals name="merge_info">
-    <item quantity="one" msgid="148365587896371969">"não mesclado"</item>
-    <item quantity="other" msgid="425683718017380845">"mesclado a partir de <xliff:g id="COUNT">%0$d</xliff:g> origens"</item>
-  </plurals>
+    <plurals name="merge_info" formatted="false" msgid="2489323424994280962">
+      <item quantity="one">mesclados de <xliff:g id="COUNT">%0$d</xliff:g> fontes</item>
+      <item quantity="other">mesclados de <xliff:g id="COUNT">%0$d</xliff:g> fontes</item>
+    </plurals>
     <string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"Unir o contato atual ao contato selecionado?"</string>
     <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Alternar para a edição do contato selecionado? As informações inseridas até agora serão copiadas."</string>
     <string name="menu_copyContact" msgid="1573960845106822639">"Copiar para Meus contatos"</string>
@@ -172,7 +176,7 @@
     <string name="list_filter_custom" msgid="8910173055702057002">"Personalizado"</string>
     <string name="activity_title_settings" msgid="5464130076132770781">"Configurações"</string>
     <string name="menu_settings" msgid="377929915873428211">"Configurações"</string>
-    <string name="menu_help" msgid="5123887102216637725">"Ajudar"</string>
+    <string name="menu_help" msgid="1680178646764069976">"Ajuda e feedback"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"Opções de exibição"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="non_phone_caption" msgid="1541655052330027380">"Número de telefone"</string>
@@ -188,19 +192,19 @@
     <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Importar contatos"</string>
     <string name="create_group_dialog_title" msgid="6874527142828424475">"Criar um novo grupo"</string>
     <string name="create_group_item_label" msgid="4411981763169654825">"Criar novo grupo"</string>
-  <plurals name="num_groups_in_account">
-    <item quantity="one" msgid="2944819210288517794">"Um grupo"</item>
-    <item quantity="other" msgid="1276758425904917367">"<xliff:g id="COUNT">%0$d</xliff:g> grupos"</item>
-  </plurals>
+    <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
+      <item quantity="one"><xliff:g id="COUNT">%0$d</xliff:g> grupos</item>
+      <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> grupos</item>
+    </plurals>
     <string name="delete_group_dialog_message" msgid="7586856514337560529">"Excluir o grupo \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\"? Os contatos não serão apagados."</string>
-  <plurals name="num_contacts_in_group">
-    <item quantity="one" msgid="1352418549951013448">"<xliff:g id="COUNT_0">%1$d</xliff:g> pessoa de <xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>"</item>
-    <item quantity="other" msgid="8146027769011086349">"<xliff:g id="COUNT_0">%1$d</xliff:g> pessoas de <xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>"</item>
-  </plurals>
-  <plurals name="group_list_num_contacts_in_group">
-    <item quantity="one" msgid="3323065321661972446">"<xliff:g id="COUNT">%1$d</xliff:g> pessoa"</item>
-    <item quantity="other" msgid="6251996206137048525">"<xliff:g id="COUNT">%1$d</xliff:g> pessoas"</item>
-  </plurals>
+    <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
+      <item quantity="one"><xliff:g id="COUNT_2">%1$d</xliff:g> pessoas de <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> pessoas de <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
+    </plurals>
+    <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
+      <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> pessoas</item>
+      <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> pessoas</item>
+    </plurals>
     <string name="toast_join_with_empty_contact" msgid="2238581529864542985">"Digite o nome de contato antes de juntar a outro."</string>
     <string name="copy_text" msgid="3257145021583508761">"Copiar para área de transferência"</string>
     <string name="set_default" msgid="4417505153468300351">"Definir padrão"</string>
@@ -264,4 +268,5 @@
     <string name="content_description_recent_call" msgid="5183800406316723676">"chamada recente. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. clique para retornar a chamada"</string>
     <string name="message_from_you_prefix" msgid="7180706529908434482">"Você: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
     <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"O Hangouts funciona melhor quando você insere o identificador do Hangouts da pessoa no campo de e-mail ou de telefone."</string>
+    <string name="compact_editor_more_fields" msgid="2874181192382284115">"Mais campos"</string>
 </resources>
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
index 8b51bbc..f123c48 100644
--- a/res/values-ro/strings.xml
+++ b/res/values-ro/strings.xml
@@ -46,6 +46,7 @@
     <string name="description_action_menu_add_star" msgid="3327186327234177456">"Adăugat la preferințe"</string>
     <string name="menu_editContact" msgid="9042415603857662633">"Editaţi"</string>
     <string name="menu_deleteContact" msgid="6788644058868189393">"Ștergeţi"</string>
+    <string name="menu_change_photo" msgid="7769177631511496210">"Schimbați fotografia"</string>
     <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Plasaţi în ecranul de pornire"</string>
     <string name="menu_call" msgid="3992595586042260618">"Apelaţi persoana din agendă"</string>
     <string name="menu_sendSMS" msgid="5535886767547006515">"Trimiteţi mesaj text către o persoană din agendă"</string>
@@ -56,17 +57,23 @@
     <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Adăugaţi un grup"</string>
     <string name="splitConfirmation_title" msgid="633640935430370530">"Intrare separată?"</string>
     <string name="splitConfirmation" msgid="740190210499587175">"Această persoană de contact va fi separată în mai multe intrări în Agendă."</string>
-    <string name="menu_joinAggregate" msgid="5027981918265667970">"Îmbinați"</string>
+    <string name="menu_joinAggregate" msgid="4050157483569357666">"Îmbinați"</string>
     <string name="titleJoinContactDataWith" msgid="7684875775798635354">"Îmbinați intrările din Agendă"</string>
     <string name="blurbJoinContactDataWith" msgid="8736488417422708236">"Alegeţi persoana de contact de asociat cu <xliff:g id="NAME">%s</xliff:g>:"</string>
     <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Afişaţi toate persoanele din agendă"</string>
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Persoane din agendă sugerate"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Toate persoanele din agendă"</string>
-    <string name="contactsJoinedMessage" msgid="7208148163607047389">"Intrările din agendă au fost îmbinate"</string>
+    <string name="contactsJoinedMessage" msgid="656936718666768589">"Persoane de contact îmbinate"</string>
+    <string name="contacts_deleted_toast" msgid="286851430992788215">"Persoane de contact șterse"</string>
     <string name="menu_set_ring_tone" msgid="8728345772068064946">"Setaţi ton apel"</string>
     <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Toate apel. către mesag. voc."</string>
     <string name="readOnlyContactWarning" msgid="7808825687289848259">"Nu puteţi şterge persoane din agendă, din conturi cu permisiuni doar de citire, însă puteţi să le ascundeţi în lista dvs. de persoane din agendă."</string>
     <string name="readOnlyContactDeleteConfirmation" msgid="2137170726670196909">"Informaţiile despre această persoană din agendă provin din mai multe conturi. Informaţiile provenite din conturile numai în citire nu vor fi şterse din lista dvs., ci doar ascunse."</string>
+    <string name="batch_merge_single_contact_warning" msgid="982585201970392110">"Pentru o îmbinare aveți nevoie de cel puțin două persoane de contact selectate."</string>
+    <string name="batch_merge_confirmation" msgid="8551299480317422420">"Persoanele de contact selectate vor fi îmbinate într-o singură persoană de contact."</string>
+    <string name="batch_delete_confirmation" msgid="2564172328268885394">"Persoanele de contact selectate vor fi șterse."</string>
+    <string name="batch_delete_read_only_contact_confirmation" msgid="6614878716815412523">"Informațiile din conturile numai în citire vor fi ascunse în lista persoanelor de contact, nu vor fi șterse."</string>
+    <string name="batch_delete_multiple_accounts_confirmation" msgid="5189722181586680185">"Pentru aceste persoane de contact există informații din mai multe conturi. Informațiile din conturile numai în citire vor fi ascunse în lista persoanelor de contact, nu vor fi șterse."</string>
     <string name="multipleContactDeleteConfirmation" msgid="938900978442960800">"Ștergerea acestei persoane din agendă va elimina informaţii din mai multe conturi."</string>
     <string name="deleteConfirmation" msgid="811706994761610640">"Această persoană va fi ştearsă din agendă."</string>
     <string name="menu_discard" msgid="6854657936970228164">"Renunțați la modificări"</string>
@@ -94,20 +101,23 @@
     <string name="contactSavedErrorToast" msgid="3207250533172944892">"Nu s-au putut salva modificările aduse persoanei de contact."</string>
     <string name="groupSavedToast" msgid="1168756874239833756">"Grupul a fost salvat."</string>
     <string name="groupSavedErrorToast" msgid="7984466936615304740">"Nu s-au putut salva modificările aduse grupului."</string>
-  <plurals name="listTotalPhoneContacts">
-    <item quantity="one" msgid="3015357862286673986">"1 persoană din agendă cu număr de telefon"</item>
-    <item quantity="other" msgid="3299954047880968205">"<xliff:g id="COUNT">%d</xliff:g> (de) persoane din agendă cu numere de telefon"</item>
-  </plurals>
+    <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>
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> de persoane de contact cu numere de telefon</item>
+      <item quantity="one">O persoană de contact cu număr de telefon</item>
+    </plurals>
     <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"Nicio persoană din agendă cu numere de telefon"</string>
-  <plurals name="listFoundAllContacts">
-    <item quantity="one" msgid="5517063038754171134">"A fost găsită 1 persoană din agendă"</item>
-    <item quantity="other" msgid="3852668542926965042">"Au fost găsite <xliff:g id="COUNT">%d</xliff:g> (de) persoane din agendă"</item>
-  </plurals>
+    <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
+      <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> persoane de contact găsite</item>
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> de persoane de contact găsite</item>
+      <item quantity="one">O persoană de contact găsită</item>
+    </plurals>
     <string name="listFoundAllContactsZero" msgid="922980883593159444">"Nu există persoane în agendă"</string>
-  <plurals name="searchFoundContacts">
-    <item quantity="one" msgid="4826918429708286628">"A fost găsită 1 persoană din agendă"</item>
-    <item quantity="other" msgid="7988132539476575389">"Au fost găsite <xliff:g id="COUNT">%d</xliff:g> (de) persoane din agendă"</item>
-  </plurals>
+    <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
+      <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> persoane de contact găsite</item>
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> de persoane de contact găsite</item>
+      <item quantity="one">O persoană de contact găsită</item>
+    </plurals>
     <string name="all_contacts_tab_label" msgid="6250372293594147703">"Toată agenda"</string>
     <string name="favorites_tab_label" msgid="1524869648904016414">"Preferate"</string>
     <string name="callBack" msgid="5498224409038809224">"Apelaţi din nou"</string>
@@ -118,7 +128,7 @@
     <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>
-    <string name="quickcontact_missing_app" msgid="358168575340921552">"Nu s-a găsit o aplicaţie care să gestioneze această acţiune."</string>
+    <string name="quickcontact_missing_app" msgid="358168575340921552">"Nu s-a găsit o aplicație care să gestioneze această acţiune."</string>
     <string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Dați clic pentru a reveni la ecranul anterior"</string>
     <string name="quickcontact_add_phone_number" msgid="731665835910658965">"Adăugați un număr de telefon"</string>
     <string name="quickcontact_add_email" msgid="739298028384348482">"Adăugaţi o adresă de e-mail"</string>
@@ -136,7 +146,7 @@
     <string name="account_type_format" msgid="718948015590343010">"Persoana din agendă din <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
     <!-- no translation found for from_account_format (4469138575127580203) -->
     <skip />
-    <string name="contact_read_only" msgid="7421346527289472273">"Nu se poate edita din această aplicaţie"</string>
+    <string name="contact_read_only" msgid="7421346527289472273">"Nu se poate edita din această aplicație"</string>
     <string name="group_read_only" msgid="1061762906115697637">"Nu poate fi editat pe acest dispozitiv."</string>
     <string name="take_photo" msgid="7496128293167402354">"Fotografiaţi"</string>
     <string name="take_new_photo" msgid="7341354729436576304">"Creaţi o fotografie nouă"</string>
@@ -144,9 +154,6 @@
     <string name="pick_new_photo" msgid="9122450996263688237">"Selectați o fotografie nouă"</string>
     <string name="locale_change_in_progress" msgid="7583992153091537467">"Se actualizează lista de persoane din agendă pentru a reflecta schimbarea limbii."</string>
     <string name="upgrade_in_progress" msgid="474511436863451061">"Se actualizează lista de persoane din agendă."</string>
-    <string name="upgrade_out_of_memory" msgid="1209994418877625940">"Agenda este în proces de trecere la o versiune superioară. \n\nAcest proces necesită aproximativ <xliff:g id="SIZE_IN_MEGABYTES">%s</xliff:g> MO din spaţiul de stocare intern.\n\nAlegeţi una dintre următoarele opţiuni:"</string>
-    <string name="upgrade_out_of_memory_uninstall" msgid="1721798828992091432">"Dezinstalaţi unele aplicaţii"</string>
-    <string name="upgrade_out_of_memory_retry" msgid="8431289830472724609">"Încercaţi din nou trecerea la o versiune superioară"</string>
     <string name="search_results_searching" msgid="3984833028938569930">"Se caută..."</string>
     <string name="menu_display_selected" msgid="6470001164297969034">"Afişaţi elementele selectate"</string>
     <string name="menu_display_all" msgid="8887488642609786198">"Afişaţi-i pe toţi"</string>
@@ -160,10 +167,11 @@
     <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>
-  <plurals name="merge_info">
-    <item quantity="one" msgid="148365587896371969">"nu au fost îmbinate"</item>
-    <item quantity="other" msgid="425683718017380845">"au fost îmbinate din <xliff:g id="COUNT">%0$d</xliff:g> surse"</item>
-  </plurals>
+    <plurals name="merge_info" formatted="false" msgid="2489323424994280962">
+      <item quantity="few">au fost îmbinate din <xliff:g id="COUNT">%0$d</xliff:g> surse</item>
+      <item quantity="other">au fost îmbinate din <xliff:g id="COUNT">%0$d</xliff:g> de surse</item>
+      <item quantity="one">nu au fost îmbinate</item>
+    </plurals>
     <string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"Îmbinați intrarea curentă din agendă cu intrarea selectată?"</string>
     <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Comutaţi la funcţia de editare a persoanei din agendă selectate? Informaţiile introduse până acum vor fi copiate."</string>
     <string name="menu_copyContact" msgid="1573960845106822639">"Copiaţi în Agendă"</string>
@@ -172,7 +180,7 @@
     <string name="list_filter_custom" msgid="8910173055702057002">"Personalizată"</string>
     <string name="activity_title_settings" msgid="5464130076132770781">"Setări"</string>
     <string name="menu_settings" msgid="377929915873428211">"Setări"</string>
-    <string name="menu_help" msgid="5123887102216637725">"Ajutor"</string>
+    <string name="menu_help" msgid="1680178646764069976">"Ajutor și feedback"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"Opţiuni de afişare"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="non_phone_caption" msgid="1541655052330027380">"Număr de telefon"</string>
@@ -188,19 +196,22 @@
     <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Importaţi Agenda"</string>
     <string name="create_group_dialog_title" msgid="6874527142828424475">"Creaţi un grup nou"</string>
     <string name="create_group_item_label" msgid="4411981763169654825">"Creaţi un grup nou"</string>
-  <plurals name="num_groups_in_account">
-    <item quantity="one" msgid="2944819210288517794">"1 grup"</item>
-    <item quantity="other" msgid="1276758425904917367">"<xliff:g id="COUNT">%0$d</xliff:g> (de) grupuri"</item>
-  </plurals>
+    <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
+      <item quantity="few"><xliff:g id="COUNT">%0$d</xliff:g> grupuri</item>
+      <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> de grupuri</item>
+      <item quantity="one">Un grup</item>
+    </plurals>
     <string name="delete_group_dialog_message" msgid="7586856514337560529">"Ștergeţi grupul „<xliff:g id="GROUP_LABEL">%1$s</xliff:g>”? (Agenda nu va fi ştearsă.)"</string>
-  <plurals name="num_contacts_in_group">
-    <item quantity="one" msgid="1352418549951013448">"<xliff:g id="COUNT_0">%1$d</xliff:g> persoană din <xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>"</item>
-    <item quantity="other" msgid="8146027769011086349">"<xliff:g id="COUNT_0">%1$d</xliff:g> (de) persoane din <xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>"</item>
-  </plurals>
-  <plurals name="group_list_num_contacts_in_group">
-    <item quantity="one" msgid="3323065321661972446">"<xliff:g id="COUNT">%1$d</xliff:g> persoană"</item>
-    <item quantity="other" msgid="6251996206137048525">"<xliff:g id="COUNT">%1$d</xliff:g> (de) persoane"</item>
-  </plurals>
+    <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
+      <item quantity="few"><xliff:g id="COUNT_2">%1$d</xliff:g> persoane din <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> de persoane din <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> persoană din <xliff:g id="ACCOUNT_TYPE_1">%2$s</xliff:g></item>
+    </plurals>
+    <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
+      <item quantity="few"><xliff:g id="COUNT_1">%1$d</xliff:g> persoane</item>
+      <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> de persoane</item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> persoană</item>
+    </plurals>
     <string name="toast_join_with_empty_contact" msgid="2238581529864542985">"Introduceţi un nume pentru intrarea din agendă înainte de îmbinarea cu altă intrare."</string>
     <string name="copy_text" msgid="3257145021583508761">"Copiaţi în clipboard"</string>
     <string name="set_default" msgid="4417505153468300351">"Setaţi ca prestabilit"</string>
@@ -264,4 +275,5 @@
     <string name="content_description_recent_call" msgid="5183800406316723676">"apel recent. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. dați clic pentru a apela"</string>
     <string name="message_from_you_prefix" msgid="7180706529908434482">"Dvs.: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
     <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"Hangouts funcționează mai bine când introduceți identificatorul Hangouts al persoanei în câmpul pentru adresa de e-mail sau în câmpul pentru numărul de telefon."</string>
+    <string name="compact_editor_more_fields" msgid="2874181192382284115">"Mai multe câmpuri"</string>
 </resources>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index eaccb7e..6fe02cd 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -46,6 +46,7 @@
     <string name="description_action_menu_add_star" msgid="3327186327234177456">"Добавлено в избранное"</string>
     <string name="menu_editContact" msgid="9042415603857662633">"Изменить"</string>
     <string name="menu_deleteContact" msgid="6788644058868189393">"Удалить"</string>
+    <string name="menu_change_photo" msgid="7769177631511496210">"Сменить фото"</string>
     <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Поместить на главный экран"</string>
     <string name="menu_call" msgid="3992595586042260618">"Позвонить"</string>
     <string name="menu_sendSMS" msgid="5535886767547006515">"Отправить SMS/MMS"</string>
@@ -56,17 +57,23 @@
     <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Добавить группу"</string>
     <string name="splitConfirmation_title" msgid="633640935430370530">"Разделение контакта"</string>
     <string name="splitConfirmation" msgid="740190210499587175">"Этот контакт будет разделен."</string>
-    <string name="menu_joinAggregate" msgid="5027981918265667970">"Объединить"</string>
+    <string name="menu_joinAggregate" msgid="4050157483569357666">"Объединить"</string>
     <string name="titleJoinContactDataWith" msgid="7684875775798635354">"Объединить контакты"</string>
-    <string name="blurbJoinContactDataWith" msgid="8736488417422708236">"Выберите контакт, который хотите объединить с \"<xliff:g id="NAME">%s</xliff:g>\":"</string>
+    <string name="blurbJoinContactDataWith" msgid="8736488417422708236">"Выберите контакт, который нужно объединить с \"<xliff:g id="NAME">%s</xliff:g>\":"</string>
     <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Показать все контакты"</string>
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Предлагаемые контакты"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Все контакты"</string>
-    <string name="contactsJoinedMessage" msgid="7208148163607047389">"Контакты объединены"</string>
+    <string name="contactsJoinedMessage" msgid="656936718666768589">"Контакты объединены"</string>
+    <string name="contacts_deleted_toast" msgid="286851430992788215">"Контакты удалены"</string>
     <string name="menu_set_ring_tone" msgid="8728345772068064946">"Задать рингтон"</string>
     <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Только голос. почта"</string>
     <string name="readOnlyContactWarning" msgid="7808825687289848259">"Невозможно удалить контакты из аккаунта, доступного только для чтения, однако их можно скрыть в списках контактов."</string>
     <string name="readOnlyContactDeleteConfirmation" msgid="2137170726670196909">"Этот контакт содержит информацию из различных аккаунтов. Информация из аккаунтов, доступных только для чтения, будет скрыта в ваших списках контактов, но не удалена."</string>
+    <string name="batch_merge_single_contact_warning" msgid="982585201970392110">"Для объединения нужно хотя бы два контакта."</string>
+    <string name="batch_merge_confirmation" msgid="8551299480317422420">"Выбранные контакты будут объединены в один."</string>
+    <string name="batch_delete_confirmation" msgid="2564172328268885394">"Выбранные контакты будут удалены."</string>
+    <string name="batch_delete_read_only_contact_confirmation" msgid="6614878716815412523">"Информация из аккаунтов, доступных только для чтения, будет скрыта в списках контактов, но не удалена."</string>
+    <string name="batch_delete_multiple_accounts_confirmation" msgid="5189722181586680185">"Эти контакты содержат данные из нескольких аккаунтов. Информация из аккаунтов, доступных только для чтения, будет скрыта в списках контактов, но не удалена."</string>
     <string name="multipleContactDeleteConfirmation" msgid="938900978442960800">"Удаление этого контакта приведет к потере данных из нескольких аккаунтов."</string>
     <string name="deleteConfirmation" msgid="811706994761610640">"Этот контакт будет удален."</string>
     <string name="menu_discard" msgid="6854657936970228164">"Отмена"</string>
@@ -94,20 +101,26 @@
     <string name="contactSavedErrorToast" msgid="3207250533172944892">"Не удалось сохранить изменения."</string>
     <string name="groupSavedToast" msgid="1168756874239833756">"Группа сохранена."</string>
     <string name="groupSavedErrorToast" msgid="7984466936615304740">"Не удалось сохранить изменения."</string>
-  <plurals name="listTotalPhoneContacts">
-    <item quantity="one" msgid="3015357862286673986">"Контакты с номерами телефона: 1"</item>
-    <item quantity="other" msgid="3299954047880968205">"Контакты с номерами телефонов: <xliff:g id="COUNT">%d</xliff:g>"</item>
-  </plurals>
+    <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>
+      <item quantity="many"><xliff:g id="COUNT">%d</xliff:g> контактов с номером телефона</item>
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> контактов с номером телефона</item>
+    </plurals>
     <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"Нет контактов с номерами телефонов"</string>
-  <plurals name="listFoundAllContacts">
-    <item quantity="one" msgid="5517063038754171134">"Найдено: 1"</item>
-    <item quantity="other" msgid="3852668542926965042">"Найдено: <xliff:g id="COUNT">%d</xliff:g>"</item>
-  </plurals>
+    <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
+      <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>
     <string name="listFoundAllContactsZero" msgid="922980883593159444">"Нет контактов"</string>
-  <plurals name="searchFoundContacts">
-    <item quantity="one" msgid="4826918429708286628">"Найдено: 1"</item>
-    <item quantity="other" msgid="7988132539476575389">"Найдено: <xliff:g id="COUNT">%d</xliff:g>"</item>
-  </plurals>
+    <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
+      <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>
     <string name="all_contacts_tab_label" msgid="6250372293594147703">"Все"</string>
     <string name="favorites_tab_label" msgid="1524869648904016414">"Избранные"</string>
     <string name="callBack" msgid="5498224409038809224">"Перезвонить"</string>
@@ -144,9 +157,6 @@
     <string name="pick_new_photo" msgid="9122450996263688237">"Выбрать другое фото"</string>
     <string name="locale_change_in_progress" msgid="7583992153091537467">"Список контактов обновляется после смены языка интерфейса."</string>
     <string name="upgrade_in_progress" msgid="474511436863451061">"Список контактов обновляется..."</string>
-    <string name="upgrade_out_of_memory" msgid="1209994418877625940">"Контакты обновляются.\n\nДля этого требуется около <xliff:g id="SIZE_IN_MEGABYTES">%s</xliff:g> МБ внутренней памяти.\n\nВыберите подходящую опцию:"</string>
-    <string name="upgrade_out_of_memory_uninstall" msgid="1721798828992091432">"Удалить некоторые приложения"</string>
-    <string name="upgrade_out_of_memory_retry" msgid="8431289830472724609">"Повторить попытку обновления"</string>
     <string name="search_results_searching" msgid="3984833028938569930">"Поиск…"</string>
     <string name="menu_display_selected" msgid="6470001164297969034">"Показать выбранные"</string>
     <string name="menu_display_all" msgid="8887488642609786198">"Показать все"</string>
@@ -160,10 +170,12 @@
     <string name="primary_photo" msgid="8517942231868516999">"Основное фото"</string>
     <string name="description_star" msgid="2605854427360036550">"избранное"</string>
     <string name="edit_contact" msgid="7529281274005689512">"Изменить контакт"</string>
-  <plurals name="merge_info">
-    <item quantity="one" msgid="148365587896371969">"не объединен"</item>
-    <item quantity="other" msgid="425683718017380845">"объединено из нескольких источников (<xliff:g id="COUNT">%0$d</xliff:g>)"</item>
-  </plurals>
+    <plurals name="merge_info" formatted="false" msgid="2489323424994280962">
+      <item quantity="one">Объединен <xliff:g id="COUNT">%0$d</xliff:g> контакт</item>
+      <item quantity="few">Объединены <xliff:g id="COUNT">%0$d</xliff:g> контакта</item>
+      <item quantity="many">Объединено <xliff:g id="COUNT">%0$d</xliff:g> контактов</item>
+      <item quantity="other">Объединено <xliff:g id="COUNT">%0$d</xliff:g> контактов</item>
+    </plurals>
     <string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"Объединить текущий контакт с выбранным контактом?"</string>
     <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Переключиться на редактирование выбранного контакта? Введенная информация будет скопирована."</string>
     <string name="menu_copyContact" msgid="1573960845106822639">"Копировать в \"Мои контакты\""</string>
@@ -172,7 +184,7 @@
     <string name="list_filter_custom" msgid="8910173055702057002">"Пользовательские"</string>
     <string name="activity_title_settings" msgid="5464130076132770781">"Настройки"</string>
     <string name="menu_settings" msgid="377929915873428211">"Настройки"</string>
-    <string name="menu_help" msgid="5123887102216637725">"Справка"</string>
+    <string name="menu_help" msgid="1680178646764069976">"Справка/отзыв"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"Варианты отображения"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="non_phone_caption" msgid="1541655052330027380">"Номер телефона"</string>
@@ -188,20 +200,26 @@
     <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Импортировать контакты"</string>
     <string name="create_group_dialog_title" msgid="6874527142828424475">"Создание новой группы"</string>
     <string name="create_group_item_label" msgid="4411981763169654825">"Создать группу"</string>
-  <plurals name="num_groups_in_account">
-    <item quantity="one" msgid="2944819210288517794">"1 группа"</item>
-    <item quantity="other" msgid="1276758425904917367">"Групп: <xliff:g id="COUNT">%0$d</xliff:g>"</item>
-  </plurals>
+    <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
+      <item quantity="one"><xliff:g id="COUNT">%0$d</xliff:g> группа</item>
+      <item quantity="few"><xliff:g id="COUNT">%0$d</xliff:g> группы</item>
+      <item quantity="many"><xliff:g id="COUNT">%0$d</xliff:g> групп</item>
+      <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> групп</item>
+    </plurals>
     <string name="delete_group_dialog_message" msgid="7586856514337560529">"Действительно удалить группу \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\"? (Контакты не будут удалены.)"</string>
-  <plurals name="num_contacts_in_group">
-    <item quantity="one" msgid="1352418549951013448">"В группе <xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g> <xliff:g id="COUNT_0">%1$d</xliff:g> чел."</item>
-    <item quantity="other" msgid="8146027769011086349">"В группе <xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g> <xliff:g id="COUNT_0">%1$d</xliff:g> чел."</item>
-  </plurals>
-  <plurals name="group_list_num_contacts_in_group">
-    <item quantity="one" msgid="3323065321661972446">"<xliff:g id="COUNT">%1$d</xliff:g> чел."</item>
-    <item quantity="other" msgid="6251996206137048525">"<xliff:g id="COUNT">%1$d</xliff:g> чел."</item>
-  </plurals>
-    <string name="toast_join_with_empty_contact" msgid="2238581529864542985">"Укажите имя контакта, который хотите объединить."</string>
+    <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
+      <item quantity="one"><xliff:g id="COUNT_2">%1$d</xliff:g> человек из <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
+      <item quantity="few"><xliff:g id="COUNT_2">%1$d</xliff:g> человека из <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
+      <item quantity="many"><xliff:g id="COUNT_2">%1$d</xliff:g> человек из <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> человек из <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
+    </plurals>
+    <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
+      <item quantity="one">В группе <xliff:g id="COUNT_1">%1$d</xliff:g> человек</item>
+      <item quantity="few">В группе <xliff:g id="COUNT_1">%1$d</xliff:g> человека</item>
+      <item quantity="many">В группе <xliff:g id="COUNT_1">%1$d</xliff:g> человек</item>
+      <item quantity="other">В группе <xliff:g id="COUNT_1">%1$d</xliff:g> человек</item>
+    </plurals>
+    <string name="toast_join_with_empty_contact" msgid="2238581529864542985">"Укажите имя контакта, который нужно объединить."</string>
     <string name="copy_text" msgid="3257145021583508761">"Копировать в буфер обмена"</string>
     <string name="set_default" msgid="4417505153468300351">"Установить по умолчанию"</string>
     <string name="clear_default" msgid="7193185801596678067">"Удалить настройки по умолчанию"</string>
@@ -264,4 +282,5 @@
     <string name="content_description_recent_call" msgid="5183800406316723676">"Недавний вызов. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. Нажмите, чтобы перезвонить."</string>
     <string name="message_from_you_prefix" msgid="7180706529908434482">"Вы: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
     <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"Чтобы обеспечить надежную работу Hangouts, указывайте вместо адреса электронной почты или номера телефона идентификатор пользователя в Hangouts."</string>
+    <string name="compact_editor_more_fields" msgid="2874181192382284115">"Другие поля"</string>
 </resources>
diff --git a/res/values-si-rLK/strings.xml b/res/values-si-rLK/strings.xml
index 0930577..593ed6a 100644
--- a/res/values-si-rLK/strings.xml
+++ b/res/values-si-rLK/strings.xml
@@ -46,6 +46,7 @@
     <string name="description_action_menu_add_star" msgid="3327186327234177456">"ප්‍රියතමයන් වෙත එකතු කරන්න"</string>
     <string name="menu_editContact" msgid="9042415603857662633">"සංස්කරණය කරන්න"</string>
     <string name="menu_deleteContact" msgid="6788644058868189393">"මකන්න"</string>
+    <string name="menu_change_photo" msgid="7769177631511496210">"ඡායාරූපය වෙනස් කරන්න"</string>
     <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"මුල් තිරයෙහි තබන්න"</string>
     <string name="menu_call" msgid="3992595586042260618">"සම්බන්ධතාව අමතන්න"</string>
     <string name="menu_sendSMS" msgid="5535886767547006515">"සම්බන්ධතාවයට කෙටි පණිවිඩයක් යවන්න"</string>
@@ -56,17 +57,23 @@
     <string name="menu_new_group_action_bar" msgid="3520232877587377175">"කණ්ඩායමක් එක් කරන්න"</string>
     <string name="splitConfirmation_title" msgid="633640935430370530">"සම්බන්ධතාව වෙන් කරන්නද?"</string>
     <string name="splitConfirmation" msgid="740190210499587175">"මෙම සම්බන්ධතාවය සම්බන්ධතා කිහිපයකට වෙන් කෙරෙනු ඇත."</string>
-    <string name="menu_joinAggregate" msgid="5027981918265667970">"සම්බන්ධ කරන්න"</string>
+    <string name="menu_joinAggregate" msgid="4050157483569357666">"ඒකාබද්ධ කරන්න"</string>
     <string name="titleJoinContactDataWith" msgid="7684875775798635354">"සම්බන්ධතා එකතු කරන්න"</string>
     <string name="blurbJoinContactDataWith" msgid="8736488417422708236">"<xliff:g id="NAME">%s</xliff:g> සමඟ එක් කළ යුතු සම්බන්ධතාවය තෝරන්න:"</string>
     <string name="showAllContactsJoinItem" msgid="2189695051430392383">"සියලු සම්බන්ධතා පෙන්වන්න"</string>
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"යෝජිත සම්බන්ධතා"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"සියලුම සම්බන්ධතා"</string>
-    <string name="contactsJoinedMessage" msgid="7208148163607047389">"සම්බන්ධතා එක්වුණි"</string>
+    <string name="contactsJoinedMessage" msgid="656936718666768589">"සම්බන්ධතා ඒකාබද්ධ කරන ලදි"</string>
+    <string name="contacts_deleted_toast" msgid="286851430992788215">"සම්බන්ධතා ඉවත් කරන ලදි"</string>
     <string name="menu_set_ring_tone" msgid="8728345772068064946">"රිංග්ටෝනය සකසන්න"</string>
     <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"හඬ තැපෑල වෙත සියලු ඇමතුම්"</string>
     <string name="readOnlyContactWarning" msgid="7808825687289848259">"ඔබට සම්බන්ධතා කියවීමට-පමණයි ගිණුම් වලින් මැකිය නොහැක, නමුත් ඔබගේ සම්බන්ධතා ලැයිස්තු තුළ ඔබට ඒවා සැඟවිය හැක."</string>
     <string name="readOnlyContactDeleteConfirmation" msgid="2137170726670196909">"මෙම සම්බන්ධතාවයෙහි ගිණුම් කිහිපයකින් තොරතුරු අඩංගු වේ. කියවීමට-පමණයි ගිණුම් වලින් තොරතුරු ඔබගේ සම්බන්ධතා ලැයිස්තු තුළ සඟවා දැමෙන අතර, මකා දැමීම නොකරයි."</string>
+    <string name="batch_merge_single_contact_warning" msgid="982585201970392110">"ඒකාබද්ධ කිරීමක් සිදු කිරීමට ඔබ විසින් අවම වශයෙන් සම්බන්ධතා දෙකක් තෝරාගත යුතුය."</string>
+    <string name="batch_merge_confirmation" msgid="8551299480317422420">"තෝරාගත් සම්බන්ධතා තනි සම්බන්ධතාවයක් ලෙස ඒකාබද්ධ කෙරෙනු ඇත."</string>
+    <string name="batch_delete_confirmation" msgid="2564172328268885394">"තෝරාගත් සම්බන්ධතා මකා දැමෙනු ඇත."</string>
+    <string name="batch_delete_read_only_contact_confirmation" msgid="6614878716815412523">"කියවීමට-පමණක් වූ ගිණුම්වල තොරතුරු  ඔබේ සම්බන්ධතා ලැයිස්තුවේ සඟවනු ඇත, ඒවා මැකෙනු නොලැබේ."</string>
+    <string name="batch_delete_multiple_accounts_confirmation" msgid="5189722181586680185">"මෙම සම්බන්ධතා වල ගිණුම් කිහිපයක තොරතුරු අන්තර්ගතයි. කියවීමට-පමණක් වූ ගිණුම්වල තොරතුරු ඔබේ සම්බන්ධතා ලැයිස්තුවේ සඟවනු ඇත, ඒවා මකාදමනු නොලැබේ."</string>
     <string name="multipleContactDeleteConfirmation" msgid="938900978442960800">"මෙම සම්බන්ධතාවය මකා දැමීමෙන් ගිණුම් කිහිපයකින් තොරතුරු මකා දැමෙනු ඇත."</string>
     <string name="deleteConfirmation" msgid="811706994761610640">"මෙම සම්බන්ධතාවය මකා දැමෙනු ඇත."</string>
     <string name="menu_discard" msgid="6854657936970228164">"වෙනස්කම් ඉවතලන්න"</string>
@@ -94,20 +101,20 @@
     <string name="contactSavedErrorToast" msgid="3207250533172944892">"සම්බන්ධතා වෙනස්කම් සුරැකීමට නොහැක."</string>
     <string name="groupSavedToast" msgid="1168756874239833756">"කණ්ඩායම සුරකින ලදි."</string>
     <string name="groupSavedErrorToast" msgid="7984466936615304740">"කණ්ඩායම් වෙනස්කම් සුරැකීමට නොහැක."</string>
-  <plurals name="listTotalPhoneContacts">
-    <item quantity="one" msgid="3015357862286673986">"දුරකථන අංක සහිත සම්බන්ධතා 1"</item>
-    <item quantity="other" msgid="3299954047880968205">"දුරකථන අංක සහිත සම්බන්ධතා <xliff:g id="COUNT">%d</xliff:g>"</item>
-  </plurals>
+    <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
+      <item quantity="one">දුරකථන අංක සමඟ සම්බන්ධතාවන් <xliff:g id="COUNT">%d</xliff:g></item>
+      <item quantity="other">දුරකථන අංක සමඟ සම්බන්ධතාවන් <xliff:g id="COUNT">%d</xliff:g></item>
+    </plurals>
     <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"දුරකථන අංක සහිත සම්බන්ධතා නැත"</string>
-  <plurals name="listFoundAllContacts">
-    <item quantity="one" msgid="5517063038754171134">"1 ක් සොයාගන්නා ලදී"</item>
-    <item quantity="other" msgid="3852668542926965042">"<xliff:g id="COUNT">%d</xliff:g> ක් සොයාගන්නා ලදී"</item>
-  </plurals>
+    <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
+      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> ක් හුමු වුණි</item>
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ක් හුමු වුණි</item>
+    </plurals>
     <string name="listFoundAllContactsZero" msgid="922980883593159444">"සම්බන්ධතා නැත"</string>
-  <plurals name="searchFoundContacts">
-    <item quantity="one" msgid="4826918429708286628">"1 ක් සොයාගන්නා ලදී"</item>
-    <item quantity="other" msgid="7988132539476575389">"<xliff:g id="COUNT">%d</xliff:g> ක් සොයාගන්නා ලදී"</item>
-  </plurals>
+    <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
+      <item quantity="one">සොයා ගැනීම් <xliff:g id="COUNT">%d</xliff:g></item>
+      <item quantity="other">සොයා ගැනීම් <xliff:g id="COUNT">%d</xliff:g></item>
+    </plurals>
     <string name="all_contacts_tab_label" msgid="6250372293594147703">"සියලුම සම්බන්ධතා"</string>
     <string name="favorites_tab_label" msgid="1524869648904016414">"ප්‍රියතම"</string>
     <string name="callBack" msgid="5498224409038809224">"නැවත අමතන්න"</string>
@@ -144,9 +151,6 @@
     <string name="pick_new_photo" msgid="9122450996263688237">"අලුත් ඡායාරූපය තෝරන්න"</string>
     <string name="locale_change_in_progress" msgid="7583992153091537467">"භාෂා වෙනස්වීම පෙන්වීමට සම්බන්ධතා ලැයිස්තුව යාවත්කාලීන වෙමින් පවතී"</string>
     <string name="upgrade_in_progress" msgid="474511436863451061">"සම්බන්ධතා ලැයිස්තුව යාවත්කාලීන වෙමින් පවතී."</string>
-    <string name="upgrade_out_of_memory" msgid="1209994418877625940">"සම්බන්ධතා උත්ශ්‍රේණි ක්‍රියාවලියක තිබේ. \n\nඋත්ශ්‍රේණි ක්‍රියාවට <xliff:g id="SIZE_IN_MEGABYTES">%s</xliff:g> MB ක අභ්‍යන්තර දුරකථන ආචයනයක් ආසන්න වශයෙන් අවශ්‍ය වේ.\n\nපහත විකල්ප වලින් එකක් තෝරාගන්න:"</string>
-    <string name="upgrade_out_of_memory_uninstall" msgid="1721798828992091432">"සමහර යෙදුම් අස්ථාපනය කරන්න"</string>
-    <string name="upgrade_out_of_memory_retry" msgid="8431289830472724609">"උත්ශ්‍රේණි කිරීම නැවත උත්සාහ කරන්න"</string>
     <string name="search_results_searching" msgid="3984833028938569930">"සොයමින්..."</string>
     <string name="menu_display_selected" msgid="6470001164297969034">"තෝරාගත් ඒවා පෙන්වන්න"</string>
     <string name="menu_display_all" msgid="8887488642609786198">"සියල්ල පෙන්වන්න"</string>
@@ -160,10 +164,10 @@
     <string name="primary_photo" msgid="8517942231868516999">"ප්‍රාථමික රූප"</string>
     <string name="description_star" msgid="2605854427360036550">"ප්‍රියතම"</string>
     <string name="edit_contact" msgid="7529281274005689512">"සම්බන්ධතාව සංස්කරණය කරන්න"</string>
-  <plurals name="merge_info">
-    <item quantity="one" msgid="148365587896371969">"ඒකාබද්ධ කර නැත"</item>
-    <item quantity="other" msgid="425683718017380845">"මූලාශ්‍ර <xliff:g id="COUNT">%0$d</xliff:g> කින් ඒකාබද්ධ කර ඇත"</item>
-  </plurals>
+    <plurals name="merge_info" formatted="false" msgid="2489323424994280962">
+      <item quantity="one"><xliff:g id="COUNT">%0$d</xliff:g> මූලාශ්‍රයකින් ඒකාබද්ධ කර තිබේ</item>
+      <item quantity="other">මූලාශ්‍ර <xliff:g id="COUNT">%0$d</xliff:g> කින් ඒකාබද්ධ කර තිබේ</item>
+    </plurals>
     <string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"වත්මන් සම්බන්ධතාවය තෝරාගෙන ඇති සම්බන්ධතාවය සමඟ එකතු කරන්නද?"</string>
     <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"තෝරාගෙන ඇති සම්බන්ධතාවය සංස්කරණය කිරීමට මාරු වෙන්නද? ඔබ දැනට ඇතුළු කළ තොරතුරු පිටපත් වනු ඇත."</string>
     <string name="menu_copyContact" msgid="1573960845106822639">"මගේ සම්බන්ධතා වෙතට පිටපත් කරන්න"</string>
@@ -172,7 +176,7 @@
     <string name="list_filter_custom" msgid="8910173055702057002">"අභිරුචි"</string>
     <string name="activity_title_settings" msgid="5464130076132770781">"සැකසීම්"</string>
     <string name="menu_settings" msgid="377929915873428211">"සැකසීම්"</string>
-    <string name="menu_help" msgid="5123887102216637725">"සහාය"</string>
+    <string name="menu_help" msgid="1680178646764069976">"උදවු සහ ප්‍රතිපෝෂණ"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"පෙන්වීම් විකල්ප"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="non_phone_caption" msgid="1541655052330027380">"දුරකථන අංකය"</string>
@@ -188,19 +192,19 @@
     <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"සම්බන්ධතා ආයාත කරන්න"</string>
     <string name="create_group_dialog_title" msgid="6874527142828424475">"නව කණ්ඩායමක් නිර්මාණය කරන්න"</string>
     <string name="create_group_item_label" msgid="4411981763169654825">"නව කණ්ඩායමක් නිර්මාණය කිරීම"</string>
-  <plurals name="num_groups_in_account">
-    <item quantity="one" msgid="2944819210288517794">"කණ්ඩායම් 1"</item>
-    <item quantity="other" msgid="1276758425904917367">"කණ්ඩායම් <xliff:g id="COUNT">%0$d</xliff:g>"</item>
-  </plurals>
+    <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
+      <item quantity="one">කණ්ඩායම් <xliff:g id="COUNT">%0$d</xliff:g></item>
+      <item quantity="other">කණ්ඩායම් <xliff:g id="COUNT">%0$d</xliff:g></item>
+    </plurals>
     <string name="delete_group_dialog_message" msgid="7586856514337560529">"\"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\" කණ්ඩායම මකා දමන්නද? (සම්බන්ධතා මකා දමන්නේ නැත.)"</string>
-  <plurals name="num_contacts_in_group">
-    <item quantity="one" msgid="1352418549951013448">"<xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g> වෙතින් පුද්ගලයින් <xliff:g id="COUNT_0">%1$d</xliff:g>"</item>
-    <item quantity="other" msgid="8146027769011086349">"<xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g> වෙතින් පුද්ගලයින් <xliff:g id="COUNT_0">%1$d</xliff:g>"</item>
-  </plurals>
-  <plurals name="group_list_num_contacts_in_group">
-    <item quantity="one" msgid="3323065321661972446">"පුද්ගලයින් <xliff:g id="COUNT">%1$d</xliff:g>"</item>
-    <item quantity="other" msgid="6251996206137048525">"පුද්ගලයින් <xliff:g id="COUNT">%1$d</xliff:g>"</item>
-  </plurals>
+    <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
+      <item quantity="one"><xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g> වෙතින් පුද්ගලයන් <xliff:g id="COUNT_2">%1$d</xliff:g> යි</item>
+      <item quantity="other"><xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g> වෙතින් පුද්ගලයන් <xliff:g id="COUNT_2">%1$d</xliff:g> යි</item>
+    </plurals>
+    <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
+      <item quantity="one">පුද්ගලයින් <xliff:g id="COUNT_1">%1$d</xliff:g></item>
+      <item quantity="other">පුද්ගලයින් <xliff:g id="COUNT_1">%1$d</xliff:g></item>
+    </plurals>
     <string name="toast_join_with_empty_contact" msgid="2238581529864542985">"වෙනත් එකක් සමඟ එක් කිරීමට කලින් සම්බන්ධතා නම ටයිප් කරන්න."</string>
     <string name="copy_text" msgid="3257145021583508761">"පසුරු පුවරුවට පිටපත් කරන්න"</string>
     <string name="set_default" msgid="4417505153468300351">"සුපුරුදු ලෙස සකසන්න"</string>
@@ -264,4 +268,5 @@
     <string name="content_description_recent_call" msgid="5183800406316723676">"මෑත අමන්තුම්. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. ආපසු ඇමතිමට ක්ලික් කරන්න"</string>
     <string name="message_from_you_prefix" msgid="7180706529908434482">"ඔබ: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
     <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"ඔබ පුද්ගලයාගේ Hangouts හඳුන්වනය ඊ-තැපැල් හෝ දුරකථන ක්ෂේත්‍රයට ඇතුළත් කළ විටHangouts වඩා හොඳින් ක්‍රියා කරයි."</string>
+    <string name="compact_editor_more_fields" msgid="2874181192382284115">"තව ක්ෂේත්‍ර"</string>
 </resources>
diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml
index 0e6523a..a580e7b 100644
--- a/res/values-sk/strings.xml
+++ b/res/values-sk/strings.xml
@@ -46,6 +46,7 @@
     <string name="description_action_menu_add_star" msgid="3327186327234177456">"Pridané medzi obľúbené"</string>
     <string name="menu_editContact" msgid="9042415603857662633">"Upraviť"</string>
     <string name="menu_deleteContact" msgid="6788644058868189393">"Odstrániť"</string>
+    <string name="menu_change_photo" msgid="7769177631511496210">"Zmeniť fotku"</string>
     <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Umiestniť na plochu"</string>
     <string name="menu_call" msgid="3992595586042260618">"Zavolať kontaktu"</string>
     <string name="menu_sendSMS" msgid="5535886767547006515">"Odoslať správu kontaktu"</string>
@@ -56,17 +57,23 @@
     <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Pridať skupinu"</string>
     <string name="splitConfirmation_title" msgid="633640935430370530">"Rozdeliť kontakt?"</string>
     <string name="splitConfirmation" msgid="740190210499587175">"Tento kontakt sa rozdelí do viacerých kontaktov."</string>
-    <string name="menu_joinAggregate" msgid="5027981918265667970">"Spojiť"</string>
+    <string name="menu_joinAggregate" msgid="4050157483569357666">"Zlúčiť"</string>
     <string name="titleJoinContactDataWith" msgid="7684875775798635354">"Spojiť kontakty"</string>
     <string name="blurbJoinContactDataWith" msgid="8736488417422708236">"Vyberte kontakt, ktorý chcete spojiť s kontaktom <xliff:g id="NAME">%s</xliff:g>:"</string>
     <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Zobraziť všetky kontakty"</string>
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Navrhnuté kontakty"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Všetky kontakty"</string>
-    <string name="contactsJoinedMessage" msgid="7208148163607047389">"Kontakty boli spojené"</string>
+    <string name="contactsJoinedMessage" msgid="656936718666768589">"Kontakty boli zlúčené"</string>
+    <string name="contacts_deleted_toast" msgid="286851430992788215">"Kontakty boli odstránené"</string>
     <string name="menu_set_ring_tone" msgid="8728345772068064946">"Nastaviť zvonenie"</string>
     <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Všetky hovory do hl. schránky"</string>
     <string name="readOnlyContactWarning" msgid="7808825687289848259">"Z účtov, ktoré sú iba na čítanie, nie je možné odstrániť kontakty. Tieto kontakty však môžete v zozname kontaktov skryť."</string>
     <string name="readOnlyContactDeleteConfirmation" msgid="2137170726670196909">"Tento kontakt obsahuje informácie z niekoľkých účtov. Informácie z účtov iba na čítanie budú v zoznamoch kontaktov skryté, ale nebudú odstránené."</string>
+    <string name="batch_merge_single_contact_warning" msgid="982585201970392110">"Keď chcete zlučovať, musíte vybrať aspoň dva kontakty."</string>
+    <string name="batch_merge_confirmation" msgid="8551299480317422420">"Vybrané kontakty budú zlúčené do jedného kontaktu."</string>
+    <string name="batch_delete_confirmation" msgid="2564172328268885394">"Vybrané kontakty budú odstránené."</string>
+    <string name="batch_delete_read_only_contact_confirmation" msgid="6614878716815412523">"Informácie z účtov iba na čítanie budú v zoznamoch kontaktov skryté, ale nebudú odstránené."</string>
+    <string name="batch_delete_multiple_accounts_confirmation" msgid="5189722181586680185">"Tieto kontakty obsahujú informácie z niekoľkých účtov. Informácie z účtov iba na čítanie budú v zoznamoch kontaktov skryté, ale nebudú odstránené."</string>
     <string name="multipleContactDeleteConfirmation" msgid="938900978442960800">"Odstránením tohto kontaktu odstránite informácie z viacerých účtov."</string>
     <string name="deleteConfirmation" msgid="811706994761610640">"Tento kontakt bude odstránený."</string>
     <string name="menu_discard" msgid="6854657936970228164">"Zahodiť zmeny"</string>
@@ -94,20 +101,26 @@
     <string name="contactSavedErrorToast" msgid="3207250533172944892">"Nepodarilo sa uložiť zmeny kontaktu."</string>
     <string name="groupSavedToast" msgid="1168756874239833756">"Skupina bola uložená."</string>
     <string name="groupSavedErrorToast" msgid="7984466936615304740">"Nepodarilo sa uložiť zmeny skupiny."</string>
-  <plurals name="listTotalPhoneContacts">
-    <item quantity="one" msgid="3015357862286673986">"1 kontakt s telefónnym číslom"</item>
-    <item quantity="other" msgid="3299954047880968205">"Počet kontaktov s telefónnymi číslami: <xliff:g id="COUNT">%d</xliff:g>"</item>
-  </plurals>
+    <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
+      <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> kontakty s telefónnym číslom</item>
+      <item quantity="many"><xliff:g id="COUNT">%d</xliff:g> kontaktu s telefónnym číslom</item>
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> kontaktov s telefónnym číslom</item>
+      <item quantity="one">1 kontakt s telefónnym číslom</item>
+    </plurals>
     <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"Ku kontaktom nie sú priradené žiadne telefónne čísla"</string>
-  <plurals name="listFoundAllContacts">
-    <item quantity="one" msgid="5517063038754171134">"Počet nájdených položiek: 1"</item>
-    <item quantity="other" msgid="3852668542926965042">"Počet nájdených položiek: <xliff:g id="COUNT">%d</xliff:g>"</item>
-  </plurals>
+    <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
+      <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> nájdené položky</item>
+      <item quantity="many"><xliff:g id="COUNT">%d</xliff:g> nájdenej položky</item>
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> nájdených položiek</item>
+      <item quantity="one">1 nájdená položka</item>
+    </plurals>
     <string name="listFoundAllContactsZero" msgid="922980883593159444">"Žiadne kontakty"</string>
-  <plurals name="searchFoundContacts">
-    <item quantity="one" msgid="4826918429708286628">"Počet nájdených položiek: 1"</item>
-    <item quantity="other" msgid="7988132539476575389">"Počet nájdených položiek: <xliff:g id="COUNT">%d</xliff:g>"</item>
-  </plurals>
+    <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
+      <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> nájdené položky</item>
+      <item quantity="many"><xliff:g id="COUNT">%d</xliff:g> nájdenej položky</item>
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> nájdených položiek</item>
+      <item quantity="one">1 nájdená položka</item>
+    </plurals>
     <string name="all_contacts_tab_label" msgid="6250372293594147703">"Všetky"</string>
     <string name="favorites_tab_label" msgid="1524869648904016414">"Obľúbené"</string>
     <string name="callBack" msgid="5498224409038809224">"Zavolať späť"</string>
@@ -127,7 +140,7 @@
     <string name="menu_add_contact" msgid="3198704337220892684">"Pridať do kontaktov"</string>
     <string name="share_via" msgid="563121028023030093">"Zdieľať kontakt pomocou"</string>
     <string name="dialog_new_group_account" msgid="2318032089273496830">"Vytvoriť skupinu v účte"</string>
-    <string name="audio_chat" msgid="2535716629358298691">"Hlasový rozhovor"</string>
+    <string name="audio_chat" msgid="2535716629358298691">"Hlasový čet"</string>
     <string name="video_chat" msgid="1872255818640336072">"Videohovor"</string>
     <string name="connections" msgid="8098440723172028350">"Spojenia"</string>
     <string name="add_connection_button" msgid="4861308615789601727">"Pridať spojenie"</string>
@@ -144,9 +157,6 @@
     <string name="pick_new_photo" msgid="9122450996263688237">"Vybrať novú fotku"</string>
     <string name="locale_change_in_progress" msgid="7583992153091537467">"V súvislosti so zmenou jazyka prebieha aktualizácia zoznamu kontaktov."</string>
     <string name="upgrade_in_progress" msgid="474511436863451061">"Prebieha aktualizácia zoznamu kontaktov."</string>
-    <string name="upgrade_out_of_memory" msgid="1209994418877625940">"Prebieha inovácia kontaktov. \n\nInovácia vyžaduje približne <xliff:g id="SIZE_IN_MEGABYTES">%s</xliff:g> MB internej pamäte. \n\nZvoľte jednu z nasledujúcich možností:"</string>
-    <string name="upgrade_out_of_memory_uninstall" msgid="1721798828992091432">"Odinštalovať niektoré aplikácie"</string>
-    <string name="upgrade_out_of_memory_retry" msgid="8431289830472724609">"Skúsiť inovovať znova"</string>
     <string name="search_results_searching" msgid="3984833028938569930">"Vyhľadávanie..."</string>
     <string name="menu_display_selected" msgid="6470001164297969034">"Zobraziť vybraté"</string>
     <string name="menu_display_all" msgid="8887488642609786198">"Zobraziť všetky"</string>
@@ -160,10 +170,12 @@
     <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>
-  <plurals name="merge_info">
-    <item quantity="one" msgid="148365587896371969">"zlúčenie sa nepodarilo"</item>
-    <item quantity="other" msgid="425683718017380845">"zlúčené z <xliff:g id="COUNT">%0$d</xliff:g> zdrojov"</item>
-  </plurals>
+    <plurals name="merge_info" formatted="false" msgid="2489323424994280962">
+      <item quantity="few">zlúčenie (počet zdrojov: <xliff:g id="COUNT">%0$d</xliff:g>)</item>
+      <item quantity="many">zlúčenie (počet zdrojov: <xliff:g id="COUNT">%0$d</xliff:g>)</item>
+      <item quantity="other">zlúčenie (počet zdrojov: <xliff:g id="COUNT">%0$d</xliff:g>)</item>
+      <item quantity="one">zlúčenie sa nepodarilo</item>
+    </plurals>
     <string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"Spojiť aktuálny kontakt s vybraným kontaktom?"</string>
     <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Prepnúť do režimu úpravy vybraného kontaktu? Doposiaľ zadané informácie budú skopírované."</string>
     <string name="menu_copyContact" msgid="1573960845106822639">"Skopírovať do priečinka Moje kontakty"</string>
@@ -172,7 +184,7 @@
     <string name="list_filter_custom" msgid="8910173055702057002">"Vlastné"</string>
     <string name="activity_title_settings" msgid="5464130076132770781">"Nastavenia"</string>
     <string name="menu_settings" msgid="377929915873428211">"Nastavenia"</string>
-    <string name="menu_help" msgid="5123887102216637725">"Pomocník"</string>
+    <string name="menu_help" msgid="1680178646764069976">"Pomocník a spätná väzba"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"Možnosti zobrazenia"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="non_phone_caption" msgid="1541655052330027380">"Telefónne číslo"</string>
@@ -188,19 +200,25 @@
     <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Importovať kontakty"</string>
     <string name="create_group_dialog_title" msgid="6874527142828424475">"Vytvoriť novú skupinu"</string>
     <string name="create_group_item_label" msgid="4411981763169654825">"Vytvoriť novú skupinu"</string>
-  <plurals name="num_groups_in_account">
-    <item quantity="one" msgid="2944819210288517794">"Počet skupín: 1"</item>
-    <item quantity="other" msgid="1276758425904917367">"Počet skupín: <xliff:g id="COUNT">%0$d</xliff:g>"</item>
-  </plurals>
+    <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
+      <item quantity="few"><xliff:g id="COUNT">%0$d</xliff:g> skupiny</item>
+      <item quantity="many"><xliff:g id="COUNT">%0$d</xliff:g> skupiny</item>
+      <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> skupín</item>
+      <item quantity="one">1 skupina</item>
+    </plurals>
     <string name="delete_group_dialog_message" msgid="7586856514337560529">"Chcete odstrániť skupinu „<xliff:g id="GROUP_LABEL">%1$s</xliff:g>“? (Samotné kontakty nebudú odstránené.)"</string>
-  <plurals name="num_contacts_in_group">
-    <item quantity="one" msgid="1352418549951013448">"Počet ľudí zo skupiny <xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>: <xliff:g id="COUNT_0">%1$d</xliff:g>"</item>
-    <item quantity="other" msgid="8146027769011086349">"Počet ľudí zo skupiny <xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>: <xliff:g id="COUNT_0">%1$d</xliff:g>"</item>
-  </plurals>
-  <plurals name="group_list_num_contacts_in_group">
-    <item quantity="one" msgid="3323065321661972446">"Počet ľudí: <xliff:g id="COUNT">%1$d</xliff:g>"</item>
-    <item quantity="other" msgid="6251996206137048525">"Počet ľudí: <xliff:g id="COUNT">%1$d</xliff:g>"</item>
-  </plurals>
+    <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
+      <item quantity="few">Počet ľudí zo skupiny <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g>: <xliff:g id="COUNT_2">%1$d</xliff:g></item>
+      <item quantity="many">Počet ľudí zo skupiny <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g>: <xliff:g id="COUNT_2">%1$d</xliff:g></item>
+      <item quantity="other">Počet ľudí zo skupiny <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g>: <xliff:g id="COUNT_2">%1$d</xliff:g></item>
+      <item quantity="one">Počet ľudí zo skupiny <xliff:g id="ACCOUNT_TYPE_1">%2$s</xliff:g>: <xliff:g id="COUNT_0">%1$d</xliff:g></item>
+    </plurals>
+    <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
+      <item quantity="few">Počet ľudí: <xliff:g id="COUNT_1">%1$d</xliff:g></item>
+      <item quantity="many">Počet ľudí: <xliff:g id="COUNT_1">%1$d</xliff:g></item>
+      <item quantity="other">Počet ľudí: <xliff:g id="COUNT_1">%1$d</xliff:g></item>
+      <item quantity="one">Počet ľudí: <xliff:g id="COUNT_0">%1$d</xliff:g></item>
+    </plurals>
     <string name="toast_join_with_empty_contact" msgid="2238581529864542985">"Pred spojením s iným kontaktom zadajte meno kontaktu."</string>
     <string name="copy_text" msgid="3257145021583508761">"Kopírovať do schránky"</string>
     <string name="set_default" msgid="4417505153468300351">"Nastaviť ako predvolené"</string>
@@ -264,4 +282,5 @@
     <string name="content_description_recent_call" msgid="5183800406316723676">"nedávny hovor. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. kliknutím zavoláte späť"</string>
     <string name="message_from_you_prefix" msgid="7180706529908434482">"Vy: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
     <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"Služba Hangouts funguje lepšie, keď do poľa pre e-mailovú adresu alebo telefón zadáte identifikátor osoby v službe Hangouts."</string>
+    <string name="compact_editor_more_fields" msgid="2874181192382284115">"Ďalšie polia"</string>
 </resources>
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml
index 5dab63f..f0d15e5 100644
--- a/res/values-sl/strings.xml
+++ b/res/values-sl/strings.xml
@@ -46,6 +46,7 @@
     <string name="description_action_menu_add_star" msgid="3327186327234177456">"Dodano med priljubljene"</string>
     <string name="menu_editContact" msgid="9042415603857662633">"Uredi"</string>
     <string name="menu_deleteContact" msgid="6788644058868189393">"Izbriši"</string>
+    <string name="menu_change_photo" msgid="7769177631511496210">"Sprememba fotografije"</string>
     <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Postavi na začetni zaslon"</string>
     <string name="menu_call" msgid="3992595586042260618">"Pokliči stik"</string>
     <string name="menu_sendSMS" msgid="5535886767547006515">"Pošlji SMS stiku"</string>
@@ -56,17 +57,23 @@
     <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Dodajanje skupine"</string>
     <string name="splitConfirmation_title" msgid="633640935430370530">"Želite ločiti stik?"</string>
     <string name="splitConfirmation" msgid="740190210499587175">"Ta stik bo razdeljen na več stikov."</string>
-    <string name="menu_joinAggregate" msgid="5027981918265667970">"Pridruži"</string>
+    <string name="menu_joinAggregate" msgid="4050157483569357666">"Združi"</string>
     <string name="titleJoinContactDataWith" msgid="7684875775798635354">"Pridruži stike"</string>
     <string name="blurbJoinContactDataWith" msgid="8736488417422708236">"Izberite stik, ki ga želite združiti s stikom <xliff:g id="NAME">%s</xliff:g>:"</string>
     <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Prikaži vse stike"</string>
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Predlagani stiki"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Vsi stiki"</string>
-    <string name="contactsJoinedMessage" msgid="7208148163607047389">"Stiki pridruženi"</string>
+    <string name="contactsJoinedMessage" msgid="656936718666768589">"Stika sta bila združena"</string>
+    <string name="contacts_deleted_toast" msgid="286851430992788215">"Stiki so bili izbrisani"</string>
     <string name="menu_set_ring_tone" msgid="8728345772068064946">"Nastavi zvonj."</string>
     <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Vsi klici na odzivnik"</string>
     <string name="readOnlyContactWarning" msgid="7808825687289848259">"Iz računov samo za branje stikov ni mogoče izbrisati, lahko pa jih skrijete na seznamih stikov."</string>
     <string name="readOnlyContactDeleteConfirmation" msgid="2137170726670196909">"Ta stik vsebuje podatke iz več računov. Podatki iz računov samo za branje ne bodo izbrisani s seznamov stikov, temveč bodo samo skriti."</string>
+    <string name="batch_merge_single_contact_warning" msgid="982585201970392110">"Za združevanje morate izbrati vsaj dva stika."</string>
+    <string name="batch_merge_confirmation" msgid="8551299480317422420">"Izbrani stiki bodo združeni v en stik."</string>
+    <string name="batch_delete_confirmation" msgid="2564172328268885394">"Izbrani stiki bodo izbrisani."</string>
+    <string name="batch_delete_read_only_contact_confirmation" msgid="6614878716815412523">"Podatki iz računov, ki so samo za branje, ne bodo izbrisani s seznamov stikov, temveč bodo samo skriti."</string>
+    <string name="batch_delete_multiple_accounts_confirmation" msgid="5189722181586680185">"Ti stiki vsebujejo podatke iz več računov. Podatki iz računov, ki so samo za branje, ne bodo izbrisani s seznamov stikov, temveč bodo samo skriti."</string>
     <string name="multipleContactDeleteConfirmation" msgid="938900978442960800">"Če boste izbrisali ta stik, boste izbrisali podatke iz več računov."</string>
     <string name="deleteConfirmation" msgid="811706994761610640">"Ta stik bo izbrisan."</string>
     <string name="menu_discard" msgid="6854657936970228164">"Zavrzi spremembe"</string>
@@ -94,20 +101,26 @@
     <string name="contactSavedErrorToast" msgid="3207250533172944892">"Sprememb v stikih ni bilo mogoče shraniti."</string>
     <string name="groupSavedToast" msgid="1168756874239833756">"Skupina je shranjena."</string>
     <string name="groupSavedErrorToast" msgid="7984466936615304740">"Sprememb v skupini ni mogoče shraniti."</string>
-  <plurals name="listTotalPhoneContacts">
-    <item quantity="one" msgid="3015357862286673986">"1 stik s telefonsko število."</item>
-    <item quantity="other" msgid="3299954047880968205">"<xliff:g id="COUNT">%d</xliff:g> stikov s telefonskimi številkami"</item>
-  </plurals>
+    <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
+      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> stik s telefonsko številko</item>
+      <item quantity="two"><xliff:g id="COUNT">%d</xliff:g> stika s telefonsko številko</item>
+      <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> stiki s telefonsko številko</item>
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> stikov s telefonsko številko</item>
+    </plurals>
     <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"Ni stikov s telefonskimi številkami"</string>
-  <plurals name="listFoundAllContacts">
-    <item quantity="one" msgid="5517063038754171134">"1 najden"</item>
-    <item quantity="other" msgid="3852668542926965042">"<xliff:g id="COUNT">%d</xliff:g> najdenih"</item>
-  </plurals>
+    <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
+      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> najden</item>
+      <item quantity="two"><xliff:g id="COUNT">%d</xliff:g> najdena</item>
+      <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> najdeni</item>
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> najdenih</item>
+    </plurals>
     <string name="listFoundAllContactsZero" msgid="922980883593159444">"Ni stikov"</string>
-  <plurals name="searchFoundContacts">
-    <item quantity="one" msgid="4826918429708286628">"1 najden"</item>
-    <item quantity="other" msgid="7988132539476575389">"<xliff:g id="COUNT">%d</xliff:g> najdenih"</item>
-  </plurals>
+    <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
+      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> najden</item>
+      <item quantity="two"><xliff:g id="COUNT">%d</xliff:g> najdena</item>
+      <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> najdeni</item>
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> najdenih</item>
+    </plurals>
     <string name="all_contacts_tab_label" msgid="6250372293594147703">"Vsi stiki"</string>
     <string name="favorites_tab_label" msgid="1524869648904016414">"Priljubljeno"</string>
     <string name="callBack" msgid="5498224409038809224">"Povratni klic"</string>
@@ -144,9 +157,6 @@
     <string name="pick_new_photo" msgid="9122450996263688237">"Izberite novo fotografijo"</string>
     <string name="locale_change_in_progress" msgid="7583992153091537467">"Seznam stikov se posodablja glede na izbrani jezik."</string>
     <string name="upgrade_in_progress" msgid="474511436863451061">"Seznam stikov se posodablja."</string>
-    <string name="upgrade_out_of_memory" msgid="1209994418877625940">"Stiki se nadgrajujejo.\n\nZa nadgradnjo je potrebno približno <xliff:g id="SIZE_IN_MEGABYTES">%s</xliff:g> MB notranjega pomnilnika telefona.\n\nIzberite eno od teh možnosti:"</string>
-    <string name="upgrade_out_of_memory_uninstall" msgid="1721798828992091432">"Odstranite nekaj aplikacij"</string>
-    <string name="upgrade_out_of_memory_retry" msgid="8431289830472724609">"Znova poskusi nadgraditi"</string>
     <string name="search_results_searching" msgid="3984833028938569930">"Iskanje ..."</string>
     <string name="menu_display_selected" msgid="6470001164297969034">"Pokaži izbrane"</string>
     <string name="menu_display_all" msgid="8887488642609786198">"Pokaži vse"</string>
@@ -160,10 +170,12 @@
     <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>
-  <plurals name="merge_info">
-    <item quantity="one" msgid="148365587896371969">"ni spojeno"</item>
-    <item quantity="other" msgid="425683718017380845">"spojeno iz <xliff:g id="COUNT">%0$d</xliff:g> virov"</item>
-  </plurals>
+    <plurals name="merge_info" formatted="false" msgid="2489323424994280962">
+      <item quantity="one">združeno iz <xliff:g id="COUNT">%0$d</xliff:g> vira</item>
+      <item quantity="two">združeno iz <xliff:g id="COUNT">%0$d</xliff:g> virov</item>
+      <item quantity="few">združeno iz <xliff:g id="COUNT">%0$d</xliff:g> virov</item>
+      <item quantity="other">združeno iz <xliff:g id="COUNT">%0$d</xliff:g> virov</item>
+    </plurals>
     <string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"Želite združiti stik z izbranim stikom?"</string>
     <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Želite urejati izbrani stik? Podatki, ki ste jih doslej vnesli, bodo kopirani."</string>
     <string name="menu_copyContact" msgid="1573960845106822639">"Kopiraj v moje stike"</string>
@@ -172,7 +184,7 @@
     <string name="list_filter_custom" msgid="8910173055702057002">"Po meri"</string>
     <string name="activity_title_settings" msgid="5464130076132770781">"Nastavitve"</string>
     <string name="menu_settings" msgid="377929915873428211">"Nastavitve"</string>
-    <string name="menu_help" msgid="5123887102216637725">"Pomoč"</string>
+    <string name="menu_help" msgid="1680178646764069976">"Pomoč in povratne informacije"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"Možnosti prikaza"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="non_phone_caption" msgid="1541655052330027380">"Telefonska številka"</string>
@@ -188,19 +200,25 @@
     <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Uvozi stike"</string>
     <string name="create_group_dialog_title" msgid="6874527142828424475">"Ustvarjanje nove skupine"</string>
     <string name="create_group_item_label" msgid="4411981763169654825">"Ustvari novo skupino"</string>
-  <plurals name="num_groups_in_account">
-    <item quantity="one" msgid="2944819210288517794">"1 skupina"</item>
-    <item quantity="other" msgid="1276758425904917367">"Št. skupin: <xliff:g id="COUNT">%0$d</xliff:g>"</item>
-  </plurals>
+    <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
+      <item quantity="one"><xliff:g id="COUNT">%0$d</xliff:g> skupina</item>
+      <item quantity="two"><xliff:g id="COUNT">%0$d</xliff:g> skupini</item>
+      <item quantity="few"><xliff:g id="COUNT">%0$d</xliff:g> skupine</item>
+      <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> skupin</item>
+    </plurals>
     <string name="delete_group_dialog_message" msgid="7586856514337560529">"Želite izbrisati skupino »<xliff:g id="GROUP_LABEL">%1$s</xliff:g>«? (Stiki ne bodo izbrisani.)"</string>
-  <plurals name="num_contacts_in_group">
-    <item quantity="one" msgid="1352418549951013448">"<xliff:g id="COUNT_0">%1$d</xliff:g> oseba iz <xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>"</item>
-    <item quantity="other" msgid="8146027769011086349">"Št. ljudi iz <xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>: <xliff:g id="COUNT_0">%1$d</xliff:g>"</item>
-  </plurals>
-  <plurals name="group_list_num_contacts_in_group">
-    <item quantity="one" msgid="3323065321661972446">"Št. oseb: <xliff:g id="COUNT">%1$d</xliff:g>"</item>
-    <item quantity="other" msgid="6251996206137048525">"Št. oseb: <xliff:g id="COUNT">%1$d</xliff:g>"</item>
-  </plurals>
+    <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
+      <item quantity="one"><xliff:g id="COUNT_2">%1$d</xliff:g> oseba iz skupine <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
+      <item quantity="two"><xliff:g id="COUNT_2">%1$d</xliff:g> osebi iz skupine <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
+      <item quantity="few"><xliff:g id="COUNT_2">%1$d</xliff:g> osebe iz skupine <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> oseb iz skupine <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
+    </plurals>
+    <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
+      <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> oseba</item>
+      <item quantity="two"><xliff:g id="COUNT_1">%1$d</xliff:g> osebi</item>
+      <item quantity="few"><xliff:g id="COUNT_1">%1$d</xliff:g> osebe</item>
+      <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> oseb</item>
+    </plurals>
     <string name="toast_join_with_empty_contact" msgid="2238581529864542985">"Vnesite ime stika pred združitvijo z drugim."</string>
     <string name="copy_text" msgid="3257145021583508761">"Kopiraj v odložišče"</string>
     <string name="set_default" msgid="4417505153468300351">"Nastavi za privzeto"</string>
@@ -264,4 +282,5 @@
     <string name="content_description_recent_call" msgid="5183800406316723676">"nedavni klic. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. kliknite, če želite poklicati nazaj"</string>
     <string name="message_from_you_prefix" msgid="7180706529908434482">"Vi: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
     <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"Pogovori Hangouts delujejo bolje, če v polje za e-pošto ali polje za telefon vnesete identifikator osebe za pogovore Hangouts."</string>
+    <string name="compact_editor_more_fields" msgid="2874181192382284115">"Več polj"</string>
 </resources>
diff --git a/res/values-sq-rAL/strings.xml b/res/values-sq-rAL/strings.xml
new file mode 100644
index 0000000..1679da4
--- /dev/null
+++ b/res/values-sq-rAL/strings.xml
@@ -0,0 +1,272 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2006 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+ -->
+
+<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">"Kontaktet"</string>
+    <string name="launcherActivityLabel" msgid="6497230399032392417">"Kontaktet"</string>
+    <string name="contactsList" msgid="8661624236494819731">"Kontaktet"</string>
+    <string name="shortcutContact" msgid="749243779392912958">"Kontakti"</string>
+    <string name="shortcutDialContact" msgid="746622101599186779">"Telefonatë e drejtpërdrejtë"</string>
+    <string name="shortcutMessageContact" msgid="2460337253595976198">"Mesazh i drejtpërdrejtë"</string>
+    <string name="shortcutActivityTitle" msgid="6642877210643565436">"Zgjidh një shkurtore të kontaktit"</string>
+    <string name="callShortcutActivityTitle" msgid="6065749861423648991">"Zgjidh një numër për ta telefonuar"</string>
+    <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"Zgjidh një numër për t\'i dërguar mesazh"</string>
+    <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Shto te kontakti"</string>
+    <string name="contactPickerActivityTitle" msgid="4301062192337417640">"Zgjidh një kontakt"</string>
+    <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Krijo një kontakt të ri"</string>
+    <string name="starredList" msgid="4817256136413959463">"Me yll"</string>
+    <string name="frequentList" msgid="7154768136473953056">"Të shpeshtat"</string>
+    <string name="strequentList" msgid="5640192862059373511">"Të preferuarat"</string>
+    <string name="viewContactTitle" msgid="7989394521836644384">"Detajet e kontaktit"</string>
+    <string name="editContactDescription" msgid="2947202828256214947">"Redakto kontaktin"</string>
+    <string name="insertContactDescription" msgid="4709878105452681987">"Krijo një kontakt"</string>
+    <string name="editGroupDescription" msgid="6321161304201540561">"Redakto grupin"</string>
+    <string name="insertGroupDescription" msgid="5658512271662210139">"Krijo një grup"</string>
+    <string name="contactDetailAbout" msgid="5430408883907061400">"Informacion rreth"</string>
+    <string name="contactDetailUpdates" msgid="3780588624763446941">"Përditësimet"</string>
+    <string name="searchHint" msgid="8482945356247760701">"Kërko për kontakte"</string>
+    <string name="menu_viewContact" msgid="2795575601596468581">"Shiko kontaktin"</string>
+    <string name="menu_addStar" msgid="2908478235715404876">"Shto te të preferuarat"</string>
+    <string name="menu_removeStar" msgid="5844227078364227030">"Hiq nga të preferuarat"</string>
+    <string name="description_action_menu_remove_star" msgid="4699640108012265178">"U hoq nga të preferuarat"</string>
+    <string name="description_action_menu_add_star" msgid="3327186327234177456">"U shtua te të preferuarat"</string>
+    <string name="menu_editContact" msgid="9042415603857662633">"Redakto"</string>
+    <string name="menu_deleteContact" msgid="6788644058868189393">"Fshi"</string>
+    <string name="menu_change_photo" msgid="7769177631511496210">"Ndrysho fotografinë"</string>
+    <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Vendose në \"Ekranin bazë\""</string>
+    <string name="menu_call" msgid="3992595586042260618">"Telefono kontaktin"</string>
+    <string name="menu_sendSMS" msgid="5535886767547006515">"Dërgo mesazh me tekst te kontakti"</string>
+    <string name="menu_splitAggregate" msgid="8368636463748691868">"Ndaje"</string>
+    <string name="menu_editGroup" msgid="5062005185370983720">"Redakto"</string>
+    <string name="menu_deleteGroup" msgid="3486380004411482874">"Fshi"</string>
+    <string name="menu_new_contact_action_bar" msgid="7263362129442119188">"Shto një kontakt"</string>
+    <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Shto një grup"</string>
+    <string name="splitConfirmation_title" msgid="633640935430370530">"Të ndahet kontakti?"</string>
+    <string name="splitConfirmation" msgid="740190210499587175">"Ky kontakt do të ndahet në shumë kontakte."</string>
+    <string name="menu_joinAggregate" msgid="4050157483569357666">"Shkri"</string>
+    <string name="titleJoinContactDataWith" msgid="7684875775798635354">"Bashkoji kontaktet"</string>
+    <string name="blurbJoinContactDataWith" msgid="8736488417422708236">"Zgjidh kontaktin që dëshiron të bashkosh me <xliff:g id="NAME">%s</xliff:g>:"</string>
+    <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Shfaq të gjitha kontaktet"</string>
+    <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Kontaktet e sugjeruara"</string>
+    <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Të gjitha kontaktet"</string>
+    <string name="contactsJoinedMessage" msgid="656936718666768589">"Kontaktet u shkrinë"</string>
+    <string name="contacts_deleted_toast" msgid="286851430992788215">"Kontaktet u fshinë"</string>
+    <string name="menu_set_ring_tone" msgid="8728345772068064946">"Cakto tonin e ziles"</string>
+    <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Të gjitha telefonatat te posta zanore"</string>
+    <string name="readOnlyContactWarning" msgid="7808825687289848259">"Nuk mund t\'i fshish kontaktet nga llogaritë \"vetëm për lexim\", por mund t\'i fshehësh në listat e tua të kontakteve."</string>
+    <string name="readOnlyContactDeleteConfirmation" msgid="2137170726670196909">"Ky kontakt përmban informacione nga shumë llogari. Informacionet nga llogaritë \"vetëm për lexim\", nuk do të shfaqen në listën tënde të kontakteve. Megjithatë, kjo nuk do të thotë se ato do të fshihen."</string>
+    <string name="batch_merge_single_contact_warning" msgid="982585201970392110">"Të duhen të paktën dy kontakte të zgjedhura për të kryer një shkrirje."</string>
+    <string name="batch_merge_confirmation" msgid="8551299480317422420">"Kontaktet e zgjedhura do të shkrihen në një kontakt të vetëm."</string>
+    <string name="batch_delete_confirmation" msgid="2564172328268885394">"Kontaktet e zgjedhura do të fshihen."</string>
+    <string name="batch_delete_read_only_contact_confirmation" msgid="6614878716815412523">"Informacionet nga llogaritë \"vetëm për lexim\" do të jenë të fshehura në listën tënde të kontakteve, por nuk do të fshihen."</string>
+    <string name="batch_delete_multiple_accounts_confirmation" msgid="5189722181586680185">"Këto kontakte përmbajnë informacione nga shumë llogari. Informacionet nga llogaritë \"vetëm për lexim\" do të jenë të fshehura në listën tënde të kontakteve, por nuk do të fshihen."</string>
+    <string name="multipleContactDeleteConfirmation" msgid="938900978442960800">"Fshirja e këtij kontakti do të fshijë informacionet nga shumë llogari."</string>
+    <string name="deleteConfirmation" msgid="811706994761610640">"Ky kontakt do të fshihet."</string>
+    <string name="menu_discard" msgid="6854657936970228164">"Hidhi poshtë ndryshimet"</string>
+    <string name="invalidContactMessage" msgid="8215051456181842274">"Kontakti nuk ekziston."</string>
+    <string name="createContactShortcutSuccessful" msgid="7874133287558150877">"Miniaplikacioni i kontakteve u shtua tek \"Ekrani bazë\"."</string>
+    <string name="pickerNewContactHeader" msgid="7750705279843568147">"Krijo një kontakt të ri"</string>
+    <string name="pickerNewContactText" msgid="6166997164401048211">"Krijo një kontakt të ri"</string>
+  <string-array name="otherLabels">
+    <item msgid="8287841928119937597">"Organizata"</item>
+    <item msgid="7196592230748086755">"Shënim."</item>
+  </string-array>
+    <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"Nuk ka fotografi të përdorshme në tablet."</string>
+    <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"Nuk ka fotografi të përdorshme në telefon."</string>
+    <string name="attach_photo_dialog_title" msgid="5599827035558557169">"Fotografia e kontaktit"</string>
+    <string name="customLabelPickerTitle" msgid="1081475101983255212">"Emri i personalizuar i etiketës"</string>
+    <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Dërgoji telefonatat drejtpërdrejt te posta zanore"</string>
+    <string name="removePhoto" msgid="4898105274130284565">"Hiqe fotografinë"</string>
+    <string name="noContacts" msgid="8579310973261953559">"Nuk ka asnjë kontakt."</string>
+    <string name="noGroups" msgid="8614664663561385253">"Nuk ka asnjë grup."</string>
+    <string name="noAccounts" msgid="7768267764545265909">"Për të krijuar grupe të duhet një llogari."</string>
+    <string name="emptyGroup" msgid="7502116218697177370">"Nuk ka persona në këtë grup."</string>
+    <string name="addPeopleToGroup" msgid="7879585947222263516">"Për të shtuar disa anëtarë, redakto grupin."</string>
+    <string name="savingContact" msgid="4075751076741924939">"Po ruan kontaktin…"</string>
+    <string name="contactSavedToast" msgid="7152589189385441091">"Kontakti u ruajt."</string>
+    <string name="contactSavedErrorToast" msgid="3207250533172944892">"Ndryshimet e kontaktit nuk mund të ruheshin."</string>
+    <string name="groupSavedToast" msgid="1168756874239833756">"Grupi u ruajt."</string>
+    <string name="groupSavedErrorToast" msgid="7984466936615304740">"Ndryshimet e grupit nuk mund të ruheshin."</string>
+    <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> kontakte me numra telefoni</item>
+      <item quantity="one">1 kontakt me numër telefoni</item>
+    </plurals>
+    <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"Nuk ka kontakte me numra telefoni"</string>
+    <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
+      <item quantity="other">U gjetën <xliff:g id="COUNT">%d</xliff:g></item>
+      <item quantity="one">U gjet 1</item>
+    </plurals>
+    <string name="listFoundAllContactsZero" msgid="922980883593159444">"Nuk ka asnjë kontakt"</string>
+    <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
+      <item quantity="other">U gjetën <xliff:g id="COUNT">%d</xliff:g></item>
+      <item quantity="one">U gjet 1</item>
+    </plurals>
+    <string name="all_contacts_tab_label" msgid="6250372293594147703">"Të gjitha kontaktet"</string>
+    <string name="favorites_tab_label" msgid="1524869648904016414">"Të preferuarat"</string>
+    <string name="callBack" msgid="5498224409038809224">"Ritelefonoje"</string>
+    <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>
+    <string name="quickcontact_missing_app" msgid="358168575340921552">"Nuk u gjet asnjë aplikacion për të menaxhuar këtë veprim"</string>
+    <string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Kliko për t\'u kthyer tek ekrani i mëparshëm"</string>
+    <string name="quickcontact_add_phone_number" msgid="731665835910658965">"Shto një numër telefoni"</string>
+    <string name="quickcontact_add_email" msgid="739298028384348482">"Shto një mail"</string>
+    <string name="missing_app" msgid="1466111003546611387">"Nuk u gjet asnjë aplikacion për të menaxhuar këtë veprim"</string>
+    <string name="menu_share" msgid="943789700636542260">"Shpërnda"</string>
+    <string name="menu_add_contact" msgid="3198704337220892684">"Shto te kontaktet"</string>
+    <string name="share_via" msgid="563121028023030093">"Shpërnda kontaktin nëpërmjet"</string>
+    <string name="dialog_new_group_account" msgid="2318032089273496830">"Krijo një grup nën llogari"</string>
+    <string name="audio_chat" msgid="2535716629358298691">"Biseda me zë"</string>
+    <string name="video_chat" msgid="1872255818640336072">"Biseda me video"</string>
+    <string name="connections" msgid="8098440723172028350">"Lidhjet"</string>
+    <string name="add_connection_button" msgid="4861308615789601727">"Shto një lidhje"</string>
+    <string name="recent" msgid="2659189233141493004">"Të fundit"</string>
+    <string name="recent_updates" msgid="4267258535615860710">"Përditësimet së fundi"</string>
+    <string name="account_type_format" msgid="718948015590343010">"Kontakt i <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
+    <!-- no translation found for from_account_format (4469138575127580203) -->
+    <skip />
+    <string name="contact_read_only" msgid="7421346527289472273">"Nuk mund të redaktohet nga ky aplikacion."</string>
+    <string name="group_read_only" msgid="1061762906115697637">"Nuk mund të redaktohet në këtë pajisje."</string>
+    <string name="take_photo" msgid="7496128293167402354">"Bëj një fotografi"</string>
+    <string name="take_new_photo" msgid="7341354729436576304">"Bëj një fotografi të re"</string>
+    <string name="pick_photo" msgid="2129509985223564942">"Zgjidh një fotografi"</string>
+    <string name="pick_new_photo" msgid="9122450996263688237">"Zgjidh një fotografi të re"</string>
+    <string name="locale_change_in_progress" msgid="7583992153091537467">"Lista e kontakteve po përditësohet për të pasqyruar ndryshimin e gjuhës."</string>
+    <string name="upgrade_in_progress" msgid="474511436863451061">"Lista e kontakteve po përditësohet."</string>
+    <string name="search_results_searching" msgid="3984833028938569930">"Po kërkon..."</string>
+    <string name="menu_display_selected" msgid="6470001164297969034">"Shfaq të zgjedhurat"</string>
+    <string name="menu_display_all" msgid="8887488642609786198">"Shfaqi të gjithë"</string>
+    <string name="menu_select_all" msgid="621719255150713545">"Zgjidhi të gjitha"</string>
+    <string name="menu_select_none" msgid="7093222469852132345">"Hiq zgjedhjen nga të gjitha"</string>
+    <string name="add_new_entry_for_section" msgid="5223080690667565044">"Shto të re"</string>
+    <string name="add_organization" msgid="7311893231158291197">"Shto një organizatë"</string>
+    <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Data"</string>
+    <string name="group_edit_field_hint_text" msgid="3966441850870457808">"Emri i grupit"</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>
+    <plurals name="merge_info" formatted="false" msgid="2489323424994280962">
+      <item quantity="other"> të shkrirë nga <xliff:g id="COUNT">%0$d</xliff:g> burime</item>
+      <item quantity="one"> i pashkrirë</item>
+    </plurals>
+    <string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"Të bashkohet kontakti aktual me kontaktin e zgjedhur?"</string>
+    <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Të kalohet te redaktimi i kontaktit të zgjedhur? Informacionet që fute deri tani do të kopjohen."</string>
+    <string name="menu_copyContact" msgid="1573960845106822639">"Kopjo te \"Kontaktet e mia\""</string>
+    <string name="add_to_my_contacts" msgid="1068274916793627723">"Shto te \"Kontaktet e mia\""</string>
+    <string name="contact_directory_description" msgid="683398073603909119">"Direktoria <xliff:g id="TYPE">%1$s</xliff:g>"</string>
+    <string name="list_filter_custom" msgid="8910173055702057002">"Të personalizuara"</string>
+    <string name="activity_title_settings" msgid="5464130076132770781">"Cilësimet"</string>
+    <string name="menu_settings" msgid="377929915873428211">"Cilësimet"</string>
+    <string name="menu_help" msgid="1680178646764069976">"Ndihma dhe reagimi"</string>
+    <string name="preference_displayOptions" msgid="1341720270148252393">"Opsionet e paraqitjes"</string>
+    <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
+    <string name="non_phone_caption" msgid="1541655052330027380">"Numri i telefonit"</string>
+    <string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Shto te kontaktet"</string>
+    <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"Shto te kontakti"</string>
+    <string name="non_phone_close" msgid="7608506439725515667">"Mbyll"</string>
+    <string name="widget_name_and_phonetic" msgid="8739586586600099979">"<xliff:g id="DISPLAY_NAME">%1$s</xliff:g> (<xliff:g id="PHONETIC_NAME">%2$s</xliff:g>)"</string>
+    <string name="date_year_toggle" msgid="7356532842767854606">"Shkruaj një vit"</string>
+    <string name="social_widget_label" msgid="6378905543028924592">"Kontakti"</string>
+    <string name="social_widget_loading" msgid="5327336597364074608">"Po ngarkon..."</string>
+    <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Krijo një kontakt të ri"</string>
+    <string name="contacts_unavailable_add_account" msgid="7911101713860139754">"Identifikohu në një llogari"</string>
+    <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Importo kontaktet"</string>
+    <string name="create_group_dialog_title" msgid="6874527142828424475">"Krijo një grup të ri"</string>
+    <string name="create_group_item_label" msgid="4411981763169654825">"Krijo një grup të ri"</string>
+    <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
+      <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> grupe</item>
+      <item quantity="one">1 grup</item>
+    </plurals>
+    <string name="delete_group_dialog_message" msgid="7586856514337560529">"Të fshihet grupi \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\"? (Kontaktet nuk do të fshihen.)"</string>
+    <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> persona nga <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> person nga <xliff:g id="ACCOUNT_TYPE_1">%2$s</xliff:g></item>
+    </plurals>
+    <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
+      <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> persona</item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> person</item>
+    </plurals>
+    <string name="toast_join_with_empty_contact" msgid="2238581529864542985">"Shkruaj emrin e kontaktit para se ta bashkosh me një tjetër."</string>
+    <string name="copy_text" msgid="3257145021583508761">"Kopjo në kujtesën e fragmenteve"</string>
+    <string name="set_default" msgid="4417505153468300351">"Vendos të parazgjedhurën"</string>
+    <string name="clear_default" msgid="7193185801596678067">"Pastro të paracaktuarin"</string>
+    <string name="toast_text_copied" msgid="5143776250008541719">"Teksti u kopjua"</string>
+    <string name="cancel_confirmation_dialog_message" msgid="5885724679874403115">"Të hiqen ndryshimet e tua?"</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="profile_display_name" msgid="4127389543625918771">"Konfiguro profilin tim"</string>
+    <string name="enter_contact_name" msgid="1738391320566349924">"Shkruaj emrin e personit"</string>
+    <string name="group_name_hint" msgid="238359485263401293">"Emri i grupit"</string>
+    <string name="local_profile_title" msgid="2021416826991393684">"Profili im lokal"</string>
+    <string name="external_profile_title" msgid="8034998767621359438">"Profili im i <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g>"</string>
+    <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Po shfaq të gjitha kontaktet"</string>
+    <string name="no_account_prompt" msgid="6424883302325061025">"Kontaktet funksionojnë më mirë me një llogari të Google.\n\n• Qasje nga çdo shfletues uebi.\n• Rezervim kontaktesh në mënyrë të sigurt."</string>
+    <string name="generic_no_account_prompt" msgid="7218827704367325460">"Mbaji kontaktet e tua të sigurta edhe nëse të humbet telefoni. Sinkronizoji me një shërbim në linjë."</string>
+    <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Shto një llogari"</string>
+    <string name="contact_editor_prompt_zero_accounts" msgid="1785345895691886499">"Kontakti yt i ri nuk do të rezervohet. Të shtohet një llogari që i rezervon kontaktet në linjë?"</string>
+    <string name="contact_editor_prompt_one_account" msgid="8669032699767375976">"Kontakti yt i ri do të sinkronizohet me <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
+    <string name="contact_editor_prompt_multiple_accounts" msgid="611828200100438242">"Mund ta sinkronizosh kontaktin tënd të ri me një nga llogaritë e mëposhtme. Cilën dëshiron të përdorësh?"</string>
+    <string name="contact_editor_title_new_contact" msgid="7192223018128934940">"Shto një kontakt të ri"</string>
+    <string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"Modifiko kontaktin"</string>
+    <string name="keep_local" msgid="1258761699192993322">"Mbaje në nivel lokal"</string>
+    <string name="add_account" msgid="8201790677994503186">"Shto një llogari"</string>
+    <string name="add_new_account" msgid="5748627740680940264">"Shto një llogari të re"</string>
+    <string name="menu_export_database" msgid="2659719297530170820">"Eksporto skedarët e bazës së të dhënave"</string>
+    <string name="action_menu_add_new_contact_button" msgid="3180222523336380017">"shto një kontakt të ri"</string>
+    <string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"Shiko më shumë"</string>
+    <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Shiko më pak"</string>
+    <string name="expanding_entry_card_view_see_all" msgid="3845258737661412627">"Shikoji të gjitha"</string>
+    <string name="recent_card_title" msgid="8982782042698001695">"Të fundit"</string>
+    <string name="about_card_title" msgid="2920942314212825637">"Informacion rreth"</string>
+    <string name="send_message" msgid="8938418965550543196">"Dërgo mesazh"</string>
+    <string name="toast_making_personal_copy" msgid="6137651078366797938">"Po krijon një kopje personale..."</string>
+    <string name="yesterday" msgid="6840858548955018569">"Dje"</string>
+    <string name="tomorrow" msgid="6241969467795308581">"Nesër"</string>
+    <string name="today" msgid="8041090779381781781">"Sot"</string>
+    <string name="today_at_time_fmt" msgid="605665249491030460">"Sot në <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
+    <string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"Nesër në <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
+    <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%s</xliff:g>, <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
+    <string name="untitled_event" msgid="3484859385405939366">"(Ngjarje e patitulluar)"</string>
+    <string name="date_time_set" msgid="4761419824439606690">"Cakto"</string>
+    <string name="header_im_entry" msgid="3581720979640225615">"Mesazh i çastit"</string>
+    <string name="header_organization_entry" msgid="8515394955666265406">"Organizata"</string>
+    <string name="header_nickname_entry" msgid="6743561883967451485">"Pseudonimi"</string>
+    <string name="header_note_entry" msgid="4320190426480612344">"Shënim"</string>
+    <string name="header_website_entry" msgid="1411467850000824745">"Uebsajti"</string>
+    <string name="header_event_entry" msgid="6738250422744401460">"Ngjarje"</string>
+    <string name="header_relation_entry" msgid="1520292958088146460">"Lidhja"</string>
+    <string name="header_account_entry" msgid="2684318506427891827">"Llogaria"</string>
+    <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>
+    <string name="content_description_recent_sms" msgid="1666389577263317445">"sms-ja e fundit. <xliff:g id="MESSAGE_BODY">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. kliko për t\'u përgjigjur"</string>
+    <string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"hyrëse"</string>
+    <string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"dalëse"</string>
+    <string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"të humbura"</string>
+    <string name="content_description_recent_call" msgid="5183800406316723676">"telefonata e fundit. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. kliko për të ri-telefonuar"</string>
+    <string name="message_from_you_prefix" msgid="7180706529908434482">"Ti: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
+    <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"Shërbimi \"Hangouts\" funksionon më mirë kur fut identifikuesin e personit në fushën e mail-it ose në fushën e telefonit."</string>
+    <string name="compact_editor_more_fields" msgid="2874181192382284115">"Më shumë fusha"</string>
+</resources>
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
index 0916b6d..ebeb86e 100644
--- a/res/values-sr/strings.xml
+++ b/res/values-sr/strings.xml
@@ -46,6 +46,7 @@
     <string name="description_action_menu_add_star" msgid="3327186327234177456">"Додато је у Омиљено"</string>
     <string name="menu_editContact" msgid="9042415603857662633">"Измени"</string>
     <string name="menu_deleteContact" msgid="6788644058868189393">"Избриши"</string>
+    <string name="menu_change_photo" msgid="7769177631511496210">"Промени слику"</string>
     <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Постави на Почетни екран"</string>
     <string name="menu_call" msgid="3992595586042260618">"Позови контакт"</string>
     <string name="menu_sendSMS" msgid="5535886767547006515">"Пошаљи SMS контакту"</string>
@@ -56,17 +57,23 @@
     <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Додај групу"</string>
     <string name="splitConfirmation_title" msgid="633640935430370530">"Раздвојити контакт?"</string>
     <string name="splitConfirmation" msgid="740190210499587175">"Овај контакт ће бити раздвојен у више контаката."</string>
-    <string name="menu_joinAggregate" msgid="5027981918265667970">"Придружи"</string>
+    <string name="menu_joinAggregate" msgid="4050157483569357666">"Обједини"</string>
     <string name="titleJoinContactDataWith" msgid="7684875775798635354">"Придруживање контаката"</string>
     <string name="blurbJoinContactDataWith" msgid="8736488417422708236">"Изаберите контакт који желите да придружите контакту <xliff:g id="NAME">%s</xliff:g>."</string>
     <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Прикажи све контакте"</string>
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Предложени контакти"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Сви контакти"</string>
-    <string name="contactsJoinedMessage" msgid="7208148163607047389">"Придружени контакти"</string>
+    <string name="contactsJoinedMessage" msgid="656936718666768589">"Контакти су обједињени"</string>
+    <string name="contacts_deleted_toast" msgid="286851430992788215">"Контакти су избрисани"</string>
     <string name="menu_set_ring_tone" msgid="8728345772068064946">"Подеси мелодију звона"</string>
     <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Сви позиви у говорну пошту"</string>
     <string name="readOnlyContactWarning" msgid="7808825687289848259">"Контакте у оквиру налога који су само за читање не можете да избришете, али можете да их сакријете на листи контаката."</string>
     <string name="readOnlyContactDeleteConfirmation" msgid="2137170726670196909">"Овај контакт садржи информације из више налога. Информације из налога који су само за читање неће бити избрисане са листе контаката, него скривене."</string>
+    <string name="batch_merge_single_contact_warning" msgid="982585201970392110">"Треба да изаберете најмање два контакта да бисте их објединили."</string>
+    <string name="batch_merge_confirmation" msgid="8551299480317422420">"Изабрани контакти ће бити обједињени у један контакт."</string>
+    <string name="batch_delete_confirmation" msgid="2564172328268885394">"Изабрани контакти ће бити избрисани."</string>
+    <string name="batch_delete_read_only_contact_confirmation" msgid="6614878716815412523">"Информације са налога који су само за читање неће бити избрисане са листе контаката, него скривене."</string>
+    <string name="batch_delete_multiple_accounts_confirmation" msgid="5189722181586680185">"Ови контакти садрже информације са више налога. Информације са налога који су само за читање неће бити избрисане са листе контаката, него скривене."</string>
     <string name="multipleContactDeleteConfirmation" msgid="938900978442960800">"Ако избришете овај контакт, биће избрисане информације са више налога."</string>
     <string name="deleteConfirmation" msgid="811706994761610640">"Овај контакт ће бити избрисан."</string>
     <string name="menu_discard" msgid="6854657936970228164">"Одбаци промене"</string>
@@ -94,20 +101,23 @@
     <string name="contactSavedErrorToast" msgid="3207250533172944892">"Није могуће сачувати измене контаката."</string>
     <string name="groupSavedToast" msgid="1168756874239833756">"Група је сачувана."</string>
     <string name="groupSavedErrorToast" msgid="7984466936615304740">"Није могуће сачувати измене група."</string>
-  <plurals name="listTotalPhoneContacts">
-    <item quantity="one" msgid="3015357862286673986">"1 контакт са бројем телефона"</item>
-    <item quantity="other" msgid="3299954047880968205">"Бр. контаката са бројевима телефона: <xliff:g id="COUNT">%d</xliff:g>"</item>
-  </plurals>
+    <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>
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> контаката са бројевима телефона</item>
+    </plurals>
     <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"Нема контаката са бројевима телефона"</string>
-  <plurals name="listFoundAllContacts">
-    <item quantity="one" msgid="5517063038754171134">"1 пронађен"</item>
-    <item quantity="other" msgid="3852668542926965042">"<xliff:g id="COUNT">%d</xliff:g> пронађено"</item>
-  </plurals>
+    <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
+      <item quantity="one">пронађен је <xliff:g id="COUNT">%d</xliff:g></item>
+      <item quantity="few">пронађена су <xliff:g id="COUNT">%d</xliff:g></item>
+      <item quantity="other">пронађено је <xliff:g id="COUNT">%d</xliff:g></item>
+    </plurals>
     <string name="listFoundAllContactsZero" msgid="922980883593159444">"Нема контаката"</string>
-  <plurals name="searchFoundContacts">
-    <item quantity="one" msgid="4826918429708286628">"1 пронађен"</item>
-    <item quantity="other" msgid="7988132539476575389">"<xliff:g id="COUNT">%d</xliff:g> пронађено"</item>
-  </plurals>
+    <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
+      <item quantity="one">пронађен је <xliff:g id="COUNT">%d</xliff:g></item>
+      <item quantity="few">пронађена су <xliff:g id="COUNT">%d</xliff:g></item>
+      <item quantity="other">пронађено је <xliff:g id="COUNT">%d</xliff:g></item>
+    </plurals>
     <string name="all_contacts_tab_label" msgid="6250372293594147703">"Сви контакти"</string>
     <string name="favorites_tab_label" msgid="1524869648904016414">"Омиљено"</string>
     <string name="callBack" msgid="5498224409038809224">"Узврати позив"</string>
@@ -144,9 +154,6 @@
     <string name="pick_new_photo" msgid="9122450996263688237">"Изаберите нову слику"</string>
     <string name="locale_change_in_progress" msgid="7583992153091537467">"Контакт листа се ажурира у складу са променом језика."</string>
     <string name="upgrade_in_progress" msgid="474511436863451061">"Контакт листа се ажурира."</string>
-    <string name="upgrade_out_of_memory" msgid="1209994418877625940">"У току је надоградња контаката. \n\nПроцес надоградње захтева око <xliff:g id="SIZE_IN_MEGABYTES">%s</xliff:g> MB интерне меморије.\n\nИзаберите једну од следећих опција:"</string>
-    <string name="upgrade_out_of_memory_uninstall" msgid="1721798828992091432">"Деинсталирајте неке апликације"</string>
-    <string name="upgrade_out_of_memory_retry" msgid="8431289830472724609">"Поново покушај надоградњу"</string>
     <string name="search_results_searching" msgid="3984833028938569930">"Претраживање..."</string>
     <string name="menu_display_selected" msgid="6470001164297969034">"Прикажи изабрано"</string>
     <string name="menu_display_all" msgid="8887488642609786198">"Прикажи све"</string>
@@ -160,10 +167,11 @@
     <string name="primary_photo" msgid="8517942231868516999">"Главна слика"</string>
     <string name="description_star" msgid="2605854427360036550">"омиљено"</string>
     <string name="edit_contact" msgid="7529281274005689512">"Измени контакт"</string>
-  <plurals name="merge_info">
-    <item quantity="one" msgid="148365587896371969">"није обједињено"</item>
-    <item quantity="other" msgid="425683718017380845">"обједињено од <xliff:g id="COUNT">%0$d</xliff:g> извора"</item>
-  </plurals>
+    <plurals name="merge_info" formatted="false" msgid="2489323424994280962">
+      <item quantity="one">обједињено је из <xliff:g id="COUNT">%0$d</xliff:g> извора</item>
+      <item quantity="few">обједињено је из <xliff:g id="COUNT">%0$d</xliff:g> извора</item>
+      <item quantity="other">обједињено је из <xliff:g id="COUNT">%0$d</xliff:g> извора</item>
+    </plurals>
     <string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"Желите ли да тренутни контакт придружите изабраном контакту?"</string>
     <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Желите ли да пребаците на уређивање изабраног контакта? Биће копиране информације које сте унели до сада."</string>
     <string name="menu_copyContact" msgid="1573960845106822639">"Копирај у моје контакте"</string>
@@ -172,7 +180,7 @@
     <string name="list_filter_custom" msgid="8910173055702057002">"Прилагођено"</string>
     <string name="activity_title_settings" msgid="5464130076132770781">"Подешавања"</string>
     <string name="menu_settings" msgid="377929915873428211">"Подешавања"</string>
-    <string name="menu_help" msgid="5123887102216637725">"Помоћ"</string>
+    <string name="menu_help" msgid="1680178646764069976">"Помоћ и повратне информације"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"Опције приказа"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="non_phone_caption" msgid="1541655052330027380">"Број телефона"</string>
@@ -188,19 +196,22 @@
     <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Увези контакте"</string>
     <string name="create_group_dialog_title" msgid="6874527142828424475">"Прављење нове групе"</string>
     <string name="create_group_item_label" msgid="4411981763169654825">"Направи нову групу"</string>
-  <plurals name="num_groups_in_account">
-    <item quantity="one" msgid="2944819210288517794">"1 група"</item>
-    <item quantity="other" msgid="1276758425904917367">"Група: <xliff:g id="COUNT">%0$d</xliff:g>"</item>
-  </plurals>
+    <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
+      <item quantity="one"><xliff:g id="COUNT">%0$d</xliff:g> група</item>
+      <item quantity="few"><xliff:g id="COUNT">%0$d</xliff:g> групе</item>
+      <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> група</item>
+    </plurals>
     <string name="delete_group_dialog_message" msgid="7586856514337560529">"Желите ли да избришете групу „<xliff:g id="GROUP_LABEL">%1$s</xliff:g>“? (Контакти неће бити избрисани.)"</string>
-  <plurals name="num_contacts_in_group">
-    <item quantity="one" msgid="1352418549951013448">"<xliff:g id="COUNT_0">%1$d</xliff:g> особа са налога <xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>"</item>
-    <item quantity="other" msgid="8146027769011086349">"<xliff:g id="COUNT_0">%1$d</xliff:g> особе(а) са налога <xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>"</item>
-  </plurals>
-  <plurals name="group_list_num_contacts_in_group">
-    <item quantity="one" msgid="3323065321661972446">"Особа: <xliff:g id="COUNT">%1$d</xliff:g>"</item>
-    <item quantity="other" msgid="6251996206137048525">"Особа: <xliff:g id="COUNT">%1$d</xliff:g>"</item>
-  </plurals>
+    <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
+      <item quantity="one"><xliff:g id="COUNT_2">%1$d</xliff:g> особа са налога <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
+      <item quantity="few"><xliff:g id="COUNT_2">%1$d</xliff:g> особе са налога <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> особа са налога <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
+    </plurals>
+    <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
+      <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> особа</item>
+      <item quantity="few"><xliff:g id="COUNT_1">%1$d</xliff:g> особе</item>
+      <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> особа</item>
+    </plurals>
     <string name="toast_join_with_empty_contact" msgid="2238581529864542985">"Унесите име контакта пре него што га придружите другом контакту."</string>
     <string name="copy_text" msgid="3257145021583508761">"Копирај у прив. меморију"</string>
     <string name="set_default" msgid="4417505153468300351">"Постави на подразумевано"</string>
@@ -264,4 +275,5 @@
     <string name="content_description_recent_call" msgid="5183800406316723676">"Недавни позив. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. Кликните за повратни позив"</string>
     <string name="message_from_you_prefix" msgid="7180706529908434482">"Ви: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
     <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"Hangouts ради боље кад унесете Hangouts идентификатор особе у поље за имејл адресу или број телефона."</string>
+    <string name="compact_editor_more_fields" msgid="2874181192382284115">"Још поља"</string>
 </resources>
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index 84bed0c..1d0dc97 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -46,6 +46,7 @@
     <string name="description_action_menu_add_star" msgid="3327186327234177456">"Har lagts till i Favoriter"</string>
     <string name="menu_editContact" msgid="9042415603857662633">"Redigera"</string>
     <string name="menu_deleteContact" msgid="6788644058868189393">"Ta bort"</string>
+    <string name="menu_change_photo" msgid="7769177631511496210">"Ändra bild"</string>
     <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Placera på startskärmen"</string>
     <string name="menu_call" msgid="3992595586042260618">"Ring upp kontakt"</string>
     <string name="menu_sendSMS" msgid="5535886767547006515">"Skicka SMS till kontakt"</string>
@@ -56,17 +57,23 @@
     <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Lägg till grupp"</string>
     <string name="splitConfirmation_title" msgid="633640935430370530">"Dela upp kontakten?"</string>
     <string name="splitConfirmation" msgid="740190210499587175">"Kontakten kommer att delas upp i flera kontakter."</string>
-    <string name="menu_joinAggregate" msgid="5027981918265667970">"Slå ihop"</string>
+    <string name="menu_joinAggregate" msgid="4050157483569357666">"Sammanfoga"</string>
     <string name="titleJoinContactDataWith" msgid="7684875775798635354">"Kombinera kontakter"</string>
     <string name="blurbJoinContactDataWith" msgid="8736488417422708236">"Välj en kontakt som du vill slå ihop med <xliff:g id="NAME">%s</xliff:g>:"</string>
     <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Visa alla kontakter"</string>
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Föreslagna kontakter"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Alla kontakter"</string>
-    <string name="contactsJoinedMessage" msgid="7208148163607047389">"Kontakterna har slagits ihop"</string>
+    <string name="contactsJoinedMessage" msgid="656936718666768589">"Kontakterna har sammanfogats"</string>
+    <string name="contacts_deleted_toast" msgid="286851430992788215">"Kontakterna har raderats"</string>
     <string name="menu_set_ring_tone" msgid="8728345772068064946">"Ställ in ringsignal"</string>
     <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Alla samtal till röstbrevlådan"</string>
     <string name="readOnlyContactWarning" msgid="7808825687289848259">"Du kan inte ta bort kontakter från skrivskyddade konton, men du kan dölja dem i kontaktlistorna."</string>
     <string name="readOnlyContactDeleteConfirmation" msgid="2137170726670196909">"Den här kontakten har information från flera konton. Information från skrivskyddade konton döljs i kontaktlistan, men tas inte bort."</string>
+    <string name="batch_merge_single_contact_warning" msgid="982585201970392110">"Du måste markera minst två kontakter som ska sammanfogas."</string>
+    <string name="batch_merge_confirmation" msgid="8551299480317422420">"De valda kontakterna sammanfogas till en."</string>
+    <string name="batch_delete_confirmation" msgid="2564172328268885394">"De valda kontakterna raderas."</string>
+    <string name="batch_delete_read_only_contact_confirmation" msgid="6614878716815412523">"Information från skrivskyddade konton döljs i kontaktlistan, men tas inte bort."</string>
+    <string name="batch_delete_multiple_accounts_confirmation" msgid="5189722181586680185">"De här kontakterna har information från flera konton. Information från skrivskyddade konton döljs i kontaktlistan, men tas inte bort."</string>
     <string name="multipleContactDeleteConfirmation" msgid="938900978442960800">"Om du tar bort den här kontakten tar du bort information från flera konton."</string>
     <string name="deleteConfirmation" msgid="811706994761610640">"Kontakten kommer att tas bort."</string>
     <string name="menu_discard" msgid="6854657936970228164">"Ignorera ändringar"</string>
@@ -94,20 +101,20 @@
     <string name="contactSavedErrorToast" msgid="3207250533172944892">"Det gick inte att spara ändringarna i kontakten."</string>
     <string name="groupSavedToast" msgid="1168756874239833756">"Gruppen sparades."</string>
     <string name="groupSavedErrorToast" msgid="7984466936615304740">"Det gick inte att spara ändringarna i gruppen."</string>
-  <plurals name="listTotalPhoneContacts">
-    <item quantity="one" msgid="3015357862286673986">"en kontakt med telefonnummer"</item>
-    <item quantity="other" msgid="3299954047880968205">"<xliff:g id="COUNT">%d</xliff:g> kontakter med telefonnummer"</item>
-  </plurals>
+    <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> kontakter med telefonnummer</item>
+      <item quantity="one">1 kontakt med telefonnummer</item>
+    </plurals>
     <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"Inga kontakter med telefonnummer"</string>
-  <plurals name="listFoundAllContacts">
-    <item quantity="one" msgid="5517063038754171134">"1 hittades"</item>
-    <item quantity="other" msgid="3852668542926965042">"<xliff:g id="COUNT">%d</xliff:g> hittades"</item>
-  </plurals>
+    <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> hittades</item>
+      <item quantity="one">1 hittades</item>
+    </plurals>
     <string name="listFoundAllContactsZero" msgid="922980883593159444">"Inga kontakter"</string>
-  <plurals name="searchFoundContacts">
-    <item quantity="one" msgid="4826918429708286628">"1 hittades"</item>
-    <item quantity="other" msgid="7988132539476575389">"<xliff:g id="COUNT">%d</xliff:g> hittades"</item>
-  </plurals>
+    <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> hittades</item>
+      <item quantity="one">1 hittades</item>
+    </plurals>
     <string name="all_contacts_tab_label" msgid="6250372293594147703">"Alla kontakter"</string>
     <string name="favorites_tab_label" msgid="1524869648904016414">"Favoriter"</string>
     <string name="callBack" msgid="5498224409038809224">"Ring upp"</string>
@@ -144,9 +151,6 @@
     <string name="pick_new_photo" msgid="9122450996263688237">"Välj ett nytt foto"</string>
     <string name="locale_change_in_progress" msgid="7583992153091537467">"Kontaktlistan uppdateras så att språkändringen visas."</string>
     <string name="upgrade_in_progress" msgid="474511436863451061">"Kontaktlistan uppdateras."</string>
-    <string name="upgrade_out_of_memory" msgid="1209994418877625940">"Kontakterna håller på att uppgraderas. \n\nUppgraderingen kräver ungefär <xliff:g id="SIZE_IN_MEGABYTES">%s</xliff:g> MB av det interna minnet.\n\nVälj något av följande alternativ:"</string>
-    <string name="upgrade_out_of_memory_uninstall" msgid="1721798828992091432">"Avinstallera några appar"</string>
-    <string name="upgrade_out_of_memory_retry" msgid="8431289830472724609">"Försök uppgradera igen"</string>
     <string name="search_results_searching" msgid="3984833028938569930">"Söker …"</string>
     <string name="menu_display_selected" msgid="6470001164297969034">"Visa markerade"</string>
     <string name="menu_display_all" msgid="8887488642609786198">"Visa alla"</string>
@@ -160,10 +164,10 @@
     <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>
-  <plurals name="merge_info">
-    <item quantity="one" msgid="148365587896371969">"inte kombinerade"</item>
-    <item quantity="other" msgid="425683718017380845">"kombinerade från <xliff:g id="COUNT">%0$d</xliff:g> källor"</item>
-  </plurals>
+    <plurals name="merge_info" formatted="false" msgid="2489323424994280962">
+      <item quantity="other">slagits samman från <xliff:g id="COUNT">%0$d</xliff:g> källor</item>
+      <item quantity="one">har inte slagits samman</item>
+    </plurals>
     <string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"Vill du kombinera kontakten med den markerade kontakten?"</string>
     <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Vill du fortsätta att redigera den markerade kontakten? Information som du har angett hittills kommer att kopieras."</string>
     <string name="menu_copyContact" msgid="1573960845106822639">"Kopiera till mina kontakter"</string>
@@ -172,7 +176,7 @@
     <string name="list_filter_custom" msgid="8910173055702057002">"Anpassad"</string>
     <string name="activity_title_settings" msgid="5464130076132770781">"Inställningar"</string>
     <string name="menu_settings" msgid="377929915873428211">"Inställningar"</string>
-    <string name="menu_help" msgid="5123887102216637725">"Hjälp"</string>
+    <string name="menu_help" msgid="1680178646764069976">"Hjälp och feedback"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"Visa alternativ"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="non_phone_caption" msgid="1541655052330027380">"Telefonnummer"</string>
@@ -188,19 +192,19 @@
     <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Importera kontakter"</string>
     <string name="create_group_dialog_title" msgid="6874527142828424475">"Skapa ny grupp"</string>
     <string name="create_group_item_label" msgid="4411981763169654825">"Skapa ny grupp"</string>
-  <plurals name="num_groups_in_account">
-    <item quantity="one" msgid="2944819210288517794">"1 grupp"</item>
-    <item quantity="other" msgid="1276758425904917367">"<xliff:g id="COUNT">%0$d</xliff:g> grupper"</item>
-  </plurals>
+    <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
+      <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> grupper</item>
+      <item quantity="one">1 grupp</item>
+    </plurals>
     <string name="delete_group_dialog_message" msgid="7586856514337560529">"Vill du ta bort gruppen <xliff:g id="GROUP_LABEL">%1$s</xliff:g>? (Kontakterna tas inte bort.)"</string>
-  <plurals name="num_contacts_in_group">
-    <item quantity="one" msgid="1352418549951013448">"<xliff:g id="COUNT_0">%1$d</xliff:g> person från <xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>"</item>
-    <item quantity="other" msgid="8146027769011086349">"<xliff:g id="COUNT_0">%1$d</xliff:g> personer från <xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>"</item>
-  </plurals>
-  <plurals name="group_list_num_contacts_in_group">
-    <item quantity="one" msgid="3323065321661972446">"<xliff:g id="COUNT">%1$d</xliff:g> person"</item>
-    <item quantity="other" msgid="6251996206137048525">"<xliff:g id="COUNT">%1$d</xliff:g> personer"</item>
-  </plurals>
+    <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> personer från <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> person från <xliff:g id="ACCOUNT_TYPE_1">%2$s</xliff:g></item>
+    </plurals>
+    <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
+      <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> personer</item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> person</item>
+    </plurals>
     <string name="toast_join_with_empty_contact" msgid="2238581529864542985">"Skriv in kontaktens namn innan du slår ihop den med en annan."</string>
     <string name="copy_text" msgid="3257145021583508761">"Kopiera till Urklipp"</string>
     <string name="set_default" msgid="4417505153468300351">"Ange standard"</string>
@@ -264,4 +268,5 @@
     <string name="content_description_recent_call" msgid="5183800406316723676">"samtal. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. Klicka om du vill ringa upp"</string>
     <string name="message_from_you_prefix" msgid="7180706529908434482">"Du: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
     <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"Hangouts fungerar bättre när du anger personens identifierare i Hangouts i e-postfältet eller mobilfältet."</string>
+    <string name="compact_editor_more_fields" msgid="2874181192382284115">"Fler fält"</string>
 </resources>
diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml
index b2ad7c8..0ff2b45 100644
--- a/res/values-sw/strings.xml
+++ b/res/values-sw/strings.xml
@@ -46,6 +46,7 @@
     <string name="description_action_menu_add_star" msgid="3327186327234177456">"Imeongezwa kwenye vipendwa"</string>
     <string name="menu_editContact" msgid="9042415603857662633">"Badilisha"</string>
     <string name="menu_deleteContact" msgid="6788644058868189393">"Futa"</string>
+    <string name="menu_change_photo" msgid="7769177631511496210">"Badilisha picha"</string>
     <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Weka kwenye skrini ya Mwanzo"</string>
     <string name="menu_call" msgid="3992595586042260618">"Mpigie"</string>
     <string name="menu_sendSMS" msgid="5535886767547006515">"Tuma ujumbe kwa anwani"</string>
@@ -56,17 +57,23 @@
     <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Ongeza Kikundi"</string>
     <string name="splitConfirmation_title" msgid="633640935430370530">"Tenganisha anwani?"</string>
     <string name="splitConfirmation" msgid="740190210499587175">"Mwasiliani atatenganishwa kwa anwani kadha."</string>
-    <string name="menu_joinAggregate" msgid="5027981918265667970">"Muunganishe"</string>
+    <string name="menu_joinAggregate" msgid="4050157483569357666">"Unganisha"</string>
     <string name="titleJoinContactDataWith" msgid="7684875775798635354">"Unganisha anwani"</string>
     <string name="blurbJoinContactDataWith" msgid="8736488417422708236">"Chagua mwasiliani unayetaka kuugana naye kwa <xliff:g id="NAME">%s</xliff:g>:"</string>
     <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Onyesha anwani zote"</string>
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Anwani zilizopendekezwa"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Anwani zote"</string>
-    <string name="contactsJoinedMessage" msgid="7208148163607047389">"Anwani zimeunganishwa"</string>
+    <string name="contactsJoinedMessage" msgid="656936718666768589">"Anwani zimeunganishwa"</string>
+    <string name="contacts_deleted_toast" msgid="286851430992788215">"Anwani zimefutwa"</string>
     <string name="menu_set_ring_tone" msgid="8728345772068064946">"Weka mlio wa simu"</string>
     <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Simu zijibiwe kwa ujumbe-sauti"</string>
     <string name="readOnlyContactWarning" msgid="7808825687289848259">"Huwezi kufuta anwani kutoka kwa akaunti ya kusoma-tu, lakini unaweza kuzificha katika orodha zako za anwani."</string>
     <string name="readOnlyContactDeleteConfirmation" msgid="2137170726670196909">"Anwani hii ina maelezo kutoka kwa akaunti nyingi. Maelezo kutoka kwa akaunti za soma-tu zitafichwa katika orodha zako za anwani, sio kufutwa."</string>
+    <string name="batch_merge_single_contact_warning" msgid="982585201970392110">"Unahitaji kuchagua angalau anwani mbili ili uunganishe."</string>
+    <string name="batch_merge_confirmation" msgid="8551299480317422420">"Anwani ulizochagua zitaunganishwa ziwe anwani moja."</string>
+    <string name="batch_delete_confirmation" msgid="2564172328268885394">"Anwani ulizochagua zitafutwa."</string>
+    <string name="batch_delete_read_only_contact_confirmation" msgid="6614878716815412523">"Maelezo kutoka kwa akaunti za kusoma pekee yatafichwa katika orodha zako za anwani, hayatafutwa."</string>
+    <string name="batch_delete_multiple_accounts_confirmation" msgid="5189722181586680185">"Anwani hizi zina maelezo kutoka kwa akaunti nyingi. Maelezo kutoka kwa akaunti za kusoma pekee yatafichwa katika orodha zako za anwani, hayatafutwa."</string>
     <string name="multipleContactDeleteConfirmation" msgid="938900978442960800">"Kufuta anwani hii kutafuta maelezo kutoka kwa akaunti nyingi."</string>
     <string name="deleteConfirmation" msgid="811706994761610640">"Mwasiliani huyu atafutwa."</string>
     <string name="menu_discard" msgid="6854657936970228164">"Usihifadhi mabadiliko"</string>
@@ -94,20 +101,20 @@
     <string name="contactSavedErrorToast" msgid="3207250533172944892">"Haikuweza kuhifadhi mabadiliko ya mwasiliani."</string>
     <string name="groupSavedToast" msgid="1168756874239833756">"Kikundi kimehifadhiwa."</string>
     <string name="groupSavedErrorToast" msgid="7984466936615304740">"Haikuweza kuhifadhi mabadiliko  ya kikundi."</string>
-  <plurals name="listTotalPhoneContacts">
-    <item quantity="one" msgid="3015357862286673986">"Anwani 1 yenye namba ya simu"</item>
-    <item quantity="other" msgid="3299954047880968205">"Anwani <xliff:g id="COUNT">%d</xliff:g> zilizo na nambari ya simu"</item>
-  </plurals>
+    <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> unaowasiliana nao wenye nambari za simu</item>
+      <item quantity="one">1 unayewasiliana naye mwenye nambari ya simu</item>
+    </plurals>
     <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"Hakuna anwani zilizo na nambari za simu"</string>
-  <plurals name="listFoundAllContacts">
-    <item quantity="one" msgid="5517063038754171134">"Imepatikana 1"</item>
-    <item quantity="other" msgid="3852668542926965042">"Patikana <xliff:g id="COUNT">%d</xliff:g>"</item>
-  </plurals>
+    <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> zimepatikana</item>
+      <item quantity="one">1 imepatikana</item>
+    </plurals>
     <string name="listFoundAllContactsZero" msgid="922980883593159444">"Hakuna anwani"</string>
-  <plurals name="searchFoundContacts">
-    <item quantity="one" msgid="4826918429708286628">"Patikana 1"</item>
-    <item quantity="other" msgid="7988132539476575389">"<xliff:g id="COUNT">%d</xliff:g> zimepatikana"</item>
-  </plurals>
+    <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> zimepatikana</item>
+      <item quantity="one">Moja imepatikana</item>
+    </plurals>
     <string name="all_contacts_tab_label" msgid="6250372293594147703">"Anwani zote"</string>
     <string name="favorites_tab_label" msgid="1524869648904016414">"Vipendwa"</string>
     <string name="callBack" msgid="5498224409038809224">"Mpigie"</string>
@@ -144,9 +151,6 @@
     <string name="pick_new_photo" msgid="9122450996263688237">"Chagua picha mpya"</string>
     <string name="locale_change_in_progress" msgid="7583992153091537467">"Orodha ya anwani inasasishwa ili kuangazia mabadiliko ya lugha."</string>
     <string name="upgrade_in_progress" msgid="474511436863451061">"Orodha ya anwani inasasishwa."</string>
-    <string name="upgrade_out_of_memory" msgid="1209994418877625940">"Anwani ziko katika harakati ya kupandishwa gredi. \n\nMchakato wa kupandisha gredi unahitaji takriban MB <xliff:g id="SIZE_IN_MEGABYTES">%s</xliff:g> za hifadhi ya ndani.\n\nChagua mojawapo ya chaguo zifwatazo:"</string>
-    <string name="upgrade_out_of_memory_uninstall" msgid="1721798828992091432">"Ondoa baadhi ya programu"</string>
-    <string name="upgrade_out_of_memory_retry" msgid="8431289830472724609">"Jaribu kupandisha gredi tena"</string>
     <string name="search_results_searching" msgid="3984833028938569930">"Inatafuta…"</string>
     <string name="menu_display_selected" msgid="6470001164297969034">"Onyesha iliyochaguliwa"</string>
     <string name="menu_display_all" msgid="8887488642609786198">"Onyesha zote"</string>
@@ -160,10 +164,10 @@
     <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>
-  <plurals name="merge_info">
-    <item quantity="one" msgid="148365587896371969">"haijaunganishwa"</item>
-    <item quantity="other" msgid="425683718017380845">"Zimeunganishwa kutoka kwa nyenzo <xliff:g id="COUNT">%0$d</xliff:g>"</item>
-  </plurals>
+    <plurals name="merge_info" formatted="false" msgid="2489323424994280962">
+      <item quantity="other">imeunganishwa kutoka sehemu <xliff:g id="COUNT">%0$d</xliff:g></item>
+      <item quantity="one">haijaunganishwa</item>
+    </plurals>
     <string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"Unganisha anwani ya sasa na anwani iliyochaguliwa?"</string>
     <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Ungependa kubadilisha anwani uliyochagua? Maelezo uliyoweka kufikia sasa yatanakiliwa."</string>
     <string name="menu_copyContact" msgid="1573960845106822639">"Nakili kwa Anwani Zangu"</string>
@@ -172,7 +176,7 @@
     <string name="list_filter_custom" msgid="8910173055702057002">"Maalum"</string>
     <string name="activity_title_settings" msgid="5464130076132770781">"Mipangilio"</string>
     <string name="menu_settings" msgid="377929915873428211">"Mipangilio"</string>
-    <string name="menu_help" msgid="5123887102216637725">"Usaidizi"</string>
+    <string name="menu_help" msgid="1680178646764069976">"Usaidizi na maoni"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"Onyesha machaguo"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="non_phone_caption" msgid="1541655052330027380">"Nambari ya simu"</string>
@@ -188,19 +192,19 @@
     <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Ingiza anwani"</string>
     <string name="create_group_dialog_title" msgid="6874527142828424475">"Unda kikundi kipya"</string>
     <string name="create_group_item_label" msgid="4411981763169654825">"Unda kikundi kipya"</string>
-  <plurals name="num_groups_in_account">
-    <item quantity="one" msgid="2944819210288517794">"Kikundi 1"</item>
-    <item quantity="other" msgid="1276758425904917367">"Vikundi <xliff:g id="COUNT">%0$d</xliff:g>"</item>
-  </plurals>
+    <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
+      <item quantity="other">Makundi <xliff:g id="COUNT">%0$d</xliff:g></item>
+      <item quantity="one">Kundi kimoja</item>
+    </plurals>
     <string name="delete_group_dialog_message" msgid="7586856514337560529">"Futa kikundi \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\"? (Anwani zenyewe hazitafutwa.)"</string>
-  <plurals name="num_contacts_in_group">
-    <item quantity="one" msgid="1352418549951013448">"Mtu<xliff:g id="COUNT_0">%1$d</xliff:g> kutoka <xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>"</item>
-    <item quantity="other" msgid="8146027769011086349">"Watu <xliff:g id="COUNT_0">%1$d</xliff:g>  kutoka<xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>"</item>
-  </plurals>
-  <plurals name="group_list_num_contacts_in_group">
-    <item quantity="one" msgid="3323065321661972446">"Mtu <xliff:g id="COUNT">%1$d</xliff:g>"</item>
-    <item quantity="other" msgid="6251996206137048525">"Watu <xliff:g id="COUNT">%1$d</xliff:g>"</item>
-  </plurals>
+    <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
+      <item quantity="other">Watu <xliff:g id="COUNT_2">%1$d</xliff:g> kutoka <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
+      <item quantity="one">Mtu<xliff:g id="COUNT_0">%1$d</xliff:g> kutoka <xliff:g id="ACCOUNT_TYPE_1">%2$s</xliff:g></item>
+    </plurals>
+    <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
+      <item quantity="other">Watu <xliff:g id="COUNT_1">%1$d</xliff:g></item>
+      <item quantity="one">Mtu <xliff:g id="COUNT_0">%1$d</xliff:g></item>
+    </plurals>
     <string name="toast_join_with_empty_contact" msgid="2238581529864542985">"Andika jina ya mwasiliani kabla ya kumuunganisha na mwingine."</string>
     <string name="copy_text" msgid="3257145021583508761">"Nakili kwenye ubao wa klipu"</string>
     <string name="set_default" msgid="4417505153468300351">"Weka chaguo-msingi"</string>
@@ -264,4 +268,5 @@
     <string name="content_description_recent_call" msgid="5183800406316723676">"simu ya hivi karibuni. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. bofya ili upige simu"</string>
     <string name="message_from_you_prefix" msgid="7180706529908434482">"Wewe: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
     <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"Hangout hufanya kazi vizuri zaidi unapoweka nambari ya mtu ya utambulisho wa Hangout katika sehemu ya anwani ya barua pepe au sehemu ya nambari ya simu."</string>
+    <string name="compact_editor_more_fields" msgid="2874181192382284115">"Sehemu Zaidi"</string>
 </resources>
diff --git a/res/values-ta-rIN/strings.xml b/res/values-ta-rIN/strings.xml
index 19117df..b0356e0 100644
--- a/res/values-ta-rIN/strings.xml
+++ b/res/values-ta-rIN/strings.xml
@@ -46,6 +46,7 @@
     <string name="description_action_menu_add_star" msgid="3327186327234177456">"விருப்பங்களில் சேர்க்கப்பட்டது"</string>
     <string name="menu_editContact" msgid="9042415603857662633">"திருத்து"</string>
     <string name="menu_deleteContact" msgid="6788644058868189393">"நீக்கு"</string>
+    <string name="menu_change_photo" msgid="7769177631511496210">"படத்தை மாற்று"</string>
     <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"முகப்புத் திரையில் அமை"</string>
     <string name="menu_call" msgid="3992595586042260618">"தொடர்பை அழை"</string>
     <string name="menu_sendSMS" msgid="5535886767547006515">"தொடர்பிற்கு உரைச் செய்தியை அனுப்பு"</string>
@@ -56,17 +57,23 @@
     <string name="menu_new_group_action_bar" msgid="3520232877587377175">"குழுவைச் சேர்"</string>
     <string name="splitConfirmation_title" msgid="633640935430370530">"தொடர்பைப் பிரிக்கவா?"</string>
     <string name="splitConfirmation" msgid="740190210499587175">"இந்தத் தொடர்பு பல தொடர்புகளாகப் பிரிக்கப்படும்."</string>
-    <string name="menu_joinAggregate" msgid="5027981918265667970">"இணை"</string>
+    <string name="menu_joinAggregate" msgid="4050157483569357666">"ஒன்றிணை"</string>
     <string name="titleJoinContactDataWith" msgid="7684875775798635354">"தொடர்புகளில் இணை"</string>
     <string name="blurbJoinContactDataWith" msgid="8736488417422708236">"<xliff:g id="NAME">%s</xliff:g> உடன் இணைய விரும்பும் தொடர்பைத் தேர்வுசெய்யவும்:"</string>
     <string name="showAllContactsJoinItem" msgid="2189695051430392383">"எல்லா தொடர்புகளையும் காட்டு"</string>
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"பரிந்துரைக்கப்பட்ட தொடர்புகள்"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"எல்லா தொடர்புகளும்"</string>
-    <string name="contactsJoinedMessage" msgid="7208148163607047389">"தொடர்புகள் இணைக்கப்பட்டன"</string>
+    <string name="contactsJoinedMessage" msgid="656936718666768589">"தொடர்புகள் இணைக்கப்பட்டன"</string>
+    <string name="contacts_deleted_toast" msgid="286851430992788215">"தொடர்புகள் நீக்கப்பட்டன"</string>
     <string name="menu_set_ring_tone" msgid="8728345772068064946">"ரிங்டோனை அமை"</string>
     <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"எல்லா அழைப்புகளையும் குரலஞ்சலிற்கு திருப்பு"</string>
     <string name="readOnlyContactWarning" msgid="7808825687289848259">"படிக்க மட்டுமேயான கணக்குகளின் தொடர்புகளை நீக்க முடியாது, ஆனால் தொடர்புகள் பட்டியல்களில் அவற்றை மறைக்கலாம்."</string>
     <string name="readOnlyContactDeleteConfirmation" msgid="2137170726670196909">"தொடர்பில் பல கணக்குகளின் தகவல் உள்ளது. படிக்க மட்டுமேயான கணக்குகளின் தகவல் தொடர்புகள் பட்டியல்களில் மறைக்கப்படும், ஆனால் நீக்கப்படாது."</string>
+    <string name="batch_merge_single_contact_warning" msgid="982585201970392110">"ஒன்றிணைப்பதற்கு, குறைந்தபட்சம் இரண்டு தொடர்புகளையாவது தேர்ந்தெடுத்திருக்க வேண்டும்."</string>
+    <string name="batch_merge_confirmation" msgid="8551299480317422420">"தேர்ந்தெடுத்த தொடர்புகள் ஒரே தொடர்பாக்கப்படும்."</string>
+    <string name="batch_delete_confirmation" msgid="2564172328268885394">"தேர்ந்தெடுத்த தொடர்புகள் நீக்கப்படும்."</string>
+    <string name="batch_delete_read_only_contact_confirmation" msgid="6614878716815412523">"படிக்க மட்டுமேயான கணக்குகளின் தகவல்கள் உங்கள் தொடர்புப் பட்டியல்களில் மறைக்கப்படும் ஆனால் நீக்கப்படாது."</string>
+    <string name="batch_delete_multiple_accounts_confirmation" msgid="5189722181586680185">"இந்தத் தொடர்புகள் பல கணக்குகளின் தகவலைக் கொண்டுள்ளன. படிக்க மட்டுமேயான கணக்குகளின் தகவல்கள் உங்கள் தொடர்புப் பட்டியல்களில் மறைக்கப்படும் ஆனால் நீக்கப்படாது."</string>
     <string name="multipleContactDeleteConfirmation" msgid="938900978442960800">"தொடர்பை நீக்குவது பல கணக்குகளில் உள்ள தகவலை நீக்கும்."</string>
     <string name="deleteConfirmation" msgid="811706994761610640">"தொடர்பு நீக்கப்படும்."</string>
     <string name="menu_discard" msgid="6854657936970228164">"மாற்றங்களை நிராகரி"</string>
@@ -94,20 +101,20 @@
     <string name="contactSavedErrorToast" msgid="3207250533172944892">"தொடர்பின் மாற்றங்களைச் சேமிக்க முடியவில்லை."</string>
     <string name="groupSavedToast" msgid="1168756874239833756">"குழு சேமிக்கப்பட்டது."</string>
     <string name="groupSavedErrorToast" msgid="7984466936615304740">"குழு மாற்றங்களைச் சேமிக்க முடியவில்லை."</string>
-  <plurals name="listTotalPhoneContacts">
-    <item quantity="one" msgid="3015357862286673986">"மொபைல் எண்ணுடன் 1 தொடர்பு"</item>
-    <item quantity="other" msgid="3299954047880968205">"மொபைல் எண்களுடன் <xliff:g id="COUNT">%d</xliff:g> தொடர்புகள்"</item>
-  </plurals>
+    <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
+      <item quantity="other">மொபைல் எண்களுடன் <xliff:g id="COUNT">%d</xliff:g> தொடர்புகள் உள்ளன</item>
+      <item quantity="one">மொபைல் எண்ணுடன் 1 தொடர்பு உள்ளது</item>
+    </plurals>
     <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"மொபைல் எண்களுடன் தொடர்புகள் இல்லை"</string>
-  <plurals name="listFoundAllContacts">
-    <item quantity="one" msgid="5517063038754171134">"1 கண்டறியப்பட்டது"</item>
-    <item quantity="other" msgid="3852668542926965042">"<xliff:g id="COUNT">%d</xliff:g> கண்டறியப்பட்டன"</item>
-  </plurals>
+    <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> கண்டறியப்பட்டன</item>
+      <item quantity="one">1 கண்டறியப்பட்டது</item>
+    </plurals>
     <string name="listFoundAllContactsZero" msgid="922980883593159444">"தொடர்புகள் எதுவும் இல்லை"</string>
-  <plurals name="searchFoundContacts">
-    <item quantity="one" msgid="4826918429708286628">"1 கண்டறியப்பட்டது"</item>
-    <item quantity="other" msgid="7988132539476575389">"<xliff:g id="COUNT">%d</xliff:g> கண்டறியப்பட்டன"</item>
-  </plurals>
+    <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> கண்டறியப்பட்டன</item>
+      <item quantity="one">1 கண்டறியப்பட்டது</item>
+    </plurals>
     <string name="all_contacts_tab_label" msgid="6250372293594147703">"எல்லா தொடர்புகளும்"</string>
     <string name="favorites_tab_label" msgid="1524869648904016414">"விருப்பங்கள்"</string>
     <string name="callBack" msgid="5498224409038809224">"திருப்பி அழை"</string>
@@ -144,9 +151,6 @@
     <string name="pick_new_photo" msgid="9122450996263688237">"புதிய படத்தைத் தேர்ந்தெடுக்கவும்"</string>
     <string name="locale_change_in_progress" msgid="7583992153091537467">"மொழியின் மாற்றத்தைப் பிரதிபலிக்கத் தொடர்பு பட்டியல் புதுப்பிக்கப்படுகிறது."</string>
     <string name="upgrade_in_progress" msgid="474511436863451061">"தொடர்பு பட்டியல் புதுப்பிக்கப்படுகிறது."</string>
-    <string name="upgrade_out_of_memory" msgid="1209994418877625940">"தொடர்புகள் மேம்படுத்தல் செயல்முறையில் உள்ளன. \n\nமேம்படுத்தல் செயல்முறைக்குத் தோராயமாக <xliff:g id="SIZE_IN_MEGABYTES">%s</xliff:g> மெ.பை. அகச் சேமிப்பகம் தேவை.\n\nபின்வரும் விருப்பங்களில் ஒன்றைத் தேர்வுசெய்யவும்:"</string>
-    <string name="upgrade_out_of_memory_uninstall" msgid="1721798828992091432">"சில பயன்பாடுகளை நிறுவல் நீக்கு"</string>
-    <string name="upgrade_out_of_memory_retry" msgid="8431289830472724609">"மேம்படுத்தலை மீண்டும் முயற்சி"</string>
     <string name="search_results_searching" msgid="3984833028938569930">"தேடுகிறது..."</string>
     <string name="menu_display_selected" msgid="6470001164297969034">"தேர்ந்தெடுத்தவற்றைக் காட்டு"</string>
     <string name="menu_display_all" msgid="8887488642609786198">"அனைத்தையும் காட்டு"</string>
@@ -160,10 +164,10 @@
     <string name="primary_photo" msgid="8517942231868516999">"முதன்மை படம்"</string>
     <string name="description_star" msgid="2605854427360036550">"பிடித்தது"</string>
     <string name="edit_contact" msgid="7529281274005689512">"தொடர்பைத் திருத்து"</string>
-  <plurals name="merge_info">
-    <item quantity="one" msgid="148365587896371969">"ஒன்றிணைக்கப்படவில்லை"</item>
-    <item quantity="other" msgid="425683718017380845">"<xliff:g id="COUNT">%0$d</xliff:g> ஆதாரங்களிலிருந்து ஒன்றிணைக்கப்பட்டது"</item>
-  </plurals>
+    <plurals name="merge_info" formatted="false" msgid="2489323424994280962">
+      <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> மூலங்களிலிருந்து இணைக்கப்பட்டன</item>
+      <item quantity="one">இணைக்கப்படவில்லை</item>
+    </plurals>
     <string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"தேர்ந்தெடுத்த தொடர்புடன் தற்போதைய தொடர்பை இணைக்கவா?"</string>
     <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"தேர்ந்தெடுத்த தொடர்பைத் திருத்துதலுக்கு மாறவா? இதுவரை உள்ளிட்ட தகவல் நகலெடுக்கப்படும்."</string>
     <string name="menu_copyContact" msgid="1573960845106822639">"எனது தொடர்புகளுக்கு நகலெடு"</string>
@@ -172,7 +176,7 @@
     <string name="list_filter_custom" msgid="8910173055702057002">"தனிப்பயன்"</string>
     <string name="activity_title_settings" msgid="5464130076132770781">"அமைப்பு"</string>
     <string name="menu_settings" msgid="377929915873428211">"அமைப்பு"</string>
-    <string name="menu_help" msgid="5123887102216637725">"உதவி"</string>
+    <string name="menu_help" msgid="1680178646764069976">"உதவி &amp; கருத்துத் தெரிவி"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"திரை விருப்பங்கள்"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="non_phone_caption" msgid="1541655052330027380">"மொபைல் எண்"</string>
@@ -188,19 +192,19 @@
     <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"தொடர்புகளை இறக்குமதி செய்"</string>
     <string name="create_group_dialog_title" msgid="6874527142828424475">"புதிய குழுவை உருவாக்கு"</string>
     <string name="create_group_item_label" msgid="4411981763169654825">"புதிய குழுவை உருவாக்கு"</string>
-  <plurals name="num_groups_in_account">
-    <item quantity="one" msgid="2944819210288517794">"1 குழு"</item>
-    <item quantity="other" msgid="1276758425904917367">"<xliff:g id="COUNT">%0$d</xliff:g> குழுக்கள்"</item>
-  </plurals>
+    <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
+      <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> குழுக்கள்</item>
+      <item quantity="one">1 குழு</item>
+    </plurals>
     <string name="delete_group_dialog_message" msgid="7586856514337560529">"\"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\" குழுவை நீக்கவா? (அதன் தொடர்புகள் நீக்கப்படாது.)"</string>
-  <plurals name="num_contacts_in_group">
-    <item quantity="one" msgid="1352418549951013448">"<xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g> இலிருந்து <xliff:g id="COUNT_0">%1$d</xliff:g> நபர்"</item>
-    <item quantity="other" msgid="8146027769011086349">"<xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g> இலிருந்து <xliff:g id="COUNT_0">%1$d</xliff:g> பேர்"</item>
-  </plurals>
-  <plurals name="group_list_num_contacts_in_group">
-    <item quantity="one" msgid="3323065321661972446">"<xliff:g id="COUNT">%1$d</xliff:g> நபர்"</item>
-    <item quantity="other" msgid="6251996206137048525">"<xliff:g id="COUNT">%1$d</xliff:g> பேர்"</item>
-  </plurals>
+    <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
+      <item quantity="other"><xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g> இலிருந்து <xliff:g id="COUNT_2">%1$d</xliff:g> பேர்</item>
+      <item quantity="one"><xliff:g id="ACCOUNT_TYPE_1">%2$s</xliff:g> இலிருந்து <xliff:g id="COUNT_0">%1$d</xliff:g> நபர்</item>
+    </plurals>
+    <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
+      <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> பேர்</item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> நபர்</item>
+    </plurals>
     <string name="toast_join_with_empty_contact" msgid="2238581529864542985">"வேறொன்றுடன் இணைப்பதற்கு முன் தொடர்பின் பெயரை உள்ளிடவும்."</string>
     <string name="copy_text" msgid="3257145021583508761">"கிளிப்போர்டுக்கு நகலெடு"</string>
     <string name="set_default" msgid="4417505153468300351">"இயல்புநிலையாக அமை"</string>
@@ -264,4 +268,5 @@
     <string name="content_description_recent_call" msgid="5183800406316723676">"சமீபத்திய அழைப்பு. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. திரும்ப அழைக்க, கிளிக் செய்க"</string>
     <string name="message_from_you_prefix" msgid="7180706529908434482">"நீங்கள்: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
     <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"பிறரின் Hangouts அடையாளத்தை மின்னஞ்சல் அல்லது ஃபோன் புலத்தில் உள்ளிடும் போது, Hangouts இன்னும் சிறப்பாகச் செயல்படும்."</string>
+    <string name="compact_editor_more_fields" msgid="2874181192382284115">"மேலும் புலங்கள்"</string>
 </resources>
diff --git a/res/values-te-rIN/strings.xml b/res/values-te-rIN/strings.xml
index 9789b79..7120de8 100644
--- a/res/values-te-rIN/strings.xml
+++ b/res/values-te-rIN/strings.xml
@@ -46,6 +46,7 @@
     <string name="description_action_menu_add_star" msgid="3327186327234177456">"ఇష్టమైనవికి జోడించబడింది"</string>
     <string name="menu_editContact" msgid="9042415603857662633">"సవరించు"</string>
     <string name="menu_deleteContact" msgid="6788644058868189393">"తొలగించు"</string>
+    <string name="menu_change_photo" msgid="7769177631511496210">"ఫోటోను మార్చు"</string>
     <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"హోమ్ స్క్రీన్‌లో ఉంచు"</string>
     <string name="menu_call" msgid="3992595586042260618">"పరిచయానికి కాల్ చేయి"</string>
     <string name="menu_sendSMS" msgid="5535886767547006515">"పరిచయానికి వచనం పంపు"</string>
@@ -56,17 +57,23 @@
     <string name="menu_new_group_action_bar" msgid="3520232877587377175">"సమూహాన్ని జోడించు"</string>
     <string name="splitConfirmation_title" msgid="633640935430370530">"పరిచయాన్ని వేరు చేయాలా?"</string>
     <string name="splitConfirmation" msgid="740190210499587175">"ఈ పరిచయం బహుళ పరిచయాలుగా వేరు చేయబడుతుంది."</string>
-    <string name="menu_joinAggregate" msgid="5027981918265667970">"కలుపు"</string>
+    <string name="menu_joinAggregate" msgid="4050157483569357666">"విలీనం చేయి"</string>
     <string name="titleJoinContactDataWith" msgid="7684875775798635354">"పరిచయాలను కలపండి"</string>
     <string name="blurbJoinContactDataWith" msgid="8736488417422708236">"మీరు <xliff:g id="NAME">%s</xliff:g>తో కలపాలనుకుంటున్న పరిచయాన్ని ఎంచుకోండి:"</string>
     <string name="showAllContactsJoinItem" msgid="2189695051430392383">"అన్ని పరిచయాలను చూపు"</string>
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"సూచిత పరిచయాలు"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"అన్ని పరిచయాలు"</string>
-    <string name="contactsJoinedMessage" msgid="7208148163607047389">"పరిచయాలు కలపబడ్డాయి"</string>
+    <string name="contactsJoinedMessage" msgid="656936718666768589">"పరిచయాలు విలీనం చేయబడ్డాయి"</string>
+    <string name="contacts_deleted_toast" msgid="286851430992788215">"పరిచయాలు తొలగించబడ్డాయి"</string>
     <string name="menu_set_ring_tone" msgid="8728345772068064946">"రింగ్‌టో‌న్‌ను సెట్ చేయి"</string>
     <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"అన్ని కాల్‌లు వాయిస్ మెయిల్‌కు"</string>
     <string name="readOnlyContactWarning" msgid="7808825687289848259">"మీరు చదవడానికి-మాత్రమే అనుమతి ఉన్న ఖాతాల నుండి పరిచయాలను తొలగించలేరు, కానీ వాటిని మీ పరిచయాల జాబితాల్లో దాచవచ్చు."</string>
     <string name="readOnlyContactDeleteConfirmation" msgid="2137170726670196909">"ఈ పరిచయం బహుళ ఖాతాల నుండి సమాచారాన్ని కలిగి ఉంటుంది. చదవడానికి-మాత్రమే అనుమతి ఉన్న ఖాతాల్లోని సమాచారం మీ పరిచయాల జాబితాల్లో దాచబడుతుంది, తొలగించబడదు."</string>
+    <string name="batch_merge_single_contact_warning" msgid="982585201970392110">"మీరు విలీన చర్యను అమలు చేయడానికి కనీసం రెండు పరిచయాలను ఎంచుకోవాలి."</string>
+    <string name="batch_merge_confirmation" msgid="8551299480317422420">"ఎంచుకున్న పరిచయాలు ఒకే పరిచయంగా విలీనం చేయబడతాయి."</string>
+    <string name="batch_delete_confirmation" msgid="2564172328268885394">"ఎంచుకున్న పరిచయాలు తొలగించబడతాయి."</string>
+    <string name="batch_delete_read_only_contact_confirmation" msgid="6614878716815412523">"చదవడానికి మాత్రమే అనుమతి ఉన్న ఖాతాల్లోని సమాచారం మీ పరిచయాల జాబితాల్లో దాచబడుతుంది కానీ తొలగించబడదు."</string>
+    <string name="batch_delete_multiple_accounts_confirmation" msgid="5189722181586680185">"ఈ పరిచయాలు బహుళ ఖాతాల నుండి సమాచారాన్ని కలిగి ఉన్నాయి. చదవడానికి మాత్రమే అనుమతి ఉన్న ఖాతాల్లోని సమాచారం మీ పరిచయాల జాబితాల్లో దాచబడుతుంది కానీ తొలగించబడదు."</string>
     <string name="multipleContactDeleteConfirmation" msgid="938900978442960800">"ఈ పరిచయాన్ని తొలగించడం వలన బహుళ ఖాతాల నుండి సమాచారం తొలగించబడుతుంది."</string>
     <string name="deleteConfirmation" msgid="811706994761610640">"ఈ పరిచయం తొలగించబడుతుంది."</string>
     <string name="menu_discard" msgid="6854657936970228164">"మార్పులను విస్మరించు"</string>
@@ -94,20 +101,20 @@
     <string name="contactSavedErrorToast" msgid="3207250533172944892">"పరిచయ మార్పులను సేవ్ చేయడం సాధ్యపడలేదు."</string>
     <string name="groupSavedToast" msgid="1168756874239833756">"సమూహం సేవ్ చేయబడింది."</string>
     <string name="groupSavedErrorToast" msgid="7984466936615304740">"సమూహ మార్పులను సేవ్ చేయడం సాధ్యపడలేదు."</string>
-  <plurals name="listTotalPhoneContacts">
-    <item quantity="one" msgid="3015357862286673986">"ఫోన్ నంబర్ గల 1 పరిచయం"</item>
-    <item quantity="other" msgid="3299954047880968205">"ఫోన్ నంబర్‌లు గల <xliff:g id="COUNT">%d</xliff:g> పరిచయాలు"</item>
-  </plurals>
+    <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
+      <item quantity="other">ఫోన్ నంబర్‌లు ఉన్న <xliff:g id="COUNT">%d</xliff:g> పరిచయాలు</item>
+      <item quantity="one">ఫోన్ నంబర్ ఉన్న 1 పరిచయం</item>
+    </plurals>
     <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"ఫోన్ నంబర్‌లు గల పరిచయాలు లేవు"</string>
-  <plurals name="listFoundAllContacts">
-    <item quantity="one" msgid="5517063038754171134">"1 కనుగొనబడ్డారు"</item>
-    <item quantity="other" msgid="3852668542926965042">"<xliff:g id="COUNT">%d</xliff:g> మంది కనుగొనబడ్డారు"</item>
-  </plurals>
+    <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> కనుగొనబడ్డాయి</item>
+      <item quantity="one">1 కనుగొనబడింది</item>
+    </plurals>
     <string name="listFoundAllContactsZero" msgid="922980883593159444">"పరిచయాలు లేవు"</string>
-  <plurals name="searchFoundContacts">
-    <item quantity="one" msgid="4826918429708286628">"1 కనుగొనబడ్డారు"</item>
-    <item quantity="other" msgid="7988132539476575389">"<xliff:g id="COUNT">%d</xliff:g> మంది కనుగొనబడ్డారు"</item>
-  </plurals>
+    <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> కనుగొనబడ్డాయి</item>
+      <item quantity="one">1 కనుగొనబడింది</item>
+    </plurals>
     <string name="all_contacts_tab_label" msgid="6250372293594147703">"అన్ని పరిచయాలు"</string>
     <string name="favorites_tab_label" msgid="1524869648904016414">"ఇష్టమైనవి"</string>
     <string name="callBack" msgid="5498224409038809224">"తిరిగి కాల్ చేయి"</string>
@@ -144,9 +151,6 @@
     <string name="pick_new_photo" msgid="9122450996263688237">"కొత్త ఫోటోను ఎంచుకోండి"</string>
     <string name="locale_change_in_progress" msgid="7583992153091537467">"భాష మార్పును ప్రతిబింబించడానికి పరిచయ జాబితా నవీకరించబడుతోంది."</string>
     <string name="upgrade_in_progress" msgid="474511436863451061">"పరిచయ జాబితా నవీకరించబడుతోంది."</string>
-    <string name="upgrade_out_of_memory" msgid="1209994418877625940">"పరిచయాలు అప్‌గ్రేడ్ అయ్యే ప్రాసెస్‌లో ఉన్నాయి. \n\nఅప్‌గ్రేడ్ ప్రాసెస్‌కు సుమారుగా <xliff:g id="SIZE_IN_MEGABYTES">%s</xliff:g> MB అంతర్గత నిల్వ అవసరం.\n\nక్రింది ఎంపికల్లో ఒకదాన్ని ఎంచుకోండి:"</string>
-    <string name="upgrade_out_of_memory_uninstall" msgid="1721798828992091432">"కొన్ని అనువర్తనాలను అన్‌ఇన్‌స్టాల్ చేయండి"</string>
-    <string name="upgrade_out_of_memory_retry" msgid="8431289830472724609">"అప్‌గ్రేడ్ చేయడాన్ని మళ్లీ ప్రయత్నించు"</string>
     <string name="search_results_searching" msgid="3984833028938569930">"శోధిస్తోంది..."</string>
     <string name="menu_display_selected" msgid="6470001164297969034">"ఎంచుకున్న వాటిని చూపు"</string>
     <string name="menu_display_all" msgid="8887488642609786198">"అన్నీ చూపు"</string>
@@ -160,10 +164,10 @@
     <string name="primary_photo" msgid="8517942231868516999">"ప్రాథమిక ఫోటో"</string>
     <string name="description_star" msgid="2605854427360036550">"ఇష్టంగా గుర్తించు"</string>
     <string name="edit_contact" msgid="7529281274005689512">"పరిచయాన్ని సవరించు"</string>
-  <plurals name="merge_info">
-    <item quantity="one" msgid="148365587896371969">"విలీనం చేయబడలేదు"</item>
-    <item quantity="other" msgid="425683718017380845">"<xliff:g id="COUNT">%0$d</xliff:g> మూలాల నుండి విలీనం చేయబడినవి"</item>
-  </plurals>
+    <plurals name="merge_info" formatted="false" msgid="2489323424994280962">
+      <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> మూలాల నుండి విలీనం చేయబడ్డాయి</item>
+      <item quantity="one">విలీనం చేయబడలేదు</item>
+    </plurals>
     <string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"ప్రస్తుత పరిచయాన్ని ఎంచుకున్న పరిచయంతో కలపాలా?"</string>
     <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"ఎంచుకున్న పరిచయాన్ని సవరించగల స్థితికి మార్చాలా? మీరు ఇప్పటి వరకు నమోదు చేసిన సమాచారం కాపీ చేయబడుతుంది."</string>
     <string name="menu_copyContact" msgid="1573960845106822639">"నా పరిచయాలకు కాపీ చేయి"</string>
@@ -172,7 +176,7 @@
     <string name="list_filter_custom" msgid="8910173055702057002">"అనుకూలం"</string>
     <string name="activity_title_settings" msgid="5464130076132770781">"సెట్టింగ్‌లు"</string>
     <string name="menu_settings" msgid="377929915873428211">"సెట్టింగ్‌లు"</string>
-    <string name="menu_help" msgid="5123887102216637725">"సహాయం"</string>
+    <string name="menu_help" msgid="1680178646764069976">"సహాయం &amp; అభిప్రాయం"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"ప్రదర్శన ఎంపికలు"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="non_phone_caption" msgid="1541655052330027380">"ఫోన్ నంబర్"</string>
@@ -188,19 +192,19 @@
     <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"పరిచయాలను దిగుమతి చేయి"</string>
     <string name="create_group_dialog_title" msgid="6874527142828424475">"కొత్త సమూహాన్ని సృష్టించండి"</string>
     <string name="create_group_item_label" msgid="4411981763169654825">"కొత్త సమూహాన్ని సృష్టించండి"</string>
-  <plurals name="num_groups_in_account">
-    <item quantity="one" msgid="2944819210288517794">"1 సమూహం"</item>
-    <item quantity="other" msgid="1276758425904917367">"<xliff:g id="COUNT">%0$d</xliff:g> సమూహాలు"</item>
-  </plurals>
+    <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
+      <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> సమూహాలు</item>
+      <item quantity="one">1 సమూహం</item>
+    </plurals>
     <string name="delete_group_dialog_message" msgid="7586856514337560529">"సమూహం \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\"ని తొలగించాలా? (పరిచయాలు వాటంతట అవే తొలగించబడవు.)"</string>
-  <plurals name="num_contacts_in_group">
-    <item quantity="one" msgid="1352418549951013448">"<xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g> నుండి <xliff:g id="COUNT_0">%1$d</xliff:g> వ్యక్తి"</item>
-    <item quantity="other" msgid="8146027769011086349">"<xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g> నుండి <xliff:g id="COUNT_0">%1$d</xliff:g> మంది వ్యక్తులు"</item>
-  </plurals>
-  <plurals name="group_list_num_contacts_in_group">
-    <item quantity="one" msgid="3323065321661972446">"<xliff:g id="COUNT">%1$d</xliff:g> వ్యక్తి"</item>
-    <item quantity="other" msgid="6251996206137048525">"<xliff:g id="COUNT">%1$d</xliff:g> మంది వ్యక్తులు"</item>
-  </plurals>
+    <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
+      <item quantity="other"><xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g> నుండి <xliff:g id="COUNT_2">%1$d</xliff:g> మంది వ్యక్తులు</item>
+      <item quantity="one"><xliff:g id="ACCOUNT_TYPE_1">%2$s</xliff:g> నుండి <xliff:g id="COUNT_0">%1$d</xliff:g> వ్యక్తి</item>
+    </plurals>
+    <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
+      <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> మంది వ్యక్తులు</item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> వ్యక్తి</item>
+    </plurals>
     <string name="toast_join_with_empty_contact" msgid="2238581529864542985">"మరొకదానితో కలపడానికి ముందు పరిచయం పేరు టైప్ చేయండి."</string>
     <string name="copy_text" msgid="3257145021583508761">"క్లిప్‌బోర్డ్‌కు కాపీ చేయి"</string>
     <string name="set_default" msgid="4417505153468300351">"డిఫాల్ట్‌గా సెట్ చేయి"</string>
@@ -264,4 +268,5 @@
     <string name="content_description_recent_call" msgid="5183800406316723676">"ఇటీవలి కాల్. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. తిరిగి కాల్ చేయడానికి క్లిక్ చేయండి"</string>
     <string name="message_from_you_prefix" msgid="7180706529908434482">"మీరు: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
     <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"మీరు ఇమెయిల్ ఫీల్డ్ లేదా ఫోన్ ఫీల్డ్‌లో వ్యక్తి యొక్క Hangouts ఐడెంటిఫైయర్‌ని నమోదు చేసినప్పుడు Hangouts ఉత్తమంగా పని చేస్తాయి."</string>
+    <string name="compact_editor_more_fields" msgid="2874181192382284115">"మరిన్ని ఫీల్డ్‌లు"</string>
 </resources>
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml
index 595da9e..44f99bc 100644
--- a/res/values-th/strings.xml
+++ b/res/values-th/strings.xml
@@ -46,6 +46,7 @@
     <string name="description_action_menu_add_star" msgid="3327186327234177456">"เพิ่มลงในรายการโปรดแล้ว"</string>
     <string name="menu_editContact" msgid="9042415603857662633">"แก้ไข"</string>
     <string name="menu_deleteContact" msgid="6788644058868189393">"ลบ"</string>
+    <string name="menu_change_photo" msgid="7769177631511496210">"เปลี่ยนรูปภาพ"</string>
     <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"วางบนหน้าจอหลัก"</string>
     <string name="menu_call" msgid="3992595586042260618">"โทรหารายชื่อในสมุดโทรศัพท์"</string>
     <string name="menu_sendSMS" msgid="5535886767547006515">"ส่งข้อความถึงรายชื่อในสมุดโทรศัพท์"</string>
@@ -56,17 +57,23 @@
     <string name="menu_new_group_action_bar" msgid="3520232877587377175">"เพิ่มกลุ่ม"</string>
     <string name="splitConfirmation_title" msgid="633640935430370530">"แยกรายชื่อหรือไม่"</string>
     <string name="splitConfirmation" msgid="740190210499587175">"รายชื่อติดต่อนี้จะถูกแยกออกเป็นหลายรายชื่อ"</string>
-    <string name="menu_joinAggregate" msgid="5027981918265667970">"เข้าร่วม"</string>
+    <string name="menu_joinAggregate" msgid="4050157483569357666">"รวม"</string>
     <string name="titleJoinContactDataWith" msgid="7684875775798635354">"รวมรายชื่อ"</string>
     <string name="blurbJoinContactDataWith" msgid="8736488417422708236">"เลือกรายชื่อติดต่อที่คุณต้องการรวมกับ <xliff:g id="NAME">%s</xliff:g>:"</string>
     <string name="showAllContactsJoinItem" msgid="2189695051430392383">"แสดงรายชื่อในสมุดโทรศัพท์ทั้งหมด"</string>
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"รายชื่อที่แนะนำ"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"รายชื่อในสมุดโทรศัพท์ทั้งหมด"</string>
-    <string name="contactsJoinedMessage" msgid="7208148163607047389">"รายชื่อที่รวมกัน"</string>
+    <string name="contactsJoinedMessage" msgid="656936718666768589">"รวมรายชื่อติดต่อแล้ว"</string>
+    <string name="contacts_deleted_toast" msgid="286851430992788215">"ลบรายชื่อติดต่อแล้ว"</string>
     <string name="menu_set_ring_tone" msgid="8728345772068064946">"ตั้งเสียงเรียกเข้า"</string>
     <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"โอนทุกสายไปยังข้อความเสียง"</string>
     <string name="readOnlyContactWarning" msgid="7808825687289848259">"คุณไม่สามารถลบรายชื่อติดต่อจากบัญชีแบบอ่านอย่างเดียวได้ แต่ซ่อนไว้ในรายการรายชื่อได้"</string>
     <string name="readOnlyContactDeleteConfirmation" msgid="2137170726670196909">"สมุดโทรศัพท์นี้มีข้อมูลจากหลายบัญชี ข้อมูลจากบัญชีแบบอ่านอย่างเดียวจะถูกซ่อนในรายการรายชื่อของคุณโดยไม่ถูกลบออก"</string>
+    <string name="batch_merge_single_contact_warning" msgid="982585201970392110">"คุณต้องเลือกรายชื่อติดต่อไว้อย่างน้อย 2 รายการเพื่อดำเนินการรวม"</string>
+    <string name="batch_merge_confirmation" msgid="8551299480317422420">"รายชื่อติดต่อที่เลือกไว้จะรวมเป็นรายชื่อเดียว"</string>
+    <string name="batch_delete_confirmation" msgid="2564172328268885394">"ระบบจะลบรายชื่อติดต่อที่เลือก"</string>
+    <string name="batch_delete_read_only_contact_confirmation" msgid="6614878716815412523">"ระบบจะซ่อนข้อมูลจากบัญชีที่อ่านอย่างเดียวไว้ในรายชื่อติดต่อโดยไม่ลบออก"</string>
+    <string name="batch_delete_multiple_accounts_confirmation" msgid="5189722181586680185">"รายชื่อติดต่อเหล่านี้มีข้อมูลจากหลายบัญชี ระบบจะซ่อนข้อมูลจากบัญชีที่อ่านอย่างเดียวไว้ในรายชื่อติดต่อของคุณโดยไม่ลบออก"</string>
     <string name="multipleContactDeleteConfirmation" msgid="938900978442960800">"การลบสมุดโทรศัพท์นี้จะลบข้อมูลจากบัญชีแบบหลายรายการ"</string>
     <string name="deleteConfirmation" msgid="811706994761610640">"รายชื่อนี้จะถูกลบ"</string>
     <string name="menu_discard" msgid="6854657936970228164">"ยกเลิกการเปลี่ยนแปลง"</string>
@@ -94,20 +101,20 @@
     <string name="contactSavedErrorToast" msgid="3207250533172944892">"ไม่สามารถบันทึกการเปลี่ยนแปลงรายชื่อติดต่อ"</string>
     <string name="groupSavedToast" msgid="1168756874239833756">"บันทึกกลุ่มแล้ว"</string>
     <string name="groupSavedErrorToast" msgid="7984466936615304740">"ไม่สามารถบันทึกการเปลี่ยนแปลงในกลุ่ม"</string>
-  <plurals name="listTotalPhoneContacts">
-    <item quantity="one" msgid="3015357862286673986">"1 รายชื่อติดต่อที่มีหมายเลขโทรศัพท์"</item>
-    <item quantity="other" msgid="3299954047880968205">"<xliff:g id="COUNT">%d</xliff:g> รายชื่อติดต่อที่มีหมายเลขโทรศัพท์"</item>
-  </plurals>
+    <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> รายชื่อติดต่อมีหมายเลขโทรศัพท์</item>
+      <item quantity="one">1 รายชื่อติดต่อมีหมายเลขโทรศัพท์</item>
+    </plurals>
     <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"ไม่มีรายชื่อติดต่อที่มีหมายเลขโทรศัพท์"</string>
-  <plurals name="listFoundAllContacts">
-    <item quantity="one" msgid="5517063038754171134">"พบ 1 รายการ"</item>
-    <item quantity="other" msgid="3852668542926965042">"พบ <xliff:g id="COUNT">%d</xliff:g> รายการ"</item>
-  </plurals>
+    <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
+      <item quantity="other">พบ <xliff:g id="COUNT">%d</xliff:g> รายการ</item>
+      <item quantity="one">พบ 1 รายการ</item>
+    </plurals>
     <string name="listFoundAllContactsZero" msgid="922980883593159444">"ไม่มีรายชื่อติดต่อ"</string>
-  <plurals name="searchFoundContacts">
-    <item quantity="one" msgid="4826918429708286628">"พบ 1 รายการ"</item>
-    <item quantity="other" msgid="7988132539476575389">"พบ <xliff:g id="COUNT">%d</xliff:g> รายการ"</item>
-  </plurals>
+    <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
+      <item quantity="other">พบ <xliff:g id="COUNT">%d</xliff:g> รายการ</item>
+      <item quantity="one">พบ 1 รายการ</item>
+    </plurals>
     <string name="all_contacts_tab_label" msgid="6250372293594147703">"รายชื่อทั้งหมด"</string>
     <string name="favorites_tab_label" msgid="1524869648904016414">"รายการโปรด"</string>
     <string name="callBack" msgid="5498224409038809224">"ติดต่อกลับ"</string>
@@ -144,9 +151,6 @@
     <string name="pick_new_photo" msgid="9122450996263688237">"เลือกรูปภาพใหม่"</string>
     <string name="locale_change_in_progress" msgid="7583992153091537467">"กำลังอัปเดตรายการรายชื่อติดต่อตามการเปลี่ยนภาษา"</string>
     <string name="upgrade_in_progress" msgid="474511436863451061">"กำลังอัปเดตรายการรายชื่อติดต่อ"</string>
-    <string name="upgrade_out_of_memory" msgid="1209994418877625940">"กำลังดำเนินการอัปเกรดสมุดโทรศัพท์\n\nกระบวนการอัปเกรดจำเป็นต้องใช้พื้นที่ประมาณ <xliff:g id="SIZE_IN_MEGABYTES">%s</xliff:g> MB ของที่จัดเก็บข้อมูลภายใน\n\nเลือกหนึ่งในตัวเลือกต่อไปนี้:"</string>
-    <string name="upgrade_out_of_memory_uninstall" msgid="1721798828992091432">"ถอนการติดตั้งแอปพลิเคชันบางอย่าง"</string>
-    <string name="upgrade_out_of_memory_retry" msgid="8431289830472724609">"ลองอัปเกรดซ้ำ"</string>
     <string name="search_results_searching" msgid="3984833028938569930">"กำลังค้นหา..."</string>
     <string name="menu_display_selected" msgid="6470001164297969034">"แสดงรายการที่เลือก"</string>
     <string name="menu_display_all" msgid="8887488642609786198">"แสดงทั้งหมด"</string>
@@ -160,10 +164,10 @@
     <string name="primary_photo" msgid="8517942231868516999">"รูปภาพหลัก"</string>
     <string name="description_star" msgid="2605854427360036550">"รายการโปรด"</string>
     <string name="edit_contact" msgid="7529281274005689512">"แก้ไขรายชื่อติดต่อ"</string>
-  <plurals name="merge_info">
-    <item quantity="one" msgid="148365587896371969">"ไม่รวม"</item>
-    <item quantity="other" msgid="425683718017380845">"รวมจากแหล่งที่มา <xliff:g id="COUNT">%0$d</xliff:g> แหล่ง"</item>
-  </plurals>
+    <plurals name="merge_info" formatted="false" msgid="2489323424994280962">
+      <item quantity="other">รวมจาก <xliff:g id="COUNT">%0$d</xliff:g> แหล่งที่มา</item>
+      <item quantity="one">ไม่ได้รวม</item>
+    </plurals>
     <string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"รวมรายชื่อติดต่อปัจจุบันกับรายชื่อติดต่อที่เลือกหรือไม่"</string>
     <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"เปลี่ยนไปแก้ไขรายชื่อติดต่อที่เลือกหรือไม่ ข้อมูลที่คุณป้อนไว้จนถึงขณะนี้จะถูกคัดลอก"</string>
     <string name="menu_copyContact" msgid="1573960845106822639">"คัดลอกไปยังสมุดโทรศัพท์ของฉัน"</string>
@@ -172,7 +176,7 @@
     <string name="list_filter_custom" msgid="8910173055702057002">"กำหนดเอง"</string>
     <string name="activity_title_settings" msgid="5464130076132770781">"การตั้งค่า"</string>
     <string name="menu_settings" msgid="377929915873428211">"การตั้งค่า"</string>
-    <string name="menu_help" msgid="5123887102216637725">"ความช่วยเหลือ"</string>
+    <string name="menu_help" msgid="1680178646764069976">"ความช่วยเหลือและความคิดเห็น"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"ตัวเลือกการแสดงผล"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="non_phone_caption" msgid="1541655052330027380">"หมายเลขโทรศัพท์"</string>
@@ -188,19 +192,19 @@
     <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"นำเข้าสมุดโทรศัพท์"</string>
     <string name="create_group_dialog_title" msgid="6874527142828424475">"สร้างกลุ่มใหม่"</string>
     <string name="create_group_item_label" msgid="4411981763169654825">"สร้างกลุ่มใหม่"</string>
-  <plurals name="num_groups_in_account">
-    <item quantity="one" msgid="2944819210288517794">"1 กลุ่ม"</item>
-    <item quantity="other" msgid="1276758425904917367">"<xliff:g id="COUNT">%0$d</xliff:g> กลุ่ม"</item>
-  </plurals>
+    <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
+      <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> กลุ่ม</item>
+      <item quantity="one">1 กลุ่ม</item>
+    </plurals>
     <string name="delete_group_dialog_message" msgid="7586856514337560529">"ลบกลุ่ม \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\" หรือไม่ (รายชื่อติดต่อจะไม่ถูกลบ)"</string>
-  <plurals name="num_contacts_in_group">
-    <item quantity="one" msgid="1352418549951013448">"<xliff:g id="COUNT_0">%1$d</xliff:g> คนจาก <xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>"</item>
-    <item quantity="other" msgid="8146027769011086349">"<xliff:g id="COUNT_0">%1$d</xliff:g> คนจาก <xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>"</item>
-  </plurals>
-  <plurals name="group_list_num_contacts_in_group">
-    <item quantity="one" msgid="3323065321661972446">"<xliff:g id="COUNT">%1$d</xliff:g> คน"</item>
-    <item quantity="other" msgid="6251996206137048525">"<xliff:g id="COUNT">%1$d</xliff:g> คน"</item>
-  </plurals>
+    <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> คนจาก <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> คนจาก <xliff:g id="ACCOUNT_TYPE_1">%2$s</xliff:g></item>
+    </plurals>
+    <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
+      <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> คน</item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> คน</item>
+    </plurals>
     <string name="toast_join_with_empty_contact" msgid="2238581529864542985">"พิมพ์ชื่อของผู้ติดต่อก่อนนำไปรวมกับรายชื่อติดต่ออื่น"</string>
     <string name="copy_text" msgid="3257145021583508761">"คัดลอกไปยังคลิปบอร์ด"</string>
     <string name="set_default" msgid="4417505153468300351">"ตั้งเป็นค่าเริ่มต้น"</string>
@@ -264,4 +268,5 @@
     <string name="content_description_recent_call" msgid="5183800406316723676">"โทรล่าสุด <xliff:g id="CALL_TYPE">%s</xliff:g> <xliff:g id="PHONE_NUMBER">%s</xliff:g> <xliff:g id="DATE">%s</xliff:g> คลิกเพื่อโทรกลับ"</string>
     <string name="message_from_you_prefix" msgid="7180706529908434482">"คุณ: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
     <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"แฮงเอาท์ทำงานได้ดียิ่งขึ้นเมื่อคุณป้อนตัวระบุแฮงเอาท์ของบุคคลที่ต้องการลงในช่องอีเมลหรือช่องโทรศัพท์"</string>
+    <string name="compact_editor_more_fields" msgid="2874181192382284115">"ช่องเพิ่มเติม"</string>
 </resources>
diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml
index 7f5af50..8e2dd70 100644
--- a/res/values-tl/strings.xml
+++ b/res/values-tl/strings.xml
@@ -46,6 +46,7 @@
     <string name="description_action_menu_add_star" msgid="3327186327234177456">"Idinagdag sa mga paborito"</string>
     <string name="menu_editContact" msgid="9042415603857662633">"I-edit"</string>
     <string name="menu_deleteContact" msgid="6788644058868189393">"I-delete"</string>
+    <string name="menu_change_photo" msgid="7769177631511496210">"Palitan ang larawan"</string>
     <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Ilagay sa Home screen"</string>
     <string name="menu_call" msgid="3992595586042260618">"Tawagan ang contact"</string>
     <string name="menu_sendSMS" msgid="5535886767547006515">"Mag-text sa contact"</string>
@@ -56,17 +57,23 @@
     <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Magdagdag ng Pangkat"</string>
     <string name="splitConfirmation_title" msgid="633640935430370530">"Ihiwalay ang contact?"</string>
     <string name="splitConfirmation" msgid="740190210499587175">"Paghihiwa-hiwalayin ang contact na ito patungo sa maramihang contact."</string>
-    <string name="menu_joinAggregate" msgid="5027981918265667970">"Sumali"</string>
+    <string name="menu_joinAggregate" msgid="4050157483569357666">"I-merge"</string>
     <string name="titleJoinContactDataWith" msgid="7684875775798635354">"Sumali sa mga contact"</string>
     <string name="blurbJoinContactDataWith" msgid="8736488417422708236">"Piliin ang contact na gusto mong isama sa/kay <xliff:g id="NAME">%s</xliff:g>:"</string>
     <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Ipakita ang lahat ng mga contact"</string>
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Mga iminumungkahing contact"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Lahat ng mga contact"</string>
-    <string name="contactsJoinedMessage" msgid="7208148163607047389">"Pinagsama ang mga contact"</string>
+    <string name="contactsJoinedMessage" msgid="656936718666768589">"Pinagsama ang mga contact"</string>
+    <string name="contacts_deleted_toast" msgid="286851430992788215">"Na-delete ang mga contact"</string>
     <string name="menu_set_ring_tone" msgid="8728345772068064946">"Itakda ang ringtone"</string>
     <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Lahat ng tawag sa voicemail"</string>
     <string name="readOnlyContactWarning" msgid="7808825687289848259">"Hindi ka makakapagtanggal ng mga contact mula sa mga read-only na account, ngunit maitatago mo ang mga ito sa iyong mga listahan ng mga contact."</string>
     <string name="readOnlyContactDeleteConfirmation" msgid="2137170726670196909">"Naglalaman ang contact na ito ng impormasyon mula sa maramihang account. Itatago ang impormasyon mula sa mga account na read-only sa mga listahan ng iyong mga contact, hindi tatanggalin."</string>
+    <string name="batch_merge_single_contact_warning" msgid="982585201970392110">"Kailangan mo ng kahit dalawang piniling contact upang gumawa ng pag-merge."</string>
+    <string name="batch_merge_confirmation" msgid="8551299480317422420">"Ime-merge sa iisang contact ang mga piniling contact."</string>
+    <string name="batch_delete_confirmation" msgid="2564172328268885394">"Ide-delete ang mga piniling contact."</string>
+    <string name="batch_delete_read_only_contact_confirmation" msgid="6614878716815412523">"Itatago sa iyong mga listahan ng contact ang impormasyon mula sa mga read-only na account, hindi ide-delete."</string>
+    <string name="batch_delete_multiple_accounts_confirmation" msgid="5189722181586680185">"Naglalaman ng impormasyon mula sa maraming account ang mga contact na ito. Itatago sa iyong mga listahan ng contact ang impormasyon mula sa mga read-only na account, hindi ide-delete."</string>
     <string name="multipleContactDeleteConfirmation" msgid="938900978442960800">"Tatanggalin ng pagtanggal sa account na ito ang impormasyon mula sa maramihang account."</string>
     <string name="deleteConfirmation" msgid="811706994761610640">"Tatanggalin ang contact na ito."</string>
     <string name="menu_discard" msgid="6854657936970228164">"I-discard ang mga pagbabago"</string>
@@ -94,20 +101,20 @@
     <string name="contactSavedErrorToast" msgid="3207250533172944892">"Hindi ma-save ang mga pagbabago sa contact."</string>
     <string name="groupSavedToast" msgid="1168756874239833756">"Na-save ang pangkat."</string>
     <string name="groupSavedErrorToast" msgid="7984466936615304740">"Hindi ma-save ang mga pagbabago sa pangkat."</string>
-  <plurals name="listTotalPhoneContacts">
-    <item quantity="one" msgid="3015357862286673986">"1 contact na may numero ng telepono"</item>
-    <item quantity="other" msgid="3299954047880968205">"<xliff:g id="COUNT">%d</xliff:g> (na) contact na may mga numero ng telepono"</item>
-  </plurals>
+    <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>
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> na contact na may mga numero ng telepono</item>
+    </plurals>
     <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"Walang mga contact na may mga numero ng telepono"</string>
-  <plurals name="listFoundAllContacts">
-    <item quantity="one" msgid="5517063038754171134">"1 ang nakita"</item>
-    <item quantity="other" msgid="3852668542926965042">"<xliff:g id="COUNT">%d</xliff:g> ang nakita"</item>
-  </plurals>
+    <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
+      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> ang nahanap</item>
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ang nahanap</item>
+    </plurals>
     <string name="listFoundAllContactsZero" msgid="922980883593159444">"Walang mga contact"</string>
-  <plurals name="searchFoundContacts">
-    <item quantity="one" msgid="4826918429708286628">"1 ang nakita"</item>
-    <item quantity="other" msgid="7988132539476575389">"<xliff:g id="COUNT">%d</xliff:g> ang nakita"</item>
-  </plurals>
+    <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
+      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> ang nahanap</item>
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ang nahanap</item>
+    </plurals>
     <string name="all_contacts_tab_label" msgid="6250372293594147703">"Lahat ng Contact"</string>
     <string name="favorites_tab_label" msgid="1524869648904016414">"Mga Paborito"</string>
     <string name="callBack" msgid="5498224409038809224">"Tumawag pabalik"</string>
@@ -144,9 +151,6 @@
     <string name="pick_new_photo" msgid="9122450996263688237">"Pumili ng bagong larawan"</string>
     <string name="locale_change_in_progress" msgid="7583992153091537467">"Ina-update ang listahan ng contact upang maipakita ang pagbabago ng wika."</string>
     <string name="upgrade_in_progress" msgid="474511436863451061">"Ina-update ang listahan ng contact."</string>
-    <string name="upgrade_out_of_memory" msgid="1209994418877625940">"Nasa proseso ng pag-upgrade ang mga contact. \n\nNangangailangan ng tinatayang <xliff:g id="SIZE_IN_MEGABYTES">%s</xliff:g> MB ng panloob na storage ang proseso ng pag-upgrade.\n\nPumili ng isa sa mga sumusunod na pagpipilian:"</string>
-    <string name="upgrade_out_of_memory_uninstall" msgid="1721798828992091432">"I-uninstall ang ilang application"</string>
-    <string name="upgrade_out_of_memory_retry" msgid="8431289830472724609">"Muling subukan ang i-upgrade"</string>
     <string name="search_results_searching" msgid="3984833028938569930">"Naghahanap…"</string>
     <string name="menu_display_selected" msgid="6470001164297969034">"Ipakita ang napili"</string>
     <string name="menu_display_all" msgid="8887488642609786198">"Ipakita lahat"</string>
@@ -160,10 +164,10 @@
     <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>
-  <plurals name="merge_info">
-    <item quantity="one" msgid="148365587896371969">"hindi pinagsama"</item>
-    <item quantity="other" msgid="425683718017380845">"pinagsama mula sa <xliff:g id="COUNT">%0$d</xliff:g> (na) pinagmumulan"</item>
-  </plurals>
+    <plurals name="merge_info" formatted="false" msgid="2489323424994280962">
+      <item quantity="one">pinagsama mula sa <xliff:g id="COUNT">%0$d</xliff:g> pinagmulan</item>
+      <item quantity="other">pinagsama mula sa <xliff:g id="COUNT">%0$d</xliff:g> na pinagmulan</item>
+    </plurals>
     <string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"Isama ang kasalukuyang contact sa piniling contact?"</string>
     <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Lumipat sa pag-edit ng napiling contact? Kokopyahin ang impormasyong ipinasok mo sa ngayon."</string>
     <string name="menu_copyContact" msgid="1573960845106822639">"Kopyahin sa Aking Mga Contact"</string>
@@ -172,7 +176,7 @@
     <string name="list_filter_custom" msgid="8910173055702057002">"Custom"</string>
     <string name="activity_title_settings" msgid="5464130076132770781">"Mga Setting"</string>
     <string name="menu_settings" msgid="377929915873428211">"Mga Setting"</string>
-    <string name="menu_help" msgid="5123887102216637725">"Tulong"</string>
+    <string name="menu_help" msgid="1680178646764069976">"Tulong at feedback"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"Mga pagpipilian sa pagpapakita"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="non_phone_caption" msgid="1541655052330027380">"Numero ng telepono"</string>
@@ -188,19 +192,19 @@
     <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Mag-import ng mga contact"</string>
     <string name="create_group_dialog_title" msgid="6874527142828424475">"Lumikha ng bagong pangkat"</string>
     <string name="create_group_item_label" msgid="4411981763169654825">"Lumikha ng bagong pangkat"</string>
-  <plurals name="num_groups_in_account">
-    <item quantity="one" msgid="2944819210288517794">"1 pangkat"</item>
-    <item quantity="other" msgid="1276758425904917367">"<xliff:g id="COUNT">%0$d</xliff:g> (na) pangkat"</item>
-  </plurals>
+    <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
+      <item quantity="one"><xliff:g id="COUNT">%0$d</xliff:g> pangkat</item>
+      <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> na pangkat</item>
+    </plurals>
     <string name="delete_group_dialog_message" msgid="7586856514337560529">"Tanggalin ang pangkat na \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\"? (Hindi tatanggalin ang mismong mga contact.)"</string>
-  <plurals name="num_contacts_in_group">
-    <item quantity="one" msgid="1352418549951013448">"<xliff:g id="COUNT_0">%1$d</xliff:g> (na) tao mula sa <xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>"</item>
-    <item quantity="other" msgid="8146027769011086349">"<xliff:g id="COUNT_0">%1$d</xliff:g> (na) tao mula sa <xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>"</item>
-  </plurals>
-  <plurals name="group_list_num_contacts_in_group">
-    <item quantity="one" msgid="3323065321661972446">"<xliff:g id="COUNT">%1$d</xliff:g> (na) tao"</item>
-    <item quantity="other" msgid="6251996206137048525">"<xliff:g id="COUNT">%1$d</xliff:g> (na) tao"</item>
-  </plurals>
+    <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
+      <item quantity="one"><xliff:g id="COUNT_2">%1$d</xliff:g> tao mula sa <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> na tao mula sa <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
+    </plurals>
+    <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
+      <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> tao</item>
+      <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> na tao</item>
+    </plurals>
     <string name="toast_join_with_empty_contact" msgid="2238581529864542985">"I-type ang pangalan ng contact bago isama sa isa pa."</string>
     <string name="copy_text" msgid="3257145021583508761">"Kopyahin sa clipboard"</string>
     <string name="set_default" msgid="4417505153468300351">"Itakda ang default"</string>
@@ -264,4 +268,5 @@
     <string name="content_description_recent_call" msgid="5183800406316723676">"kamakailang tawag. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. mag-click upang tumawag"</string>
     <string name="message_from_you_prefix" msgid="7180706529908434482">"Ikaw: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
     <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"Gagana nang mas maayos ang Hangouts kapag inilagay mo ang identifier sa Hangouts ng isang tao sa field ng email o sa field ng telepono."</string>
+    <string name="compact_editor_more_fields" msgid="2874181192382284115">"Higit Pang Mga Field"</string>
 </resources>
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index 9ec99fb..4bdbae5 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -38,7 +38,7 @@
     <string name="insertGroupDescription" msgid="5658512271662210139">"Grup oluştur"</string>
     <string name="contactDetailAbout" msgid="5430408883907061400">"Hakkında"</string>
     <string name="contactDetailUpdates" msgid="3780588624763446941">"Güncellemlr"</string>
-    <string name="searchHint" msgid="8482945356247760701">"Kişileri ara"</string>
+    <string name="searchHint" msgid="8482945356247760701">"Kişilerde ara"</string>
     <string name="menu_viewContact" msgid="2795575601596468581">"Kişiyi görüntüle"</string>
     <string name="menu_addStar" msgid="2908478235715404876">"Sık kullanılanlara ekle"</string>
     <string name="menu_removeStar" msgid="5844227078364227030">"Sık kullanılanlardan kaldır"</string>
@@ -46,6 +46,7 @@
     <string name="description_action_menu_add_star" msgid="3327186327234177456">"Favorilere eklendi"</string>
     <string name="menu_editContact" msgid="9042415603857662633">"Düzenle"</string>
     <string name="menu_deleteContact" msgid="6788644058868189393">"Sil"</string>
+    <string name="menu_change_photo" msgid="7769177631511496210">"Fotoğrafı değiştir"</string>
     <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Ana ekrana yerleştir"</string>
     <string name="menu_call" msgid="3992595586042260618">"Çağrı yap"</string>
     <string name="menu_sendSMS" msgid="5535886767547006515">"Kısa mesaj gönder"</string>
@@ -56,17 +57,23 @@
     <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Grup Ekle"</string>
     <string name="splitConfirmation_title" msgid="633640935430370530">"Kişi ayrılsın mı?"</string>
     <string name="splitConfirmation" msgid="740190210499587175">"Kişi birden çok kişiye ayrılacak."</string>
-    <string name="menu_joinAggregate" msgid="5027981918265667970">"Birleştir"</string>
+    <string name="menu_joinAggregate" msgid="4050157483569357666">"Birleştir"</string>
     <string name="titleJoinContactDataWith" msgid="7684875775798635354">"Kişileri birleştir"</string>
     <string name="blurbJoinContactDataWith" msgid="8736488417422708236">"<xliff:g id="NAME">%s</xliff:g> ile birleştirmek istediğiniz kişiyi seçin:"</string>
     <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Tüm kişileri göster"</string>
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Önerilen kişiler"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Tüm kişiler"</string>
-    <string name="contactsJoinedMessage" msgid="7208148163607047389">"Kişiler birleştirildi"</string>
+    <string name="contactsJoinedMessage" msgid="656936718666768589">"Kişiler birleştirildi"</string>
+    <string name="contacts_deleted_toast" msgid="286851430992788215">"Kişiler silindi"</string>
     <string name="menu_set_ring_tone" msgid="8728345772068064946">"Zil sesi ayarla"</string>
-    <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Sesli mesaja gelen tüm çağrlr"</string>
+    <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Tüm çağrıları sesli mesaja"</string>
     <string name="readOnlyContactWarning" msgid="7808825687289848259">"Kişileri salt okunur hesaplardan silemezsiniz, ancak bu kişileri kişiler listenizde gizleyebilirsiniz."</string>
     <string name="readOnlyContactDeleteConfirmation" msgid="2137170726670196909">"Bu kişi birden fazla hesaptan bilgiler içeriyor. Salt okunur hesaplardaki bilgiler silinmez, kişiler listelerinizde gizlenir."</string>
+    <string name="batch_merge_single_contact_warning" msgid="982585201970392110">"Birleştirme işlemi için en az iki kişi seçmeniz gerekir."</string>
+    <string name="batch_merge_confirmation" msgid="8551299480317422420">"Seçili kişiler tek bir kişi olarak birleştirilecek."</string>
+    <string name="batch_delete_confirmation" msgid="2564172328268885394">"Seçili kişiler silinecek."</string>
+    <string name="batch_delete_read_only_contact_confirmation" msgid="6614878716815412523">"Salt okunur hesaplara ait bilgiler kişi listelerinizde silinmeyecek, gizlenecektir."</string>
+    <string name="batch_delete_multiple_accounts_confirmation" msgid="5189722181586680185">"Bu kişiler birden fazla hesaba ait bilgi içeriyor. Salt okunur hesaplara ait bilgiler kişi listelerinizde silinmeyecek, gizlenecektir."</string>
     <string name="multipleContactDeleteConfirmation" msgid="938900978442960800">"Bu kişiyi silmek, birden fazla hesaba ait bilgileri de siler."</string>
     <string name="deleteConfirmation" msgid="811706994761610640">"Bu kişi silinecek."</string>
     <string name="menu_discard" msgid="6854657936970228164">"Değişiklikleri sil"</string>
@@ -94,20 +101,20 @@
     <string name="contactSavedErrorToast" msgid="3207250533172944892">"Kişi değişiklikleri kaydedilemedi."</string>
     <string name="groupSavedToast" msgid="1168756874239833756">"Grup kaydedildi."</string>
     <string name="groupSavedErrorToast" msgid="7984466936615304740">"Grup değişiklikleri kaydedilemedi."</string>
-  <plurals name="listTotalPhoneContacts">
-    <item quantity="one" msgid="3015357862286673986">"Telefon numarası olan 1 kişi"</item>
-    <item quantity="other" msgid="3299954047880968205">"Telefon numarası olan <xliff:g id="COUNT">%d</xliff:g> kişi"</item>
-  </plurals>
+    <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
+      <item quantity="other">Telefon numarası olan <xliff:g id="COUNT">%d</xliff:g> kişi</item>
+      <item quantity="one">Telefon numarası olan 1 kişi</item>
+    </plurals>
     <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"Telefon numarası olan hiçbir kişi yok"</string>
-  <plurals name="listFoundAllContacts">
-    <item quantity="one" msgid="5517063038754171134">"1 kişi bulundu"</item>
-    <item quantity="other" msgid="3852668542926965042">"<xliff:g id="COUNT">%d</xliff:g> kişi bulundu"</item>
-  </plurals>
+    <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> kişi bulundu</item>
+      <item quantity="one">1 kişi bulundu</item>
+    </plurals>
     <string name="listFoundAllContactsZero" msgid="922980883593159444">"Hiç kişi yok"</string>
-  <plurals name="searchFoundContacts">
-    <item quantity="one" msgid="4826918429708286628">"1 kişi bulundu"</item>
-    <item quantity="other" msgid="7988132539476575389">"<xliff:g id="COUNT">%d</xliff:g> kişi bulundu"</item>
-  </plurals>
+    <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> kişi bulundu</item>
+      <item quantity="one">1 kişi bulundu</item>
+    </plurals>
     <string name="all_contacts_tab_label" msgid="6250372293594147703">"Tüm kişiler"</string>
     <string name="favorites_tab_label" msgid="1524869648904016414">"Favoriler"</string>
     <string name="callBack" msgid="5498224409038809224">"Geri ara"</string>
@@ -125,7 +132,7 @@
     <string name="missing_app" msgid="1466111003546611387">"Bu işlemi gerçekleştirecek uygulama bulunamadı."</string>
     <string name="menu_share" msgid="943789700636542260">"Paylaş"</string>
     <string name="menu_add_contact" msgid="3198704337220892684">"Kişilere ekle"</string>
-    <string name="share_via" msgid="563121028023030093">"Şunu kullanarak kişi paylaş:"</string>
+    <string name="share_via" msgid="563121028023030093">"Kişiyi şunu kullanarak paylaş:"</string>
     <string name="dialog_new_group_account" msgid="2318032089273496830">"Grubu şu hesabın altında oluştur:"</string>
     <string name="audio_chat" msgid="2535716629358298691">"Sesli sohbet"</string>
     <string name="video_chat" msgid="1872255818640336072">"Görüntülü sohbet"</string>
@@ -144,9 +151,6 @@
     <string name="pick_new_photo" msgid="9122450996263688237">"Yeni fotoğraf seç"</string>
     <string name="locale_change_in_progress" msgid="7583992153091537467">"Kişi listesi, dil değişikliğini yansıtmak üzere güncelleniyor."</string>
     <string name="upgrade_in_progress" msgid="474511436863451061">"Kişi listesi güncelleniyor."</string>
-    <string name="upgrade_out_of_memory" msgid="1209994418877625940">"Kişiler yeni sürüme geçiriliyor. \n\nYeni sürüme geçirme işlemi yaklaşık <xliff:g id="SIZE_IN_MEGABYTES">%s</xliff:g> MB dahili depolama alanı gerektirir.\n\nAşağıdaki seçeneklerden birini belirleyin:"</string>
-    <string name="upgrade_out_of_memory_uninstall" msgid="1721798828992091432">"Bazı uygulamaları kaldırın"</string>
-    <string name="upgrade_out_of_memory_retry" msgid="8431289830472724609">"Yeni sürüme geçmeyi tekrar dene"</string>
     <string name="search_results_searching" msgid="3984833028938569930">"Aranıyor…"</string>
     <string name="menu_display_selected" msgid="6470001164297969034">"Seçileni göster"</string>
     <string name="menu_display_all" msgid="8887488642609786198">"Tümünü göster"</string>
@@ -160,10 +164,10 @@
     <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>
-  <plurals name="merge_info">
-    <item quantity="one" msgid="148365587896371969">"birleştirilmemiş"</item>
-    <item quantity="other" msgid="425683718017380845">"<xliff:g id="COUNT">%0$d</xliff:g> kaynaktan birleştirildi"</item>
-  </plurals>
+    <plurals name="merge_info" formatted="false" msgid="2489323424994280962">
+      <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> kaynaktan birleştirilmiş</item>
+      <item quantity="one">birleştirilmemiş</item>
+    </plurals>
     <string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"Mevcut kişi, seçili kişiyle birleştirilsin mi?"</string>
     <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Seçili kişiyi düzenlemeye geçilsin mi? Şimdiye kadar girdiğiniz bilgiler kopyalanacak."</string>
     <string name="menu_copyContact" msgid="1573960845106822639">"Kişilerime kopyala"</string>
@@ -172,7 +176,7 @@
     <string name="list_filter_custom" msgid="8910173055702057002">"Özel"</string>
     <string name="activity_title_settings" msgid="5464130076132770781">"Ayarlar"</string>
     <string name="menu_settings" msgid="377929915873428211">"Ayarlar"</string>
-    <string name="menu_help" msgid="5123887102216637725">"Yardım"</string>
+    <string name="menu_help" msgid="1680178646764069976">"Yardım ve geri bildirim"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"Görüntüleme seçenekleri"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="non_phone_caption" msgid="1541655052330027380">"Telefon numarası"</string>
@@ -188,19 +192,19 @@
     <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Kişileri içe aktar"</string>
     <string name="create_group_dialog_title" msgid="6874527142828424475">"Yeni grup oluştur"</string>
     <string name="create_group_item_label" msgid="4411981763169654825">"Yeni grup oluştur"</string>
-  <plurals name="num_groups_in_account">
-    <item quantity="one" msgid="2944819210288517794">"1 grup"</item>
-    <item quantity="other" msgid="1276758425904917367">"<xliff:g id="COUNT">%0$d</xliff:g> grup"</item>
-  </plurals>
+    <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
+      <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> grup</item>
+      <item quantity="one">1 grup</item>
+    </plurals>
     <string name="delete_group_dialog_message" msgid="7586856514337560529">"\"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\" grubu silinsin mi? (Kişilerin kendileri silinmeyecektir.)"</string>
-  <plurals name="num_contacts_in_group">
-    <item quantity="one" msgid="1352418549951013448">"<xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g> türünde <xliff:g id="COUNT_0">%1$d</xliff:g> kişi"</item>
-    <item quantity="other" msgid="8146027769011086349">"<xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g> türünde <xliff:g id="COUNT_0">%1$d</xliff:g> kişi"</item>
-  </plurals>
-  <plurals name="group_list_num_contacts_in_group">
-    <item quantity="one" msgid="3323065321661972446">"<xliff:g id="COUNT">%1$d</xliff:g> kişi"</item>
-    <item quantity="other" msgid="6251996206137048525">"<xliff:g id="COUNT">%1$d</xliff:g> kullanıcı"</item>
-  </plurals>
+    <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
+      <item quantity="other"><xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g> türünde <xliff:g id="COUNT_2">%1$d</xliff:g> kişi</item>
+      <item quantity="one"><xliff:g id="ACCOUNT_TYPE_1">%2$s</xliff:g> türünde <xliff:g id="COUNT_0">%1$d</xliff:g> kişi</item>
+    </plurals>
+    <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
+      <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> kişi</item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> kişi</item>
+    </plurals>
     <string name="toast_join_with_empty_contact" msgid="2238581529864542985">"Başka bir kişiyle birleştirmeden önce kişi adını yazın."</string>
     <string name="copy_text" msgid="3257145021583508761">"Panoya kopyala"</string>
     <string name="set_default" msgid="4417505153468300351">"Varsayılan olarak ayarla"</string>
@@ -264,4 +268,5 @@
     <string name="content_description_recent_call" msgid="5183800406316723676">"son gelen çağrı. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. geri aramak için dokunun"</string>
     <string name="message_from_you_prefix" msgid="7180706529908434482">"Siz: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
     <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"Kişinin Hangouts tanımlayıcısını e-posta veya telefon alanına girdiğinizde Hangouts daha iyi çalışır."</string>
+    <string name="compact_editor_more_fields" msgid="2874181192382284115">"Diğer Alanlar"</string>
 </resources>
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
index e0b322f..3f0a3f3 100644
--- a/res/values-uk/strings.xml
+++ b/res/values-uk/strings.xml
@@ -46,6 +46,7 @@
     <string name="description_action_menu_add_star" msgid="3327186327234177456">"Додано до вибраного"</string>
     <string name="menu_editContact" msgid="9042415603857662633">"Редагувати"</string>
     <string name="menu_deleteContact" msgid="6788644058868189393">"Видалити"</string>
+    <string name="menu_change_photo" msgid="7769177631511496210">"Змінити фото"</string>
     <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Місце на головному екрані"</string>
     <string name="menu_call" msgid="3992595586042260618">"Набрати конт."</string>
     <string name="menu_sendSMS" msgid="5535886767547006515">"Повід. контакт"</string>
@@ -56,17 +57,23 @@
     <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Додати групу"</string>
     <string name="splitConfirmation_title" msgid="633640935430370530">"Розділити контакт?"</string>
     <string name="splitConfirmation" msgid="740190210499587175">"Цей контакт буде розділено на декілька контактів."</string>
-    <string name="menu_joinAggregate" msgid="5027981918265667970">"Об’єднати"</string>
+    <string name="menu_joinAggregate" msgid="4050157483569357666">"Об’єднати"</string>
     <string name="titleJoinContactDataWith" msgid="7684875775798635354">"Об\'єдн. контакти"</string>
     <string name="blurbJoinContactDataWith" msgid="8736488417422708236">"Виберіть контакт, який треба об’єднати з <xliff:g id="NAME">%s</xliff:g>:"</string>
     <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Показ. всі контакти"</string>
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Пропоновані контакти"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Усі контакти"</string>
-    <string name="contactsJoinedMessage" msgid="7208148163607047389">"Контакти об\'єднано"</string>
+    <string name="contactsJoinedMessage" msgid="656936718666768589">"Контакти об’єднано"</string>
+    <string name="contacts_deleted_toast" msgid="286851430992788215">"Контакти видалено"</string>
     <string name="menu_set_ring_tone" msgid="8728345772068064946">"Мелодія"</string>
     <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Усі виклики на голосову пошту"</string>
     <string name="readOnlyContactWarning" msgid="7808825687289848259">"Неможливо видалити контакти з облікових записів \"лише для читання\", але можна сховати їх у списках контактів."</string>
     <string name="readOnlyContactDeleteConfirmation" msgid="2137170726670196909">"Цей контакт містить інфор-цію з декількох обл. записів. Інф-цію із записів лише для читання буде сховано у ваших списках контактів, а не видалено."</string>
+    <string name="batch_merge_single_contact_warning" msgid="982585201970392110">"Виберіть принаймні два контакта, щоб об’єднати їх."</string>
+    <string name="batch_merge_confirmation" msgid="8551299480317422420">"Вибрані контакти буде об’єднано в один."</string>
+    <string name="batch_delete_confirmation" msgid="2564172328268885394">"Вибрані контакти буде видалено."</string>
+    <string name="batch_delete_read_only_contact_confirmation" msgid="6614878716815412523">"Дані з облікових записів лише для перегляду буде приховано у ваших списках контактів, а не видалено."</string>
+    <string name="batch_delete_multiple_accounts_confirmation" msgid="5189722181586680185">"Ці контакти містять дані з декількох облікових записів. Дані з облікових записів лише для перегляду буде приховано у ваших списках контактів, а не видалено."</string>
     <string name="multipleContactDeleteConfirmation" msgid="938900978442960800">"Якщо видал. цей контакт, буде видалено інф-ю з декількох обл. записів."</string>
     <string name="deleteConfirmation" msgid="811706994761610640">"Цей контакт буде видалено."</string>
     <string name="menu_discard" msgid="6854657936970228164">"Відхилити зміни"</string>
@@ -94,20 +101,26 @@
     <string name="contactSavedErrorToast" msgid="3207250533172944892">"Не вдалося зберегти зміни в контакті."</string>
     <string name="groupSavedToast" msgid="1168756874239833756">"Групу збережено."</string>
     <string name="groupSavedErrorToast" msgid="7984466936615304740">"Не вдалося зберегти зміни в групі."</string>
-  <plurals name="listTotalPhoneContacts">
-    <item quantity="one" msgid="3015357862286673986">"1 контакт із номером телефону"</item>
-    <item quantity="other" msgid="3299954047880968205">"Контактів із номерами тел.: <xliff:g id="COUNT">%d</xliff:g>"</item>
-  </plurals>
+    <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>
+      <item quantity="many"><xliff:g id="COUNT">%d</xliff:g> контактів із номерами телефону</item>
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> контакта з номерами телефону</item>
+    </plurals>
     <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"Немає контактів з номерами телефону"</string>
-  <plurals name="listFoundAllContacts">
-    <item quantity="one" msgid="5517063038754171134">"Знайдено 1"</item>
-    <item quantity="other" msgid="3852668542926965042">"Знайдено <xliff:g id="COUNT">%d</xliff:g>"</item>
-  </plurals>
+    <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
+      <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>
     <string name="listFoundAllContactsZero" msgid="922980883593159444">"Контактів немає"</string>
-  <plurals name="searchFoundContacts">
-    <item quantity="one" msgid="4826918429708286628">"Знайдено 1"</item>
-    <item quantity="other" msgid="7988132539476575389">"Знайдено <xliff:g id="COUNT">%d</xliff:g>"</item>
-  </plurals>
+    <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
+      <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>
     <string name="all_contacts_tab_label" msgid="6250372293594147703">"Усі контакти"</string>
     <string name="favorites_tab_label" msgid="1524869648904016414">"Вибране"</string>
     <string name="callBack" msgid="5498224409038809224">"Передзвонити"</string>
@@ -144,9 +157,6 @@
     <string name="pick_new_photo" msgid="9122450996263688237">"Вибрати нове фото"</string>
     <string name="locale_change_in_progress" msgid="7583992153091537467">"Список контактів оновлено для відображення зміни мови."</string>
     <string name="upgrade_in_progress" msgid="474511436863451061">"Список контактів оновлюється."</string>
-    <string name="upgrade_out_of_memory" msgid="1209994418877625940">"Контакти проходять процес оновлення. \n\nДля процесу оновлення потрібно приблизно <xliff:g id="SIZE_IN_MEGABYTES">%s</xliff:g> Мб внутрішньої пам’яті.\n\nВиберіть один із поданих нижче варіантів."</string>
-    <string name="upgrade_out_of_memory_uninstall" msgid="1721798828992091432">"Видалити деякі програми"</string>
-    <string name="upgrade_out_of_memory_retry" msgid="8431289830472724609">"Повтор. оновл."</string>
     <string name="search_results_searching" msgid="3984833028938569930">"Пошук..."</string>
     <string name="menu_display_selected" msgid="6470001164297969034">"Показати вибране"</string>
     <string name="menu_display_all" msgid="8887488642609786198">"Показати все"</string>
@@ -160,10 +170,12 @@
     <string name="primary_photo" msgid="8517942231868516999">"Основн. фото"</string>
     <string name="description_star" msgid="2605854427360036550">"вибране"</string>
     <string name="edit_contact" msgid="7529281274005689512">"Редаг. контакта"</string>
-  <plurals name="merge_info">
-    <item quantity="one" msgid="148365587896371969">"не об\'єднано"</item>
-    <item quantity="other" msgid="425683718017380845">"об\'єднано з джерел: <xliff:g id="COUNT">%0$d</xliff:g>"</item>
-  </plurals>
+    <plurals name="merge_info" formatted="false" msgid="2489323424994280962">
+      <item quantity="one">об’єднано з <xliff:g id="COUNT">%0$d</xliff:g> джерела</item>
+      <item quantity="few">об’єднано з <xliff:g id="COUNT">%0$d</xliff:g> джерел</item>
+      <item quantity="many">об’єднано з <xliff:g id="COUNT">%0$d</xliff:g> джерел</item>
+      <item quantity="other">об’єднано з <xliff:g id="COUNT">%0$d</xliff:g> джерела</item>
+    </plurals>
     <string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"Об\'єднати поточний контакт із вибраним контактом?"</string>
     <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Перейти до редагування вибраного контакта? Введену досі інформацію буде скопійовано."</string>
     <string name="menu_copyContact" msgid="1573960845106822639">"Копіювати в мої контакти"</string>
@@ -172,7 +184,7 @@
     <string name="list_filter_custom" msgid="8910173055702057002">"Спеціальні"</string>
     <string name="activity_title_settings" msgid="5464130076132770781">"Налаштування"</string>
     <string name="menu_settings" msgid="377929915873428211">"Налаштування"</string>
-    <string name="menu_help" msgid="5123887102216637725">"Довідка"</string>
+    <string name="menu_help" msgid="1680178646764069976">"Довідка й відгуки"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"Параметри відображення"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="non_phone_caption" msgid="1541655052330027380">"Номер телефону"</string>
@@ -188,19 +200,25 @@
     <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Імпортувати контакти"</string>
     <string name="create_group_dialog_title" msgid="6874527142828424475">"Створити нову групу"</string>
     <string name="create_group_item_label" msgid="4411981763169654825">"Створити нову групу"</string>
-  <plurals name="num_groups_in_account">
-    <item quantity="one" msgid="2944819210288517794">"1 група"</item>
-    <item quantity="other" msgid="1276758425904917367">"Груп: <xliff:g id="COUNT">%0$d</xliff:g>"</item>
-  </plurals>
+    <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
+      <item quantity="one"><xliff:g id="COUNT">%0$d</xliff:g> група</item>
+      <item quantity="few"><xliff:g id="COUNT">%0$d</xliff:g> групи</item>
+      <item quantity="many"><xliff:g id="COUNT">%0$d</xliff:g> груп</item>
+      <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> групи</item>
+    </plurals>
     <string name="delete_group_dialog_message" msgid="7586856514337560529">"Видалити групу \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\"? (Самі контакти не буде видалено)."</string>
-  <plurals name="num_contacts_in_group">
-    <item quantity="one" msgid="1352418549951013448">"<xliff:g id="COUNT_0">%1$d</xliff:g> особа з <xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>"</item>
-    <item quantity="other" msgid="8146027769011086349">"У групі <xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g> <xliff:g id="COUNT_0">%1$d</xliff:g> чол."</item>
-  </plurals>
-  <plurals name="group_list_num_contacts_in_group">
-    <item quantity="one" msgid="3323065321661972446">"<xliff:g id="COUNT">%1$d</xliff:g> особа"</item>
-    <item quantity="other" msgid="6251996206137048525">"Людей: <xliff:g id="COUNT">%1$d</xliff:g>"</item>
-  </plurals>
+    <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
+      <item quantity="one"><xliff:g id="COUNT_2">%1$d</xliff:g> особа з <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
+      <item quantity="few"><xliff:g id="COUNT_2">%1$d</xliff:g> особи з <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
+      <item quantity="many"><xliff:g id="COUNT_2">%1$d</xliff:g> осіб із <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> особи з <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
+    </plurals>
+    <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
+      <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> особа</item>
+      <item quantity="few"><xliff:g id="COUNT_1">%1$d</xliff:g> особи</item>
+      <item quantity="many"><xliff:g id="COUNT_1">%1$d</xliff:g> осіб</item>
+      <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> особи</item>
+    </plurals>
     <string name="toast_join_with_empty_contact" msgid="2238581529864542985">"Введіть ім’я контакта, перш ніж об’єднати його з іншим."</string>
     <string name="copy_text" msgid="3257145021583508761">"Копіювати в буфер обміну"</string>
     <string name="set_default" msgid="4417505153468300351">"Установити за умовчанням"</string>
@@ -264,4 +282,5 @@
     <string name="content_description_recent_call" msgid="5183800406316723676">"Останній дзвінок: <xliff:g id="CALL_TYPE">%s</xliff:g>, <xliff:g id="PHONE_NUMBER">%s</xliff:g>, <xliff:g id="DATE">%s</xliff:g>. Натисніть, щоб зателефонувати"</string>
     <string name="message_from_you_prefix" msgid="7180706529908434482">"Ви: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
     <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"Щоб сервіс Hangouts працював краще, введіть свій ідентифікатор Hangouts у поле \"Електронна адреса\" або \"Телефон\"."</string>
+    <string name="compact_editor_more_fields" msgid="2874181192382284115">"Більше полів"</string>
 </resources>
diff --git a/res/values-ur-rPK/strings.xml b/res/values-ur-rPK/strings.xml
index 20aec6a..a1f0d5d 100644
--- a/res/values-ur-rPK/strings.xml
+++ b/res/values-ur-rPK/strings.xml
@@ -46,6 +46,7 @@
     <string name="description_action_menu_add_star" msgid="3327186327234177456">"پسندیدہ میں شامل کر دیا گیا"</string>
     <string name="menu_editContact" msgid="9042415603857662633">"ترمیم کریں"</string>
     <string name="menu_deleteContact" msgid="6788644058868189393">"حذف کریں"</string>
+    <string name="menu_change_photo" msgid="7769177631511496210">"تصویر بدلیں"</string>
     <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"ہوم اسکرین پر رکھیں"</string>
     <string name="menu_call" msgid="3992595586042260618">"رابطہ کو کال کریں"</string>
     <string name="menu_sendSMS" msgid="5535886767547006515">"رابطہ کو متن بھیجیں"</string>
@@ -56,17 +57,23 @@
     <string name="menu_new_group_action_bar" msgid="3520232877587377175">"گروپ شامل کریں"</string>
     <string name="splitConfirmation_title" msgid="633640935430370530">"رابطہ الگ کریں؟"</string>
     <string name="splitConfirmation" msgid="740190210499587175">"یہ رابطہ متعدد رابطوں میں الگ کیا جائے گا۔"</string>
-    <string name="menu_joinAggregate" msgid="5027981918265667970">"ملائیں"</string>
+    <string name="menu_joinAggregate" msgid="4050157483569357666">"ضم کریں"</string>
     <string name="titleJoinContactDataWith" msgid="7684875775798635354">"رابطوں کو ملائیں"</string>
     <string name="blurbJoinContactDataWith" msgid="8736488417422708236">"<xliff:g id="NAME">%s</xliff:g> کے ساتھ جس رابطہ کو ملانا ہے اسے منتخب کریں:"</string>
     <string name="showAllContactsJoinItem" msgid="2189695051430392383">"سبھی رابطے دکھائیں"</string>
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"مجوزہ رابطے"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"سبھی رابطے"</string>
-    <string name="contactsJoinedMessage" msgid="7208148163607047389">"رابطے ملا دیے گئے"</string>
+    <string name="contactsJoinedMessage" msgid="656936718666768589">"رابطے ضم کر دیے گئے"</string>
+    <string name="contacts_deleted_toast" msgid="286851430992788215">"رابطے حذف کر دیے گئے"</string>
     <string name="menu_set_ring_tone" msgid="8728345772068064946">"رنگ ٹون طے کریں"</string>
     <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"صوتی میل پر سبھی کالیں"</string>
     <string name="readOnlyContactWarning" msgid="7808825687289848259">"آپ صرف پڑھنے کے اکاؤنٹس سے رابطوں کو حذف نہیں کر سکتے ہیں لیکن آپ اپنے رابطوں کی فہرست میں انہیں چھپا سکتے ہیں۔"</string>
     <string name="readOnlyContactDeleteConfirmation" msgid="2137170726670196909">"یہ رابطہ متعدد اکاؤنٹس کی معلومات پر مشتمل ہے۔ صرف پڑھنے کے اکاؤنٹس کی معلومات آپ کے رابطوں کی فہرست میں چھپا دی جائیں گی، حذف نہیں ہوں گی۔"</string>
+    <string name="batch_merge_single_contact_warning" msgid="982585201970392110">"ضم کرنے کیلئے آپ کو کم از کم دو رابطے منتخب کرنے کی ضرورت ہے۔"</string>
+    <string name="batch_merge_confirmation" msgid="8551299480317422420">"منتخب کردہ رابطوں کو ایک رابطہ میں ضم کر دیا جائے گا۔"</string>
+    <string name="batch_delete_confirmation" msgid="2564172328268885394">"منتخب کردہ رابطے حذف کر دیے جائیں گے۔"</string>
+    <string name="batch_delete_read_only_contact_confirmation" msgid="6614878716815412523">"صرف پڑھنے کیلئے اکاؤنٹس کی معلومات آپ کے رابطوں کی فہرست میں چھپا دی جائیں گی، حذف نہیں ہوں گی۔"</string>
+    <string name="batch_delete_multiple_accounts_confirmation" msgid="5189722181586680185">"یہ رابطے متعدد اکاؤنٹس کی معلومات پر مشتمل ہیں۔ صرف پڑھنے کیلئے اکاؤنٹس کی معلومات آپ کے رابطوں کی فہرست میں چھپا دی جائیں گی، حذف نہیں ہوں گی۔"</string>
     <string name="multipleContactDeleteConfirmation" msgid="938900978442960800">"یہ رابطہ حذف کرنے سے متعدد اکاؤنٹس کی معلومات حذف ہوجائے گی۔"</string>
     <string name="deleteConfirmation" msgid="811706994761610640">"یہ رابطہ حذف ہوجائے گا۔"</string>
     <string name="menu_discard" msgid="6854657936970228164">"تبدیلیاں رد کریں"</string>
@@ -94,20 +101,20 @@
     <string name="contactSavedErrorToast" msgid="3207250533172944892">"رابطہ میں تبدیلیاں محفوظ نہیں ہوسکیں۔"</string>
     <string name="groupSavedToast" msgid="1168756874239833756">"گروپ محفوظ ہوگیا۔"</string>
     <string name="groupSavedErrorToast" msgid="7984466936615304740">"گروپ میں تبدیلیوں کو محفوظ نہیں کرسکا۔"</string>
-  <plurals name="listTotalPhoneContacts">
-    <item quantity="one" msgid="3015357862286673986">"فون نمبر کے ساتھ 1 رابطہ"</item>
-    <item quantity="other" msgid="3299954047880968205">"فون نمبروں کے ساتھ <xliff:g id="COUNT">%d</xliff:g> رابطے"</item>
-  </plurals>
+    <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
+      <item quantity="other">فون نمبرز کے ساتھ <xliff:g id="COUNT">%d</xliff:g> رابطے</item>
+      <item quantity="one">فون نمبر کے ساتھ 1 رابطہ</item>
+    </plurals>
     <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"فون نمبروں کے ساتھ کوئی رابطے نہیں ہیں"</string>
-  <plurals name="listFoundAllContacts">
-    <item quantity="one" msgid="5517063038754171134">"1 ملا"</item>
-    <item quantity="other" msgid="3852668542926965042">"<xliff:g id="COUNT">%d</xliff:g> ملے"</item>
-  </plurals>
+    <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ملے</item>
+      <item quantity="one">1 ملا</item>
+    </plurals>
     <string name="listFoundAllContactsZero" msgid="922980883593159444">"کوئی رابطے نہیں ہیں"</string>
-  <plurals name="searchFoundContacts">
-    <item quantity="one" msgid="4826918429708286628">"1 ملا"</item>
-    <item quantity="other" msgid="7988132539476575389">"<xliff:g id="COUNT">%d</xliff:g> ملے"</item>
-  </plurals>
+    <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ملے</item>
+      <item quantity="one">1 ملا</item>
+    </plurals>
     <string name="all_contacts_tab_label" msgid="6250372293594147703">"سبھی رابطے"</string>
     <string name="favorites_tab_label" msgid="1524869648904016414">"پسندیدہ"</string>
     <string name="callBack" msgid="5498224409038809224">"واپس کال کریں"</string>
@@ -144,9 +151,6 @@
     <string name="pick_new_photo" msgid="9122450996263688237">"نئی تصویر منتخب کریں"</string>
     <string name="locale_change_in_progress" msgid="7583992153091537467">"زبان کی تبدیلی کی عکاسی کرنے کیلئے رابطہ کی فہرست اپ ڈیٹ کی جا رہی ہے۔"</string>
     <string name="upgrade_in_progress" msgid="474511436863451061">"رابطہ کی فہرست اپ ڈیٹ ہو رہی ہے۔"</string>
-    <string name="upgrade_out_of_memory" msgid="1209994418877625940">"‏رابطوں کو اپ گریڈ کرنے کی کارروائی ہو رہی ہے۔ \n\nاپ گریڈ کی کارروائی کیلئے تقریبا <xliff:g id="SIZE_IN_MEGABYTES">%s</xliff:g> MB داخلی اسٹوریج درکار ہے۔\n\nدرج ذیل اختیارات میں سے ایک منتخب کریں۔"</string>
-    <string name="upgrade_out_of_memory_uninstall" msgid="1721798828992091432">"کچھ ایپلیکیشنز ان انسٹال کریں"</string>
-    <string name="upgrade_out_of_memory_retry" msgid="8431289830472724609">"اپ گریڈ کرنے کی دوبارہ کوشش کریں"</string>
     <string name="search_results_searching" msgid="3984833028938569930">"تلاش کر رہا ہے…"</string>
     <string name="menu_display_selected" msgid="6470001164297969034">"منتخب کردہ کو دکھائیں"</string>
     <string name="menu_display_all" msgid="8887488642609786198">"سبھی دکھائیں"</string>
@@ -160,10 +164,10 @@
     <string name="primary_photo" msgid="8517942231868516999">"بنیادی تصویر"</string>
     <string name="description_star" msgid="2605854427360036550">"پسندیدہ"</string>
     <string name="edit_contact" msgid="7529281274005689512">"رابطہ میں ترمیم کریں"</string>
-  <plurals name="merge_info">
-    <item quantity="one" msgid="148365587896371969">"ضم نہیں ہے"</item>
-    <item quantity="other" msgid="425683718017380845">"<xliff:g id="COUNT">%0$d</xliff:g> مآخذ سے ضم کیا گیا"</item>
-  </plurals>
+    <plurals name="merge_info" formatted="false" msgid="2489323424994280962">
+      <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> مآخذ سے ضم کر دیا گیا</item>
+      <item quantity="one">ضم نہیں ہے</item>
+    </plurals>
     <string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"موجودہ رابطہ کو منتخب کردہ رابطہ کے ساتھ ملائیں؟"</string>
     <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"منتخب کردہ رابطہ میں ترمیم کرنے کیلئے سوئچ کریں؟ اب تک آپ کی درج کردہ معلومات کاپی ہوجائے گی۔"</string>
     <string name="menu_copyContact" msgid="1573960845106822639">"میرے رابطے میں کاپی کریں"</string>
@@ -172,7 +176,7 @@
     <string name="list_filter_custom" msgid="8910173055702057002">"حسب ضرورت"</string>
     <string name="activity_title_settings" msgid="5464130076132770781">"ترتیبات"</string>
     <string name="menu_settings" msgid="377929915873428211">"ترتیبات"</string>
-    <string name="menu_help" msgid="5123887102216637725">"مدد"</string>
+    <string name="menu_help" msgid="1680178646764069976">"مدد اور تاثرات"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"ڈسپلے کے اختیارات"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>، <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="non_phone_caption" msgid="1541655052330027380">"فون نمبر"</string>
@@ -188,19 +192,19 @@
     <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"رابطے درآمد کریں"</string>
     <string name="create_group_dialog_title" msgid="6874527142828424475">"نیا گروپ بنائیں"</string>
     <string name="create_group_item_label" msgid="4411981763169654825">"نیا گروپ بنائیں"</string>
-  <plurals name="num_groups_in_account">
-    <item quantity="one" msgid="2944819210288517794">"1 گروپ"</item>
-    <item quantity="other" msgid="1276758425904917367">"<xliff:g id="COUNT">%0$d</xliff:g> گروپس"</item>
-  </plurals>
+    <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
+      <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> گروپس</item>
+      <item quantity="one">1 گروپ</item>
+    </plurals>
     <string name="delete_group_dialog_message" msgid="7586856514337560529">"گروپ \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\" کو حذف کریں؟ (رابطے بذات خود حذف نہیں ہوں گے۔)"</string>
-  <plurals name="num_contacts_in_group">
-    <item quantity="one" msgid="1352418549951013448">"<xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g> سے <xliff:g id="COUNT_0">%1$d</xliff:g> شخص"</item>
-    <item quantity="other" msgid="8146027769011086349">"<xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g> سے <xliff:g id="COUNT_0">%1$d</xliff:g> لوگ"</item>
-  </plurals>
-  <plurals name="group_list_num_contacts_in_group">
-    <item quantity="one" msgid="3323065321661972446">"<xliff:g id="COUNT">%1$d</xliff:g> شخص"</item>
-    <item quantity="other" msgid="6251996206137048525">"<xliff:g id="COUNT">%1$d</xliff:g> لوگ"</item>
-  </plurals>
+    <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
+      <item quantity="other"><xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g> میں سے <xliff:g id="COUNT_2">%1$d</xliff:g> لوگ</item>
+      <item quantity="one"><xliff:g id="ACCOUNT_TYPE_1">%2$s</xliff:g> میں سے <xliff:g id="COUNT_0">%1$d</xliff:g> شخص</item>
+    </plurals>
+    <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
+      <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> لوگ</item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> شخص</item>
+    </plurals>
     <string name="toast_join_with_empty_contact" msgid="2238581529864542985">"دوسرے کے ساتھ ملانے سے پہلے رابطہ کا نام ٹائپ کریں۔"</string>
     <string name="copy_text" msgid="3257145021583508761">"کلپ بورڈ میں کاپی کریں"</string>
     <string name="set_default" msgid="4417505153468300351">"ڈیفالٹ طے کریں"</string>
@@ -264,4 +268,5 @@
     <string name="content_description_recent_call" msgid="5183800406316723676">"حالیہ کال۔ <xliff:g id="CALL_TYPE">%s</xliff:g>۔ <xliff:g id="PHONE_NUMBER">%s</xliff:g>۔ <xliff:g id="DATE">%s</xliff:g>۔ واپسی کال کرنے کیلئے کلک کریں"</string>
     <string name="message_from_you_prefix" msgid="7180706529908434482">"آپ: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
     <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"‏جب آپ کسی شخص کا Hangouts شناخت کنندہ ای میل فیلڈ یا فون فیلڈ میں داخل کرتے ہیں تو Hangouts بہتر کام کرتا ہے۔"</string>
+    <string name="compact_editor_more_fields" msgid="2874181192382284115">"مزید فیلڈز"</string>
 </resources>
diff --git a/res/values-uz-rUZ/strings.xml b/res/values-uz-rUZ/strings.xml
index ba01574..0711c17 100644
--- a/res/values-uz-rUZ/strings.xml
+++ b/res/values-uz-rUZ/strings.xml
@@ -46,6 +46,7 @@
     <string name="description_action_menu_add_star" msgid="3327186327234177456">"Sevimlilarga qo‘shildi"</string>
     <string name="menu_editContact" msgid="9042415603857662633">"Tahrirlash"</string>
     <string name="menu_deleteContact" msgid="6788644058868189393">"O‘chirish"</string>
+    <string name="menu_change_photo" msgid="7769177631511496210">"Rasmni o‘zgartirish"</string>
     <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Uy ekraniga joylashtirish"</string>
     <string name="menu_call" msgid="3992595586042260618">"Kontaktga qo‘ng‘iroq qilish"</string>
     <string name="menu_sendSMS" msgid="5535886767547006515">"Kontaktga xabar jo‘natish"</string>
@@ -56,17 +57,23 @@
     <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Guruh qo‘shish"</string>
     <string name="splitConfirmation_title" msgid="633640935430370530">"Kontakt ajratilsinmi?"</string>
     <string name="splitConfirmation" msgid="740190210499587175">"Ushbu kontakt bir nechta kontaktlarga ajratiladi."</string>
-    <string name="menu_joinAggregate" msgid="5027981918265667970">"Qo‘shish"</string>
+    <string name="menu_joinAggregate" msgid="4050157483569357666">"Birlashtirish"</string>
     <string name="titleJoinContactDataWith" msgid="7684875775798635354">"Kontaktlarni birlashtirish"</string>
     <string name="blurbJoinContactDataWith" msgid="8736488417422708236">"<xliff:g id="NAME">%s</xliff:g>ga qo‘shishni xohlagan kontaktingizni tanlang:"</string>
     <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Barcha kontaktlarni ko‘rsatish"</string>
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Tavsiya qilingan kontaktlar"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Barcha kontaktlar"</string>
-    <string name="contactsJoinedMessage" msgid="7208148163607047389">"Kontaktlar birlashtirildi"</string>
+    <string name="contactsJoinedMessage" msgid="656936718666768589">"Kontaktlar birlashtirildi"</string>
+    <string name="contacts_deleted_toast" msgid="286851430992788215">"Kontaktlar o\'chirildi"</string>
     <string name="menu_set_ring_tone" msgid="8728345772068064946">"Qo‘ng‘iroq ohangini o‘rnatish"</string>
     <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Barcha qo‘n-lar ovozli xabarga"</string>
     <string name="readOnlyContactWarning" msgid="7808825687289848259">"Faqat o‘qishga ruxsat etilgan hisoblar kontaktlarini o‘chira olmaysiz, ammo ularni kontaktlaringiz ro‘yxatida ko‘rinmaydigan qila olasiz."</string>
     <string name="readOnlyContactDeleteConfirmation" msgid="2137170726670196909">"Ushbu kontaktda bir nechta hisoblardan ma’lumotlar jamlangan. Faqat o‘qishga ruxsat etilgan hisoblar ma’lumoti kontaktlar ro‘yxatingizda ko‘rinmay qoladi, lekin o‘chirilmaydi."</string>
+    <string name="batch_merge_single_contact_warning" msgid="982585201970392110">"Birlashtirish uchun kamida ikkita kontaktni tanlash lozim."</string>
+    <string name="batch_merge_confirmation" msgid="8551299480317422420">"Tanlangan kontaktlar yagona kontaktga birlashtiriladi."</string>
+    <string name="batch_delete_confirmation" msgid="2564172328268885394">"Tanlangan kontaktlar o‘chirib tashlanadi."</string>
+    <string name="batch_delete_read_only_contact_confirmation" msgid="6614878716815412523">"Faqat o‘qish rejimidagi hisoblardan olingan ma’lumotlar kontaktlaringiz ro‘yxatida ko‘rsatilmaydi, lekin o‘chirib tashlanmaydi."</string>
+    <string name="batch_delete_multiple_accounts_confirmation" msgid="5189722181586680185">"Ushbu kontaktlarda bir nechta hisobga aloqador ma’lumotlar mavjud. Faqat o‘qish rejimidagi hisoblardan olingan ma’lumotlar kontaktlaringiz ro‘yxatida ko‘rsatilmaydi, lekin o‘chirib tashlanmaydi."</string>
     <string name="multipleContactDeleteConfirmation" msgid="938900978442960800">"Ushbu kontaktni o‘chirish bir nechta hisoblardagi ma’lumotlarni o‘chiradi."</string>
     <string name="deleteConfirmation" msgid="811706994761610640">"Ushbu kontakt o‘chiriladi."</string>
     <string name="menu_discard" msgid="6854657936970228164">"O‘zgarishlarni bekor qilish"</string>
@@ -94,20 +101,20 @@
     <string name="contactSavedErrorToast" msgid="3207250533172944892">"Kontakt o‘zgarishlari saqlanmadi."</string>
     <string name="groupSavedToast" msgid="1168756874239833756">"Guruh saqlandi."</string>
     <string name="groupSavedErrorToast" msgid="7984466936615304740">"Guruh o‘zgarishlarini saqlab bo‘lmadi."</string>
-  <plurals name="listTotalPhoneContacts">
-    <item quantity="one" msgid="3015357862286673986">"1 ta kontakt telefon raqami bilan"</item>
-    <item quantity="other" msgid="3299954047880968205">"<xliff:g id="COUNT">%d</xliff:g> ta kontakt telefon raqamlari bilan"</item>
-  </plurals>
+    <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
+      <item quantity="other">Telefon raqami bor <xliff:g id="COUNT">%d</xliff:g> ta kontakt</item>
+      <item quantity="one">Telefon raqami bor 1 ta kontakt</item>
+    </plurals>
     <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"Telefon raqamlari bor kontaktlar yo‘q"</string>
-  <plurals name="listFoundAllContacts">
-    <item quantity="one" msgid="5517063038754171134">"1 ta topildi"</item>
-    <item quantity="other" msgid="3852668542926965042">"<xliff:g id="COUNT">%d</xliff:g> ta topildi"</item>
-  </plurals>
+    <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ta topildi</item>
+      <item quantity="one">1 ta topildi</item>
+    </plurals>
     <string name="listFoundAllContactsZero" msgid="922980883593159444">"Kontaktlar yo‘q"</string>
-  <plurals name="searchFoundContacts">
-    <item quantity="one" msgid="4826918429708286628">"1 ta topildi"</item>
-    <item quantity="other" msgid="7988132539476575389">"<xliff:g id="COUNT">%d</xliff:g> ta topildi"</item>
-  </plurals>
+    <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ta topildi</item>
+      <item quantity="one">1 ta topildi</item>
+    </plurals>
     <string name="all_contacts_tab_label" msgid="6250372293594147703">"Barcha kontaktlar"</string>
     <string name="favorites_tab_label" msgid="1524869648904016414">"Sevimlilar"</string>
     <string name="callBack" msgid="5498224409038809224">"Teskari qo‘ng‘iroq"</string>
@@ -144,9 +151,6 @@
     <string name="pick_new_photo" msgid="9122450996263688237">"Yangi suratni tanlang"</string>
     <string name="locale_change_in_progress" msgid="7583992153091537467">"Til o‘zgarishlarini aks ettirish uchun kontakt ro‘yxati yangilanmoqda."</string>
     <string name="upgrade_in_progress" msgid="474511436863451061">"Kontakt ro‘yxati yangilanmoqda."</string>
-    <string name="upgrade_out_of_memory" msgid="1209994418877625940">"Kontaktlarni yangilash jarayoni boshlangan. \n\nYangilash jarayoni taxminan <xliff:g id="SIZE_IN_MEGABYTES">%s</xliff:g> MB ichki xotiradan joy talab qiladi.\n\nQuyidagilardan birini tanlang:"</string>
-    <string name="upgrade_out_of_memory_uninstall" msgid="1721798828992091432">"Bir nechta ilovalarni o‘chiring"</string>
-    <string name="upgrade_out_of_memory_retry" msgid="8431289830472724609">"Yangilash uchun yana urinib ko‘ring"</string>
     <string name="search_results_searching" msgid="3984833028938569930">"Qidirmoqda…"</string>
     <string name="menu_display_selected" msgid="6470001164297969034">"Tanlanganni ko‘rsatish"</string>
     <string name="menu_display_all" msgid="8887488642609786198">"Barchasini ko‘rsatish"</string>
@@ -160,10 +164,10 @@
     <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>
-  <plurals name="merge_info">
-    <item quantity="one" msgid="148365587896371969">"birlashtirilmagan"</item>
-    <item quantity="other" msgid="425683718017380845">"<xliff:g id="COUNT">%0$d</xliff:g> ta manbadan birlashtirilgan"</item>
-  </plurals>
+    <plurals name="merge_info" formatted="false" msgid="2489323424994280962">
+      <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> ta manbadan birlashtirilgan</item>
+      <item quantity="one">birlashtirilmagan</item>
+    </plurals>
     <string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"Joriy kontakt tanlangan kontaktga qo‘shilsinmi?"</string>
     <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Tanlangan kontaktni tahrir qilishga o‘tilsinmi? Hozirgacha kiritgan ma’lumotlaringizdan nusxa ko‘chiriladi."</string>
     <string name="menu_copyContact" msgid="1573960845106822639">"Kontaktlarimga nusxa ko‘chirish"</string>
@@ -172,7 +176,7 @@
     <string name="list_filter_custom" msgid="8910173055702057002">"Boshqa"</string>
     <string name="activity_title_settings" msgid="5464130076132770781">"Sozlamalar"</string>
     <string name="menu_settings" msgid="377929915873428211">"Sozlamalar"</string>
-    <string name="menu_help" msgid="5123887102216637725">"Yordam"</string>
+    <string name="menu_help" msgid="1680178646764069976">"Yordam va fikr-mulohaza"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"Ko‘rsatish sozlamalari"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="non_phone_caption" msgid="1541655052330027380">"Telefon raqami"</string>
@@ -188,19 +192,19 @@
     <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Kontaktlarni import qilish"</string>
     <string name="create_group_dialog_title" msgid="6874527142828424475">"Yangi guruh yaratish"</string>
     <string name="create_group_item_label" msgid="4411981763169654825">"Yangi guruh yaratish"</string>
-  <plurals name="num_groups_in_account">
-    <item quantity="one" msgid="2944819210288517794">"1 ta guruh"</item>
-    <item quantity="other" msgid="1276758425904917367">"<xliff:g id="COUNT">%0$d</xliff:g> ta guruh"</item>
-  </plurals>
+    <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
+      <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> ta guruh</item>
+      <item quantity="one">1 ta guruh</item>
+    </plurals>
     <string name="delete_group_dialog_message" msgid="7586856514337560529">"\"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\" guruhi o‘chirilsinmi? (Kontaktlarning o‘zi o‘chirilmaydi.)"</string>
-  <plurals name="num_contacts_in_group">
-    <item quantity="one" msgid="1352418549951013448">"<xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>dan <xliff:g id="COUNT_0">%1$d</xliff:g> ta odam"</item>
-    <item quantity="other" msgid="8146027769011086349">"<xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>dan <xliff:g id="COUNT_0">%1$d</xliff:g> ta odam"</item>
-  </plurals>
-  <plurals name="group_list_num_contacts_in_group">
-    <item quantity="one" msgid="3323065321661972446">"<xliff:g id="COUNT">%1$d</xliff:g> ta odam"</item>
-    <item quantity="other" msgid="6251996206137048525">"<xliff:g id="COUNT">%1$d</xliff:g> ta odam"</item>
-  </plurals>
+    <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
+      <item quantity="other"><xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g> guruhidan <xliff:g id="COUNT_2">%1$d</xliff:g> ta odam</item>
+      <item quantity="one"><xliff:g id="ACCOUNT_TYPE_1">%2$s</xliff:g> guruhidan <xliff:g id="COUNT_0">%1$d</xliff:g> ta odam</item>
+    </plurals>
+    <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
+      <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> ta odam</item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> ta odam</item>
+    </plurals>
     <string name="toast_join_with_empty_contact" msgid="2238581529864542985">"Boshqasiga qo‘shishdan oldin kontakt nomini yozing."</string>
     <string name="copy_text" msgid="3257145021583508761">"Vaqtinchalik xotiraga nusxa ko‘chirish"</string>
     <string name="set_default" msgid="4417505153468300351">"Standart sifatida o‘rnatish"</string>
@@ -264,4 +268,5 @@
     <string name="content_description_recent_call" msgid="5183800406316723676">"so‘nggi qo‘ng‘iroq. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. qaytarib qo‘ng‘iroq qilish uchun bosing"</string>
     <string name="message_from_you_prefix" msgid="7180706529908434482">"Siz: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
     <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"Hangouts yanada yaxshi ishlashi uchun e-pochta yoki telefon raqami maydoniga foydalanuvchining Hangouts identifikatorini kiriting."</string>
+    <string name="compact_editor_more_fields" msgid="2874181192382284115">"Boshqa maydonlar"</string>
 </resources>
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
index 8219ad2..81e3f35 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -46,6 +46,7 @@
     <string name="description_action_menu_add_star" msgid="3327186327234177456">"Đã thêm vào mục ưa thích"</string>
     <string name="menu_editContact" msgid="9042415603857662633">"Chỉnh sửa"</string>
     <string name="menu_deleteContact" msgid="6788644058868189393">"Xóa"</string>
+    <string name="menu_change_photo" msgid="7769177631511496210">"Thay đổi ảnh"</string>
     <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Đặt trên màn hình chính"</string>
     <string name="menu_call" msgid="3992595586042260618">"Gọi liên hệ"</string>
     <string name="menu_sendSMS" msgid="5535886767547006515">"Nhắn tin tới liên hệ"</string>
@@ -56,17 +57,23 @@
     <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Thêm nhóm"</string>
     <string name="splitConfirmation_title" msgid="633640935430370530">"Tách địa chỉ liên hệ?"</string>
     <string name="splitConfirmation" msgid="740190210499587175">"Địa chỉ liên hệ này sẽ được tách thành nhiều địa chỉ liên hệ."</string>
-    <string name="menu_joinAggregate" msgid="5027981918265667970">"Kết hợp"</string>
+    <string name="menu_joinAggregate" msgid="4050157483569357666">"Hợp nhất"</string>
     <string name="titleJoinContactDataWith" msgid="7684875775798635354">"Kết hợp danh bạ"</string>
     <string name="blurbJoinContactDataWith" msgid="8736488417422708236">"Chọn địa chỉ liên hệ bạn muốn kết hợp với <xliff:g id="NAME">%s</xliff:g>:"</string>
     <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Hiển thị tất cả liên hệ"</string>
     <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="7208148163607047389">"Danh bạ đã được kết hợp"</string>
+    <string name="contactsJoinedMessage" msgid="656936718666768589">"Đã hợp nhất các địa chỉ liên hệ"</string>
+    <string name="contacts_deleted_toast" msgid="286851430992788215">"Đã xóa các địa chỉ liên hệ"</string>
     <string name="menu_set_ring_tone" msgid="8728345772068064946">"Đặt nhạc chuông"</string>
     <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Các cuộc gọi tới thư thoại"</string>
     <string name="readOnlyContactWarning" msgid="7808825687289848259">"Bạn không thể xóa địa chỉ liên hệ từ tài khoản chỉ đọc, nhưng bạn có thể ẩn chúng trong danh sách địa chỉ liên hệ của mình."</string>
     <string name="readOnlyContactDeleteConfirmation" msgid="2137170726670196909">"Liên hệ này chứa thông tin từ nhiều tài khoản. Thông tin từ các tài khoản ở chế độ chỉ đọc sẽ bị ẩn trong danh sách liên hệ của bạn, chứ không bị xóa."</string>
+    <string name="batch_merge_single_contact_warning" msgid="982585201970392110">"Bạn cần chọn ít nhất hai liên hệ để thực hiện hợp nhất."</string>
+    <string name="batch_merge_confirmation" msgid="8551299480317422420">"Liên hệ được chọn sẽ được hợp nhất vào một liên hệ."</string>
+    <string name="batch_delete_confirmation" msgid="2564172328268885394">"Liên hệ được chọn sẽ bị xóa."</string>
+    <string name="batch_delete_read_only_contact_confirmation" msgid="6614878716815412523">"Thông tin từ các tài khoản ở chế độ chỉ đọc sẽ bị ẩn trong danh sách liên hệ của bạn, chứ không bị xóa."</string>
+    <string name="batch_delete_multiple_accounts_confirmation" msgid="5189722181586680185">"Các liên hệ này chứa thông tin từ nhiều tài khoản. Thông tin từ các tài khoản ở chế độ chỉ đọc sẽ bị ẩn trong danh sách liên hệ của bạn, chứ không bị xóa."</string>
     <string name="multipleContactDeleteConfirmation" msgid="938900978442960800">"Xóa liên hệ này sẽ xóa thông tin khỏi nhiều tài khoản."</string>
     <string name="deleteConfirmation" msgid="811706994761610640">"Liên hệ này sẽ bị xóa."</string>
     <string name="menu_discard" msgid="6854657936970228164">"Hủy các thay đổi"</string>
@@ -94,20 +101,20 @@
     <string name="contactSavedErrorToast" msgid="3207250533172944892">"Không thể lưu thay đổi của địa chỉ liên hệ."</string>
     <string name="groupSavedToast" msgid="1168756874239833756">"Đã lưu nhóm."</string>
     <string name="groupSavedErrorToast" msgid="7984466936615304740">"Không thể lưu thay đổi nhóm."</string>
-  <plurals name="listTotalPhoneContacts">
-    <item quantity="one" msgid="3015357862286673986">"1 liên hệ có số điện thoại"</item>
-    <item quantity="other" msgid="3299954047880968205">"<xliff:g id="COUNT">%d</xliff:g> liên hệ có số điện thoại"</item>
-  </plurals>
+    <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>
+      <item quantity="one">1 liên hệ có số điện thoại</item>
+    </plurals>
     <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"Không có liên hệ nào có số điện thoại"</string>
-  <plurals name="listFoundAllContacts">
-    <item quantity="one" msgid="5517063038754171134">"Đã tìm thấy 1"</item>
-    <item quantity="other" msgid="3852668542926965042">"Đã tìm thấy <xliff:g id="COUNT">%d</xliff:g>"</item>
-  </plurals>
+    <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
+      <item quantity="other">Đã tìm thấy <xliff:g id="COUNT">%d</xliff:g> liên hệ</item>
+      <item quantity="one">Đã tìm thấy 1 liên hệ</item>
+    </plurals>
     <string name="listFoundAllContactsZero" msgid="922980883593159444">"Không có địa chỉ liên hệ nào"</string>
-  <plurals name="searchFoundContacts">
-    <item quantity="one" msgid="4826918429708286628">"Đã tìm thấy 1"</item>
-    <item quantity="other" msgid="7988132539476575389">"Đã tìm thấy <xliff:g id="COUNT">%d</xliff:g>"</item>
-  </plurals>
+    <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
+      <item quantity="other">Đã tìm thấy <xliff:g id="COUNT">%d</xliff:g> liên hệ</item>
+      <item quantity="one">Đã tìm thấy 1 liên hệ</item>
+    </plurals>
     <string name="all_contacts_tab_label" msgid="6250372293594147703">"Tất cả liên hệ"</string>
     <string name="favorites_tab_label" msgid="1524869648904016414">"Mục yêu thích"</string>
     <string name="callBack" msgid="5498224409038809224">"Gọi lại"</string>
@@ -144,9 +151,6 @@
     <string name="pick_new_photo" msgid="9122450996263688237">"Chọn ảnh mới"</string>
     <string name="locale_change_in_progress" msgid="7583992153091537467">"Danh bạ đang được cập nhật để phản ánh sự thay đổi ngôn ngữ."</string>
     <string name="upgrade_in_progress" msgid="474511436863451061">"Danh bạ đang được cập nhật."</string>
-    <string name="upgrade_out_of_memory" msgid="1209994418877625940">"Danh bạ đang được nâng cấp. \n\nQuá trình nâng cấp yêu cầu khoảng <xliff:g id="SIZE_IN_MEGABYTES">%s</xliff:g> MB bộ nhớ trong.\n\nChọn một trong các tùy chọn sau:"</string>
-    <string name="upgrade_out_of_memory_uninstall" msgid="1721798828992091432">"Gỡ cài đặt một số ứng dụng"</string>
-    <string name="upgrade_out_of_memory_retry" msgid="8431289830472724609">"Thử lại nâng cấp"</string>
     <string name="search_results_searching" msgid="3984833028938569930">"Đang tìm kiếm…"</string>
     <string name="menu_display_selected" msgid="6470001164297969034">"Hiển thị mục đã chọn"</string>
     <string name="menu_display_all" msgid="8887488642609786198">"Hiển thị tất cả"</string>
@@ -160,10 +164,10 @@
     <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>
-  <plurals name="merge_info">
-    <item quantity="one" msgid="148365587896371969">"chưa được hợp nhất"</item>
-    <item quantity="other" msgid="425683718017380845">"được hợp nhất từ <xliff:g id="COUNT">%0$d</xliff:g> nguồn"</item>
-  </plurals>
+    <plurals name="merge_info" formatted="false" msgid="2489323424994280962">
+      <item quantity="other">được hợp nhất từ  <xliff:g id="COUNT">%0$d</xliff:g> nguồn</item>
+      <item quantity="one">chưa được hợp nhất</item>
+    </plurals>
     <string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"Kết hợp địa chỉ liên hệ hiện tại với địa chỉ liên hệ đã chọn?"</string>
     <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Chuyển sang chỉnh sửa liên hệ đã chọn? Thông tin bạn đã nhập đến giờ sẽ được sao chép."</string>
     <string name="menu_copyContact" msgid="1573960845106822639">"Sao chép vào Danh bạ của tôi"</string>
@@ -172,7 +176,7 @@
     <string name="list_filter_custom" msgid="8910173055702057002">"Tùy chỉnh"</string>
     <string name="activity_title_settings" msgid="5464130076132770781">"Cài đặt"</string>
     <string name="menu_settings" msgid="377929915873428211">"Cài đặt"</string>
-    <string name="menu_help" msgid="5123887102216637725">"Trợ giúp"</string>
+    <string name="menu_help" msgid="1680178646764069976">"Trợ giúp và phản hồi"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"Tùy chọn hiển thị"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="non_phone_caption" msgid="1541655052330027380">"Số điện thoại"</string>
@@ -188,19 +192,19 @@
     <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Nhập danh bạ"</string>
     <string name="create_group_dialog_title" msgid="6874527142828424475">"Tạo nhóm mới"</string>
     <string name="create_group_item_label" msgid="4411981763169654825">"Tạo nhóm mới"</string>
-  <plurals name="num_groups_in_account">
-    <item quantity="one" msgid="2944819210288517794">"1 nhóm"</item>
-    <item quantity="other" msgid="1276758425904917367">"<xliff:g id="COUNT">%0$d</xliff:g> nhóm"</item>
-  </plurals>
+    <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
+      <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> nhóm</item>
+      <item quantity="one">1 nhóm</item>
+    </plurals>
     <string name="delete_group_dialog_message" msgid="7586856514337560529">"Xóa nhóm \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\"? (Danh bạ sẽ không bị xóa.)"</string>
-  <plurals name="num_contacts_in_group">
-    <item quantity="one" msgid="1352418549951013448">"<xliff:g id="COUNT_0">%1$d</xliff:g> người từ <xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>"</item>
-    <item quantity="other" msgid="8146027769011086349">"<xliff:g id="COUNT_0">%1$d</xliff:g> người từ <xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>"</item>
-  </plurals>
-  <plurals name="group_list_num_contacts_in_group">
-    <item quantity="one" msgid="3323065321661972446">"<xliff:g id="COUNT">%1$d</xliff:g> người"</item>
-    <item quantity="other" msgid="6251996206137048525">"<xliff:g id="COUNT">%1$d</xliff:g> người"</item>
-  </plurals>
+    <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> người từ <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> người từ <xliff:g id="ACCOUNT_TYPE_1">%2$s</xliff:g></item>
+    </plurals>
+    <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
+      <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> người</item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> người</item>
+    </plurals>
     <string name="toast_join_with_empty_contact" msgid="2238581529864542985">"Nhập tên địa chỉ liên hệ trước khi kết hợp với địa chỉ liên hệ khác."</string>
     <string name="copy_text" msgid="3257145021583508761">"Sao chép vào khay nhớ tạm"</string>
     <string name="set_default" msgid="4417505153468300351">"Đặt mặc định"</string>
@@ -264,4 +268,5 @@
     <string name="content_description_recent_call" msgid="5183800406316723676">"cuộc gọi gần đây. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. nhấp để gọi lại"</string>
     <string name="message_from_you_prefix" msgid="7180706529908434482">"Bạn: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
     <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"Hangouts hoạt động tốt hơn khi bạn nhập số nhận dạng Hangouts của người đó vào trường email hoặc trường điện thoại."</string>
+    <string name="compact_editor_more_fields" msgid="2874181192382284115">"Trường khác"</string>
 </resources>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index cdb0388..022fdeb 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -46,6 +46,7 @@
     <string name="description_action_menu_add_star" msgid="3327186327234177456">"已添加到收藏"</string>
     <string name="menu_editContact" msgid="9042415603857662633">"修改"</string>
     <string name="menu_deleteContact" msgid="6788644058868189393">"删除"</string>
+    <string name="menu_change_photo" msgid="7769177631511496210">"更换照片"</string>
     <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"放在主屏幕上"</string>
     <string name="menu_call" msgid="3992595586042260618">"呼叫联系人"</string>
     <string name="menu_sendSMS" msgid="5535886767547006515">"向联系人发送短信"</string>
@@ -56,17 +57,23 @@
     <string name="menu_new_group_action_bar" msgid="3520232877587377175">"添加群组"</string>
     <string name="splitConfirmation_title" msgid="633640935430370530">"要拆分联系人吗?"</string>
     <string name="splitConfirmation" msgid="740190210499587175">"系统会将此联系人拆分成多个联系人。"</string>
-    <string name="menu_joinAggregate" msgid="5027981918265667970">"合并"</string>
+    <string name="menu_joinAggregate" msgid="4050157483569357666">"合并"</string>
     <string name="titleJoinContactDataWith" msgid="7684875775798635354">"合并联系人"</string>
     <string name="blurbJoinContactDataWith" msgid="8736488417422708236">"选择要与<xliff:g id="NAME">%s</xliff:g>合并的联系人:"</string>
     <string name="showAllContactsJoinItem" msgid="2189695051430392383">"显示所有联系人"</string>
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"建议的联系人"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"所有联系人"</string>
-    <string name="contactsJoinedMessage" msgid="7208148163607047389">"已合并联系人"</string>
+    <string name="contactsJoinedMessage" msgid="656936718666768589">"已合并联系人"</string>
+    <string name="contacts_deleted_toast" msgid="286851430992788215">"已删除联系人"</string>
     <string name="menu_set_ring_tone" msgid="8728345772068064946">"设置铃声"</string>
     <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"所有来电转至语音信箱"</string>
     <string name="readOnlyContactWarning" msgid="7808825687289848259">"您无法删除只读帐户中的联系人,但可以在联系人列表中将他们隐藏。"</string>
     <string name="readOnlyContactDeleteConfirmation" msgid="2137170726670196909">"该联系人的信息中包含来自多个帐户的信息。来自只读帐户的信息将在您的联系人列表中隐藏,但不会删除。"</string>
+    <string name="batch_merge_single_contact_warning" msgid="982585201970392110">"您至少需要选择两个联系人才能进行合并。"</string>
+    <string name="batch_merge_confirmation" msgid="8551299480317422420">"所选的联系人将会合并为一个联系人。"</string>
+    <string name="batch_delete_confirmation" msgid="2564172328268885394">"所选的联系人将会被删除。"</string>
+    <string name="batch_delete_read_only_contact_confirmation" msgid="6614878716815412523">"来自只读帐户的信息将在您的联系人列表中隐藏,而不会被删除。"</string>
+    <string name="batch_delete_multiple_accounts_confirmation" msgid="5189722181586680185">"这些联系人的信息中包含来自多个帐户的信息。来自只读帐户的信息将在您的联系人列表中隐藏,而不会被删除。"</string>
     <string name="multipleContactDeleteConfirmation" msgid="938900978442960800">"删除该联系人将会删除多个帐户中的信息。"</string>
     <string name="deleteConfirmation" msgid="811706994761610640">"将会删除此联系人。"</string>
     <string name="menu_discard" msgid="6854657936970228164">"舍弃更改"</string>
@@ -94,20 +101,20 @@
     <string name="contactSavedErrorToast" msgid="3207250533172944892">"无法保存联系人更改。"</string>
     <string name="groupSavedToast" msgid="1168756874239833756">"群组已保存。"</string>
     <string name="groupSavedErrorToast" msgid="7984466936615304740">"无法保存所做的群组更改。"</string>
-  <plurals name="listTotalPhoneContacts">
-    <item quantity="one" msgid="3015357862286673986">"1 位联系人有电话号码"</item>
-    <item quantity="other" msgid="3299954047880968205">"<xliff:g id="COUNT">%d</xliff:g> 位联系人有电话号码"</item>
-  </plurals>
+    <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> 个有电话号码的联系人</item>
+      <item quantity="one">1 个有电话号码的联系人</item>
+    </plurals>
     <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"没有联系人拥有电话号码"</string>
-  <plurals name="listFoundAllContacts">
-    <item quantity="one" msgid="5517063038754171134">"找到 1 个联系人"</item>
-    <item quantity="other" msgid="3852668542926965042">"找到 <xliff:g id="COUNT">%d</xliff:g> 个联系人"</item>
-  </plurals>
+    <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
+      <item quantity="other">找到 <xliff:g id="COUNT">%d</xliff:g> 个联系人</item>
+      <item quantity="one">找到 1 个联系人</item>
+    </plurals>
     <string name="listFoundAllContactsZero" msgid="922980883593159444">"没有联系人"</string>
-  <plurals name="searchFoundContacts">
-    <item quantity="one" msgid="4826918429708286628">"找到 1 个联系人"</item>
-    <item quantity="other" msgid="7988132539476575389">"找到 <xliff:g id="COUNT">%d</xliff:g> 个联系人"</item>
-  </plurals>
+    <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
+      <item quantity="other">找到 <xliff:g id="COUNT">%d</xliff:g> 个联系人</item>
+      <item quantity="one">找到 1 个联系人</item>
+    </plurals>
     <string name="all_contacts_tab_label" msgid="6250372293594147703">"所有联系人"</string>
     <string name="favorites_tab_label" msgid="1524869648904016414">"收藏"</string>
     <string name="callBack" msgid="5498224409038809224">"回电"</string>
@@ -144,9 +151,6 @@
     <string name="pick_new_photo" msgid="9122450996263688237">"选择新照片"</string>
     <string name="locale_change_in_progress" msgid="7583992153091537467">"正在更新联系人列表,以反映语言的变更。"</string>
     <string name="upgrade_in_progress" msgid="474511436863451061">"正在更新联系人列表。"</string>
-    <string name="upgrade_out_of_memory" msgid="1209994418877625940">"正在升级“联系人”。\n\n升级过程大约需要 <xliff:g id="SIZE_IN_MEGABYTES">%s</xliff:g> MB 的内存空间。\n\n请选择以下某个选项:"</string>
-    <string name="upgrade_out_of_memory_uninstall" msgid="1721798828992091432">"卸载一些应用"</string>
-    <string name="upgrade_out_of_memory_retry" msgid="8431289830472724609">"重新尝试升级"</string>
     <string name="search_results_searching" msgid="3984833028938569930">"正在搜索..."</string>
     <string name="menu_display_selected" msgid="6470001164297969034">"已选收件人"</string>
     <string name="menu_display_all" msgid="8887488642609786198">"全部收件人"</string>
@@ -160,10 +164,10 @@
     <string name="primary_photo" msgid="8517942231868516999">"主照片"</string>
     <string name="description_star" msgid="2605854427360036550">"收藏"</string>
     <string name="edit_contact" msgid="7529281274005689512">"编辑联系人"</string>
-  <plurals name="merge_info">
-    <item quantity="one" msgid="148365587896371969">"未合并"</item>
-    <item quantity="other" msgid="425683718017380845">"合并自 <xliff:g id="COUNT">%0$d</xliff:g> 个来源"</item>
-  </plurals>
+    <plurals name="merge_info" formatted="false" msgid="2489323424994280962">
+      <item quantity="other">已合并 <xliff:g id="COUNT">%0$d</xliff:g> 个联系人</item>
+      <item quantity="one">未合并任何联系人</item>
+    </plurals>
     <string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"要合并当前联系人与所选联系人吗?"</string>
     <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"要切换至编辑所选联系人吗?系统会复制您到目前为止输入的所有信息。"</string>
     <string name="menu_copyContact" msgid="1573960845106822639">"复制到“我的联系人”"</string>
@@ -172,7 +176,7 @@
     <string name="list_filter_custom" msgid="8910173055702057002">"自定义"</string>
     <string name="activity_title_settings" msgid="5464130076132770781">"设置"</string>
     <string name="menu_settings" msgid="377929915873428211">"设置"</string>
-    <string name="menu_help" msgid="5123887102216637725">"帮助"</string>
+    <string name="menu_help" msgid="1680178646764069976">"帮助和反馈"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"显示选项"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>,<xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="non_phone_caption" msgid="1541655052330027380">"电话号码"</string>
@@ -188,19 +192,19 @@
     <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"导入联系人"</string>
     <string name="create_group_dialog_title" msgid="6874527142828424475">"创建新群组"</string>
     <string name="create_group_item_label" msgid="4411981763169654825">"创建新群组"</string>
-  <plurals name="num_groups_in_account">
-    <item quantity="one" msgid="2944819210288517794">"1个群组"</item>
-    <item quantity="other" msgid="1276758425904917367">"<xliff:g id="COUNT">%0$d</xliff:g>个群组"</item>
-  </plurals>
+    <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
+      <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> 个群组</item>
+      <item quantity="one">1 个群组</item>
+    </plurals>
     <string name="delete_group_dialog_message" msgid="7586856514337560529">"要删除群组“<xliff:g id="GROUP_LABEL">%1$s</xliff:g>”(并不会删除联系人本身)吗?"</string>
-  <plurals name="num_contacts_in_group">
-    <item quantity="one" msgid="1352418549951013448">"<xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>中有 <xliff:g id="COUNT_0">%1$d</xliff:g> 个联系人"</item>
-    <item quantity="other" msgid="8146027769011086349">"有 <xliff:g id="COUNT_0">%1$d</xliff:g> 人来自<xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>"</item>
-  </plurals>
-  <plurals name="group_list_num_contacts_in_group">
-    <item quantity="one" msgid="3323065321661972446">"<xliff:g id="COUNT">%1$d</xliff:g> 个人"</item>
-    <item quantity="other" msgid="6251996206137048525">"<xliff:g id="COUNT">%1$d</xliff:g> 个人"</item>
-  </plurals>
+    <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
+      <item quantity="other"><xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g>中有 <xliff:g id="COUNT_2">%1$d</xliff:g> 个联系人</item>
+      <item quantity="one"><xliff:g id="ACCOUNT_TYPE_1">%2$s</xliff:g>中有 <xliff:g id="COUNT_0">%1$d</xliff:g> 个联系人</item>
+    </plurals>
+    <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
+      <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> 个联系人</item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> 个联系人</item>
+    </plurals>
     <string name="toast_join_with_empty_contact" msgid="2238581529864542985">"与其他联系人合并,请先键入联系人姓名。"</string>
     <string name="copy_text" msgid="3257145021583508761">"复制到剪贴板"</string>
     <string name="set_default" msgid="4417505153468300351">"设置默认值"</string>
@@ -264,4 +268,5 @@
     <string name="content_description_recent_call" msgid="5183800406316723676">"近期通话:<xliff:g id="CALL_TYPE">%s</xliff:g>,<xliff:g id="PHONE_NUMBER">%s</xliff:g>,<xliff:g id="DATE">%s</xliff:g>。点按可回拨。"</string>
     <string name="message_from_you_prefix" msgid="7180706529908434482">"您:<xliff:g id="SMS_BODY">%s</xliff:g>"</string>
     <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"请将联系人的环聊帐户信息输入到电子邮件地址字段或电话号码字段,以便获得更佳的环聊使用体验。"</string>
+    <string name="compact_editor_more_fields" msgid="2874181192382284115">"更多字段"</string>
 </resources>
diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml
index 5ff4102..0acdf35 100644
--- a/res/values-zh-rHK/strings.xml
+++ b/res/values-zh-rHK/strings.xml
@@ -46,6 +46,7 @@
     <string name="description_action_menu_add_star" msgid="3327186327234177456">"已加到我的最愛"</string>
     <string name="menu_editContact" msgid="9042415603857662633">"編輯"</string>
     <string name="menu_deleteContact" msgid="6788644058868189393">"刪除"</string>
+    <string name="menu_change_photo" msgid="7769177631511496210">"變更相片"</string>
     <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"新增到主畫面上"</string>
     <string name="menu_call" msgid="3992595586042260618">"致電聯絡人"</string>
     <string name="menu_sendSMS" msgid="5535886767547006515">"傳送簡訊至聯絡人"</string>
@@ -56,17 +57,23 @@
     <string name="menu_new_group_action_bar" msgid="3520232877587377175">"新增群組"</string>
     <string name="splitConfirmation_title" msgid="633640935430370530">"要分拆聯絡人記錄嗎?"</string>
     <string name="splitConfirmation" msgid="740190210499587175">"這個聯絡人記錄即將分拆為多個。"</string>
-    <string name="menu_joinAggregate" msgid="5027981918265667970">"加入"</string>
+    <string name="menu_joinAggregate" msgid="4050157483569357666">"合併"</string>
     <string name="titleJoinContactDataWith" msgid="7684875775798635354">"合併聯絡人"</string>
     <string name="blurbJoinContactDataWith" msgid="8736488417422708236">"選擇要與<xliff:g id="NAME">%s</xliff:g>合併的聯絡人:"</string>
     <string name="showAllContactsJoinItem" msgid="2189695051430392383">"顯示所有聯絡人"</string>
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"建議的聯絡人"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"所有聯絡人"</string>
-    <string name="contactsJoinedMessage" msgid="7208148163607047389">"已合併聯絡人"</string>
+    <string name="contactsJoinedMessage" msgid="656936718666768589">"已合併聯絡人"</string>
+    <string name="contacts_deleted_toast" msgid="286851430992788215">"已刪除聯絡人"</string>
     <string name="menu_set_ring_tone" msgid="8728345772068064946">"設定鈴聲"</string>
     <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"所有來電轉到留言信箱"</string>
     <string name="readOnlyContactWarning" msgid="7808825687289848259">"您無法刪除唯讀帳戶的聯絡人,但可在聯絡人名單中隱藏這些聯絡人。"</string>
     <string name="readOnlyContactDeleteConfirmation" msgid="2137170726670196909">"這個聯絡人包含來自多個帳戶的資訊。您的聯絡人清單不會顯示唯讀帳戶的資訊 (這些資訊並不會被刪除)。"</string>
+    <string name="batch_merge_single_contact_warning" msgid="982585201970392110">"您至少需要選取兩個聯絡人才能執行合併。"</string>
+    <string name="batch_merge_confirmation" msgid="8551299480317422420">"已選的聯絡人將會合併為單一聯絡人。"</string>
+    <string name="batch_delete_confirmation" msgid="2564172328268885394">"已選的聯絡人將被刪除。"</string>
+    <string name="batch_delete_read_only_contact_confirmation" msgid="6614878716815412523">"唯讀帳戶的資訊會從您的聯絡人名單隱藏,而不是刪除。"</string>
+    <string name="batch_delete_multiple_accounts_confirmation" msgid="5189722181586680185">"這些聯絡人包含來自多個帳戶的資訊。唯讀帳戶的資訊會從您的聯絡人名單隱藏,而不是刪除。"</string>
     <string name="multipleContactDeleteConfirmation" msgid="938900978442960800">"刪除這個聯絡人將刪除多個帳戶的資訊。"</string>
     <string name="deleteConfirmation" msgid="811706994761610640">"刪除此聯絡人?"</string>
     <string name="menu_discard" msgid="6854657936970228164">"放棄變更"</string>
@@ -94,20 +101,20 @@
     <string name="contactSavedErrorToast" msgid="3207250533172944892">"無法儲存聯絡人變更。"</string>
     <string name="groupSavedToast" msgid="1168756874239833756">"群組已儲存。"</string>
     <string name="groupSavedErrorToast" msgid="7984466936615304740">"無法儲存群組變更。"</string>
-  <plurals name="listTotalPhoneContacts">
-    <item quantity="one" msgid="3015357862286673986">"1 個有電話號碼的聯絡人"</item>
-    <item quantity="other" msgid="3299954047880968205">"<xliff:g id="COUNT">%d</xliff:g> 個有電話號碼的聯絡人"</item>
-  </plurals>
+    <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> 位有電話號碼的聯絡人</item>
+      <item quantity="one">1 位有電話號碼的聯絡人</item>
+    </plurals>
     <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"所有聯絡人資訊都沒有電話號碼"</string>
-  <plurals name="listFoundAllContacts">
-    <item quantity="one" msgid="5517063038754171134">"找到 1 位聯絡人"</item>
-    <item quantity="other" msgid="3852668542926965042">"找到 <xliff:g id="COUNT">%d</xliff:g> 位聯絡人"</item>
-  </plurals>
+    <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
+      <item quantity="other">找到 <xliff:g id="COUNT">%d</xliff:g> 位聯絡人</item>
+      <item quantity="one">找到 1 位聯絡人</item>
+    </plurals>
     <string name="listFoundAllContactsZero" msgid="922980883593159444">"沒有聯絡人"</string>
-  <plurals name="searchFoundContacts">
-    <item quantity="one" msgid="4826918429708286628">"找到 1 位聯絡人"</item>
-    <item quantity="other" msgid="7988132539476575389">"找到 <xliff:g id="COUNT">%d</xliff:g> 位聯絡人"</item>
-  </plurals>
+    <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
+      <item quantity="other">找到 <xliff:g id="COUNT">%d</xliff:g> 位聯絡人</item>
+      <item quantity="one">找到 1 位聯絡人</item>
+    </plurals>
     <string name="all_contacts_tab_label" msgid="6250372293594147703">"所有聯絡人"</string>
     <string name="favorites_tab_label" msgid="1524869648904016414">"最愛聯絡人"</string>
     <string name="callBack" msgid="5498224409038809224">"回撥電話"</string>
@@ -144,9 +151,6 @@
     <string name="pick_new_photo" msgid="9122450996263688237">"選取新相片"</string>
     <string name="locale_change_in_progress" msgid="7583992153091537467">"正在更新聯絡人名單,以反映語言變更。"</string>
     <string name="upgrade_in_progress" msgid="474511436863451061">"正在更新聯絡人清單。"</string>
-    <string name="upgrade_out_of_memory" msgid="1209994418877625940">"正在升級通訊錄。\n\n升級程序需要大約 <xliff:g id="SIZE_IN_MEGABYTES">%s</xliff:g> MB 的內部儲存空間。\n\n請選擇下列其中一個選項:"</string>
-    <string name="upgrade_out_of_memory_uninstall" msgid="1721798828992091432">"解除安裝部分應用程式"</string>
-    <string name="upgrade_out_of_memory_retry" msgid="8431289830472724609">"重試升級"</string>
     <string name="search_results_searching" msgid="3984833028938569930">"正在搜尋..."</string>
     <string name="menu_display_selected" msgid="6470001164297969034">"顯示已選取的項目"</string>
     <string name="menu_display_all" msgid="8887488642609786198">"顯示全部"</string>
@@ -160,10 +164,10 @@
     <string name="primary_photo" msgid="8517942231868516999">"主要相片"</string>
     <string name="description_star" msgid="2605854427360036550">"我的最愛"</string>
     <string name="edit_contact" msgid="7529281274005689512">"編輯聯絡人"</string>
-  <plurals name="merge_info">
-    <item quantity="one" msgid="148365587896371969">"未合併"</item>
-    <item quantity="other" msgid="425683718017380845">"從 <xliff:g id="COUNT">%0$d</xliff:g> 個來源合併"</item>
-  </plurals>
+    <plurals name="merge_info" formatted="false" msgid="2489323424994280962">
+      <item quantity="other">已從 <xliff:g id="COUNT">%0$d</xliff:g> 個來源合併</item>
+      <item quantity="one">未合併</item>
+    </plurals>
     <string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"要將目前聯絡人與所選聯絡人合併嗎?"</string>
     <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"要切換至編輯所選聯絡人嗎?您目前已輸入的資訊將會被複製。"</string>
     <string name="menu_copyContact" msgid="1573960845106822639">"複製到我的通訊錄"</string>
@@ -172,7 +176,7 @@
     <string name="list_filter_custom" msgid="8910173055702057002">"自訂"</string>
     <string name="activity_title_settings" msgid="5464130076132770781">"設定"</string>
     <string name="menu_settings" msgid="377929915873428211">"設定"</string>
-    <string name="menu_help" msgid="5123887102216637725">"說明"</string>
+    <string name="menu_help" msgid="1680178646764069976">"說明和意見反映"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"顯示選項"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>,<xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="non_phone_caption" msgid="1541655052330027380">"電話號碼"</string>
@@ -188,19 +192,19 @@
     <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"匯入通訊錄"</string>
     <string name="create_group_dialog_title" msgid="6874527142828424475">"建立新群組"</string>
     <string name="create_group_item_label" msgid="4411981763169654825">"建立新群組"</string>
-  <plurals name="num_groups_in_account">
-    <item quantity="one" msgid="2944819210288517794">"1 個群組"</item>
-    <item quantity="other" msgid="1276758425904917367">"<xliff:g id="COUNT">%0$d</xliff:g> 個群組"</item>
-  </plurals>
+    <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
+      <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> 個群組</item>
+      <item quantity="one">1 個群組</item>
+    </plurals>
     <string name="delete_group_dialog_message" msgid="7586856514337560529">"要刪除「<xliff:g id="GROUP_LABEL">%1$s</xliff:g>」群組嗎?(這並不會刪除聯絡人本身。)"</string>
-  <plurals name="num_contacts_in_group">
-    <item quantity="one" msgid="1352418549951013448">"<xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g> 中有 <xliff:g id="COUNT_0">%1$d</xliff:g> 人"</item>
-    <item quantity="other" msgid="8146027769011086349">"<xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g> 中有 <xliff:g id="COUNT_0">%1$d</xliff:g> 人"</item>
-  </plurals>
-  <plurals name="group_list_num_contacts_in_group">
-    <item quantity="one" msgid="3323065321661972446">"<xliff:g id="COUNT">%1$d</xliff:g> 人"</item>
-    <item quantity="other" msgid="6251996206137048525">"<xliff:g id="COUNT">%1$d</xliff:g> 人"</item>
-  </plurals>
+    <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
+      <item quantity="other"><xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g> 中有 <xliff:g id="COUNT_2">%1$d</xliff:g> 人</item>
+      <item quantity="one"><xliff:g id="ACCOUNT_TYPE_1">%2$s</xliff:g> 中有 <xliff:g id="COUNT_0">%1$d</xliff:g> 人</item>
+    </plurals>
+    <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
+      <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> 人</item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> 人</item>
+    </plurals>
     <string name="toast_join_with_empty_contact" msgid="2238581529864542985">"請先輸入聯絡人姓名,然後才能與另一個聯絡人合併。"</string>
     <string name="copy_text" msgid="3257145021583508761">"複製到剪貼簿"</string>
     <string name="set_default" msgid="4417505153468300351">"設為預設"</string>
@@ -264,4 +268,5 @@
     <string name="content_description_recent_call" msgid="5183800406316723676">"最近通話 (<xliff:g id="CALL_TYPE">%s</xliff:g>、<xliff:g id="PHONE_NUMBER">%s</xliff:g>、<xliff:g id="DATE">%s</xliff:g>)。按一下即可回電"</string>
     <string name="message_from_you_prefix" msgid="7180706529908434482">"您:<xliff:g id="SMS_BODY">%s</xliff:g>"</string>
     <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"當您在電郵欄或手機欄中輸入個人的 Hangouts 識別碼時,Hangouts 會提供更卓越的服務。"</string>
+    <string name="compact_editor_more_fields" msgid="2874181192382284115">"更多欄位"</string>
 </resources>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index fdf1448..0e37676 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -46,6 +46,7 @@
     <string name="description_action_menu_add_star" msgid="3327186327234177456">"已加到我的最愛"</string>
     <string name="menu_editContact" msgid="9042415603857662633">"編輯"</string>
     <string name="menu_deleteContact" msgid="6788644058868189393">"刪除"</string>
+    <string name="menu_change_photo" msgid="7769177631511496210">"更換相片"</string>
     <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"放在主螢幕上"</string>
     <string name="menu_call" msgid="3992595586042260618">"去電聯絡人"</string>
     <string name="menu_sendSMS" msgid="5535886767547006515">"傳送簡訊至聯絡人"</string>
@@ -56,17 +57,23 @@
     <string name="menu_new_group_action_bar" msgid="3520232877587377175">"新增群組"</string>
     <string name="splitConfirmation_title" msgid="633640935430370530">"確定要分割聯絡人?"</string>
     <string name="splitConfirmation" msgid="740190210499587175">"這位聯絡人即將分割成多份聯絡人資料。"</string>
-    <string name="menu_joinAggregate" msgid="5027981918265667970">"合併"</string>
+    <string name="menu_joinAggregate" msgid="4050157483569357666">"合併"</string>
     <string name="titleJoinContactDataWith" msgid="7684875775798635354">"合併聯絡人"</string>
     <string name="blurbJoinContactDataWith" msgid="8736488417422708236">"選擇要與<xliff:g id="NAME">%s</xliff:g>合併的聯絡人:"</string>
     <string name="showAllContactsJoinItem" msgid="2189695051430392383">"顯示所有聯絡人"</string>
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"建議聯絡人"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"所有聯絡人"</string>
-    <string name="contactsJoinedMessage" msgid="7208148163607047389">"已合併聯絡人"</string>
+    <string name="contactsJoinedMessage" msgid="656936718666768589">"已合併聯絡人"</string>
+    <string name="contacts_deleted_toast" msgid="286851430992788215">"已刪除聯絡人"</string>
     <string name="menu_set_ring_tone" msgid="8728345772068064946">"設定電話鈴聲"</string>
     <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"將所有來電轉到語音信箱"</string>
     <string name="readOnlyContactWarning" msgid="7808825687289848259">"您無法刪除唯讀帳戶的聯絡人,但可在聯絡人清單中隱藏這些聯絡人。"</string>
     <string name="readOnlyContactDeleteConfirmation" msgid="2137170726670196909">"此聯絡人包含來自多個帳戶的資訊。您的聯絡人清單不會顯示唯讀帳戶的資訊 (這些資訊並不會被刪除)。"</string>
+    <string name="batch_merge_single_contact_warning" msgid="982585201970392110">"您至少要選取兩個聯絡人才可執行合併。"</string>
+    <string name="batch_merge_confirmation" msgid="8551299480317422420">"您所選的聯絡人將合併為單一聯絡人。"</string>
+    <string name="batch_delete_confirmation" msgid="2564172328268885394">"所選的聯絡人將被刪除。"</string>
+    <string name="batch_delete_read_only_contact_confirmation" msgid="6614878716815412523">"您的聯絡人清單不會顯示唯讀帳戶的資訊 (系統不會刪除這些資訊)。"</string>
+    <string name="batch_delete_multiple_accounts_confirmation" msgid="5189722181586680185">"這些聯絡人包含來自多個帳戶的資訊。您的聯絡人清單不會顯示唯讀帳戶的資訊 (系統不會刪除這些資訊)。"</string>
     <string name="multipleContactDeleteConfirmation" msgid="938900978442960800">"刪除此聯絡人將會刪除多個帳戶的資訊。"</string>
     <string name="deleteConfirmation" msgid="811706994761610640">"刪除此聯絡人?"</string>
     <string name="menu_discard" msgid="6854657936970228164">"捨棄變更"</string>
@@ -94,20 +101,20 @@
     <string name="contactSavedErrorToast" msgid="3207250533172944892">"無法儲存聯絡人變更。"</string>
     <string name="groupSavedToast" msgid="1168756874239833756">"群組已儲存。"</string>
     <string name="groupSavedErrorToast" msgid="7984466936615304740">"無法儲存群組變更。"</string>
-  <plurals name="listTotalPhoneContacts">
-    <item quantity="one" msgid="3015357862286673986">"1 位有電話號碼的聯絡人"</item>
-    <item quantity="other" msgid="3299954047880968205">"<xliff:g id="COUNT">%d</xliff:g> 位有電話號碼的聯絡人"</item>
-  </plurals>
+    <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> 位有電話號碼的聯絡人</item>
+      <item quantity="one">1 位有電話號碼的聯絡人</item>
+    </plurals>
     <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"所有聯絡人資訊中都沒有電話號碼"</string>
-  <plurals name="listFoundAllContacts">
-    <item quantity="one" msgid="5517063038754171134">"找到 1 位聯絡人"</item>
-    <item quantity="other" msgid="3852668542926965042">"找到 <xliff:g id="COUNT">%d</xliff:g> 位聯絡人"</item>
-  </plurals>
+    <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
+      <item quantity="other">找到 <xliff:g id="COUNT">%d</xliff:g> 位聯絡人</item>
+      <item quantity="one">找到 1 位聯絡人</item>
+    </plurals>
     <string name="listFoundAllContactsZero" msgid="922980883593159444">"沒有聯絡人"</string>
-  <plurals name="searchFoundContacts">
-    <item quantity="one" msgid="4826918429708286628">"找到 1 位聯絡人"</item>
-    <item quantity="other" msgid="7988132539476575389">"找到 <xliff:g id="COUNT">%d</xliff:g> 位聯絡人"</item>
-  </plurals>
+    <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
+      <item quantity="other">找到 <xliff:g id="COUNT">%d</xliff:g> 位聯絡人</item>
+      <item quantity="one">找到 1 位聯絡人</item>
+    </plurals>
     <string name="all_contacts_tab_label" msgid="6250372293594147703">"所有聯絡人"</string>
     <string name="favorites_tab_label" msgid="1524869648904016414">"最愛聯絡人"</string>
     <string name="callBack" msgid="5498224409038809224">"回播電話"</string>
@@ -144,9 +151,6 @@
     <string name="pick_new_photo" msgid="9122450996263688237">"選取新相片"</string>
     <string name="locale_change_in_progress" msgid="7583992153091537467">"正在更新聯絡人清單以反映語言變更。"</string>
     <string name="upgrade_in_progress" msgid="474511436863451061">"正在更新聯絡人清單。"</string>
-    <string name="upgrade_out_of_memory" msgid="1209994418877625940">"正在升級通訊錄。\n\n升級程序大約需要 <xliff:g id="SIZE_IN_MEGABYTES">%s</xliff:g> MB 的內部儲存空間。\n\n請選擇下列其中一個選項:"</string>
-    <string name="upgrade_out_of_memory_uninstall" msgid="1721798828992091432">"解除安裝一些應用程式"</string>
-    <string name="upgrade_out_of_memory_retry" msgid="8431289830472724609">"重試升級"</string>
     <string name="search_results_searching" msgid="3984833028938569930">"搜尋中…"</string>
     <string name="menu_display_selected" msgid="6470001164297969034">"顯示已選取的項目"</string>
     <string name="menu_display_all" msgid="8887488642609786198">"全部顯示"</string>
@@ -160,10 +164,10 @@
     <string name="primary_photo" msgid="8517942231868516999">"主要相片"</string>
     <string name="description_star" msgid="2605854427360036550">"我的收藏"</string>
     <string name="edit_contact" msgid="7529281274005689512">"編輯聯絡人"</string>
-  <plurals name="merge_info">
-    <item quantity="one" msgid="148365587896371969">"未合併"</item>
-    <item quantity="other" msgid="425683718017380845">"從 <xliff:g id="COUNT">%0$d</xliff:g> 個來源合併"</item>
-  </plurals>
+    <plurals name="merge_info" formatted="false" msgid="2489323424994280962">
+      <item quantity="other">已合併 (<xliff:g id="COUNT">%0$d</xliff:g> 個來源)</item>
+      <item quantity="one">未合併</item>
+    </plurals>
     <string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"要將目前聯絡人與所選聯絡人合併嗎?"</string>
     <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"要切換至編輯所選聯絡人嗎?系統會為您複製目前已輸入的資訊。"</string>
     <string name="menu_copyContact" msgid="1573960845106822639">"複製到我的通訊錄"</string>
@@ -172,7 +176,7 @@
     <string name="list_filter_custom" msgid="8910173055702057002">"自訂"</string>
     <string name="activity_title_settings" msgid="5464130076132770781">"設定"</string>
     <string name="menu_settings" msgid="377929915873428211">"設定"</string>
-    <string name="menu_help" msgid="5123887102216637725">"說明"</string>
+    <string name="menu_help" msgid="1680178646764069976">"說明與意見回饋"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"顯示選項"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_1">%1$s</xliff:g> <xliff:g id="COMPANY_0">%2$s</xliff:g>"</string>
     <string name="non_phone_caption" msgid="1541655052330027380">"電話號碼"</string>
@@ -188,19 +192,19 @@
     <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"匯入聯絡人"</string>
     <string name="create_group_dialog_title" msgid="6874527142828424475">"建立新群組"</string>
     <string name="create_group_item_label" msgid="4411981763169654825">"建立新群組"</string>
-  <plurals name="num_groups_in_account">
-    <item quantity="one" msgid="2944819210288517794">"1 個群組"</item>
-    <item quantity="other" msgid="1276758425904917367">"<xliff:g id="COUNT">%0$d</xliff:g> 個群組"</item>
-  </plurals>
+    <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
+      <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> 個群組</item>
+      <item quantity="one">1 個群組</item>
+    </plurals>
     <string name="delete_group_dialog_message" msgid="7586856514337560529">"確定要刪除「<xliff:g id="GROUP_LABEL">%1$s</xliff:g>」群組?(這樣並不會刪除各聯絡人資料)。"</string>
-  <plurals name="num_contacts_in_group">
-    <item quantity="one" msgid="1352418549951013448">"<xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g> 中有 <xliff:g id="COUNT_0">%1$d</xliff:g> 人"</item>
-    <item quantity="other" msgid="8146027769011086349">"<xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g> 中有 <xliff:g id="COUNT_0">%1$d</xliff:g> 人"</item>
-  </plurals>
-  <plurals name="group_list_num_contacts_in_group">
-    <item quantity="one" msgid="3323065321661972446">"<xliff:g id="COUNT">%1$d</xliff:g> 人"</item>
-    <item quantity="other" msgid="6251996206137048525">"<xliff:g id="COUNT">%1$d</xliff:g> 人"</item>
-  </plurals>
+    <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
+      <item quantity="other"><xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g>中有 <xliff:g id="COUNT_2">%1$d</xliff:g> 人</item>
+      <item quantity="one"><xliff:g id="ACCOUNT_TYPE_1">%2$s</xliff:g>中有 <xliff:g id="COUNT_0">%1$d</xliff:g> 人</item>
+    </plurals>
+    <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
+      <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> 人</item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> 人</item>
+    </plurals>
     <string name="toast_join_with_empty_contact" msgid="2238581529864542985">"請先輸入聯絡人姓名,才能與其他聯絡人合併。"</string>
     <string name="copy_text" msgid="3257145021583508761">"複製到剪貼簿"</string>
     <string name="set_default" msgid="4417505153468300351">"設為預設值"</string>
@@ -264,4 +268,5 @@
     <string name="content_description_recent_call" msgid="5183800406316723676">"近期通話。<xliff:g id="CALL_TYPE">%s</xliff:g>。<xliff:g id="PHONE_NUMBER">%s</xliff:g>。<xliff:g id="DATE">%s</xliff:g>。按一下即可回電"</string>
     <string name="message_from_you_prefix" msgid="7180706529908434482">"您:<xliff:g id="SMS_BODY">%s</xliff:g>"</string>
     <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"如果您在電子郵件欄位或電話欄位中輸入聯絡人的 Hangouts 識別碼,可讓 Hangouts 的運作效能更佳。"</string>
+    <string name="compact_editor_more_fields" msgid="2874181192382284115">"更多欄位"</string>
 </resources>
diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml
index 48be0d2..8df1d98 100644
--- a/res/values-zu/strings.xml
+++ b/res/values-zu/strings.xml
@@ -46,6 +46,7 @@
     <string name="description_action_menu_add_star" msgid="3327186327234177456">"Kungezwe ezintandokazini"</string>
     <string name="menu_editContact" msgid="9042415603857662633">"Hlela"</string>
     <string name="menu_deleteContact" msgid="6788644058868189393">"Susa"</string>
+    <string name="menu_change_photo" msgid="7769177631511496210">"Guqula isithombe"</string>
     <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Indawo esikrinini sekhaya"</string>
     <string name="menu_call" msgid="3992595586042260618">"Shayela othintana naye"</string>
     <string name="menu_sendSMS" msgid="5535886767547006515">"Bhalela othintana naye"</string>
@@ -56,17 +57,23 @@
     <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Engeza iqembu"</string>
     <string name="splitConfirmation_title" msgid="633640935430370530">"Oxhumana naye oseceleni"</string>
     <string name="splitConfirmation" msgid="740190210499587175">"Lona oxhumana naye uyocazwa abe oxhumana nabo bningi."</string>
-    <string name="menu_joinAggregate" msgid="5027981918265667970">"Hlanganisa"</string>
+    <string name="menu_joinAggregate" msgid="4050157483569357666">"Hlanganisa"</string>
     <string name="titleJoinContactDataWith" msgid="7684875775798635354">"Joyina othintana nabo"</string>
     <string name="blurbJoinContactDataWith" msgid="8736488417422708236">"Khetha oxhumana naye ofuna ukujoyina naye <xliff:g id="NAME">%s</xliff:g>."</string>
     <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Bonakalisa bonke  othintana nabo"</string>
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Othintana nabo abasikiselwayo"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Bonke othintana nabo"</string>
-    <string name="contactsJoinedMessage" msgid="7208148163607047389">"Othintana nabo abahlanganisiwe"</string>
+    <string name="contactsJoinedMessage" msgid="656936718666768589">"Oxhumana nabo bahlanganisiwe"</string>
+    <string name="contacts_deleted_toast" msgid="286851430992788215">"Oxhumana nabo basusiwe"</string>
     <string name="menu_set_ring_tone" msgid="8728345772068064946">"Hlela iringithoni"</string>
     <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Wonke amakholi aya kwimeyili yezwi"</string>
     <string name="readOnlyContactWarning" msgid="7808825687289848259">"Awukwazi ukususa othintana nabo ema-akhawuntini okufunda kuphela, kodwa ungabafihla ohlwini lwakho loxhumana nabo."</string>
     <string name="readOnlyContactDeleteConfirmation" msgid="2137170726670196909">"Lona othintana naye uqukethe ulwazi olusuka ema-akhawuntini amaningi. Ulwazi olusuka ema-akhawuntini okufunda kuphela kuzofihlwa ohlwini lwakho lothintana nabo, ngeke kususwe."</string>
+    <string name="batch_merge_single_contact_warning" msgid="982585201970392110">"Udinga okungenani oxh"</string>
+    <string name="batch_merge_confirmation" msgid="8551299480317422420">"Oxhumana nabo abakhethiwe bazohlanganiswa benziwe oxhumana naye oyedwa."</string>
+    <string name="batch_delete_confirmation" msgid="2564172328268885394">"Oxhumana nabo abakhethiwe bazosuswa."</string>
+    <string name="batch_delete_read_only_contact_confirmation" msgid="6614878716815412523">"Ulwazi kusukela kuma-akhawunti wokufunda kuphela luzofihlwa kuhlu lwakho loxhumana nabo, lungasuswa."</string>
+    <string name="batch_delete_multiple_accounts_confirmation" msgid="5189722181586680185">"Laba oxhumana nabo baqukethe ulwazi oluvela kuma-akhawunti amaningi. Ulwazi oluvela kusukela kuma-akhawunti wokufunda kuphela luzofihlwa kuhlu loxhumana nabo, lungasuswa."</string>
     <string name="multipleContactDeleteConfirmation" msgid="938900978442960800">"Ukususa lona othintana naye kuzosusa ulwazi olusuka kuma-akhawuntini amaningi."</string>
     <string name="deleteConfirmation" msgid="811706994761610640">"Lo na othintana naye uzosuswa."</string>
     <string name="menu_discard" msgid="6854657936970228164">"Lahla izinguquko"</string>
@@ -94,20 +101,20 @@
     <string name="contactSavedErrorToast" msgid="3207250533172944892">"Yehlulekile ukulondoloza izinguquko zoxhumana nabo."</string>
     <string name="groupSavedToast" msgid="1168756874239833756">"Isigcawu silondiwe"</string>
     <string name="groupSavedErrorToast" msgid="7984466936615304740">"Yehlulekile ukulana izinguquko zeqembu."</string>
-  <plurals name="listTotalPhoneContacts">
-    <item quantity="one" msgid="3015357862286673986">"othintana naye ongu-1 onenombolo yocingo"</item>
-    <item quantity="other" msgid="3299954047880968205">"<xliff:g id="COUNT">%d</xliff:g> Othintana nabo abanezinombolo zocingo"</item>
-  </plurals>
+    <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
+      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> oxhumana nabo abanezinombolo zefoni</item>
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> oxhumana nabo abanezinombolo zefoni</item>
+    </plurals>
     <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"Abekho othintana nabo abanezinombolo zocingo"</string>
-  <plurals name="listFoundAllContacts">
-    <item quantity="one" msgid="5517063038754171134">"1 okutholakele"</item>
-    <item quantity="other" msgid="3852668542926965042">"<xliff:g id="COUNT">%d</xliff:g> tholakele"</item>
-  </plurals>
+    <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
+      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> abatholakele</item>
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> abatholakele</item>
+    </plurals>
     <string name="listFoundAllContactsZero" msgid="922980883593159444">"Abekho oxhumana nabo"</string>
-  <plurals name="searchFoundContacts">
-    <item quantity="one" msgid="4826918429708286628">"otholakele ongu-1"</item>
-    <item quantity="other" msgid="7988132539476575389">"<xliff:g id="COUNT">%d</xliff:g> tholakele"</item>
-  </plurals>
+    <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
+      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> abatholakele</item>
+      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> abatholakele</item>
+    </plurals>
     <string name="all_contacts_tab_label" msgid="6250372293594147703">"Bonke oxhumana nabo"</string>
     <string name="favorites_tab_label" msgid="1524869648904016414">"Izintandokazi"</string>
     <string name="callBack" msgid="5498224409038809224">"Phinda ushayele"</string>
@@ -144,9 +151,6 @@
     <string name="pick_new_photo" msgid="9122450996263688237">"Khetha isithombe"</string>
     <string name="locale_change_in_progress" msgid="7583992153091537467">"Uhlu lothintana naye luyabuyekezwa ukubonisa ushintsho lolimi."</string>
     <string name="upgrade_in_progress" msgid="474511436863451061">"Uhlu lothintana naye luyabuyekezwa."</string>
-    <string name="upgrade_out_of_memory" msgid="1209994418877625940">"Othintana nabo basenqubeni yokuthuthukiswa. \n\nInqubo yokuthuthukisa idinga okungenani i-MB engu-<xliff:g id="SIZE_IN_MEGABYTES">%s</xliff:g> yesitoreji sangaphakathi.\n\nKhetha okukodwa kokukhethwa kukho:"</string>
-    <string name="upgrade_out_of_memory_uninstall" msgid="1721798828992091432">"Khipa ezinye izinhlelo zokusebenza"</string>
-    <string name="upgrade_out_of_memory_retry" msgid="8431289830472724609">"Zama futhi ukuthuthukisa"</string>
     <string name="search_results_searching" msgid="3984833028938569930">"Iyasesha..."</string>
     <string name="menu_display_selected" msgid="6470001164297969034">"Khetha okukhethiwe"</string>
     <string name="menu_display_all" msgid="8887488642609786198">"Bonisa konke"</string>
@@ -160,10 +164,10 @@
     <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>
-  <plurals name="merge_info">
-    <item quantity="one" msgid="148365587896371969">"akuhlanganisiwe"</item>
-    <item quantity="other" msgid="425683718017380845">"ihlanganiswe kusuka emithombeni engu-<xliff:g id="COUNT">%0$d</xliff:g>"</item>
-  </plurals>
+    <plurals name="merge_info" formatted="false" msgid="2489323424994280962">
+      <item quantity="one">kuhlanganiswe kusuka kumithombo engu-<xliff:g id="COUNT">%0$d</xliff:g></item>
+      <item quantity="other">kuhlanganiswe kusuka kumithombo engu-<xliff:g id="COUNT">%0$d</xliff:g></item>
+    </plurals>
     <string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"Joyina othintana naye wamanje nothintana naye okhethiwe?"</string>
     <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Shintshela ekuhleleni othintana naye okhethiwe? Ulwazi olufakile kuze kube manje luzokopishwa."</string>
     <string name="menu_copyContact" msgid="1573960845106822639">"Kopisha kwengithintana nabo"</string>
@@ -172,7 +176,7 @@
     <string name="list_filter_custom" msgid="8910173055702057002">"Ngokwezifiso"</string>
     <string name="activity_title_settings" msgid="5464130076132770781">"Izilungiselelo"</string>
     <string name="menu_settings" msgid="377929915873428211">"Izilungiselelo"</string>
-    <string name="menu_help" msgid="5123887102216637725">"Usizo"</string>
+    <string name="menu_help" msgid="1680178646764069976">"Usizo nempendulo"</string>
     <string name="preference_displayOptions" msgid="1341720270148252393">"Izinketho zokubonisa"</string>
     <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
     <string name="non_phone_caption" msgid="1541655052330027380">"Inombolo yefoni"</string>
@@ -188,19 +192,19 @@
     <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Ngenisa othintana nabo"</string>
     <string name="create_group_dialog_title" msgid="6874527142828424475">"Dala iqembu elisha"</string>
     <string name="create_group_item_label" msgid="4411981763169654825">"Dala iqembu elisha"</string>
-  <plurals name="num_groups_in_account">
-    <item quantity="one" msgid="2944819210288517794">"1 isigcawu"</item>
-    <item quantity="other" msgid="1276758425904917367">"<xliff:g id="COUNT">%0$d</xliff:g> Amaqembu"</item>
-  </plurals>
+    <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
+      <item quantity="one"><xliff:g id="COUNT">%0$d</xliff:g> amaqembu</item>
+      <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> amaqembu</item>
+    </plurals>
     <string name="delete_group_dialog_message" msgid="7586856514337560529">"Susa leliqembu \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\"? (oxhumana nabo ngeke basuseke.)"</string>
-  <plurals name="num_contacts_in_group">
-    <item quantity="one" msgid="1352418549951013448">"<xliff:g id="COUNT_0">%1$d</xliff:g> umuntu kusuka ku-<xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>"</item>
-    <item quantity="other" msgid="8146027769011086349">"<xliff:g id="COUNT_0">%1$d</xliff:g> abantu abasuka ku- <xliff:g id="ACCOUNT_TYPE">%2$s</xliff:g>"</item>
-  </plurals>
-  <plurals name="group_list_num_contacts_in_group">
-    <item quantity="one" msgid="3323065321661972446">"<xliff:g id="COUNT">%1$d</xliff:g> umuntu"</item>
-    <item quantity="other" msgid="6251996206137048525">"<xliff:g id="COUNT">%1$d</xliff:g> abantu"</item>
-  </plurals>
+    <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
+      <item quantity="one"><xliff:g id="COUNT_2">%1$d</xliff:g> abantu kusuka ku-<xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> abantu kusuka ku-<xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
+    </plurals>
+    <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
+      <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> abantu</item>
+      <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> abantu</item>
+    </plurals>
     <string name="toast_join_with_empty_contact" msgid="2238581529864542985">"Bhala igama lomuntu oxhuana naye ngaphambili kokujoyina nomunye."</string>
     <string name="copy_text" msgid="3257145021583508761">"Kopisha ku-clipboard"</string>
     <string name="set_default" msgid="4417505153468300351">"Hlela okuzenzakalelayo"</string>
@@ -264,4 +268,5 @@
     <string name="content_description_recent_call" msgid="5183800406316723676">"ikholi yakamuva. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. chofoza ukuze uphinde ushaye"</string>
     <string name="message_from_you_prefix" msgid="7180706529908434482">"Wena: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
     <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"I-Hangouts isebenza kangcono uma ufaka isikhombi somuntu se-Hangouts kunkambu ye-imeyili noma kunkambu yefoni."</string>
+    <string name="compact_editor_more_fields" msgid="2874181192382284115">"Izinkambu eziningi"</string>
 </resources>
diff --git a/res/values/colors.xml b/res/values/colors.xml
index c3bf79e..a537a95 100644
--- a/res/values/colors.xml
+++ b/res/values/colors.xml
@@ -29,6 +29,10 @@
     <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">#616161</color>
+    <!-- Color of the status bar above the contextual selection bar. -->
+    <color name="contextual_selection_bar_status_bar_color">#424242</color>
+
     <color name="primary_color_dark">#0277bd</color>
     <color name="primary_color">#0288d1</color>
 
@@ -58,6 +62,6 @@
     <!-- Color of the mime-type icons inside the editor. 50% black. -->
     <color name="editor_icon_color">#7f7f7f</color>
 
-    <!-- Color of disabled text and unfocused hint text inside the contact editor. -->
-    <color name="editor_disabled_text_color">#989898</color>
+    <!-- Color of disabled text and unfocused hint text inside the contact editor. 25% black. -->
+    <color name="editor_disabled_text_color">#40000000</color>
 </resources>
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index a6afca6..b8650e3 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -33,14 +33,18 @@
         snaps to the top of the window. -->
     <dimen name="quickcontact_snap_to_top_slop_height">33dp</dimen>
 
+    <!-- The ratio of width:height (360:184) for the compact editor contact photo in portrait -->
+    <item name="editor_portrait_photo_ratio" type="dimen" format="float">1.96</item>
+
     <!-- Padding of the rounded plus/minus/expand/collapse buttons in the editor  -->
     <dimen name="editor_round_button_padding_left">16dip</dimen>
     <dimen name="editor_round_button_padding_right">16dip</dimen>
     <dimen name="editor_round_button_padding_top">16dip</dimen>
     <dimen name="editor_round_button_padding_bottom">16dip</dimen>
 
-    <!-- Minimum height of a row in the Editor -->
-    <dimen name="editor_min_line_item_height">48dip</dimen>
+    <!-- Minimum height of a row in the Editor. This is the target height for editor "rows",
+        including the "More fields" button/row. -->
+    <dimen name="editor_min_line_item_height">54dp</dimen>
 
     <!-- Width of the delete button (X) in the raw contact editor -->
     <dimen name="editor_delete_button_width">48dp</dimen>
@@ -69,21 +73,21 @@
     <dimen name="editor_kind_icon_total_width">68dp</dimen>
 
     <!-- Padding below every editor view, such as LabeledEditorView. This value is chosen
-        to give 32dp of apparent padding between EditText's in the Raw Contact Editor. -->
-    <dimen name="editor_padding_between_editor_views">15dp</dimen>
+        to give 19dp of apparent padding between EditText's in the Raw Contact Editor. -->
+    <dimen name="editor_padding_between_editor_views">2dp</dimen>
 
-    <!-- Padding below every readonly editor view. This value is chosen to give 32dp of apparent padding
-        between TextView's in the readonly Raw Contact Editor. -->
-    <dimen name="editor_padding_between_read_only_editor_views">25dp</dimen>
+    <!-- Padding below every readonly editor view. This value is chosen to give 19dp of apparent
+        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 32dp of apparent
+    <!-- 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">28dp</dimen>
+    <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">21dp</dimen>
+    <dimen name="editor_padding_below_photo">9dp</dimen>
 
     <!-- Width of the Type-Label in the Editor -->
     <dimen name="editor_type_label_width">150dip</dimen>
@@ -94,6 +98,9 @@
     <!-- Left padding of the label in the add field button for the contact editor -->
     <dimen name="editor_add_field_label_left_padding">16dip</dimen>
 
+    <!-- Top margin for the first field of the compact contact editor -->
+    <dimen name="editor_compact_first_field_padding">10dp</dimen>
+
     <!-- Width and height of the expanded contact photo on the contact detail page -->
     <dimen name="detail_contact_photo_expanded_size">400dip</dimen>
 
diff --git a/res/values/ids.xml b/res/values/ids.xml
index b5a230f..7f6a51f 100644
--- a/res/values/ids.xml
+++ b/res/values/ids.xml
@@ -20,9 +20,11 @@
     <item type="id" name="dialog_sync_add"/>
 
     <!-- For ContactDeletionInteraction -->
-    <item type="id" name="dialog_delete_contact_confirmation"/>
     <item type="id" name="dialog_delete_contact_loader_id" />
 
+    <!-- For ContactMultiDeletionInteraction -->
+    <item type="id" name="dialog_delete_multiple_contact_loader_id" />
+
     <!-- For PhoneNumberInteraction -->
     <item type="id" name="dialog_phone_number_call_disambiguation"/>
 
diff --git a/res/values/strings.xml b/res/values/strings.xml
index e11a519..55e182d 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -114,6 +114,9 @@
     <!-- Menu item used to delete a specific contact -->
     <string name="menu_deleteContact">Delete</string>
 
+    <!-- Menu item used to change the photo for a specific contact [CHAR LIMIT=30]-->
+    <string name="menu_change_photo">Change photo</string>
+
     <!-- Menu item used to create a contact shortcut when viewing contact details. [CHAR LIMIT=30] -->
     <string name="menu_create_contact_shortcut">Place on Home screen</string>
 
@@ -145,7 +148,7 @@
     <string name="splitConfirmation">This contact will be separated into multiple contacts.</string>
 
     <!-- Menu item that joins an aggregate with another aggregate -->
-    <string name="menu_joinAggregate">Join</string>
+    <string name="menu_joinAggregate">Merge</string>
 
     <!-- Heading of the Join Contact screen -->
     <string name="titleJoinContactDataWith">Join contacts</string>
@@ -162,8 +165,11 @@
     <!-- List separator for the Join Contact list: A-Z -->
     <string name="separatorJoinAggregateAll">All contacts</string>
 
-    <!-- Toast shown after two contacts have been joined by a user action -->
-    <string name="contactsJoinedMessage">Contacts joined</string>
+    <!-- Toast shown after two contacts have been joined by a user action. [CHAR LIMIT=NONE] -->
+    <string name="contactsJoinedMessage">Contacts merged</string>
+
+    <!-- Toast shown after contacts that the user has selected are deleted by a user action. [CHAR LIMIT=NONE] -->
+    <string name="contacts_deleted_toast">Contacts deleted</string>
 
     <!-- Menu item that opens the Options activity for a given contact [CHAR LIMIT=15] -->
     <string name="menu_set_ring_tone">Set ringtone</string>
@@ -177,6 +183,21 @@
     <!-- Warning dialog contents after users selects to delete a contact with ReadOnly and Writable sources. -->
     <string name="readOnlyContactDeleteConfirmation">This contact contains information from multiple accounts. Information from read-only accounts will be hidden in your contacts lists, not deleted.</string>
 
+    <!-- Warning dialog. Shown if user selects a single contact to merge. [CHAR LIMIT=NONE]  -->
+    <string name="batch_merge_single_contact_warning">You need at least two contacts selected to perform a merge.</string>
+
+    <!-- Confirmation dialog. Shown after user selects to merge contacts. [CHAR LIMIT=NONE]  -->
+    <string name="batch_merge_confirmation">The selected contacts will be merged into a single contact.</string>
+
+    <!-- Confirmation dialog. Shown after user selects to delete writable contacts. [CHAR LIMIT=NONE]  -->
+    <string name="batch_delete_confirmation">The selected contacts will be deleted.</string>
+
+    <!-- Confirmation dialog. Shown after user selects to delete readonly contacts. [CHAR LIMIT=NONE] -->
+    <string name="batch_delete_read_only_contact_confirmation">Information from read-only accounts will be hidden in your contacts lists, not deleted.</string>
+
+    <!-- Confirmation dialog. Shown after user selects to delete contacts from multiple accounts. [CHAR LIMIT=NONE]  -->
+    <string name="batch_delete_multiple_accounts_confirmation">These contacts contains information from multiple accounts. Information from read-only accounts will be hidden in your contacts lists, not deleted.</string>
+
     <!-- Warning dialog contents after users selects to delete a contact with multiple Writable sources. -->
     <string name="multipleContactDeleteConfirmation">Deleting this contact will delete information from multiple accounts.</string>
 
@@ -254,6 +275,9 @@
     <!-- Toast displayed when saving a contact failed. [CHAR LIMIT=NONE] -->
     <string name="contactSavedErrorToast">Couldn\'t save contact changes.</string>
 
+    <!-- Toast displayed when saving a contact photo failed. [CHAR LIMIT=NONE] -->
+    <string name="contactPhotoSavedErrorToast">Couldn\'t save contact photo changes.</string>
+
     <!-- Toast displayed when a group is saved [CHAR LIMIT=NONE] -->
     <string name="groupSavedToast">Group saved.</string>
 
@@ -397,17 +421,6 @@
     <!-- Text shown in the contacts app while the background process updates contacts after a system upgrade [CHAR LIMIT=300] -->
     <string name="upgrade_in_progress">Contact list is being updated.</string>
 
-    <!-- Text shown in the contacts app if the background process updating contacts fails because of memory shortage [CHAR LIMIT=300] -->
-    <string name="upgrade_out_of_memory">Contacts are in the process of being upgraded.
-    \n\nThe upgrade process requires approximately <xliff:g id="size_in_megabytes">%s</xliff:g>
-    MB of internal storage.\n\nChoose one of the following options:</string>
-
-    <!-- Button shown in the contacts app if the background process updating contacts fails because of memory shortage [CHAR LIMIT=50] -->
-    <string name="upgrade_out_of_memory_uninstall">Uninstall some applications</string>
-
-    <!-- Button shown in the contacts app if the background process updating contacts fails because of memory shortage [CHAR LIMIT=50] -->
-    <string name="upgrade_out_of_memory_retry">Retry upgrade</string>
-
     <!-- Title shown in the search result activity of contacts app while searching.  [CHAR LIMIT=20] -->
     <string name="search_results_searching">Searching\u2026</string>
 
@@ -438,7 +451,7 @@
     <!-- 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=15] -->
+    <!-- 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
@@ -488,8 +501,8 @@
     <!-- Menu item for the settings activity [CHAR LIMIT=64] -->
     <string name="menu_settings" msgid="377929915873428211">Settings</string>
 
-    <!-- Menu item for invoking contextual help [CHAR LIMIT=64] -->
-    <string name="menu_help">Help</string>
+    <!-- Menu item for invoking contextual Help & Feedback [CHAR LIMIT=64] -->
+    <string name="menu_help">Help &amp; feedback</string>
 
     <!-- The preference section title for contact display options [CHAR LIMIT=128] -->
     <string name="preference_displayOptions">Display options</string>
@@ -745,4 +758,10 @@
 
     <!-- When a user tries to create an IM Hangouts field, an alert dialog pops up displaying this message. We don't want users entering email addresses of phone numbers into the IM field. [CHAR LIMIT=200] -->
     <string name="contact_editor_hangouts_im_alert">Hangouts works better when you enter the person\'s Hangouts identifier into the email field or phone field.</string>
+
+    <!-- Button to expand the compact contact editor to show all available input fields. [CHAR LIMIT=60] -->
+    <string name="compact_editor_more_fields">More Fields</string>
+
+    <!-- Content description for the compact contact editor photo overlay which, when clicked, shows a dialog with the options for changing the contact photo. [CHAR LIMIT=30] -->
+    <string name="compact_editor_change_photo_content_description">Change photo</string>
 </resources>
diff --git a/res/values/styles.xml b/res/values/styles.xml
index d4826a1..8fce0f1 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -123,8 +123,7 @@
     </style>
 
     <style name="EditorActionBarStyle" parent="@style/ContactsActionBarStyle">
-        <!-- Do not use a contentInsetStart, since we are setting a custom ActionBar view -->
-        <item name="android:contentInsetStart">0dp</item>
+        <item name="android:contentInsetStart">72dp</item>
     </style>
 
     <!-- When this style was added, android:toolbarStyle was private. Therefore, this style
@@ -163,6 +162,7 @@
         <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>
 
@@ -219,6 +219,7 @@
         <item name="android:textColorPrimary">@color/primary_text_color</item>
         <item name="android:textColorSecondary">@color/secondary_text_color</item>
         <item name="android:listViewStyle">@style/ListViewStyle</item>
+        <item name="android:colorAccent">@color/primary_color</item>
     </style>
 
     <style name="SectionDivider">
diff --git a/src/com/android/contacts/ContactSaveService.java b/src/com/android/contacts/ContactSaveService.java
index 7c6dfc7..df5c697 100755
--- a/src/com/android/contacts/ContactSaveService.java
+++ b/src/com/android/contacts/ContactSaveService.java
@@ -37,6 +37,7 @@
 import android.provider.ContactsContract;
 import android.provider.ContactsContract.AggregationExceptions;
 import android.provider.ContactsContract.CommonDataKinds.GroupMembership;
+import android.provider.ContactsContract.CommonDataKinds.StructuredName;
 import android.provider.ContactsContract.Contacts;
 import android.provider.ContactsContract.Data;
 import android.provider.ContactsContract.Groups;
@@ -53,16 +54,12 @@
 import com.android.contacts.common.model.RawContactDeltaList;
 import com.android.contacts.common.model.RawContactModifier;
 import com.android.contacts.common.model.account.AccountWithDataSet;
+import com.android.contacts.editor.ContactEditorFragment;
 import com.android.contacts.util.ContactPhotoUtils;
 
 import com.google.common.collect.Lists;
 import com.google.common.collect.Sets;
 
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
 import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.List;
@@ -103,7 +100,9 @@
 
     public static final String ACTION_SET_STARRED = "setStarred";
     public static final String ACTION_DELETE_CONTACT = "delete";
+    public static final String ACTION_DELETE_MULTIPLE_CONTACTS = "deleteMultipleContacts";
     public static final String EXTRA_CONTACT_URI = "contactUri";
+    public static final String EXTRA_CONTACT_IDS = "contactIds";
     public static final String EXTRA_STARRED_FLAG = "starred";
 
     public static final String ACTION_SET_SUPER_PRIMARY = "setSuperPrimary";
@@ -111,9 +110,9 @@
     public static final String EXTRA_DATA_ID = "dataId";
 
     public static final String ACTION_JOIN_CONTACTS = "joinContacts";
+    public static final String ACTION_JOIN_SEVERAL_CONTACTS = "joinSeveralContacts";
     public static final String EXTRA_CONTACT_ID1 = "contactId1";
     public static final String EXTRA_CONTACT_ID2 = "contactId2";
-    public static final String EXTRA_CONTACT_WRITABLE = "contactWritable";
 
     public static final String ACTION_SET_SEND_TO_VOICEMAIL = "sendToVoicemail";
     public static final String EXTRA_SEND_TO_VOICEMAIL_FLAG = "sendToVoicemailFlag";
@@ -207,10 +206,14 @@
             setSuperPrimary(intent);
         } else if (ACTION_CLEAR_PRIMARY.equals(action)) {
             clearPrimary(intent);
+        } else if (ACTION_DELETE_MULTIPLE_CONTACTS.equals(action)) {
+            deleteMultipleContacts(intent);
         } else if (ACTION_DELETE_CONTACT.equals(action)) {
             deleteContact(intent);
         } else if (ACTION_JOIN_CONTACTS.equals(action)) {
             joinContacts(intent);
+        } else if (ACTION_JOIN_SEVERAL_CONTACTS.equals(action)) {
+            joinSeveralContacts(intent);
         } else if (ACTION_SET_SEND_TO_VOICEMAIL.equals(action)) {
             setSendToVoicemail(intent);
         } else if (ACTION_SET_RINGTONE.equals(action)) {
@@ -298,7 +301,7 @@
         Bundle bundle = new Bundle();
         bundle.putParcelable(String.valueOf(rawContactId), updatedPhotoPath);
         return createSaveContactIntent(context, state, saveModeExtraKey, saveMode, isProfile,
-                callbackActivity, callbackAction, bundle);
+                callbackActivity, callbackAction, bundle, /* backPressed =*/ false);
     }
 
     /**
@@ -307,11 +310,13 @@
      * This variant is used when multiple contacts' photos may be updated, as in the
      * Contact Editor.
      * @param updatedPhotos maps each raw-contact's ID to the file-path of the new photo.
+     * @param backPressed whether the save was initiated as a result of a back button press
+     *         or because the framework stopped the editor Activity
      */
     public static Intent createSaveContactIntent(Context context, RawContactDeltaList state,
             String saveModeExtraKey, int saveMode, boolean isProfile,
             Class<? extends Activity> callbackActivity, String callbackAction,
-            Bundle updatedPhotos) {
+            Bundle updatedPhotos, boolean backPressed) {
         Intent serviceIntent = new Intent(
                 context, ContactSaveService.class);
         serviceIntent.setAction(ContactSaveService.ACTION_SAVE_CONTACT);
@@ -330,6 +335,11 @@
             Intent callbackIntent = new Intent(context, callbackActivity);
             callbackIntent.putExtra(saveModeExtraKey, saveMode);
             callbackIntent.setAction(callbackAction);
+            if (updatedPhotos != null) {
+                callbackIntent.putExtra(EXTRA_UPDATED_PHOTOS, (Parcelable) updatedPhotos);
+            }
+            callbackIntent.putExtra(ContactEditorFragment.INTENT_EXTRA_SAVE_BACK_PRESSED,
+                    backPressed);
             serviceIntent.putExtra(ContactSaveService.EXTRA_CALLBACK_INTENT, callbackIntent);
         }
         return serviceIntent;
@@ -339,6 +349,12 @@
         RawContactDeltaList state = intent.getParcelableExtra(EXTRA_CONTACT_STATE);
         boolean isProfile = intent.getBooleanExtra(EXTRA_SAVE_IS_PROFILE, false);
         Bundle updatedPhotos = intent.getParcelableExtra(EXTRA_UPDATED_PHOTOS);
+
+        if (state == null) {
+            Log.e(TAG, "Invalid arguments for saveContact request");
+            return;
+        }
+
         int saveMode = intent.getIntExtra(EXTRA_SAVE_MODE, -1);
         // Trim any empty fields, and RawContacts, before persisting
         final AccountTypeManager accountTypes = AccountTypeManager.getInstance(this);
@@ -368,6 +384,11 @@
                 ContentProviderResult[] results = null;
                 if (!diff.isEmpty()) {
                     results = resolver.applyBatch(ContactsContract.AUTHORITY, diff);
+                    if (results == null) {
+                        Log.w(TAG, "Resolver.applyBatch failed in saveContacts");
+                        // Retry save
+                        continue;
+                    }
                 }
 
                 final long rawContactId = getRawContactId(state, diff, results);
@@ -384,6 +405,9 @@
                     Cursor c = resolver.query(Profile.CONTENT_URI,
                             new String[] {Contacts._ID, Contacts.LOOKUP_KEY},
                             null, null, null);
+                    if (c == null) {
+                        continue;
+                    }
                     try {
                         if (c.moveToFirst()) {
                             final long contactId = c.getLong(0);
@@ -398,7 +422,9 @@
                                     rawContactId);
                     lookupUri = RawContacts.getContactLookupUri(resolver, rawContactUri);
                 }
-                Log.v(TAG, "Saved contact. New URI: " + lookupUri);
+                if (lookupUri != null) {
+                    Log.v(TAG, "Saved contact. New URI: " + lookupUri);
+                }
 
                 // We can change this back to false later, if we fail to save the contact photo.
                 succeeded = true;
@@ -465,13 +491,12 @@
                 // replace the bogus ID with the new one that we actually saved the contact at.
                 if (rawContactId < 0) {
                     rawContactId = insertedRawContactId;
-                    if (rawContactId == -1) {
-                        throw new IllegalStateException(
-                                "Could not determine RawContact ID for image insertion");
-                    }
                 }
 
-                if (!saveUpdatedPhoto(rawContactId, photoUri, saveMode)) succeeded = false;
+                // If the save failed, insertedRawContactId will be -1
+                if (rawContactId < 0 || !saveUpdatedPhoto(rawContactId, photoUri, saveMode)) {
+                    succeeded = false;
+                }
             }
         }
 
@@ -527,8 +552,7 @@
         final int numResults = results.length;
         for (int i = 0; i < diffSize && i < numResults; i++) {
             ContentProviderOperation operation = diff.get(i);
-            if (operation.getType() == ContentProviderOperation.TYPE_INSERT
-                    && operation.getUri().getEncodedPath().contains(
+            if (operation.isInsert() && operation.getUri().getEncodedPath().contains(
                             RawContacts.CONTENT_URI.getEncodedPath())) {
                 return ContentUris.parseId(results[i].uri);
             }
@@ -835,8 +859,7 @@
 
                 // Don't bother undemoting if this contact is the user's profile.
                 if (id < Profile.MIN_ID) {
-                    getContentResolver().call(ContactsContract.AUTHORITY_URI,
-                            PinnedPositions.UNDEMOTE_METHOD, String.valueOf(id), null);
+                    PinnedPositions.undemote(getContentResolver(), id);
                 }
             }
         } finally {
@@ -953,6 +976,17 @@
         return serviceIntent;
     }
 
+    /**
+     * Creates an intent that can be sent to this service to delete multiple contacts.
+     */
+    public static Intent createDeleteMultipleContactsIntent(Context context,
+            long[] contactIds) {
+        Intent serviceIntent = new Intent(context, ContactSaveService.class);
+        serviceIntent.setAction(ContactSaveService.ACTION_DELETE_MULTIPLE_CONTACTS);
+        serviceIntent.putExtra(ContactSaveService.EXTRA_CONTACT_IDS, contactIds);
+        return serviceIntent;
+    }
+
     private void deleteContact(Intent intent) {
         Uri contactUri = intent.getParcelableExtra(EXTRA_CONTACT_URI);
         if (contactUri == null) {
@@ -963,17 +997,29 @@
         getContentResolver().delete(contactUri, null, null);
     }
 
+    private void deleteMultipleContacts(Intent intent) {
+        final long[] contactIds = intent.getLongArrayExtra(EXTRA_CONTACT_IDS);
+        if (contactIds == null) {
+            Log.e(TAG, "Invalid arguments for deleteMultipleContacts request");
+            return;
+        }
+        for (long contactId : contactIds) {
+            final Uri contactUri = ContentUris.withAppendedId(Contacts.CONTENT_URI, contactId);
+            getContentResolver().delete(contactUri, null, null);
+        }
+        showToast(R.string.contacts_deleted_toast);
+    }
+
     /**
      * Creates an intent that can be sent to this service to join two contacts.
+     * The resulting contact uses the name from {@param contactId1} if possible.
      */
     public static Intent createJoinContactsIntent(Context context, long contactId1,
-            long contactId2, boolean contactWritable,
-            Class<? extends Activity> callbackActivity, String callbackAction) {
+            long contactId2, Class<? extends Activity> callbackActivity, String callbackAction) {
         Intent serviceIntent = new Intent(context, ContactSaveService.class);
         serviceIntent.setAction(ContactSaveService.ACTION_JOIN_CONTACTS);
         serviceIntent.putExtra(ContactSaveService.EXTRA_CONTACT_ID1, contactId1);
         serviceIntent.putExtra(ContactSaveService.EXTRA_CONTACT_ID2, contactId2);
-        serviceIntent.putExtra(ContactSaveService.EXTRA_CONTACT_WRITABLE, contactWritable);
 
         // Callback intent will be invoked by the service once the contacts are joined.
         Intent callbackIntent = new Intent(context, callbackActivity);
@@ -983,86 +1029,60 @@
         return serviceIntent;
     }
 
+    /**
+     * Creates an intent to join all raw contacts inside {@param contactIds}'s contacts.
+     * No special attention is paid to where the resulting contact's name is taken from.
+     */
+    public static Intent createJoinSeveralContactsIntent(Context context, long[] contactIds) {
+        Intent serviceIntent = new Intent(context, ContactSaveService.class);
+        serviceIntent.setAction(ContactSaveService.ACTION_JOIN_SEVERAL_CONTACTS);
+        serviceIntent.putExtra(ContactSaveService.EXTRA_CONTACT_IDS, contactIds);
+        return serviceIntent;
+    }
+
 
     private interface JoinContactQuery {
         String[] PROJECTION = {
                 RawContacts._ID,
                 RawContacts.CONTACT_ID,
-                RawContacts.NAME_VERIFIED,
                 RawContacts.DISPLAY_NAME_SOURCE,
         };
 
-        String SELECTION = RawContacts.CONTACT_ID + "=? OR " + RawContacts.CONTACT_ID + "=?";
-
         int _ID = 0;
         int CONTACT_ID = 1;
-        int NAME_VERIFIED = 2;
-        int DISPLAY_NAME_SOURCE = 3;
+        int DISPLAY_NAME_SOURCE = 2;
     }
 
-    private void joinContacts(Intent intent) {
-        long contactId1 = intent.getLongExtra(EXTRA_CONTACT_ID1, -1);
-        long contactId2 = intent.getLongExtra(EXTRA_CONTACT_ID2, -1);
-        boolean writable = intent.getBooleanExtra(EXTRA_CONTACT_WRITABLE, false);
-        if (contactId1 == -1 || contactId2 == -1) {
-            Log.e(TAG, "Invalid arguments for joinContacts request");
+    private interface ContactEntityQuery {
+        String[] PROJECTION = {
+                Contacts.Entity.DATA_ID,
+                Contacts.Entity.CONTACT_ID,
+                Contacts.Entity.IS_SUPER_PRIMARY,
+        };
+        String SELECTION = Data.MIMETYPE + " = '" + StructuredName.CONTENT_ITEM_TYPE + "'" +
+                " AND " + StructuredName.DISPLAY_NAME + "=" + Contacts.DISPLAY_NAME +
+                " AND " + StructuredName.DISPLAY_NAME + " IS NOT NULL " +
+                " AND " + StructuredName.DISPLAY_NAME + " != '' ";
+
+        int DATA_ID = 0;
+        int CONTACT_ID = 1;
+        int IS_SUPER_PRIMARY = 2;
+    }
+
+    private void joinSeveralContacts(Intent intent) {
+        final long[] contactIds = intent.getLongArrayExtra(EXTRA_CONTACT_IDS);
+
+        // Load raw contact IDs for all contacts involved.
+        long rawContactIds[] = getRawContactIdsForAggregation(contactIds);
+        if (rawContactIds == null) {
+            Log.e(TAG, "Invalid arguments for joinSeveralContacts request");
             return;
         }
 
-        final ContentResolver resolver = getContentResolver();
-
-        // Load raw contact IDs for all raw contacts involved - currently edited and selected
-        // in the join UIs
-        Cursor c = resolver.query(RawContacts.CONTENT_URI,
-                JoinContactQuery.PROJECTION,
-                JoinContactQuery.SELECTION,
-                new String[]{String.valueOf(contactId1), String.valueOf(contactId2)}, null);
-        if (c == null) {
-            Log.e(TAG, "Unable to open Contacts DB cursor");
-            showToast(R.string.contactSavedErrorToast);
-            return;
-        }
-
-        long rawContactIds[];
-        long verifiedNameRawContactId = -1;
-        try {
-            if (c.getCount() == 0) {
-                return;
-            }
-            int maxDisplayNameSource = -1;
-            rawContactIds = new long[c.getCount()];
-            for (int i = 0; i < rawContactIds.length; i++) {
-                c.moveToPosition(i);
-                long rawContactId = c.getLong(JoinContactQuery._ID);
-                rawContactIds[i] = rawContactId;
-                int nameSource = c.getInt(JoinContactQuery.DISPLAY_NAME_SOURCE);
-                if (nameSource > maxDisplayNameSource) {
-                    maxDisplayNameSource = nameSource;
-                }
-            }
-
-            // Find an appropriate display name for the joined contact:
-            // if should have a higher DisplayNameSource or be the name
-            // of the original contact that we are joining with another.
-            if (writable) {
-                for (int i = 0; i < rawContactIds.length; i++) {
-                    c.moveToPosition(i);
-                    if (c.getLong(JoinContactQuery.CONTACT_ID) == contactId1) {
-                        int nameSource = c.getInt(JoinContactQuery.DISPLAY_NAME_SOURCE);
-                        if (nameSource == maxDisplayNameSource
-                                && (verifiedNameRawContactId == -1
-                                        || c.getInt(JoinContactQuery.NAME_VERIFIED) != 0)) {
-                            verifiedNameRawContactId = c.getLong(JoinContactQuery._ID);
-                        }
-                    }
-                }
-            }
-        } finally {
-            c.close();
-        }
-
         // For each pair of raw contacts, insert an aggregation exception
-        ArrayList<ContentProviderOperation> operations = new ArrayList<ContentProviderOperation>();
+        final ContentResolver resolver = getContentResolver();
+        final ArrayList<ContentProviderOperation> operations
+                = new ArrayList<ContentProviderOperation>();
         for (int i = 0; i < rawContactIds.length; i++) {
             for (int j = 0; j < rawContactIds.length; j++) {
                 if (i != j) {
@@ -1071,12 +1091,70 @@
             }
         }
 
-        // Mark the original contact as "name verified" to make sure that the contact
-        // display name does not change as a result of the join
-        if (verifiedNameRawContactId != -1) {
+        // Apply all aggregation exceptions as one batch
+        try {
+            resolver.applyBatch(ContactsContract.AUTHORITY, operations);
+            showToast(R.string.contactsJoinedMessage);
+        } catch (RemoteException | OperationApplicationException e) {
+            Log.e(TAG, "Failed to apply aggregation exception batch", e);
+            showToast(R.string.contactSavedErrorToast);
+        }
+    }
+
+
+    private void joinContacts(Intent intent) {
+        long contactId1 = intent.getLongExtra(EXTRA_CONTACT_ID1, -1);
+        long contactId2 = intent.getLongExtra(EXTRA_CONTACT_ID2, -1);
+
+        // Load raw contact IDs for all raw contacts involved - currently edited and selected
+        // in the join UIs.
+        long rawContactIds[] = getRawContactIdsForAggregation(contactId1, contactId2);
+        if (rawContactIds == null) {
+            Log.e(TAG, "Invalid arguments for joinContacts request");
+            return;
+        }
+
+        ArrayList<ContentProviderOperation> operations = new ArrayList<ContentProviderOperation>();
+
+        // For each pair of raw contacts, insert an aggregation exception
+        for (int i = 0; i < rawContactIds.length; i++) {
+            for (int j = 0; j < rawContactIds.length; j++) {
+                if (i != j) {
+                    buildJoinContactDiff(operations, rawContactIds[i], rawContactIds[j]);
+                }
+            }
+        }
+
+        final ContentResolver resolver = getContentResolver();
+
+        // Use the name for contactId1 as the name for the newly aggregated contact.
+        final Uri contactId1Uri = ContentUris.withAppendedId(
+                Contacts.CONTENT_URI, contactId1);
+        final Uri entityUri = Uri.withAppendedPath(
+                contactId1Uri, Contacts.Entity.CONTENT_DIRECTORY);
+        Cursor c = resolver.query(entityUri,
+                ContactEntityQuery.PROJECTION, ContactEntityQuery.SELECTION, null, null);
+        if (c == null) {
+            Log.e(TAG, "Unable to open Contacts DB cursor");
+            showToast(R.string.contactSavedErrorToast);
+            return;
+        }
+        long dataIdToAddSuperPrimary = -1;
+        try {
+            if (c.moveToFirst()) {
+                dataIdToAddSuperPrimary = c.getLong(ContactEntityQuery.DATA_ID);
+            }
+        } finally {
+            c.close();
+        }
+
+        // Mark the name from contactId1 IS_SUPER_PRIMARY to make sure that the contact
+        // display name does not change as a result of the join.
+        if (dataIdToAddSuperPrimary != -1) {
             Builder builder = ContentProviderOperation.newUpdate(
-                    ContentUris.withAppendedId(RawContacts.CONTENT_URI, verifiedNameRawContactId));
-            builder.withValue(RawContacts.NAME_VERIFIED, 1);
+                    ContentUris.withAppendedId(Data.CONTENT_URI, dataIdToAddSuperPrimary));
+            builder.withValue(Data.IS_SUPER_PRIMARY, 1);
+            builder.withValue(Data.IS_PRIMARY, 1);
             operations.add(builder.build());
         }
 
@@ -1086,10 +1164,7 @@
             resolver.applyBatch(ContactsContract.AUTHORITY, operations);
             showToast(R.string.contactsJoinedMessage);
             success = true;
-        } catch (RemoteException e) {
-            Log.e(TAG, "Failed to apply aggregation exception batch", e);
-            showToast(R.string.contactSavedErrorToast);
-        } catch (OperationApplicationException e) {
+        } catch (RemoteException | OperationApplicationException e) {
             Log.e(TAG, "Failed to apply aggregation exception batch", e);
             showToast(R.string.contactSavedErrorToast);
         }
@@ -1103,6 +1178,58 @@
         deliverCallback(callbackIntent);
     }
 
+    private long[] getRawContactIdsForAggregation(long[] contactIds) {
+        if (contactIds == null) {
+            return null;
+        }
+
+        final ContentResolver resolver = getContentResolver();
+        long rawContactIds[];
+
+        final StringBuilder queryBuilder = new StringBuilder();
+        final String stringContactIds[] = new String[contactIds.length];
+        for (int i = 0; i < contactIds.length; i++) {
+            queryBuilder.append(RawContacts.CONTACT_ID + "=?");
+            stringContactIds[i] = String.valueOf(contactIds[i]);
+            if (contactIds[i] == -1) {
+                return null;
+            }
+            if (i == contactIds.length -1) {
+                break;
+            }
+            queryBuilder.append(" OR ");
+        }
+
+        final Cursor c = resolver.query(RawContacts.CONTENT_URI,
+                JoinContactQuery.PROJECTION,
+                queryBuilder.toString(),
+                stringContactIds, null);
+        if (c == null) {
+            Log.e(TAG, "Unable to open Contacts DB cursor");
+            showToast(R.string.contactSavedErrorToast);
+            return null;
+        }
+        try {
+            if (c.getCount() < 2) {
+                Log.e(TAG, "Not enough raw contacts to aggregate together.");
+                return null;
+            }
+            rawContactIds = new long[c.getCount()];
+            for (int i = 0; i < rawContactIds.length; i++) {
+                c.moveToPosition(i);
+                long rawContactId = c.getLong(JoinContactQuery._ID);
+                rawContactIds[i] = rawContactId;
+            }
+        } finally {
+            c.close();
+        }
+        return rawContactIds;
+    }
+
+    private long[] getRawContactIdsForAggregation(long contactId1, long contactId2) {
+        return getRawContactIdsForAggregation(new long[] {contactId1, contactId2});
+    }
+
     /**
      * Construct a {@link AggregationExceptions#TYPE_KEEP_TOGETHER} ContentProviderOperation.
      */
diff --git a/src/com/android/contacts/ContactsApplication.java b/src/com/android/contacts/ContactsApplication.java
index ff6a1ae..eae078e 100644
--- a/src/com/android/contacts/ContactsApplication.java
+++ b/src/com/android/contacts/ContactsApplication.java
@@ -95,15 +95,6 @@
             }
         }
 
-        if (ContactPhotoManager.CONTACT_PHOTO_SERVICE.equals(name)) {
-            if (mContactPhotoManager == null) {
-                mContactPhotoManager = ContactPhotoManager.createContactPhotoManager(this);
-                registerComponentCallbacks(mContactPhotoManager);
-                mContactPhotoManager.preloadPhotosInBackground();
-            }
-            return mContactPhotoManager;
-        }
-
         return super.getSystemService(name);
     }
 
diff --git a/src/com/android/contacts/ContactsSearchManager.java b/src/com/android/contacts/ContactsSearchManager.java
deleted file mode 100644
index 20d7c5c..0000000
--- a/src/com/android/contacts/ContactsSearchManager.java
+++ /dev/null
@@ -1,73 +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;
-
-import android.app.Activity;
-import android.content.Intent;
-import android.os.Bundle;
-import android.provider.ContactsContract;
-import android.provider.ContactsContract.Intents.UI;
-
-import com.android.contacts.list.ContactsRequest;
-
-/**
- * A convenience class that helps launch contact search from within the app.
- */
-public class ContactsSearchManager {
-
-    /**
-     * An extra that provides context for search UI and defines the scope for
-     * the search queries.
-     */
-    public static final String ORIGINAL_REQUEST_KEY = "originalRequest";
-
-    /**
-     * Starts the contact list activity in the search mode.
-     */
-    public static void startSearch(Activity context, String initialQuery) {
-        context.startActivity(buildIntent(context, initialQuery, null));
-    }
-
-    public static void startSearchForResult(Activity context, String initialQuery,
-            int requestCode, ContactsRequest originalRequest) {
-        context.startActivityForResult(
-                buildIntent(context, initialQuery, originalRequest), requestCode);
-    }
-
-    public static void startSearch(Activity context, String initialQuery,
-            ContactsRequest originalRequest) {
-        context.startActivity(buildIntent(context, initialQuery, originalRequest));
-    }
-
-    private static Intent buildIntent(
-            Activity context, String initialQuery, ContactsRequest originalRequest) {
-        Intent intent = new Intent();
-        intent.setData(ContactsContract.Contacts.CONTENT_URI);
-        intent.setAction(UI.FILTER_CONTACTS_ACTION);
-
-        Intent originalIntent = context.getIntent();
-        Bundle originalExtras = originalIntent.getExtras();
-        if (originalExtras != null) {
-            intent.putExtras(originalExtras);
-        }
-        intent.putExtra(UI.FILTER_TEXT_EXTRA_KEY, initialQuery);
-        if (originalRequest != null) {
-            intent.putExtra(ORIGINAL_REQUEST_KEY, originalRequest);
-        }
-        return intent;
-    }
-}
diff --git a/src/com/android/contacts/NonPhoneActivity.java b/src/com/android/contacts/NonPhoneActivity.java
index 652620c..05c556b 100644
--- a/src/com/android/contacts/NonPhoneActivity.java
+++ b/src/com/android/contacts/NonPhoneActivity.java
@@ -16,6 +16,9 @@
 
 package com.android.contacts;
 
+import com.android.contacts.common.activity.RequestPermissionsActivity;
+import com.android.contacts.common.util.ImplicitIntentsUtil;
+
 import android.app.Activity;
 import android.app.AlertDialog;
 import android.app.Dialog;
@@ -41,6 +44,10 @@
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
+        if (RequestPermissionsActivity.startPermissionActivity(this)) {
+            return;
+        }
+
         final String phoneNumber = getPhoneNumber();
         if (TextUtils.isEmpty(phoneNumber)) {
             finish();
@@ -85,7 +92,7 @@
                 final Intent intent = new Intent(Intent.ACTION_INSERT_OR_EDIT);
                 intent.setType(Contacts.CONTENT_ITEM_TYPE);
                 intent.putExtra(Insert.PHONE, getArgumentPhoneNumber());
-                startActivity(intent);
+                ImplicitIntentsUtil.startActivityInApp(getActivity(), intent);
             }
             dismiss();
         }
diff --git a/src/com/android/contacts/activities/ActionBarAdapter.java b/src/com/android/contacts/activities/ActionBarAdapter.java
index 4b9e83f..5a95c90 100644
--- a/src/com/android/contacts/activities/ActionBarAdapter.java
+++ b/src/com/android/contacts/activities/ActionBarAdapter.java
@@ -18,6 +18,7 @@
 
 import android.animation.ValueAnimator;
 import android.app.ActionBar;
+import android.app.Activity;
 import android.content.Context;
 import android.content.SharedPreferences;
 import android.content.res.TypedArray;
@@ -26,13 +27,17 @@
 import android.text.Editable;
 import android.text.TextUtils;
 import android.text.TextWatcher;
+import android.view.Gravity;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
 import android.view.inputmethod.InputMethodManager;
+import android.widget.FrameLayout;
+import android.widget.LinearLayout.LayoutParams;
 import android.widget.SearchView.OnCloseListener;
 import android.view.View.OnClickListener;
 import android.widget.EditText;
+import android.widget.TextView;
 import android.widget.Toolbar;
 
 import com.android.contacts.R;
@@ -48,7 +53,9 @@
         public abstract class Action {
             public static final int CHANGE_SEARCH_QUERY = 0;
             public static final int START_SEARCH_MODE = 1;
-            public static final int STOP_SEARCH_MODE = 2;
+            public static final int START_SELECTION_MODE = 2;
+            public static final int STOP_SEARCH_AND_SELECTION_MODE = 3;
+            public static final int BEGIN_STOPPING_SEARCH_AND_SELECTION_MODE = 4;
         }
 
         void onAction(int action);
@@ -65,29 +72,38 @@
     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 final Context mContext;
+    private final Activity mActivity;
     private final SharedPreferences mPrefs;
 
     private Listener mListener;
 
     private final ActionBar mActionBar;
     private final Toolbar mToolbar;
+    /**
+     *  Frame that contains the toolbar and draws the toolbar's background color. This is useful
+     *  for placing things behind the toolbar.
+     */
+    private final FrameLayout mToolBarFrame;
 
     private boolean mShowHomeIcon;
 
@@ -101,20 +117,21 @@
 
     private int mCurrentTab = TabState.DEFAULT;
 
-    public ActionBarAdapter(Context context, Listener listener, ActionBar actionBar,
+    public ActionBarAdapter(Activity activity, Listener listener, ActionBar actionBar,
             View portraitTabs, View landscapeTabs, Toolbar toolbar) {
-        mContext = context;
+        mActivity = activity;
         mListener = listener;
         mActionBar = actionBar;
-        mPrefs = PreferenceManager.getDefaultSharedPreferences(mContext);
+        mPrefs = PreferenceManager.getDefaultSharedPreferences(mActivity);
         mPortraitTabs = portraitTabs;
         mLandscapeTabs = landscapeTabs;
         mToolbar = toolbar;
+        mToolBarFrame = (FrameLayout) mToolbar.getParent();
         mMaxToolbarContentInsetStart = mToolbar.getContentInsetStart();
-        mShowHomeIcon = mContext.getResources().getBoolean(R.bool.show_home_icon);
+        mShowHomeIcon = mActivity.getResources().getBoolean(R.bool.show_home_icon);
 
-        setupSearchView();
-        setupTabs(context);
+        setupSearchAndSelectionViews();
+        setupTabs(mActivity);
     }
 
     private void setupTabs(Context context) {
@@ -125,26 +142,20 @@
         setPortraitTabHeight(0);
     }
 
-    private void setupSearchView() {
+    private void setupSearchAndSelectionViews() {
         final LayoutInflater inflater = (LayoutInflater) mToolbar.getContext().getSystemService(
                 Context.LAYOUT_INFLATER_SERVICE);
+
+        // Setup search bar
         mSearchContainer = inflater.inflate(R.layout.search_bar_expanded, mToolbar,
                 /* attachToRoot = */ false);
         mSearchContainer.setVisibility(View.VISIBLE);
         mToolbar.addView(mSearchContainer);
-
-        mSearchContainer.setBackgroundColor(mContext.getResources().getColor(
+        mSearchContainer.setBackgroundColor(mActivity.getResources().getColor(
                 R.color.searchbox_background_color));
         mSearchView = (EditText) mSearchContainer.findViewById(R.id.search_view);
-        mSearchView.setHint(mContext.getString(R.string.hint_findContacts));
+        mSearchView.setHint(mActivity.getString(R.string.hint_findContacts));
         mSearchView.addTextChangedListener(new SearchTextWatcher());
-        mSearchContainer.findViewById(R.id.search_close_button).setOnClickListener(
-                new OnClickListener() {
-            @Override
-            public void onClick(View v) {
-                setQueryString(null);
-            }
-        });
         mSearchContainer.findViewById(R.id.search_back_button).setOnClickListener(
                 new OnClickListener() {
             @Override
@@ -154,6 +165,31 @@
                 }
             }
         });
+
+        mClearSearchView = mSearchContainer.findViewById(R.id.search_close_button);
+        mClearSearchView.setOnClickListener(
+                new OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                setQueryString(null);
+            }
+        });
+
+        // Setup selection bar
+        mSelectionContainer = inflater.inflate(R.layout.selection_bar, mToolbar,
+                /* attachToRoot = */ false);
+        // Insert the selection container into mToolBarFrame behind the Toolbar, so that
+        // the Toolbar's MenuItems can appear on top of the selection container.
+        mToolBarFrame.addView(mSelectionContainer, 0);
+        mSelectionContainer.findViewById(R.id.selection_close).setOnClickListener(
+                new OnClickListener() {
+                    @Override
+                    public void onClick(View v) {
+                        if (mListener != null) {
+                            mListener.onUpButtonPressed();
+                        }
+                    }
+                });
     }
 
     public void initialize(Bundle savedState, ContactsRequest request) {
@@ -161,8 +197,10 @@
             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().
@@ -201,6 +239,8 @@
             } else if (mListener != null) {
                 mListener.onAction(Action.CHANGE_SEARCH_QUERY);
             }
+            mClearSearchView.setVisibility(
+                    TextUtils.isEmpty(queryString) ? View.GONE : View.VISIBLE);
         }
 
         @Override
@@ -244,6 +284,13 @@
         return mSearchMode;
     }
 
+    /**
+     * @return Whether in selection mode, i.e. if the selection view is visible/expanded.
+     */
+    public boolean isSelectionMode() {
+        return mSelectionMode;
+    }
+
     public void setSearchMode(boolean flag) {
         if (mSearchMode != flag) {
             mSearchMode = flag;
@@ -265,6 +312,13 @@
         }
     }
 
+    public void setSelectionMode(boolean flag) {
+        if (mSelectionMode != flag) {
+            mSelectionMode = flag;
+            update(false /* skipAnimation */);
+        }
+    }
+
     public String getQueryString() {
         return mSearchMode ? mQueryString : null;
     }
@@ -288,25 +342,43 @@
     private void updateDisplayOptionsInner() {
         // All the flags we may change in this method.
         final int MASK = ActionBar.DISPLAY_SHOW_TITLE | ActionBar.DISPLAY_SHOW_HOME
-                | ActionBar.DISPLAY_HOME_AS_UP | ActionBar.DISPLAY_SHOW_CUSTOM;
+                | ActionBar.DISPLAY_HOME_AS_UP;
 
         // The current flags set to the action bar.  (only the ones that we may change here)
         final int current = mActionBar.getDisplayOptions() & MASK;
 
+        final boolean isSearchOrSelectionMode = mSearchMode || mSelectionMode;
+
         // Build the new flags...
         int newFlags = 0;
-        if (mShowHomeIcon && !mSearchMode) {
+        if (mShowHomeIcon && !isSearchOrSelectionMode) {
             newFlags |= ActionBar.DISPLAY_SHOW_HOME;
         }
-        if (mSearchMode) {
-            newFlags |= ActionBar.DISPLAY_SHOW_CUSTOM;
+        if (mSearchMode && !mSelectionMode) {
+            // The search container is placed inside the toolbar. So we need to disable the
+            // Toolbar's content inset in order to allow the search container to be the width of
+            // the window.
             mToolbar.setContentInsetsRelative(0, mToolbar.getContentInsetEnd());
-        } else {
+        }
+        if (!isSearchOrSelectionMode) {
             newFlags |= ActionBar.DISPLAY_SHOW_TITLE;
             mToolbar.setContentInsetsRelative(mMaxToolbarContentInsetStart,
                     mToolbar.getContentInsetEnd());
         }
 
+        if (mSelectionMode) {
+            // Minimize the horizontal width of the Toolbar since the selection container is placed
+            // behind the toolbar and its left hand side needs to be clickable.
+            FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) mToolbar.getLayoutParams();
+            params.width = LayoutParams.WRAP_CONTENT;
+            params.gravity = Gravity.END;
+            mToolbar.setLayoutParams(params);
+        } else {
+            FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) mToolbar.getLayoutParams();
+            params.width = LayoutParams.MATCH_PARENT;
+            params.gravity = Gravity.END;
+            mToolbar.setLayoutParams(params);
+        }
 
         if (current != newFlags) {
             // Pass the mask here to preserve other flags that we're not interested here.
@@ -315,43 +387,108 @@
     }
 
     private void update(boolean skipAnimation) {
-        final boolean isIconifiedChanging
+        updateStatusBarColor();
+
+        final boolean isSelectionModeChanging
+                = (mSelectionContainer.getParent() == null) == mSelectionMode;
+        final boolean isSwitchingFromSearchToSelection =
+                mSearchMode && isSelectionModeChanging || mSearchMode && mSelectionMode;
+        final boolean isSearchModeChanging
                 = (mSearchContainer.getParent() == null) == mSearchMode;
-        if (isIconifiedChanging && !skipAnimation) {
+        final boolean isTabHeightChanging = isSearchModeChanging || isSelectionModeChanging;
+
+        // When skipAnimation=true, it is possible that we will switch from search mode
+        // to selection mode directly. So we need to remove the undesired container in addition
+        // 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);
+            }
+            return;
+        }
+
+        // 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);
+                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).withEndAction(new Runnable() {
+                    @Override
+                    public void run() {
+                        updateDisplayOptions(isSearchModeChanging);
+                        addLandscapeViewPagerTabs();
+                        mToolBarFrame.removeView(mSelectionContainer);
+                    }
+                });
+            }
+        }
+
+        // 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);
                 animateTabHeightChange(mMaxPortraitTabHeight, 0);
-                updateDisplayOptions(isIconifiedChanging);
+                updateDisplayOptions(isSearchModeChanging);
             } else {
                 mSearchContainer.setAlpha(1);
                 animateTabHeightChange(0, mMaxPortraitTabHeight);
                 mSearchContainer.animate().alpha(0).withEndAction(new Runnable() {
                     @Override
                     public void run() {
-                        updateDisplayOptionsInner();
-                        updateDisplayOptions(isIconifiedChanging);
+                        updateDisplayOptions(isSearchModeChanging);
                         addLandscapeViewPagerTabs();
                         mToolbar.removeView(mSearchContainer);
                     }
                 });
             }
-            return;
         }
-        if (isIconifiedChanging && skipAnimation) {
-            mToolbar.removeView(mLandscapeTabs);
-            if (mSearchMode) {
-                setPortraitTabHeight(0);
-                addSearchContainer();
-            } else {
-                setPortraitTabHeight(mMaxPortraitTabHeight);
-                mToolbar.removeView(mSearchContainer);
-                addLandscapeViewPagerTabs();
-            }
+    }
+
+    public void setSelectionCount(int selectionCount) {
+        TextView textView = (TextView) mSelectionContainer.findViewById(R.id.selection_count_text);
+        if (selectionCount == 0) {
+            textView.setVisibility(View.GONE);
+        } else {
+            textView.setVisibility(View.VISIBLE);
         }
-        updateDisplayOptions(isIconifiedChanging);
+        textView.setText(String.valueOf(selectionCount));
+    }
+
+    private void updateStatusBarColor() {
+        if (mSelectionMode) {
+            int cabStatusBarColor = mActivity.getResources().getColor(
+                    R.color.contextual_selection_bar_status_bar_color);
+            mActivity.getWindow().setStatusBarColor(cabStatusBarColor);
+        } else {
+            int normalStatusBarColor = mActivity.getColor(R.color.primary_color_dark);
+            mActivity.getWindow().setStatusBarColor(normalStatusBarColor);
+        }
     }
 
     private void addLandscapeViewPagerTabs() {
@@ -364,26 +501,37 @@
     private void addSearchContainer() {
         mToolbar.removeView(mSearchContainer);
         mToolbar.addView(mSearchContainer);
+        mSearchContainer.setAlpha(1);
     }
 
-    private void updateDisplayOptions(boolean isIconifiedChanging) {
-        if (mSearchMode) {
+    private void addSelectionContainer() {
+        mToolBarFrame.removeView(mSelectionContainer);
+        mToolBarFrame.addView(mSelectionContainer, 0);
+        mSelectionContainer.setAlpha(1);
+    }
+
+    private void updateDisplayOptions(boolean isSearchModeChanging) {
+        if (mSearchMode && !mSelectionMode) {
             setFocusOnSearchView();
             // Since we have the {@link SearchView} in a custom action bar, we must manually handle
             // expanding the {@link SearchView} when a search is initiated. Note that a side effect
             // of this method is that the {@link SearchView} query text is set to empty string.
-            if (isIconifiedChanging) {
+            if (isSearchModeChanging) {
                 final CharSequence queryText = mSearchView.getText();
                 if (!TextUtils.isEmpty(queryText)) {
                     mSearchView.setText(queryText);
                 }
             }
-            if (mListener != null) {
+        }
+        if (mListener != null) {
+            if (mSearchMode) {
                 mListener.onAction(Action.START_SEARCH_MODE);
             }
-        } else {
-            if (mListener != null) {
-                mListener.onAction(Action.STOP_SEARCH_MODE);
+            if (mSelectionMode) {
+                mListener.onAction(Action.START_SELECTION_MODE);
+            }
+            if (!mSearchMode && !mSelectionMode) {
+                mListener.onAction(Action.STOP_SEARCH_AND_SELECTION_MODE);
                 mListener.onSelectedTabChanged();
             }
         }
@@ -398,6 +546,7 @@
 
     public void onSaveInstanceState(Bundle outState) {
         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);
     }
@@ -408,7 +557,7 @@
     }
 
     private void showInputMethod(View view) {
-        final InputMethodManager imm = (InputMethodManager) mContext.getSystemService(
+        final InputMethodManager imm = (InputMethodManager) mActivity.getSystemService(
                 Context.INPUT_METHOD_SERVICE);
         if (imm != null) {
             imm.showSoftInput(view, 0);
diff --git a/src/com/android/contacts/activities/AttachPhotoActivity.java b/src/com/android/contacts/activities/AttachPhotoActivity.java
index 3196f87..cf3bfc8 100644
--- a/src/com/android/contacts/activities/AttachPhotoActivity.java
+++ b/src/com/android/contacts/activities/AttachPhotoActivity.java
@@ -23,6 +23,8 @@
 import android.content.Intent;
 import android.content.Loader;
 import android.content.Loader.OnLoadCompleteListener;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
 import android.database.Cursor;
 import android.graphics.Bitmap;
 import android.net.Uri;
@@ -38,6 +40,7 @@
 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.Contact;
 import com.android.contacts.common.model.ContactLoader;
 import com.android.contacts.common.model.RawContactDelta;
@@ -51,6 +54,7 @@
 import com.android.contacts.util.ContactPhotoUtils;
 
 import java.io.FileNotFoundException;
+import java.util.List;
 
 /**
  * Provides an external interface for other applications to attach images
@@ -85,6 +89,10 @@
     public void onCreate(Bundle icicle) {
         super.onCreate(icicle);
 
+        if (RequestPermissionsActivity.startPermissionActivity(this)) {
+            return;
+        }
+
         if (icicle != null) {
             final String uri = icicle.getString(KEY_CONTACT_URI);
             mContactUri = (uri == null) ? null : Uri.parse(uri);
@@ -143,7 +151,8 @@
             }
             // If there's an account specified, use it.
             if (result != null) {
-                AccountWithDataSet account = result.getParcelableExtra(Intents.Insert.ACCOUNT);
+                AccountWithDataSet account = result.getParcelableExtra(
+                        Intents.Insert.EXTRA_ACCOUNT);
                 if (account != null) {
                     createNewRawContact(account);
                     return;
@@ -161,20 +170,35 @@
             final Intent myIntent = getIntent();
             final Uri inputUri = myIntent.getData();
 
-            final Uri toCrop;
+
             // Save the URI into a temporary file provider URI so that
             // we can add the FLAG_GRANT_WRITE_URI_PERMISSION flag to the eventual
             // crop intent for read-only URI's.
             // TODO: With b/10837468 fixed should be able to avoid this copy.
-            ContactPhotoUtils.savePhotoFromUriToUri(this, inputUri, mTempPhotoUri, false);
-            toCrop = mTempPhotoUri;
+            if (!ContactPhotoUtils.savePhotoFromUriToUri(this, inputUri, mTempPhotoUri, false)) {
+                finish();
+                return;
+            }
 
-            final Intent intent = new Intent("com.android.camera.action.CROP", toCrop);
+            final Intent intent = new Intent("com.android.camera.action.CROP", mTempPhotoUri);
             if (myIntent.getStringExtra("mimeType") != null) {
-                intent.setDataAndType(toCrop, myIntent.getStringExtra("mimeType"));
+                intent.setDataAndType(mTempPhotoUri, myIntent.getStringExtra("mimeType"));
             }
             ContactPhotoUtils.addPhotoPickerExtras(intent, mCroppedPhotoUri);
             ContactPhotoUtils.addCropExtras(intent, mPhotoDim != 0 ? mPhotoDim : mDefaultPhotoDim);
+            if (!hasIntentHandler(intent)) {
+                // No activity supports the crop action. So skip cropping and set the photo
+                // without performing any cropping.
+                mCroppedPhotoUri = mTempPhotoUri;
+                mContactUri = result.getData();
+                loadContact(mContactUri, new Listener() {
+                    @Override
+                    public void onContactLoaded(Contact contact) {
+                        saveContact(contact);
+                    }
+                });
+                return;
+            }
 
             try {
                 startActivityForResult(intent, REQUEST_CROP_PHOTO);
@@ -202,6 +226,12 @@
         }
     }
 
+    private boolean hasIntentHandler(Intent intent) {
+        final List<ResolveInfo> resolveInfo = getPackageManager()
+                .queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
+        return resolveInfo != null && resolveInfo.size() > 0;
+    }
+
     // TODO: consider moving this to ContactLoader, especially if we keep adding similar
     // code elsewhere (ViewNotificationService is another case).  The only concern is that,
     // although this is convenient, it isn't quite as robust as using LoaderManager... for
@@ -321,11 +351,7 @@
             // 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 = editorUtils.getDefaultAccount();
-            if (defaultAccount == null) {
-                createNewRawContact(null);
-            } else {
-                createNewRawContact(defaultAccount);
-            }
+            createNewRawContact(defaultAccount);
         }
     }
 
diff --git a/src/com/android/contacts/activities/CompactContactEditorActivity.java b/src/com/android/contacts/activities/CompactContactEditorActivity.java
new file mode 100644
index 0000000..c45c261
--- /dev/null
+++ b/src/com/android/contacts/activities/CompactContactEditorActivity.java
@@ -0,0 +1,66 @@
+/*
+ * 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 com.android.contacts.R;
+import com.android.contacts.editor.CompactContactEditorFragment;
+import com.android.contacts.common.activity.RequestPermissionsActivity;
+
+import android.content.Intent;
+import android.net.Uri;
+import android.os.Bundle;
+
+/**
+ * Contact editor with only the most important fields displayed initially.
+ */
+public class CompactContactEditorActivity extends ContactEditorBaseActivity {
+
+    private static final String TAG_COMPACT_EDITOR = "compact_editor";
+
+    @Override
+    public void onCreate(Bundle savedState) {
+        super.onCreate(savedState);
+
+        if (RequestPermissionsActivity.startPermissionActivity(this)) {
+            return;
+        }
+
+        setContentView(R.layout.compact_contact_editor_activity);
+
+        mFragment = (CompactContactEditorFragment) getFragmentManager().findFragmentByTag(
+                TAG_COMPACT_EDITOR);
+        if (mFragment == null) {
+            mFragment = new CompactContactEditorFragment();
+            getFragmentManager().beginTransaction()
+                    .add(R.id.compact_contact_editor_fragment_container,
+                            (CompactContactEditorFragment) mFragment, TAG_COMPACT_EDITOR)
+                    .commit();
+        }
+        mFragment.setListener(mFragmentListener);
+
+        final String action = getIntent().getAction();
+        final Uri uri = Intent.ACTION_EDIT.equals(action) ? getIntent().getData() : null;
+        mFragment.load(action, uri, getIntent().getExtras());
+    }
+
+    @Override
+    public void onBackPressed() {
+        if (mFragment != null) {
+            mFragment.save(ContactEditor.SaveMode.CLOSE, /* backPressed =*/ true);
+        }
+    }
+}
diff --git a/src/com/android/contacts/activities/ConfirmAddDetailActivity.java b/src/com/android/contacts/activities/ConfirmAddDetailActivity.java
index e3fa7e2..f4e8c78 100644
--- a/src/com/android/contacts/activities/ConfirmAddDetailActivity.java
+++ b/src/com/android/contacts/activities/ConfirmAddDetailActivity.java
@@ -495,6 +495,9 @@
                             if (photoId == 0) {
                                 mContactId = cursor.getLong(ContactQuery._ID);
                                 startDisambiguationQuery(mDisplayName);
+                            } else if (TextUtils.isEmpty(mLookupKey)) {
+                                finish();
+                                return;
                             } else {
                                 // Otherwise do the photo query.
                                 Uri lookupUri = Contacts.getLookupUri(mContactId, mLookupKey);
diff --git a/src/com/android/contacts/activities/ContactEditorAccountsChangedActivity.java b/src/com/android/contacts/activities/ContactEditorAccountsChangedActivity.java
index bf3b1c1..a922ca1 100644
--- a/src/com/android/contacts/activities/ContactEditorAccountsChangedActivity.java
+++ b/src/com/android/contacts/activities/ContactEditorAccountsChangedActivity.java
@@ -185,7 +185,7 @@
 
         // Pass account info in activity result intent
         Intent intent = new Intent();
-        intent.putExtra(Intents.Insert.ACCOUNT, account);
+        intent.putExtra(Intents.Insert.EXTRA_ACCOUNT, account);
         setResult(RESULT_OK, intent);
         finish();
     }
diff --git a/src/com/android/contacts/activities/ContactEditorActivity.java b/src/com/android/contacts/activities/ContactEditorActivity.java
index c350da9..800a267 100644
--- a/src/com/android/contacts/activities/ContactEditorActivity.java
+++ b/src/com/android/contacts/activities/ContactEditorActivity.java
@@ -16,243 +16,45 @@
 
 package com.android.contacts.activities;
 
-import android.app.ActionBar;
-import android.app.Dialog;
-import android.content.ContentValues;
-import android.content.Context;
+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;
-import android.provider.ContactsContract;
-import android.provider.ContactsContract.Contacts;
-import android.provider.ContactsContract.RawContacts;
-import android.util.Log;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.View.OnClickListener;
-import android.widget.TextView;
 
-import com.android.contacts.ContactSaveService;
-import com.android.contacts.ContactsActivity;
-import com.android.contacts.R;
-import com.android.contacts.editor.ContactEditorFragment;
-import com.android.contacts.editor.ContactEditorFragment.SaveMode;
-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.interactions.ContactDeletionInteraction;
-import com.android.contacts.util.DialogManager;
-
-import java.util.ArrayList;
-
-public class ContactEditorActivity extends ContactsActivity
+/**
+ * Contact editor with all fields displayed.
+ */
+public class ContactEditorActivity extends ContactEditorBaseActivity
         implements DialogManager.DialogShowingViewActivity {
-    private static final String TAG = "ContactEditorActivity";
-
-    public static final String ACTION_JOIN_COMPLETED = "joinCompleted";
-    public static final String ACTION_SAVE_COMPLETED = "saveCompleted";
-
-    /**
-     * 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";
-
-    private ContactEditorFragment 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();
+        if (RequestPermissionsActivity.startPermissionActivity(this)) {
             return;
         }
 
         setContentView(R.layout.contact_editor_activity);
 
-        ActionBar actionBar = getActionBar();
-        if (actionBar != null) {
-            if (Intent.ACTION_EDIT.equals(action)) {
-                actionBar.setTitle(getResources().getString(
-                        R.string.contact_editor_title_existing_contact));
-            } else {
-                actionBar.setTitle(getResources().getString(
-                        R.string.contact_editor_title_new_contact));
-            }
-            actionBar.setDisplayShowHomeEnabled(true);
-            actionBar.setDisplayHomeAsUpEnabled(true);
-        }
-
         mFragment = (ContactEditorFragment) getFragmentManager().findFragmentById(
                 R.id.contact_editor_fragment);
         mFragment.setListener(mFragmentListener);
-        Uri uri = Intent.ACTION_EDIT.equals(action) ? getIntent().getData() : null;
+
+        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());
     }
 
     @Override
-    protected void onNewIntent(Intent intent) {
-        super.onNewIntent(intent);
-
-        if (mFragment == null) {
-            return;
-        }
-
-        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(ContactEditorFragment.SAVE_MODE_EXTRA_KEY, SaveMode.CLOSE),
-                    intent.getBooleanExtra(ContactSaveService.EXTRA_SAVE_SUCCEEDED, false),
-                    intent.getData());
-        } 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() {
-        mFragment.save(SaveMode.CLOSE);
-    }
-
-    private final ContactEditorFragment.Listener mFragmentListener =
-            new ContactEditorFragment.Listener() {
-
-        @Override
-        public void onDeleteRequested(Uri contactUri) {
-            ContactDeletionInteraction.start(ContactEditorActivity.this, contactUri, true);
+        if (mFragment != null) {
+            mFragment.save(ContactEditor.SaveMode.COMPACT, /* backPressed =*/ 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) {
-                startActivity(resultIntent);
-            }
-            finish();
-        }
-
-        @Override
-        public void onContactSplit(Uri newLookupUri) {
-            finish();
-        }
-
-        @Override
-        public void onContactNotFound() {
-            finish();
-        }
-
-        @Override
-        public void onEditOtherContactRequested(
-                Uri contactLookupUri, ArrayList<ContentValues> values) {
-            Intent intent = new Intent(Intent.ACTION_EDIT, contactLookupUri);
-            intent.setFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
-                    | Intent.FLAG_ACTIVITY_FORWARD_RESULT);
-            intent.putExtra(ContactEditorFragment.INTENT_EXTRA_ADD_TO_DEFAULT_DIRECTORY, "");
-
-            // Pass on all the data that has been entered so far
-            if (values != null && values.size() != 0) {
-                intent.putParcelableArrayListExtra(ContactsContract.Intents.Insert.DATA, values);
-            }
-
-            startActivity(intent);
-            finish();
-        }
-
-        @Override
-        public void onCustomCreateContactActivityRequested(AccountWithDataSet account,
-                Bundle intentExtras) {
-            final AccountTypeManager accountTypes =
-                    AccountTypeManager.getInstance(ContactEditorActivity.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(ContactEditorActivity.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/ContactEditorBaseActivity.java b/src/com/android/contacts/activities/ContactEditorBaseActivity.java
new file mode 100644
index 0000000..41b0c6b
--- /dev/null
+++ b/src/com/android/contacts/activities/ContactEditorBaseActivity.java
@@ -0,0 +1,365 @@
+/*
+ * 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 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 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 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.google.android.contacts.action.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.google.android.contacts.action.INSERT";
+
+    public static final String ACTION_JOIN_COMPLETED = "joinCompleted";
+    public static final String ACTION_SAVE_COMPLETED = "saveCompleted";
+
+    /**
+     * 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.
+         *
+         * @param backPressed whether the save was initiated as a result of a back button press
+         *         or because the framework stopped the editor Activity
+         */
+        boolean save(int saveMode, boolean backPressed);
+
+        /**
+         * Invoked after the contact is saved.
+         */
+        void onSaveCompleted(boolean hadChanges, int saveMode, boolean saveSucceeded,
+                Uri contactLookupUri, Bundle updatedPhotos, boolean backPressed);
+
+        /**
+         * 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)) {
+                actionBar.setTitle(getResources().getString(
+                        R.string.contact_editor_title_existing_contact));
+            } else {
+                actionBar.setTitle(getResources().getString(
+                        R.string.contact_editor_title_new_contact));
+            }
+            actionBar.setDisplayShowHomeEnabled(true);
+            actionBar.setDisplayHomeAsUpEnabled(true);
+        }
+    }
+
+    @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(),
+                    (Bundle) intent.getParcelableExtra(ContactSaveService.EXTRA_UPDATED_PHOTOS),
+                    intent.getBooleanExtra(ContactEditorFragment.INTENT_EXTRA_SAVE_BACK_PRESSED,
+                            false));
+        } 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;
+    }
+
+    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) {
+            final boolean backPressed = resultIntent == null ? false : resultIntent.getBooleanExtra(
+                    ContactEditorBaseFragment.INTENT_EXTRA_SAVE_BACK_PRESSED, false);
+            if (mFinishActivityOnSaveCompleted) {
+                setResult(resultIntent == null ? RESULT_CANCELED : RESULT_OK, resultIntent);
+            } else if (resultIntent != null) {
+                if (backPressed) {
+                    ImplicitIntentsUtil.startActivityInApp(ContactEditorBaseActivity.this,
+                            resultIntent);
+                }
+            }
+            finish();
+        }
+
+        @Override
+        public void onContactSplit(Uri newLookupUri) {
+            finish();
+        }
+
+        @Override
+        public void onContactNotFound() {
+            finish();
+        }
+
+        @Override
+        public void onEditOtherContactRequested(
+                Uri contactLookupUri, ArrayList<ContentValues> values) {
+            final Intent intent = EditorIntents.createEditOtherContactIntent(
+                    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 53f685c..e147b76 100644
--- a/src/com/android/contacts/activities/ContactSelectionActivity.java
+++ b/src/com/android/contacts/activities/ContactSelectionActivity.java
@@ -27,7 +27,6 @@
 import android.os.Bundle;
 import android.provider.ContactsContract.Contacts;
 import android.provider.ContactsContract.Intents.Insert;
-import android.provider.ContactsContract.Intents.UI;
 import android.text.TextUtils;
 import android.util.Log;
 import android.view.LayoutInflater;
@@ -45,7 +44,9 @@
 
 import com.android.contacts.ContactsActivity;
 import com.android.contacts.R;
+import com.android.contacts.common.activity.RequestPermissionsActivity;
 import com.android.contacts.common.list.ContactEntryListFragment;
+import com.android.contacts.common.util.ImplicitIntentsUtil;
 import com.android.contacts.list.ContactPickerFragment;
 import com.android.contacts.list.ContactsIntentResolver;
 import com.android.contacts.list.ContactsRequest;
@@ -55,6 +56,7 @@
 import com.android.contacts.list.LegacyPhoneNumberPickerFragment;
 import com.android.contacts.list.OnContactPickerActionListener;
 import com.android.contacts.list.OnEmailAddressPickerActionListener;
+import com.android.contacts.list.UiIntentActions;
 import com.android.contacts.common.list.OnPhoneNumberPickerActionListener;
 import com.android.contacts.list.OnPostalAddressPickerActionListener;
 import com.android.contacts.common.list.PhoneNumberPickerFragment;
@@ -105,6 +107,10 @@
     protected void onCreate(Bundle savedState) {
         super.onCreate(savedState);
 
+        if (RequestPermissionsActivity.startPermissionActivity(this)) {
+            return;
+        }
+
         if (savedState != null) {
             mActionCode = savedState.getInt(KEY_ACTION_CODE);
             mIsSearchMode = savedState.getBoolean(KEY_SEARCH_MODE);
@@ -118,14 +124,6 @@
             return;
         }
 
-        Intent redirect = mRequest.getRedirectIntent();
-        if (redirect != null) {
-            // Need to start a different activity
-            startActivity(redirect);
-            finish();
-            return;
-        }
-
         configureActivityTitle();
 
         setContentView(R.layout.contact_picker);
@@ -616,10 +614,11 @@
 
     private long getTargetContactId() {
         Intent intent = getIntent();
-        final long targetContactId = intent.getLongExtra(UI.TARGET_CONTACT_ID_EXTRA_KEY, -1);
+        final long targetContactId = intent.getLongExtra(
+                UiIntentActions.TARGET_CONTACT_ID_EXTRA_KEY, -1);
         if (targetContactId == -1) {
             Log.e(TAG, "Intent " + intent.getAction() + " is missing required extra: "
-                    + UI.TARGET_CONTACT_ID_EXTRA_KEY);
+                    + UiIntentActions.TARGET_CONTACT_ID_EXTRA_KEY);
             setResult(RESULT_CANCELED);
             finish();
             return -1;
@@ -649,7 +648,7 @@
         if (requestCode == SUBACTIVITY_ADD_TO_EXISTING_CONTACT) {
             if (resultCode == Activity.RESULT_OK) {
                 if (data != null) {
-                    startActivity(data);
+                    ImplicitIntentsUtil.startActivityInAppIfPossible(this, data);
                 }
                 finish();
             }
diff --git a/src/com/android/contacts/activities/GroupDetailActivity.java b/src/com/android/contacts/activities/GroupDetailActivity.java
index c24a42f..394e5e5 100644
--- a/src/com/android/contacts/activities/GroupDetailActivity.java
+++ b/src/com/android/contacts/activities/GroupDetailActivity.java
@@ -31,6 +31,7 @@
 
 import com.android.contacts.ContactsActivity;
 import com.android.contacts.R;
+import com.android.contacts.common.util.ImplicitIntentsUtil;
 import com.android.contacts.group.GroupDetailDisplayUtils;
 import com.android.contacts.group.GroupDetailFragment;
 import com.android.contacts.common.model.AccountTypeManager;
@@ -106,7 +107,7 @@
         @Override
         public void onContactSelected(Uri contactUri) {
             Intent intent = new Intent(Intent.ACTION_VIEW, contactUri);
-            startActivity(intent);
+            ImplicitIntentsUtil.startActivityInApp(GroupDetailActivity.this, intent);
         }
 
     };
@@ -149,7 +150,7 @@
                 final Intent intent = new Intent(Intent.ACTION_VIEW, uri);
                 intent.setClassName(accountType.syncAdapterPackageName,
                         accountType.getViewGroupActivity());
-                startActivity(intent);
+                ImplicitIntentsUtil.startActivityInApp(GroupDetailActivity.this, intent);
             }
         });
         groupSourceMenuItem.setActionView(groupSourceView);
diff --git a/src/com/android/contacts/activities/PeopleActivity.java b/src/com/android/contacts/activities/PeopleActivity.java
index 6d8d231..1591866 100644
--- a/src/com/android/contacts/activities/PeopleActivity.java
+++ b/src/com/android/contacts/activities/PeopleActivity.java
@@ -20,6 +20,8 @@
 import android.app.FragmentManager;
 import android.app.FragmentTransaction;
 import android.content.ActivityNotFoundException;
+import android.content.ContentUris;
+import android.content.Context;
 import android.content.Intent;
 import android.graphics.Rect;
 import android.net.Uri;
@@ -30,7 +32,6 @@
 import android.provider.ContactsContract;
 import android.provider.ContactsContract.Contacts;
 import android.provider.ContactsContract.ProviderStatus;
-import android.provider.ContactsContract.QuickContact;
 import android.provider.Settings;
 import android.support.v13.app.FragmentPagerAdapter;
 import android.support.v4.view.PagerAdapter;
@@ -53,18 +54,27 @@
 import com.android.contacts.R;
 import com.android.contacts.activities.ActionBarAdapter.TabState;
 import com.android.contacts.common.ContactsUtils;
+import com.android.contacts.common.activity.RequestPermissionsActivity;
 import com.android.contacts.common.dialog.ClearFrequentsDialog;
+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.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.ContactTileAdapter.DisplayType;
+import com.android.contacts.interactions.ContactMultiDeletionInteraction;
+import com.android.contacts.interactions.ContactMultiDeletionInteraction.MultiContactDeleteListener;
+import com.android.contacts.interactions.JoinContactsDialogFragment;
+import com.android.contacts.interactions.JoinContactsDialogFragment.JoinContactsListener;
+import com.android.contacts.list.MultiSelectContactsListFragment;
+import com.android.contacts.list.MultiSelectContactsListFragment.OnCheckBoxListActionListener;
 import com.android.contacts.list.ContactTileListFragment;
 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.common.list.DirectoryListLoader;
 import com.android.contacts.common.preference.DisplayOptionsPreferenceFragment;
 import com.android.contacts.list.OnContactBrowserActionListener;
@@ -79,8 +89,9 @@
 import com.android.contacts.util.AccountPromptUtils;
 import com.android.contacts.common.util.Constants;
 import com.android.contacts.util.DialogManager;
-import com.android.contacts.util.HelpUtils;
+import com.android.contactsbind.HelpUtils;
 
+import java.util.List;
 import java.util.Locale;
 import java.util.concurrent.atomic.AtomicInteger;
 
@@ -93,7 +104,9 @@
         ActionBarAdapter.Listener,
         DialogManager.DialogShowingViewActivity,
         ContactListFilterController.ContactListFilterListener,
-        ProviderStatusListener {
+        ProviderStatusListener,
+        MultiContactDeleteListener,
+        JoinContactsListener {
 
     private static final String TAG = "PeopleActivity";
 
@@ -108,6 +121,9 @@
     private ContactsRequest mRequest;
 
     private ActionBarAdapter mActionBarAdapter;
+    private FloatingActionButtonController mFloatingActionButtonController;
+    private View mFloatingActionButtonContainer;
+    private boolean wasLastFabAnimationScaleIn = false;
 
     private ContactTileListFragment.Listener mFavoritesFragmentListener =
             new StrequentContactListFragmentListener();
@@ -116,14 +132,14 @@
 
     private ContactsUnavailableFragment mContactsUnavailableFragment;
     private ProviderStatusWatcher mProviderStatusWatcher;
-    private ProviderStatusWatcher.Status mProviderStatus;
+    private Integer mProviderStatus;
 
     private boolean mOptionsMenuContactsAvailable;
 
     /**
      * Showing a list of Contacts. Also used for showing search results in search mode.
      */
-    private DefaultContactBrowseListFragment mAllFragment;
+    private MultiSelectContactsListFragment mAllFragment;
     private ContactTileListFragment mFavoritesFragment;
 
     /** ViewPager for swipe */
@@ -172,7 +188,7 @@
 
     public boolean areContactsAvailable() {
         return (mProviderStatus != null)
-                && mProviderStatus.status == ProviderStatus.STATUS_NORMAL;
+                && mProviderStatus.equals(ProviderStatus.STATUS_NORMAL);
     }
 
     private boolean areContactWritableAccountsAvailable() {
@@ -210,6 +226,10 @@
         }
         super.onCreate(savedState);
 
+        if (RequestPermissionsActivity.startPermissionActivity(this)) {
+            return;
+        }
+
         if (!processIntent(false)) {
             finish();
             return;
@@ -242,6 +262,7 @@
 
         // Re-configure fragments.
         configureFragments(true /* from request */);
+        initializeFabVisibility();
         invalidateOptionsMenuIfNeeded();
     }
 
@@ -266,18 +287,10 @@
             return false;
         }
 
-        Intent redirect = mRequest.getRedirectIntent();
-        if (redirect != null) {
-            // Need to start a different activity
-            startActivity(redirect);
-            return false;
-        }
-
         if (mRequest.getActionCode() == ContactsRequest.ACTION_VIEW_CONTACT) {
-            redirect = new Intent(this, QuickContactActivity.class);
-            redirect.setAction(Intent.ACTION_VIEW);
-            redirect.setData(mRequest.getContactUri());
-            startActivity(redirect);
+            final Intent intent = ImplicitIntentsUtil.composeQuickContactIntent(
+                    mRequest.getContactUri(), QuickContactActivity.MODE_FULLY_EXPANDED);
+            ImplicitIntentsUtil.startActivityInApp(this, intent);
             return false;
         }
         return true;
@@ -329,12 +342,12 @@
         // existing.
         mFavoritesFragment = (ContactTileListFragment)
                 fragmentManager.findFragmentByTag(FAVORITE_TAG);
-        mAllFragment = (DefaultContactBrowseListFragment)
+        mAllFragment = (MultiSelectContactsListFragment)
                 fragmentManager.findFragmentByTag(ALL_TAG);
 
         if (mFavoritesFragment == null) {
             mFavoritesFragment = new ContactTileListFragment();
-            mAllFragment = new DefaultContactBrowseListFragment();
+            mAllFragment = new MultiSelectContactsListFragment();
 
             transaction.add(R.id.tab_pager, mFavoritesFragment, FAVORITE_TAG);
             transaction.add(R.id.tab_pager, mAllFragment, ALL_TAG);
@@ -343,6 +356,7 @@
         mFavoritesFragment.setListener(mFavoritesFragmentListener);
 
         mAllFragment.setOnContactListActionListener(new ContactBrowserActionListener());
+        mAllFragment.setCheckBoxListListener(new CheckBoxListListener());
 
         // Hide all fragments for now.  We adjust visibility when we get onSelectedTabChanged()
         // from ActionBarAdapter.
@@ -362,12 +376,14 @@
         // Add shadow under toolbar
         ViewUtil.addRectangularOutlineProvider(findViewById(R.id.toolbar_parent), getResources());
 
-        // Configure action button
-        final View floatingActionButtonContainer = findViewById(
-                R.id.floating_action_button_container);
-        ViewUtil.setupFloatingActionButton(floatingActionButtonContainer, getResources());
-        final ImageButton floatingActionButton = (ImageButton) findViewById(R.id.floating_action_button);
+        // 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);
+        mFloatingActionButtonController = new FloatingActionButtonController(this,
+                mFloatingActionButtonContainer, floatingActionButton);
+        initializeFabVisibility();
 
         invalidateOptionsMenuIfNeeded();
     }
@@ -423,11 +439,6 @@
     }
 
     @Override
-    protected void onStop() {
-        super.onStop();
-    }
-
-    @Override
     protected void onDestroy() {
         mProviderStatusWatcher.removeListener(this);
 
@@ -495,6 +506,34 @@
         invalidateOptionsMenuIfNeeded();
     }
 
+    private void initializeFabVisibility() {
+        final boolean hideFab = mActionBarAdapter.isSearchMode()
+                || mActionBarAdapter.isSelectionMode();
+        mFloatingActionButtonContainer.setVisibility(hideFab ? View.GONE : View.VISIBLE);
+        mFloatingActionButtonController.resetIn();
+        wasLastFabAnimationScaleIn = !hideFab;
+    }
+
+    private void showFabWithAnimation(boolean showFab) {
+        if (mFloatingActionButtonContainer == null) {
+            return;
+        }
+        if (showFab) {
+            if (!wasLastFabAnimationScaleIn) {
+                mFloatingActionButtonContainer.setVisibility(View.VISIBLE);
+                mFloatingActionButtonController.scaleIn(0);
+            }
+            wasLastFabAnimationScaleIn = true;
+
+        } else {
+            if (wasLastFabAnimationScaleIn) {
+                mFloatingActionButtonContainer.setVisibility(View.VISIBLE);
+                mFloatingActionButtonController.scaleOut();
+            }
+            wasLastFabAnimationScaleIn = false;
+        }
+    }
+
     @Override
     public void onContactListFilterChanged() {
         if (mAllFragment == null || !mAllFragment.isAdded()) {
@@ -512,16 +551,24 @@
     @Override
     public void onAction(int action) {
         switch (action) {
+            case ActionBarAdapter.Listener.Action.START_SELECTION_MODE:
+                mAllFragment.displayCheckBoxes(true);
+                // Fall through:
             case ActionBarAdapter.Listener.Action.START_SEARCH_MODE:
-                // Tell the fragments that we're in the search mode
+                // Tell the fragments that we're in the search mode or selection mode
                 configureFragments(false /* from request */);
                 updateFragmentsVisibility();
                 invalidateOptionsMenu();
+                showFabWithAnimation(/* showFabWithAnimation = */ false);
                 break;
-            case ActionBarAdapter.Listener.Action.STOP_SEARCH_MODE:
+            case ActionBarAdapter.Listener.Action.BEGIN_STOPPING_SEARCH_AND_SELECTION_MODE:
+                showFabWithAnimation(/* showFabWithAnimation = */ true);
+                break;
+            case ActionBarAdapter.Listener.Action.STOP_SEARCH_AND_SELECTION_MODE:
                 setQueryTextToFragment("");
                 updateFragmentsVisibility();
                 invalidateOptionsMenu();
+                showFabWithAnimation(/* showFabWithAnimation = */ true);
                 break;
             case ActionBarAdapter.Listener.Action.CHANGE_SEARCH_QUERY:
                 final String queryString = mActionBarAdapter.getQueryString();
@@ -558,16 +605,20 @@
     private void updateFragmentsVisibility() {
         int tab = mActionBarAdapter.getCurrentTab();
 
-        if (mActionBarAdapter.isSearchMode()) {
-            mTabPagerAdapter.setSearchMode(true);
+        if (mActionBarAdapter.isSearchMode() || mActionBarAdapter.isSelectionMode()) {
+            mTabPagerAdapter.setTabsHidden(true);
         } else {
-            // No smooth scrolling if quitting from the search mode.
-            final boolean wasSearchMode = mTabPagerAdapter.isSearchMode();
-            mTabPagerAdapter.setSearchMode(false);
+            // 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, !wasSearchMode);
+                mTabPager.setCurrentItem(tab, !wereTabsHidden);
             }
         }
+        if (!mActionBarAdapter.isSelectionMode()) {
+            mAllFragment.displayCheckBoxes(false);
+        }
         invalidateOptionsMenu();
         showEmptyStateForTab(tab);
     }
@@ -608,14 +659,14 @@
 
         @Override
         public void onPageScrollStateChanged(int state) {
-            if (!mTabPagerAdapter.isSearchMode()) {
+            if (!mTabPagerAdapter.areTabsHidden()) {
                 mViewPagerTabs.onPageScrollStateChanged(state);
             }
         }
 
         @Override
         public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
-            if (!mTabPagerAdapter.isSearchMode()) {
+            if (!mTabPagerAdapter.areTabsHidden()) {
                 mViewPagerTabs.onPageScrolled(position, positionOffset, positionOffsetPixels);
             }
         }
@@ -623,7 +674,7 @@
         @Override
         public void onPageSelected(int position) {
             // Make sure not in the search mode, in which case position != TabState.ordinal().
-            if (!mTabPagerAdapter.isSearchMode()) {
+            if (!mTabPagerAdapter.areTabsHidden()) {
                 mActionBarAdapter.setCurrentTab(position, false);
                 mViewPagerTabs.onPageSelected(position);
                 showEmptyStateForTab(position);
@@ -646,7 +697,7 @@
         private final FragmentManager mFragmentManager;
         private FragmentTransaction mCurTransaction = null;
 
-        private boolean mTabPagerAdapterSearchMode;
+        private boolean mAreTabsHiddenInTabPager;
 
         private Fragment mCurrentPrimaryItem;
 
@@ -654,27 +705,27 @@
             mFragmentManager = getFragmentManager();
         }
 
-        public boolean isSearchMode() {
-            return mTabPagerAdapterSearchMode;
+        public boolean areTabsHidden() {
+            return mAreTabsHiddenInTabPager;
         }
 
-        public void setSearchMode(boolean searchMode) {
-            if (searchMode == mTabPagerAdapterSearchMode) {
+        public void setTabsHidden(boolean hideTabs) {
+            if (hideTabs == mAreTabsHiddenInTabPager) {
                 return;
             }
-            mTabPagerAdapterSearchMode = searchMode;
+            mAreTabsHiddenInTabPager = hideTabs;
             notifyDataSetChanged();
         }
 
         @Override
         public int getCount() {
-            return mTabPagerAdapterSearchMode ? 1 : TabState.COUNT;
+            return mAreTabsHiddenInTabPager ? 1 : TabState.COUNT;
         }
 
         /** Gets called when the number of items changes. */
         @Override
         public int getItemPosition(Object object) {
-            if (mTabPagerAdapterSearchMode) {
+            if (mAreTabsHiddenInTabPager) {
                 if (object == mAllFragment) {
                     return 0; // Only 1 page in search mode
                 }
@@ -695,7 +746,7 @@
 
         private Fragment getFragment(int position) {
             position = getTabPositionForTextDirection(position);
-            if (mTabPagerAdapterSearchMode) {
+            if (mAreTabsHiddenInTabPager) {
                 if (position != 0) {
                     // This has only been observed in monkey tests.
                     // Let's log this issue, but not crash
@@ -821,14 +872,14 @@
     }
 
     private void updateViewConfiguration(boolean forceUpdate) {
-        ProviderStatusWatcher.Status providerStatus = mProviderStatusWatcher.getProviderStatus();
+        int providerStatus = mProviderStatusWatcher.getProviderStatus();
         if (!forceUpdate && (mProviderStatus != null)
-                && (providerStatus.status == mProviderStatus.status)) return;
+                && (mProviderStatus.equals(providerStatus))) return;
         mProviderStatus = providerStatus;
 
         View contactsUnavailableView = findViewById(R.id.contacts_unavailable_view);
 
-        if (mProviderStatus.status == ProviderStatus.STATUS_NORMAL) {
+        if (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) {
@@ -845,7 +896,7 @@
             //
             // Also check for ability to modify accounts.  In limited user mode, you can't modify
             // accounts so there is no point sending users to account setup activity.
-            final UserManager userManager = UserManager.get(this);
+            final UserManager userManager = (UserManager) getSystemService(Context.USER_SERVICE);
             final boolean disallowModifyAccounts = userManager.getUserRestrictions().getBoolean(
                     UserManager.DISALLOW_MODIFY_ACCOUNTS);
             if (!disallowModifyAccounts && !areContactWritableAccountsAvailable() &&
@@ -893,9 +944,9 @@
 
         @Override
         public void onViewContactAction(Uri contactLookupUri) {
-            Intent intent = QuickContact.composeQuickContactsIntent(PeopleActivity.this,
-                    (Rect) null, contactLookupUri, QuickContactActivity.MODE_FULLY_EXPANDED, null);
-            startActivity(intent);
+            final Intent intent = ImplicitIntentsUtil.composeQuickContactIntent(contactLookupUri,
+                    QuickContactActivity.MODE_FULLY_EXPANDED);
+            ImplicitIntentsUtil.startActivityInApp(PeopleActivity.this, intent);
         }
 
         @Override
@@ -926,13 +977,33 @@
         }
     }
 
+    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() {
-            startActivity(new Intent(Intent.ACTION_INSERT, Contacts.CONTENT_URI));
+            ImplicitIntentsUtil.startActivityInApp(PeopleActivity.this,
+                    EditorIntents.createCompactInsertContactIntent());
         }
 
         @Override
@@ -940,8 +1011,8 @@
             Intent intent = new Intent(Settings.ACTION_ADD_ACCOUNT);
             intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
             intent.putExtra(Settings.EXTRA_AUTHORITIES,
-                    new String[] { ContactsContract.AUTHORITY });
-            startActivity(intent);
+                    new String[]{ContactsContract.AUTHORITY});
+            ImplicitIntentsUtil.startActivityOutsideApp(PeopleActivity.this, intent);
         }
 
         @Override
@@ -949,11 +1020,6 @@
             ImportExportDialogFragment.show(getFragmentManager(), areContactsAvailable(),
                     PeopleActivity.class);
         }
-
-        @Override
-        public void onFreeInternalStorageAction() {
-            startActivity(new Intent(Settings.ACTION_MANAGE_APPLICATIONS_SETTINGS));
-        }
     }
 
     private final class StrequentContactListFragmentListener
@@ -962,9 +1028,9 @@
 
         @Override
         public void onContactSelected(Uri contactUri, Rect targetRect) {
-            Intent intent = QuickContact.composeQuickContactsIntent(PeopleActivity.this,
-                    targetRect, contactUri, QuickContactActivity.MODE_FULLY_EXPANDED, null);
-            startActivity(intent);
+            final Intent intent = ImplicitIntentsUtil.composeQuickContactIntent(contactUri,
+                    QuickContactActivity.MODE_FULLY_EXPANDED);
+            ImplicitIntentsUtil.startActivityInApp(PeopleActivity.this, intent);
         }
 
         @Override
@@ -1018,8 +1084,9 @@
         final MenuItem clearFrequentsMenu = menu.findItem(R.id.menu_clear_frequents);
         final MenuItem helpMenu = menu.findItem(R.id.menu_help);
 
-        final boolean isSearchMode = mActionBarAdapter.isSearchMode();
-        if (isSearchMode) {
+        final boolean isSearchOrSelectionMode = mActionBarAdapter.isSearchMode()
+                || mActionBarAdapter.isSelectionMode();
+        if (isSearchOrSelectionMode) {
             contactsFilterMenu.setVisible(false);
             clearFrequentsMenu.setVisible(false);
             helpMenu.setVisible(false);
@@ -1034,15 +1101,22 @@
                     clearFrequentsMenu.setVisible(false);
                     break;
             }
-            HelpUtils.prepareHelpMenuItem(this, helpMenu, R.string.help_url_people_main);
+            helpMenu.setVisible(HelpUtils.isHelpAndFeedbackAvailable());
         }
-        final boolean showMiscOptions = !isSearchMode;
+        final boolean showMiscOptions = !isSearchOrSelectionMode;
         makeMenuItemVisible(menu, R.id.menu_search, showMiscOptions);
         makeMenuItemVisible(menu, R.id.menu_import_export, showMiscOptions);
         makeMenuItemVisible(menu, R.id.menu_accounts, showMiscOptions);
         makeMenuItemVisible(menu, R.id.menu_settings,
                 showMiscOptions && !ContactsPreferenceActivity.isEmpty(this));
 
+        final boolean showSelectedContactOptions = mActionBarAdapter.isSelectionMode()
+                && mAllFragment.getSelectedContactIds().size() != 0;
+        makeMenuItemVisible(menu, R.id.menu_share, showSelectedContactOptions);
+        makeMenuItemVisible(menu, R.id.menu_delete, showSelectedContactOptions);
+        makeMenuItemVisible(menu, R.id.menu_join, showSelectedContactOptions);
+        makeMenuItemEnabled(menu, R.id.menu_join, mAllFragment.getSelectedContactIds().size() > 1);
+
         // Debug options need to be visible even in search mode.
         makeMenuItemVisible(menu, R.id.export_database, mEnableDebugMenuOptions);
 
@@ -1058,12 +1132,19 @@
     }
 
     private void makeMenuItemVisible(Menu menu, int itemId, boolean visible) {
-        MenuItem item =menu.findItem(itemId);
+        final MenuItem item = menu.findItem(itemId);
         if (item != null) {
             item.setVisible(visible);
         }
     }
 
+    private void makeMenuItemEnabled(Menu menu, int itemId, boolean visible) {
+        final MenuItem item = menu.findItem(itemId);
+        if (item != null) {
+            item.setEnabled(visible);
+        }
+    }
+
     @Override
     public boolean onOptionsItemSelected(MenuItem item) {
         if (mDisableOptionItemSelected) {
@@ -1104,6 +1185,15 @@
                 onSearchRequested();
                 return true;
             }
+            case R.id.menu_share:
+                shareSelectedContacts();
+                return true;
+            case R.id.menu_join:
+                joinSelectedContacts();
+                return true;
+            case R.id.menu_delete:
+                deleteSelectedContacts();
+                return true;
             case R.id.menu_import_export: {
                 ImportExportDialogFragment.show(getFragmentManager(), areContactsAvailable(),
                         PeopleActivity.class);
@@ -1113,19 +1203,22 @@
                 ClearFrequentsDialog.show(getFragmentManager());
                 return true;
             }
+            case R.id.menu_help:
+                HelpUtils.launchHelpAndFeedbackForMainScreen(this);
+                return true;
             case R.id.menu_accounts: {
                 final Intent intent = new Intent(Settings.ACTION_SYNC_SETTINGS);
                 intent.putExtra(Settings.EXTRA_AUTHORITIES, new String[] {
                     ContactsContract.AUTHORITY
                 });
                 intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
-                startActivity(intent);
+                ImplicitIntentsUtil.startActivityInAppIfPossible(this, intent);
                 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);
-                startActivity(intent);
+                ImplicitIntentsUtil.startActivityOutsideApp(this, intent);
                 return true;
             }
         }
@@ -1134,10 +1227,55 @@
 
     @Override
     public boolean onSearchRequested() { // Search key pressed.
-        mActionBarAdapter.setSearchMode(true);
+        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();
+        boolean firstIteration = true;
+        for (Long contactId : mAllFragment.getSelectedContactIds()) {
+            if (!firstIteration)
+                uriListBuilder.append(':');
+            final Uri contactUri = ContentUris.withAppendedId(Contacts.CONTENT_URI, contactId);
+            final Uri lookupUri = Contacts.getLookupUri(getContentResolver(), contactUri);
+            List<String> pathSegments = lookupUri.getPathSegments();
+            uriListBuilder.append(pathSegments.get(pathSegments.size() - 2));
+            firstIteration = false;
+        }
+        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(this, intent);
+    }
+    private void joinSelectedContacts() {
+        JoinContactsDialogFragment.start(this, mAllFragment.getSelectedContactIds());
+    }
+
+    @Override
+    public void onContactsJoined() {
+        mActionBarAdapter.setSelectionMode(false);
+    }
+
+    private void deleteSelectedContacts() {
+        ContactMultiDeletionInteraction.start(PeopleActivity.this,
+                mAllFragment.getSelectedContactIds());
+    }
+
+    @Override
+    public void onDeletionFinished() {
+        mActionBarAdapter.setSelectionMode(false);
+    }
+
     @Override
     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
         switch (requestCode) {
@@ -1167,34 +1305,22 @@
     @Override
     public boolean onKeyDown(int keyCode, KeyEvent event) {
         // TODO move to the fragment
-        switch (keyCode) {
-//            case KeyEvent.KEYCODE_CALL: {
-//                if (callSelection()) {
-//                    return true;
-//                }
-//                break;
-//            }
 
-            case KeyEvent.KEYCODE_DEL: {
-                if (deleteSelection()) {
-                    return true;
-                }
-                break;
+        // 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;
             }
-            default: {
-                // 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)) {
-                    String query = new String(new int[]{ unicodeChar }, 0, 1);
-                    if (!mActionBarAdapter.isSearchMode()) {
-                        mActionBarAdapter.setSearchMode(true);
-                        mActionBarAdapter.setQueryString(query);
-                        return true;
-                    }
-                }
+            String query = new String(new int[]{unicodeChar}, 0, 1);
+            if (!mActionBarAdapter.isSearchMode()) {
+                mActionBarAdapter.setSearchMode(true);
+                mActionBarAdapter.setQueryString(query);
+                return true;
             }
         }
 
@@ -1203,28 +1329,16 @@
 
     @Override
     public void onBackPressed() {
-        if (mActionBarAdapter.isSearchMode()) {
+        if (mActionBarAdapter.isSelectionMode()) {
+            mActionBarAdapter.setSelectionMode(false);
+            mAllFragment.displayCheckBoxes(false);
+        } else if (mActionBarAdapter.isSearchMode()) {
             mActionBarAdapter.setSearchMode(false);
         } else {
             super.onBackPressed();
         }
     }
 
-    private boolean deleteSelection() {
-        // TODO move to the fragment
-//        if (mActionCode == ContactsRequest.ACTION_DEFAULT) {
-//            final int position = mListView.getSelectedItemPosition();
-//            if (position != ListView.INVALID_POSITION) {
-//                Uri contactUri = getContactUri(position);
-//                if (contactUri != null) {
-//                    doContactDelete(contactUri);
-//                    return true;
-//                }
-//            }
-//        }
-        return false;
-    }
-
     @Override
     protected void onSaveInstanceState(Bundle outState) {
         super.onSaveInstanceState(outState);
@@ -1266,7 +1380,7 @@
                     intent.putExtras(extras);
                 }
                 try {
-                    startActivity(intent);
+                    ImplicitIntentsUtil.startActivityInApp(PeopleActivity.this, intent);
                 } catch (ActivityNotFoundException ex) {
                     Toast.makeText(PeopleActivity.this, R.string.missing_app,
                             Toast.LENGTH_SHORT).show();
diff --git a/src/com/android/contacts/activities/PhotoSelectionActivity.java b/src/com/android/contacts/activities/PhotoSelectionActivity.java
deleted file mode 100644
index c81c448..0000000
--- a/src/com/android/contacts/activities/PhotoSelectionActivity.java
+++ /dev/null
@@ -1,571 +0,0 @@
-/*
- * 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.
- */
-package com.android.contacts.activities;
-
-import android.animation.Animator;
-import android.animation.AnimatorListenerAdapter;
-import android.animation.ObjectAnimator;
-import android.animation.PropertyValuesHolder;
-import android.app.Activity;
-import android.content.Context;
-import android.content.Intent;
-import android.content.res.Configuration;
-import android.graphics.Bitmap;
-import android.graphics.Rect;
-import android.net.Uri;
-import android.os.Bundle;
-import android.os.Parcelable;
-import android.view.View;
-import android.view.ViewGroup.MarginLayoutParams;
-import android.widget.FrameLayout.LayoutParams;
-import android.widget.ImageView;
-
-import com.android.contacts.common.ContactPhotoManager;
-import com.android.contacts.ContactSaveService;
-import com.android.contacts.R;
-import com.android.contacts.detail.PhotoSelectionHandler;
-import com.android.contacts.editor.PhotoActionPopup;
-import com.android.contacts.common.model.RawContactDeltaList;
-import com.android.contacts.util.SchedulingUtils;
-
-/**
- * Popup activity for choosing a contact photo within the Contacts app.
- */
-public class PhotoSelectionActivity extends Activity {
-
-    private static final String TAG = "PhotoSelectionActivity";
-
-    /** Number of ms for the animation to expand the photo. */
-    private static final int PHOTO_EXPAND_DURATION = 100;
-
-    /** Number of ms for the animation to contract the photo on activity exit. */
-    private static final int PHOTO_CONTRACT_DURATION = 50;
-
-    /** Number of ms for the animation to hide the backdrop on finish. */
-    private static final int BACKDROP_FADEOUT_DURATION = 100;
-
-    /** Key used to persist photo uri. */
-    private static final String KEY_CURRENT_PHOTO_URI = "currentphotouri";
-
-    /** Key used to persist whether a sub-activity is currently in progress. */
-    private static final String KEY_SUB_ACTIVITY_IN_PROGRESS = "subinprogress";
-
-    /** Intent extra to get the photo URI. */
-    public static final String PHOTO_URI = "photo_uri";
-
-    /** Intent extra to get the entity delta list. */
-    public static final String ENTITY_DELTA_LIST = "entity_delta_list";
-
-    /** Intent extra to indicate whether the contact is the user's profile. */
-    public static final String IS_PROFILE = "is_profile";
-
-    /** Intent extra to indicate whether the contact is from a directory (non-editable). */
-    public static final String IS_DIRECTORY_CONTACT = "is_directory_contact";
-
-    /**
-     * Intent extra to indicate whether the photo should be animated to show the full contents of
-     * the photo (on a larger portion of the screen) when clicked.  If unspecified or false, the
-     * photo will not move from its original location.
-     */
-    public static final String EXPAND_PHOTO = "expand_photo";
-
-    /** Source bounds of the image that was clicked on. */
-    private Rect mSourceBounds;
-
-    /**
-     * The photo URI. May be null, in which case the default avatar will be used.
-     */
-    private Uri mPhotoUri;
-
-    /** Entity delta list of the contact. */
-    private RawContactDeltaList mState;
-
-    /** Whether the contact is the user's profile. */
-    private boolean mIsProfile;
-
-    /** Whether the contact is from a directory. */
-    private boolean mIsDirectoryContact;
-
-    /** Whether to animate the photo to an expanded view covering more of the screen. */
-    private boolean mExpandPhoto;
-
-    /**
-     * Side length (in pixels) of the expanded photo if to be expanded. Photos are expected to
-     * be square.
-     */
-    private int mExpandedPhotoSize;
-
-    /** Height (in pixels) to leave underneath the expanded photo to show the list popup */
-    private int mHeightOffset;
-
-    /** The semi-transparent backdrop. */
-    private View mBackdrop;
-
-    /** The photo view. */
-    private ImageView mPhotoView;
-
-    /** The photo handler attached to this activity, if any. */
-    private PhotoHandler mPhotoHandler;
-
-    /** Animator to expand the photo out to full size. */
-    private ObjectAnimator mPhotoAnimator;
-
-    /** Listener for the animation. */
-    private AnimatorListenerAdapter mAnimationListener;
-
-    /** Whether a change in layout of the photo has occurred that has no animation yet. */
-    private boolean mAnimationPending;
-
-    /** Prior position of the image (for animating). */
-    Rect mOriginalPos = new Rect();
-
-    /** Layout params for the photo view before we started animating. */
-    private LayoutParams mPhotoStartParams;
-
-    /** Layout params for the photo view after we finished animating. */
-    private LayoutParams mPhotoEndParams;
-
-    /** Whether a sub-activity is currently in progress. */
-    private boolean mSubActivityInProgress;
-
-    private boolean mCloseActivityWhenCameBackFromSubActivity;
-
-    /**
-     * A photo result received by the activity, persisted across activity lifecycle.
-     */
-    private PendingPhotoResult mPendingPhotoResult;
-
-    /**
-     * The photo uri being interacted with, if any.  Saved/restored between activity instances.
-     */
-    private Uri mCurrentPhotoUri;
-
-    @Override
-    protected void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        setContentView(R.layout.photoselection_activity);
-        if (savedInstanceState != null) {
-            mCurrentPhotoUri = savedInstanceState.getParcelable(KEY_CURRENT_PHOTO_URI);
-            mSubActivityInProgress = savedInstanceState.getBoolean(KEY_SUB_ACTIVITY_IN_PROGRESS);
-        }
-
-        // Pull data out of the intent.
-        final Intent intent = getIntent();
-        mPhotoUri = intent.getParcelableExtra(PHOTO_URI);
-        mState = (RawContactDeltaList) intent.getParcelableExtra(ENTITY_DELTA_LIST);
-        mIsProfile = intent.getBooleanExtra(IS_PROFILE, false);
-        mIsDirectoryContact = intent.getBooleanExtra(IS_DIRECTORY_CONTACT, false);
-        mExpandPhoto = intent.getBooleanExtra(EXPAND_PHOTO, false);
-
-        // Pull out photo expansion properties from resources
-        mExpandedPhotoSize = getResources().getDimensionPixelSize(
-                R.dimen.detail_contact_photo_expanded_size);
-        mHeightOffset = getResources().getDimensionPixelOffset(
-                R.dimen.expanded_photo_height_offset);
-
-        mBackdrop = findViewById(R.id.backdrop);
-        mPhotoView = (ImageView) findViewById(R.id.photo);
-
-        mSourceBounds = intent.getSourceBounds();
-
-        // Fade in the background.
-        animateInBackground();
-
-        // Dismiss the dialog on clicking the backdrop.
-        mBackdrop.setOnClickListener(new View.OnClickListener() {
-            @Override
-            public void onClick(View v) {
-                finish();
-            }
-        });
-
-        // Wait until the layout pass to show the photo, so that the source bounds will match up.
-        SchedulingUtils.doAfterLayout(mBackdrop, new Runnable() {
-            @Override
-            public void run() {
-                displayPhoto();
-            }
-        });
-    }
-
-    /**
-     * Compute the adjusted expanded photo size to fit within the enclosing view with the same
-     * aspect ratio.
-     * @param enclosingView This is the view that the photo must fit within.
-     * @param heightOffset This is the amount of height to leave open for the photo action popup.
-     */
-    private int getAdjustedExpandedPhotoSize(View enclosingView, int heightOffset) {
-        // pull out the bounds of the backdrop
-        final Rect bounds = new Rect();
-        enclosingView.getDrawingRect(bounds);
-        final int boundsWidth = bounds.width();
-        final int boundsHeight = bounds.height() - heightOffset;
-
-        // ensure that the new expanded photo size can fit within the backdrop
-        final float alpha = Math.min((float) boundsHeight / (float) mExpandedPhotoSize,
-                (float) boundsWidth / (float) mExpandedPhotoSize);
-        if (alpha < 1.0f) {
-            // need to shrink width and height while maintaining aspect ratio
-            return (int) (alpha * mExpandedPhotoSize);
-        } else {
-            return mExpandedPhotoSize;
-        }
-    }
-
-    @Override
-    public void onConfigurationChanged(Configuration newConfig) {
-        super.onConfigurationChanged(newConfig);
-
-        // The current look may not seem right on the new configuration, so let's just close self.
-
-        if (!mSubActivityInProgress) {
-            finishImmediatelyWithNoAnimation();
-        } else {
-            // A sub-activity is in progress, so don't close it yet, but close it when we come back
-            // to this activity.
-            mCloseActivityWhenCameBackFromSubActivity = true;
-        }
-    }
-
-    @Override
-    public void finish() {
-        if (!mSubActivityInProgress) {
-            closePhotoAndFinish();
-        } else {
-            finishImmediatelyWithNoAnimation();
-        }
-    }
-
-    /**
-     * Builds a well-formed intent for invoking this activity.
-     * @param context The context.
-     * @param photoUri The URI of the current photo (may be null, in which case the default
-     *     avatar image will be displayed).
-     * @param photoBitmap The bitmap of the current photo (may be null, in which case the default
-     *     avatar image will be displayed).
-     * @param photoBytes The bytes for the current photo (may be null, in which case the default
-     *     avatar image will be displayed).
-     * @param photoBounds The pixel bounds of the current photo.
-     * @param delta The entity delta list for the contact.
-     * @param isProfile Whether the contact is the user's profile.
-     * @param isDirectoryContact Whether the contact comes from a directory (non-editable).
-     * @param expandPhotoOnClick Whether the photo should be expanded on click or not (generally,
-     *     this should be true for phones, and false for tablets).
-     * @return An intent that can be used to invoke the photo selection activity.
-     */
-    public static Intent buildIntent(Context context, Uri photoUri, Bitmap photoBitmap,
-            byte[] photoBytes, Rect photoBounds, RawContactDeltaList delta, boolean isProfile,
-            boolean isDirectoryContact, boolean expandPhotoOnClick) {
-        Intent intent = new Intent(context, PhotoSelectionActivity.class);
-        if (photoUri != null && photoBitmap != null && photoBytes != null) {
-            intent.putExtra(PHOTO_URI, photoUri);
-        }
-        intent.setSourceBounds(photoBounds);
-        intent.putExtra(ENTITY_DELTA_LIST, (Parcelable) delta);
-        intent.putExtra(IS_PROFILE, isProfile);
-        intent.putExtra(IS_DIRECTORY_CONTACT, isDirectoryContact);
-        intent.putExtra(EXPAND_PHOTO, expandPhotoOnClick);
-        return intent;
-    }
-
-    private void finishImmediatelyWithNoAnimation() {
-        super.finish();
-    }
-
-    @Override
-    protected void onDestroy() {
-        super.onDestroy();
-        if (mPhotoAnimator != null) {
-            mPhotoAnimator.cancel();
-            mPhotoAnimator = null;
-        }
-        if (mPhotoHandler != null) {
-            mPhotoHandler.destroy();
-            mPhotoHandler = null;
-        }
-    }
-
-    private void displayPhoto() {
-        // Animate the photo view into its end location.
-        final int[] pos = new int[2];
-        mBackdrop.getLocationOnScreen(pos);
-        LayoutParams layoutParams = new LayoutParams(mSourceBounds.width(),
-                mSourceBounds.height());
-        mOriginalPos.left = mSourceBounds.left - pos[0];
-        mOriginalPos.top = mSourceBounds.top - pos[1];
-        mOriginalPos.right = mOriginalPos.left + mSourceBounds.width();
-        mOriginalPos.bottom = mOriginalPos.top + mSourceBounds.height();
-        layoutParams.setMargins(mOriginalPos.left, mOriginalPos.top, mOriginalPos.right,
-                mOriginalPos.bottom);
-        mPhotoStartParams = layoutParams;
-        mPhotoView.setLayoutParams(layoutParams);
-        mPhotoView.requestLayout();
-
-        // Load the photo.
-        int photoWidth = getPhotoEndParams().width;
-        if (mPhotoUri != null) {
-            // If we have a URI, the bitmap should be cached directly.
-            ContactPhotoManager.getInstance(this).loadPhoto(mPhotoView, mPhotoUri, photoWidth,
-                    false /* darkTheme */, false /* isCircular */, null);
-        } else {
-            // If we don't have a URI, just display an empty ImageView. The default image from the
-            // ContactDetailFragment will show up in the background instead.
-            mPhotoView.setImageDrawable(null);
-        }
-
-        mPhotoView.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
-            @Override
-            public void onLayoutChange(View v, int left, int top, int right, int bottom,
-                    int oldLeft, int oldTop, int oldRight, int oldBottom) {
-                if (mAnimationPending) {
-                    mAnimationPending = false;
-                    PropertyValuesHolder pvhLeft =
-                            PropertyValuesHolder.ofInt("left", mOriginalPos.left, left);
-                    PropertyValuesHolder pvhTop =
-                            PropertyValuesHolder.ofInt("top", mOriginalPos.top, top);
-                    PropertyValuesHolder pvhRight =
-                            PropertyValuesHolder.ofInt("right", mOriginalPos.right, right);
-                    PropertyValuesHolder pvhBottom =
-                            PropertyValuesHolder.ofInt("bottom", mOriginalPos.bottom, bottom);
-                    ObjectAnimator anim = ObjectAnimator.ofPropertyValuesHolder(mPhotoView,
-                            pvhLeft, pvhTop, pvhRight, pvhBottom).setDuration(
-                            PHOTO_EXPAND_DURATION);
-                    if (mAnimationListener != null) {
-                        anim.addListener(mAnimationListener);
-                    }
-                    anim.start();
-                }
-            }
-        });
-        attachPhotoHandler();
-    }
-
-    /**
-     * This sets the photo's layout params at the end of the animation.
-     * <p>
-     * The scheme is to enlarge the photo to the desired size with the enlarged photo shifted
-     * to the top left of the screen as much as possible while keeping the underlying smaller
-     * photo occluded.
-     */
-    private LayoutParams getPhotoEndParams() {
-        if (mPhotoEndParams == null) {
-            mPhotoEndParams = new LayoutParams(mPhotoStartParams);
-            if (mExpandPhoto) {
-                final int adjustedPhotoSize = getAdjustedExpandedPhotoSize(mBackdrop,
-                        mHeightOffset);
-                int widthDelta = adjustedPhotoSize - mPhotoStartParams.width;
-                int heightDelta = adjustedPhotoSize - mPhotoStartParams.height;
-                if (widthDelta >= 1 || heightDelta >= 1) {
-                    // This is an actual expansion.
-                    mPhotoEndParams.width = adjustedPhotoSize;
-                    mPhotoEndParams.height = adjustedPhotoSize;
-                    mPhotoEndParams.topMargin =
-                            Math.max(mPhotoStartParams.topMargin - heightDelta, 0);
-                    mPhotoEndParams.leftMargin =
-                            Math.max(mPhotoStartParams.leftMargin - widthDelta, 0);
-                    mPhotoEndParams.bottomMargin = 0;
-                    mPhotoEndParams.rightMargin = 0;
-                }
-            }
-        }
-        return mPhotoEndParams;
-    }
-
-    private void animatePhotoOpen() {
-        mAnimationListener = new AnimatorListenerAdapter() {
-            private void capturePhotoPos() {
-                mPhotoView.requestLayout();
-                mOriginalPos.left = mPhotoView.getLeft();
-                mOriginalPos.top = mPhotoView.getTop();
-                mOriginalPos.right = mPhotoView.getRight();
-                mOriginalPos.bottom = mPhotoView.getBottom();
-            }
-
-            @Override
-            public void onAnimationEnd(Animator animation) {
-                capturePhotoPos();
-                if (mPhotoHandler != null) {
-                    mPhotoHandler.onClick(mPhotoView);
-                }
-            }
-
-            @Override
-            public void onAnimationCancel(Animator animation) {
-                capturePhotoPos();
-            }
-        };
-        animatePhoto(getPhotoEndParams());
-    }
-
-    private void closePhotoAndFinish() {
-        mAnimationListener = new AnimatorListenerAdapter() {
-            @Override
-            public void onAnimationEnd(Animator animation) {
-                // After the photo animates down, fade it away and finish.
-                ObjectAnimator anim = ObjectAnimator.ofFloat(
-                        mPhotoView, "alpha", 0f).setDuration(PHOTO_CONTRACT_DURATION);
-                anim.addListener(new AnimatorListenerAdapter() {
-                    @Override
-                    public void onAnimationEnd(Animator animation) {
-                        finishImmediatelyWithNoAnimation();
-                    }
-                });
-                anim.start();
-            }
-        };
-
-        animatePhoto(mPhotoStartParams);
-        animateAwayBackground();
-    }
-
-    private void animatePhoto(MarginLayoutParams to) {
-        // Cancel any existing animation.
-        if (mPhotoAnimator != null) {
-            mPhotoAnimator.cancel();
-        }
-
-        mPhotoView.setLayoutParams(to);
-        mAnimationPending = true;
-        mPhotoView.requestLayout();
-    }
-
-    private void animateInBackground() {
-        ObjectAnimator.ofFloat(mBackdrop, "alpha", 0, 0.5f).setDuration(
-                PHOTO_EXPAND_DURATION).start();
-    }
-
-    private void animateAwayBackground() {
-        ObjectAnimator.ofFloat(mBackdrop, "alpha", 0f).setDuration(
-                BACKDROP_FADEOUT_DURATION).start();
-    }
-
-    @Override
-    protected void onSaveInstanceState(Bundle outState) {
-        super.onSaveInstanceState(outState);
-        outState.putParcelable(KEY_CURRENT_PHOTO_URI, mCurrentPhotoUri);
-        outState.putBoolean(KEY_SUB_ACTIVITY_IN_PROGRESS, mSubActivityInProgress);
-    }
-
-    @Override
-    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
-        if (mPhotoHandler != null) {
-            mSubActivityInProgress = false;
-            if (mPhotoHandler.handlePhotoActivityResult(requestCode, resultCode, data)) {
-                // Clear out any pending photo result.
-                mPendingPhotoResult = null;
-            } else {
-                // User cancelled the sub-activity and returning to the photo selection activity.
-                if (mCloseActivityWhenCameBackFromSubActivity) {
-                    finishImmediatelyWithNoAnimation();
-                } else {
-                    // Re-display options.
-                    mPhotoHandler.onClick(mPhotoView);
-                }
-            }
-        } else {
-            // Create a pending photo result to be handled when the photo handler is created.
-            mPendingPhotoResult = new PendingPhotoResult(requestCode, resultCode, data);
-        }
-    }
-
-    private void attachPhotoHandler() {
-        // Always provide the same two choices (take a photo with the camera, select a photo
-        // from the gallery), but with slightly different wording.
-        // Note: don't worry about this being a read-only contact; this code will not be invoked.
-        int mode = (mPhotoUri == null) ? PhotoActionPopup.Modes.NO_PHOTO
-                : PhotoActionPopup.Modes.WRITE_ABLE_PHOTO;
-        // We don't want to provide a choice to remove the photo for two reasons:
-        //   1) the UX designs don't call for it
-        //   2) even if we wanted to, the implementation would be moderately hairy
-        mode &= ~PhotoActionPopup.Flags.REMOVE_PHOTO;
-
-        mPhotoHandler = new PhotoHandler(this, mPhotoView, mode, mState);
-
-        if (mPendingPhotoResult != null) {
-            mPhotoHandler.handlePhotoActivityResult(mPendingPhotoResult.mRequestCode,
-                    mPendingPhotoResult.mResultCode, mPendingPhotoResult.mData);
-            mPendingPhotoResult = null;
-        } else {
-            // Setting the photo in displayPhoto() resulted in a relayout
-            // request... to avoid jank, wait until this layout has happened.
-            SchedulingUtils.doAfterLayout(mBackdrop, new Runnable() {
-                @Override
-                public void run() {
-                    animatePhotoOpen();
-                }
-            });
-        }
-    }
-
-    private final class PhotoHandler extends PhotoSelectionHandler {
-        private final PhotoActionListener mListener;
-
-        private PhotoHandler(
-                Context context, View photoView, int photoMode, RawContactDeltaList state) {
-            super(context, photoView, photoMode, PhotoSelectionActivity.this.mIsDirectoryContact,
-                    state);
-            mListener = new PhotoListener();
-        }
-
-        @Override
-        public PhotoActionListener getListener() {
-            return mListener;
-        }
-
-        @Override
-        public void startPhotoActivity(Intent intent, int requestCode, Uri photoUri) {
-            mSubActivityInProgress = true;
-            mCurrentPhotoUri = photoUri;
-            PhotoSelectionActivity.this.startActivityForResult(intent, requestCode);
-        }
-
-        private final class PhotoListener extends PhotoActionListener {
-            @Override
-            public void onPhotoSelected(Uri uri) {
-                RawContactDeltaList delta = getDeltaForAttachingPhotoToContact();
-                long rawContactId = getWritableEntityId();
-
-                Intent intent = ContactSaveService.createSaveContactIntent(
-                        mContext, delta, "", 0, mIsProfile, null, null, rawContactId, uri);
-                startService(intent);
-                finish();
-            }
-
-            @Override
-            public Uri getCurrentPhotoUri() {
-                return mCurrentPhotoUri;
-            }
-
-            @Override
-            public void onPhotoSelectionDismissed() {
-                if (!mSubActivityInProgress) {
-                    finish();
-                }
-            }
-        }
-    }
-
-    private static class PendingPhotoResult {
-        final private int mRequestCode;
-        final private int mResultCode;
-        final private Intent mData;
-        private PendingPhotoResult(int requestCode, int resultCode, Intent data) {
-            mRequestCode = requestCode;
-            mResultCode = resultCode;
-            mData = data;
-        }
-    }
-}
diff --git a/src/com/android/contacts/activities/ShowOrCreateActivity.java b/src/com/android/contacts/activities/ShowOrCreateActivity.java
index 0489065..6a516ad 100755
--- a/src/com/android/contacts/activities/ShowOrCreateActivity.java
+++ b/src/com/android/contacts/activities/ShowOrCreateActivity.java
@@ -31,11 +31,14 @@
 import android.provider.ContactsContract.PhoneLookup;
 import android.provider.ContactsContract.RawContacts;
 import android.telecom.PhoneAccount;
+import android.text.TextUtils;
 import android.util.Log;
 
 import com.android.contacts.common.ContactsUtils;
 import com.android.contacts.ContactsActivity;
 import com.android.contacts.R;
+import com.android.contacts.common.activity.RequestPermissionsActivity;
+import com.android.contacts.common.util.ImplicitIntentsUtil;
 import com.android.contacts.util.NotifyingAsyncQueryHandler;
 
 /**
@@ -85,6 +88,10 @@
     protected void onCreate(Bundle icicle) {
         super.onCreate(icicle);
 
+        if (RequestPermissionsActivity.startPermissionActivity(this)) {
+            return;
+        }
+
         // Create handler if doesn't exist, otherwise cancel any running
         if (mQueryHandler == null) {
             mQueryHandler = new NotifyingAsyncQueryHandler(this, this);
@@ -169,11 +176,11 @@
             cursor.close();
         }
 
-        if (count == 1 && contactId != -1) {
+        if (count == 1 && contactId != -1 && !TextUtils.isEmpty(lookupKey)) {
             // If we only found one item, jump right to viewing it
             final Uri contactUri = Contacts.getLookupUri(contactId, lookupKey);
             final Intent viewIntent = new Intent(Intent.ACTION_VIEW, contactUri);
-            startActivity(viewIntent);
+            ImplicitIntentsUtil.startActivityInApp(this, viewIntent);
             finish();
 
         } else if (count > 1) {
@@ -192,7 +199,7 @@
                 createIntent.putExtras(mCreateExtras);
                 createIntent.setType(RawContacts.CONTENT_TYPE);
 
-                startActivity(createIntent);
+                ImplicitIntentsUtil.startActivityInApp(this, createIntent);
                 finish();
 
             } else {
@@ -249,7 +256,7 @@
 
         public void onClick(DialogInterface dialog, int which) {
             if (mIntent != null) {
-                mParent.startActivity(mIntent);
+                ImplicitIntentsUtil.startActivityInApp(mParent, mIntent);
             }
             mParent.finish();
         }
diff --git a/src/com/android/contacts/datepicker/DatePicker.java b/src/com/android/contacts/datepicker/DatePicker.java
index 1b3b807..c6708a1 100644
--- a/src/com/android/contacts/datepicker/DatePicker.java
+++ b/src/com/android/contacts/datepicker/DatePicker.java
@@ -16,13 +16,8 @@
 
 package com.android.contacts.datepicker;
 
-// This is a fork of the standard Android DatePicker that additionally allows toggling the year
-// on/off. It uses some private API so that not everything has to be copied.
-
 import android.animation.LayoutTransition;
-import android.annotation.Widget;
 import android.content.Context;
-import android.content.res.TypedArray;
 import android.os.Parcel;
 import android.os.Parcelable;
 import android.text.format.DateFormat;
@@ -41,13 +36,13 @@
 import com.android.contacts.R;
 
 import java.text.DateFormatSymbols;
-import java.text.SimpleDateFormat;
 import java.util.Calendar;
 import java.util.Locale;
 
-import libcore.icu.ICU;
-
 /**
+ * This is a fork of the standard Android DatePicker that additionally allows toggling the year
+ * on/off.
+ *
  * A view for selecting a month / year / day based on a calendar like layout.
  *
  * <p>See the <a href="{@docRoot}resources/tutorials/views/hello-datepicker.html">Date Picker
@@ -55,13 +50,13 @@
  *
  * For a dialog using this view, see {@link android.app.DatePickerDialog}.
  */
-@Widget
 public class DatePicker extends FrameLayout {
     /** Magic year that represents "no year" */
     public static int NO_YEAR = 0;
 
     private static final int DEFAULT_START_YEAR = 1900;
     private static final int DEFAULT_END_YEAR = 2100;
+    private static final TwoDigitFormatter sTwoDigitFormatter = new TwoDigitFormatter();
 
     /* UI Components */
     private final LinearLayout mPickerContainer;
@@ -113,7 +108,7 @@
 
         mPickerContainer = (LinearLayout) findViewById(R.id.parent);
         mDayPicker = (NumberPicker) findViewById(R.id.day);
-        mDayPicker.setFormatter(NumberPicker.getTwoDigitFormatter());
+        mDayPicker.setFormatter(sTwoDigitFormatter);
         mDayPicker.setOnLongPressUpdateInterval(100);
         mDayPicker.setOnValueChangedListener(new OnValueChangeListener() {
             @Override
@@ -123,7 +118,7 @@
             }
         });
         mMonthPicker = (NumberPicker) findViewById(R.id.month);
-        mMonthPicker.setFormatter(NumberPicker.getTwoDigitFormatter());
+        mMonthPicker.setFormatter(sTwoDigitFormatter);
         DateFormatSymbols dfs = new DateFormatSymbols();
         String[] months = dfs.getShortMonths();
 
diff --git a/src/com/android/contacts/datepicker/DatePickerDialog.java b/src/com/android/contacts/datepicker/DatePickerDialog.java
index 2b470d5..1ae1e61 100644
--- a/src/com/android/contacts/datepicker/DatePickerDialog.java
+++ b/src/com/android/contacts/datepicker/DatePickerDialog.java
@@ -105,7 +105,8 @@
             int monthOfYear,
             int dayOfMonth,
             boolean yearOptional) {
-        this(context, THEME_DEVICE_DEFAULT_LIGHT, callBack, year, monthOfYear, dayOfMonth,
+        // Don't pass a theme id. Instead use the default alert dialog theme.
+        this(context, /* themeId = */ -1, callBack, year, monthOfYear, dayOfMonth,
                 yearOptional);
     }
 
diff --git a/src/com/android/contacts/datepicker/ICU.java b/src/com/android/contacts/datepicker/ICU.java
new file mode 100644
index 0000000..229fda6
--- /dev/null
+++ b/src/com/android/contacts/datepicker/ICU.java
@@ -0,0 +1,51 @@
+package com.android.contacts.datepicker;
+
+public class ICU {
+
+    /**
+     * This method is directly copied from {@link libcore.icu.ICU}. The method is simple enough
+     * that it probably won't change.
+     */
+    public static char[] getDateFormatOrder(String pattern) {
+        char[] result = new char[3];
+        int resultIndex = 0;
+        boolean sawDay = false;
+        boolean sawMonth = false;
+        boolean sawYear = false;
+
+        for (int i = 0; i < pattern.length(); ++i) {
+            char ch = pattern.charAt(i);
+            if (ch == 'd' || ch == 'L' || ch == 'M' || ch == 'y') {
+                if (ch == 'd' && !sawDay) {
+                    result[resultIndex++] = 'd';
+                    sawDay = true;
+                } else if ((ch == 'L' || ch == 'M') && !sawMonth) {
+                    result[resultIndex++] = 'M';
+                    sawMonth = true;
+                } else if ((ch == 'y') && !sawYear) {
+                    result[resultIndex++] = 'y';
+                    sawYear = true;
+                }
+            } else if (ch == 'G') {
+                // Ignore the era specifier, if present.
+            } else if ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z')) {
+                throw new IllegalArgumentException("Bad pattern character '"
+                        + ch + "' in " + pattern);
+            } else if (ch == '\'') {
+                if (i < pattern.length() - 1 && pattern.charAt(i + 1) == '\'') {
+                    ++i;
+                } else {
+                    i = pattern.indexOf('\'', i + 1);
+                    if (i == -1) {
+                        throw new IllegalArgumentException("Bad quoting in " + pattern);
+                    }
+                    ++i;
+                }
+            } else {
+                // Ignore spaces and punctuation.
+            }
+        }
+        return result;
+    }
+
+}
diff --git a/src/com/android/contacts/datepicker/TwoDigitFormatter.java b/src/com/android/contacts/datepicker/TwoDigitFormatter.java
new file mode 100644
index 0000000..7e03f28
--- /dev/null
+++ b/src/com/android/contacts/datepicker/TwoDigitFormatter.java
@@ -0,0 +1,55 @@
+package com.android.contacts.datepicker;
+
+import android.widget.NumberPicker;
+
+import java.text.DecimalFormatSymbols;
+import java.util.Locale;
+
+/**
+ * Copy of {@link android.widget.NumberPicker.TwoDigitFormatter}, modified
+ * so that it doesn't use libcore.
+ *
+ * Use a custom NumberPicker formatting callback to use two-digit minutes
+ * strings like "01". Keeping a static formatter etc. is the most efficient
+ * way to do this; it avoids creating temporary objects on every call to
+ * format().
+ */
+public class TwoDigitFormatter implements NumberPicker.Formatter {
+    final StringBuilder mBuilder = new StringBuilder();
+
+    char mZeroDigit;
+    java.util.Formatter mFmt;
+
+    final Object[] mArgs = new Object[1];
+
+    public TwoDigitFormatter() {
+        final Locale locale = Locale.getDefault();
+        init(locale);
+    }
+
+    private void init(Locale locale) {
+        mFmt = createFormatter(locale);
+        mZeroDigit = getZeroDigit(locale);
+    }
+
+    public String format(int value) {
+        final Locale currentLocale = Locale.getDefault();
+        if (mZeroDigit != getZeroDigit(currentLocale)) {
+            init(currentLocale);
+        }
+        mArgs[0] = value;
+        mBuilder.delete(0, mBuilder.length());
+        mFmt.format("%02d", mArgs);
+        return mFmt.toString();
+    }
+
+    private static char getZeroDigit(Locale locale) {
+        // The original TwoDigitFormatter directly referenced LocaleData's value. Instead,
+        // we need to use the public DecimalFormatSymbols API.
+        return DecimalFormatSymbols.getInstance(locale).getZeroDigit();
+    }
+
+    private java.util.Formatter createFormatter(Locale locale) {
+        return new java.util.Formatter(mBuilder, locale);
+    }
+}
diff --git a/src/com/android/contacts/detail/ContactDetailPhotoSetter.java b/src/com/android/contacts/detail/ContactDetailPhotoSetter.java
deleted file mode 100644
index 437de45..0000000
--- a/src/com/android/contacts/detail/ContactDetailPhotoSetter.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * 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.
- */
-
-package com.android.contacts.detail;
-
-import android.content.Context;
-import android.content.Intent;
-import android.graphics.Bitmap;
-import android.graphics.Rect;
-import android.net.Uri;
-import android.view.View;
-import android.view.View.OnClickListener;
-import android.widget.ImageView;
-
-import com.android.contacts.common.ContactPhotoManager;
-import com.android.contacts.activities.PhotoSelectionActivity;
-import com.android.contacts.common.model.Contact;
-import com.android.contacts.common.model.RawContactDeltaList;
-import com.android.contacts.util.ImageViewDrawableSetter;
-
-/**
- * Extends superclass with methods specifically for setting the contact-detail
- * photo.
- */
-public class ContactDetailPhotoSetter extends ImageViewDrawableSetter {
-    public OnClickListener setupContactPhotoForClick(Context context, Contact contactData,
-            ImageView photoView, boolean expandPhotoOnClick) {
-        Bitmap bitmap = setupContactPhoto(contactData, photoView);
-        return setupClickListener(context, contactData, bitmap, expandPhotoOnClick);
-    }
-
-    private static final class PhotoClickListener implements OnClickListener {
-
-        private final Context mContext;
-        private final Contact mContactData;
-        private final Bitmap mPhotoBitmap;
-        private final byte[] mPhotoBytes;
-        private final boolean mExpandPhotoOnClick;
-
-        public PhotoClickListener(Context context, Contact contactData, Bitmap photoBitmap,
-                byte[] photoBytes, boolean expandPhotoOnClick) {
-            mContext = context;
-            mContactData = contactData;
-            mPhotoBitmap = photoBitmap;
-            mPhotoBytes = photoBytes;
-            mExpandPhotoOnClick = expandPhotoOnClick;
-        }
-
-        @Override
-        public void onClick(View v) {
-            // Assemble the intent.
-            RawContactDeltaList delta = mContactData.createRawContactDeltaList();
-
-            // Find location and bounds of target view, adjusting based on the
-            // assumed local density.
-            final float appScale =
-                    mContext.getResources().getCompatibilityInfo().applicationScale;
-            final int[] pos = new int[2];
-            v.getLocationOnScreen(pos);
-
-            // rect is the bounds (in pixels) of the photo view in screen coordinates
-            final Rect rect = new Rect();
-            rect.left = (int) (pos[0] * appScale + 0.5f);
-            rect.top = (int) (pos[1] * appScale + 0.5f);
-            rect.right = (int) ((pos[0] + v.getWidth()) * appScale + 0.5f);
-            rect.bottom = (int) ((pos[1] + v.getHeight()) * appScale + 0.5f);
-
-            Uri photoUri = null;
-            if (mContactData.getPhotoUri() != null) {
-                photoUri = Uri.parse(mContactData.getPhotoUri());
-            }
-            Intent photoSelectionIntent = PhotoSelectionActivity.buildIntent(mContext,
-                    photoUri, mPhotoBitmap, mPhotoBytes, rect, delta, mContactData.isUserProfile(),
-                    mContactData.isDirectoryEntry(), mExpandPhotoOnClick);
-            // Cache the bitmap directly, so the activity can pull it from the
-            // photo manager.
-            if (mPhotoBitmap != null) {
-                ContactPhotoManager.getInstance(mContext).cacheBitmap(
-                        photoUri, mPhotoBitmap, mPhotoBytes);
-            }
-            mContext.startActivity(photoSelectionIntent);
-        }
-    }
-
-    private OnClickListener setupClickListener(Context context, Contact contactData, Bitmap bitmap,
-            boolean expandPhotoOnClick) {
-        final ImageView target = getTarget();
-        if (target == null) return null;
-
-        return new PhotoClickListener(
-                context, contactData, bitmap, getCompressedImage(), expandPhotoOnClick);
-    }
-}
diff --git a/src/com/android/contacts/detail/PhotoSelectionHandler.java b/src/com/android/contacts/detail/PhotoSelectionHandler.java
index 9919773..405bbfc 100644
--- a/src/com/android/contacts/detail/PhotoSelectionHandler.java
+++ b/src/com/android/contacts/detail/PhotoSelectionHandler.java
@@ -21,6 +21,8 @@
 import android.content.ContentValues;
 import android.content.Context;
 import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
 import android.database.Cursor;
 import android.net.Uri;
 import android.provider.ContactsContract.CommonDataKinds.Photo;
@@ -46,6 +48,7 @@
 import com.android.contacts.util.UiClosables;
 
 import java.io.FileNotFoundException;
+import java.util.List;
 
 /**
  * Handles displaying a photo selection popup for a given photo view and dealing with the results
@@ -161,8 +164,10 @@
                     } else {
                         toCrop = mTempPhotoUri;
                         try {
-                            ContactPhotoUtils.savePhotoFromUriToUri(mContext, uri,
-                                    toCrop, false);
+                            if (!ContactPhotoUtils.savePhotoFromUriToUri(mContext, uri,
+                                            toCrop, false)) {
+                                return false;
+                            }
                         } catch (SecurityException e) {
                             Log.d(TAG, "Did not have read-access to uri : " + uri);
                             return false;
@@ -235,9 +240,19 @@
      * Sends a newly acquired photo to Gallery for cropping
      */
     private void doCropPhoto(Uri inputUri, Uri outputUri) {
+        final Intent intent = getCropImageIntent(inputUri, outputUri);
+        if (!hasIntentHandler(intent)) {
+            try {
+                getListener().onPhotoSelected(inputUri);
+            } catch (FileNotFoundException e) {
+                Log.e(TAG, "Cannot save uncropped photo", e);
+                Toast.makeText(mContext, R.string.contactPhotoSavedErrorToast,
+                        Toast.LENGTH_LONG).show();
+            }
+            return;
+        }
         try {
             // Launch gallery to crop the photo
-            final Intent intent = getCropImageIntent(inputUri, outputUri);
             startPhotoActivity(intent, REQUEST_CROP_PHOTO, inputUri);
         } catch (Exception e) {
             Log.e(TAG, "Cannot crop image", e);
@@ -306,6 +321,12 @@
         return intent;
     }
 
+    private boolean hasIntentHandler(Intent intent) {
+        final List<ResolveInfo> resolveInfo = mContext.getPackageManager()
+                .queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
+        return resolveInfo != null && resolveInfo.size() > 0;
+    }
+
     /**
      * Constructs an intent for image cropping.
      */
diff --git a/src/com/android/contacts/detail/TransformableImageView.java b/src/com/android/contacts/detail/TransformableImageView.java
deleted file mode 100644
index 1eb35aa..0000000
--- a/src/com/android/contacts/detail/TransformableImageView.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * 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.
- */
-package com.android.contacts.detail;
-
-import android.content.Context;
-import android.graphics.Canvas;
-import android.graphics.Matrix;
-import android.util.AttributeSet;
-import android.widget.ImageView;
-
-/**
- * Extension to ImageView that handles cropping during resize animations.
- */
-public class TransformableImageView extends ImageView {
-
-    public TransformableImageView(Context context) {
-        super(context);
-    }
-
-    public TransformableImageView(Context context, AttributeSet attrs) {
-        super(context, attrs);
-    }
-
-    public TransformableImageView(Context context, AttributeSet attrs, int defStyle) {
-        super(context, attrs, defStyle);
-    }
-
-    @Override
-    protected void onDraw(Canvas canvas) {
-        if (getDrawable() == null) {
-            return;
-        }
-        int saveCount = canvas.getSaveCount();
-        canvas.save();
-        canvas.translate(mPaddingLeft, mPaddingTop);
-        Matrix drawMatrix = new Matrix();
-        int dwidth = getDrawable().getIntrinsicWidth();
-        int dheight = getDrawable().getIntrinsicHeight();
-
-        int vwidth = getWidth() - mPaddingLeft - mPaddingRight;
-        int vheight = getHeight() - mPaddingTop - mPaddingBottom;
-        float scale;
-        float dx = 0, dy = 0;
-
-        if (dwidth * vheight > vwidth * dheight) {
-            scale = (float) vheight / (float) dheight;
-            dx = (vwidth - dwidth * scale) * 0.5f;
-        } else {
-            scale = (float) vwidth / (float) dwidth;
-            dy = (vheight - dheight * scale) * 0.5f;
-        }
-
-        drawMatrix.setScale(scale, scale);
-        drawMatrix.postTranslate((int) (dx + 0.5f), (int) (dy + 0.5f));
-        canvas.concat(drawMatrix);
-        getDrawable().draw(canvas);
-        canvas.restoreToCount(saveCount);
-    }
-}
diff --git a/src/com/android/contacts/editor/AggregationSuggestionEngine.java b/src/com/android/contacts/editor/AggregationSuggestionEngine.java
index 91df272..ed4f313 100644
--- a/src/com/android/contacts/editor/AggregationSuggestionEngine.java
+++ b/src/com/android/contacts/editor/AggregationSuggestionEngine.java
@@ -218,17 +218,16 @@
             return null;
         }
 
-        Builder builder = AggregationSuggestions.builder()
+        Builder builder = new AggregationSuggestions.Builder()
                 .setLimit(MAX_SUGGESTION_COUNT)
                 .setContactId(mContactId);
 
         if (nameSb.length() != 0) {
-            builder.addParameter(AggregationSuggestions.PARAMETER_MATCH_NAME, nameSb.toString());
+            builder.addNameParameter(nameSb.toString());
         }
 
         if (phoneticNameSb.length() != 0) {
-            builder.addParameter(
-                    AggregationSuggestions.PARAMETER_MATCH_NAME, phoneticNameSb.toString());
+            builder.addNameParameter(phoneticNameSb.toString());
         }
 
         return builder.build();
diff --git a/src/com/android/contacts/editor/AggregationSuggestionView.java b/src/com/android/contacts/editor/AggregationSuggestionView.java
index a3d04e4..e3bab7e 100644
--- a/src/com/android/contacts/editor/AggregationSuggestionView.java
+++ b/src/com/android/contacts/editor/AggregationSuggestionView.java
@@ -20,6 +20,7 @@
 import android.graphics.BitmapFactory;
 import android.net.Uri;
 import android.provider.ContactsContract.Contacts;
+import android.text.TextUtils;
 import android.util.AttributeSet;
 import android.widget.ImageView;
 import android.widget.LinearLayout;
@@ -138,6 +139,9 @@
     public boolean handleItemClickEvent() {
         if (mListener != null && isEnabled()) {
             if (canEditSuggestedContact()) {
+                if (TextUtils.isEmpty(mLookupKey)) {
+                    return false;
+                }
                 mListener.onEditAction(Contacts.getLookupUri(mContactId, mLookupKey));
             } else {
                 ArrayList<Long> rawContactIds = Lists.newArrayList();
diff --git a/src/com/android/contacts/editor/CancelEditDialogFragment.java b/src/com/android/contacts/editor/CancelEditDialogFragment.java
new file mode 100644
index 0000000..300759e
--- /dev/null
+++ b/src/com/android/contacts/editor/CancelEditDialogFragment.java
@@ -0,0 +1,71 @@
+/*
+ * 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 android.app.AlertDialog;
+import android.app.Dialog;
+import android.app.DialogFragment;
+import android.content.DialogInterface;
+import android.os.Bundle;
+
+/**
+ * Asks the user whether to cancel editing the contact.
+ */
+public class CancelEditDialogFragment extends DialogFragment {
+
+    private static final String TAG = "cancelEditor";
+
+    /**
+     * Shows a {@link CancelEditDialogFragment} after setting the given Fragment as the
+     * target of the dialog.
+     */
+    public static void show(ContactEditorBaseFragment fragment) {
+        final CancelEditDialogFragment dialog = new CancelEditDialogFragment();
+        dialog.setTargetFragment(fragment, 0);
+        dialog.show(fragment.getFragmentManager(), TAG);
+    }
+
+    @Override
+    public Dialog onCreateDialog(Bundle savedInstanceState) {
+        return new AlertDialog.Builder(getActivity())
+                .setIconAttribute(android.R.attr.alertDialogIcon)
+                .setMessage(R.string.cancel_confirmation_dialog_message)
+                .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
+                            @Override
+                            public void onClick(DialogInterface dialogInterface, int which) {
+                                final Listener targetListener = (Listener) getTargetFragment();
+                                targetListener.onCancelEditConfirmed();
+                            }
+                        }
+                )
+                .setNegativeButton(android.R.string.cancel, null)
+                .create();
+    }
+
+    /**
+     * Callbacks for {@link CancelEditDialogFragment} hosts.
+     */
+    public interface Listener {
+
+        /**
+         * Invoked when the user confirms that they want to cancel editing the contact.
+         */
+        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
new file mode 100644
index 0000000..10efe10
--- /dev/null
+++ b/src/com/android/contacts/editor/CompactContactEditorFragment.java
@@ -0,0 +1,396 @@
+/*
+ * 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.ContactSaveService;
+import com.android.contacts.R;
+import com.android.contacts.activities.CompactContactEditorActivity;
+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.util.ImplicitIntentsUtil;
+import com.android.contacts.detail.PhotoSelectionHandler;
+import com.android.contacts.util.ContactPhotoUtils;
+
+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.util.Log;
+import android.view.LayoutInflater;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.LinearLayout;
+
+import java.io.FileNotFoundException;
+
+/**
+ * Contact editor with only the most important fields displayed initially.
+ */
+public class CompactContactEditorFragment extends ContactEditorBaseFragment implements
+        CompactRawContactsEditorView.Listener, PhotoSourceDialogFragment.Listener {
+
+    private static final String KEY_PHOTO_URI = "photo_uri";
+    private static final String KEY_PHOTO_RAW_CONTACT_ID = "photo_raw_contact_id";
+
+    /**
+     * Displays a PopupWindow with photo edit options.
+     */
+    final class PhotoHandler extends PhotoSelectionHandler implements View.OnClickListener {
+
+        /**
+         * Receiver of photo edit option callbacks.
+         */
+        private final class PhotoListener extends PhotoActionListener {
+
+            @Override
+            public void onRemovePictureChosen() {
+                getContent().setPhoto(/* bitmap =*/ null);
+                mUpdatedPhotos.remove(String.valueOf(mPhotoRawContactId));
+
+                // Update the mode so the options change if user clicks the photo again
+                mPhotoMode = getPhotoMode();
+            }
+
+            @Override
+            public void onPhotoSelected(Uri uri) throws FileNotFoundException {
+                final Bitmap bitmap = ContactPhotoUtils.getBitmapFromUri(getActivity(), uri);
+                if (bitmap == null || bitmap.getHeight() <= 0 || bitmap.getWidth() <= 0) {
+                    Log.w(TAG, "Invalid photo selected");
+                }
+                getContent().setPhoto(bitmap);
+
+                // Clear any previously saved full resolution photos under negative raw contact IDs
+                // so that we will use the newly selected photo, instead of an old one on rotations.
+                removeNewRawContactPhotos();
+
+                // If a new photo was chosen but not yet saved,
+                // we need to update the UI immediately
+                mUpdatedPhotos.putParcelable(String.valueOf(mPhotoRawContactId), uri);
+                getContent().setFullSizePhoto(uri);
+
+                // Update the mode so the options change if user clicks the photo again
+                mPhotoMode = getPhotoMode();
+
+                // Re-create the photo handler so that any additional photo selections create a
+                // new temp file (and don't hit the one that was just added to the cache).
+                mPhotoHandler = createPhotoHandler();
+            }
+
+            @Override
+            public Uri getCurrentPhotoUri() {
+                return mPhotoUri;
+            }
+
+            @Override
+            public void onPhotoSelectionDismissed() {
+            }
+        }
+
+        private PhotoListener mPhotoListener;
+        private int mPhotoMode;
+
+        public PhotoHandler(Context context, int photoMode, RawContactDeltaList state) {
+            // 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).
+            super(context, /* changeAnchorView =*/ null, photoMode, /* isDirectoryContact =*/ false,
+                    state);
+            mPhotoListener = new PhotoListener();
+            mPhotoMode = photoMode;
+        }
+
+        @Override
+        public void onClick(View view) {
+            PhotoSourceDialogFragment.show(CompactContactEditorFragment.this, mPhotoMode);
+        }
+
+        @Override
+        public PhotoActionListener getListener() {
+            return mPhotoListener;
+        }
+
+        @Override
+        protected void startPhotoActivity(Intent intent, int requestCode, Uri photoUri) {
+            mPhotoUri = photoUri;
+            mStatus = Status.SUB_ACTIVITY;
+
+            CompactContactEditorFragment.this.startActivityForResult(intent, requestCode);
+        }
+    }
+
+    private PhotoHandler mPhotoHandler;
+    private Uri mPhotoUri;
+    private long mPhotoRawContactId;
+
+    @Override
+    public void onCreate(Bundle savedState) {
+        super.onCreate(savedState);
+
+        if (savedState != null) {
+            mPhotoUri = savedState.getParcelable(KEY_PHOTO_URI);
+            mPhotoRawContactId = savedState.getLong(KEY_PHOTO_RAW_CONTACT_ID);
+        }
+    }
+
+    @Override
+    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedState) {
+        setHasOptionsMenu(true);
+
+        final View view = inflater.inflate(
+                R.layout.compact_contact_editor_fragment, container, false);
+        mContent = (LinearLayout) view.findViewById(R.id.editors);
+        return view;
+    }
+
+    @Override
+    public void onSaveInstanceState(Bundle outState) {
+        outState.putParcelable(KEY_PHOTO_URI, mPhotoUri);
+        outState.putLong(KEY_PHOTO_RAW_CONTACT_ID, mPhotoRawContactId);
+        super.onSaveInstanceState(outState);
+    }
+
+    @Override
+    public void onActivityResult(int requestCode, int resultCode, Intent data) {
+        if (mStatus == Status.SUB_ACTIVITY) {
+            mStatus = Status.EDITING;
+        }
+        if (mPhotoHandler != null
+                && mPhotoHandler.handlePhotoActivityResult(requestCode, resultCode, data)) {
+            return;
+        }
+        super.onActivityResult(requestCode, resultCode, data);
+    }
+
+    @Override
+    public void onStop() {
+        super.onStop();
+
+        // If anything was left unsaved, save it now
+        if (!getActivity().isChangingConfigurations() && mStatus == Status.EDITING) {
+            save(SaveMode.RELOAD, /* backPressed =*/ false);
+        }
+    }
+
+    @Override
+    protected void bindEditors() {
+        if (!isReadyToBindEditors()) {
+            return;
+        }
+
+        // Add input fields for the loaded Contact
+        final CompactRawContactsEditorView editorView = getContent();
+        editorView.setListener(this);
+        editorView.setState(mState, getMaterialPalette(), mViewIdGenerator);
+
+        // Set up the photo widget
+        mPhotoHandler = createPhotoHandler();
+        mPhotoRawContactId = editorView.getPhotoRawContactId();
+        if (mPhotoRawContactId < 0) {
+            // Since the raw contact IDs for new contacts are random negative numbers
+            // we consider any negative key a match
+            for (String key : mUpdatedPhotos.keySet()) {
+                try {
+                    if (Integer.parseInt(key) < 0) {
+                        editorView.setFullSizePhoto((Uri) mUpdatedPhotos.getParcelable(key));
+                        break;
+                    }
+                } catch (NumberFormatException ignored) {
+                }
+            }
+        } else if (mUpdatedPhotos.containsKey(String.valueOf(mPhotoRawContactId))) {
+            editorView.setFullSizePhoto((Uri) mUpdatedPhotos.getParcelable(
+                    String.valueOf(mPhotoRawContactId)));
+        }
+        editorView.setPhotoHandler(mPhotoHandler);
+
+        // The editor is ready now so make it visible
+        editorView.setEnabled(isEnabled());
+        editorView.setVisibility(View.VISIBLE);
+
+        // Refresh the ActionBar as the visibility of the join command
+        // Activity can be null if we have been detached from the Activity.
+        invalidateOptionsMenu();
+    }
+
+    private boolean isReadyToBindEditors() {
+        if (mState.isEmpty()) {
+            if (Log.isLoggable(TAG, Log.VERBOSE)) {
+                Log.v(TAG, "No data to bind editors");
+            }
+            return false;
+        }
+        if (mIsEdit && !mExistingContactDataReady) {
+            if (Log.isLoggable(TAG, Log.VERBOSE)) {
+                Log.v(TAG, "Existing contact data is not ready to bind editors.");
+            }
+            return false;
+        }
+        if (mHasNewContact && !mNewContactDataReady) {
+            if (Log.isLoggable(TAG, Log.VERBOSE)) {
+                Log.v(TAG, "New contact data is not ready to bind editors.");
+            }
+            return false;
+        }
+        return true;
+    }
+
+    private PhotoHandler createPhotoHandler() {
+        return new PhotoHandler(getActivity(), getPhotoMode(), mState);
+    }
+
+    private int getPhotoMode() {
+        // To determine the options that are available to the user to update their photo
+        // (i.e. the photo mode), check if any of the writable raw contacts has a photo set
+        Integer photoMode = null;
+        boolean hasWritableAccountType = false;
+        final AccountTypeManager accountTypes = AccountTypeManager.getInstance(mContext);
+        for (RawContactDelta rawContactDelta : mState) {
+            if (!rawContactDelta.isVisible()) {
+                continue;
+            }
+            final AccountType accountType = rawContactDelta.getAccountType(accountTypes);
+            if (accountType.areContactsWritable()) {
+                hasWritableAccountType = true;
+                if (getContent().isWritablePhotoSet()) {
+                    photoMode = PhotoActionPopup.Modes.MULTIPLE_WRITE_ABLE_PHOTOS;
+                    break;
+                }
+            }
+        }
+        // If the mode was not set, base it on whether we saw a writable contact or not
+        if (photoMode == null) {
+            photoMode = hasWritableAccountType
+                    ? PhotoActionPopup.Modes.NO_PHOTO : PhotoActionPopup.Modes.READ_ONLY_PHOTO;
+        }
+        return photoMode;
+    }
+
+    @Override
+    protected View getAggregationAnchorView(long rawContactId) {
+        return getContent().getAggregationAnchorView();
+    }
+
+    @Override
+    protected void setGroupMetaData() {
+        // The compact editor does not support groups.
+    }
+
+    @Override
+    protected boolean doSaveAction(int saveMode, boolean backPressed) {
+        // Save contact. No need to pass the palette since we are finished editing after the save.
+        final Intent intent = ContactSaveService.createSaveContactIntent(mContext, mState,
+                SAVE_MODE_EXTRA_KEY, saveMode, isEditingUserProfile(),
+                ((Activity) mContext).getClass(),
+                CompactContactEditorActivity.ACTION_SAVE_COMPLETED, mUpdatedPhotos, backPressed);
+        mContext.startService(intent);
+
+        return true;
+    }
+
+    @Override
+    protected void joinAggregate(final long contactId) {
+        final Intent intent = ContactSaveService.createJoinContactsIntent(
+                mContext, mContactIdForJoin, contactId, CompactContactEditorActivity.class,
+                CompactContactEditorActivity.ACTION_JOIN_COMPLETED);
+        mContext.startService(intent);
+    }
+
+    @Override
+    public void onRemovePictureChosen() {
+        if (mPhotoHandler != null) {
+            mPhotoHandler.getListener().onRemovePictureChosen();
+        }
+    }
+
+    @Override
+    public void onTakePhotoChosen() {
+        if (mPhotoHandler != null) {
+            mPhotoHandler.getListener().onTakePhotoChosen();
+        }
+    }
+
+    @Override
+    public void onPickFromGalleryChosen() {
+        if (mPhotoHandler != null) {
+            mPhotoHandler.getListener().onPickFromGalleryChosen();
+        }
+    }
+
+    @Override
+    public void onExpandEditor() {
+        // Determine if this is an insert (new contact) or edit
+        final boolean isInsert = isInsert(getActivity().getIntent());
+
+        if (isInsert) {
+            // For inserts, prevent any changes from being saved when the base fragment is destroyed
+            mStatus = Status.CLOSING;
+        } else {
+            // Prevent a Toast from being displayed as we transition to the full editor
+            mShowToastAfterSave = false;
+
+            // Save whatever is in the form
+            save(SaveMode.RELOAD, /* backPressed =*/ false);
+        }
+
+        // Prepare an Intent to start the expanded editor
+        final Intent intent = isInsert
+                ? EditorIntents.createInsertContactIntent(
+                        mState, getDisplayName(), getPhoneticName(), mUpdatedPhotos)
+                : EditorIntents.createEditContactIntent(mLookupUri, getMaterialPalette());
+        ImplicitIntentsUtil.startActivityInApp(getActivity(), intent);
+
+        getActivity().finish();
+    }
+
+    @Override
+    public void onNameFieldChanged(long rawContactId, ValuesDelta valuesDelta) {
+        final Activity activity = getActivity();
+        if (activity == null || activity.isFinishing()) {
+            return;
+        }
+        if (!mIsUserProfile) {
+            acquireAggregationSuggestions(activity, rawContactId, valuesDelta);
+        }
+    }
+
+    @Override
+    public String getDisplayName() {
+        final StructuredNameEditorView structuredNameEditorView =
+                getContent().getStructuredNameEditorView();
+        return structuredNameEditorView == null
+                ? null : structuredNameEditorView.getDisplayName();
+    }
+
+    @Override
+    public String getPhoneticName() {
+        final PhoneticNameEditorView phoneticNameEditorView =
+                getContent().getFirstPhoneticNameEditorView();
+        return phoneticNameEditorView == null
+                ? null : phoneticNameEditorView.getPhoneticName();
+    }
+
+    private CompactRawContactsEditorView getContent() {
+        return (CompactRawContactsEditorView) mContent;
+    }
+}
diff --git a/src/com/android/contacts/editor/CompactPhotoEditorView.java b/src/com/android/contacts/editor/CompactPhotoEditorView.java
new file mode 100644
index 0000000..0b1cbe8
--- /dev/null
+++ b/src/com/android/contacts/editor/CompactPhotoEditorView.java
@@ -0,0 +1,291 @@
+/*
+ * 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.ContactPhotoManager.DefaultImageProvider;
+import com.android.contacts.common.ContactPhotoManager.DefaultImageRequest;
+import com.android.contacts.common.ContactsUtils;
+import com.android.contacts.common.model.RawContactDelta;
+import com.android.contacts.common.model.ValuesDelta;
+import com.android.contacts.common.model.dataitem.DataKind;
+import com.android.contacts.common.util.MaterialColorMapUtils;
+import com.android.contacts.common.util.MaterialColorMapUtils.MaterialPalette;
+import com.android.contacts.editor.CompactContactEditorFragment.PhotoHandler;
+import com.android.contacts.util.ContactPhotoUtils;
+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;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.graphics.drawable.GradientDrawable;
+import android.net.Uri;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.CommonDataKinds.Photo;
+import android.provider.ContactsContract.DisplayPhoto;
+import android.util.AttributeSet;
+import android.util.DisplayMetrics;
+import android.util.Log;
+import android.util.TypedValue;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ImageView;
+import android.widget.RelativeLayout;
+
+/**
+ * Displays the primary photo.
+ */
+public class CompactPhotoEditorView extends RelativeLayout implements View.OnClickListener {
+
+    private static final String TAG = CompactContactEditorFragment.TAG;
+
+    private ContactPhotoManager mContactPhotoManager;
+    private PhotoHandler mPhotoHandler;
+
+    private final float mLandscapePhotoRatio;
+    private final float mPortraitPhotoRatio;
+    private final boolean mIsTwoPanel;
+
+    private final int mActionBarHeight;
+    private final int mStatusBarHeight;
+
+    private ValuesDelta mValuesDelta;
+    private boolean mReadOnly;
+    private boolean mIsPhotoSet;
+    private MaterialPalette mMaterialPalette;
+
+    private QuickContactImageView mPhotoImageView;
+    private View mPhotoIconOverlay;
+
+    public CompactPhotoEditorView(Context context) {
+        this(context, null);
+    }
+
+    public CompactPhotoEditorView(Context context, AttributeSet attrs) {
+        super(context, attrs);
+        mLandscapePhotoRatio = getTypedFloat(R.dimen.quickcontact_landscape_photo_ratio);
+        mPortraitPhotoRatio = getTypedFloat(R.dimen.editor_portrait_photo_ratio);
+        mIsTwoPanel = getResources().getBoolean(R.bool.quickcontact_two_panel);
+
+        final TypedArray styledAttributes = getContext().getTheme().obtainStyledAttributes(
+                new int[] { android.R.attr.actionBarSize });
+        mActionBarHeight = (int) styledAttributes.getDimension(0, 0);
+        styledAttributes.recycle();
+
+        final int resourceId = getResources().getIdentifier(
+                "status_bar_height", "dimen", "android");
+        mStatusBarHeight = resourceId > 0 ? getResources().getDimensionPixelSize(resourceId) : 0;
+    }
+
+    private float getTypedFloat(int resourceId) {
+        final TypedValue typedValue = new TypedValue();
+        getResources().getValue(resourceId, typedValue, /* resolveRefs =*/ true);
+        return typedValue.getFloat();
+    }
+
+    @Override
+    protected void onFinishInflate() {
+        super.onFinishInflate();
+        mContactPhotoManager = ContactPhotoManager.getInstance(getContext());
+
+        mPhotoImageView = (QuickContactImageView) findViewById(R.id.photo);
+        mPhotoIconOverlay = findViewById(R.id.photo_icon_overlay);
+        findViewById(R.id.photo_touch_intercept_overlay).setOnClickListener(this);
+    }
+
+    public void setValues(DataKind dataKind, ValuesDelta valuesDelta,
+            RawContactDelta rawContactDelta, boolean readOnly, MaterialPalette materialPalette,
+            ViewIdGenerator viewIdGenerator) {
+        mValuesDelta = valuesDelta;
+        mReadOnly = readOnly;
+        mMaterialPalette = materialPalette;
+
+        setId(viewIdGenerator.getId(rawContactDelta, dataKind, valuesDelta, /* viewIndex =*/ 0));
+
+        if (valuesDelta == null) {
+            setDefaultPhoto();
+        } else {
+            final byte[] bytes = valuesDelta.getAsByteArray(Photo.PHOTO);
+            if (bytes == null) {
+                setDefaultPhoto();
+            } else {
+                final Bitmap bitmap = BitmapFactory.decodeByteArray(
+                        bytes, /* offset =*/ 0, bytes.length);
+                mPhotoImageView.setImageBitmap(bitmap);
+                mIsPhotoSet = true;
+                mValuesDelta.setFromTemplate(false);
+
+                // Check if we can update to the full size photo immediately
+                if (valuesDelta.getAfter() == null
+                        || valuesDelta.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 fileId = valuesDelta.getAsInteger(Photo.PHOTO_FILE_ID);
+                    if (fileId != null) {
+                        final Uri photoUri = DisplayPhoto.CONTENT_URI.buildUpon()
+                                .appendPath(fileId.toString()).build();
+                        setFullSizedPhoto(photoUri);
+                    }
+                }
+            }
+        }
+
+        if (mIsPhotoSet) {
+            // Add background color behind the white photo icon so that it's visible even
+            // if the contact photo is white.
+            mPhotoIconOverlay.setBackground(new GradientDrawable(
+                    GradientDrawable.Orientation.TOP_BOTTOM, new int[]{0, 0x88000000}));
+        } else {
+            setDefaultPhotoTint();
+        }
+
+        // Adjust the photo dimensions following the same logic as MultiShrinkScroll.initialize
+        SchedulingUtils.doOnPreDraw(this, /* drawNextFrame =*/ false, new Runnable() {
+            @Override
+            public void run() {
+                final int photoHeight, photoWidth;
+                if (mIsTwoPanel) {
+                    photoHeight = getContentViewHeight();
+                    photoWidth = (int) (photoHeight * mLandscapePhotoRatio);
+                } else {
+                    // Make the photo slightly shorter that it is wide
+                    photoWidth = getWidth();
+                    photoHeight = (int) (photoWidth / mPortraitPhotoRatio);
+                }
+                final ViewGroup.LayoutParams layoutParams = getLayoutParams();
+                layoutParams.height = photoHeight;
+                layoutParams.width = photoWidth;
+                setLayoutParams(layoutParams);
+            }
+        });
+    }
+
+    // We're calculating the height the hard way because using the height of the content view
+    // (found using android.view.Window.ID_ANDROID_CONTENT) with the soft keyboard up when
+    // going from portrait to landscape mode results in a very small height value.
+    // See b/20526470
+    private int getContentViewHeight() {
+        final Activity activity = (Activity) getContext();
+        final DisplayMetrics displayMetrics = new DisplayMetrics();
+        activity.getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
+        return displayMetrics.heightPixels - mActionBarHeight - mStatusBarHeight;
+    }
+
+    /**
+     * Set the {@link PhotoHandler} to forward clicks (i.e. requests to edit the photo) to.
+     */
+    public void setPhotoHandler(PhotoHandler photoHandler) {
+        mPhotoHandler = photoHandler;
+    }
+
+    /**
+     * Whether a writable {@link Photo} has been set.
+     */
+    public boolean isWritablePhotoSet() {
+        return mIsPhotoSet && !mReadOnly;
+    }
+
+    /**
+     * Set the given {@link Bitmap} as the photo in the underlying {@link ValuesDelta}
+     * and bind a thumbnail to the UI.
+     */
+    public void setPhoto(Bitmap bitmap) {
+        if (mReadOnly) {
+            Log.w(TAG, "Attempted to set read only photo. Aborting");
+            return;
+        }
+        if (bitmap == null) {
+            mValuesDelta.put(ContactsContract.CommonDataKinds.Photo.PHOTO, (byte[]) null);
+            setDefaultPhoto();
+            return;
+        }
+
+        final int thumbnailSize = ContactsUtils.getThumbnailSize(getContext());
+        final Bitmap scaledBitmap = Bitmap.createScaledBitmap(
+                bitmap, thumbnailSize, thumbnailSize, /* filter =*/ false);
+
+        mPhotoImageView.setImageBitmap(scaledBitmap);
+        mIsPhotoSet = true;
+        mValuesDelta.setFromTemplate(false);
+
+        // When the user chooses a new photo mark it as super primary
+        mValuesDelta.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(scaledBitmap);
+        if (compressed != null) {
+            mValuesDelta.setPhoto(compressed);
+        }
+    }
+
+    /**
+     * Show the default "add photo" place holder.
+     */
+    private void setDefaultPhoto() {
+        mPhotoImageView.setImageDrawable(ContactPhotoManager.getDefaultAvatarDrawableForContact(
+                getResources(), /* hires =*/ false, /* defaultImageRequest =*/ null));
+        setDefaultPhotoTint();
+        mIsPhotoSet = false;
+        mValuesDelta.setFromTemplate(true);
+    }
+
+    private void setDefaultPhotoTint() {
+        final int color = mMaterialPalette == null
+                ? MaterialColorMapUtils.getDefaultPrimaryAndSecondaryColors(
+                getResources()).mPrimaryColor
+                : mMaterialPalette.mPrimaryColor;
+        mPhotoImageView.setTint(color);
+    }
+
+    /**
+     * Bind the photo at the given Uri to the UI but do not set the photo on the underlying
+     * {@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);
+        }
+    }
+
+    @Override
+    public void onClick(View view) {
+        if (mPhotoHandler != null) {
+            mPhotoHandler.onClick(view);
+        }
+    }
+}
diff --git a/src/com/android/contacts/editor/CompactRawContactsEditorView.java b/src/com/android/contacts/editor/CompactRawContactsEditorView.java
new file mode 100644
index 0000000..88dd969
--- /dev/null
+++ b/src/com/android/contacts/editor/CompactRawContactsEditorView.java
@@ -0,0 +1,614 @@
+/*
+ * 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.model.AccountTypeManager;
+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.AccountType.EditField;
+import com.android.contacts.common.model.dataitem.DataKind;
+import com.android.contacts.common.util.MaterialColorMapUtils;
+import com.android.contacts.editor.CompactContactEditorFragment.PhotoHandler;
+
+import android.content.Context;
+import android.graphics.Bitmap;
+import android.net.Uri;
+import android.provider.ContactsContract.CommonDataKinds.Email;
+import android.provider.ContactsContract.CommonDataKinds.GroupMembership;
+import android.provider.ContactsContract.CommonDataKinds.Nickname;
+import android.provider.ContactsContract.CommonDataKinds.Phone;
+import android.provider.ContactsContract.CommonDataKinds.Photo;
+import android.provider.ContactsContract.CommonDataKinds.StructuredName;
+import android.text.TextUtils;
+import android.util.AttributeSet;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.LinearLayout;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * View to display information from multiple {@link RawContactDelta}s grouped together
+ * (e.g. all the phone numbers from a {@link com.android.contacts.common.model.Contact} together.
+ */
+public class CompactRawContactsEditorView extends LinearLayout implements View.OnClickListener {
+
+    private static final String TAG = "CompactEditorView";
+
+    /**
+     * Callbacks for hosts of {@link CompactRawContactsEditorView}s.
+     */
+    public interface Listener {
+
+        /**
+         * Invoked when the compact editor should be expanded to show all fields.
+         */
+        public void onExpandEditor();
+
+        /**
+         * Invoked when the structured name editor field has changed.
+         *
+         * @param rawContactId The raw contact ID from the underlying {@link RawContactDelta}.
+         * @param valuesDelta The values from the underlying {@link RawContactDelta}.
+         */
+        public void onNameFieldChanged(long rawContactId, ValuesDelta valuesDelta);
+    }
+
+    /**
+     * Marks a name as super primary when it is changed.
+     *
+     * This is for the case when two or more raw contacts with names are joined where neither is
+     * marked as super primary.  If the user hits back (which causes a save) after changing the
+     * name that was arbitrarily displayed, we want that to be the name that is used.
+     *
+     * Should only be set when a super primary name does not already exist since we only show
+     * one name field.
+     */
+    static final class NameEditorListener implements Editor.EditorListener {
+
+        private final ValuesDelta mValuesDelta;
+        private final long mRawContactId;
+        private final Listener mListener;
+
+        public NameEditorListener(ValuesDelta valuesDelta, long rawContactId,
+                Listener listener) {
+            mValuesDelta = valuesDelta;
+            mRawContactId = rawContactId;
+            mListener = listener;
+        }
+
+        @Override
+        public void onRequest(int request) {
+            if (request == Editor.EditorListener.FIELD_CHANGED) {
+                mValuesDelta.setSuperPrimary(true);
+                if (mListener != null) {
+                    mListener.onNameFieldChanged(mRawContactId, mValuesDelta);
+                }
+            } else if (request == Editor.EditorListener.FIELD_TURNED_EMPTY) {
+                mValuesDelta.setSuperPrimary(false);
+            }
+        }
+
+        @Override
+        public void onDeleteRequested(Editor editor) {
+        }
+    }
+
+    private Listener mListener;
+
+    private AccountTypeManager mAccountTypeManager;
+    private LayoutInflater mLayoutInflater;
+
+    private ViewIdGenerator mViewIdGenerator;
+    private MaterialColorMapUtils.MaterialPalette mMaterialPalette;
+
+    private CompactPhotoEditorView mPhoto;
+    private ViewGroup mNames;
+    private ViewGroup mPhoneticNames;
+    private ViewGroup mNicknames;
+    private ViewGroup mPhoneNumbers;
+    private ViewGroup mEmails;
+    private ViewGroup mOther;
+    private View mMoreFields;
+
+    // The ValuesDelta for the non super primary name that was displayed to the user.
+    private ValuesDelta mNameValuesDelta;
+
+    private long mPhotoRawContactId;
+
+    public CompactRawContactsEditorView(Context context) {
+        super(context);
+    }
+
+    public CompactRawContactsEditorView(Context context, AttributeSet attrs) {
+        super(context, attrs);
+    }
+
+    /**
+     * Sets the receiver for {@link CompactRawContactsEditorView} callbacks.
+     */
+    public void setListener(Listener listener) {
+        mListener = listener;
+    }
+
+    @Override
+    protected void onFinishInflate() {
+        super.onFinishInflate();
+
+        mAccountTypeManager = AccountTypeManager.getInstance(getContext());
+        mLayoutInflater = (LayoutInflater)
+                getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+
+        mPhoto = (CompactPhotoEditorView) findViewById(R.id.photo_editor);
+        mNames = (LinearLayout) findViewById(R.id.names);
+        mPhoneticNames = (LinearLayout) findViewById(R.id.phonetic_names);
+        mNicknames = (LinearLayout) findViewById(R.id.nicknames);
+        mPhoneNumbers = (LinearLayout) findViewById(R.id.phone_numbers);
+        mEmails = (LinearLayout) findViewById(R.id.emails);
+        mOther = (LinearLayout) findViewById(R.id.other);
+        mMoreFields = findViewById(R.id.more_fields);
+        mMoreFields.setOnClickListener(this);
+    }
+
+    @Override
+    public void onClick(View view) {
+        if (view.getId() == R.id.more_fields && mListener != null ) {
+            // We mark the name that was displayed as super primary before expanding
+            // so that a save on the expanded editor (without a name change) does not
+            // cause the displayed name to change.
+            if (mNameValuesDelta != null) {
+                mNameValuesDelta.setSuperPrimary(true);
+            }
+
+            mListener.onExpandEditor();
+        }
+    }
+
+    @Override
+    public void setEnabled(boolean enabled) {
+        super.setEnabled(enabled);
+        setEnabled(enabled, mNames);
+        setEnabled(enabled, mPhoneticNames);
+        setEnabled(enabled, mNicknames);
+        setEnabled(enabled, mPhoneNumbers);
+        setEnabled(enabled, mEmails);
+        setEnabled(enabled, mOther);
+    }
+
+    private void setEnabled(boolean enabled, ViewGroup viewGroup) {
+        if (viewGroup != null) {
+            final int childCount = viewGroup.getChildCount();
+            for (int i = 0; i < childCount; i++) {
+                viewGroup.getChildAt(i).setEnabled(enabled);
+            }
+        }
+    }
+
+    /**
+     * Pass through to {@link CompactPhotoEditorView#setPhotoHandler}.
+     */
+    public void setPhotoHandler(PhotoHandler photoHandler) {
+        mPhoto.setPhotoHandler(photoHandler);
+    }
+
+    /**
+     * Pass through to {@link CompactPhotoEditorView#setPhoto}.
+     */
+    public void setPhoto(Bitmap bitmap) {
+        mPhoto.setPhoto(bitmap);
+    }
+
+    /**
+     * Pass through to {@link CompactPhotoEditorView#setFullSizedPhoto(Uri)}.
+     */
+    public void setFullSizePhoto(Uri photoUri) {
+        mPhoto.setFullSizedPhoto(photoUri);
+    }
+
+    /**
+     * Pass through to {@link CompactPhotoEditorView#isWritablePhotoSet}.
+     */
+    public boolean isWritablePhotoSet() {
+        return mPhoto.isWritablePhotoSet();
+    }
+
+    /**
+     * Get the raw contact ID for the CompactHeaderView photo.
+     */
+    public long getPhotoRawContactId() {
+        return mPhotoRawContactId;
+    }
+
+    public StructuredNameEditorView getStructuredNameEditorView() {
+        // We only ever show one StructuredName
+        return mNames.getChildCount() == 0
+                ? null : (StructuredNameEditorView) mNames.getChildAt(0);
+    }
+
+    public PhoneticNameEditorView getFirstPhoneticNameEditorView() {
+        // There should only ever be one phonetic name
+        return mPhoneticNames.getChildCount() == 0
+                ? null : (PhoneticNameEditorView) mPhoneticNames.getChildAt(0);
+    }
+
+    public View getAggregationAnchorView() {
+        // Since there is only one structured name we can just return it as the anchor for
+        // the aggregation suggestions popup
+        if (mNames.getChildCount() == 0) {
+            return null;
+        }
+        return mNames.getChildAt(0).findViewById(R.id.anchor_view);
+    }
+
+    public void setState(RawContactDeltaList rawContactDeltas,
+            MaterialColorMapUtils.MaterialPalette materialPalette,
+            ViewIdGenerator viewIdGenerator) {
+        mNames.removeAllViews();
+        mPhoneticNames.removeAllViews();
+        mNicknames.removeAllViews();
+        mPhoneNumbers.removeAllViews();
+        mEmails.removeAllViews();
+        mOther.removeAllViews();
+
+        if (rawContactDeltas == null || rawContactDeltas.isEmpty()) {
+            return;
+        }
+
+        mViewIdGenerator = viewIdGenerator;
+        setId(mViewIdGenerator.getId(rawContactDeltas.get(0), /* dataKind =*/ null,
+                /* valuesDelta =*/ null, ViewIdGenerator.NO_VIEW_INDEX));
+        mMaterialPalette = materialPalette;
+
+        vlog("Setting compact editor state from " + rawContactDeltas);
+        addPhotoView(rawContactDeltas, viewIdGenerator);
+        addStructuredNameView(rawContactDeltas);
+        addEditorViews(rawContactDeltas);
+        removeExtraEmptyTextFields(mPhoneNumbers);
+        removeExtraEmptyTextFields(mEmails);
+    }
+
+    private void addPhotoView(RawContactDeltaList rawContactDeltas,
+            ViewIdGenerator viewIdGenerator) {
+        for (RawContactDelta rawContactDelta : rawContactDeltas) {
+            if (!rawContactDelta.isVisible()) continue;
+            final AccountType accountType = rawContactDelta.getAccountType(mAccountTypeManager);
+
+            // Make sure we have a photo
+            RawContactModifier.ensureKindExists(
+                    rawContactDelta, accountType, Photo.CONTENT_ITEM_TYPE);
+
+            // Look for a non-empty super primary photo
+            final DataKind dataKind = accountType.getKindForMimetype(Photo.CONTENT_ITEM_TYPE);
+            if (dataKind != null) {
+                final ValuesDelta valuesDelta = getNonEmptySuperPrimaryValuesDeltas(
+                        rawContactDelta, Photo.CONTENT_ITEM_TYPE, dataKind);
+                if (valuesDelta != null) {
+                    mPhotoRawContactId = rawContactDelta.getRawContactId();
+                    mPhoto.setValues(dataKind, valuesDelta, rawContactDelta,
+                            /* readOnly =*/ !dataKind.editable, mMaterialPalette,
+                            viewIdGenerator);
+                    return;
+                }
+            }
+        }
+        // We didn't find a non-empty super primary photo, use the first non-empty one
+        for (RawContactDelta rawContactDelta : rawContactDeltas) {
+            if (!rawContactDelta.isVisible()) continue;
+            final AccountType accountType = rawContactDelta.getAccountType(mAccountTypeManager);
+            final DataKind dataKind = accountType.getKindForMimetype(Photo.CONTENT_ITEM_TYPE);
+            if (dataKind != null) {
+                final List<ValuesDelta> valuesDeltas = getNonEmptyValuesDeltas(
+                        rawContactDelta, Photo.CONTENT_ITEM_TYPE, dataKind);
+                if (valuesDeltas != null && !valuesDeltas.isEmpty()) {
+                    mPhotoRawContactId = rawContactDelta.getRawContactId();
+                    mPhoto.setValues(dataKind, valuesDeltas.get(0), rawContactDelta,
+                            /* readOnly =*/ !dataKind.editable, mMaterialPalette,
+                            viewIdGenerator);
+                    return;
+                }
+            }
+        }
+        // No suitable non-empty photo
+        for (RawContactDelta rawContactDelta : rawContactDeltas) {
+            if (!rawContactDelta.isVisible()) continue;
+            final AccountType accountType = rawContactDelta.getAccountType(mAccountTypeManager);
+            final DataKind dataKind = accountType.getKindForMimetype(Photo.CONTENT_ITEM_TYPE);
+            if (dataKind != null) {
+                final ValuesDelta valuesDelta = rawContactDelta.getSuperPrimaryEntry(
+                        dataKind.mimeType, /* forceSelection =*/ true);
+                if (valuesDelta != null) {
+                    mPhotoRawContactId = rawContactDelta.getRawContactId();
+                    mPhoto.setValues(dataKind, valuesDelta, rawContactDelta,
+                            /* readOnly =*/ !dataKind.editable, mMaterialPalette,
+                            viewIdGenerator);
+                    return;
+                }
+            }
+        }
+        // Should not happen since we ensure the kind exists but if we unexpectedly get here
+        // we must remove the photo section so that it does not take up the entire view
+        mPhoto.setVisibility(View.GONE);
+    }
+
+    private void addStructuredNameView(RawContactDeltaList rawContactDeltas) {
+        for (RawContactDelta rawContactDelta : rawContactDeltas) {
+            if (!rawContactDelta.isVisible()) continue;
+            final AccountType accountType = rawContactDelta.getAccountType(mAccountTypeManager);
+
+            // Make sure we have a structured name
+            RawContactModifier.ensureKindExists(
+                    rawContactDelta, accountType, StructuredName.CONTENT_ITEM_TYPE);
+
+            // Note use of pseudo mime type to get the DataKind and StructuredName to get value
+            final DataKind dataKind = accountType.getKindForMimetype(
+                    DataKind.PSEUDO_MIME_TYPE_DISPLAY_NAME);
+            if (dataKind == null || !dataKind.editable) continue;
+
+            final ValuesDelta superPrimaryValuesDelta = getNonEmptySuperPrimaryValuesDeltas(
+                    rawContactDelta, StructuredName.CONTENT_ITEM_TYPE, dataKind);
+            if (superPrimaryValuesDelta != null) {
+                // Our first preference is for a non-empty super primary name
+                final NameEditorListener nameEditorListener = new NameEditorListener(
+                        superPrimaryValuesDelta, rawContactDelta.getRawContactId(), mListener);
+                mNames.addView(inflateStructuredNameEditorView(mNames, accountType,
+                        superPrimaryValuesDelta, rawContactDelta, nameEditorListener));
+                return;
+            }
+        }
+        // We didn't find a super primary name
+        for (RawContactDelta rawContactDelta : rawContactDeltas) {
+            if (!rawContactDelta.isVisible()) continue;
+            final AccountType accountType = rawContactDelta.getAccountType(mAccountTypeManager);
+
+            final DataKind dataKind = accountType.getKindForMimetype(
+                    DataKind.PSEUDO_MIME_TYPE_DISPLAY_NAME);
+            if (dataKind == null || !dataKind.editable) continue;
+
+            final List<ValuesDelta> nonEmptyValuesDeltas = getNonEmptyValuesDeltas(
+                    rawContactDelta, StructuredName.CONTENT_ITEM_TYPE, dataKind);
+            if (nonEmptyValuesDeltas != null && !nonEmptyValuesDeltas.isEmpty()) {
+                // Take the first non-empty name, also make it super primary before expanding to the
+                // full editor (see #onCLick) so that name does not change if the user saves from
+                // the fully expanded editor.
+                mNameValuesDelta = nonEmptyValuesDeltas.get(0);
+                final NameEditorListener nameEditorListener = new NameEditorListener(
+                        mNameValuesDelta, rawContactDelta.getRawContactId(), mListener);
+                mNames.addView(inflateStructuredNameEditorView(mNames, accountType,
+                        mNameValuesDelta, rawContactDelta, nameEditorListener));
+                return;
+            }
+        }
+        for (RawContactDelta rawContactDelta : rawContactDeltas) {
+            if (!rawContactDelta.isVisible()) continue;
+            final AccountType accountType = rawContactDelta.getAccountType(mAccountTypeManager);
+
+            final DataKind dataKind = accountType.getKindForMimetype(
+                    DataKind.PSEUDO_MIME_TYPE_DISPLAY_NAME);
+            if (dataKind == null || !dataKind.editable) continue;
+
+            // Fall back to the first entry
+            final ArrayList<ValuesDelta> valuesDeltas = rawContactDelta.getMimeEntries(
+                    StructuredName.CONTENT_ITEM_TYPE);
+            if (valuesDeltas != null && !valuesDeltas.isEmpty()) {
+                mNameValuesDelta = valuesDeltas.get(0);
+                final NameEditorListener nameEditorListener = new NameEditorListener(
+                        mNameValuesDelta, rawContactDelta.getRawContactId(), mListener);
+                mNames.addView(inflateStructuredNameEditorView(mNames, accountType,
+                        mNameValuesDelta, rawContactDelta, nameEditorListener));
+                return;
+            }
+        }
+    }
+
+    private void addEditorViews(RawContactDeltaList rawContactDeltas) {
+        for (RawContactDelta rawContactDelta : rawContactDeltas) {
+            if (!rawContactDelta.isVisible()) {
+                continue;
+            }
+            final AccountType accountType = rawContactDelta.getAccountType(mAccountTypeManager);
+
+            for (DataKind dataKind : accountType.getSortedDataKinds()) {
+                if (!dataKind.editable) {
+                    continue;
+                }
+                final String mimeType = dataKind.mimeType;
+                vlog(mimeType + " " + dataKind.fieldList.size() + " field(s)");
+                if (Photo.CONTENT_ITEM_TYPE.equals(mimeType)
+                        || StructuredName.CONTENT_ITEM_TYPE.equals(mimeType)
+                        || GroupMembership.CONTENT_ITEM_TYPE.equals(mimeType)) {
+                    // Photos and structured names are handled separately and
+                    // group membership is not supported
+                    continue;
+                } else if (DataKind.PSEUDO_MIME_TYPE_PHONETIC_NAME.equals(mimeType)) {
+                    // Only add phonetic names if there is a non-empty one. Note the use of
+                    // StructuredName mimeType below, even though we matched a pseudo mime type.
+                    final ValuesDelta valuesDelta = rawContactDelta.getSuperPrimaryEntry(
+                            StructuredName.CONTENT_ITEM_TYPE, /* forceSelection =*/ true);
+                    if (hasNonEmptyValue(dataKind, valuesDelta)) {
+                        mPhoneticNames.addView(inflatePhoneticNameEditorView(
+                                mPhoneticNames, accountType, valuesDelta, rawContactDelta));
+                    }
+                } else if (Nickname.CONTENT_ITEM_TYPE.equals(mimeType)) {
+                    // Only add nicknames if there is a non-empty one
+                    if (hasNonEmptyValuesDelta(rawContactDelta, mimeType, dataKind)) {
+                        mNicknames.addView(inflateKindSectionView(
+                                mNicknames, dataKind, rawContactDelta));
+                    }
+                } else if (Phone.CONTENT_ITEM_TYPE.equals(mimeType)) {
+                    mPhoneNumbers.addView(inflateKindSectionView(
+                            mPhoneNumbers, dataKind, rawContactDelta));
+                } else if (Email.CONTENT_ITEM_TYPE.equals(mimeType)) {
+                    mEmails.addView(inflateKindSectionView(
+                            mEmails, dataKind, rawContactDelta));
+                } else if (hasNonEmptyValuesDelta(rawContactDelta, mimeType, dataKind)) {
+                    mOther.addView(inflateKindSectionView(
+                            mOther, dataKind, rawContactDelta));
+                }
+            }
+        }
+    }
+
+    // TODO: avoid inflating extra views and deleting them
+    private void removeExtraEmptyTextFields(ViewGroup viewGroup) {
+        // If there is one (or less) editors, leave it whether it is empty or not
+        if (viewGroup.getChildCount() <= 1) {
+            return;
+        }
+        // Determine if there are any non-empty editors
+        boolean hasAtLeastOneNonEmptyEditorView = false;
+        for (int i = 0; i < viewGroup.getChildCount(); i++) {
+            if (!isEmptyEditorView(viewGroup.getChildAt(i))) {
+                hasAtLeastOneNonEmptyEditorView = true;
+                break;
+            }
+        }
+        if (hasAtLeastOneNonEmptyEditorView) {
+            // There is at least one non-empty editor, remove all the empty ones
+            for (int i = 0; i < viewGroup.getChildCount(); i++) {
+                if (isEmptyEditorView(viewGroup.getChildAt(i))) {
+                    viewGroup.getChildAt(i).setVisibility(View.GONE);
+                }
+            }
+        } else {
+            // There is no non-empty editor, keep the first empty view and remove the rest
+            for (int i = 1; i < viewGroup.getChildCount(); i++) {
+                viewGroup.getChildAt(i).setVisibility(View.GONE);
+            }
+        }
+    }
+
+    private static boolean isEmptyEditorView(View view) {
+        if (view instanceof TextFieldsEditorView) {
+            final TextFieldsEditorView textFieldsEditorView = (TextFieldsEditorView) view;
+            return textFieldsEditorView.isEmpty();
+        }
+        if (view instanceof KindSectionView) {
+            final KindSectionView kindSectionView = (KindSectionView) view;
+            return kindSectionView.hasEmptyEditor();
+        }
+        return false;
+    }
+
+    private static boolean hasNonEmptyValuesDelta(RawContactDelta rawContactDelta,
+            String mimeType, DataKind dataKind) {
+        return !getNonEmptyValuesDeltas(rawContactDelta, mimeType, dataKind).isEmpty();
+    }
+
+    private static ValuesDelta getNonEmptySuperPrimaryValuesDeltas(RawContactDelta rawContactDelta,
+            String mimeType, DataKind dataKind) {
+        for (ValuesDelta valuesDelta : getNonEmptyValuesDeltas(
+                rawContactDelta, mimeType, dataKind)) {
+            if (valuesDelta.isSuperPrimary()) {
+                return valuesDelta;
+            }
+        }
+        return null;
+    }
+
+    static List<ValuesDelta> getNonEmptyValuesDeltas(RawContactDelta rawContactDelta,
+            String mimeType, DataKind dataKind) {
+        final List<ValuesDelta> result = new ArrayList<>();
+        if (rawContactDelta == null) {
+            vlog("Null RawContactDelta");
+            return result;
+        }
+        if (!rawContactDelta.hasMimeEntries(mimeType)) {
+            vlog("No ValueDeltas");
+            return result;
+        }
+        for (ValuesDelta valuesDelta : rawContactDelta.getMimeEntries(mimeType)) {
+            if (hasNonEmptyValue(dataKind, valuesDelta)) {
+                result.add(valuesDelta);
+            }
+        }
+        return result;
+    }
+
+    private static boolean hasNonEmptyValue(DataKind dataKind, ValuesDelta valuesDelta) {
+        if (valuesDelta == null) {
+            vlog("Null valuesDelta");
+            return false;
+        }
+        for (EditField editField : dataKind.fieldList) {
+            final String column = editField.column;
+            final String value = valuesDelta == null ? null : valuesDelta.getAsString(column);
+            vlog("Field " + column + " empty=" + TextUtils.isEmpty(value) + " value=" + value);
+            if (!TextUtils.isEmpty(value)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    private StructuredNameEditorView inflateStructuredNameEditorView(ViewGroup viewGroup,
+            AccountType accountType, ValuesDelta valuesDelta, RawContactDelta rawContactDelta,
+            NameEditorListener nameEditorListener) {
+        final StructuredNameEditorView result = (StructuredNameEditorView) mLayoutInflater.inflate(
+                R.layout.structured_name_editor_view, viewGroup, /* attachToRoot =*/ false);
+        if (nameEditorListener != null) {
+            result.setEditorListener(nameEditorListener);
+        }
+        result.setDeletable(false);
+        result.setValues(
+                accountType.getKindForMimetype(DataKind.PSEUDO_MIME_TYPE_DISPLAY_NAME),
+                valuesDelta,
+                rawContactDelta,
+                /* readOnly =*/ false,
+                mViewIdGenerator);
+        return result;
+    }
+
+    private PhoneticNameEditorView inflatePhoneticNameEditorView(ViewGroup viewGroup,
+            AccountType accountType, ValuesDelta valuesDelta, RawContactDelta rawContactDelta) {
+        final PhoneticNameEditorView result = (PhoneticNameEditorView) mLayoutInflater.inflate(
+                R.layout.phonetic_name_editor_view, viewGroup, /* attachToRoot =*/ false);
+        result.setDeletable(false);
+        result.setValues(
+                accountType.getKindForMimetype(DataKind.PSEUDO_MIME_TYPE_PHONETIC_NAME),
+                valuesDelta,
+                rawContactDelta,
+                /* readOnly =*/ false,
+                mViewIdGenerator);
+        return result;
+    }
+
+    private KindSectionView inflateKindSectionView(ViewGroup viewGroup, DataKind dataKind,
+            RawContactDelta rawContactDelta) {
+        final KindSectionView result = (KindSectionView) mLayoutInflater.inflate(
+                R.layout.item_kind_section, viewGroup, /* attachToRoot =*/ false);
+        result.setState(
+                dataKind,
+                rawContactDelta,
+                /* readOnly =*/ false,
+                /* showOneEmptyEditor =*/ false,
+                mViewIdGenerator);
+        return result;
+    }
+
+    private static void vlog(String message) {
+        if (Log.isLoggable(TAG, Log.VERBOSE)) {
+            Log.v(TAG, message);
+        }
+    }
+}
diff --git a/src/com/android/contacts/editor/ContactEditorBaseFragment.java b/src/com/android/contacts/editor/ContactEditorBaseFragment.java
new file mode 100644
index 0000000..52076f7
--- /dev/null
+++ b/src/com/android/contacts/editor/ContactEditorBaseFragment.java
@@ -0,0 +1,1638 @@
+/*
+ * 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.google.common.collect.ImmutableList;
+import com.google.common.collect.Lists;
+
+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.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 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.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 java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Base Fragment for contact editors.
+ */
+abstract public class ContactEditorBaseFragment extends Fragment implements
+        ContactEditor, SplitContactConfirmationDialogFragment.Listener,
+        AggregationSuggestionEngine.Listener, AggregationSuggestionView.Listener,
+        CancelEditDialogFragment.Listener {
+
+    static final String TAG = "ContactEditor";
+
+    protected static final int LOADER_DATA = 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_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";
+
+    // 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_UPDATED_PHOTOS = "updatedPhotos";
+
+    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;
+
+    /**
+     * 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 calculated by
+     * {@link com.android.contacts.quickcontact.QuickContactActivity} to and between the compact
+     * editor and fully expanded editor.
+     */
+    public static final String INTENT_EXTRA_MATERIAL_PALETTE = "material_palette";
+
+    /**
+     * Intent key to pass a Bundle of raw contact IDs to photos URIs between the compact editor
+     * and the fully expanded one.
+     */
+    public static final String INTENT_EXTRA_UPDATED_PHOTOS = "updated_photos";
+
+    /**
+     * Intent extra to specify a {@link ContactEditor.SaveMode}.
+     */
+    public static final String SAVE_MODE_EXTRA_KEY = "saveMode";
+
+    /**
+     * Intent extra to specify whether the save was initiated as a result of a back button press
+     * or because the framework stopped the editor Activity.
+     */
+    public static final String INTENT_EXTRA_SAVE_BACK_PRESSED = "saveBackPressed";
+
+    /**
+     * 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;
+
+    //
+    // 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;
+
+    // Whether to show the new contact blank form and if it's corresponding delta is ready.
+    protected boolean mHasNewContact;
+    protected boolean mNewContactDataReady;
+
+    // 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;
+
+    // Full resolution photo URIs
+    protected Bundle mUpdatedPhotos = new Bundle();
+
+    //
+    // Not saved/restored on rotates
+    //
+
+    // Used to pre-populate the editor with a display name when a user edits a read-only contact.
+    protected String mDefaultDisplayName;
+
+    // Whether the name editor should receive focus after being bound
+    protected boolean mRequestFocus;
+
+    // Whether to show a Toast message after saves have completed.
+    // Does not affect successful toasts shown after joins, which are never displayed.
+    protected boolean mShowToastAfterSave = true;
+
+    /**
+     * The contact data loader listener.
+     */
+    protected final LoaderManager.LoaderCallbacks<Contact> mDataLoaderListener =
+            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 group meta data loader listener.
+     */
+    protected final LoaderManager.LoaderCallbacks<Cursor> mGroupLoaderListener =
+            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.getInstance(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);
+
+            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);
+
+            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);
+
+            // Full resolution photo URIs
+            mUpdatedPhotos = savedState.getParcelable(KEY_UPDATED_PHOTOS);
+        }
+
+        // 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.
+                // or
+                // 2) not an orientation change.  data needs to be loaded for first time.
+                getLoaderManager().initLoader(LOADER_DATA, null, mDataLoaderListener);
+            }
+        } else {
+            // Orientation change, we already have mState, it was loaded by onCreate
+            bindEditors();
+        }
+
+        // Handle initial actions only when existing state missing
+        if (savedInstanceState == null) {
+            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;
+                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) {
+                    // Account specified in Intent
+                    createContact(new AccountWithDataSet(account.name, account.type, dataSet));
+                } 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 onStart() {
+        getLoaderManager().initLoader(LOADER_GROUPS, null, mGroupLoaderListener);
+        super.onStart();
+    }
+
+    @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_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);
+
+        // Full resolution photo URIs
+        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());
+                    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) {
+        if (pickedUri == null || RingtoneManager.isDefault(pickedUri)) {
+            mCustomRingtone = null;
+        } else {
+            mCustomRingtone = pickedUri.toString();
+        }
+        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 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 doneMenu = menu.findItem(R.id.menu_done);
+        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 discardMenu = menu.findItem(R.id.menu_discard);
+        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
+        doneMenu.setVisible(false);
+
+        // Discard menu is only available if at least one raw contact is editable
+        discardMenu.setVisible(mState != null &&
+                mState.getFirstWritableRawContact(mContext) != null);
+
+        // help menu depending on whether this is inserting or editing
+        if (Intent.ACTION_INSERT.equals(mAction) ||
+                ContactEditorBaseActivity.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) ||
+                ContactEditorBaseActivity.ACTION_EDIT.equals(mAction)) {
+            HelpUtils.prepareHelpMenuItem(mContext, helpMenu, R.string.help_url_people_edit);
+            // Split only if more than one raw profile and not a user profile
+            splitMenu.setVisible(mState.size() > 1 && !isEditingUserProfile());
+            // Cannot join a user profile
+            joinMenu.setVisible(!isEditingUserProfile());
+            deleteMenu.setVisible(!mDisableDeleteMenuOption);
+        } else {
+            // something else, so don't show the help menu
+            helpMenu.setVisible(false);
+        }
+
+        // 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) {
+        switch (item.getItemId()) {
+            case android.R.id.home:
+            case R.id.menu_done:
+                return save(SaveMode.CLOSE, /* backPressed =*/ true);
+            case R.id.menu_discard:
+                return revert();
+            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;
+    }
+
+    private 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() {
+        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;
+        }
+
+        mState.markRawContactsForSplitting();
+        save(SaveMode.SPLIT, /* backPressed =*/ false);
+    }
+
+    private boolean doSplitContactAction() {
+        if (!hasValidState()) return false;
+
+        SplitContactConfirmationDialogFragment.show(this);
+        return true;
+    }
+
+    private boolean doJoinContactAction() {
+        if (!hasValidState()) {
+            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;
+        }
+
+        return save(SaveMode.JOIN, /* backPressed =*/ false);
+    }
+
+    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;
+        if (mCustomRingtone != null) {
+            ringtoneUri = Uri.parse(mCustomRingtone);
+        } else {
+            // Otherwise pick default ringtone Uri so that something is selected.
+            ringtoneUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE);
+        }
+
+        // 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, boolean backPressed) {
+        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_DATA);
+        }
+
+        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,
+                    /* updatedPhotos =*/ null, backPressed);
+            return true;
+        }
+
+        setEnabled(false);
+
+        // Store account as default account, only if this is a new contact
+        saveDefaultAccountIfNecessary();
+
+        if (isInsert(getActivity().getIntent()) && saveMode == SaveMode.COMPACT
+                && mListener != null && backPressed) {
+            // If we're coming back from the fully expanded editor and this is an insert, just
+            // pass any values entered by the user back to the compact editor without doing a save
+            final Intent resultIntent = EditorIntents.createCompactInsertContactIntent(
+                    mState, getDisplayName(), getPhoneticName(), mUpdatedPhotos);
+            resultIntent.putExtra(INTENT_EXTRA_SAVE_BACK_PRESSED, backPressed);
+            mListener.onSaveFinished(resultIntent);
+            return true;
+        }
+        // Otherwise this is an edit or a back press so do an actual save
+        return doSaveAction(saveMode, backPressed);
+    }
+
+    /**
+     * Persist the accumulated editor deltas.
+     */
+    abstract protected boolean doSaveAction(int saveMode, boolean backPressed);
+
+    //
+    // 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;
+    }
+
+    /**
+     * Return true if there are any edits to the current contact which need to
+     * be saved.
+     */
+    protected boolean hasPendingChanges() {
+        final AccountTypeManager accountTypes = AccountTypeManager.getInstance(mContext);
+        return RawContactModifier.hasChanges(mState, accountTypes);
+    }
+
+    /**
+     * 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;
+    }
+
+    /**
+     * Returns the currently displayed displayName;
+     */
+    abstract protected String getDisplayName();
+
+    /**
+     * Returns the currently displayed phonetic name;
+     */
+    abstract protected String getPhoneticName();
+
+    //
+    // 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.getDefaultAccount();
+            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);
+        }
+    }
+
+    /**
+     * Saves all writable accounts and the default account, but only for new contacts.
+     */
+    protected void saveDefaultAccountIfNecessary() {
+        // Verify that this is a newly created contact, that the contact is composed of only
+        // 1 raw contact, and that the contact is not a user profile.
+        if (!Intent.ACTION_INSERT.equals(mAction)
+                && !ContactEditorBaseActivity.ACTION_INSERT.equals(mAction)
+                && mState.size() == 1
+                && !isEditingUserProfile()) {
+            return;
+        }
+
+        // Find the associated account for this contact (retrieve it here because there are
+        // multiple paths to creating a contact and this ensures we always have the correct
+        // account).
+        final RawContactDelta rawContactDelta = mState.get(0);
+        String name = rawContactDelta.getAccountName();
+        String type = rawContactDelta.getAccountType();
+        String dataSet = rawContactDelta.getDataSet();
+
+        AccountWithDataSet account = (name == null || type == null) ? null :
+                new AccountWithDataSet(name, type, dataSet);
+        mEditorUtils.saveDefaultAndAllAccounts(account);
+    }
+
+    //
+    // 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 displayName = 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();
+            displayName = contact.getDisplayName();
+        }
+
+        // This also adds deltas to list
+        // If displayName is null at this point it is simply ignored later on by the editor.
+        setStateForExistingContact(displayName, contact.isUserProfile(), mRawContacts);
+    }
+
+    /**
+     * Prepare {@link #mState} for a newly created phone-local contact.
+     */
+    private void setStateForNewContact(AccountWithDataSet account, AccountType accountType) {
+        setStateForNewContact(account, accountType,
+                /* oldState =*/ null, /* oldAccountType =*/ null);
+    }
+
+    /**
+     * 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) {
+        mStatus = Status.EDITING;
+        mState.add(createNewRawContactDelta(account, accountType, oldState, oldAccountType));
+        mRequestFocus = true;
+        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 displayName, boolean isUserProfile,
+            ImmutableList<RawContact> rawContacts) {
+        setEnabled(true);
+        mDefaultDisplayName = displayName;
+
+        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());
+            }
+        }
+        mRequestFocus = true;
+        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();
+        }
+    }
+
+    //
+    // 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);
+            mMaterialPalette = mIntentExtras.getParcelable(INTENT_EXTRA_MATERIAL_PALETTE);
+            if (mIntentExtras.containsKey(INTENT_EXTRA_UPDATED_PHOTOS)) {
+                mUpdatedPhotos = mIntentExtras.getParcelable(INTENT_EXTRA_UPDATED_PHOTOS);
+            }
+        }
+    }
+
+    @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, /* updatedPhotos =*/ null,
+                /* backPressed =*/ false);
+    }
+
+    @Override
+    public void onSaveCompleted(boolean hadChanges, int saveMode, boolean saveSucceeded,
+            Uri contactLookupUri, Bundle updatedPhotos, boolean backPressed) {
+        if (hadChanges) {
+            if (saveSucceeded) {
+                if (saveMode != SaveMode.JOIN && mShowToastAfterSave) {
+                    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(lookupUri,
+                            QuickContactActivity.MODE_FULLY_EXPANDED);
+                    resultIntent.putExtra(INTENT_EXTRA_SAVE_BACK_PRESSED, backPressed);
+                } else {
+                    resultIntent = null;
+                }
+                mStatus = Status.CLOSING;
+                if (mListener != null) mListener.onSaveFinished(resultIntent);
+                break;
+            }
+            case SaveMode.COMPACT: {
+                if (!hadChanges && !backPressed && isInsert(getActivity().getIntent())) {
+                    // Reload the empty editor when the Contacts app is resumed
+                    mStatus = Status.EDITING;
+                } else if (backPressed) {
+                    final Uri lookupUri = maybeConvertToLegacyLookupUri(
+                            mContext, contactLookupUri, mLookupUri);
+                    final Intent resultIntent = isInsert(getActivity().getIntent())
+                            ? EditorIntents.createCompactInsertContactIntent(
+                                    mState, getDisplayName(), getPhoneticName(), updatedPhotos)
+                            : EditorIntents.createCompactEditContactIntent(
+                                    lookupUri, getMaterialPalette(), updatedPhotos);
+                    resultIntent.putExtra(INTENT_EXTRA_SAVE_BACK_PRESSED, true);
+                    mStatus = Status.CLOSING;
+                    if (mListener != null) mListener.onSaveFinished(resultIntent);
+                } else {
+                    reloadFullEditor(contactLookupUri);
+                }
+                break;
+            }
+            case SaveMode.RELOAD:
+            case SaveMode.JOIN:
+                if (saveSucceeded && contactLookupUri != null) {
+                    // If it was a JOIN, we are now ready to bring up the join activity.
+                    if (saveMode == SaveMode.JOIN && hasValidState()) {
+                        showJoinAggregateActivity(contactLookupUri);
+                    }
+                    reloadFullEditor(contactLookupUri);
+                }
+                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;
+        }
+    }
+
+    private void reloadFullEditor(Uri contactLookupUri) {
+        mState = new RawContactDeltaList();
+        load(ContactEditorBaseActivity.ACTION_EDIT, contactLookupUri, null);
+        mStatus = Status.LOADING;
+        getLoaderManager().restartLoader(LOADER_DATA, null, mDataLoaderListener);
+    }
+
+    /**
+     * 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(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, /* backPressed =*/ false);
+    }
+
+    @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);
+
+    //
+    // Photos
+    //
+
+    /**
+     * Removes the full resolution photo URIs for new raw contacts (identified by negative raw
+     * contact IDs) from the member Bundle of updated photos.
+     */
+    protected void removeNewRawContactPhotos() {
+        for (String key : mUpdatedPhotos.keySet()) {
+            try {
+                if (Integer.parseInt(key) < 0) {
+                    mUpdatedPhotos.remove(key);
+                }
+            } catch (NumberFormatException ignored) {
+            }
+        }
+    }
+
+    //
+    // 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) {
+        if (intent == null) return false;
+        final String action = intent.getAction();
+        return Intent.ACTION_INSERT.equals(action)
+                || ContactEditorBaseActivity.ACTION_INSERT.equals(action);
+    }
+}
diff --git a/src/com/android/contacts/editor/ContactEditorFragment.java b/src/com/android/contacts/editor/ContactEditorFragment.java
index be02952..e9b3715 100644
--- a/src/com/android/contacts/editor/ContactEditorFragment.java
+++ b/src/com/android/contacts/editor/ContactEditorFragment.java
@@ -16,211 +16,64 @@
 
 package com.android.contacts.editor;
 
-import android.accounts.Account;
 import android.app.Activity;
-import android.app.AlertDialog;
-import android.app.Dialog;
-import android.app.DialogFragment;
-import android.app.Fragment;
-import android.app.LoaderManager;
-import android.app.LoaderManager.LoaderCallbacks;
-import android.content.ActivityNotFoundException;
-import android.content.ContentUris;
-import android.content.ContentValues;
 import android.content.Context;
-import android.content.CursorLoader;
-import android.content.DialogInterface;
 import android.content.Intent;
-import android.content.Loader;
-import android.database.Cursor;
 import android.graphics.Bitmap;
-import android.graphics.Rect;
-import android.media.RingtoneManager;
 import android.net.Uri;
 import android.os.Bundle;
-import android.os.SystemClock;
-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.Photo;
-import android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
-import android.provider.ContactsContract.Contacts;
-import android.provider.ContactsContract.Groups;
-import android.provider.ContactsContract.Intents;
-import android.provider.ContactsContract.Intents.UI;
-import android.provider.ContactsContract.QuickContact;
-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.AdapterView.OnItemClickListener;
-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.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.common.model.account.GoogleAccountType;
 import com.android.contacts.common.util.AccountsListAdapter;
 import com.android.contacts.common.util.AccountsListAdapter.AccountListFilter;
 import com.android.contacts.detail.PhotoSelectionHandler;
-import com.android.contacts.editor.AggregationSuggestionEngine.Suggestion;
 import com.android.contacts.editor.Editor.EditorListener;
-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.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.google.common.collect.ImmutableList;
-import com.google.common.collect.Lists;
 
 import java.io.FileNotFoundException;
-import java.util.ArrayList;
 import java.util.Collections;
-import java.util.Comparator;
 import java.util.HashMap;
 import java.util.List;
 
-public class ContactEditorFragment extends Fragment implements
-        SplitContactConfirmationDialogFragment.Listener,
-        AggregationSuggestionEngine.Listener, AggregationSuggestionView.Listener,
+/**
+ * Contact editor with all fields displayed.
+ */
+public class ContactEditorFragment extends ContactEditorBaseFragment implements
         RawContactReadOnlyEditorView.Listener {
 
-    private static final String TAG = ContactEditorFragment.class.getSimpleName();
-
-    private static final int LOADER_DATA = 1;
-    private static final int LOADER_GROUPS = 2;
-
-    private static final String KEY_URI = "uri";
-    private static final String KEY_ACTION = "action";
-    private static final String KEY_EDIT_STATE = "state";
-    private static final String KEY_RAW_CONTACT_ID_REQUESTING_PHOTO = "photorequester";
-    private static final String KEY_VIEW_ID_GENERATOR = "viewidgenerator";
-    private static final String KEY_CURRENT_PHOTO_URI = "currentphotouri";
-    private static final String KEY_CONTACT_ID_FOR_JOIN = "contactidforjoin";
-    private static final String KEY_CONTACT_WRITABLE_FOR_JOIN = "contactwritableforjoin";
-    private static final String KEY_SHOW_JOIN_SUGGESTIONS = "showJoinSuggestions";
-    private static final String KEY_ENABLED = "enabled";
-    private static final String KEY_STATUS = "status";
-    private static final String KEY_NEW_LOCAL_PROFILE = "newLocalProfile";
-    private static final String KEY_IS_USER_PROFILE = "isUserProfile";
-    private static final String KEY_DISABLE_DELETE_MENU_OPTION = "disableDeleteMenuOption";
-    private static final String KEY_UPDATED_PHOTOS = "updatedPhotos";
-    private static final String KEY_IS_EDIT = "isEdit";
-    private static final String KEY_HAS_NEW_CONTACT = "hasNewContact";
-    private static final String KEY_NEW_CONTACT_READY = "newContactDataReady";
-    private static final String KEY_EXISTING_CONTACT_READY = "existingContactDataReady";
-    private static final String KEY_RAW_CONTACTS = "rawContacts";
-    private static final String KEY_SEND_TO_VOICE_MAIL_STATE = "sendToVoicemailState";
-    private static final String KEY_CUSTOM_RINGTONE = "customRingtone";
-    private static final String KEY_ARE_PHONE_OPTIONS_CHANGEABLE = "arePhoneOptionsChangable";
     private static final String KEY_EXPANDED_EDITORS = "expandedEditors";
 
-    public static final String SAVE_MODE_EXTRA_KEY = "saveMode";
+    private static final String KEY_RAW_CONTACT_ID_REQUESTING_PHOTO = "photorequester";
+    private static final String KEY_CURRENT_PHOTO_URI = "currentphotouri";
 
-
-    /**
-     * 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";
-
-    /**
-     * 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 Contacts Home activity after saving.
-         */
-        public static final int HOME = 4;
-    }
-
-    private 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
-         */
-        public static final int CLOSING = 3;
-
-        /**
-         * Prevents saving while running a child activity.
-         */
-        public static final int SUB_ACTIVITY = 4;
-    }
-
-    private static final int REQUEST_CODE_JOIN = 0;
-    private static final int REQUEST_CODE_ACCOUNTS_CHANGED = 1;
-    private static final int REQUEST_CODE_PICK_RINGTONE = 2;
+    // 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.
@@ -230,170 +83,11 @@
      * one.
      */
     private PhotoHandler mCurrentPhotoHandler;
-
-    private final EntityDeltaComparator mComparator = new EntityDeltaComparator();
-
-    private Cursor mGroupMetaData;
-
     private Uri mCurrentPhotoUri;
-    private Bundle mUpdatedPhotos = new Bundle();
-
-    private Context mContext;
-    private String mAction;
-    private Uri mLookupUri;
-    private Bundle mIntentExtras;
-    private Listener mListener;
-
-    private long mContactIdForJoin;
-    private boolean mContactWritableForJoin;
-
-    private ContactEditorUtils mEditorUtils;
-
-    private LinearLayout mContent;
-    private RawContactDeltaList mState;
-
-    private ViewIdGenerator mViewIdGenerator;
-
-    private long mLoaderStartTime;
-
-    private int mStatus;
-
-    // Whether to show the new contact blank form and if it's corresponding delta is ready.
-    private boolean mHasNewContact = false;
-    private boolean mNewContactDataReady = false;
-
-    // Whether it's an edit of existing contact and if it's corresponding delta is ready.
-    private boolean mIsEdit = false;
-    private boolean mExistingContactDataReady = false;
-
-    // Variables related to phone specific option menus
-    private boolean mSendToVoicemailState;
-    private boolean mArePhoneOptionsChangable;
-    private String mCustomRingtone;
-
-    // This is used to pre-populate the editor with a display name when a user edits a read-only
-    // contact.
-    private String mDefaultDisplayName;
-
-    // Used to temporarily store existing contact data during a rebind call (i.e. account switch)
-    private ImmutableList<RawContact> mRawContacts;
-
-    // Used to store which raw contact editors have been expanded. Keyed on raw contact ids.
-    private HashMap<Long, Boolean> mExpandedEditors = new HashMap<Long, Boolean>();
-
-    private AggregationSuggestionEngine mAggregationSuggestionEngine;
-    private long mAggregationSuggestionsRawContactId;
-    private View mAggregationSuggestionView;
-
-    private ListPopupWindow mAggregationSuggestionPopup;
-
-    private static final class AggregationSuggestionAdapter extends BaseAdapter {
-        private final Activity mActivity;
-        private final boolean mSetNewContact;
-        private final AggregationSuggestionView.Listener mListener;
-        private final List<Suggestion> mSuggestions;
-
-        public AggregationSuggestionAdapter(Activity activity, boolean setNewContact,
-                AggregationSuggestionView.Listener listener, List<Suggestion> suggestions) {
-            mActivity = activity;
-            mSetNewContact = setNewContact;
-            mListener = listener;
-            mSuggestions = suggestions;
-        }
-
-        @Override
-        public View getView(int position, View convertView, ViewGroup parent) {
-            Suggestion suggestion = (Suggestion) getItem(position);
-            LayoutInflater inflater = mActivity.getLayoutInflater();
-            AggregationSuggestionView suggestionView =
-                    (AggregationSuggestionView) inflater.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();
-        }
-    }
-
-    private OnItemClickListener mAggregationSuggestionItemClickListener =
-            new 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;
-        }
-    };
-
-    private boolean mAutoAddToDefaultGroup;
-
-    private boolean mEnabled = true;
-    private boolean mRequestFocus;
-    private boolean mNewLocalProfile = false;
-    private boolean mIsUserProfile = false;
-    private boolean mDisableDeleteMenuOption = false;
 
     public ContactEditorFragment() {
     }
 
-    public void setEnabled(boolean enabled) {
-        if (mEnabled != enabled) {
-            mEnabled = enabled;
-            if (mContent != null) {
-                int count = mContent.getChildCount();
-                for (int i = 0; i < count; i++) {
-                    mContent.getChildAt(i).setEnabled(enabled);
-                }
-            }
-            setAggregationSuggestionViewEnabled(enabled);
-            final Activity activity = getActivity();
-            if (activity != null) activity.invalidateOptionsMenu();
-        }
-    }
-
-    @Override
-    public void onAttach(Activity activity) {
-        super.onAttach(activity);
-        mContext = activity;
-        mEditorUtils = ContactEditorUtils.getInstance(mContext);
-    }
-
-    @Override
-    public void onStop() {
-        super.onStop();
-
-        UiClosables.closeQuietly(mAggregationSuggestionPopup);
-
-        // If anything was left unsaved, save it now but keep the editor open.
-        if (!getActivity().isChangingConfigurations() && mStatus == Status.EDITING) {
-            save(SaveMode.RELOAD);
-        }
-    }
-
-    @Override
-    public void onDestroy() {
-        super.onDestroy();
-        if (mAggregationSuggestionEngine != null) {
-            mAggregationSuggestionEngine.quit();
-        }
-    }
-
     @Override
     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedState) {
         final View view = inflater.inflate(R.layout.contact_editor_fragment, container, false);
@@ -406,189 +100,42 @@
     }
 
     @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.
-                // or
-                // 2) not an orientation change.  data needs to be loaded for first time.
-                getLoaderManager().initLoader(LOADER_DATA, null, mDataLoaderListener);
-            }
-        } else {
-            // Orientation change, we already have mState, it was loaded by onCreate
-            bindEditors();
-        }
-
-        // Handle initial actions only when existing state missing
-        if (savedInstanceState == null) {
-            if (Intent.ACTION_EDIT.equals(mAction)) {
-                mIsEdit = true;
-            } else if (Intent.ACTION_INSERT.equals(mAction)) {
-                mHasNewContact = true;
-                final Account account = mIntentExtras == null ? null :
-                        (Account) mIntentExtras.getParcelable(Intents.Insert.ACCOUNT);
-                final String dataSet = mIntentExtras == null ? null :
-                        mIntentExtras.getString(Intents.Insert.DATA_SET);
-
-                if (account != null) {
-                    // Account specified in Intent
-                    createContact(new AccountWithDataSet(account.name, account.type, dataSet));
-                } 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 void validateAction(String action) {
-        if (Intent.ACTION_EDIT.equals(action) || Intent.ACTION_INSERT.equals(action) ||
-                ContactEditorActivity.ACTION_SAVE_COMPLETED.equals(action)) {
-            return;
-        }
-        throw new IllegalArgumentException("Unknown Action String " + mAction +
-                ". Only support " + Intent.ACTION_EDIT + " or " + Intent.ACTION_INSERT + " or " +
-                ContactEditorActivity.ACTION_SAVE_COMPLETED);
-    }
-
-    @Override
-    public void onStart() {
-        getLoaderManager().initLoader(LOADER_GROUPS, null, mGroupLoaderListener);
-        super.onStart();
-    }
-
-    public void load(String action, Uri lookupUri, Bundle intentExtras) {
-        mAction = action;
-        mLookupUri = lookupUri;
-        mIntentExtras = intentExtras;
-        mAutoAddToDefaultGroup = mIntentExtras != null
-                && mIntentExtras.containsKey(INTENT_EXTRA_ADD_TO_DEFAULT_DIRECTORY);
-        mNewLocalProfile = mIntentExtras != null
-                && mIntentExtras.getBoolean(INTENT_EXTRA_NEW_LOCAL_PROFILE);
-        mDisableDeleteMenuOption = mIntentExtras != null
-                && mIntentExtras.getBoolean(INTENT_EXTRA_DISABLE_DELETE_MENU_OPTION);
-    }
-
-    public void setListener(Listener value) {
-        mListener = value;
-    }
-
-    @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
-            mLookupUri = savedState.getParcelable(KEY_URI);
-            mAction = savedState.getString(KEY_ACTION);
-        }
-
         super.onCreate(savedState);
 
-        if (savedState == null) {
-            // If savedState is non-null, onRestoreInstanceState() will restore the generator.
-            mViewIdGenerator = new ViewIdGenerator();
-        } else {
-            // Read state from savedState. No loading involved here
-            mState = savedState.<RawContactDeltaList> getParcelable(KEY_EDIT_STATE);
-            mRawContactIdRequestingPhoto = savedState.getLong(
-                    KEY_RAW_CONTACT_ID_REQUESTING_PHOTO);
-            mViewIdGenerator = savedState.getParcelable(KEY_VIEW_ID_GENERATOR);
-            mCurrentPhotoUri = savedState.getParcelable(KEY_CURRENT_PHOTO_URI);
-            mContactIdForJoin = savedState.getLong(KEY_CONTACT_ID_FOR_JOIN);
-            mContactWritableForJoin = savedState.getBoolean(KEY_CONTACT_WRITABLE_FOR_JOIN);
-            mAggregationSuggestionsRawContactId = savedState.getLong(KEY_SHOW_JOIN_SUGGESTIONS);
-            mEnabled = savedState.getBoolean(KEY_ENABLED);
-            mStatus = savedState.getInt(KEY_STATUS);
-            mNewLocalProfile = savedState.getBoolean(KEY_NEW_LOCAL_PROFILE);
-            mDisableDeleteMenuOption = savedState.getBoolean(KEY_DISABLE_DELETE_MENU_OPTION);
-            mIsUserProfile = savedState.getBoolean(KEY_IS_USER_PROFILE);
-            mUpdatedPhotos = savedState.getParcelable(KEY_UPDATED_PHOTOS);
-            mIsEdit = savedState.getBoolean(KEY_IS_EDIT);
-            mHasNewContact = savedState.getBoolean(KEY_HAS_NEW_CONTACT);
-            mNewContactDataReady = savedState.getBoolean(KEY_NEW_CONTACT_READY);
-            mExistingContactDataReady = savedState.getBoolean(KEY_EXISTING_CONTACT_READY);
-            mRawContacts = ImmutableList.copyOf(savedState.<RawContact>getParcelableArrayList(
-                    KEY_RAW_CONTACTS));
-            mSendToVoicemailState = savedState.getBoolean(KEY_SEND_TO_VOICE_MAIL_STATE);
-            mCustomRingtone =  savedState.getString(KEY_CUSTOM_RINGTONE);
-            mArePhoneOptionsChangable =  savedState.getBoolean(KEY_ARE_PHONE_OPTIONS_CHANGEABLE);
+        if (savedState != null) {
             mExpandedEditors = (HashMap<Long, Boolean>)
                     savedState.getSerializable(KEY_EXPANDED_EDITORS);
-        }
-
-        // mState can still be null because it may not have have finished loading before
-        // onSaveInstanceState was called.
-        if (mState == null) {
-            mState = new RawContactDeltaList();
+            mRawContactIdRequestingPhoto = savedState.getLong(
+                    KEY_RAW_CONTACT_ID_REQUESTING_PHOTO);
+            mCurrentPhotoUri = savedState.getParcelable(KEY_CURRENT_PHOTO_URI);
         }
     }
 
-    public void setData(Contact contact) {
+    @Override
+    public void onStop() {
+        super.onStop();
 
-        // 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;
+        // If anything was left unsaved, save it now and return to the compact editor.
+        if (!getActivity().isChangingConfigurations() && mStatus == Status.EDITING) {
+            save(SaveMode.COMPACT, /* backPressed =*/ false);
         }
-
-        // 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 displayName = 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();
-            displayName = contact.getDisplayName();
-        }
-
-        // This also adds deltas to list
-        // If displayName is null at this point it is simply ignored later on by the editor.
-        bindEditorsForExistingContact(displayName, contact.isUserProfile(),
-                mRawContacts);
-
-        bindMenuItemsForPhone(contact);
     }
 
     @Override
     public void onExternalEditorRequest(AccountWithDataSet account, Uri uri) {
-        mListener.onCustomEditContactActivityRequested(account, uri, null, false);
+        if (mListener != null) {
+            mListener.onCustomEditContactActivityRequested(account, uri, null, false);
+        }
+    }
+
+    @Override
+    public boolean onOptionsItemSelected(MenuItem item) {
+        // Override the home/done options to return to the compact editor
+        if (item.getItemId() == android.R.id.home || item.getItemId() == R.id.menu_done) {
+            return save(SaveMode.COMPACT, /* backPressed =*/ true);
+        }
+        return super.onOptionsItemSelected(item);
     }
 
     @Override
@@ -596,138 +143,6 @@
         updatedExpandedEditorsMap();
     }
 
-    private void bindEditorsForExistingContact(String displayName, boolean isUserProfile,
-            ImmutableList<RawContact> rawContacts) {
-        setEnabled(true);
-        mDefaultDisplayName = displayName;
-
-        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 state : mState) {
-                // For profile contacts, we need a different query URI
-                state.setProfileQueryUri();
-                // Try to find a local profile contact
-                if (state.getValues().getAsString(RawContacts.ACCOUNT_TYPE) == null) {
-                    localProfileExists = true;
-                }
-            }
-            // Editor should always present a local profile for editing
-            if (!localProfileExists) {
-                final RawContact rawContact = new RawContact();
-                rawContact.setAccountToLocal();
-
-                RawContactDelta insert = new RawContactDelta(ValuesDelta.fromAfter(
-                        rawContact.getValues()));
-                insert.setProfileQueryUri();
-                mState.add(insert);
-            }
-        }
-        mRequestFocus = true;
-        mExistingContactDataReady = true;
-        bindEditors();
-    }
-
-    private void bindMenuItemsForPhone(Contact contact) {
-        mSendToVoicemailState = contact.isSendToVoicemail();
-        mCustomRingtone = contact.getCustomRingtone();
-        mArePhoneOptionsChangable = arePhoneOptionsChangable(contact);
-    }
-
-    private boolean arePhoneOptionsChangable(Contact contact) {
-        return contact != null && !contact.isDirectoryEntry()
-                && PhoneCapabilityTester.isPhone(mContext);
-    }
-
-    /**
-     * Merges extras from the intent.
-     */
-    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;
-            }
-        }
-    }
-
-    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);
-            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.getDefaultAccount();
-            if (defaultAccount == null) {
-                createContact(null);
-            } else {
-                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.getAccountType(account != null ? account.type : null,
-                        account != null ? account.dataSet : null);
-
-        if (accountType.getCreateContactActivityClassName() != null) {
-            if (mListener != null) {
-                mListener.onCustomCreateContactActivityRequested(account, mIntentExtras);
-            }
-        } else {
-            bindEditorsForNewContact(account, accountType);
-        }
-    }
-
     /**
      * 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.
@@ -740,10 +155,8 @@
             RawContactDelta oldState, AccountWithDataSet oldAccount,
             AccountWithDataSet newAccount) {
         AccountTypeManager accountTypes = AccountTypeManager.getInstance(mContext);
-        AccountType oldAccountType = accountTypes.getAccountType(
-                oldAccount.type, oldAccount.dataSet);
-        AccountType newAccountType = accountTypes.getAccountType(
-                newAccount.type, newAccount.dataSet);
+        AccountType oldAccountType = accountTypes.getAccountTypeForAccount(oldAccount);
+        AccountType newAccountType = accountTypes.getAccountTypeForAccount(newAccount);
 
         if (newAccountType.getCreateContactActivityClassName() != null) {
             Log.w(TAG, "external activity called in rebind situation");
@@ -754,63 +167,27 @@
             mExistingContactDataReady = false;
             mNewContactDataReady = false;
             mState = new RawContactDeltaList();
-            bindEditorsForNewContact(newAccount, newAccountType, oldState, oldAccountType);
+            setStateForNewContact(newAccount, newAccountType, oldState, oldAccountType);
             if (mIsEdit) {
-                bindEditorsForExistingContact(mDefaultDisplayName, mIsUserProfile, mRawContacts);
+                setStateForExistingContact(mDefaultDisplayName, mIsUserProfile, mRawContacts);
             }
         }
     }
 
-    private void bindEditorsForNewContact(AccountWithDataSet account,
-            final AccountType accountType) {
-        bindEditorsForNewContact(account, accountType, null, null);
+    @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);
+        }
     }
 
-    private void bindEditorsForNewContact(AccountWithDataSet newAccount,
-            final AccountType newAccountType, RawContactDelta oldState,
-            AccountType oldAccountType) {
-        mStatus = Status.EDITING;
-
-        final RawContact rawContact = new RawContact();
-        if (newAccount != null) {
-            rawContact.setAccount(newAccount);
-        } else {
-            rawContact.setAccountToLocal();
-        }
-
-        final ValuesDelta valuesDelta = ValuesDelta.fromAfter(rawContact.getValues());
-        final RawContactDelta insert = new RawContactDelta(valuesDelta);
-        if (oldState == null) {
-            // Parse any values from incoming intent
-            RawContactModifier.parseExtras(mContext, newAccountType, insert, mIntentExtras);
-        } else {
-            RawContactModifier.migrateStateForNewContact(mContext, oldState, insert,
-                    oldAccountType, newAccountType);
-        }
-
-        // 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(insert, newAccountType, Phone.CONTENT_ITEM_TYPE);
-        RawContactModifier.ensureKindExists(insert, newAccountType, Email.CONTENT_ITEM_TYPE);
-        RawContactModifier.ensureKindExists(insert, newAccountType, Organization.CONTENT_ITEM_TYPE);
-        RawContactModifier.ensureKindExists(insert, newAccountType, Event.CONTENT_ITEM_TYPE);
-        RawContactModifier.ensureKindExists(insert, newAccountType,
-                StructuredPostal.CONTENT_ITEM_TYPE);
-
-        // Set the correct URI for saving the contact as a profile
-        if (mNewLocalProfile) {
-            insert.setProfileQueryUri();
-        }
-
-        mState.add(insert);
-
-        mRequestFocus = true;
-
-        mNewContactDataReady = true;
-        bindEditors();
-    }
-
-    private void bindEditors() {
+    @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()) {
@@ -858,7 +235,7 @@
                 addAccountSwitcher(mState.get(0), editor);
             }
 
-            editor.setEnabled(mEnabled);
+            editor.setEnabled(isEnabled());
 
             if (mExpandedEditors.containsKey(rawContactId)) {
                 editor.setCollapsed(mExpandedEditors.get(rawContactId));
@@ -883,16 +260,49 @@
             if (editor instanceof RawContactEditorView) {
                 final Activity activity = getActivity();
                 final RawContactEditorView rawContactEditor = (RawContactEditorView) editor;
-                EditorListener listener = new EditorListener() {
+                final ValuesDelta nameValuesDelta = rawContactEditor.getNameEditor().getValues();
+                final EditorListener structuredNameListener = new EditorListener() {
 
                     @Override
                     public void onRequest(int request) {
-                        if (activity.isFinishing()) { // Make sure activity is still running.
+                        // Make sure the activity is running
+                        if (activity.isFinishing()) {
                             return;
                         }
-                        if (request == EditorListener.FIELD_CHANGED && !isEditingUserProfile()) {
-                            acquireAggregationSuggestions(activity, rawContactEditor);
-                        } else if (request == EditorListener.EDITOR_FOCUS_CHANGED) {
+                        if (request == EditorListener.EDITOR_FOCUS_CHANGED) {
+                            adjustNameFieldsHintDarkness(rawContactEditor);
+                            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 EditorListener otherNamesListener = new EditorListener() {
+
+                    @Override
+                    public void onRequest(int request) {
+                        // Make sure the activity is running
+                        if (activity.isFinishing()) {
+                            return;
+                        }
+                        if (request == EditorListener.EDITOR_FOCUS_CHANGED) {
                             adjustNameFieldsHintDarkness(rawContactEditor);
                         }
                     }
@@ -907,22 +317,24 @@
                     nameEditor.requestFocus();
                     mRequestFocus = false;
                 }
-                nameEditor.setEditorListener(listener);
+                nameEditor.setEditorListener(structuredNameListener);
                 if (!TextUtils.isEmpty(mDefaultDisplayName)) {
                     nameEditor.setDisplayName(mDefaultDisplayName);
                 }
 
                 final TextFieldsEditorView phoneticNameEditor =
                         rawContactEditor.getPhoneticNameEditor();
-                phoneticNameEditor.setEditorListener(listener);
+                phoneticNameEditor.setEditorListener(otherNamesListener);
                 rawContactEditor.setAutoAddToDefaultGroup(mAutoAddToDefaultGroup);
 
                 final TextFieldsEditorView nickNameEditor =
                         rawContactEditor.getNickNameEditor();
-                nickNameEditor.setEditorListener(listener);
+                nickNameEditor.setEditorListener(otherNamesListener);
 
-                if (rawContactId == mAggregationSuggestionsRawContactId) {
-                    acquireAggregationSuggestions(activity, rawContactEditor);
+                if (isAggregationSuggestionRawContactId(rawContactId)) {
+                    acquireAggregationSuggestions(activity,
+                            rawContactEditor.getNameEditor().getRawContactId(),
+                            rawContactEditor.getNameEditor().getValues());
                 }
 
                 adjustNameFieldsHintDarkness(rawContactEditor);
@@ -931,19 +343,89 @@
 
         mRequestFocus = false;
 
-        bindGroupMetaData();
+        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
-        final Activity activity = getActivity();
-        if (activity != null) activity.invalidateOptionsMenu();
+        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);
+                    }
+                }
+            }
+        }
+    }
+
+    @Override
+    public String getDisplayName() {
+        // Return the super primary name if it is non-empty
+        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 String displayName = nameEditorView.getDisplayName();
+                    if (!TextUtils.isEmpty(displayName)) {
+                        return displayName;
+                    }
+                }
+            }
+        }
+        // Return the first non-empty name
+        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 String displayName = nameEditorView.getDisplayName();
+                    if (!TextUtils.isEmpty(displayName)) {
+                        return displayName;
+                    }
+                }
+            }
+        }
+        return null;
+    }
+
+    @Override
+    public String getPhoneticName() {
+        for (int i = 0; i < mContent.getChildCount(); i++) {
+            final View view = mContent.getChildAt(i);
+            if (view instanceof RawContactEditorView) {
+                final RawContactEditorView rawContactEditorView = (RawContactEditorView) view;
+                final PhoneticNameEditorView phoneticNameEditorView =
+                        (PhoneticNameEditorView) rawContactEditorView.getPhoneticNameEditor();
+                if (phoneticNameEditorView != null) {
+                    final String phoneticName = phoneticNameEditorView.getPhoneticName();
+                    if (!TextUtils.isEmpty(phoneticName)) {
+                        return phoneticName;
+                    }
+                }
+            }
+        }
+        return null;
+    }
+
     /**
      * Adjust how dark the hint text should be on all the names' text fields.
      *
@@ -1016,39 +498,6 @@
         }
     }
 
-    private void bindGroupMetaData() {
-        if (mGroupMetaData == null) {
-            return;
-        }
-
-        int editorCount = mContent.getChildCount();
-        for (int i = 0; i < editorCount; i++) {
-            BaseRawContactEditorView editor = (BaseRawContactEditorView) mContent.getChildAt(i);
-            editor.setGroupMetaData(mGroupMetaData);
-        }
-    }
-
-    private void saveDefaultAccountIfNecessary() {
-        // Verify that this is a newly created contact, that the contact is composed of only
-        // 1 raw contact, and that the contact is not a user profile.
-        if (!Intent.ACTION_INSERT.equals(mAction) && mState.size() == 1 &&
-                !isEditingUserProfile()) {
-            return;
-        }
-
-        // Find the associated account for this contact (retrieve it here because there are
-        // multiple paths to creating a contact and this ensures we always have the correct
-        // account).
-        final RawContactDelta rawContactDelta = mState.get(0);
-        String name = rawContactDelta.getAccountName();
-        String type = rawContactDelta.getAccountType();
-        String dataSet = rawContactDelta.getDataSet();
-
-        AccountWithDataSet account = (name == null || type == null) ? null :
-                new AccountWithDataSet(name, type, dataSet);
-        mEditorUtils.saveDefaultAndAllAccounts(account);
-    }
-
     private void addAccountSwitcher(
             final RawContactDelta currentState, BaseRawContactEditorView editor) {
         final AccountWithDataSet currentAccount = new AccountWithDataSet(
@@ -1090,174 +539,16 @@
     }
 
     @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 doneMenu = menu.findItem(R.id.menu_done);
-        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 discardMenu = menu.findItem(R.id.menu_discard);
-        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);
-        deleteMenu.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
-        deleteMenu.setIcon(R.drawable.ic_delete_white_24dp);
-
-        // Set visibility of menus
-        doneMenu.setVisible(false);
-
-        // Discard menu is only available if at least one raw contact is editable
-        discardMenu.setVisible(mState != null &&
-                mState.getFirstWritableRawContact(mContext) != null);
-
-        // 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);
-            // Split only if more than one raw profile and not a user profile
-            splitMenu.setVisible(mState.size() > 1 && !isEditingUserProfile());
-            // Cannot join a user profile
-            joinMenu.setVisible(!isEditingUserProfile());
-            deleteMenu.setVisible(!mDisableDeleteMenuOption);
-        } else {
-            // something else, so don't show the help menu
-            helpMenu.setVisible(false);
-        }
-
-        // 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) {
-        switch (item.getItemId()) {
-            case android.R.id.home:
-            case R.id.menu_done:
-                return save(SaveMode.CLOSE);
-            case R.id.menu_discard:
-                return revert();
-            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;
-    }
-
-    private boolean doSplitContactAction() {
-        if (!hasValidState()) return false;
-
-        final SplitContactConfirmationDialogFragment dialog =
-                new SplitContactConfirmationDialogFragment();
-        dialog.setTargetFragment(this, 0);
-        dialog.show(getFragmentManager(), SplitContactConfirmationDialogFragment.TAG);
-        return true;
-    }
-
-    private boolean doJoinContactAction() {
-        if (!hasValidState()) {
-            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;
-        }
-
-        return save(SaveMode.JOIN);
-    }
-
-    /**
-     * Check if our internal {@link #mState} is valid, usually checked before
-     * performing user actions.
-     */
-    private boolean hasValidState() {
-        return mState.size() > 0;
-    }
-
-    /**
-     * Return true if there are any edits to the current contact which need to
-     * be saved.
-     */
-    private boolean hasPendingChanges() {
-        final AccountTypeManager accountTypes = AccountTypeManager.getInstance(mContext);
-        return RawContactModifier.hasChanges(mState, accountTypes);
-    }
-
-    /**
-     * Saves or creates the contact based on the mode, and if successful
-     * finishes the activity.
-     */
-    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.SPLIT) {
-            getLoaderManager().destroyLoader(LOADER_DATA);
-        }
-
-        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(false, saveMode, mLookupUri != null, mLookupUri);
-            return true;
-        }
-
-        setEnabled(false);
-
-        // Store account as default account, only if this is a new contact
-        saveDefaultAccountIfNecessary();
-
-        // Save contact
+    protected boolean doSaveAction(int saveMode, boolean backPressed) {
+        // Save contact and reload the compact editor after saving.
+        // Note, the full resolution photos Bundle must be passed to the ContactSaveService
+        // and then passed along in the result Intent in order for the compact editor to
+        // receive it, instead of mUpdatedPhotos being accessed directly in onSaveCompleted,
+        // because we clear mUpdatedPhotos after starting the save service below.
         Intent intent = ContactSaveService.createSaveContactIntent(mContext, mState,
                 SAVE_MODE_EXTRA_KEY, saveMode, isEditingUserProfile(),
-                ((Activity)mContext).getClass(), ContactEditorActivity.ACTION_SAVE_COMPLETED,
-                mUpdatedPhotos);
+                ((Activity) mContext).getClass(), ContactEditorActivity.ACTION_SAVE_COMPLETED,
+                mUpdatedPhotos, backPressed);
         mContext.startService(intent);
 
         // Don't try to save the same photos twice.
@@ -1266,582 +557,11 @@
         return true;
     }
 
-    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;
-        if (mCustomRingtone != null) {
-            ringtoneUri = Uri.parse(mCustomRingtone);
-        } else {
-            // Otherwise pick default ringtone Uri so that something is selected.
-            ringtoneUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE);
-        }
-
-        // 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();
-        }
-    }
-
-    private void handleRingtonePicked(Uri pickedUri) {
-        if (pickedUri == null || RingtoneManager.isDefault(pickedUri)) {
-            mCustomRingtone = null;
-        } else {
-            mCustomRingtone = pickedUri.toString();
-        }
-        Intent intent = ContactSaveService.createSetRingtone(
-                mContext, mLookupUri, mCustomRingtone);
-        mContext.startService(intent);
-    }
-
-    public static class CancelEditDialogFragment extends DialogFragment {
-
-        public static void show(ContactEditorFragment fragment) {
-            CancelEditDialogFragment dialog = new CancelEditDialogFragment();
-            dialog.setTargetFragment(fragment, 0);
-            dialog.show(fragment.getFragmentManager(), "cancelEditor");
-        }
-
-        @Override
-        public Dialog onCreateDialog(Bundle savedInstanceState) {
-            AlertDialog dialog = new AlertDialog.Builder(getActivity())
-                    .setIconAttribute(android.R.attr.alertDialogIcon)
-                    .setMessage(R.string.cancel_confirmation_dialog_message)
-                    .setPositiveButton(android.R.string.ok,
-                        new DialogInterface.OnClickListener() {
-                            @Override
-                            public void onClick(DialogInterface dialogInterface, int whichButton) {
-                                ((ContactEditorFragment)getTargetFragment()).doRevertAction();
-                            }
-                        }
-                    )
-                    .setNegativeButton(android.R.string.cancel, null)
-                    .create();
-            return dialog;
-        }
-    }
-
-    private boolean revert() {
-        if (mState.isEmpty() || !hasPendingChanges()) {
-            doRevertAction();
-        } else {
-            CancelEditDialogFragment.show(this);
-        }
-        return true;
-    }
-
-    private void doRevertAction() {
-        // When this Fragment is closed we don't want it to auto-save
-        mStatus = Status.CLOSING;
-        if (mListener != null) mListener.onReverted();
-    }
-
-    public void doSaveAction() {
-        save(SaveMode.CLOSE);
-    }
-
-    public void onJoinCompleted(Uri uri) {
-        onSaveCompleted(false, SaveMode.RELOAD, uri != null, uri);
-    }
-
-    public void onSaveCompleted(boolean hadChanges, int saveMode, boolean saveSucceeded,
-            Uri contactLookupUri) {
-        if (hadChanges) {
-            if (saveSucceeded) {
-                if (saveMode != SaveMode.JOIN) {
-                    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:
-            case SaveMode.HOME:
-                final Intent resultIntent;
-                if (saveSucceeded && contactLookupUri != null) {
-                    final String requestAuthority =
-                            mLookupUri == null ? null : mLookupUri.getAuthority();
-
-                    final String legacyAuthority = "contacts";
-                    final Uri lookupUri;
-                    if (legacyAuthority.equals(requestAuthority)) {
-                        // Build legacy Uri when requested by caller
-                        final long contactId = ContentUris.parseId(Contacts.lookupContact(
-                                mContext.getContentResolver(), contactLookupUri));
-                        final Uri legacyContentUri = Uri.parse("content://contacts/people");
-                        final Uri legacyUri = ContentUris.withAppendedId(
-                                legacyContentUri, contactId);
-                        lookupUri = legacyUri;
-                    } else {
-                        // Otherwise pass back a lookup-style Uri
-                        lookupUri = contactLookupUri;
-                    }
-                    resultIntent = QuickContact.composeQuickContactsIntent(getActivity(),
-                            (Rect) null, lookupUri, QuickContactActivity.MODE_FULLY_EXPANDED, null);
-                    // Make sure not to show QuickContacts on top of another QuickContacts.
-                    resultIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
-                } else {
-                    resultIntent = null;
-                }
-                // It is already saved, so prevent that it is saved again
-                mStatus = Status.CLOSING;
-                if (mListener != null) mListener.onSaveFinished(resultIntent);
-                break;
-
-            case SaveMode.RELOAD:
-            case SaveMode.JOIN:
-                if (saveSucceeded && contactLookupUri != null) {
-                    // If it was a JOIN, we are now ready to bring up the join activity.
-                    if (saveMode == SaveMode.JOIN && hasValidState()) {
-                        showJoinAggregateActivity(contactLookupUri);
-                    }
-
-                    // 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_DATA, null, mDataLoaderListener);
-                }
-                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);
-        mContactWritableForJoin = isContactWritable();
-        final Intent intent = new Intent(UI.PICK_JOIN_CONTACT_ACTION);
-        intent.putExtra(UI.TARGET_CONTACT_ID_EXTRA_KEY, mContactIdForJoin);
-        startActivityForResult(intent, REQUEST_CODE_JOIN);
-    }
-
-    /**
-     * Performs aggregation with the contact selected by the user from suggestions or A-Z list.
-     */
-    private void joinAggregate(final long contactId) {
-        Intent intent = ContactSaveService.createJoinContactsIntent(mContext, mContactIdForJoin,
-                contactId, mContactWritableForJoin,
-                ContactEditorActivity.class, ContactEditorActivity.ACTION_JOIN_COMPLETED);
-        mContext.startService(intent);
-    }
-
-    /**
-     * Returns true if there is at least one writable raw contact in the current contact.
-     */
-    private boolean isContactWritable() {
-        final AccountTypeManager accountTypes = AccountTypeManager.getInstance(mContext);
-        int size = mState.size();
-        for (int i = 0; i < size; i++) {
-            RawContactDelta entity = mState.get(i);
-            final AccountType type = entity.getAccountType(accountTypes);
-            if (type.areContactsWritable()) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    private boolean isEditingUserProfile() {
-        return mNewLocalProfile || mIsUserProfile;
-    }
-
-    public static 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);
-
-        void onDeleteRequested(Uri contactUri);
-    }
-
-    private class EntityDeltaComparator implements Comparator<RawContactDelta> {
-        /**
-         * Compare EntityDeltas for sorting the stack of editors.
-         */
-        @Override
-        public int compare(RawContactDelta one, RawContactDelta two) {
-            // Check direct equality
-            if (one.equals(two)) {
-                return 0;
-            }
-
-            final AccountTypeManager accountTypes = AccountTypeManager.getInstance(mContext);
-            String accountType1 = one.getValues().getAsString(RawContacts.ACCOUNT_TYPE);
-            String dataSet1 = one.getValues().getAsString(RawContacts.DATA_SET);
-            final AccountType type1 = accountTypes.getAccountType(accountType1, dataSet1);
-            String accountType2 = two.getValues().getAsString(RawContacts.ACCOUNT_TYPE);
-            String dataSet2 = two.getValues().getAsString(RawContacts.DATA_SET);
-            final AccountType type2 = accountTypes.getAccountType(accountType2, dataSet2);
-
-            // Check read-only. Sort read/write before read-only.
-            if (!type1.areContactsWritable() && type2.areContactsWritable()) {
-                return 1;
-            } else if (type1.areContactsWritable() && !type2.areContactsWritable()) {
-                return -1;
-            }
-
-            // Check account type. Sort Google before non-Google.
-            boolean skipAccountTypeCheck = false;
-            boolean isGoogleAccount1 = type1 instanceof GoogleAccountType;
-            boolean isGoogleAccount2 = type2 instanceof GoogleAccountType;
-            if (isGoogleAccount1 && !isGoogleAccount2) {
-                return -1;
-            } else if (!isGoogleAccount1 && isGoogleAccount2) {
-                return 1;
-            } else if (isGoogleAccount1 && isGoogleAccount2){
-                skipAccountTypeCheck = true;
-            }
-
-            int value;
-            if (!skipAccountTypeCheck) {
-                // Sort accounts with type before accounts without types.
-                if (type1.accountType != null && type2.accountType == null) {
-                    return -1;
-                } else if (type1.accountType == null && type2.accountType != null) {
-                    return 1;
-                }
-
-                if (type1.accountType != null && type2.accountType != null) {
-                    value = type1.accountType.compareTo(type2.accountType);
-                    if (value != 0) {
-                        return value;
-                    }
-                }
-
-                // Fall back to data set. Sort accounts with data sets before
-                // those without.
-                if (type1.dataSet != null && type2.dataSet == null) {
-                    return -1;
-                } else if (type1.dataSet == null && type2.dataSet != null) {
-                    return 1;
-                }
-
-                if (type1.dataSet != null && type2.dataSet != null) {
-                    value = type1.dataSet.compareTo(type2.dataSet);
-                    if (value != 0) {
-                        return value;
-                    }
-                }
-            }
-
-            // Check account name
-            String oneAccount = one.getAccountName();
-            if (oneAccount == null) oneAccount = "";
-            String twoAccount = two.getAccountName();
-            if (twoAccount == null) twoAccount = "";
-            value = oneAccount.compareTo(twoAccount);
-            if (value != 0) {
-                return value;
-            }
-
-            // Both are in the same account, fall back to contact ID
-            Long oneId = one.getRawContactId();
-            Long twoId = two.getRawContactId();
-            if (oneId == null) {
-                return -1;
-            } else if (twoId == null) {
-                return 1;
-            }
-
-            return (int)(oneId - twoId);
-        }
-    }
-
-    /**
-     * Returns the contact ID for the currently edited contact or 0 if the contact is new.
-     */
-    protected long getContactId() {
-        for (RawContactDelta rawContact : mState) {
-            Long contactId = rawContact.getValues().getAsLong(RawContacts.CONTACT_ID);
-            if (contactId != null) {
-                return contactId;
-            }
-        }
-        return 0;
-    }
-
-    /**
-     * Triggers an asynchronous search for aggregation suggestions.
-     */
-    private void acquireAggregationSuggestions(Context context,
-            RawContactEditorView rawContactEditor) {
-        long rawContactId = rawContactEditor.getRawContactId();
-        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());
-
-        LabeledEditorView nameEditor = rawContactEditor.getNameEditor();
-        mAggregationSuggestionEngine.onNameChange(nameEditor.getValues());
-    }
-
-    @Override
-    public void onAggregationSuggestionChange() {
-        Activity activity = getActivity();
-        if ((activity != null && activity.isFinishing())
-                || !isVisible() ||  mState.isEmpty() || mStatus != Status.EDITING) {
-            return;
-        }
-
-        UiClosables.closeQuietly(mAggregationSuggestionPopup);
-
-        if (mAggregationSuggestionEngine.getSuggestedContactCount() == 0) {
-            return;
-        }
-
-        final RawContactEditorView rawContactView =
-                (RawContactEditorView)getRawContactEditorView(mAggregationSuggestionsRawContactId);
-        if (rawContactView == null) {
-            return; // Raw contact deleted?
-        }
-        final View anchorView = rawContactView.findViewById(R.id.anchor_view);
-        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(),
-                        this, mAggregationSuggestionEngine.getSuggestions()));
-        mAggregationSuggestionPopup.setOnItemClickListener(mAggregationSuggestionItemClickListener);
-        mAggregationSuggestionPopup.show();
-    }
-
-    @Override
-    public void onJoinAction(long contactId, List<Long> rawContactIdList) {
-        long rawContactIds[] = new long[rawContactIdList.size()];
-        for (int i = 0; i < rawContactIds.length; i++) {
-            rawContactIds[i] = rawContactIdList.get(i);
-        }
-        JoinSuggestedContactDialogFragment dialog =
-                new JoinSuggestedContactDialogFragment();
-        Bundle args = new Bundle();
-        args.putLongArray("rawContactIds", rawContactIds);
-        dialog.setArguments(args);
-        dialog.setTargetFragment(this, 0);
-        try {
-            dialog.show(getFragmentManager(), "join");
-        } catch (Exception ex) {
-            // No problem - the activity is no longer available to display the dialog
-        }
-    }
-
-    public static class JoinSuggestedContactDialogFragment extends DialogFragment {
-
-        @Override
-        public Dialog onCreateDialog(Bundle savedInstanceState) {
-            return new AlertDialog.Builder(getActivity())
-                    .setIconAttribute(android.R.attr.alertDialogIcon)
-                    .setMessage(R.string.aggregation_suggestion_join_dialog_message)
-                    .setPositiveButton(android.R.string.yes,
-                        new DialogInterface.OnClickListener() {
-                            @Override
-                            public void onClick(DialogInterface dialog, int whichButton) {
-                                ContactEditorFragment targetFragment =
-                                        (ContactEditorFragment) getTargetFragment();
-                                long rawContactIds[] =
-                                        getArguments().getLongArray("rawContactIds");
-                                targetFragment.doJoinSuggestedContact(rawContactIds);
-                            }
-                        }
-                    )
-                    .setNegativeButton(android.R.string.no, null)
-                    .create();
-        }
-    }
-
-    /**
-     * 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 dialog =
-                new SuggestionEditConfirmationDialogFragment();
-        Bundle args = new Bundle();
-        args.putParcelable("contactUri", contactLookupUri);
-        dialog.setArguments(args);
-        dialog.setTargetFragment(this, 0);
-        dialog.show(getFragmentManager(), "edit");
-    }
-
-    public static class SuggestionEditConfirmationDialogFragment extends DialogFragment {
-
-        @Override
-        public Dialog onCreateDialog(Bundle savedInstanceState) {
-            return new AlertDialog.Builder(getActivity())
-                    .setIconAttribute(android.R.attr.alertDialogIcon)
-                    .setMessage(R.string.aggregation_suggestion_edit_dialog_message)
-                    .setPositiveButton(android.R.string.yes,
-                        new DialogInterface.OnClickListener() {
-                            @Override
-                            public void onClick(DialogInterface dialog, int whichButton) {
-                                ContactEditorFragment targetFragment =
-                                        (ContactEditorFragment) getTargetFragment();
-                                Uri contactUri =
-                                        getArguments().getParcelable("contactUri");
-                                targetFragment.doEditSuggestedContact(contactUri);
-                            }
-                        }
-                    )
-                    .setNegativeButton(android.R.string.no, null)
-                    .create();
-        }
-    }
-
-    /**
-     * 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());
-        }
-    }
-
-    public void setAggregationSuggestionViewEnabled(boolean enabled) {
-        if (mAggregationSuggestionView == null) {
-            return;
-        }
-
-        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);
-        }
-    }
-
     @Override
     public void onSaveInstanceState(Bundle outState) {
-        outState.putParcelable(KEY_URI, mLookupUri);
-        outState.putString(KEY_ACTION, mAction);
-
-        if (hasValidState()) {
-            // Store entities with modifications
-            outState.putParcelable(KEY_EDIT_STATE, mState);
-        }
-        outState.putLong(KEY_RAW_CONTACT_ID_REQUESTING_PHOTO, mRawContactIdRequestingPhoto);
-        outState.putParcelable(KEY_VIEW_ID_GENERATOR, mViewIdGenerator);
-        outState.putParcelable(KEY_CURRENT_PHOTO_URI, mCurrentPhotoUri);
-        outState.putLong(KEY_CONTACT_ID_FOR_JOIN, mContactIdForJoin);
-        outState.putBoolean(KEY_CONTACT_WRITABLE_FOR_JOIN, mContactWritableForJoin);
-        outState.putLong(KEY_SHOW_JOIN_SUGGESTIONS, mAggregationSuggestionsRawContactId);
-        outState.putBoolean(KEY_ENABLED, mEnabled);
-        outState.putBoolean(KEY_NEW_LOCAL_PROFILE, mNewLocalProfile);
-        outState.putBoolean(KEY_DISABLE_DELETE_MENU_OPTION, mDisableDeleteMenuOption);
-        outState.putBoolean(KEY_IS_USER_PROFILE, mIsUserProfile);
-        outState.putInt(KEY_STATUS, mStatus);
-        outState.putParcelable(KEY_UPDATED_PHOTOS, mUpdatedPhotos);
-        outState.putBoolean(KEY_HAS_NEW_CONTACT, mHasNewContact);
-        outState.putBoolean(KEY_IS_EDIT, mIsEdit);
-        outState.putBoolean(KEY_NEW_CONTACT_READY, mNewContactDataReady);
-        outState.putBoolean(KEY_EXISTING_CONTACT_READY, mExistingContactDataReady);
-        outState.putParcelableArrayList(KEY_RAW_CONTACTS,
-                mRawContacts == null ?
-                Lists.<RawContact>newArrayList() : Lists.newArrayList(mRawContacts));
-        outState.putBoolean(KEY_SEND_TO_VOICE_MAIL_STATE, mSendToVoicemailState);
-        outState.putString(KEY_CUSTOM_RINGTONE, mCustomRingtone);
-        outState.putBoolean(KEY_ARE_PHONE_OPTIONS_CHANGEABLE, mArePhoneOptionsChangable);
         outState.putSerializable(KEY_EXPANDED_EDITORS, mExpandedEditors);
-
+        outState.putLong(KEY_RAW_CONTACT_ID_REQUESTING_PHOTO, mRawContactIdRequestingPhoto);
+        outState.putParcelable(KEY_CURRENT_PHOTO_URI, mCurrentPhotoUri);
         super.onSaveInstanceState(outState);
     }
 
@@ -1857,45 +577,15 @@
             return;
         }
 
-        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());
-                    joinAggregate(contactId);
-                }
-                break;
-            }
-            case REQUEST_CODE_ACCOUNTS_CHANGED: {
-                // Bail if the account selector was not successful.
-                if (resultCode != Activity.RESULT_OK) {
-                    mListener.onReverted();
-                    return;
-                }
-                // If there's an account specified, use it.
-                if (data != null) {
-                    AccountWithDataSet account = data.getParcelableExtra(Intents.Insert.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);
-                    handleRingtonePicked(pickedUri);
-                }
-                break;
-            }
-        }
+        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);
     }
 
     /**
@@ -1904,7 +594,7 @@
     private void setPhoto(long rawContact, Bitmap photo, Uri photoUri) {
         BaseRawContactEditorView requestingEditor = getRawContactEditorView(rawContact);
 
-        if (photo == null || photo.getHeight() < 0 || photo.getWidth() < 0) {
+        if (photo == null || photo.getHeight() <= 0 || photo.getWidth() <= 0) {
             // This is unexpected.
             Log.w(TAG, "Invalid bitmap passed to setPhoto()");
         }
@@ -1926,12 +616,24 @@
             Log.w(TAG, "The contact that requested the photo is no longer present.");
         }
 
+        // For inserts where the raw contact ID is a negative number, we must clear any previously
+        // saved full resolution photos under negative raw contact IDs so that the compact editor
+        // will use the newly selected photo, instead of an old one.
+        if (isInsert(getActivity().getIntent()) && rawContact < 0) {
+            removeNewRawContactPhotos();
+        }
         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);
@@ -1978,80 +680,6 @@
     }
 
     /**
-     * The listener for the data loader
-     */
-    private final LoaderManager.LoaderCallbacks<Contact> mDataLoaderListener =
-            new LoaderCallbacks<Contact>() {
-        @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 data) {
-            final long loaderCurrentTime = SystemClock.elapsedRealtime();
-            Log.v(TAG, "Time needed for loading: " + (loaderCurrentTime-mLoaderStartTime));
-            if (!data.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 = data.getLookupUri();
-            final long setDataStartTime = SystemClock.elapsedRealtime();
-            setData(data);
-            final long setDataEndTime = SystemClock.elapsedRealtime();
-
-            Log.v(TAG, "Time needed for setting UI: " + (setDataEndTime-setDataStartTime));
-        }
-
-        @Override
-        public void onLoaderReset(Loader<Contact> loader) {
-        }
-    };
-
-    /**
-     * The listener for the group meta data loader for all groups.
-     */
-    private final LoaderManager.LoaderCallbacks<Cursor> mGroupLoaderListener =
-            new LoaderCallbacks<Cursor>() {
-
-        @Override
-        public CursorLoader onCreateLoader(int id, Bundle args) {
-            return new GroupMetaDataLoader(mContext, Groups.CONTENT_URI);
-        }
-
-        @Override
-        public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
-            mGroupMetaData = data;
-            bindGroupMetaData();
-        }
-
-        @Override
-        public void onLoaderReset(Loader<Cursor> loader) {
-        }
-    };
-
-    @Override
-    public void onSplitContactConfirmed() {
-        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;
-        }
-
-        mState.markRawContactsForSplitting();
-        save(SaveMode.SPLIT);
-    }
-
-    /**
      * 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.
diff --git a/src/com/android/contacts/editor/ContactEditorUtils.java b/src/com/android/contacts/editor/ContactEditorUtils.java
index b132217..105b885 100644
--- a/src/com/android/contacts/editor/ContactEditorUtils.java
+++ b/src/com/android/contacts/editor/ContactEditorUtils.java
@@ -119,7 +119,7 @@
         final SharedPreferences.Editor editor = mPrefs.edit()
                 .putBoolean(KEY_ANYTHING_SAVED, true);
 
-        if (defaultAccount == null) {
+        if (defaultAccount == null || defaultAccount.isLocalAccount()) {
             // If the default is "local only", there should be no writable accounts.
             // This should always be the case with our spec, but because we load the account list
             // asynchronously using a worker thread, it is possible that there are accounts at this
@@ -165,7 +165,7 @@
      */
     @VisibleForTesting
     boolean isValidAccount(AccountWithDataSet account) {
-        if (account == null) {
+        if (account == null || account.isLocalAccount()) {
             return true; // It's "local only" account, which is valid.
         }
         return getWritableAccounts().contains(account);
@@ -227,7 +227,8 @@
         // ("local" account) while there are multiple accounts, then show the notification dialog.
         // This shouldn't ever happen, but this should allow the user can get back into a normal
         // state after they respond to the notification.
-        if (defaultAccount == null && currentWritableAccounts.size() > 0) {
+        if ((defaultAccount == null || defaultAccount.isLocalAccount())
+                && currentWritableAccounts.size() > 0) {
             Log.e(TAG, "Preferences file in an inconsistent state, request that the default account"
                     + " and current writable accounts be saved again");
             return true;
diff --git a/src/com/android/contacts/editor/EditorAnimator.java b/src/com/android/contacts/editor/EditorAnimator.java
index 2e17e23..251357a 100644
--- a/src/com/android/contacts/editor/EditorAnimator.java
+++ b/src/com/android/contacts/editor/EditorAnimator.java
@@ -47,7 +47,15 @@
 
     private AnimatorRunner mRunner = new AnimatorRunner();
 
+    public void hideEditorView(final View victim) {
+        removeEditorView(victim, /* removeVictimFromParent =*/ false);
+    }
+
     public void removeEditorView(final View victim) {
+        removeEditorView(victim, /* removeVictimFromParent =*/ true);
+    }
+
+    private void removeEditorView(final View victim, final boolean removeVictimFromParent) {
         mRunner.endOldAnimation();
         final int offset = victim.getHeight();
 
@@ -71,11 +79,15 @@
                     final View view = viewsToMove.get(i);
                     view.setTranslationY(0.0f);
                 }
-                // Remove our target view (if parent is null, we were run several times by quick
-                // fingers. Just ignore)
-                final ViewGroup victimParent = (ViewGroup) victim.getParent();
-                if (victimParent != null) {
-                    victimParent.removeView(victim);
+                if (removeVictimFromParent) {
+                    // Remove our target view (if parent is null, we were run several times by quick
+                    // fingers. Just ignore)
+                    final ViewGroup victimParent = (ViewGroup) victim.getParent();
+                    if (victimParent != null) {
+                        victimParent.removeView(victim);
+                    }
+                } else {
+                    victim.setVisibility(View.GONE);
                 }
             }
         });
diff --git a/src/com/android/contacts/editor/EditorIntents.java b/src/com/android/contacts/editor/EditorIntents.java
new file mode 100644
index 0000000..5d7edd3
--- /dev/null
+++ b/src/com/android/contacts/editor/EditorIntents.java
@@ -0,0 +1,157 @@
+/*
+ * 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.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;
+
+import android.content.ContentValues;
+import android.content.Intent;
+import android.net.Uri;
+import android.os.Bundle;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.Contacts;
+import android.text.TextUtils;
+
+import java.util.ArrayList;
+
+/**
+ * Creates Intents to edit contacts.
+ */
+public class EditorIntents {
+
+    private EditorIntents() {
+    }
+
+    /**
+     * Returns an Intent to start the {@link CompactContactEditorActivity} for an
+     * existing contact.
+     */
+    public static Intent createCompactEditContactIntent(Uri contactLookupUri,
+            MaterialPalette materialPalette, Bundle updatedPhotos) {
+        final Intent intent = new Intent(Intent.ACTION_EDIT, contactLookupUri);
+        putMaterialPalette(intent, materialPalette);
+        putUpdatedPhotos(intent, updatedPhotos);
+        return intent;
+    }
+
+    /**
+     * Returns an Intent to start the {@link CompactContactEditorActivity} for a new contact.
+     */
+    public static Intent createCompactInsertContactIntent() {
+        return createCompactInsertContactIntent(/* rawContactDeltaList =*/ null,
+                /* displayName =*/ null, /* phoneticName =*/ null, /* updatedPhotos =*/ null);
+    }
+
+    /**
+     * Returns an Intent to start the {@link CompactContactEditorActivity} for a new contact with
+     * the field values specified by rawContactDeltaList pre-populate in the form.
+     */
+    public static Intent createCompactInsertContactIntent(RawContactDeltaList rawContactDeltaList,
+            String displayName, String phoneticName, Bundle updatedPhotos) {
+        final Intent intent = new Intent(Intent.ACTION_INSERT, Contacts.CONTENT_URI);
+        if (rawContactDeltaList != null || displayName != null || phoneticName != null) {
+            putRawContactDeltaValues(intent, rawContactDeltaList, displayName, phoneticName);
+        }
+        putUpdatedPhotos(intent, updatedPhotos);
+        return intent;
+    }
+
+    /**
+     * Returns an Intent to edit a different contact (in the fully expaned editor) with whatever
+     * values were already entered on the currently displayed contact editor.
+     */
+    public static Intent createEditOtherContactIntent(Uri contactLookupUri,
+            ArrayList<ContentValues> contentValues) {
+        final Intent intent = new Intent(Intent.ACTION_EDIT, contactLookupUri);
+        intent.setFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
+                | Intent.FLAG_ACTIVITY_FORWARD_RESULT);
+        intent.putExtra(ContactEditorFragment.INTENT_EXTRA_ADD_TO_DEFAULT_DIRECTORY, "");
+
+        // Pass on all the data that has been entered so far
+        if (contentValues != null && contentValues.size() != 0) {
+            intent.putParcelableArrayListExtra(ContactsContract.Intents.Insert.DATA, contentValues);
+        }
+        return intent;
+    }
+
+    /**
+     * Returns an Intent to start the fully expanded {@link ContactEditorActivity} for a
+     * new contact.
+     */
+    public static Intent createEditContactIntent(Uri contactLookupUri,
+            MaterialPalette materialPalette) {
+        final Intent intent = new Intent(ContactEditorBaseActivity.ACTION_EDIT, contactLookupUri);
+        addContactIntentFlags(intent);
+        putMaterialPalette(intent, materialPalette);
+        return intent;
+    }
+
+    /**
+     * Returns an Intent to start the fully expanded {@link ContactEditorActivity} for an
+     * existing contact.
+     */
+    public static Intent createInsertContactIntent(RawContactDeltaList rawContactDeltaList,
+            String displayName, String phoneticName, Bundle updatedPhotos) {
+        final Intent intent = new Intent(ContactEditorBaseActivity.ACTION_INSERT,
+                Contacts.CONTENT_URI);
+        addContactIntentFlags(intent);
+        putRawContactDeltaValues(intent, rawContactDeltaList, displayName, phoneticName);
+        putUpdatedPhotos(intent, updatedPhotos);
+        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,
+                    materialPalette);
+        }
+    }
+
+    private static void putUpdatedPhotos(Intent intent, Bundle updatedPhotos) {
+        if (updatedPhotos != null && !updatedPhotos.isEmpty()) {
+            intent.putExtra(ContactEditorBaseFragment.INTENT_EXTRA_UPDATED_PHOTOS, updatedPhotos);
+        }
+    }
+
+    private static void putRawContactDeltaValues(Intent intent,
+            RawContactDeltaList rawContactDeltaList, String displayName, String phoneticName) {
+        // Pass on all the data that has been entered so far
+        if (rawContactDeltaList != null && !rawContactDeltaList.isEmpty()) {
+            ArrayList<ContentValues> contentValues = rawContactDeltaList.get(0).getContentValues();
+            if (contentValues != null && contentValues.size() != 0) {
+                intent.putParcelableArrayListExtra(
+                        ContactsContract.Intents.Insert.DATA, contentValues);
+            }
+        }
+        // Names must be passed separately since they are skipped in RawContactModifier.parseValues
+        if (!TextUtils.isEmpty(displayName)) {
+            intent.putExtra(ContactsContract.Intents.Insert.NAME, displayName);
+        }
+        if (!TextUtils.isEmpty(phoneticName)) {
+            intent.putExtra(ContactsContract.Intents.Insert.PHONETIC_NAME, phoneticName);
+        }
+    }
+}
diff --git a/src/com/android/contacts/editor/EventFieldEditorView.java b/src/com/android/contacts/editor/EventFieldEditorView.java
index 246ee9c..17e52a7 100644
--- a/src/com/android/contacts/editor/EventFieldEditorView.java
+++ b/src/com/android/contacts/editor/EventFieldEditorView.java
@@ -73,15 +73,18 @@
     protected void onFinishInflate() {
         super.onFinishInflate();
 
-        Resources resources = mContext.getResources();
+        Resources resources = getContext().getResources();
         mPrimaryTextColor = resources.getColor(R.color.primary_text_color);
         mHintTextColor = resources.getColor(R.color.editor_disabled_text_color);
-        mNoDateString = mContext.getString(R.string.event_edit_field_hint_text);
+        mNoDateString = getContext().getString(R.string.event_edit_field_hint_text);
 
         mDateView = (Button) findViewById(R.id.date_view);
         mDateView.setOnClickListener(new OnClickListener() {
             @Override
             public void onClick(View v) {
+                if (!isTypeVisible()) {
+                    showType();
+                }
                 showDialog(R.id.dialog_event_date_picker);
             }
         });
@@ -129,6 +132,9 @@
             mDateView.setText(data);
             mDateView.setTextColor(mPrimaryTextColor);
             setDeleteButtonVisible(true);
+            if (!isTypeVisible()) {
+                showType();
+            }
         }
     }
 
@@ -167,7 +173,7 @@
         final int defaultYear = calendar.get(Calendar.YEAR);
 
         // Check whether the year is optional
-        final boolean isYearOptional = getType().isYearOptional();
+        final boolean isYearOptional = getType() != null && getType().isYearOptional();
 
         if (!isYearOptional && !TextUtils.isEmpty(oldValue)) {
             final ParsePosition position = new ParsePosition(0);
diff --git a/src/com/android/contacts/editor/GroupMembershipView.java b/src/com/android/contacts/editor/GroupMembershipView.java
index e0d78b5..f1d9db9 100644
--- a/src/com/android/contacts/editor/GroupMembershipView.java
+++ b/src/com/android/contacts/editor/GroupMembershipView.java
@@ -162,10 +162,10 @@
     @Override
     protected void onFinishInflate() {
         super.onFinishInflate();
-        Resources resources = mContext.getResources();
+        Resources resources = getContext().getResources();
         mPrimaryTextColor = resources.getColor(R.color.primary_text_color);
         mHintTextColor = resources.getColor(R.color.editor_disabled_text_color);
-        mNoGroupString = mContext.getString(R.string.group_edit_field_hint_text);
+        mNoGroupString = getContext().getString(R.string.group_edit_field_hint_text);
     }
 
     @Override
diff --git a/src/com/android/contacts/editor/JoinSuggestedContactDialogFragment.java b/src/com/android/contacts/editor/JoinSuggestedContactDialogFragment.java
new file mode 100644
index 0000000..4d35332
--- /dev/null
+++ b/src/com/android/contacts/editor/JoinSuggestedContactDialogFragment.java
@@ -0,0 +1,61 @@
+/*
+ * 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 android.app.AlertDialog;
+import android.app.Dialog;
+import android.app.DialogFragment;
+import android.content.DialogInterface;
+import android.os.Bundle;
+
+public class JoinSuggestedContactDialogFragment extends DialogFragment {
+
+    private static final String ARG_RAW_CONTACT_IDS = "rawContactIds";
+
+    public static void show(ContactEditorBaseFragment fragment, long[] rawContactIds) {
+        final Bundle args = new Bundle();
+        args.putLongArray(ARG_RAW_CONTACT_IDS, rawContactIds);
+
+        final JoinSuggestedContactDialogFragment dialog = new JoinSuggestedContactDialogFragment();
+        dialog.setArguments(args);
+        dialog.setTargetFragment(fragment, 0);
+        dialog.show(fragment.getFragmentManager(), "join");
+    }
+
+    @Override
+    public Dialog onCreateDialog(Bundle savedInstanceState) {
+        return new AlertDialog.Builder(getActivity())
+                .setIconAttribute(android.R.attr.alertDialogIcon)
+                .setMessage(R.string.aggregation_suggestion_join_dialog_message)
+                .setPositiveButton(android.R.string.yes,
+                        new DialogInterface.OnClickListener() {
+                            @Override
+                            public void onClick(DialogInterface dialog, int whichButton) {
+                                ContactEditorBaseFragment targetFragment =
+                                        (ContactEditorBaseFragment) getTargetFragment();
+                                long rawContactIds[] =
+                                        getArguments().getLongArray(ARG_RAW_CONTACT_IDS);
+                                targetFragment.doJoinSuggestedContact(rawContactIds);
+                            }
+                        }
+                )
+                .setNegativeButton(android.R.string.no, null)
+                .create();
+    }
+}
\ No newline at end of file
diff --git a/src/com/android/contacts/editor/KindSectionView.java b/src/com/android/contacts/editor/KindSectionView.java
index 3b10fe4..adf2a73 100644
--- a/src/com/android/contacts/editor/KindSectionView.java
+++ b/src/com/android/contacts/editor/KindSectionView.java
@@ -55,7 +55,6 @@
  * section header and a trigger for adding new {@link Data} rows.
  */
 public class KindSectionView extends LinearLayout implements EditorListener {
-    private static final String TAG = "KindSectionView";
 
     private ViewGroup mEditors;
     private ImageView mIcon;
@@ -63,6 +62,7 @@
     private DataKind mKind;
     private RawContactDelta mState;
     private boolean mReadOnly;
+    private boolean mShowOneEmptyEditor;
 
     private ViewIdGenerator mViewIdGenerator;
 
@@ -99,7 +99,7 @@
         setDrawingCacheEnabled(true);
         setAlwaysDrawnWithCacheEnabled(true);
 
-        mInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+        mInflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
 
         mEditors = (ViewGroup) findViewById(R.id.kind_editors);
         mIcon = (ImageView) findViewById(R.id.kind_icon);
@@ -126,10 +126,16 @@
         }
     }
 
-    public void setState(DataKind kind, RawContactDelta state, boolean readOnly, ViewIdGenerator vig) {
+    /**
+     * @param showOneEmptyEditor If true, one empty input will always be displayed,
+     *         otherwise an empty input will only be displayed if there is no non-empty value.
+     */
+    public void setState(DataKind kind, RawContactDelta state, boolean readOnly,
+            boolean showOneEmptyEditor, ViewIdGenerator vig) {
         mKind = kind;
         mState = state;
         mReadOnly = readOnly;
+        mShowOneEmptyEditor = showOneEmptyEditor;
         mViewIdGenerator = vig;
 
         setId(mViewIdGenerator.getId(state, kind, null, ViewIdGenerator.NO_VIEW_INDEX));
@@ -187,6 +193,10 @@
                     layoutResId + " for MIME type " + mKind.mimeType +
                     " with error " + e.toString());
         }
+        // Hide the types drop downs until the associated edit field is focused
+        if (view instanceof LabeledEditorView) {
+            ((LabeledEditorView) view).setHideTypeInitially(true);
+        }
 
         view.setEnabled(isEnabled());
 
@@ -250,7 +260,7 @@
         } else if (emptyEditors.size() == 1) {
             // We have already reached the maximum number of empty editors. Lets not add any more.
             return;
-        } else {
+        } else if (mShowOneEmptyEditor || !hasNonEmptyEditor()) {
             final ValuesDelta values = RawContactModifier.insertChild(mState, mKind);
             final View newField = createEditorView(values);
             if (shouldAnimate) {
@@ -261,6 +271,26 @@
     }
 
     /**
+     * Whether there is at least one non-empty editor.
+     */
+    private boolean hasNonEmptyEditor() {
+        for (int i = 0; i < mEditors.getChildCount(); i++) {
+            View view = mEditors.getChildAt(i);
+            if (!((Editor) view).isEmpty()) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * Whether this section has any empty editors.
+     */
+    public boolean hasEmptyEditor() {
+        return !getEmptyEditors().isEmpty();
+    }
+
+    /**
      * Returns a list of empty editor views in this section.
      */
     private List<View> getEmptyEditors() {
diff --git a/src/com/android/contacts/editor/LabeledEditorView.java b/src/com/android/contacts/editor/LabeledEditorView.java
index caf02b1..cf94d8f 100644
--- a/src/com/android/contacts/editor/LabeledEditorView.java
+++ b/src/com/android/contacts/editor/LabeledEditorView.java
@@ -79,6 +79,8 @@
     private boolean mWasEmpty = true;
     private boolean mIsDeletable = true;
     private boolean mIsAttachedToWindow;
+    private boolean mHideTypeInitially;
+    private boolean mHasTypes;
 
     private EditType mType;
 
@@ -120,6 +122,10 @@
         init(context);
     }
 
+    public Long getRawContactId() {
+        return mState == null ? null : mState.getRawContactId();
+    }
+
     private void init(Context context) {
         mMinLineItemHeight = context.getResources().getDimensionPixelSize(
                 R.dimen.editor_min_line_item_height);
@@ -228,6 +234,39 @@
         }
     }
 
+    /**
+     * Whether to hide the type dropdown after values have been set.
+     * By default the drop down is always displayed if there are types to display.
+     */
+    public void setHideTypeInitially(boolean hideTypeInitially) {
+        mHideTypeInitially = hideTypeInitially;
+    }
+
+    /**
+     * Whether the type drop down is visible.
+     */
+    public boolean isTypeVisible() {
+        return mLabel == null ? false : mLabel.getVisibility() == View.VISIBLE;
+    }
+
+    /**
+     * Makes the type drop down visible if it is not already so, and there are types to display.
+     */
+    public void showType() {
+        if (mHasTypes && mLabel != null && mLabel.getVisibility() != View.VISIBLE) {
+            EditorAnimator.getInstance().slideAndFadeIn(mLabel, mLabel.getHeight());
+        }
+    }
+
+    /**
+     * Hides the type drop down if there are types to display and it is not already hidden.
+     */
+    public void hideType() {
+        if (mHasTypes && mLabel != null && mLabel.getVisibility() != View.GONE) {
+            EditorAnimator.getInstance().hideEditorView(mLabel);
+        }
+    }
+
     protected void onOptionalFieldVisibilityChange() {
         if (mListener != null) {
             mListener.onRequest(EditorListener.EDITOR_FORM_CHANGED);
@@ -281,7 +320,7 @@
      * possible custom label string.
      */
     public void rebuildLabel() {
-        mEditTypeAdapter = new EditTypeAdapter(mContext);
+        mEditTypeAdapter = new EditTypeAdapter(getContext());
         mLabel.setAdapter(mEditTypeAdapter);
         if (mEditTypeAdapter.hasCustomSelection()) {
             mLabel.setSelection(mEditTypeAdapter.getPosition(CUSTOM_SELECTION));
@@ -375,12 +414,15 @@
         setVisibility(View.VISIBLE);
 
         // Display label selector if multiple types available
-        final boolean hasTypes = RawContactModifier.hasEditTypes(kind);
-        setupLabelButton(hasTypes);
+        mHasTypes = RawContactModifier.hasEditTypes(kind);
+        setupLabelButton(mHasTypes);
         mLabel.setEnabled(!readOnly && isEnabled());
-        if (hasTypes) {
+        if (mHasTypes) {
             mType = RawContactModifier.getCurrentType(entry, kind);
             rebuildLabel();
+            if (mHideTypeInitially) {
+                mLabel.setVisibility(View.GONE);
+            }
         }
     }
 
@@ -396,7 +438,7 @@
      * no empty text is allowed in any custom label.
      */
     private Dialog createCustomDialog() {
-        final AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
+        final AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
         final LayoutInflater layoutInflater = LayoutInflater.from(builder.getContext());
         builder.setTitle(R.string.customLabelPickerTitle);
 
diff --git a/src/com/android/contacts/editor/PhoneticNameEditorView.java b/src/com/android/contacts/editor/PhoneticNameEditorView.java
index e645687..f094d55 100644
--- a/src/com/android/contacts/editor/PhoneticNameEditorView.java
+++ b/src/com/android/contacts/editor/PhoneticNameEditorView.java
@@ -152,11 +152,7 @@
                 || !TextUtils.isEmpty(given);
     }
 
-    /** {@inheritDoc} */
-    @Override
-    protected void onFinishInflate() {
-        super.onFinishInflate();
-        // Remove padding below this view.
-        setPadding(getPaddingLeft(), getPaddingTop(), getPaddingRight(), 0);
+    public String getPhoneticName() {
+        return getEntry().getAsString(DataKind.PSEUDO_COLUMN_PHONETIC_NAME);
     }
 }
diff --git a/src/com/android/contacts/editor/PhotoActionPopup.java b/src/com/android/contacts/editor/PhotoActionPopup.java
index 14b195b..4f958f4 100644
--- a/src/com/android/contacts/editor/PhotoActionPopup.java
+++ b/src/com/android/contacts/editor/PhotoActionPopup.java
@@ -62,10 +62,15 @@
                 Flags.REMOVE_PHOTO |
                 Flags.TAKE_OR_PICK_PHOTO |
                 Flags.TAKE_OR_PICK_PHOTO_REPLACE_WORDING;
+        // When the popup represents multiple photos, the REMOVE_PHOTO option doesn't make sense.
+        // The REMOVE_PHOTO option would have to remove all photos. And sometimes some of the
+        // photos are readonly.
+        public static final int MULTIPLE_WRITE_ABLE_PHOTOS =
+                Flags.TAKE_OR_PICK_PHOTO |
+                Flags.TAKE_OR_PICK_PHOTO_REPLACE_WORDING;
     }
 
-    public static ListPopupWindow createPopupMenu(Context context, View anchorView,
-            final Listener listener, int mode) {
+    public static ArrayList<ChoiceListItem> getChoices(Context context, int mode) {
         // Build choices, depending on the current mode. We assume this Dialog is never called
         // if there are NO choices (e.g. a read-only picture is already super-primary)
         final ArrayList<ChoiceListItem> choices = new ArrayList<ChoiceListItem>(4);
@@ -86,6 +91,12 @@
             }
             choices.add(new ChoiceListItem(ChoiceListItem.ID_PICK_PHOTO, pickPhotoString));
         }
+        return choices;
+    }
+
+    public static ListPopupWindow createPopupMenu(Context context, View anchorView,
+            final Listener listener, int mode) {
+        final ArrayList<ChoiceListItem> choices = getChoices(context, mode);
 
         final ListAdapter adapter = new ArrayAdapter<ChoiceListItem>(context,
                 R.layout.select_dialog_item, choices);
@@ -124,7 +135,7 @@
         return listPopupWindow;
     }
 
-    private static final class ChoiceListItem {
+    public static final class ChoiceListItem {
         private final int mId;
         private final String mCaption;
 
diff --git a/src/com/android/contacts/editor/PhotoEditorView.java b/src/com/android/contacts/editor/PhotoEditorView.java
index 7c7cf66..40f4f82 100644
--- a/src/com/android/contacts/editor/PhotoEditorView.java
+++ b/src/com/android/contacts/editor/PhotoEditorView.java
@@ -53,7 +53,6 @@
     private ContactPhotoManager mContactPhotoManager;
 
     private boolean mHasSetPhoto = false;
-    private boolean mReadOnly;
 
     public PhotoEditorView(Context context) {
         super(context);
@@ -78,7 +77,7 @@
     @Override
     protected void onFinishInflate() {
         super.onFinishInflate();
-        mContactPhotoManager = ContactPhotoManager.getInstance(mContext);
+        mContactPhotoManager = ContactPhotoManager.getInstance(getContext());
         mPhotoImageView = (ImageView) findViewById(R.id.photo);
         mPrimaryCheckBox = (RadioButton) findViewById(R.id.primary_checkbox);
         mChangeButton = (Button) findViewById(R.id.change_button);
@@ -116,7 +115,6 @@
     public void setValues(DataKind kind, ValuesDelta values, RawContactDelta state, boolean readOnly,
             ViewIdGenerator vig) {
         mEntry = values;
-        mReadOnly = readOnly;
 
         setId(vig.getId(state, kind, values, 0));
 
diff --git a/src/com/android/contacts/editor/PhotoSourceDialogFragment.java b/src/com/android/contacts/editor/PhotoSourceDialogFragment.java
new file mode 100644
index 0000000..e16fdae
--- /dev/null
+++ b/src/com/android/contacts/editor/PhotoSourceDialogFragment.java
@@ -0,0 +1,96 @@
+/*
+ * 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.editor.PhotoActionPopup.ChoiceListItem;
+
+import android.app.AlertDialog;
+import android.app.Dialog;
+import android.app.DialogFragment;
+import android.content.DialogInterface;
+import android.content.DialogInterface.OnClickListener;
+import android.os.Bundle;
+
+import java.util.ArrayList;
+
+/**
+ * Displays the options for changing the contact photo.
+ */
+public class PhotoSourceDialogFragment extends DialogFragment {
+
+    private static final String ARG_PHOTO_MODE = "photoMode";
+
+    /**
+     * Callbacks for the host of the {@link PhotoSourceDialogFragment}.
+     */
+    public interface Listener {
+        void onRemovePictureChosen();
+        void onTakePhotoChosen();
+        void onPickFromGalleryChosen();
+    }
+
+    public static void show(CompactContactEditorFragment fragment, int photoMode) {
+        final Bundle args = new Bundle();
+        args.putInt(ARG_PHOTO_MODE, photoMode);
+
+        PhotoSourceDialogFragment dialog = new PhotoSourceDialogFragment();
+        dialog.setTargetFragment(fragment, 0);
+        dialog.setArguments(args);
+        dialog.show(fragment.getFragmentManager(), "photoSource");
+    }
+
+    @Override
+    public Dialog onCreateDialog(Bundle savedInstanceState) {
+        // Get the available options for changing the photo
+        final int photoMode = getArguments().getInt(ARG_PHOTO_MODE);
+        final ArrayList<ChoiceListItem> choices =
+                PhotoActionPopup.getChoices(getActivity(), photoMode);
+
+        // Prepare the AlertDialog items and click listener
+        final CharSequence[] items = new CharSequence[choices.size()];
+        for (int i = 0; i < items.length; i++) {
+            items[i] = choices.get(i).toString();
+        }
+        final OnClickListener clickListener = new OnClickListener() {
+            @Override
+            public void onClick(DialogInterface dialogInterface, int which) {
+                final Listener listener = (Listener) getTargetFragment();
+                final ChoiceListItem choice = choices.get(which);
+                switch (choice.getId()) {
+                    case ChoiceListItem.ID_REMOVE:
+                        listener.onRemovePictureChosen();
+                        break;
+                    case ChoiceListItem.ID_TAKE_PHOTO:
+                        listener.onTakePhotoChosen();
+                        break;
+                    case ChoiceListItem.ID_PICK_PHOTO:
+                        listener.onPickFromGalleryChosen();
+                        break;
+                }
+                dismiss();
+            }
+        };
+
+        // Build the AlertDialog
+        final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
+        builder.setTitle(R.string.menu_change_photo);
+        builder.setItems(items, clickListener);
+        builder.setNegativeButton(android.R.string.cancel, /* listener =*/ null);
+        return builder.create();
+    }
+}
diff --git a/src/com/android/contacts/editor/RawContactDeltaComparator.java b/src/com/android/contacts/editor/RawContactDeltaComparator.java
new file mode 100644
index 0000000..17a4dda
--- /dev/null
+++ b/src/com/android/contacts/editor/RawContactDeltaComparator.java
@@ -0,0 +1,131 @@
+/*
+ * 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 com.android.contacts.common.model.AccountTypeManager;
+import com.android.contacts.common.model.RawContactDelta;
+import com.android.contacts.common.model.account.AccountType;
+import com.android.contacts.common.model.account.GoogleAccountType;
+
+import android.content.Context;
+import android.provider.ContactsContract.RawContacts;
+
+import java.util.Comparator;
+
+/**
+ * Compares {@link RawContactDelta}s
+ */
+class RawContactDeltaComparator implements Comparator<RawContactDelta> {
+
+    private Context mContext;
+
+    public RawContactDeltaComparator(Context context) {
+        mContext = context;
+    }
+
+    @Override
+    public int compare(RawContactDelta one, RawContactDelta two) {
+        // Check direct equality
+        if (one.equals(two)) {
+            return 0;
+        }
+
+        final AccountTypeManager accountTypes = AccountTypeManager.getInstance(mContext);
+        String accountType1 = one.getValues().getAsString(RawContacts.ACCOUNT_TYPE);
+        String dataSet1 = one.getValues().getAsString(RawContacts.DATA_SET);
+        final AccountType type1 = accountTypes.getAccountType(accountType1, dataSet1);
+        String accountType2 = two.getValues().getAsString(RawContacts.ACCOUNT_TYPE);
+        String dataSet2 = two.getValues().getAsString(RawContacts.DATA_SET);
+        final AccountType type2 = accountTypes.getAccountType(accountType2, dataSet2);
+
+        // Check read-only. Sort read/write before read-only.
+        if (!type1.areContactsWritable() && type2.areContactsWritable()) {
+            return 1;
+        } else if (type1.areContactsWritable() && !type2.areContactsWritable()) {
+            return -1;
+        }
+
+        // Check account type. Sort Google before non-Google.
+        boolean skipAccountTypeCheck = false;
+        boolean isGoogleAccount1 = type1 instanceof GoogleAccountType;
+        boolean isGoogleAccount2 = type2 instanceof GoogleAccountType;
+        if (isGoogleAccount1 && !isGoogleAccount2) {
+            return -1;
+        } else if (!isGoogleAccount1 && isGoogleAccount2) {
+            return 1;
+        } else if (isGoogleAccount1 && isGoogleAccount2) {
+            skipAccountTypeCheck = true;
+        }
+
+        int value;
+        if (!skipAccountTypeCheck) {
+            // Sort accounts with type before accounts without types.
+            if (type1.accountType != null && type2.accountType == null) {
+                return -1;
+            } else if (type1.accountType == null && type2.accountType != null) {
+                return 1;
+            }
+
+            if (type1.accountType != null && type2.accountType != null) {
+                value = type1.accountType.compareTo(type2.accountType);
+                if (value != 0) {
+                    return value;
+                }
+            }
+
+            // Fall back to data set. Sort accounts with data sets before
+            // those without.
+            if (type1.dataSet != null && type2.dataSet == null) {
+                return -1;
+            } else if (type1.dataSet == null && type2.dataSet != null) {
+                return 1;
+            }
+
+            if (type1.dataSet != null && type2.dataSet != null) {
+                value = type1.dataSet.compareTo(type2.dataSet);
+                if (value != 0) {
+                    return value;
+                }
+            }
+        }
+
+        // Check account name
+        String oneAccount = one.getAccountName();
+        if (oneAccount == null) {
+            oneAccount = "";
+        }
+        String twoAccount = two.getAccountName();
+        if (twoAccount == null) {
+            twoAccount = "";
+        }
+        value = oneAccount.compareTo(twoAccount);
+        if (value != 0) {
+            return value;
+        }
+
+        // Both are in the same account, fall back to contact ID
+        Long oneId = one.getRawContactId();
+        Long twoId = two.getRawContactId();
+        if (oneId == null) {
+            return -1;
+        } else if (twoId == null) {
+            return 1;
+        }
+
+        return (int) (oneId - twoId);
+    }
+}
\ No newline at end of file
diff --git a/src/com/android/contacts/editor/RawContactEditorView.java b/src/com/android/contacts/editor/RawContactEditorView.java
index ca15bfa..ee61857 100644
--- a/src/com/android/contacts/editor/RawContactEditorView.java
+++ b/src/com/android/contacts/editor/RawContactEditorView.java
@@ -195,27 +195,28 @@
                 mAccountHeaderNameTextView.setVisibility(View.GONE);
                 mAccountHeaderTypeTextView.setText(R.string.local_profile_title);
             } else {
-                CharSequence accountType = type.getDisplayLabel(mContext);
-                mAccountHeaderTypeTextView.setText(mContext.getString(R.string.external_profile_title,
+                CharSequence accountType = type.getDisplayLabel(getContext());
+                mAccountHeaderTypeTextView.setText(getContext().getString(
+                        R.string.external_profile_title,
                         accountType));
                 mAccountHeaderNameTextView.setText(accountName);
             }
         } else {
             String accountName = state.getAccountName();
-            CharSequence accountType = type.getDisplayLabel(mContext);
+            CharSequence accountType = type.getDisplayLabel(getContext());
             if (TextUtils.isEmpty(accountType)) {
-                accountType = mContext.getString(R.string.account_phone);
+                accountType = getContext().getString(R.string.account_phone);
             }
             if (!TextUtils.isEmpty(accountName)) {
                 mAccountHeaderNameTextView.setVisibility(View.VISIBLE);
                 mAccountHeaderNameTextView.setText(
-                        mContext.getString(R.string.from_account_format, accountName));
+                        getContext().getString(R.string.from_account_format, accountName));
             } else {
                 // Hide this view so the other text view will be centered vertically
                 mAccountHeaderNameTextView.setVisibility(View.GONE);
             }
             mAccountHeaderTypeTextView.setText(
-                    mContext.getString(R.string.account_type_format, accountType));
+                    getContext().getString(R.string.account_type_format, accountType));
         }
         updateAccountHeaderContentDescription();
 
@@ -301,7 +302,8 @@
                 final KindSectionView section = (KindSectionView)mInflater.inflate(
                         R.layout.item_kind_section, mFields, false);
                 section.setEnabled(isEnabled());
-                section.setState(kind, state, false, vig);
+                section.setState(kind, state, /* readOnly =*/ false,
+                        /* showOneEmptyEditor =*/ true, vig);
                 mFields.addView(section);
             }
         }
diff --git a/src/com/android/contacts/editor/RawContactReadOnlyEditorView.java b/src/com/android/contacts/editor/RawContactReadOnlyEditorView.java
index 477cbd3..7ae6aa7 100644
--- a/src/com/android/contacts/editor/RawContactReadOnlyEditorView.java
+++ b/src/com/android/contacts/editor/RawContactReadOnlyEditorView.java
@@ -119,25 +119,26 @@
                 mAccountHeaderNameTextView.setVisibility(View.GONE);
                 mAccountHeaderTypeTextView.setText(R.string.local_profile_title);
             } else {
-                CharSequence accountType = type.getDisplayLabel(mContext);
-                mAccountHeaderTypeTextView.setText(mContext.getString(R.string.external_profile_title,
+                CharSequence accountType = type.getDisplayLabel(getContext());
+                mAccountHeaderTypeTextView.setText(getContext().getString(
+                        R.string.external_profile_title,
                         accountType));
                 mAccountHeaderNameTextView.setText(mAccountName);
             }
         } else {
-            CharSequence accountType = type.getDisplayLabel(mContext);
+            CharSequence accountType = type.getDisplayLabel(getContext());
             if (TextUtils.isEmpty(accountType)) {
-                accountType = mContext.getString(R.string.account_phone);
+                accountType = getContext().getString(R.string.account_phone);
             }
             if (!TextUtils.isEmpty(mAccountName)) {
                 mAccountHeaderNameTextView.setVisibility(View.VISIBLE);
                 mAccountHeaderNameTextView.setText(
-                        mContext.getString(R.string.from_account_format, mAccountName));
+                        getContext().getString(R.string.from_account_format, mAccountName));
             } else {
                 // Hide this view so the other text view will be centered vertically
                 mAccountHeaderNameTextView.setVisibility(View.GONE);
             }
-            mAccountHeaderTypeTextView.setText(mContext.getString(R.string.account_type_format,
+            mAccountHeaderTypeTextView.setText(getContext().getString(R.string.account_type_format,
                     accountType));
         }
         updateAccountHeaderContentDescription();
@@ -161,7 +162,7 @@
         // Name
         primary = state.getPrimaryEntry(StructuredName.CONTENT_ITEM_TYPE);
         mName.setText(primary != null ? primary.getAsString(StructuredName.DISPLAY_NAME) :
-                mContext.getString(R.string.missing_name));
+                getContext().getString(R.string.missing_name));
 
         if (type.getEditContactActivityClassName() != null) {
             mEditExternallyButton.setVisibility(View.VISIBLE);
@@ -169,7 +170,7 @@
             mEditExternallyButton.setVisibility(View.GONE);
         }
 
-        final Resources res = mContext.getResources();
+        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);
diff --git a/src/com/android/contacts/editor/SplitContactConfirmationDialogFragment.java b/src/com/android/contacts/editor/SplitContactConfirmationDialogFragment.java
index c790e0b..b4181b8 100644
--- a/src/com/android/contacts/editor/SplitContactConfirmationDialogFragment.java
+++ b/src/com/android/contacts/editor/SplitContactConfirmationDialogFragment.java
@@ -34,7 +34,11 @@
 public class SplitContactConfirmationDialogFragment extends DialogFragment {
     public static final String TAG = "SplitContactConfirmationDialog";
 
-    public SplitContactConfirmationDialogFragment() {
+    public static void show(ContactEditorBaseFragment fragment) {
+        SplitContactConfirmationDialogFragment dialog = new
+                SplitContactConfirmationDialogFragment();
+        dialog.setTargetFragment(fragment, 0);
+        dialog.show(fragment.getFragmentManager(), "splitContact");
     }
 
     @Override
diff --git a/src/com/android/contacts/editor/StructuredNameEditorView.java b/src/com/android/contacts/editor/StructuredNameEditorView.java
index b24f7f1..5f764f9 100644
--- a/src/com/android/contacts/editor/StructuredNameEditorView.java
+++ b/src/com/android/contacts/editor/StructuredNameEditorView.java
@@ -18,7 +18,6 @@
 
 import android.content.ContentValues;
 import android.content.Context;
-import android.net.Uri;
 import android.os.Parcel;
 import android.os.Parcelable;
 import android.provider.ContactsContract.CommonDataKinds.StructuredName;
@@ -196,12 +195,6 @@
         }
     }
 
-    private static void appendQueryParameter(Uri.Builder builder, String field, String value) {
-        if (!TextUtils.isEmpty(value)) {
-            builder.appendQueryParameter(field, value);
-        }
-    }
-
     /**
      * Set the display name onto the text field directly.  This does not affect the underlying
      * data structure so it is similar to the user typing the value in on the field directly.
@@ -214,6 +207,28 @@
         super.setValue(0, name);
     }
 
+    /**
+     * Returns the display name currently displayed in the editor.
+     */
+    public String getDisplayName() {
+        final ValuesDelta valuesDelta = getValues();
+        if (hasShortAndLongForms() && areOptionalFieldsVisible()) {
+            final String displayName = valuesDelta.getDisplayName();
+            if (!TextUtils.isEmpty(displayName)) {
+                return displayName;
+            }
+        }
+        final Map<String, String> structuredNameMap = valuesToStructuredNameMap(valuesDelta);
+        final String displayName = NameConverter.structuredNameToDisplayName(
+                getContext(), structuredNameMap);
+        if (!TextUtils.isEmpty(displayName)) {
+            return displayName;
+        }
+        // The name may have been passed to the compact editor and not written to the underlying
+        // data structure.
+        return valuesDelta.getDisplayName();
+    }
+
     @Override
     protected Parcelable onSaveInstanceState() {
         SavedState state = new SavedState(super.onSaveInstanceState());
@@ -275,12 +290,4 @@
             return 0;
         }
     }
-
-    /** {@inheritDoc} */
-    @Override
-    protected void onFinishInflate() {
-        super.onFinishInflate();
-        // Remove padding below this view.
-        setPadding(getPaddingLeft(), getPaddingTop(), getPaddingRight(), 0);
-    }
 }
diff --git a/src/com/android/contacts/editor/SuggestionEditConfirmationDialogFragment.java b/src/com/android/contacts/editor/SuggestionEditConfirmationDialogFragment.java
new file mode 100644
index 0000000..c13d5ea
--- /dev/null
+++ b/src/com/android/contacts/editor/SuggestionEditConfirmationDialogFragment.java
@@ -0,0 +1,63 @@
+/*
+ * 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 android.app.AlertDialog;
+import android.app.Dialog;
+import android.app.DialogFragment;
+import android.content.DialogInterface;
+import android.net.Uri;
+import android.os.Bundle;
+
+public class SuggestionEditConfirmationDialogFragment extends DialogFragment {
+
+    private static final String ARG_CONTACT_URI = "contactUri";
+
+    public static void show(ContactEditorBaseFragment fragment, Uri contactUri) {
+        final Bundle args = new Bundle();
+        args.putParcelable(ARG_CONTACT_URI, contactUri);
+
+        final SuggestionEditConfirmationDialogFragment dialog = new
+                SuggestionEditConfirmationDialogFragment();
+        dialog.setArguments(args);
+        dialog.setTargetFragment(fragment, 0);
+        dialog.show(fragment.getFragmentManager(), "edit");
+    }
+
+    @Override
+    public Dialog onCreateDialog(Bundle savedInstanceState) {
+        return new AlertDialog.Builder(getActivity())
+                .setIconAttribute(android.R.attr.alertDialogIcon)
+                .setMessage(R.string.aggregation_suggestion_edit_dialog_message)
+                .setPositiveButton(android.R.string.yes,
+                        new DialogInterface.OnClickListener() {
+                            @Override
+                            public void onClick(DialogInterface dialog, int whichButton) {
+                                final ContactEditorBaseFragment targetFragment =
+                                        (ContactEditorBaseFragment) getTargetFragment();
+                                final Uri contactUri =
+                                        getArguments().getParcelable(ARG_CONTACT_URI);
+                                targetFragment.doEditSuggestedContact(contactUri);
+                            }
+                        }
+                )
+                .setNegativeButton(android.R.string.no, null)
+                .create();
+    }
+}
diff --git a/src/com/android/contacts/editor/TextFieldsEditorView.java b/src/com/android/contacts/editor/TextFieldsEditorView.java
index bb5210a..9345434 100644
--- a/src/com/android/contacts/editor/TextFieldsEditorView.java
+++ b/src/com/android/contacts/editor/TextFieldsEditorView.java
@@ -82,7 +82,7 @@
         setDrawingCacheEnabled(true);
         setAlwaysDrawnWithCacheEnabled(true);
 
-        mMinFieldHeight = mContext.getResources().getDimensionPixelSize(
+        mMinFieldHeight = getContext().getResources().getDimensionPixelSize(
                 R.dimen.editor_min_line_item_height);
         mFields = (ViewGroup) findViewById(R.id.editors);
         mHintTextColor = getResources().getColor(R.color.secondary_text_color);
@@ -153,10 +153,18 @@
         public void onFocusChange(View v, boolean hasFocus) {
             // Check whether this field contains focus by calling findFocus() instead of
             // hasFocus(). The hasFocus() value is not necessarily up to date.
-            setHintColorDark(TextFieldsEditorView.this.findFocus() != null);
+            final boolean foundFocus = TextFieldsEditorView.this.findFocus() != null;
+            setHintColorDark(foundFocus);
             if (getEditorListener() != null) {
                 getEditorListener().onRequest(EditorListener.EDITOR_FOCUS_CHANGED);
             }
+            if (foundFocus && !isTypeVisible()) {
+                // We just got focus and the types are not visible
+                showType();
+            } else if (isEmpty()) {
+                // We just lost focus and the field is empty
+                hideType();
+            }
             // Rebuild the label spinner using the new colors.
             rebuildLabel();
         }
@@ -182,14 +190,10 @@
      * Creates or removes the type/label button. Doesn't do anything if already correctly configured
      */
     private void setupExpansionView(boolean shouldExist, boolean collapsed) {
-        if (shouldExist) {
-            mExpansionViewContainer.setVisibility(View.VISIBLE);
-            mExpansionView.setImageResource(collapsed
-                    ? R.drawable.ic_menu_expander_minimized_holo_light
-                    : R.drawable.ic_menu_expander_maximized_holo_light);
-        } else {
-            mExpansionViewContainer.setVisibility(View.GONE);
-        }
+        mExpansionView.setImageResource(collapsed
+                ? R.drawable.ic_menu_expander_minimized_holo_light
+                : R.drawable.ic_menu_expander_maximized_holo_light);
+        mExpansionViewContainer.setVisibility(shouldExist ? View.VISIBLE : View.INVISIBLE);
     }
 
     @Override
@@ -232,7 +236,7 @@
         mFieldEditTexts = new EditText[fieldCount];
         for (int index = 0; index < fieldCount; index++) {
             final EditField field = kind.fieldList.get(index);
-            final EditText fieldView = new EditText(mContext);
+            final EditText fieldView = new EditText(getContext());
             fieldView.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT,
                     LayoutParams.WRAP_CONTENT));
             fieldView.setTextSize(TypedValue.COMPLEX_UNIT_PX,
@@ -246,7 +250,7 @@
             int inputType = field.inputType;
             fieldView.setInputType(inputType);
             if (inputType == InputType.TYPE_CLASS_PHONE) {
-                PhoneNumberFormatter.setPhoneNumberFormattingTextWatcher(mContext, fieldView);
+                PhoneNumberFormatter.setPhoneNumberFormattingTextWatcher(getContext(), fieldView);
                 fieldView.setTextDirection(View.TEXT_DIRECTION_LTR);
             }
 
@@ -270,6 +274,11 @@
             final String value = entry.getAsString(column);
             fieldView.setText(value);
 
+            // Show the type drop down if we have a non-empty value.
+            if (!isTypeVisible() && !TextUtils.isEmpty(value)) {
+                showType();
+            }
+
             // Show the delete button if we have a non-null value
             setDeleteButtonVisible(value != null);
 
@@ -387,7 +396,8 @@
 
         mHideOptional = ss.mHideOptional;
 
-        int numChildren = Math.min(mFieldEditTexts.length, ss.mVisibilities.length);
+        int numChildren = Math.min(mFieldEditTexts == null ? 0 : mFieldEditTexts.length,
+                ss.mVisibilities == null ? 0 : ss.mVisibilities.length);
         for (int i = 0; i < numChildren; i++) {
             mFieldEditTexts[i].setVisibility(ss.mVisibilities[i]);
         }
diff --git a/src/com/android/contacts/group/GroupBrowseListFragment.java b/src/com/android/contacts/group/GroupBrowseListFragment.java
index 81cc28c..d39501a 100644
--- a/src/com/android/contacts/group/GroupBrowseListFragment.java
+++ b/src/com/android/contacts/group/GroupBrowseListFragment.java
@@ -44,6 +44,7 @@
 
 import com.android.contacts.GroupListLoader;
 import com.android.contacts.R;
+import com.android.contacts.common.util.ImplicitIntentsUtil;
 import com.android.contacts.group.GroupBrowseListAdapter.GroupListItemViewCache;
 import com.android.contacts.common.ContactsUtils;
 import com.android.contacts.common.list.AutoScrollListView;
@@ -141,7 +142,7 @@
                 intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
                 intent.putExtra(Settings.EXTRA_AUTHORITIES,
                         new String[] { ContactsContract.AUTHORITY });
-                startActivity(intent);
+                ImplicitIntentsUtil.startActivityOutsideApp(getActivity(), intent);
             }
         });
         setAddAccountsVisibility(!ContactsUtils.areGroupWritableAccountsAvailable(mContext));
diff --git a/src/com/android/contacts/group/GroupDetailFragment.java b/src/com/android/contacts/group/GroupDetailFragment.java
index c12595d..c9cf6bd 100644
--- a/src/com/android/contacts/group/GroupDetailFragment.java
+++ b/src/com/android/contacts/group/GroupDetailFragment.java
@@ -51,6 +51,7 @@
 import com.android.contacts.GroupMetaDataLoader;
 import com.android.contacts.R;
 import com.android.contacts.common.ContactPhotoManager;
+import com.android.contacts.common.util.ImplicitIntentsUtil;
 import com.android.contacts.interactions.GroupDeletionDialogFragment;
 import com.android.contacts.common.list.ContactTileAdapter;
 import com.android.contacts.common.list.ContactTileView;
@@ -398,7 +399,7 @@
                     intent.setClassName(accountType.syncAdapterPackageName,
                             accountType.getViewGroupActivity());
                     try {
-                        startActivity(intent);
+                        ImplicitIntentsUtil.startActivityInApp(getActivity(), intent);
                     } catch (ActivityNotFoundException e) {
                         Log.e(TAG, "startActivity() failed: " + e);
                         Toast.makeText(getActivity(), R.string.missing_app,
diff --git a/src/com/android/contacts/group/GroupEditorFragment.java b/src/com/android/contacts/group/GroupEditorFragment.java
index 3d13bdd..eda5d4f 100644
--- a/src/com/android/contacts/group/GroupEditorFragment.java
+++ b/src/com/android/contacts/group/GroupEditorFragment.java
@@ -239,9 +239,9 @@
             startGroupMetaDataLoader();
         } else if (Intent.ACTION_INSERT.equals(mAction)) {
             final Account account = mIntentExtras == null ? null :
-                    (Account) mIntentExtras.getParcelable(Intents.Insert.ACCOUNT);
+                    (Account) mIntentExtras.getParcelable(Intents.Insert.EXTRA_ACCOUNT);
             final String dataSet = mIntentExtras == null ? null :
-                    mIntentExtras.getString(Intents.Insert.DATA_SET);
+                    mIntentExtras.getString(Intents.Insert.EXTRA_DATA_SET);
 
             if (account != null) {
                 // Account specified in Intent - no data set can be specified in this manner.
diff --git a/src/com/android/contacts/interactions/CallLogInteractionsLoader.java b/src/com/android/contacts/interactions/CallLogInteractionsLoader.java
index c8e26e9..46cd315 100644
--- a/src/com/android/contacts/interactions/CallLogInteractionsLoader.java
+++ b/src/com/android/contacts/interactions/CallLogInteractionsLoader.java
@@ -26,7 +26,7 @@
 import android.telephony.PhoneNumberUtils;
 import android.text.TextUtils;
 
-import com.android.internal.annotations.VisibleForTesting;
+import com.google.common.annotations.VisibleForTesting;
 
 import java.util.ArrayList;
 import java.util.Collections;
diff --git a/src/com/android/contacts/interactions/ContactDeletionInteraction.java b/src/com/android/contacts/interactions/ContactDeletionInteraction.java
index 458556e..b05cbab 100644
--- a/src/com/android/contacts/interactions/ContactDeletionInteraction.java
+++ b/src/com/android/contacts/interactions/ContactDeletionInteraction.java
@@ -32,6 +32,8 @@
 import android.os.Bundle;
 import android.provider.ContactsContract.Contacts;
 import android.provider.ContactsContract.Contacts.Entity;
+import android.text.TextUtils;
+import android.util.Log;
 
 import com.android.contacts.ContactSaveService;
 import com.android.contacts.R;
@@ -48,6 +50,7 @@
 public class ContactDeletionInteraction extends Fragment
         implements LoaderCallbacks<Cursor>, OnDismissListener {
 
+    private static final String TAG = "ContactDeletionInteraction";
     private static final String FRAGMENT_TAG = "deleteContact";
 
     private static final String KEY_ACTIVE = "active";
@@ -77,7 +80,7 @@
     private AlertDialog mDialog;
 
     /** This is a wrapper around the fragment's loader manager to be used only during testing. */
-    private TestLoaderManager mTestLoaderManager;
+    private TestLoaderManagerBase mTestLoaderManager;
 
     @VisibleForTesting
     int mMessageId;
@@ -97,20 +100,20 @@
     }
 
     /**
-     * Starts the interaction and optionally set up a {@link TestLoaderManager}.
+     * Starts the interaction and optionally set up a {@link TestLoaderManagerBase}.
      *
      * @param activity the activity within which to start the interaction
      * @param contactUri the URI of the contact to delete
      * @param finishActivityWhenDone whether to finish the activity upon completion of the
      *        interaction
-     * @param testLoaderManager the {@link TestLoaderManager} to use to load the data, may be null
+     * @param testLoaderManager the {@link TestLoaderManagerBase} to use to load the data, may be null
      *        in which case the default {@link LoaderManager} is used
      * @return the newly created interaction
      */
     @VisibleForTesting
     static ContactDeletionInteraction startWithTestLoaderManager(
             Activity activity, Uri contactUri, boolean finishActivityWhenDone,
-            TestLoaderManager testLoaderManager) {
+            TestLoaderManagerBase testLoaderManager) {
         if (contactUri == null) {
             return null;
         }
@@ -147,7 +150,7 @@
     }
 
     /** Sets the TestLoaderManager that is used to wrap the actual LoaderManager in tests. */
-    private void setTestLoaderManager(TestLoaderManager mockLoaderManager) {
+    private void setTestLoaderManager(TestLoaderManagerBase mockLoaderManager) {
         mTestLoaderManager = mockLoaderManager;
     }
 
@@ -224,6 +227,11 @@
             return;
         }
 
+        if (cursor == null || cursor.isClosed()) {
+            Log.e(TAG, "Failed to load contacts");
+            return;
+        }
+
         long contactId = 0;
         String lookupKey = null;
 
@@ -247,6 +255,11 @@
                 readOnlyRawContacts.add(rawContactId);
             }
         }
+        if (TextUtils.isEmpty(lookupKey)) {
+            Log.e(TAG, "Failed to find contact lookup key");
+            getActivity().finish();
+            return;
+        }
 
         int readOnlyCount = readOnlyRawContacts.size();
         int writableCount = writableRawContacts.size();
diff --git a/src/com/android/contacts/interactions/ContactMultiDeletionInteraction.java b/src/com/android/contacts/interactions/ContactMultiDeletionInteraction.java
new file mode 100644
index 0000000..7c13178
--- /dev/null
+++ b/src/com/android/contacts/interactions/ContactMultiDeletionInteraction.java
@@ -0,0 +1,297 @@
+/*
+ * 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.interactions;
+
+import com.google.common.collect.Sets;
+
+import com.android.contacts.ContactSaveService;
+import com.android.contacts.R;
+import com.android.contacts.common.model.AccountTypeManager;
+import com.android.contacts.common.model.account.AccountType;
+
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.app.Fragment;
+import android.app.FragmentManager;
+import android.app.LoaderManager.LoaderCallbacks;
+import android.content.Context;
+import android.content.CursorLoader;
+import android.content.DialogInterface;
+import android.content.DialogInterface.OnDismissListener;
+import android.content.Loader;
+import android.database.Cursor;
+import android.os.Bundle;
+import android.provider.ContactsContract.RawContacts;
+import android.util.Log;
+
+import java.util.HashSet;
+import java.util.TreeSet;
+
+/**
+ * An interaction invoked to delete multiple contacts.
+ *
+ * This class is very similar to {@link ContactDeletionInteraction}.
+ */
+public class ContactMultiDeletionInteraction extends Fragment
+        implements LoaderCallbacks<Cursor> {
+
+    public interface MultiContactDeleteListener {
+        void onDeletionFinished();
+    }
+
+    private static final String FRAGMENT_TAG = "deleteMultipleContacts";
+    private static final String TAG = "ContactMultiDeletionInteraction";
+    private static final String KEY_ACTIVE = "active";
+    private static final String KEY_CONTACTS_IDS = "contactIds";
+    public static final String ARG_CONTACT_IDS = "contactIds";
+
+    private static final String[] RAW_CONTACT_PROJECTION = new String[] {
+            RawContacts._ID,
+            RawContacts.ACCOUNT_TYPE,
+            RawContacts.DATA_SET,
+            RawContacts.CONTACT_ID,
+    };
+
+    private static final int COLUMN_INDEX_RAW_CONTACT_ID = 0;
+    private static final int COLUMN_INDEX_ACCOUNT_TYPE = 1;
+    private static final int COLUMN_INDEX_DATA_SET = 2;
+    private static final int COLUMN_INDEX_CONTACT_ID = 3;
+
+    private boolean mIsLoaderActive;
+    private TreeSet<Long> mContactIds;
+    private Context mContext;
+    private AlertDialog mDialog;
+
+    /**
+     * Starts the interaction.
+     *
+     * @param activity the activity 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) {
+        if (contactIds == null) {
+            return null;
+        }
+
+        final FragmentManager fragmentManager = activity.getFragmentManager();
+        ContactMultiDeletionInteraction fragment =
+                (ContactMultiDeletionInteraction) fragmentManager.findFragmentByTag(FRAGMENT_TAG);
+        if (fragment == null) {
+            fragment = new ContactMultiDeletionInteraction();
+            fragment.setContactIds(contactIds);
+            fragmentManager.beginTransaction().add(fragment, FRAGMENT_TAG)
+                    .commitAllowingStateLoss();
+        } else {
+            fragment.setContactIds(contactIds);
+        }
+        return fragment;
+    }
+
+    @Override
+    public void onAttach(Activity activity) {
+        super.onAttach(activity);
+        mContext = activity;
+    }
+
+    @Override
+    public void onDestroyView() {
+        super.onDestroyView();
+        if (mDialog != null && mDialog.isShowing()) {
+            mDialog.setOnDismissListener(null);
+            mDialog.dismiss();
+            mDialog = null;
+        }
+    }
+
+    public void setContactIds(TreeSet<Long> contactIds) {
+        mContactIds = contactIds;
+        mIsLoaderActive = true;
+        if (isStarted()) {
+            Bundle args = new Bundle();
+            args.putSerializable(ARG_CONTACT_IDS, mContactIds);
+            getLoaderManager().restartLoader(R.id.dialog_delete_multiple_contact_loader_id,
+                    args, this);
+        }
+    }
+
+    private boolean isStarted() {
+        return isAdded();
+    }
+
+    @Override
+    public void onStart() {
+        if (mIsLoaderActive) {
+            Bundle args = new Bundle();
+            args.putSerializable(ARG_CONTACT_IDS, mContactIds);
+            getLoaderManager().initLoader(
+                    R.id.dialog_delete_multiple_contact_loader_id, args, this);
+        }
+        super.onStart();
+    }
+
+    @Override
+    public void onStop() {
+        super.onStop();
+        if (mDialog != null) {
+            mDialog.hide();
+        }
+    }
+
+    @Override
+    public Loader<Cursor> onCreateLoader(int id, Bundle args) {
+        final TreeSet<Long> contactIds = (TreeSet<Long>) args.getSerializable(ARG_CONTACT_IDS);
+        final Object[] parameterObject = contactIds.toArray();
+        final String[] parameters = new String[contactIds.size()];
+
+        final StringBuilder builder = new StringBuilder();
+        for (int i = 0; i < contactIds.size(); i++) {
+            parameters[i] = String.valueOf(parameterObject[i]);
+            builder.append(RawContacts.CONTACT_ID + " =?");
+            if (i == contactIds.size() -1) {
+                break;
+            }
+            builder.append(" OR ");
+        }
+        return new CursorLoader(mContext, RawContacts.CONTENT_URI, RAW_CONTACT_PROJECTION,
+                builder.toString(), parameters, null);
+    }
+
+    @Override
+    public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
+        if (mDialog != null) {
+            mDialog.dismiss();
+            mDialog = null;
+        }
+
+        if (!mIsLoaderActive) {
+            return;
+        }
+
+        if (cursor == null || cursor.isClosed()) {
+            Log.e(TAG, "Failed to load contacts");
+            return;
+        }
+
+        // This cursor may contain duplicate raw contacts, so we need to de-dupe them first
+        final HashSet<Long> readOnlyRawContacts = Sets.newHashSet();
+        final HashSet<Long> writableRawContacts = Sets.newHashSet();
+        final HashSet<Long> contactIds = Sets.newHashSet();
+
+        AccountTypeManager accountTypes = AccountTypeManager.getInstance(getActivity());
+        cursor.moveToPosition(-1);
+        while (cursor.moveToNext()) {
+            final long rawContactId = cursor.getLong(COLUMN_INDEX_RAW_CONTACT_ID);
+            final String accountType = cursor.getString(COLUMN_INDEX_ACCOUNT_TYPE);
+            final String dataSet = cursor.getString(COLUMN_INDEX_DATA_SET);
+            final long contactId = cursor.getLong(COLUMN_INDEX_CONTACT_ID);
+            contactIds.add(contactId);
+            final AccountType type = accountTypes.getAccountType(accountType, dataSet);
+            boolean writable = type == null || type.areContactsWritable();
+            if (writable) {
+                writableRawContacts.add(rawContactId);
+            } else {
+                readOnlyRawContacts.add(rawContactId);
+            }
+        }
+
+        final int readOnlyCount = readOnlyRawContacts.size();
+        final int writableCount = writableRawContacts.size();
+
+        final int messageId;
+        if (readOnlyCount > 0 && writableCount > 0) {
+            messageId = R.string.batch_delete_multiple_accounts_confirmation;
+        } else if (readOnlyCount > 0 && writableCount == 0) {
+            messageId = R.string.batch_delete_read_only_contact_confirmation;
+        } else {
+            messageId = R.string.batch_delete_confirmation;
+        }
+
+        // Convert set of contact ids into a format that is easily parcellable and iterated upon
+        // for the sake of ContactSaveService.
+        final Long[] contactIdObjectArray = contactIds.toArray(new Long[contactIds.size()]);
+        final long[] contactIdArray = new long[contactIds.size()];
+        for (int i = 0; i < contactIds.size(); i++) {
+            contactIdArray[i] = contactIdObjectArray[i];
+        }
+
+        showDialog(messageId, contactIdArray);
+
+        // We don't want onLoadFinished() calls any more, which may come when the database is
+        // updating.
+        getLoaderManager().destroyLoader(R.id.dialog_delete_multiple_contact_loader_id);
+    }
+
+    @Override
+    public void onLoaderReset(Loader<Cursor> loader) {
+    }
+
+    private void showDialog(int messageId, final long[] contactIds) {
+        mDialog = new AlertDialog.Builder(getActivity())
+                .setIconAttribute(android.R.attr.alertDialogIcon)
+                .setMessage(messageId)
+                .setNegativeButton(android.R.string.cancel, null)
+                .setPositiveButton(android.R.string.ok,
+                    new DialogInterface.OnClickListener() {
+                        @Override
+                        public void onClick(DialogInterface dialog, int whichButton) {
+                            doDeleteContact(contactIds);
+                        }
+                    }
+                )
+                .create();
+
+        mDialog.setOnDismissListener(new OnDismissListener() {
+            @Override
+            public void onDismiss(DialogInterface dialog) {
+                mIsLoaderActive = false;
+                mDialog = null;
+            }
+        });
+        mDialog.show();
+    }
+
+    @Override
+    public void onSaveInstanceState(Bundle outState) {
+        super.onSaveInstanceState(outState);
+        outState.putBoolean(KEY_ACTIVE, mIsLoaderActive);
+        outState.putSerializable(KEY_CONTACTS_IDS, mContactIds);
+    }
+
+    @Override
+    public void onActivityCreated(Bundle savedInstanceState) {
+        super.onActivityCreated(savedInstanceState);
+        if (savedInstanceState != null) {
+            mIsLoaderActive = savedInstanceState.getBoolean(KEY_ACTIVE);
+            mContactIds = (TreeSet<Long>) savedInstanceState.getSerializable(KEY_CONTACTS_IDS);
+        }
+    }
+
+    protected void doDeleteContact(long[] contactIds) {
+        mContext.startService(ContactSaveService.createDeleteMultipleContactsIntent(mContext,
+                contactIds));
+        notifyListenerActivity();
+    }
+
+    private void notifyListenerActivity() {
+        if (getActivity() instanceof MultiContactDeleteListener) {
+            final MultiContactDeleteListener listener = (MultiContactDeleteListener) getActivity();
+            listener.onDeletionFinished();
+        }
+    }
+}
diff --git a/src/com/android/contacts/interactions/GroupCreationDialogFragment.java b/src/com/android/contacts/interactions/GroupCreationDialogFragment.java
index b2860ea..e998688 100644
--- a/src/com/android/contacts/interactions/GroupCreationDialogFragment.java
+++ b/src/com/android/contacts/interactions/GroupCreationDialogFragment.java
@@ -23,6 +23,7 @@
 
 import com.android.contacts.ContactSaveService;
 import com.android.contacts.R;
+import com.android.contacts.activities.ContactEditorBaseActivity;
 import com.android.contacts.common.model.account.AccountWithDataSet;
 
 /**
@@ -94,6 +95,6 @@
         activity.startService(ContactSaveService.createNewGroupIntent(activity,
                 new AccountWithDataSet(accountName, accountType, dataSet), groupLabel,
                 null /* no new members to add */,
-                activity.getClass(), Intent.ACTION_EDIT));
+                activity.getClass(), ContactEditorBaseActivity.ACTION_EDIT));
     }
 }
diff --git a/src/com/android/contacts/interactions/JoinContactsDialogFragment.java b/src/com/android/contacts/interactions/JoinContactsDialogFragment.java
new file mode 100644
index 0000000..a9a1aa9
--- /dev/null
+++ b/src/com/android/contacts/interactions/JoinContactsDialogFragment.java
@@ -0,0 +1,107 @@
+/*
+ * 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.interactions;
+
+
+import com.android.contacts.ContactSaveService;
+import com.android.contacts.R;
+
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.app.Dialog;
+import android.app.DialogFragment;
+import android.app.FragmentTransaction;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.os.Bundle;
+
+import java.util.TreeSet;
+
+/**
+ * An interaction invoked to join multiple contacts together.
+ */
+public class JoinContactsDialogFragment extends DialogFragment {
+
+    private static final String FRAGMENT_TAG = "joinDialog";
+    private static final String KEY_CONTACT_IDS = "contactIds";
+
+    public interface JoinContactsListener {
+        void onContactsJoined();
+    }
+
+    public static void start(Activity activity, TreeSet<Long> contactIds) {
+        final FragmentTransaction ft = activity.getFragmentManager().beginTransaction();
+        final JoinContactsDialogFragment newFragment
+                = JoinContactsDialogFragment.newInstance(contactIds);
+        newFragment.show(ft, FRAGMENT_TAG);
+    }
+
+    private static JoinContactsDialogFragment newInstance(TreeSet<Long> contactIds) {
+        final JoinContactsDialogFragment fragment = new JoinContactsDialogFragment();
+        Bundle arguments = new Bundle();
+        arguments.putSerializable(KEY_CONTACT_IDS, contactIds);
+        fragment.setArguments(arguments);
+        return fragment;
+    }
+
+    @Override
+    public Dialog onCreateDialog(Bundle savedInstanceState) {
+        final TreeSet<Long> contactIds =
+                (TreeSet<Long>) getArguments().getSerializable(KEY_CONTACT_IDS);
+        if (contactIds.size() <= 1) {
+            return new AlertDialog.Builder(getActivity())
+                    .setIconAttribute(android.R.attr.alertDialogIcon)
+                    .setMessage(R.string.batch_merge_single_contact_warning)
+                    .setPositiveButton(android.R.string.ok, null)
+                    .create();
+        }
+        return new AlertDialog.Builder(getActivity())
+                .setIconAttribute(android.R.attr.alertDialogIcon)
+                .setMessage(R.string.batch_merge_confirmation)
+                .setNegativeButton(android.R.string.cancel, null)
+                .setPositiveButton(android.R.string.ok,
+                        new DialogInterface.OnClickListener() {
+                            @Override
+                            public void onClick(DialogInterface dialog, int whichButton) {
+                                joinContacts(contactIds);
+                            }
+                        }
+                )
+                .create();
+    }
+
+    private void joinContacts(TreeSet<Long> contactIds) {
+        final Long[] contactIdsArray = contactIds.toArray(new Long[contactIds.size()]);
+        final long[] contactIdsArray2 = new long[contactIdsArray.length];
+        for (int i = 0; i < contactIds.size(); i++) {
+            contactIdsArray2[i] = contactIdsArray[i];
+        }
+
+        final Intent intent = ContactSaveService.createJoinSeveralContactsIntent(getActivity(),
+                contactIdsArray2);
+        getActivity().startService(intent);
+
+        notifyListener();
+    }
+
+    private void notifyListener() {
+        if (getActivity() instanceof JoinContactsListener) {
+            ((JoinContactsListener) getActivity()).onContactsJoined();
+        }
+    }
+
+}
diff --git a/src/com/android/contacts/interactions/TestLoaderManagerBase.java b/src/com/android/contacts/interactions/TestLoaderManagerBase.java
new file mode 100644
index 0000000..92ae3b9
--- /dev/null
+++ b/src/com/android/contacts/interactions/TestLoaderManagerBase.java
@@ -0,0 +1,89 @@
+/*
+ * 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.interactions;
+
+import android.app.LoaderManager;
+
+/**
+ * A {@link LoaderManager} that records which loaders have been completed.
+ * <p>
+ * You should wrap the existing LoaderManager with an instance of this class, which will then
+ * delegate to the original object.
+ * <p>
+ * Typically, one would override {@link android.app.Activity#getLoaderManager()} to return the
+ * TestLoaderManager and ensuring it wraps the {@link LoaderManager} for this object, e.g.:
+ * <pre>
+ *   private TestLoaderManager mTestLoaderManager;
+ *
+ *   public LoaderManager getLoaderManager() {
+ *     LoaderManager loaderManager = super.getLoaderManager();
+ *     if (mTestLoaderManager != null) {
+ *       mTestLoaderManager.setDelegate(loaderManager);
+ *       return mTestLoaderManager;
+ *     } else {
+ *       return loaderManager;
+ *     }
+ *   }
+ *
+ *   void setTestLoaderManager(TestLoaderManager testLoaderManager) {
+ *     mTestLoaderManager = testLoaderManager;
+ *   }
+ * </pre>
+ * In the tests, one would set the TestLoaderManager upon creating the activity, and then wait for
+ * the loader to complete.
+ * <pre>
+ *   public void testLoadedCorrect() {
+ *     TestLoaderManager testLoaderManager = new TestLoaderManager();
+ *     getActivity().setTestLoaderManager(testLoaderManager);
+ *     runOnUiThread(new Runnable() { public void run() { getActivity().startLoading(); } });
+ *     testLoaderManager.waitForLoader(R.id.test_loader_id);
+ *   }
+ * </pre>
+ * If the loader completes before the call to {@link #waitForLoaders(int...)}, the TestLoaderManager
+ * will have stored the fact that the loader has completed and correctly terminate immediately.
+ * <p>
+ * It one needs to wait for the same loader multiple times, call {@link #reset()} between the them
+ * as in:
+ * <pre>
+ *   public void testLoadedCorrect() {
+ *     TestLoaderManager testLoaderManager = new TestLoaderManager();
+ *     getActivity().setTestLoaderManager(testLoaderManager);
+ *     runOnUiThread(new Runnable() { public void run() { getActivity().startLoading(); } });
+ *     testLoaderManager.waitForLoader(R.id.test_loader_id);
+ *     testLoaderManager.reset();
+ *     // Load and wait again.
+ *     runOnUiThread(new Runnable() { public void run() { getActivity().startLoading(); } });
+ *     testLoaderManager.waitForLoader(R.id.test_loader_id);
+ *   }
+ * </pre>
+ */
+abstract class TestLoaderManagerBase extends LoaderManager {
+
+    /**
+     * Waits for the specified loaders to complete loading.
+     */
+    public abstract void waitForLoaders(int... loaderIds);
+
+    /**
+     * Sets the object to which we delegate the actual work.
+     * <p>
+     * It can not be set to null. Once set, it cannot be changed (but it allows setting it to the
+     * same value again).
+     */
+    public abstract void setDelegate(LoaderManager delegate);
+
+}
diff --git a/src/com/android/contacts/list/ContactPickerFragment.java b/src/com/android/contacts/list/ContactPickerFragment.java
index 0503d33..4e81389 100644
--- a/src/com/android/contacts/list/ContactPickerFragment.java
+++ b/src/com/android/contacts/list/ContactPickerFragment.java
@@ -113,7 +113,7 @@
 
     @Override
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
-        if (position == 0 && mCreateContactEnabled) {
+        if (position == 0 && mCreateContactEnabled && mListener != null) {
             mListener.onCreateNewContactAction();
         } else {
             super.onItemClick(parent, view, position, id);
@@ -142,15 +142,21 @@
     }
 
     public void createNewContact() {
-        mListener.onCreateNewContactAction();
+        if (mListener != null) {
+            mListener.onCreateNewContactAction();
+        }
     }
 
     public void editContact(Uri contactUri) {
-        mListener.onEditContactAction(contactUri);
+        if (mListener != null) {
+            mListener.onEditContactAction(contactUri);
+        }
     }
 
     public void pickContact(Uri uri) {
-        mListener.onPickContactAction(uri);
+        if (mListener != null) {
+            mListener.onPickContactAction(uri);
+        }
     }
 
     @Override
@@ -190,11 +196,15 @@
 
     @Override
     public void onShortcutIntentCreated(Uri uri, Intent shortcutIntent) {
-        mListener.onShortcutIntentCreated(shortcutIntent);
+        if (mListener != null) {
+            mListener.onShortcutIntentCreated(shortcutIntent);
+        }
     }
 
     @Override
     public void onPickerResult(Intent data) {
-        mListener.onPickContactAction(data.getData());
+        if (mListener != null) {
+            mListener.onPickContactAction(data.getData());
+        }
     }
 }
diff --git a/src/com/android/contacts/list/ContactsIntentResolver.java b/src/com/android/contacts/list/ContactsIntentResolver.java
index b4416be..259e0c7 100644
--- a/src/com/android/contacts/list/ContactsIntentResolver.java
+++ b/src/com/android/contacts/list/ContactsIntentResolver.java
@@ -16,13 +16,10 @@
 
 package com.android.contacts.list;
 
-import com.android.contacts.ContactsSearchManager;
-
 import android.app.Activity;
 import android.app.SearchManager;
 import android.content.Intent;
 import android.net.Uri;
-import android.os.Bundle;
 import android.provider.Contacts.ContactMethods;
 import android.provider.Contacts.People;
 import android.provider.Contacts.Phones;
@@ -33,7 +30,6 @@
 import android.provider.ContactsContract.Contacts;
 import android.provider.ContactsContract.Intents;
 import android.provider.ContactsContract.Intents.Insert;
-import android.provider.ContactsContract.Intents.UI;
 import android.text.TextUtils;
 import android.util.Log;
 
@@ -59,21 +55,21 @@
 
         Log.i(TAG, "Called with action: " + action);
 
-        if (UI.LIST_DEFAULT.equals(action) ) {
+        if (UiIntentActions.LIST_DEFAULT.equals(action) ) {
             request.setActionCode(ContactsRequest.ACTION_DEFAULT);
-        } else if (UI.LIST_ALL_CONTACTS_ACTION.equals(action)) {
+        } else if (UiIntentActions.LIST_ALL_CONTACTS_ACTION.equals(action)) {
             request.setActionCode(ContactsRequest.ACTION_ALL_CONTACTS);
-        } else if (UI.LIST_CONTACTS_WITH_PHONES_ACTION.equals(action)) {
+        } else if (UiIntentActions.LIST_CONTACTS_WITH_PHONES_ACTION.equals(action)) {
             request.setActionCode(ContactsRequest.ACTION_CONTACTS_WITH_PHONES);
-        } else if (UI.LIST_STARRED_ACTION.equals(action)) {
+        } else if (UiIntentActions.LIST_STARRED_ACTION.equals(action)) {
             request.setActionCode(ContactsRequest.ACTION_STARRED);
-        } else if (UI.LIST_FREQUENT_ACTION.equals(action)) {
+        } else if (UiIntentActions.LIST_FREQUENT_ACTION.equals(action)) {
             request.setActionCode(ContactsRequest.ACTION_FREQUENT);
-        } else if (UI.LIST_STREQUENT_ACTION.equals(action)) {
+        } else if (UiIntentActions.LIST_STREQUENT_ACTION.equals(action)) {
             request.setActionCode(ContactsRequest.ACTION_STREQUENT);
-        } else if (UI.LIST_GROUP_ACTION.equals(action)) {
+        } else if (UiIntentActions.LIST_GROUP_ACTION.equals(action)) {
             request.setActionCode(ContactsRequest.ACTION_GROUP);
-            // We no longer support UI.GROUP_NAME_EXTRA_KEY
+            // We no longer support UiIntentActions.GROUP_NAME_EXTRA_KEY
         } else if (Intent.ACTION_PICK.equals(action)) {
             final String resolvedType = intent.resolveType(mContext);
             if (Contacts.CONTENT_TYPE.equals(resolvedType)) {
@@ -146,24 +142,6 @@
                 intent.setAction(Intent.ACTION_DEFAULT);
                 intent.setData(null);
             }
-        } else if (UI.FILTER_CONTACTS_ACTION.equals(action)) {
-            // When we get a FILTER_CONTACTS_ACTION, it represents search in the context
-            // of some other action. Let's retrieve the original action to provide proper
-            // context for the search queries.
-            request.setActionCode(ContactsRequest.ACTION_DEFAULT);
-            Bundle extras = intent.getExtras();
-            if (extras != null) {
-                request.setQueryString(extras.getString(UI.FILTER_TEXT_EXTRA_KEY));
-
-                ContactsRequest originalRequest =
-                        (ContactsRequest)extras.get(ContactsSearchManager.ORIGINAL_REQUEST_KEY);
-                if (originalRequest != null) {
-                    request.copyFrom(originalRequest);
-                }
-            }
-
-            request.setSearchMode(true);
-
         // Since this is the filter activity it receives all intents
         // dispatched from the SearchManager for security reasons
         // so we need to re-dispatch from here to the intended target.
@@ -173,11 +151,11 @@
             request.setContactUri(data);
             intent.setAction(Intent.ACTION_DEFAULT);
             intent.setData(null);
-        } else if (UI.PICK_JOIN_CONTACT_ACTION.equals(action)) {
+        } else if (UiIntentActions.PICK_JOIN_CONTACT_ACTION.equals(action)) {
             request.setActionCode(ContactsRequest.ACTION_PICK_JOIN);
         }
         // Allow the title to be set to a custom String using an extra on the intent
-        String title = intent.getStringExtra(UI.TITLE_EXTRA_KEY);
+        String title = intent.getStringExtra(UiIntentActions.TITLE_EXTRA_KEY);
         if (title != null) {
             request.setActivityTitle(title);
         }
diff --git a/src/com/android/contacts/list/ContactsRequest.java b/src/com/android/contacts/list/ContactsRequest.java
index 7955fde..636fe58 100644
--- a/src/com/android/contacts/list/ContactsRequest.java
+++ b/src/com/android/contacts/list/ContactsRequest.java
@@ -24,7 +24,7 @@
 /**
  * Parsed form of the intent sent to the Contacts application.
  */
-public class ContactsRequest implements Parcelable {
+public class ContactsRequest {
 
     /** Default mode: browse contacts */
     public static final int ACTION_DEFAULT = 10;
@@ -82,7 +82,6 @@
 
     private boolean mValid = true;
     private int mActionCode = ACTION_DEFAULT;
-    private Intent mRedirectIntent;
     private CharSequence mTitle;
     private boolean mSearchMode;
     private String mQueryString;
@@ -95,7 +94,6 @@
     public String toString() {
         return "{ContactsRequest:mValid=" + mValid
                 + " mActionCode=" + mActionCode
-                + " mRedirectIntent=" + mRedirectIntent
                 + " mTitle=" + mTitle
                 + " mSearchMode=" + mSearchMode
                 + " mQueryString=" + mQueryString
@@ -106,62 +104,6 @@
                 + "}";
     }
 
-    /**
-     * Copies all fields.
-     */
-    public void copyFrom(ContactsRequest request) {
-        mValid = request.mValid;
-        mActionCode = request.mActionCode;
-        mRedirectIntent = request.mRedirectIntent;
-        mTitle = request.mTitle;
-        mSearchMode = request.mSearchMode;
-        mQueryString = request.mQueryString;
-        mIncludeProfile = request.mIncludeProfile;
-        mLegacyCompatibilityMode = request.mLegacyCompatibilityMode;
-        mDirectorySearchEnabled = request.mDirectorySearchEnabled;
-        mContactUri = request.mContactUri;
-    }
-
-    public static Parcelable.Creator<ContactsRequest> CREATOR = new Creator<ContactsRequest>() {
-
-        public ContactsRequest[] newArray(int size) {
-            return new ContactsRequest[size];
-        }
-
-        public ContactsRequest createFromParcel(Parcel source) {
-            ClassLoader classLoader = this.getClass().getClassLoader();
-            ContactsRequest request = new ContactsRequest();
-            request.mValid = source.readInt() != 0;
-            request.mActionCode = source.readInt();
-            request.mRedirectIntent = source.readParcelable(classLoader);
-            request.mTitle = source.readCharSequence();
-            request.mSearchMode = source.readInt() != 0;
-            request.mQueryString = source.readString();
-            request.mIncludeProfile = source.readInt() != 0;
-            request.mLegacyCompatibilityMode  = source.readInt() != 0;
-            request.mDirectorySearchEnabled = source.readInt() != 0;
-            request.mContactUri = source.readParcelable(classLoader);
-            return request;
-        }
-    };
-
-    public void writeToParcel(Parcel dest, int flags) {
-        dest.writeInt(mValid ? 1 : 0);
-        dest.writeInt(mActionCode);
-        dest.writeParcelable(mRedirectIntent, 0);
-        dest.writeCharSequence(mTitle);
-        dest.writeInt(mSearchMode ? 1 : 0);
-        dest.writeString(mQueryString);
-        dest.writeInt(mIncludeProfile ? 1 : 0);
-        dest.writeInt(mLegacyCompatibilityMode ? 1 : 0);
-        dest.writeInt(mDirectorySearchEnabled ? 1 : 0);
-        dest.writeParcelable(mContactUri, 0);
-    }
-
-    public int describeContents() {
-        return 0;
-    }
-
     public boolean isValid() {
         return mValid;
     }
@@ -170,14 +112,6 @@
         mValid = flag;
     }
 
-    public Intent getRedirectIntent() {
-        return mRedirectIntent;
-    }
-
-    public void setRedirectIntent(Intent intent) {
-        mRedirectIntent = intent;
-    }
-
     public void setActivityTitle(CharSequence title) {
         mTitle = title;
     }
diff --git a/src/com/android/contacts/list/ContactsUnavailableFragment.java b/src/com/android/contacts/list/ContactsUnavailableFragment.java
index 70d224a..48c4e9e 100644
--- a/src/com/android/contacts/list/ContactsUnavailableFragment.java
+++ b/src/com/android/contacts/list/ContactsUnavailableFragment.java
@@ -42,15 +42,13 @@
     private Button mCreateContactButton;
     private Button mAddAccountButton;
     private Button mImportContactsButton;
-    private Button mUninstallAppsButton;
-    private Button mRetryUpgradeButton;
     private ProgressBar mProgress;
     private int mNoContactsMsgResId = -1;
     private int mNSecNoContactsMsgResId = -1;
 
     private OnContactsUnavailableActionListener mListener;
 
-    private ProviderStatusWatcher.Status mProviderStatus;
+    private Integer mProviderStatus;
 
     @Override
     public void onCreate(Bundle savedInstanceState) {
@@ -69,10 +67,6 @@
         mAddAccountButton.setOnClickListener(this);
         mImportContactsButton = (Button) mView.findViewById(R.id.import_contacts_button);
         mImportContactsButton.setOnClickListener(this);
-        mUninstallAppsButton = (Button) mView.findViewById(R.id.import_failure_uninstall_button);
-        mUninstallAppsButton.setOnClickListener(this);
-        mRetryUpgradeButton = (Button) mView.findViewById(R.id.import_failure_retry_button);
-        mRetryUpgradeButton.setOnClickListener(this);
         mProgress = (ProgressBar) mView.findViewById(R.id.progress);
 
         if (mProviderStatus != null) {
@@ -87,20 +81,18 @@
         mListener = listener;
     }
 
-    public void updateStatus(ProviderStatusWatcher.Status providerStatus) {
+    public void updateStatus(int providerStatus) {
         mProviderStatus = providerStatus;
         if (mView == null) {
             // The view hasn't been inflated yet.
             return;
         }
-        switch (providerStatus.status) {
+        switch (providerStatus) {
             case ProviderStatus.STATUS_NO_ACCOUNTS_NO_CONTACTS:
                 setMessageText(mNoContactsMsgResId, mNSecNoContactsMsgResId);
                 mCreateContactButton.setVisibility(View.VISIBLE);
                 mAddAccountButton.setVisibility(View.VISIBLE);
                 mImportContactsButton.setVisibility(View.VISIBLE);
-                mUninstallAppsButton.setVisibility(View.GONE);
-                mRetryUpgradeButton.setVisibility(View.GONE);
                 mProgress.setVisibility(View.GONE);
                 break;
 
@@ -111,8 +103,6 @@
                 mCreateContactButton.setVisibility(View.GONE);
                 mAddAccountButton.setVisibility(View.GONE);
                 mImportContactsButton.setVisibility(View.GONE);
-                mUninstallAppsButton.setVisibility(View.GONE);
-                mRetryUpgradeButton.setVisibility(View.GONE);
                 mProgress.setVisibility(View.VISIBLE);
                 break;
 
@@ -123,24 +113,8 @@
                 mCreateContactButton.setVisibility(View.GONE);
                 mAddAccountButton.setVisibility(View.GONE);
                 mImportContactsButton.setVisibility(View.GONE);
-                mUninstallAppsButton.setVisibility(View.GONE);
-                mRetryUpgradeButton.setVisibility(View.GONE);
                 mProgress.setVisibility(View.VISIBLE);
                 break;
-
-            case ProviderStatus.STATUS_UPGRADE_OUT_OF_MEMORY:
-                String message = getResources().getString(R.string.upgrade_out_of_memory,
-                        new Object[] { providerStatus.data});
-                mMessageView.setText(message);
-                mMessageView.setGravity(Gravity.START);
-                mMessageView.setVisibility(View.VISIBLE);
-                mCreateContactButton.setVisibility(View.GONE);
-                mAddAccountButton.setVisibility(View.GONE);
-                mImportContactsButton.setVisibility(View.GONE);
-                mUninstallAppsButton.setVisibility(View.VISIBLE);
-                mRetryUpgradeButton.setVisibility(View.VISIBLE);
-                mProgress.setVisibility(View.GONE);
-                break;
         }
     }
 
@@ -159,15 +133,6 @@
             case R.id.import_contacts_button:
                 mListener.onImportContactsFromFileAction();
                 break;
-            case R.id.import_failure_uninstall_button:
-                mListener.onFreeInternalStorageAction();
-                break;
-            case R.id.import_failure_retry_button:
-                final Context context = getActivity();
-                if (context != null) { // Just in case.
-                    ProviderStatusWatcher.retryUpgrade(context);
-                }
-                break;
         }
     }
     /**
@@ -179,7 +144,7 @@
         mNoContactsMsgResId = resId;
         mNSecNoContactsMsgResId = secResId;
         if ((mMessageView != null) && (mProviderStatus != null) &&
-                (mProviderStatus.status == ProviderStatus.STATUS_NO_ACCOUNTS_NO_CONTACTS)) {
+                (mProviderStatus.equals(ProviderStatus.STATUS_NO_ACCOUNTS_NO_CONTACTS))) {
             if (resId != -1) {
                 mMessageView.setText(mNoContactsMsgResId);
                 mMessageView.setGravity(Gravity.CENTER_HORIZONTAL);
diff --git a/src/com/android/contacts/list/DefaultContactBrowseListFragment.java b/src/com/android/contacts/list/DefaultContactBrowseListFragment.java
index 4630202..fefe28b 100644
--- a/src/com/android/contacts/list/DefaultContactBrowseListFragment.java
+++ b/src/com/android/contacts/list/DefaultContactBrowseListFragment.java
@@ -39,6 +39,7 @@
 import com.android.contacts.common.list.ContactListItemView;
 import com.android.contacts.common.list.DefaultContactListAdapter;
 import com.android.contacts.common.list.ProfileAndContactsLoader;
+import com.android.contacts.common.util.ImplicitIntentsUtil;
 import com.android.contacts.editor.ContactEditorFragment;
 import com.android.contacts.common.util.AccountFilterUtil;
 
@@ -251,7 +252,7 @@
             public void onClick(View v) {
                 Intent intent = new Intent(Intent.ACTION_INSERT, Contacts.CONTENT_URI);
                 intent.putExtra(ContactEditorFragment.INTENT_EXTRA_NEW_LOCAL_PROFILE, true);
-                startActivity(intent);
+                ImplicitIntentsUtil.startActivityInApp(getActivity(), intent);
             }
         });
     }
diff --git a/src/com/android/contacts/list/HeaderEntryContactListAdapter.java b/src/com/android/contacts/list/HeaderEntryContactListAdapter.java
index a76a4a1..9822b79 100644
--- a/src/com/android/contacts/list/HeaderEntryContactListAdapter.java
+++ b/src/com/android/contacts/list/HeaderEntryContactListAdapter.java
@@ -64,10 +64,9 @@
                 // Pass the cursor down. Don't worry, it isn't used.
                 itemView = newView(getContext(), 0, getCursor(0), 0, parent);
             } else {
-                itemView = (ContactListItemView ) convertView;
+                itemView = (ContactListItemView) convertView;
             }
-            itemView.setDrawableResource(R.drawable.search_shortcut_background,
-                    R.drawable.ic_search_add_contact);
+            itemView.setDrawableResource(R.drawable.ic_search_add_contact);
             itemView.setDisplayName(getContext().getResources().getString(
                     R.string.header_entry_contact_list_adapter_header_title));
             return itemView;
diff --git a/src/com/android/contacts/list/LegacyPhoneNumberPickerFragment.java b/src/com/android/contacts/list/LegacyPhoneNumberPickerFragment.java
index b88fa71..d62c730 100644
--- a/src/com/android/contacts/list/LegacyPhoneNumberPickerFragment.java
+++ b/src/com/android/contacts/list/LegacyPhoneNumberPickerFragment.java
@@ -42,6 +42,12 @@
     }
 
     @Override
+    protected String getLookupKey(int position) {
+        // There is no lookup key for the legacy adapter.
+        return null;
+    }
+
+    @Override
     protected ContactEntryListAdapter createListAdapter() {
         LegacyPhoneNumberListAdapter adapter = new LegacyPhoneNumberListAdapter(getActivity());
         adapter.setDisplayPhotos(true);
diff --git a/src/com/android/contacts/list/MultiSelectContactsListFragment.java b/src/com/android/contacts/list/MultiSelectContactsListFragment.java
new file mode 100644
index 0000000..a58a8ee
--- /dev/null
+++ b/src/com/android/contacts/list/MultiSelectContactsListFragment.java
@@ -0,0 +1,164 @@
+/*
+ * 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.list;
+
+import com.android.contacts.common.list.ContactListAdapter;
+import com.android.contacts.common.list.ContactListItemView;
+import com.android.contacts.common.list.DefaultContactListAdapter;
+import com.android.contacts.list.MultiSelectEntryContactListAdapter.SelectedContactsListener;
+
+import android.net.Uri;
+import android.os.Bundle;
+import android.text.TextUtils;
+
+import java.util.TreeSet;
+
+/**
+ * Fragment containing a contact list used for browsing contacts and optionally selecting
+ * multiple contacts via checkboxes.
+ */
+public class MultiSelectContactsListFragment extends DefaultContactBrowseListFragment
+        implements SelectedContactsListener {
+
+    public interface OnCheckBoxListActionListener {
+        void onStartDisplayingCheckBoxes();
+        void onSelectedContactIdsChanged();
+        void onStopDisplayingCheckBoxes();
+    }
+
+    private static final String EXTRA_KEY_SELECTED_CONTACTS = "selected_contacts";
+
+    private OnCheckBoxListActionListener mCheckBoxListListener;
+
+    public void setCheckBoxListListener(OnCheckBoxListActionListener checkBoxListListener) {
+        mCheckBoxListListener = checkBoxListListener;
+    }
+
+    @Override
+    public void onSelectedContactsChanged() {
+        if (mCheckBoxListListener != null) {
+            mCheckBoxListListener.onSelectedContactIdsChanged();
+        }
+    }
+
+    @Override
+    public void onSelectedContactsChangedViaCheckBox() {
+        if (getAdapter().getSelectedContactIds().size() == 0) {
+            // Last checkbox has been unchecked. So we should stop displaying checkboxes.
+            mCheckBoxListListener.onStopDisplayingCheckBoxes();
+        } else {
+            onSelectedContactsChanged();
+        }
+    }
+
+    @Override
+    public void onActivityCreated(Bundle savedInstanceState) {
+        super.onActivityCreated(savedInstanceState);
+        if (savedInstanceState != null) {
+            final TreeSet<Long> selectedContactIds = (TreeSet<Long>)
+                    savedInstanceState.getSerializable(EXTRA_KEY_SELECTED_CONTACTS);
+            getAdapter().setSelectedContactIds(selectedContactIds);
+            if (mCheckBoxListListener != null) {
+                mCheckBoxListListener.onSelectedContactIdsChanged();
+            }
+        }
+    }
+
+    public TreeSet<Long> getSelectedContactIds() {
+        final MultiSelectEntryContactListAdapter adapter = getAdapter();
+        return adapter.getSelectedContactIds();
+    }
+
+    @Override
+    public MultiSelectEntryContactListAdapter getAdapter() {
+        return (MultiSelectEntryContactListAdapter) super.getAdapter();
+    }
+
+    @Override
+    protected void configureAdapter() {
+        super.configureAdapter();
+        getAdapter().setSelectedContactsListener(this);
+    }
+
+    @Override
+    public void onSaveInstanceState(Bundle outState) {
+        super.onSaveInstanceState(outState);
+        outState.putSerializable(EXTRA_KEY_SELECTED_CONTACTS, getSelectedContactIds());
+    }
+
+    public void displayCheckBoxes(boolean displayCheckBoxes) {
+        getAdapter().setDisplayCheckBoxes(displayCheckBoxes);
+        if (!displayCheckBoxes) {
+            clearCheckBoxes();
+        }
+    }
+
+    public void clearCheckBoxes() {
+        getAdapter().setSelectedContactIds(new TreeSet<Long>());
+    }
+
+    @Override
+    protected boolean onItemLongClick(int position, long id) {
+        final int previouslySelectedCount = getAdapter().getSelectedContactIds().size();
+        final Uri uri = getAdapter().getContactUri(position);
+        if (uri != null && (position > 0 || !getAdapter().hasProfile())) {
+            final String contactId = uri.getLastPathSegment();
+            if (!TextUtils.isEmpty(contactId)) {
+                if (mCheckBoxListListener != null) {
+                    mCheckBoxListListener.onStartDisplayingCheckBoxes();
+                }
+                getAdapter().toggleSelectionOfContactId(Long.valueOf(contactId));
+            }
+        }
+        final int nowSelectedCount = getAdapter().getSelectedContactIds().size();
+        if (mCheckBoxListListener != null
+                && previouslySelectedCount != 0 && nowSelectedCount == 0) {
+            // Last checkbox has been unchecked. So we should stop displaying checkboxes.
+            mCheckBoxListListener.onStopDisplayingCheckBoxes();
+        }
+        return true;
+    }
+
+    @Override
+    protected void onItemClick(int position, long id) {
+        final Uri uri = getAdapter().getContactUri(position);
+        if (uri == null) {
+            return;
+        }
+        if (getAdapter().isDisplayingCheckBoxes()) {
+            final String contactId = uri.getLastPathSegment();
+            if (!TextUtils.isEmpty(contactId)) {
+                getAdapter().toggleSelectionOfContactId(Long.valueOf(contactId));
+            }
+        } else {
+            super.onItemClick(position, id);
+        }
+        if (mCheckBoxListListener != null && getAdapter().getSelectedContactIds().size() == 0) {
+            mCheckBoxListListener.onStopDisplayingCheckBoxes();
+        }
+    }
+
+    @Override
+    protected ContactListAdapter createListAdapter() {
+        DefaultContactListAdapter adapter = new MultiSelectEntryContactListAdapter(getContext());
+        adapter.setSectionHeaderDisplayEnabled(isSectionHeaderDisplayEnabled());
+        adapter.setDisplayPhotos(true);
+        adapter.setPhotoPosition(
+                ContactListItemView.getDefaultPhotoPosition(/* opposite = */ false));
+        return adapter;
+    }
+}
diff --git a/src/com/android/contacts/list/MultiSelectEntryContactListAdapter.java b/src/com/android/contacts/list/MultiSelectEntryContactListAdapter.java
new file mode 100644
index 0000000..7c6f7bc
--- /dev/null
+++ b/src/com/android/contacts/list/MultiSelectEntryContactListAdapter.java
@@ -0,0 +1,147 @@
+/*
+ * 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.list;
+
+import com.android.contacts.common.list.ContactListItemView;
+import com.android.contacts.common.list.DefaultContactListAdapter;
+
+import android.content.Context;
+import android.database.Cursor;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.widget.CheckBox;
+
+import java.util.TreeSet;
+
+/**
+ * An extension of the default contact adapter that adds checkboxes and the ability
+ * to select multiple contacts.
+ */
+public class MultiSelectEntryContactListAdapter extends DefaultContactListAdapter {
+
+    private SelectedContactsListener mSelectedContactsListener;
+    private TreeSet<Long> mSelectedContactIds = new TreeSet<Long>();
+    private boolean mDisplayCheckBoxes;
+
+    public interface SelectedContactsListener {
+        void onSelectedContactsChanged();
+        void onSelectedContactsChangedViaCheckBox();
+    }
+
+    public MultiSelectEntryContactListAdapter(Context context) {
+        super(context);
+    }
+
+    public void setSelectedContactsListener(SelectedContactsListener listener) {
+        mSelectedContactsListener = listener;
+    }
+
+    /**
+     * Returns set of selected contacts.
+     */
+    public TreeSet<Long> getSelectedContactIds() {
+        return mSelectedContactIds;
+    }
+
+    /**
+     * Update set of selected contacts. This changes which checkboxes are set.
+     */
+    public void setSelectedContactIds(TreeSet<Long> selectedContactIds) {
+        this.mSelectedContactIds = selectedContactIds;
+        notifyDataSetChanged();
+        if (mSelectedContactsListener != null) {
+            mSelectedContactsListener.onSelectedContactsChanged();
+        }
+    }
+
+    /**
+     * Shows checkboxes beside contacts if {@param displayCheckBoxes} is {@code TRUE}.
+     * 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) {
+            mSelectedContactsListener.onSelectedContactsChanged();
+        }
+    }
+
+    /**
+     * Checkboxes are being displayed beside contacts.
+     */
+    public boolean isDisplayingCheckBoxes() {
+        return mDisplayCheckBoxes;
+    }
+
+    /**
+     * Toggle the checkbox beside the contact for {@param contactId}.
+     */
+    public void toggleSelectionOfContactId(long contactId) {
+        if (mSelectedContactIds.contains(contactId)) {
+            mSelectedContactIds.remove(contactId);
+        } else {
+            mSelectedContactIds.add(contactId);
+        }
+        notifyDataSetChanged();
+        if (mSelectedContactsListener != null) {
+            mSelectedContactsListener.onSelectedContactsChanged();
+        }
+    }
+
+    @Override
+    protected void bindView(View itemView, int partition, Cursor cursor, int position) {
+        super.bindView(itemView, partition, cursor, position);
+        final ContactListItemView view = (ContactListItemView)itemView;
+        bindCheckBox(view, cursor, position);
+    }
+
+    private void bindCheckBox(ContactListItemView view, Cursor cursor, int position) {
+        // Disable clicking on the first entry when showing check boxes. We do this by
+        // telling the view to handle clicking itself.
+        view.setClickable(position == 0 && hasProfile() && mDisplayCheckBoxes);
+        // Only show checkboxes if mDisplayCheckBoxes is enabled. Also, never show the
+        // checkbox for the Me profile entry.
+        if (position == 0 && hasProfile() || !mDisplayCheckBoxes) {
+            view.hideCheckBox();
+            return;
+        }
+        final CheckBox checkBox = view.getCheckBox();
+        final long contactId = cursor.getLong(ContactQuery.CONTACT_ID);
+        checkBox.setChecked(mSelectedContactIds.contains(contactId));
+        checkBox.setTag(contactId);
+        checkBox.setOnClickListener(mCheckBoxClickListener);
+    }
+
+    private final OnClickListener mCheckBoxClickListener = new OnClickListener() {
+        @Override
+        public void onClick(View v) {
+            final CheckBox checkBox = (CheckBox) v;
+            final Long contactId = (Long) checkBox.getTag();
+            if (checkBox.isChecked()) {
+                mSelectedContactIds.add(contactId);
+            } else {
+                mSelectedContactIds.remove(contactId);
+            }
+            if (mSelectedContactsListener != null) {
+                mSelectedContactsListener.onSelectedContactsChangedViaCheckBox();
+            }
+        }
+    };
+}
diff --git a/src/com/android/contacts/list/OnContactsUnavailableActionListener.java b/src/com/android/contacts/list/OnContactsUnavailableActionListener.java
index e8edea8..cc381e4 100644
--- a/src/com/android/contacts/list/OnContactsUnavailableActionListener.java
+++ b/src/com/android/contacts/list/OnContactsUnavailableActionListener.java
@@ -34,10 +34,4 @@
      * Initiates contact import from a file.
      */
     void onImportContactsFromFileAction();
-
-    /**
-     * Initiates an interaction that frees up some internal storage for the purposes
-     * of a database upgrade.
-     */
-    void onFreeInternalStorageAction();
 }
diff --git a/src/com/android/contacts/list/ProviderStatusWatcher.java b/src/com/android/contacts/list/ProviderStatusWatcher.java
index 3e8d3f5..23ae4d5 100644
--- a/src/com/android/contacts/list/ProviderStatusWatcher.java
+++ b/src/com/android/contacts/list/ProviderStatusWatcher.java
@@ -47,22 +47,8 @@
         public void onProviderStatusChange();
     }
 
-    public static class Status {
-        /** See {@link ProviderStatus#STATUS} */
-        public final int status;
-
-        /** See {@link ProviderStatus#DATA1} */
-        public final String data;
-
-        public Status(int status, String data) {
-            this.status = status;
-            this.data = data;
-        }
-    }
-
     private static final String[] PROJECTION = new String[] {
-        ProviderStatus.STATUS,
-        ProviderStatus.DATA1
+        ProviderStatus.STATUS
     };
 
     /**
@@ -81,8 +67,9 @@
 
     private LoaderTask mLoaderTask;
 
-    /** Last known provider status.  This can be changed on a worker thread. */
-    private Status mProviderStatus;
+    /** Last known provider status.  This can be changed on a worker thread.
+     *  See {@link ProviderStatus#STATUS} */
+    private Integer mProviderStatus;
 
     private final ArrayList<ProviderStatusListener> mListeners = Lists.newArrayList();
 
@@ -185,11 +172,11 @@
      * (If {@link ProviderStatus#STATUS_UPGRADING} is returned, the app (should) shows an according
      * message, like "contacts are being updated".)
      */
-    public Status getProviderStatus() {
+    public int getProviderStatus() {
         waitForLoaded();
 
         if (mProviderStatus == null) {
-            return new Status(ProviderStatus.STATUS_UPGRADING, null);
+            return ProviderStatus.STATUS_UPGRADING;
         }
 
         return mProviderStatus;
@@ -234,8 +221,7 @@
                         if (cursor.moveToFirst()) {
                             // Note here we can't just say "Status", as AsyncTask has the "Status"
                             // enum too.
-                            mProviderStatus = new ProviderStatusWatcher.Status(
-                                    cursor.getInt(0), cursor.getString(1));
+                            mProviderStatus = cursor.getInt(0);
                             return true;
                         }
                     } finally {
@@ -283,22 +269,4 @@
         mHandler.removeCallbacks(mStartLoadingRunnable); // Remove one in the queue, if any.
         mHandler.post(mStartLoadingRunnable);
     }
-
-    /**
-     * Sends a provider status update, which will trigger a retry of database upgrade
-     */
-    public static void retryUpgrade(final Context context) {
-        Log.i(TAG, "retryUpgrade");
-        final AsyncTask<Void, Void, Void> task = new AsyncTask<Void, Void, Void>() {
-            @Override
-            protected Void doInBackground(Void... params) {
-                ContentValues values = new ContentValues();
-                values.put(ProviderStatus.STATUS, ProviderStatus.STATUS_UPGRADING);
-                context.getContentResolver().update(ProviderStatus.CONTENT_URI, values,
-                        null, null);
-                return null;
-            }
-        };
-        task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
-    }
 }
diff --git a/src/com/android/contacts/list/UiIntentActions.java b/src/com/android/contacts/list/UiIntentActions.java
new file mode 100644
index 0000000..5539635
--- /dev/null
+++ b/src/com/android/contacts/list/UiIntentActions.java
@@ -0,0 +1,102 @@
+/*
+ * 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.list;
+
+/**
+ * Intent actions related to the Contacts app UI. In the past we decided to store these in a single
+ * location in order to easily expose them via ContactsContract. We eventually decided
+ * this wasn't useful.
+ */
+public class UiIntentActions {
+    /**
+     * The action for the default contacts list tab.
+     */
+    public static final String LIST_DEFAULT =
+            "com.android.contacts.action.LIST_DEFAULT";
+
+    /**
+     * The action for the contacts list tab.
+     */
+    public static final String LIST_GROUP_ACTION =
+            "com.android.contacts.action.LIST_GROUP";
+
+    /**
+     * When in LIST_GROUP_ACTION mode, this is the group to display.
+     */
+    public static final String GROUP_NAME_EXTRA_KEY = "com.android.contacts.extra.GROUP";
+
+    /**
+     * The action for the all contacts list tab.
+     */
+    public static final String LIST_ALL_CONTACTS_ACTION =
+            "com.android.contacts.action.LIST_ALL_CONTACTS";
+
+    /**
+     * The action for the contacts with phone numbers list tab.
+     */
+    public static final String LIST_CONTACTS_WITH_PHONES_ACTION =
+            "com.android.contacts.action.LIST_CONTACTS_WITH_PHONES";
+
+    /**
+     * The action for the starred contacts list tab.
+     */
+    public static final String LIST_STARRED_ACTION =
+            "com.android.contacts.action.LIST_STARRED";
+
+    /**
+     * The action for the frequent contacts list tab.
+     */
+    public static final String LIST_FREQUENT_ACTION =
+            "com.android.contacts.action.LIST_FREQUENT";
+
+    /**
+     * The action for the "Join Contact" picker.
+     */
+    public static final String PICK_JOIN_CONTACT_ACTION =
+            "com.android.contacts.action.JOIN_CONTACT";
+
+    /**
+     * The action for the "strequent" contacts list tab. It first lists the starred
+     * contacts in alphabetical order and then the frequent contacts in descending
+     * order of the number of times they have been contacted.
+     */
+    public static final String LIST_STREQUENT_ACTION =
+            "com.android.contacts.action.LIST_STREQUENT";
+
+    /**
+     * A key for to be used as an intent extra to set the activity
+     * title to a custom String value.
+     */
+    public static final String TITLE_EXTRA_KEY =
+            "com.android.contacts.extra.TITLE_EXTRA";
+
+    /**
+     * Used as an int extra field in {@link #FILTER_CONTACTS_ACTION}
+     * intents to supply the text on which to filter.
+     */
+    public static final String FILTER_TEXT_EXTRA_KEY =
+            "com.android.contacts.extra.FILTER_TEXT";
+
+    /**
+     * Used with JOIN_CONTACT action to set the target for aggregation. This action type
+     * uses contact ids instead of contact uris for the sake of backwards compatibility.
+     * <p>
+     * Type: LONG
+     */
+    public static final String TARGET_CONTACT_ID_EXTRA_KEY
+            = "com.android.contacts.action.CONTACT_ID";
+}
\ No newline at end of file
diff --git a/src/com/android/contacts/quickcontact/DataAction.java b/src/com/android/contacts/quickcontact/DataAction.java
index a41cf77..5a49c77 100644
--- a/src/com/android/contacts/quickcontact/DataAction.java
+++ b/src/com/android/contacts/quickcontact/DataAction.java
@@ -23,7 +23,6 @@
 import android.content.pm.PackageManager;
 import android.graphics.drawable.Drawable;
 import android.net.Uri;
-import android.net.WebAddress;
 import android.provider.ContactsContract.CommonDataKinds.Im;
 import android.provider.ContactsContract.Data;
 import android.telecom.PhoneAccount;
@@ -43,6 +42,7 @@
 import com.android.contacts.common.model.dataitem.SipAddressDataItem;
 import com.android.contacts.common.model.dataitem.StructuredPostalDataItem;
 import com.android.contacts.common.model.dataitem.WebsiteDataItem;
+import com.android.contacts.quickcontact.WebAddress.ParseException;
 import com.android.contacts.util.PhoneCapabilityTester;
 import com.android.contacts.util.StructuredPostalUtils;
 
@@ -169,8 +169,12 @@
             final WebsiteDataItem website = (WebsiteDataItem) item;
             final String url = website.getUrl();
             if (!TextUtils.isEmpty(url)) {
-                WebAddress webAddress = new WebAddress(url);
-                mIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(webAddress.toString()));
+                try {
+                    final WebAddress webAddress = new WebAddress(url);
+                    mIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(webAddress.toString()));
+                } catch (ParseException e) {
+                    mIntent = null;
+                }
             }
 
         } else if (item instanceof ImDataItem) {
diff --git a/src/com/android/contacts/quickcontact/DirectoryContactUtil.java b/src/com/android/contacts/quickcontact/DirectoryContactUtil.java
index 1571b0a..c4969cc 100644
--- a/src/com/android/contacts/quickcontact/DirectoryContactUtil.java
+++ b/src/com/android/contacts/quickcontact/DirectoryContactUtil.java
@@ -1,15 +1,26 @@
+/*
+ * 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.quickcontact;
 
 import com.android.contacts.ContactSaveService;
 import com.android.contacts.R;
-import com.android.contacts.common.editor.SelectAccountDialogFragment;
-import com.android.contacts.common.model.AccountTypeManager;
 import com.android.contacts.common.model.Contact;
 import com.android.contacts.common.model.account.AccountWithDataSet;
-import com.android.contacts.common.util.AccountsListAdapter.AccountListFilter;
-import com.android.contacts.quickcontact.QuickContactActivity.SelectAccountDialogFragmentListener;
 
-import android.app.FragmentManager;
 import android.content.ContentValues;
 import android.content.Context;
 import android.content.Intent;
@@ -17,7 +28,6 @@
 import android.widget.Toast;
 
 import java.util.ArrayList;
-import java.util.List;
 
 /**
  * Utility class to support adding directory contacts.
diff --git a/src/com/android/contacts/quickcontact/ExpandingEntryCardView.java b/src/com/android/contacts/quickcontact/ExpandingEntryCardView.java
index b912a3d..10b2898 100644
--- a/src/com/android/contacts/quickcontact/ExpandingEntryCardView.java
+++ b/src/com/android/contacts/quickcontact/ExpandingEntryCardView.java
@@ -15,6 +15,9 @@
  */
 package com.android.contacts.quickcontact;
 
+import android.animation.Animator;
+import android.animation.Animator.AnimatorListener;
+import android.animation.AnimatorSet;
 import android.animation.ObjectAnimator;
 import android.content.Context;
 import android.content.Intent;
@@ -26,7 +29,6 @@
 import android.text.Spannable;
 import android.text.TextUtils;
 import android.transition.ChangeBounds;
-import android.transition.ChangeScroll;
 import android.transition.Fade;
 import android.transition.Transition;
 import android.transition.Transition.TransitionListener;
@@ -34,6 +36,7 @@
 import android.transition.TransitionSet;
 import android.util.AttributeSet;
 import android.util.Log;
+import android.util.Property;
 import android.view.ContextMenu.ContextMenuInfo;
 import android.view.LayoutInflater;
 import android.view.MotionEvent;
@@ -42,6 +45,7 @@
 import android.view.ViewGroup;
 import android.widget.ImageView;
 import android.widget.LinearLayout;
+import android.widget.LinearLayout.LayoutParams;
 import android.widget.RelativeLayout;
 import android.widget.TextView;
 
@@ -57,11 +61,28 @@
 
     private static final String TAG = "ExpandingEntryCardView";
     private static final int DURATION_EXPAND_ANIMATION_FADE_IN = 200;
+    private static final int DURATION_COLLAPSE_ANIMATION_FADE_OUT = 75;
     private static final int DELAY_EXPAND_ANIMATION_FADE_IN = 100;
 
     public static final int DURATION_EXPAND_ANIMATION_CHANGE_BOUNDS = 300;
     public static final int DURATION_COLLAPSE_ANIMATION_CHANGE_BOUNDS = 300;
 
+    private static final Property<View, Integer> VIEW_LAYOUT_HEIGHT_PROPERTY =
+            new Property<View, Integer>(Integer.class, "height") {
+                @Override
+                public void set(View view, Integer height) {
+                    LinearLayout.LayoutParams params = (LinearLayout.LayoutParams)
+                            view.getLayoutParams();
+                    params.height = height;
+                    view.setLayoutParams(params);
+                }
+
+                @Override
+                public Integer get(View view) {
+                    return view.getLayoutParams().height;
+                }
+            };
+
     /**
      * Entry data.
      */
@@ -194,7 +215,8 @@
 
     public interface ExpandingEntryCardViewListener {
         void onCollapse(int heightDelta);
-        void onExpand(int heightDelta);
+        void onExpand();
+        void onExpandDone();
     }
 
     private View mExpandCollapseButton;
@@ -219,12 +241,18 @@
     private final ImageView mExpandCollapseArrow;
     private int mThemeColor;
     private ColorFilter mThemeColorFilter;
+    /**
+     * Whether to prioritize the first entry type. If prioritized, we should show at least two
+     * of this entry type.
+     */
+    private boolean mShowFirstEntryTypeTwice;
     private boolean mIsAlwaysExpanded;
     /** The ViewGroup to run the expand/collapse animation on */
     private ViewGroup mAnimationViewGroup;
     private LinearLayout mBadgeContainer;
     private final List<ImageView> mBadges;
     private final List<Integer> mBadgeIds;
+    private final int mDividerLineHeightPixels;
     /**
      * List to hold the separators. This saves us from reconstructing every expand/collapse and
      * provides a smoother animation.
@@ -262,11 +290,20 @@
         mExpandCollapseArrow = (ImageView) mExpandCollapseButton.findViewById(R.id.arrow);
         mExpandCollapseButton.setOnClickListener(mExpandCollapseButtonListener);
         mBadgeContainer = (LinearLayout) mExpandCollapseButton.findViewById(R.id.badge_container);
+        mDividerLineHeightPixels = getResources()
+                .getDimensionPixelSize(R.dimen.divider_line_height);
 
         mBadges = new ArrayList<ImageView>();
         mBadgeIds = new ArrayList<Integer>();
     }
 
+    public void initialize(List<List<Entry>> entries, int numInitialVisibleEntries,
+            boolean isExpanded, boolean isAlwaysExpanded, ExpandingEntryCardViewListener listener,
+            ViewGroup animationViewGroup) {
+        initialize(entries, numInitialVisibleEntries, isExpanded, isAlwaysExpanded,
+                listener, animationViewGroup, /* showFirstEntryTypeTwice = */ false);
+    }
+
     /**
      * Sets the Entry list to display.
      *
@@ -274,7 +311,8 @@
      */
     public void initialize(List<List<Entry>> entries, int numInitialVisibleEntries,
             boolean isExpanded, boolean isAlwaysExpanded,
-            ExpandingEntryCardViewListener listener, ViewGroup animationViewGroup) {
+            ExpandingEntryCardViewListener listener, ViewGroup animationViewGroup,
+            boolean showFirstEntryTypeTwice) {
         LayoutInflater layoutInflater = LayoutInflater.from(getContext());
         mIsExpanded = isExpanded;
         mIsAlwaysExpanded = isAlwaysExpanded;
@@ -284,6 +322,7 @@
         mEntries = entries;
         mNumEntries = 0;
         mAllEntriesInflated = false;
+        mShowFirstEntryTypeTwice = showFirstEntryTypeTwice;
         for (List<Entry> entryList : mEntries) {
             mNumEntries += entryList.size();
             mEntryViews.add(new ArrayList<View>());
@@ -341,10 +380,34 @@
         mOnCreateContextMenuListener = listener;
     }
 
+    private List<View> calculateEntriesToRemoveDuringCollapse() {
+        final List<View> viewsToRemove = getViewsToDisplay(true);
+        final List<View> viewsCollapsed = getViewsToDisplay(false);
+        viewsToRemove.removeAll(viewsCollapsed);
+        return viewsToRemove;
+    }
+
     private void insertEntriesIntoViewGroup() {
         mEntriesViewGroup.removeAllViews();
 
-        if (mIsExpanded) {
+        for (View view : getViewsToDisplay(mIsExpanded)) {
+            mEntriesViewGroup.addView(view);
+        }
+
+        removeView(mExpandCollapseButton);
+        if (mCollapsedEntriesCount < mNumEntries
+                && mExpandCollapseButton.getParent() == null && !mIsAlwaysExpanded) {
+            mContainer.addView(mExpandCollapseButton, -1);
+        }
+    }
+
+    /**
+     * Returns the list of views that should be displayed. This changes depending on whether
+     * the card is expanded or collapsed.
+     */
+    private List<View> getViewsToDisplay(boolean isExpanded) {
+        final List<View> viewsToDisplay = new ArrayList<View>();
+        if (isExpanded) {
             for (int i = 0; i < mEntryViews.size(); i++) {
                 List<View> viewList = mEntryViews.get(i);
                 if (i > 0) {
@@ -355,10 +418,10 @@
                     } else {
                         separator = mSeparators.get(i - 1);
                     }
-                    mEntriesViewGroup.addView(separator);
+                    viewsToDisplay.add(separator);
                 }
                 for (View view : viewList) {
-                    addEntry(view);
+                    viewsToDisplay.add(view);
                 }
             }
         } else {
@@ -378,33 +441,40 @@
                     } else {
                         separator = mSeparators.get(i - 1);
                     }
-                    mEntriesViewGroup.addView(separator);
+                    viewsToDisplay.add(separator);
                 }
-                addEntry(entryViewList.get(0));
+                viewsToDisplay.add(entryViewList.get(0));
                 numInViewGroup++;
+
+                int indexInEntryViewList = 1;
+                if (mShowFirstEntryTypeTwice && i == 0 && entryViewList.size() > 1) {
+                    viewsToDisplay.add(entryViewList.get(1));
+                    numInViewGroup++;
+                    extraEntries--;
+                    indexInEntryViewList++;
+                }
+
                 // Insert entries in this list to hit mCollapsedEntriesCount.
-                for (int j = 1;
+                for (int j = indexInEntryViewList;
                         j < entryViewList.size() && numInViewGroup < mCollapsedEntriesCount &&
                         extraEntries > 0;
                         j++) {
-                    addEntry(entryViewList.get(j));
+                    viewsToDisplay.add(entryViewList.get(j));
                     numInViewGroup++;
                     extraEntries--;
                 }
             }
         }
 
-        removeView(mExpandCollapseButton);
-        if (mCollapsedEntriesCount < mNumEntries
-                && mExpandCollapseButton.getParent() == null && !mIsAlwaysExpanded) {
-            mContainer.addView(mExpandCollapseButton, -1);
-        }
+        formatEntryIfFirst(viewsToDisplay);
+        return viewsToDisplay;
     }
 
-    private void addEntry(View entry) {
+    private void formatEntryIfFirst(List<View> entriesViewGroup) {
         // If no title and the first entry in the group, add extra padding
         if (TextUtils.isEmpty(mTitleTextView.getText()) &&
-                mEntriesViewGroup.getChildCount() == 0) {
+                entriesViewGroup.size() > 0) {
+            final View entry = entriesViewGroup.get(0);
             entry.setPadding(entry.getPaddingLeft(),
                     getResources().getDimensionPixelSize(
                             R.dimen.expanding_entry_card_item_padding_top) +
@@ -413,7 +483,6 @@
                     entry.getPaddingRight(),
                     entry.getPaddingBottom());
         }
-        mEntriesViewGroup.addView(entry);
     }
 
     private View generateSeparator(View entry) {
@@ -423,8 +492,7 @@
         separator.setBackgroundColor(res.getColor(
                 R.color.divider_line_color_light));
         LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
-                ViewGroup.LayoutParams.MATCH_PARENT,
-                res.getDimensionPixelSize(R.dimen.divider_line_height));
+                ViewGroup.LayoutParams.MATCH_PARENT, mDividerLineHeightPixels);
         // The separator is aligned with the text in the entry. This is offset by a default
         // margin. If there is an icon present, the icon's width and margin are added
         int marginStart = res.getDimensionPixelSize(
@@ -478,9 +546,20 @@
                 entryViewList.add(createEntryView(layoutInflater, entryList.get(0),
                         /* showIcon = */ View.VISIBLE));
                 numInflated++;
+
+                int indexInEntryViewList = 1;
+                if (mShowFirstEntryTypeTwice && i == 0 && entryList.size() > 1) {
+                    entryViewList.add(createEntryView(layoutInflater, entryList.get(1),
+                        /* showIcon = */ View.INVISIBLE));
+                    numInflated++;
+                    extraEntries--;
+                    indexInEntryViewList++;
+                }
+
                 // Inflate entries in this list to hit mCollapsedEntriesCount.
-                for (int j = 1; j < entryList.size() && numInflated < mCollapsedEntriesCount &&
-                        extraEntries > 0; j++) {
+                for (int j = indexInEntryViewList; j < entryList.size()
+                        && numInflated < mCollapsedEntriesCount
+                        && extraEntries > 0; j++) {
                     entryViewList.add(createEntryView(layoutInflater, entryList.get(j),
                             /* showIcon = */ View.INVISIBLE));
                     numInflated++;
@@ -718,9 +797,14 @@
         if (mIsExpanded) {
             mBadgeContainer.removeAllViews();
         } else {
+            int numberOfMimeTypesShown = mCollapsedEntriesCount;
+            if (mShowFirstEntryTypeTwice && mEntries.size() > 0
+                    && mEntries.get(0).size() > 1) {
+                numberOfMimeTypesShown--;
+            }
             // Inflate badges if not yet created
-            if (mBadges.size() < mEntries.size() - mCollapsedEntriesCount) {
-                for (int i = mCollapsedEntriesCount; i < mEntries.size(); i++) {
+            if (mBadges.size() < mEntries.size() - numberOfMimeTypesShown) {
+                for (int i = numberOfMimeTypesShown; i < mEntries.size(); i++) {
                     Drawable badgeDrawable = mEntries.get(i).get(0).getIcon();
                     int badgeResourceId = mEntries.get(i).get(0).getIconResourceId();
                     // Do not add the same badge twice
@@ -770,12 +854,12 @@
         transitionSet.addListener(new TransitionListener() {
             @Override
             public void onTransitionStart(Transition transition) {
-                // The listener is used to turn off suppressing, the proper delta is not necessary
-                mListener.onExpand(0);
+                mListener.onExpand();
             }
 
             @Override
             public void onTransitionEnd(Transition transition) {
+                mListener.onExpandDone();
             }
 
             @Override
@@ -802,57 +886,62 @@
     }
 
     private void collapse() {
-        final int startingHeight = mEntriesViewGroup.getMeasuredHeight();
-        mIsExpanded = false;
-        updateExpandCollapseButton(getExpandButtonText(),
-                DURATION_COLLAPSE_ANIMATION_CHANGE_BOUNDS);
+        final List<View> views = calculateEntriesToRemoveDuringCollapse();
 
-        final ChangeBounds boundsTransition = new ChangeBounds();
-        boundsTransition.setDuration(DURATION_COLLAPSE_ANIMATION_CHANGE_BOUNDS);
-
-        final ChangeScroll scrollTransition = new ChangeScroll();
-        scrollTransition.setDuration(DURATION_COLLAPSE_ANIMATION_CHANGE_BOUNDS);
-
-        TransitionSet transitionSet = new TransitionSet();
-        transitionSet.addTransition(boundsTransition);
-        transitionSet.addTransition(scrollTransition);
-
-        transitionSet.excludeTarget(R.id.text, /* exclude = */ true);
-
-        final ViewGroup transitionViewContainer = mAnimationViewGroup == null ?
-                this : mAnimationViewGroup;
-
-        boundsTransition.addListener(new TransitionListener() {
+        // This animation requires layout changes, unlike the expand() animation: the action bar
+        // might get scrolled open in order to fill empty space. As a result, we can't use
+        // ChangeBounds here. Instead manually animate view height and alpha. This isn't as
+        // efficient as the bounds and translation changes performed by ChangeBounds. Nonetheless, a
+        // reasonable frame-rate is achieved collapsing a dozen elements on a user Svelte N4. So the
+        // performance hit doesn't justify writing a less maintainable animation.
+        final AnimatorSet set = new AnimatorSet();
+        final List<Animator> animators = new ArrayList<Animator>(views.size());
+        int totalSizeChange = 0;
+        for (View viewToRemove : views) {
+            final ObjectAnimator animator = ObjectAnimator.ofObject(viewToRemove,
+                    VIEW_LAYOUT_HEIGHT_PROPERTY, null, viewToRemove.getHeight(), 0);
+            totalSizeChange += viewToRemove.getHeight();
+            animator.setDuration(DURATION_COLLAPSE_ANIMATION_CHANGE_BOUNDS);
+            animators.add(animator);
+            viewToRemove.animate().alpha(0).setDuration(DURATION_COLLAPSE_ANIMATION_FADE_OUT);
+        }
+        set.playTogether(animators);
+        set.start();
+        set.addListener(new AnimatorListener() {
             @Override
-            public void onTransitionStart(Transition transition) {
-                /*
-                 * onTransitionStart is called after the view hierarchy has been changed but before
-                 * the animation begins.
-                 */
-                int finishingHeight = mEntriesViewGroup.getMeasuredHeight();
-                mListener.onCollapse(startingHeight - finishingHeight);
+            public void onAnimationStart(Animator animation) {
             }
 
             @Override
-            public void onTransitionEnd(Transition transition) {
+            public void onAnimationEnd(Animator animation) {
+                // Now that the views have been animated away, actually remove them from the view
+                // hierarchy. Reset their appearance so that they look appropriate when they
+                // get added back later.
+                insertEntriesIntoViewGroup();
+                for (View view : views) {
+                    if (view instanceof EntryView) {
+                        VIEW_LAYOUT_HEIGHT_PROPERTY.set(view, LayoutParams.WRAP_CONTENT);
+                    } else {
+                        VIEW_LAYOUT_HEIGHT_PROPERTY.set(view, mDividerLineHeightPixels);
+                    }
+                    view.animate().cancel();
+                    view.setAlpha(1);
+                }
             }
 
             @Override
-            public void onTransitionCancel(Transition transition) {
+            public void onAnimationCancel(Animator animation) {
             }
 
             @Override
-            public void onTransitionPause(Transition transition) {
-            }
-
-            @Override
-            public void onTransitionResume(Transition transition) {
+            public void onAnimationRepeat(Animator animation) {
             }
         });
 
-        TransitionManager.beginDelayedTransition(transitionViewContainer, transitionSet);
-
-        insertEntriesIntoViewGroup();
+        mListener.onCollapse(totalSizeChange);
+        mIsExpanded = false;
+        updateExpandCollapseButton(getExpandButtonText(),
+                DURATION_COLLAPSE_ANIMATION_CHANGE_BOUNDS);
     }
 
     /**
@@ -1049,7 +1138,7 @@
         }
 
         private boolean hitThirdIcon(MotionEvent event) {
-            if (mEntry.isLayoutRtl()) {
+            if (mEntry.getLayoutDirection() == View.LAYOUT_DIRECTION_RTL) {
                 return mThirdIcon.getVisibility() == View.VISIBLE &&
                         event.getX() < mThirdIcon.getRight();
             } else {
@@ -1065,7 +1154,7 @@
             // LayoutParams used to add the start margin to the touch area
             final RelativeLayout.LayoutParams alternateIconParams =
                     (RelativeLayout.LayoutParams) mAlternateIcon.getLayoutParams();
-            if (mEntry.isLayoutRtl()) {
+            if (mEntry.getLayoutDirection() == View.LAYOUT_DIRECTION_RTL) {
                 return mAlternateIcon.getVisibility() == View.VISIBLE &&
                         event.getX() < mAlternateIcon.getRight() + alternateIconParams.rightMargin;
             } else {
diff --git a/src/com/android/contacts/quickcontact/InvisibleContactUtil.java b/src/com/android/contacts/quickcontact/InvisibleContactUtil.java
index 3609fbc..de70424 100644
--- a/src/com/android/contacts/quickcontact/InvisibleContactUtil.java
+++ b/src/com/android/contacts/quickcontact/InvisibleContactUtil.java
@@ -94,7 +94,7 @@
         final Intent intent = ContactSaveService.createSaveContactIntent(
                 context,
                 contactDeltaList, "", 0, false, QuickContactActivity.class,
-                Intent.ACTION_VIEW, null);
+                Intent.ACTION_VIEW, null, /* backPressed =*/ false);
         context.startService(intent);
     }
 
diff --git a/src/com/android/contacts/quickcontact/QuickContactActivity.java b/src/com/android/contacts/quickcontact/QuickContactActivity.java
index c9e093a..405d8f0 100644
--- a/src/com/android/contacts/quickcontact/QuickContactActivity.java
+++ b/src/com/android/contacts/quickcontact/QuickContactActivity.java
@@ -40,9 +40,7 @@
 import android.graphics.drawable.BitmapDrawable;
 import android.graphics.drawable.ColorDrawable;
 import android.graphics.drawable.Drawable;
-import android.net.ParseException;
 import android.net.Uri;
-import android.net.WebAddress;
 import android.os.AsyncTask;
 import android.os.Bundle;
 import android.os.Trace;
@@ -98,6 +96,7 @@
 import com.android.contacts.common.ClipboardUtils;
 import com.android.contacts.common.Collapser;
 import com.android.contacts.common.ContactsUtils;
+import com.android.contacts.common.activity.RequestPermissionsActivity;
 import com.android.contacts.common.editor.SelectAccountDialogFragment;
 import com.android.contacts.common.interactions.TouchPointManager;
 import com.android.contacts.common.lettertiles.LetterTileDrawable;
@@ -123,12 +122,14 @@
 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.util.ImplicitIntentsUtil;
 import com.android.contacts.common.util.DateUtils;
 import com.android.contacts.common.util.MaterialColorMapUtils;
 import com.android.contacts.common.util.MaterialColorMapUtils.MaterialPalette;
 import com.android.contacts.common.util.ViewUtil;
 import com.android.contacts.detail.ContactDisplayUtils;
 import com.android.contacts.editor.ContactEditorFragment;
+import com.android.contacts.editor.EditorIntents;
 import com.android.contacts.interactions.CalendarInteractionsLoader;
 import com.android.contacts.interactions.CallLogInteractionsLoader;
 import com.android.contacts.interactions.ContactDeletionInteraction;
@@ -138,6 +139,7 @@
 import com.android.contacts.quickcontact.ExpandingEntryCardView.EntryContextMenuInfo;
 import com.android.contacts.quickcontact.ExpandingEntryCardView.EntryTag;
 import com.android.contacts.quickcontact.ExpandingEntryCardView.ExpandingEntryCardViewListener;
+import com.android.contacts.quickcontact.WebAddress.ParseException;
 import com.android.contacts.util.ImageViewDrawableSetter;
 import com.android.contacts.util.PhoneCapabilityTester;
 import com.android.contacts.util.SchedulingUtils;
@@ -145,6 +147,8 @@
 import com.android.contacts.widget.MultiShrinkScroller;
 import com.android.contacts.widget.MultiShrinkScroller.MultiShrinkScrollerListener;
 import com.android.contacts.widget.QuickContactImageView;
+import com.android.contactsbind.HelpUtils;
+
 import com.google.common.collect.Lists;
 
 import java.lang.SecurityException;
@@ -208,6 +212,7 @@
     private Uri mLookupUri;
     private String[] mExcludeMimes;
     private int mExtraMode;
+    private String mExtraPrioritizedMimeType;
     private int mStatusBarColor;
     private boolean mHasAlreadyBeenOpened;
     private boolean mOnlyOnePhoneNumber;
@@ -247,6 +252,7 @@
     private Contact mContactData;
     private ContactLoader mContactLoader;
     private PorterDuffColorFilter mColorFilter;
+    private int mColorFilterColor;
 
     private final ImageViewDrawableSetter mPhotoSetter = new ImageViewDrawableSetter();
 
@@ -335,6 +341,31 @@
                 return;
             }
 
+            // Pass the touch point through the intent for use in the InCallUI
+            if (Intent.ACTION_CALL.equals(intent.getAction())) {
+                if (TouchPointManager.getInstance().hasValidPoint()) {
+                    Bundle extras = new Bundle();
+                    extras.putParcelable(TouchPointManager.TOUCH_POINT,
+                            TouchPointManager.getInstance().getPoint());
+                    intent.putExtra(TelecomManager.EXTRA_OUTGOING_CALL_EXTRAS, extras);
+                }
+            }
+
+            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+
+            mHasIntentLaunched = true;
+            try {
+                startActivity(intent);
+            } catch (SecurityException ex) {
+                Toast.makeText(QuickContactActivity.this, R.string.missing_app,
+                        Toast.LENGTH_SHORT).show();
+                Log.e(TAG, "QuickContacts does not have permission to launch "
+                        + intent);
+            } catch (ActivityNotFoundException ex) {
+                Toast.makeText(QuickContactActivity.this, R.string.missing_app,
+                        Toast.LENGTH_SHORT).show();
+            }
+
             // Default to USAGE_TYPE_CALL. Usage is summed among all types for sorting each data id
             // so the exact usage type is not necessary in all cases
             String usageType = DataUsageFeedback.USAGE_TYPE_CALL;
@@ -375,7 +406,7 @@
 
             mHasIntentLaunched = true;
             try {
-                startActivity(intent);
+                ImplicitIntentsUtil.startActivityInAppIfPossible(QuickContactActivity.this, intent);
             } catch (SecurityException ex) {
                 Toast.makeText(QuickContactActivity.this, R.string.missing_app,
                         Toast.LENGTH_SHORT).show();
@@ -396,8 +427,13 @@
         }
 
         @Override
-        public void onExpand(int heightDelta) {
-            mScroller.prepareForExpandingScrollChild();
+        public void onExpand() {
+            mScroller.setDisableTouchesForSuppressLayout(/* areTouchesDisabled = */ true);
+        }
+
+        @Override
+        public void onExpandDone() {
+            mScroller.setDisableTouchesForSuppressLayout(/* areTouchesDisabled = */ false);
         }
     };
 
@@ -580,16 +616,31 @@
 
     /**
      * Sorts among different mimetypes based off:
-     * 1. Times used
-     * 2. Last time used
-     * 3. Statically defined
+     * 1. Whether one of the mimetypes is the prioritized mimetype
+     * 2. Number of times used
+     * 3. Last time used
+     * 4. Statically defined
      */
     private final Comparator<List<DataItem>> mAmongstMimeTypeDataItemComparator =
             new Comparator<List<DataItem>> () {
         @Override
         public int compare(List<DataItem> lhsList, List<DataItem> rhsList) {
-            DataItem lhs = lhsList.get(0);
-            DataItem rhs = rhsList.get(0);
+            final DataItem lhs = lhsList.get(0);
+            final DataItem rhs = rhsList.get(0);
+            final String lhsMimeType = lhs.getMimeType();
+            final String rhsMimeType = rhs.getMimeType();
+
+            // 1. Whether one of the mimetypes is the prioritized mimetype
+            if (!TextUtils.isEmpty(mExtraPrioritizedMimeType) && !lhsMimeType.equals(rhsMimeType)) {
+                if (rhsMimeType.equals(mExtraPrioritizedMimeType)) {
+                    return 1;
+                }
+                if (lhsMimeType.equals(mExtraPrioritizedMimeType)) {
+                    return -1;
+                }
+            }
+
+            // 2. Number of times used
             final int lhsTimesUsed = lhs.getTimesUsed() == null ? 0 : lhs.getTimesUsed();
             final int rhsTimesUsed = rhs.getTimesUsed() == null ? 0 : rhs.getTimesUsed();
             final int timesUsedDifference = rhsTimesUsed - lhsTimesUsed;
@@ -597,6 +648,7 @@
                 return timesUsedDifference;
             }
 
+            // 3. Last time used
             final long lhsLastTimeUsed =
                     lhs.getLastTimeUsed() == null ? 0 : lhs.getLastTimeUsed();
             final long rhsLastTimeUsed =
@@ -608,14 +660,14 @@
                 return -1;
             }
 
-            // Times used and last time used are the same. Resort to statically defined.
-            final String lhsMimeType = lhs.getMimeType();
-            final String rhsMimeType = rhs.getMimeType();
-            for (String mimeType : LEADING_MIMETYPES) {
-                if (lhsMimeType.equals(mimeType)) {
-                    return -1;
-                } else if (rhsMimeType.equals(mimeType)) {
-                    return 1;
+            // 4. Resort to a statically defined mimetype order.
+            if (!lhsMimeType.equals(rhsMimeType)) {
+                for (String mimeType : LEADING_MIMETYPES) {
+                    if (lhsMimeType.equals(mimeType)) {
+                        return -1;
+                    } else if (rhsMimeType.equals(mimeType)) {
+                        return 1;
+                    }
                 }
             }
             return 0;
@@ -635,6 +687,10 @@
         Trace.beginSection("onCreate()");
         super.onCreate(savedInstanceState);
 
+        if (RequestPermissionsActivity.startPermissionActivity(this)) {
+            return;
+        }
+
         getWindow().setStatusBarColor(Color.TRANSPARENT);
 
         processIntent(getIntent());
@@ -781,7 +837,7 @@
     public void onSaveInstanceState(Bundle savedInstanceState) {
         super.onSaveInstanceState(savedInstanceState);
         if (mColorFilter != null) {
-            savedInstanceState.putInt(KEY_THEME_COLOR, mColorFilter.getColor());
+            savedInstanceState.putInt(KEY_THEME_COLOR, mColorFilterColor);
         }
     }
 
@@ -798,8 +854,8 @@
             lookupUri = RawContacts.getContactLookupUri(getContentResolver(),
                     ContentUris.withAppendedId(RawContacts.CONTENT_URI, rawContactId));
         }
-        mExtraMode = getIntent().getIntExtra(QuickContact.EXTRA_MODE,
-                QuickContact.MODE_LARGE);
+        mExtraMode = getIntent().getIntExtra(QuickContact.EXTRA_MODE, QuickContact.MODE_LARGE);
+        mExtraPrioritizedMimeType = getIntent().getStringExtra(QuickContact.EXTRA_PRIORITIZED_MIMETYPE);
         final Uri oldLookupUri = mLookupUri;
 
         if (lookupUri == null) {
@@ -1026,12 +1082,17 @@
         final String customAboutCardName = cp2DataCardModel.customAboutCardName;
 
         if (contactCardEntries.size() > 0) {
+            final boolean firstEntriesArePrioritizedMimeType =
+                    !TextUtils.isEmpty(mExtraPrioritizedMimeType) &&
+                    mCachedCp2DataCardModel.dataItemsMap.containsKey(mExtraPrioritizedMimeType) &&
+                    mCachedCp2DataCardModel.dataItemsMap.get(mExtraPrioritizedMimeType).size() != 0;
             mContactCard.initialize(contactCardEntries,
                     /* numInitialVisibleEntries = */ MIN_NUM_CONTACT_ENTRIES_SHOWN,
                     /* isExpanded = */ mContactCard.isExpanded(),
                     /* isAlwaysExpanded = */ false,
                     mExpandingEntryCardViewListener,
-                    mScroller);
+                    mScroller,
+                    firstEntriesArePrioritizedMimeType);
             mContactCard.setVisibility(View.VISIBLE);
         } else {
             mContactCard.setVisibility(View.GONE);
@@ -1360,15 +1421,16 @@
             entryContextMenuInfo = new EntryContextMenuInfo(subHeader, header,
                     dataItem.getMimeType(), dataItem.getId(), dataItem.isSuperPrimary());
             try {
-                final WebAddress webAddress = new WebAddress(website.buildDataString(context,
-                        kind));
+                final WebAddress webAddress = new WebAddress(website.buildDataStringForDisplay
+                        (context, kind));
                 intent = new Intent(Intent.ACTION_VIEW, Uri.parse(webAddress.toString()));
             } catch (final ParseException e) {
-                Log.e(TAG, "Couldn't parse website: " + website.buildDataString(context, kind));
+                Log.e(TAG, "Couldn't parse website: " + website.buildDataStringForDisplay(
+                        context, kind));
             }
         } else if (dataItem instanceof EventDataItem) {
             final EventDataItem event = (EventDataItem) dataItem;
-            final String dataString = event.buildDataString(context, kind);
+            final String dataString = event.buildDataStringForDisplay(context, kind);
             final Calendar cal = DateUtils.parseDate(dataString, false);
             if (cal != null) {
                 final Date nextAnniversary =
@@ -1388,7 +1450,7 @@
                     dataItem.getMimeType(), dataItem.getId(), dataItem.isSuperPrimary());
         } else if (dataItem instanceof RelationDataItem) {
             final RelationDataItem relation = (RelationDataItem) dataItem;
-            final String dataString = relation.buildDataString(context, kind);
+            final String dataString = relation.buildDataStringForDisplay(context, kind);
             if (!TextUtils.isEmpty(dataString)) {
                 intent = new Intent(Intent.ACTION_SEARCH);
                 intent.putExtra(SearchManager.QUERY, dataString);
@@ -1407,7 +1469,7 @@
             final PhoneDataItem phone = (PhoneDataItem) dataItem;
             if (!TextUtils.isEmpty(phone.getNumber())) {
                 primaryContentDescription.append(res.getString(R.string.call_other)).append(" ");
-                header = sBidiFormatter.unicodeWrap(phone.buildDataString(context, kind),
+                header = sBidiFormatter.unicodeWrap(phone.buildDataStringForDisplay(context, kind),
                         TextDirectionHeuristics.LTR);
                 entryContextMenuInfo = new EntryContextMenuInfo(header,
                         res.getString(R.string.phoneLabelsGroup), dataItem.getMimeType(),
@@ -1506,12 +1568,17 @@
                 iconResourceId = R.drawable.ic_dialer_sip_black_24dp;
             }
         } else if (dataItem instanceof StructuredNameDataItem) {
-            final String givenName = ((StructuredNameDataItem) dataItem).getGivenName();
-            if (!TextUtils.isEmpty(givenName)) {
-                aboutCardName.value = res.getString(R.string.about_card_title) +
-                        " " + givenName;
-            } else {
-                aboutCardName.value = res.getString(R.string.about_card_title);
+            // If the name is already set and this is not the super primary value then leave the
+            // current value. This way we show the super primary value when we are able to.
+            if (dataItem.isSuperPrimary() || aboutCardName.value == null
+                    || aboutCardName.value.isEmpty()) {
+                final String givenName = ((StructuredNameDataItem) dataItem).getGivenName();
+                if (!TextUtils.isEmpty(givenName)) {
+                    aboutCardName.value = res.getString(R.string.about_card_title) +
+                            " " + givenName;
+                } else {
+                    aboutCardName.value = res.getString(R.string.about_card_title);
+                }
             }
         } else {
             // Custom DataItem
@@ -1830,16 +1897,16 @@
 
     private void setThemeColor(MaterialPalette palette) {
         // If the color is invalid, use the predefined default
-        final int primaryColor = palette.mPrimaryColor;
-        mScroller.setHeaderTintColor(primaryColor);
+        mColorFilterColor = palette.mPrimaryColor;
+        mScroller.setHeaderTintColor(mColorFilterColor);
         mStatusBarColor = palette.mSecondaryColor;
         updateStatusBarColor();
 
         mColorFilter =
-                new PorterDuffColorFilter(primaryColor, PorterDuff.Mode.SRC_ATOP);
-        mContactCard.setColorAndFilter(primaryColor, mColorFilter);
-        mRecentCard.setColorAndFilter(primaryColor, mColorFilter);
-        mAboutCard.setColorAndFilter(primaryColor, mColorFilter);
+                new PorterDuffColorFilter(mColorFilterColor, PorterDuff.Mode.SRC_ATOP);
+        mContactCard.setColorAndFilter(mColorFilterColor, mColorFilter);
+        mRecentCard.setColorAndFilter(mColorFilterColor, mColorFilter);
+        mAboutCard.setColorAndFilter(mColorFilterColor, mColorFilter);
     }
 
     private void updateStatusBarColor() {
@@ -2139,9 +2206,11 @@
     }
 
     private Intent getEditContactIntent() {
-        final Intent intent = new Intent(Intent.ACTION_EDIT, mContactData.getLookupUri());
-        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
-        return intent;
+        return EditorIntents.createCompactEditContactIntent(
+                mContactData.getLookupUri(),
+                mHasComputedThemeColor
+                        ? new MaterialPalette(mColorFilterColor, mStatusBarColor) : null,
+                /* updatedPhotos =*/ null);
     }
 
     private void editContact() {
@@ -2182,38 +2251,17 @@
         }
     }
 
-    /**
-     * Calls into the contacts provider to get a pre-authorized version of the given URI.
-     */
-    private Uri getPreAuthorizedUri(Uri uri) {
-        final Bundle uriBundle = new Bundle();
-        uriBundle.putParcelable(ContactsContract.Authorization.KEY_URI_TO_AUTHORIZE, uri);
-        final Bundle authResponse = getContentResolver().call(
-                ContactsContract.AUTHORITY_URI,
-                ContactsContract.Authorization.AUTHORIZATION_METHOD,
-                null,
-                uriBundle);
-        if (authResponse != null) {
-            return (Uri) authResponse.getParcelable(
-                    ContactsContract.Authorization.KEY_AUTHORIZED_URI);
-        } else {
-            return uri;
-        }
-    }
-
     private void shareContact() {
         final String lookupKey = mContactData.getLookupKey();
-        Uri shareUri = Uri.withAppendedPath(Contacts.CONTENT_VCARD_URI, lookupKey);
-        if (mContactData.isUserProfile()) {
-            // User is sharing the profile.  We don't want to force the receiver to have
-            // the highly-privileged READ_PROFILE permission, so we need to request a
-            // pre-authorized URI from the provider.
-            shareUri = getPreAuthorizedUri(shareUri);
-        }
-
+        final Uri shareUri = Uri.withAppendedPath(Contacts.CONTENT_VCARD_URI, lookupKey);
         final Intent intent = new Intent(Intent.ACTION_SEND);
         intent.setType(Contacts.CONTENT_VCARD_TYPE);
         intent.putExtra(Intent.EXTRA_STREAM, shareUri);
+        intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
+
+        // Even though the data doesn't need to be set for ACTION_SEND, it does need
+        // to be set so that FLAG_GRANT_READ_URI_PERMISSION can create a URI permission grant.
+        intent.setData(shareUri);
 
         // Launch chooser to share contact via
         final CharSequence chooseTitle = getText(R.string.share_via);
@@ -2221,7 +2269,7 @@
 
         try {
             mHasIntentLaunched = true;
-            this.startActivity(chooseIntent);
+            ImplicitIntentsUtil.startActivityOutsideApp(this, chooseIntent);
         } catch (final ActivityNotFoundException ex) {
             Toast.makeText(this, R.string.share_error, Toast.LENGTH_SHORT).show();
         }
@@ -2253,7 +2301,8 @@
     }
 
     private boolean isShortcutCreatable() {
-        if (mContactData == null || mContactData.isUserProfile()) {
+        if (mContactData == null || mContactData.isUserProfile() ||
+                mContactData.isDirectoryEntry()) {
             return false;
         }
         final Intent createShortcutIntent = new Intent();
@@ -2301,6 +2350,9 @@
             final MenuItem shortcutMenuItem = menu.findItem(R.id.menu_create_contact_shortcut);
             shortcutMenuItem.setVisible(isShortcutCreatable());
 
+            final MenuItem helpMenu = menu.findItem(R.id.menu_help);
+            helpMenu.setVisible(HelpUtils.isHelpAndFeedbackAvailable());
+
             return true;
         }
         return false;
@@ -2353,10 +2405,10 @@
                     // account.
                     if (mContactData.getDirectoryExportSupport() ==
                             Directory.EXPORT_SUPPORT_SAME_ACCOUNT_ONLY) {
-                        intent.putExtra(Intents.Insert.ACCOUNT,
+                        intent.putExtra(Intents.Insert.EXTRA_ACCOUNT,
                                 new Account(mContactData.getDirectoryAccountName(),
                                         mContactData.getDirectoryAccountType()));
-                        intent.putExtra(Intents.Insert.DATA_SET,
+                        intent.putExtra(Intents.Insert.EXTRA_DATA_SET,
                                 mContactData.getRawContacts().get(0).getDataSet());
                     }
 
@@ -2373,7 +2425,9 @@
                 }
                 return true;
             case R.id.menu_delete:
-                deleteContact();
+                if (isContactEditable()) {
+                    deleteContact();
+                }
                 return true;
             case R.id.menu_share:
                 if (isContactShareable()) {
@@ -2381,7 +2435,12 @@
                 }
                 return true;
             case R.id.menu_create_contact_shortcut:
-                createLauncherShortcutWithContact();
+                if (isShortcutCreatable()) {
+                    createLauncherShortcutWithContact();
+                }
+                return true;
+            case R.id.menu_help:
+                HelpUtils.launchHelpAndFeedbackForContactScreen(this);
                 return true;
             default:
                 return super.onOptionsItemSelected(item);
diff --git a/src/com/android/contacts/quickcontact/QuickContactBroadcastReceiver.java b/src/com/android/contacts/quickcontact/QuickContactBroadcastReceiver.java
index e0850d7..dae10af 100644
--- a/src/com/android/contacts/quickcontact/QuickContactBroadcastReceiver.java
+++ b/src/com/android/contacts/quickcontact/QuickContactBroadcastReceiver.java
@@ -16,6 +16,8 @@
 
 package com.android.contacts.quickcontact;
 
+import com.android.contacts.common.util.ImplicitIntentsUtil;
+
 import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.Intent;
@@ -35,6 +37,6 @@
         newIntent.setSourceBounds(intent.getSourceBounds());
         newIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
         newIntent.setData(dataUri);
-        context.startActivity(newIntent);
+        ImplicitIntentsUtil.startActivityInApp(context, newIntent);
     }
 }
diff --git a/src/com/android/contacts/quickcontact/WebAddress.java b/src/com/android/contacts/quickcontact/WebAddress.java
new file mode 100644
index 0000000..d55a874
--- /dev/null
+++ b/src/com/android/contacts/quickcontact/WebAddress.java
@@ -0,0 +1,147 @@
+/*
+ * 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.quickcontact;
+
+import java.util.Locale;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import static android.util.Patterns.GOOD_IRI_CHAR;
+
+/**
+ * Below is a partial copy of {@link android.net.WebAddress}. The original author doesn't
+ * believe this API is suitable for making public. He recommends we copy it.
+ *
+ * Web Address Parser
+ *
+ * This is called WebAddress, rather than URL or URI, because it
+ * attempts to parse the stuff that a user will actually type into a
+ * browser address widget.
+ *
+ * Unlike java.net.uri, this parser will not choke on URIs missing
+ * schemes.  It will only throw a ParseException if the input is
+ * really hosed.
+ *
+ * If given an https scheme but no port, fills in port
+ *
+ */
+public class WebAddress {
+
+    private String mScheme;
+    private String mHost;
+    private int mPort;
+    private String mPath;
+    private String mAuthInfo;
+
+    static final int MATCH_GROUP_SCHEME = 1;
+    static final int MATCH_GROUP_AUTHORITY = 2;
+    static final int MATCH_GROUP_HOST = 3;
+    static final int MATCH_GROUP_PORT = 4;
+    static final int MATCH_GROUP_PATH = 5;
+
+    static Pattern sAddressPattern = Pattern.compile(
+            /* scheme    */ "(?:(http|https|file)\\:\\/\\/)?" +
+            /* authority */ "(?:([-A-Za-z0-9$_.+!*'(),;?&=]+(?:\\:[-A-Za-z0-9$_.+!*'(),;?&=]+)?)@)?" +
+            /* host      */ "([" + GOOD_IRI_CHAR + "%_-][" + GOOD_IRI_CHAR + "%_\\.-]*|\\[[0-9a-fA-F:\\.]+\\])?" +
+            /* port      */ "(?:\\:([0-9]*))?" +
+            /* path      */ "(\\/?[^#]*)?" +
+            /* anchor    */ ".*", Pattern.CASE_INSENSITIVE);
+
+    /** parses given uriString. */
+    public WebAddress(String address) throws ParseException {
+        if (address == null) {
+            throw new NullPointerException();
+        }
+
+        // android.util.Log.d(LOGTAG, "WebAddress: " + address);
+
+        mScheme = "";
+        mHost = "";
+        mPort = -1;
+        mPath = "/";
+        mAuthInfo = "";
+
+        Matcher m = sAddressPattern.matcher(address);
+        String t;
+        if (m.matches()) {
+            t = m.group(MATCH_GROUP_SCHEME);
+            if (t != null) mScheme = t.toLowerCase(Locale.ROOT);
+            t = m.group(MATCH_GROUP_AUTHORITY);
+            if (t != null) mAuthInfo = t;
+            t = m.group(MATCH_GROUP_HOST);
+            if (t != null) mHost = t;
+            t = m.group(MATCH_GROUP_PORT);
+            if (t != null && t.length() > 0) {
+                // The ':' character is not returned by the regex.
+                try {
+                    mPort = Integer.parseInt(t);
+                } catch (NumberFormatException ex) {
+                    throw new ParseException("Bad port");
+                }
+            }
+            t = m.group(MATCH_GROUP_PATH);
+            if (t != null && t.length() > 0) {
+                /* handle busted myspace frontpage redirect with
+                   missing initial "/" */
+                if (t.charAt(0) == '/') {
+                    mPath = t;
+                } else {
+                    mPath = "/" + t;
+                }
+            }
+
+        } else {
+            // nothing found... outa here
+            throw new ParseException("Bad address");
+        }
+
+        /* Get port from scheme or scheme from port, if necessary and
+           possible */
+        if (mPort == 443 && mScheme.equals("")) {
+            mScheme = "https";
+        } else if (mPort == -1) {
+            if (mScheme.equals("https"))
+                mPort = 443;
+            else
+                mPort = 80; // default
+        }
+        if (mScheme.equals("")) mScheme = "http";
+    }
+
+    @Override
+    public String toString() {
+        String port = "";
+        if ((mPort != 443 && mScheme.equals("https")) ||
+                (mPort != 80 && mScheme.equals("http"))) {
+            port = ":" + Integer.toString(mPort);
+        }
+        String authInfo = "";
+        if (mAuthInfo.length() > 0) {
+            authInfo = mAuthInfo + "@";
+        }
+
+        return mScheme + "://" + authInfo + mHost + port + mPath;
+    }
+
+    public class ParseException extends Exception {
+        public String response;
+
+        ParseException(String response) {
+            this.response = response;
+        }
+    }
+}
diff --git a/src/com/android/contacts/util/AccountPromptUtils.java b/src/com/android/contacts/util/AccountPromptUtils.java
index 979176b..172d274 100644
--- a/src/com/android/contacts/util/AccountPromptUtils.java
+++ b/src/com/android/contacts/util/AccountPromptUtils.java
@@ -107,7 +107,6 @@
             public void run(AccountManagerFuture<Bundle> future) {
                 if (future.isCancelled()) {
                     // The account creation process was canceled
-                    activity.finish();
                     return;
                 }
                 try {
diff --git a/src/com/android/contacts/util/ContactPhotoUtils.java b/src/com/android/contacts/util/ContactPhotoUtils.java
index a86600f..01f8267 100644
--- a/src/com/android/contacts/util/ContactPhotoUtils.java
+++ b/src/com/android/contacts/util/ContactPhotoUtils.java
@@ -148,9 +148,16 @@
      */
     public static boolean savePhotoFromUriToUri(Context context, Uri inputUri, Uri outputUri,
             boolean deleteAfterSave) {
-        try (FileOutputStream outputStream = context.getContentResolver()
-                 .openAssetFileDescriptor(outputUri, "rw").createOutputStream();
-             InputStream inputStream = context.getContentResolver().openInputStream(inputUri)) {
+        if (inputUri == null || outputUri == null) {
+            return false;
+        }
+        FileOutputStream outputStream = null;
+        InputStream inputStream = null;
+        try {
+            outputStream = context.getContentResolver()
+                    .openAssetFileDescriptor(outputUri, "rw").createOutputStream();
+            inputStream = context.getContentResolver().openInputStream(
+                    inputUri);
 
             final byte[] buffer = new byte[16 * 1024];
             int length;
@@ -160,10 +167,12 @@
                 totalLength += length;
             }
             Log.v(TAG, "Wrote " + totalLength + " bytes for photo " + inputUri.toString());
-        } catch (IOException e) {
+        } catch (IOException | NullPointerException e) {
             Log.e(TAG, "Failed to write photo: " + inputUri.toString() + " because: " + e);
             return false;
         } finally {
+            Closeables.closeQuietly(inputStream);
+            Closeables.closeQuietly(outputStream);
             if (deleteAfterSave) {
                 context.getContentResolver().delete(inputUri, null, null);
             }
@@ -171,5 +180,3 @@
         return true;
     }
 }
-
-
diff --git a/src/com/android/contacts/util/PhoneCapabilityTester.java b/src/com/android/contacts/util/PhoneCapabilityTester.java
index b2d10be..a510b76 100644
--- a/src/com/android/contacts/util/PhoneCapabilityTester.java
+++ b/src/com/android/contacts/util/PhoneCapabilityTester.java
@@ -28,7 +28,6 @@
 import android.telephony.TelephonyManager;
 
 import com.android.contacts.common.ContactsUtils;
-import com.android.contacts.R;
 
 import java.util.List;
 
@@ -62,7 +61,8 @@
     }
 
     private static void initialize(Context context) {
-        final TelephonyManager telephonyManager = new TelephonyManager(context);
+        final TelephonyManager telephonyManager
+                = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
         sIsPhone = telephonyManager.isVoiceCapable();
         sIsSipPhone = sIsPhone && SipManager.isVoipSupported(context);
         sIsInitialized = true;
diff --git a/src/com/android/contacts/widget/MultiShrinkScroller.java b/src/com/android/contacts/widget/MultiShrinkScroller.java
index 095198a..7c46a86 100644
--- a/src/com/android/contacts/widget/MultiShrinkScroller.java
+++ b/src/com/android/contacts/widget/MultiShrinkScroller.java
@@ -17,14 +17,12 @@
 import android.graphics.Color;
 import android.graphics.ColorMatrix;
 import android.graphics.ColorMatrixColorFilter;
-import android.graphics.Rect;
 import android.graphics.drawable.GradientDrawable;
-import android.hardware.display.DisplayManagerGlobal;
+import android.hardware.display.DisplayManager;
 import android.os.Trace;
 import android.util.AttributeSet;
 import android.util.TypedValue;
 import android.view.Display;
-import android.view.DisplayInfo;
 import android.view.Gravity;
 import android.view.MotionEvent;
 import android.view.VelocityTracker;
@@ -141,6 +139,7 @@
      */
     private boolean mHasEverTouchedTheTop;
     private boolean mIsTouchDisabledForDismissAnimation;
+    private boolean mIsTouchDisabledForSuppressLayout;
 
     private final Scroller mScroller;
     private final EdgeEffect mEdgeGlowBottom;
@@ -406,7 +405,8 @@
     }
 
     private boolean shouldStartDrag(MotionEvent event) {
-        if (mIsTouchDisabledForDismissAnimation) return false;
+        if (mIsTouchDisabledForDismissAnimation || mIsTouchDisabledForSuppressLayout) return false;
+
 
         if (mIsBeingDragged) {
             mIsBeingDragged = false;
@@ -442,7 +442,7 @@
 
     @Override
     public boolean onTouchEvent(MotionEvent event) {
-        if (mIsTouchDisabledForDismissAnimation) return true;
+        if (mIsTouchDisabledForDismissAnimation || mIsTouchDisabledForSuppressLayout) return true;
 
         final int action = event.getAction();
 
@@ -842,7 +842,7 @@
             if (mIsTwoPanel) {
                 // Only show the EdgeEffect on the bottom of the ScrollView.
                 mEdgeGlowBottom.setSize(mScrollView.getWidth(), height);
-                if (isLayoutRtl()) {
+                if (getLayoutDirection() == View.LAYOUT_DIRECTION_RTL) {
                     canvas.translate(mPhotoViewContainer.getWidth(), 0);
                 }
             } else {
@@ -858,7 +858,7 @@
             final int restoreCount = canvas.save();
             if (mIsTwoPanel) {
                 mEdgeGlowTop.setSize(mScrollView.getWidth(), height);
-                if (!isLayoutRtl()) {
+                if (getLayoutDirection() != View.LAYOUT_DIRECTION_RTL) {
                     canvas.translate(mPhotoViewContainer.getWidth(), 0);
                 }
             } else {
@@ -992,7 +992,7 @@
         }
 
         // The pivot point for scaling should be middle of the starting side.
-        if (isLayoutRtl()) {
+        if (getLayoutDirection() == View.LAYOUT_DIRECTION_RTL) {
             mLargeTextView.setPivotX(mLargeTextView.getWidth());
         } else {
             mLargeTextView.setPivotX(0);
@@ -1032,14 +1032,14 @@
      * finishes moving into its target location/size.
      */
     private void calculateCollapsedLargeTitlePadding() {
-        final Rect largeTextViewRect = new Rect();
-        mToolbar.getBoundsOnScreen(largeTextViewRect);
-        final Rect invisiblePlaceholderTextViewRect = new Rect();
-        mInvisiblePlaceholderTextView.getBoundsOnScreen(invisiblePlaceholderTextViewRect);
+        int invisiblePlaceHolderLocation[] = new int[2];
+        int largeTextViewRectLocation[] = new int[2];
+        mInvisiblePlaceholderTextView.getLocationOnScreen(invisiblePlaceHolderLocation);
+        mToolbar.getLocationOnScreen(largeTextViewRectLocation);
         // Distance between top of toolbar to the center of the target rectangle.
-        final int desiredTopToCenter = (
-                invisiblePlaceholderTextViewRect.top + invisiblePlaceholderTextViewRect.bottom)
-                / 2 - largeTextViewRect.top;
+        final int desiredTopToCenter = invisiblePlaceHolderLocation[1]
+                + mInvisiblePlaceholderTextView.getHeight() / 2
+                - largeTextViewRectLocation[1];
         // Padding needed on the mLargeTextView so that it has the same amount of
         // padding as the target rectangle.
         mCollapsedTitleBottomMargin = desiredTopToCenter - mLargeTextView.getHeight() / 2;
@@ -1239,7 +1239,7 @@
      * Similar to a {@link android.view.animation.AccelerateInterpolator} in the sense that
      * getInterpolation() is a quadratic function.
      */
-    private static class AcceleratingFlingInterpolator implements Interpolator {
+    private class AcceleratingFlingInterpolator implements Interpolator {
 
         private final float mStartingSpeedPixelsPerFrame;
         private final float mDurationMs;
@@ -1271,9 +1271,9 @@
         }
 
         private float getRefreshRate() {
-            DisplayInfo di = DisplayManagerGlobal.getInstance().getDisplayInfo(
-                    Display.DEFAULT_DISPLAY);
-            return di.refreshRate;
+            final DisplayManager displayManager = (DisplayManager) MultiShrinkScroller
+                    .this.getContext().getSystemService(Context.DISPLAY_SERVICE);
+            return displayManager.getDisplay(Display.DEFAULT_DISPLAY).getRefreshRate();
         }
 
         public long getFrameIntervalMs() {
@@ -1286,12 +1286,6 @@
      * space at the bottom of this ViewGroup.
      */
     public void prepareForShrinkingScrollChild(int heightDelta) {
-        // The Transition framework may suppress layout on the scene root and its children. If
-        // mScrollView has its layout suppressed, user scrolling interactions will not display
-        // correctly. By turning suppress off for mScrollView, mScrollView properly adjusts its
-        // graphics as the user scrolls during the transition.
-        mScrollView.suppressLayout(false);
-
         final int newEmptyScrollViewSpace = -getOverflowingChildViewSize() + heightDelta;
         if (newEmptyScrollViewSpace > 0 && !mIsTwoPanel) {
             final int newDesiredToolbarHeight = Math.min(getToolbarHeight()
@@ -1301,11 +1295,13 @@
         }
     }
 
-    public void prepareForExpandingScrollChild() {
-        // The Transition framework may suppress layout on the scene root and its children. If
-        // mScrollView has its layout suppressed, user scrolling interactions will not display
-        // correctly. By turning suppress off for mScrollView, mScrollView properly adjusts its
-        // graphics as the user scrolls during the transition.
-        mScrollView.suppressLayout(false);
+    /**
+     * If {@param areTouchesDisabled} is TRUE, ignore all of the user's touches.
+     */
+    public void setDisableTouchesForSuppressLayout(boolean areTouchesDisabled) {
+        // The card expansion animation uses the Transition framework's ChangeBounds API. This
+        // invokes suppressLayout(true) on the MultiShrinkScroller. As a result, we need to avoid
+        // all layout changes during expansion in order to avoid weird layout artifacts.
+        mIsTouchDisabledForSuppressLayout = areTouchesDisabled;
     }
 }
diff --git a/src/com/android/contacts/widget/PinnedHeaderListDemoActivity.java b/src/com/android/contacts/widget/PinnedHeaderListDemoActivity.java
index 027cc9d..bc9f07e 100644
--- a/src/com/android/contacts/widget/PinnedHeaderListDemoActivity.java
+++ b/src/com/android/contacts/widget/PinnedHeaderListDemoActivity.java
@@ -28,6 +28,7 @@
 import android.widget.TextView;
 
 import com.android.contacts.R;
+import com.android.contacts.common.activity.RequestPermissionsActivity;
 import com.android.contacts.common.list.PinnedHeaderListAdapter;
 
 /**
@@ -98,6 +99,9 @@
     @Override
     protected void onCreate(Bundle bundle) {
         super.onCreate(bundle);
+        if (RequestPermissionsActivity.startPermissionActivity(this)) {
+            return;
+        }
 
         setContentView(R.layout.pinned_header_list_demo);
 
diff --git a/src/com/android/contactsbind/HelpUtils.java b/src/com/android/contactsbind/HelpUtils.java
new file mode 100644
index 0000000..edec35a
--- /dev/null
+++ b/src/com/android/contactsbind/HelpUtils.java
@@ -0,0 +1,40 @@
+/*
+ * 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.contactsbind;
+
+import android.app.Activity;
+
+/**
+ * Utility for starting help and feedback activity. This stub class is designed to be overwritten
+ * by an overlay.
+ */
+public class HelpUtils {
+
+    /**
+     * Returns {@code TRUE} if {@link @launchHelpAndFeedbackForMainScreen} and
+     * {@link @launchHelpAndFeedbackForContactScreen} are implemented to start help and feedback
+     * activities.
+     */
+    public static boolean isHelpAndFeedbackAvailable() {
+        return false;
+    }
+
+    public static void launchHelpAndFeedbackForMainScreen(Activity activity) { }
+
+    public static void launchHelpAndFeedbackForContactScreen(Activity activity) { }
+
+}
diff --git a/tests/Android.mk b/tests/Android.mk
index 241ff5e..880f62f 100644
--- a/tests/Android.mk
+++ b/tests/Android.mk
@@ -6,10 +6,12 @@
 LOCAL_CERTIFICATE := shared
 
 LOCAL_JAVA_LIBRARIES := android.test.runner
-LOCAL_STATIC_JAVA_LIBRARIES := com.android.contacts.common.test
+
+src_dirs := src \
+    ../../ContactsCommon/TestCommon/src 
 
 # Include all test java files.
-LOCAL_SRC_FILES := $(call all-java-files-under, src)
+LOCAL_SRC_FILES := $(call all-java-files-under, $(src_dirs))
 
 LOCAL_PACKAGE_NAME := ContactsTests
 
diff --git a/tests/res/values/donottranslate_strings.xml b/tests/res/values/donottranslate_strings.xml
index 52ccc92..c1d4626 100644
--- a/tests/res/values/donottranslate_strings.xml
+++ b/tests/res/values/donottranslate_strings.xml
@@ -20,13 +20,6 @@
 
     <string-array name="allIntents">
         <!-- List modes -->
-        <item>LIST_DEFAULT</item>
-        <item>LIST_ALL_CONTACTS_ACTION</item>
-        <item>LIST_CONTACTS_WITH_PHONES_ACTION (deprecated)</item>
-        <item>LIST_STARRED_ACTION</item>
-        <item>LIST_FREQUENT_ACTION</item>
-        <item>LIST_STREQUENT_ACTION</item>
-        <item>LIST_GROUP_ACTION</item>
         <item>VIEW (content uri without any id)</item>
         <item>ACTION_PICK: contact</item>
         <item>ACTION_PICK: contact (legacy)</item>
diff --git a/tests/src/com/android/contacts/activities/PeopleActivityTest.java b/tests/src/com/android/contacts/activities/PeopleActivityTest.java
index 0fbd312..bb463e8 100644
--- a/tests/src/com/android/contacts/activities/PeopleActivityTest.java
+++ b/tests/src/com/android/contacts/activities/PeopleActivityTest.java
@@ -90,8 +90,7 @@
         InjectedServices services = new InjectedServices();
         services.setContentResolver(mContext.getContentResolver());
         services.setSharedPreferences(new MockSharedPreferences());
-        services.setSystemService(ContactPhotoManager.CONTACT_PHOTO_SERVICE,
-                new MockContactPhotoManager());
+        ContactPhotoManager.injectContactPhotoManagerForTesting(new MockContactPhotoManager());
         AccountType accountType = new BaseAccountType() {
             @Override
             public boolean areContactsWritable() {
@@ -117,8 +116,8 @@
     private void expectProviderStatusQueryAndReturnNormal() {
         mContactsProvider
                 .expectQuery(ProviderStatus.CONTENT_URI)
-                .withProjection(ProviderStatus.STATUS, ProviderStatus.DATA1)
-                .returnRow(ProviderStatus.STATUS_NORMAL, null)
+                .withProjection(ProviderStatus.STATUS)
+                .returnRow(ProviderStatus.STATUS_NORMAL)
                 .anyNumberOfTimes();
     }
 
diff --git a/src/com/android/contacts/interactions/TestLoaderManager.java b/tests/src/com/android/contacts/interactions/TestLoaderManager.java
similarity index 69%
rename from src/com/android/contacts/interactions/TestLoaderManager.java
rename to tests/src/com/android/contacts/interactions/TestLoaderManager.java
index a85bf8f..3e0db63 100644
--- a/src/com/android/contacts/interactions/TestLoaderManager.java
+++ b/tests/src/com/android/contacts/interactions/TestLoaderManager.java
@@ -16,7 +16,6 @@
 
 package com.android.contacts.interactions;
 
-import android.app.Activity;
 import android.app.LoaderManager;
 import android.content.AsyncTaskLoader;
 import android.content.Loader;
@@ -34,59 +33,10 @@
 import java.util.List;
 
 /**
- * A {@link LoaderManager} that records which loaders have been completed.
- * <p>
- * You should wrap the existing LoaderManager with an instance of this class, which will then
- * delegate to the original object.
- * <p>
- * Typically, one would override {@link Activity#getLoaderManager()} to return the
- * TestLoaderManager and ensuring it wraps the {@link LoaderManager} for this object, e.g.:
- * <pre>
- *   private TestLoaderManager mTestLoaderManager;
- *
- *   public LoaderManager getLoaderManager() {
- *     LoaderManager loaderManager = super.getLoaderManager();
- *     if (mTestLoaderManager != null) {
- *       mTestLoaderManager.setDelegate(loaderManager);
- *       return mTestLoaderManager;
- *     } else {
- *       return loaderManager;
- *     }
- *   }
- *
- *   void setTestLoaderManager(TestLoaderManager testLoaderManager) {
- *     mTestLoaderManager = testLoaderManager;
- *   }
- * </pre>
- * In the tests, one would set the TestLoaderManager upon creating the activity, and then wait for
- * the loader to complete.
- * <pre>
- *   public void testLoadedCorrect() {
- *     TestLoaderManager testLoaderManager = new TestLoaderManager();
- *     getActivity().setTestLoaderManager(testLoaderManager);
- *     runOnUiThread(new Runnable() { public void run() { getActivity().startLoading(); } });
- *     testLoaderManager.waitForLoader(R.id.test_loader_id);
- *   }
- * </pre>
- * If the loader completes before the call to {@link #waitForLoaders(int...)}, the TestLoaderManager
- * will have stored the fact that the loader has completed and correctly terminate immediately.
- * <p>
- * It one needs to wait for the same loader multiple times, call {@link #reset()} between the them
- * as in:
- * <pre>
- *   public void testLoadedCorrect() {
- *     TestLoaderManager testLoaderManager = new TestLoaderManager();
- *     getActivity().setTestLoaderManager(testLoaderManager);
- *     runOnUiThread(new Runnable() { public void run() { getActivity().startLoading(); } });
- *     testLoaderManager.waitForLoader(R.id.test_loader_id);
- *     testLoaderManager.reset();
- *     // Load and wait again.
- *     runOnUiThread(new Runnable() { public void run() { getActivity().startLoading(); } });
- *     testLoaderManager.waitForLoader(R.id.test_loader_id);
- *   }
- * </pre>
+ * This implementation of TestLoaderManagerBase uses hidden APIs and must therefore
+ * be kept outside of the main Contacts apk.
  */
-public class TestLoaderManager extends LoaderManager {
+public class TestLoaderManager extends TestLoaderManagerBase {
     private static final String TAG = "TestLoaderManager";
 
     private final HashSet<Integer> mFinishedLoaders;
@@ -127,7 +77,7 @@
      * not wait for it to complete again.
      */
     @VisibleForTesting
-    /*package*/ synchronized void waitForLoaders(int... loaderIds) {
+    public synchronized void waitForLoaders(int... loaderIds) {
         List<Loader<?>> loaders = new ArrayList<Loader<?>>(loaderIds.length);
         for (int loaderId : loaderIds) {
             if (mFinishedLoaders.contains(loaderId)) {
diff --git a/tests/src/com/android/contacts/tests/allintents/AllIntentsActivity.java b/tests/src/com/android/contacts/tests/allintents/AllIntentsActivity.java
index 910fb5c..fcd3e8b 100644
--- a/tests/src/com/android/contacts/tests/allintents/AllIntentsActivity.java
+++ b/tests/src/com/android/contacts/tests/allintents/AllIntentsActivity.java
@@ -39,7 +39,6 @@
 import android.provider.ContactsContract.Data;
 import android.provider.ContactsContract.Intents;
 import android.provider.ContactsContract.Intents.Insert;
-import android.provider.ContactsContract.Intents.UI;
 import android.provider.ContactsContract.RawContacts;
 import android.view.View;
 import android.widget.ArrayAdapter;
@@ -67,13 +66,6 @@
             "com.android.contacts.activities.PeopleActivity";
 
     public enum ContactsIntent {
-        LIST_DEFAULT,
-        LIST_ALL_CONTACTS_ACTION,
-        LIST_CONTACTS_WITH_PHONES_ACTION,
-        LIST_STARRED_ACTION,
-        LIST_FREQUENT_ACTION,
-        LIST_STREQUENT_ACTION,
-        LIST_GROUP_ACTION,
         VIEW_CONTACT_WITHOUT_ID,
         ACTION_PICK_CONTACT,
         ACTION_PICK_CONTACT_LEGACY,
@@ -149,41 +141,6 @@
         super.onListItemClick(l, v, position, id);
 
         switch (ContactsIntent.get(position)) {
-            case LIST_DEFAULT: {
-                startContactListActivity(
-                        new Intent(UI.LIST_DEFAULT, Contacts.CONTENT_URI));
-                break;
-            }
-            case LIST_ALL_CONTACTS_ACTION: {
-                startContactListActivity(
-                        new Intent(UI.LIST_ALL_CONTACTS_ACTION, Contacts.CONTENT_URI));
-                break;
-            }
-            case LIST_CONTACTS_WITH_PHONES_ACTION: {
-                startContactListActivity(
-                        new Intent(UI.LIST_CONTACTS_WITH_PHONES_ACTION, Contacts.CONTENT_URI));
-                break;
-            }
-            case LIST_STARRED_ACTION: {
-                startContactListActivity(
-                        new Intent(UI.LIST_STARRED_ACTION, Contacts.CONTENT_URI));
-                break;
-            }
-            case LIST_FREQUENT_ACTION: {
-                startContactListActivity(
-                        new Intent(UI.LIST_FREQUENT_ACTION, Contacts.CONTENT_URI));
-                break;
-            }
-            case LIST_STREQUENT_ACTION: {
-                startContactListActivity(
-                        new Intent(UI.LIST_STREQUENT_ACTION, Contacts.CONTENT_URI));
-                break;
-            }
-            case LIST_GROUP_ACTION: {
-                startContactListActivity(
-                        new Intent(UI.LIST_GROUP_ACTION, Contacts.CONTENT_URI));
-                break;
-            }
             case ACTION_PICK_CONTACT: {
                 startContactSelectionActivityForResult(
                         new Intent(Intent.ACTION_PICK, Contacts.CONTENT_URI));
@@ -566,15 +523,6 @@
         return intent;
     }
 
-    private Intent buildFilterIntent(int actionCode, boolean legacy) {
-        Intent intent = new Intent(UI.FILTER_CONTACTS_ACTION);
-        intent.putExtra(UI.FILTER_TEXT_EXTRA_KEY, "A");
-//        ContactsRequest request = new ContactsRequest();
-//        request.setActionCode(actionCode);
-//        intent.putExtra("originalRequest", request);
-        return intent;
-    }
-
     private void startContactListActivity(Intent intent) {
         bindIntentToClass(intent, CONTACT_LIST_ACTIVITY_CLASS_NAME);
         intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
@@ -652,16 +600,16 @@
         switch (ContactsIntent.get(tag)) {
             case EDIT_NEW_CONTACT_FOR_ACCOUNT: {
                 final Intent intent = new Intent(Intent.ACTION_INSERT, Contacts.CONTENT_URI);
-                intent.putExtra(Insert.ACCOUNT, account);
-                intent.putExtra(Insert.DATA_SET, dataSet);
+                intent.putExtra(Insert.EXTRA_ACCOUNT, account);
+                intent.putExtra(Insert.EXTRA_DATA_SET, dataSet);
                 startActivity(intent);
                 break;
             }
             case EDIT_NEW_CONTACT_FOR_ACCOUNT_WITH_DATA: {
                 final Intent intent = new Intent(Intent.ACTION_INSERT, Contacts.CONTENT_URI);
 
-                intent.putExtra(Insert.ACCOUNT, account);
-                intent.putExtra(Insert.DATA_SET, dataSet);
+                intent.putExtra(Insert.EXTRA_ACCOUNT, account);
+                intent.putExtra(Insert.EXTRA_DATA_SET, dataSet);
                 putDataExtra(intent);
 
                 startActivity(intent);